風格轉換01 對開山之作的數學公式理解

2021-08-09 08:10:19 字數 2420 閱讀 2555

最近在看風格轉換方面的**,發現很多**都離不開leno gatys的《a neural algorithm of artistic style》這篇*****,最初看的時候,對於*****中的數學公式匆匆掠過,並沒有進行深入理解,但是筆者認為如果能夠弄清楚一篇*****中的數學公式部分,那麼對於整篇*****的具體實現會有乙個更好的理解,以下是筆者對於*****中幾個數學公式的理解。

內容損失函式

在*****中內容損失函式及其偏導數的公式如下

看到這裡,筆者有兩個問題,一是為什麼求偏導的時候求和號消失了,二是為什麼當fl

ij小於0時偏導數為0。

先來解決第乙個問題。偏導數的定義是,在數學中,乙個多變數的函式的偏導數,就是它關於其中乙個變數的導數而保持其他變數恆定(相對於全導數,在其中所有變數都允許變化)。在此問題中,求的是關於fl

ij的偏導數,所以除fl

ij外的變數都可以視為常量,那麼常量關於變數fl

ij的導數便為0,所以只剩下ij處的導數,那麼求和號就消失了。關於ij處的導數,因為fl

與pl都是矩陣,所以可以先用fl

代替fl

ij進行求導,然後取矩陣中的ij元素。其中(f

l−pl

)ij 代表取矩陣(f

l−pl

) 中ij元素的值。

解決第二個問題之前,讓我們明確一下fl

ij的意義。fl

是vgg網路中第l層的特徵對映集,其中每一層有nl

個特徵對映,i代表nl

個特徵對映中的乙個。每乙個特徵對映的尺寸為特徵對映的高乘以特徵對映的寬,我們用ml

表示特徵對映高和寬的乘積,相當於把二維的特徵對映拉平為一維的,j就代表ml

中的乙個元素。所以現在fl

的尺寸為nl

*ml,fl

ij就代表在第l層中的第i個特徵對映中的第j個元素。 當f

lij<

0 就意味著特徵對映中的乙個元素小於0,在數字影象處理中,我們對於小於0的點,要進行置零處理。求偏導的目的是為了反向傳播進行梯度下降,而這一點小於0,在影象中也就沒有了意義,所以對於反向傳播沒有貢獻,直接置0。

格拉姆矩陣

在*****中,作者是這樣定義格拉姆矩陣的。

如果我們用矩陣的形式表示,應該是gl

=fl∗

flt ,其中fl

的尺寸為nl

*ml。這樣就可以得到nl

∗nl 的格拉姆矩陣。

在斯坦福cs20si的**當中,是gl

=fl fl

,但是在**中,fl

的尺寸是ml

nl,所以這兩者是不矛盾的。

風格損失函式

風格損失函式及其偏導數的表示如下:

看到這兩個公式,忍不住思考乙個問題,為什麼偏導數是公式(6)中所示的呢。

經過分析之後,可知公式(6)是經過求導的鏈式法則得來的,公式如下: ∂e

l∂fl

ij=∂

g∂fl

ij∗∂

el∂g

=∂g∂

flij

∗2(g

l−al

)14n

2lm2

l =∂

g∂fl

ij∗(

gl−a

l)12

n2lm

2l下面單獨求解一下∂g

∂fli

j ,這裡需要一些矩陣求導的知識,參考

g∂fl

=∂fl

∗flt

∂fl=

2flt

所以原式=∂

g∂fl

ij∗(

gl−a

l)12

n2lm

2l=2

flt∗

(gl−

al)1

2n2l

m2l=

(1n2

lm2l

flt(

gl−a

l))j

i

有心人可能已經注意到了下標由原來的(ij)變成了(ji),為什麼會這樣呢?因為矩陣fl

做過一次轉置,所以原來的(ij)元素對應現在的(ji)元素。

《程式設計實踐》筆記01 風格

程式設計實踐 筆記01 風格 noizz 發表於 2005 11 25 21 44 00 常見錯誤 1 注釋和 不一致 2 沒有講明乙個邏輯判斷中的具體業務意義 3 常量定義的名字沒有表示具體的邏輯含義 1 命名 常見錯誤 1 全域性變數名太短,沒有意義,沒有注釋。2 區域性變數太長,不簡潔。3 不...

c c 注釋風格轉換

c注釋風格 hhhfjjjsjd c 注釋風格 huajaijdh hushushdxkk 1.一般情況 int i 0 2.換行問題 int i 0 int j 0 int i 0 int j 0 3.匹配問題 int i 0 xx 4.多行注釋問題 int i 0 int j 0 int k 0...

C語言 注釋轉換(C風格 C 風格)

其中有一些檔案操作函式,不懂的可以看這篇部落格 首先,我們要知道乙個檔案中至少有五種狀態,我們用狀態圖表示 解讀 我們從 不是注釋 的狀態開始,請看下圖 有以下幾種情況需要注意 轉變成 轉變成 判斷是否為換行,如果換行需要輸入 轉變成 如果準備出注釋的時候,遇到 先保留看下乙個字元是不是 如果是 在...