深度學習筆記(49) 風格代價函數

深度學習筆記(49) 風格代價函數


1. 風格相關係數

在這裏插入圖片描述
比如有這樣一張圖片,可能已經對這個計算很熟悉了,它能算出這裏是否含有不同隱藏層
現在選擇了某一層 ll(編號1),比如這一層去爲圖片的風格定義一個深度測量
現在要做的就是將圖片的風格定義爲 ll 層中各個通道之間激活項的相關係數

現在將 ll 層的激活項取出,這是個nH × nW × nC的激活項,它是一個三維的數據塊

關於不同通道之間激活項的相關係數
現在注意這個激活塊,把它的不同通道渲染成不同的顏色
在這裏插入圖片描述
在這個例子中,假如有5個通道,將它們染成了五種顏色
一般情況下,在神經網絡中會有許多通道
但這裏只用5個通道,會更方便理解

爲了能捕捉圖片的風格,需要進行下面這些操作
首先先看前兩個通道,前兩個通道(編號1、2)分別是圖中的紅色和黃色部分

假設在圖片左下角在第一個通道中含有某個激活項(藍色點),第二個通道也含有某個激活項(藍色點)
於是組成了一對數字(編號1)

在這裏插入圖片描述
然後再看看這個激活項塊中其他位置的激活項,它們也分別組成了很多對數字(編號2,3所示)
分別來自第一個通道(紅色通道)和第二個通道(黃色通道)
現在得到了很多個數字對,當取得這兩個nH × nW的通道中所有的數字對後

在這裏插入圖片描述
紅色的通道(編號1)對應的是這個神經元(編號3),它能找出圖片中的特定位置是否含有這些垂直紋理
黃色的通道(編號2)對應的是這個神經元(編號4),它可以粗略地找出橙色的區域

如果兩個通有高度相關性
那麼圖片中出現垂直紋理的地方,那麼這塊地方很大概率是橙色
如果說它們是不相關的
這意味着圖片中有垂直紋理的地方很大概率不是橙色的

而相關係數描述的就是當圖片某處出現這種垂直紋理時,該處又同時是橙色的可能性

相關係數這個概念提供了一種去測量這些不同的特徵的方法
比如這些垂直紋理和橙色或是其他的特徵去測量它們在圖片中的各個位置同時出現或不同時出現的頻率

如果在通道之間使用相關係數來描述通道的風格,能做的就是:
測量生成圖像中第一個通道(編號1)是否與第二個通道(編號2)相關
通過測量,能得知在生成的圖像中垂直紋理和橙色同時出現或者不同時出現的頻率
這樣將能夠測量生成的圖像的風格與輸入的風格圖像的相似程度


2. 風格矩陣

對於這兩個圖像,也就是風格圖像與生成圖像,需要計算一個風格矩陣
說得更具體一點就是:用 ll 層來測量風格
在這裏插入圖片描述
設ai,j,k[l] 爲隱藏層l中( i, j, k)位置的激活項
i,j,k分別代表該位置的高度、寬度以及對應的通道數

現在要做的就是去計算一個關於 ll 層和風格圖像的矩陣,即G[l](S)(l表示層數,S表示風格圖像)
這G[l](S)是一個nc × nc的矩陣,同樣地,也對生成的圖像進行這個操作G[l](G)

但是現在先來定義風格圖像,設這個關於 ll 層和風格圖像的
G 這個矩陣的高度和寬度都是 ll 層的通道數
在這個矩陣中 k 和 k’ 元素被用來描述 k 通道和 k’ 通道之間的相關係數
在這裏插入圖片描述
用符號i,j表示下界,對i,j,k位置的激活項ai,j,k[l]乘以同樣位置的激活項
也就是 i, j, k’ 位置的激活項,即ai,j,k[l],將它們兩個相乘
然後i和j分別加到l層的高度和寬度,即 nH[l] 和 nW[l]將這些不同位置的激活項都加起來
( i, j, k) 和 ( i, j, k’) 中x座標和y座標分別對應高度和寬度
將 k 通道和 k’ 通道上這些位置的激活項都進行相乘

