4.10 风格代价函数-深度学习第四课《卷积神经网络》-Stanford吴恩达教授
| 4.9 內容代價函數 | 回到目錄 | 4.11 一維到三維推廣 |
風格代價函數 (Style Cost Function)
在上節(jié)視頻中,我們學習了如何為神經風格遷移定義內容代價函數,這節(jié)課我們來了解風格代價函數。那么圖片的風格到底是什么意思呢?
這么說吧,比如你有這樣一張圖片,你可能已經對這個計算很熟悉了,它能算出這里是否含有不同隱藏層。現在你選擇了某一層 lll (編號1),比如這一層去為圖片的風格定義一個深度測量,現在我們要做的就是將圖片的風格定義為 lll 層中各個通道之間激活項的相關系數。
我來詳細解釋一下,現在你將 lll 層的激活項取出,這是個 nH?nW?ncn_H*n_W*n_cnH??nW??nc? 的激活項,它是一個三維的數據塊。現在問題來了,如何知道這些不同通道之間激活項的相關系數呢?
為了解釋這些聽起來很含糊不清的詞語,現在注意這個激活塊,我把它的不同通道渲染成不同的顏色。在這個例子中,假如我們有5個通道為了方便講解,我將它們染成了五種顏色。一般情況下,我們在神經網絡中會有許多通道,但這里只用5個通道,會更方便我們理解。
為了能捕捉圖片的風格,你需要進行下面這些操作,首先,先看前兩個通道,前兩個通道(編號1、2)分別是圖中的紅色和黃色部分,那我們該如何計算這兩個通道間激活項的相關系數呢?
舉個例子,在視頻的左下角在第一個通道中含有某個激活項,第二個通道也含有某個激活項,于是它們組成了一對數字(編號1所示)。然后我們再看看這個激活項塊中其他位置的激活項,它們也分別組成了很多對數字(編號2,3所示),分別來自第一個通道,也就是紅色通道和第二個通道,也就是黃色通道。現在我們得到了很多個數字對,當我們取得這兩個 nH?nWn_H*n_WnH??nW? 的通道中所有的數字對后,現在該如何計算它們的相關系數呢?它是如何決定圖片風格的呢?
我們來看一個例子,這是之前視頻中的一個可視化例子,它來自一篇論文,作者是Matthew Zeile和Rob Fergus 我之前有提到過。我們知道,這個紅色的通道(編號1)對應的是這個神經元,它能找出圖片中的特定位置是否含有這些垂直的紋理(編號3),而第二個通道也就是黃色的通道(編號2),對應這個神經元(編號4),它可以粗略地找出橙色的區(qū)域。什么時候兩個通道擁有高度相關性呢?如果它們有高度相關性,那么這幅圖片中出現垂直紋理的地方(編號2),那么這塊地方(編號4)很大概率是橙色的。如果說它們是不相關的,又是什么意思呢?顯然,這意味著圖片中有垂直紋理的地方很大概率不是橙色的。而相關系數描述的就是當圖片某處出現這種垂直紋理時,該處又同時是橙色的可能性。
相關系數這個概念為你提供了一種去測量這些不同的特征的方法,比如這些垂直紋理,這些橙色或是其他的特征去測量它們在圖片中的各個位置同時出現或不同時出現的頻率。
如果我們在通道之間使用相關系數來描述通道的風格,你能做的就是測量你的生成圖像中第一個通道(編號1)是否與第二個通道(編號2)相關,通過測量,你能得知在生成的圖像中垂直紋理和橙色同時出現或者不同時出現的頻率,這樣你將能夠測量生成的圖像的風格與輸入的風格圖像的相似程度。
現在我們來證實這種說法,對于這兩個圖像,也就是風格圖像與生成圖像,你需要計算一個風格矩陣,說得更具體一點就是用 lll 層來測量風格。
我們設 ai,j,k[l]a^{[l]}_{i,j,k}ai,j,k[l]? ,設它為隱藏層 lll 中 (i,j,k)(i,j,k)(i,j,k) 位置的激活項, i,j,ki,j,ki,j,k 分別代表該位置的高度、寬度以及對應的通道數。現在你要做的就是去計算一個關于 lll 層和風格圖像的矩陣,即 G[l]SG^{[l]S}G[l]S ( lll 表示層數, SSS 表示風格圖像),這( G[l]SG^{[l]S}G[l]S )是一個 nc?ncn_c*n_cnc??nc? 的矩陣,同樣地,我們也對生成的圖像進行這個操作。
但是現在我們先來定義風格圖像,設這個關于 lll 層和風格圖像的, GGG 是一個矩陣,這個矩陣的高度和寬度都是 lll 層的通道數。在這個矩陣中 kkk 和 k′k'k′ 元素被用來描述通道 kkk 和 k′k'k′ 通道之間的相關系數。具體地:
Gkk′[l](S)=∑i=1nH[l]∑j=1nW[l]ai,j,k[l](S)ai,j,k′[l](S)G^{[l](S)}_{kk'}=\sum_{i=1}^{n_H^{[l]}}\sum_{j=1}^{n_W^{[l]}}a^{[l](S)}_{i,j,k}a^{[l](S)}_{i,j,k'}Gkk′[l](S)?=∑i=1nH[l]??∑j=1nW[l]??ai,j,k[l](S)?ai,j,k′[l](S)?
用符號 i,ji,ji,j 表示下界,對 i,j,ki,j,ki,j,k 位置的激活項 ai,j,k[l]a^{[l]}_{i,j,k}ai,j,k[l]? ,乘以同樣位置的激活項,也就是i,j,k′i,j,k'i,j,k′位置的激活項,即 ai,j,k′[l]a^{[l]}_{i,j,k'}ai,j,k′[l]? ,將它們兩個相乘。然后 iii 和 jjj 分別加到 lll 層的高度和寬度,即 nH[l]n_H^{[l]}nH[l]? 和 nW[l]n_W^{[l]}nW[l]? ,將這些不同位置的激活項都加起來。 (i,j,k)(i,j,k)(i,j,k) 和 (i,j,k′)(i,j,k')(i,j,k′) 中 xxx 坐標和 yyy 坐標分別對應高度和寬度,將 kkk 通道和 k′k'k′ 通道上這些位置的激活項都進行相乘。我一直以來用的這個公式,嚴格來說,它是一種非標準的互相關函數,因為我們沒有減去平均數,而是將它們直接相乘。
這就是輸入的風格圖像所構成的風格矩陣,然后,我們再對生成圖像做同樣的操作。
Gkk′[l](G)=∑i=1nH[l]∑j=1nW[l]ai,j,k[l](G)ai,j,k′[l](G)G^{[l](G)}_{kk'}=\sum_{i=1}^{n_H^{[l]}}\sum_{j=1}^{n_W^{[l]}}a^{[l](G)}_{i,j,k}a^{[l](G)}_{i,j,k'}Gkk′[l](G)?=∑i=1nH[l]??∑j=1nW[l]??ai,j,k[l](G)?ai,j,k′[l](G)?
ai,j,k[l](S)a^{[l](S)}_{i,j,k}ai,j,k[l](S)? 和 ai,j,k[l](G)a^{[l](G)}_{i,j,k}ai,j,k[l](G)? 中的上標 (S)(S)(S) 和 (G)(G)(G) 分別表示在風格圖像 SSS 中的激活項和在生成圖像 GGG 的激活項。我們之所以用大寫字母 GGG 來代表這些風格矩陣,是因為在線性代數中這種矩陣有時也叫Gram矩陣,但在這里我只把它們叫做風格矩陣。
所以你要做的就是計算出這張圖像的風格矩陣,以便能夠測量出剛才所說的這些相關系數。更正規(guī)地來表示,我們用 ai,j,k[l]a^{[l]}_{i,j,k}ai,j,k[l]? 來記錄相應位置的激活項,也就是 lll 層中的 i,j,ki,j,ki,j,k 位置,所以 iii 代表高度, jjj 代表寬度, kkk 代表著 lll 中的不同通道。之前說過,我們有5個通道,所以 kkk 就代表這五個不同的通道。
對于這個風格矩陣,你要做的就是計算這個矩陣也就是 G[l]G^{[l]}G[l] 矩陣,它是個 nc?ncn_c*n_cnc??nc? 的矩陣,也就是一個方陣。記住,因為這里有 ncn_cnc? 個通道,所以矩陣的大小是 nc?ncn_c*n_cnc??nc? 。以便計算每一對激活項的相關系數,所以 Gkk′[l]G^{[l]}_{kk'}Gkk′[l]? 可以用來測量 kkk 通道與 k′k'k′ 通道中的激活項之間的相關系數, kkk 和 k′k'k′ 會在1到 ncn_cnc? 之間取值, ncn_cnc? 就是 lll 層中通道的總數量。
當在計算 G[l]G^{[l]}G[l] 時,我寫下的這個符號(下標 kk′kk'kk′ )只代表一種元素,所以我要在右下角標明是 kk′kk'kk′ 元素,和之前一樣, i,ji,ji,j 從一開始往上加,對應 (i,j,k)(i,j,k)(i,j,k) 位置的激活項與對應 (i,j,k′)(i,j,k')(i,j,k′) 位置的激活項相乘。記住,這個 iii 和 jjj 是激活塊中對應位置的坐標,也就是該激活項所在的高和寬,所以 iii 會從1加到 nH[l]n_H^{[l]}nH[l]? , jjj 會從1加到 nW[l]n_W^{[l]}nW[l]? , kkk 和 k′k'k′ 則表示對應的通道,所以 kkk 和 k′k'k′ 值的范圍是從1開始到這個神經網絡中該層的通道數量 nC[l]n_C^{[l]}nC[l]? 。這個式子就是把圖中各個高度和寬度的激活項都遍歷一遍,并將 kkk 和 k′k'k′ 通道中對應位置的激活項都進行相乘,這就是 Gkk′[l]G^{[l]}_{kk'}Gkk′[l]? 的定義。通過對 kkk 和 k′k'k′ 通道中所有的數值進行計算就得到了 GGG 矩陣,也就是風格矩陣。
Gkk′[l]=∑i=1nH[l]∑j=1nW[l]ai,j,k[l]ai,j,k′[l]G^{[l]}_{kk'}=\sum_{i=1}^{n_H^{[l]}}\sum_{j=1}^{n_W^{[l]}}a^{[l]}_{i,j,k}a^{[l]}_{i,j,k'}Gkk′[l]?=∑i=1nH[l]??∑j=1nW[l]??ai,j,k[l]?ai,j,k′[l]?
要注意,如果兩個通道中的激活項數值都很大,那么 Gkk′[l]G^{[l]}_{kk'}Gkk′[l]? 也會變得很大,對應地,如果他們不相關那么 Gkk′[l]G^{[l]}_{kk'}Gkk′[l]? 就會很小。嚴格來講,我一直使用這個公式來表達直覺想法,但它其實是一種非標準的互協方差,因為我們并沒有減去均值而只是把這些元素直接相乘,這就是計算圖像風格的方法。
Gkk′[l](S)=∑i=1nH[l]∑j=1nW[l]ai,j,k[l](S)ai,j,k′[l](S)G^{[l](S)}_{kk'}=\sum_{i=1}^{n_H^{[l]}}\sum_{j=1}^{n_W^{[l]}}a^{[l](S)}_{i,j,k}a^{[l](S)}_{i,j,k'}Gkk′[l](S)?=∑i=1nH[l]??∑j=1nW[l]??ai,j,k[l](S)?ai,j,k′[l](S)?
你要同時對風格圖像 SSS 和生成圖像 GGG 都進行這個運算,為了區(qū)分它們,我們在它的右上角加一個 (S)(S)(S) ,表明它是風格圖像 SSS ,這些都是風格圖像 SSS 中的激活項,之后你需要對生成圖像也做相同的運算。
Gkk′[l](G)=∑i=1nH[l]∑j=1nW[l]ai,j,k[l](G)ai,j,k′[l](G)G^{[l](G)}_{kk'}=\sum_{i=1}^{n_H^{[l]}}\sum_{j=1}^{n_W^{[l]}}a^{[l](G)}_{i,j,k}a^{[l](G)}_{i,j,k'}Gkk′[l](G)?=∑i=1nH[l]??∑j=1nW[l]??ai,j,k[l](G)?ai,j,k′[l](G)?
和之前一樣,再把公式都寫一遍,把這些都加起來,為了區(qū)分它是生成圖像,在這里放一個 (G)(G)(G) 。
現在,我們有2個矩陣,分別從風格圖像 SSS 和生成圖像 GGG 。
再提醒一下,我們一直使用大寫字母 GGG 來表示矩陣,是因為在線性代數中,這種矩陣被稱為Gram矩陣,但在本視頻中我把它叫做風格矩陣,我們取了Gram矩陣的首字母 GGG 來表示這些風格矩陣。
最后,如果我們將 SSS 和 GGG 代入到風格代價函數中去計算,這將得到這兩個矩陣之間的誤差,因為它們是矩陣,所以在這里加一個 FFF (Frobenius范數,編號1所示),這實際上是計算兩個矩陣對應元素相減的平方的和,我們把這個式子展開,從 kkk 和 k′k'k′ 開始作它們的差,把對應的式子寫下來,然后把得到的結果都加起來,作者在這里使用了一個歸一化常數,也就是 12nH[l]nW[l]nc[l]\frac{1}{2n_H^{[l]}n_W^{[l]}n_c^{[l]}}2nH[l]?nW[l]?nc[l]?1? ,再在外面加一個平方,但是一般情況下你不用寫這么多,一般我們只要將它乘以一個超參數 β\betaβ 就行。
最后,這是對層定義的風格代價函數,和之前你見到的一樣,這是兩個矩陣間一個基本的Frobenius范數,也就是 SSS 圖像和 GGG 圖像之間的范數再乘上一個歸一化常數,不過這不是很重要。實際上,如果你對各層都使用風格代價函數,會讓結果變得更好。如果要對各層都使用風格代價函數,你可以這么定義代價函數,把各個層的結果(各層的風格代價函數)都加起來,這樣就能定義它們全體了。我們還需要對每個層定義權重,也就是一些額外的超參數,我們用 λ[l]\lambda^{[l]}λ[l] 來表示,這樣將使你能夠在神經網絡中使用不同的層,包括之前的一些可以測量類似邊緣這樣的低級特征的層,以及之后的一些能測量高級特征的層,使得我們的神經網絡在計算風格時能夠同時考慮到這些低級和高級特征的相關系數。這樣,在基礎的訓練中你在定義超參數時,可以盡可能的得到更合理的選擇。
為了把這些東西封裝起來,你現在可以定義一個全體代價函數:
J(G)=αJcontent(C,G)+βJstyle(S,G)J(G)=\alpha J_{content}(C,G)+\beta J_{style}(S,G)J(G)=αJcontent?(C,G)+βJstyle?(S,G)
之后用梯度下降法,或者更復雜的優(yōu)化算法來找到一個合適的圖像 GGG ,并計算 J(G)J(G)J(G) 的最小值,這樣的話,你將能夠得到非常好看的結果,你將能夠得到非常漂亮的結果。
這節(jié)神經風格遷移的內容就講到這里,希望你能愉快地在本周的基礎訓練中進行實踐。在本周結束之前,還有最后一節(jié)內容想告訴你們,就是如何對1D和3D的數據進行卷積,之前我們處理的都是2D圖片,我們下節(jié)視頻再見。
課程板書
| 4.9 內容代價函數 | 回到目錄 | 4.11 一維到三維推廣 |
《新程序員》:云原生和全面數字化實踐50位技術專家共同創(chuàng)作,文字、視頻、音頻交互閱讀
總結
以上是生活随笔為你收集整理的4.10 风格代价函数-深度学习第四课《卷积神经网络》-Stanford吴恩达教授的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 4.9 内容代价函数-深度学习第四课《卷
- 下一篇: 4.11 一维到三维推广-深度学习第四课