期刊:IEEE SIGNAL PROCESSING LETTERS
作者:Weixuan Tang, Shunquan Tan, Bin Li, Jiwu Huang
Notes:早期將GAN用於steganography的眾多算法中,個人認為這篇2017年的論文是把steganography的邏輯在GAN框架中實現的最精致的。為什么說精致,因為論文中整個算法邏輯很清晰、有一定的創新點、結構緊湊。相比於其他早期利用GAN做steganography的論文中利用GAN生成圖像后做steganography,這篇論文首次利用GAN的對抗理論來學習出隱寫失真,算是將GAN的理論剝離出來再應用在steganography中的首次突破。由於基於深度學習的隱寫分析的發展,Xu-Net、Ye-Net、SRNet等基於深度學習的隱寫分析算法紛紛出現,這也就為設計基於GAN的隱寫算法提供了現成的優質組件,因此這篇文章GAN中的判別器直接用了Xu-Net。

1. 解讀貢獻點
原文提出了自動隱寫失真學習框架(automatic steganographic distortion learning framework with GAN, ASDL-GAN),利用GAN的對抗理論,在訓練中學習判別器中隱寫分析算法的隱式特征,反饋給生成器用來生成失真概率圖。因此,原文也表示ASDL-GAN是在模擬加性失真的隱寫算法(steganography with additive distortion)和基於深度學習的隱寫分析之間的對抗過程。個人認為“模擬”應該是這篇論文的核心思想。
2. 解讀原文方法
原文采用了PL(payload limited)的模式,即在限定一定的嵌入信息負載的同時,最小化隱寫失真。在常規的隱寫算法中,首先通常需要定義一個加性失真函數:
\(D(\mathtt{X},\mathtt{Y})= \sum^{H}_{i=1} \sum^{W}_{j=1} \rho_{i,j}|x_{i,j}-y_{i,j}|\)
其中\(\mathtt{X}=(x_{i,j})^{H×W}\) 和\(\mathtt{Y}=(y_{i,j})^{H×W}\) 分別代表原始載體cover和含密載體stego。\(\rho_{i,j}\)是將像素點從\(x_{i,j}\)修改為\(y_{i,j}\)的代價(cost)。對於像HUGO,S-UNIWARD這樣的空域隱寫算法來講,分別有各自特定的代價函數:\(\varrho=(\rho_{i,j})^{H×W}\)。接下來就可以通過最小化失真函數的期望值來得到每個像素點的改寫概率圖\(\mathtt{P}=(p_{i,j})^{H×W}\)。有了這個概率圖,就可以進一步實施隱寫了。那么,為什么原文是將這個過程反過來,先得到概率圖\(\mathtt{P}\),再去計算嵌入代價呢?——“We take the opposite approach, in which the change probabilities P are learnt first and then the corresponding embedding costs ρ can be conversely derived for practical steganographic coding scheme, e.g., Syndrome–Trellis codes”。
首先要從隱寫分析說起,要想有效躲避隱寫分析算法的檢測,就要避免在隱寫分析“重點關注”區域嵌入信息。那么,這個動作直接由改寫概率圖\(\mathtt{P}\)直接決定。換句話說,這個改寫概率圖\(\mathtt{P}\)的准確性直接影響了隱寫分析的分析質量。回到原文的GAN框架中來,要想在GAN中實現隱寫和隱寫分析的對抗,那么這個改寫概率圖\(\mathtt{P}\)無疑是二者之間的紐帶,通過GAN框架來訓練出合適的生成器,最終使輸出的改寫概率圖\(\mathtt{P}\)達到更安全的水平,就實現了利用GAN隱寫的邏輯。
有了改寫概率圖\(\mathtt{P}\)這個關鍵的紐帶,下一步要做的就是把生成器和這個改寫概率圖\(\mathtt{P}\)聯系起來。既然上面說過可以從代價函數\(\varrho\)推導出改寫概率圖\(\mathtt{P}\),那么反過來也就可以從改寫概率圖\(\mathtt{P}\)反推出代價函數\(\varrho\),這一點在邏輯上也是成立的。在進一步,可以在GAN中通過設計Loss函數來代表代價函數\(\varrho\),這樣,也就解釋了原文的這個巧妙設計。
那么問題又來了,怎么才能在GAN的框架中定義Loss函數來代表代價函數\(\varrho\)呢?
很簡單,由於有現成的CNN-based隱寫分析框架Xu-Net作為判別器,那么判別器的Loss也就自然可以作為代價函數\(\varrho\)了。因此,就得到了生成器的第一個Loss函數:\(l_G^1=-l_D\)。那么,現在最小化失真的思路打通了,接下來就是模擬一定負載率嵌入的過程了。
這里原文采用了三段嵌入模式(ternary embedding scheme),即嵌入單位為\(\phi ∈ \{+1, −1, 0\}\),則將\(x_{i,j}\)修改為\(x_{i,j}+\phi\)的概率定義為\(p_{i,j}^\phi\)。根據最大熵原則,\(p^{+1}_{i,j} =p^{-1}_{i,j} =p_{i,j}/2\),\(p^{0}_{i,j} =1-p_{i,j}\)。則隱寫負載(原文叫做capacity,實際上為信息熵)可以得出:
\(\mathtt{capacity}=\displaystyle \sum^{H}_{i=1}\displaystyle \sum^{W}_{j=1}( -p^{+1}_{i,j} \log_2 p^{+1}_{i,j} - p^{-1}_{i,j} \log_2 p^{-1}_{i,j} - p^{0}_{i,j} \log_2 p^{0}_{i,j})\)
這個capacity作為生成器的限制條件,體現了隱寫的負載。從而也就得到了生成器的另一個Loss函數:\(l_G^2=(\mathtt{capacity}−H×W×q)^2\)。
現在仿佛一切都可以就緒了,可以用GAN來訓練了,但是還有很重要的一點,給隱寫分析器(判別器)輸送的輸入應該是cover和stego,目前這個流程下來還只能得到隱寫概率圖P,接下來就是要設計模擬嵌入的模塊來從之前得到的隱寫概率圖P進一步生成嵌入修改圖(modification map),用來加在cover上,得到stego。實際上,這個過程可以由一個簡單的三段分段函數來實現:
\(m_{i,j}' =\begin{cases} -1, &\text{if } {n_{i,j}<p_{i,j}/2} \\ 1, & \text{if } {n_{i,j}>1-p_{i,j}/2} \\ 0, & \text{otherwise } \end{cases}\)
但是問題又來了,如果直接將模擬嵌入的分段函數放進神經網絡中,由於該函數不連續,那么就無法實現反向傳播了。所以原文設計了一個簡單的全連接網絡TES,將TES預訓練好用來模擬\(m_{i,j}'\)。至此,也就完整實現了ASDL-GAN的完整過程。

3. 解讀實驗
實驗部分ASDL-GAN的主要對比對象是S-UNIWARD算法。可能由於TES、損失函數的設計以及具體網絡參數設定的問題,ASDL-GAN的實驗效果並沒有非常理想。-“However, we have to acknowledge that even with large training iterations, ASDL-GAN is still inferior to state-of-the- art hand-crafted steganographic algorithms, e.g., S-UNIWARD, which may attribute to the lack of training samples. As a large-scale deep-learning framework, ASDL-GAN is hindered by insufficient 40 000 training samples.” 但是,不得不說ASDL-GAN確實是一個不錯的idea。