一直以來用的這個公式,嚴格來說,它是一種非標準的互相關函數
因爲沒有減去平均數,而是將它們直接相乘
在這裏插入圖片描述
這就是輸入的風格圖像所構成的風格矩陣,然後,再對生成圖像做同樣的操作
在這裏插入圖片描述
上標(S)和(G)分別表示在風格圖像S中的激活項和在生成圖像G的激活項

之所以用大寫字母G來代表這些風格矩陣,是因爲在線性代數中這種矩陣有時也叫Gram矩陣
但在這裏只把它們叫做風格矩陣

所以要做的就是計算出這張圖像的風格矩陣,以便能夠測量出剛纔所說的這些相關係數
更正規地來表示,用ai,j,k[l]來記錄相應位置的激活項,也就是l層中的 i, j, k位置
所以 i 代表高度,j 代表寬度,k 代表着l中的不同通道
之前說過,有5個通道,所以 k 就代表這五個不同的通道

對於這個風格矩陣,要做的就是計算這個矩陣也就是G[l] 矩陣,它是個nc×nc的矩陣,也就是一個方陣
記住,因爲這裏有nc個通道,所以矩陣的大小是nc×nc
以便計算每一對激活項的相關係數
所以G(kk’)[l] 可以用來測量 k 通道與 k’ 通道中的激活項之間的相關係數
k 和 k '會在1到nc之間取值,nc就是 ll 層中通道的總數量

要注意,如果兩個通道中的激活項數值都很大,那麼G(kk’)[l]也會變得很大
對應地,如果他們不相關那麼G(kk’)[l]就會很小

在這裏插入圖片描述
嚴格來講,一直使用這個公式來表達直覺想法
但它其實是一種非標準的互協方差,因爲並沒有減去均值而只是把這些元素直接相乘
這就是計算圖像風格的方法


3. 風格代價函數

現在,有2個風格矩陣,分別從風格圖像S和生成圖像G

最後,如果將S和G代入到風格代價函數中去計算,這將得到這兩個矩陣之間的誤差
在這裏插入圖片描述
因爲它們是矩陣,所以在這裏加一個F(Frobenius範數,編號1所示)
這實際上是計算兩個矩陣對應元素相減的平方的和
把這個式子展開,從 k 和 k’ 開始作它們的差,把對應的式子寫下來,然後把得到的結果都加起來
在這裏使用了一個歸一化常數,也就是
在這裏插入圖片描述
再在外面加一個平方
但是一般情況下不用寫這麼多,一般只要將它乘以一個超參數β就行

在這裏插入圖片描述
最後,這是對l層定義的風格代價函數,和之前見到的一樣
這是兩個矩陣間一個基本的Frobenius範數
也就是S圖像和G圖像之間的範數再乘上一個歸一化常數,不過這不是很重要

實際上,如果對各層都使用風格代價函數,會讓結果變得更好
如果要對各層都使用風格代價函數,可以這麼定義代價函數
把各個層的結果(各層的風格代價函數)都加起來,這樣就能定義它們全體了
還需要對每個層定義權重,也就是一些額外的超參數,用 λ[l] 來表示
這樣將能夠在神經網絡中使用不同的層
包括之前的一些可以測量類似邊緣這樣的低級特徵的層,以及之後的一些能測量高級特徵的層
使得神經網絡在計算風格時能夠同時考慮到這些低級和高級特徵的相關係數
這樣,在基礎的訓練中在定義超參數時,可以儘可能的得到更合理的選擇

爲了把這些東西封裝起來,你現在可以定義一個全體代價函數
在這裏插入圖片描述
之後用梯度下降法,或者更復雜的優化算法來找到一個合適的圖像G,並計算J(G)J(G)的最小值
維持網絡不同層的風格圖像S同樣位置的激活項的乘積之和與生成圖像G儘量相同
這樣的話,將能夠得到非常好看的結果


參考:

《神經網絡和深度學習》視頻課程


相關推薦:

深度學習筆記(48) 內容代價函數
深度學習筆記(47) 神經風格遷移
深度學習筆記(46) 深度卷積網絡學習
深度學習筆記(45) 人臉驗證與二分類
深度學習筆記(44) Triplet 損失


謝謝!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章