1. 程式人生 > >深度學習筆記篇(一)VGG + 動量法

深度學習筆記篇(一)VGG + 動量法

新開個坑,作為最近一直忙不寫部落格的一個補償。

在筆記篇中,主要會以流水賬(日記)的形式,覺得囉嗦的朋友可以關注我的後續篇節,有一些Project會單獨拿出來說。

先講個題外話。

因為經常需要更新github上老師的程式碼,於是很多人想要在本地與專案保持更新

通過 git pull <遠端主機名> <遠端分支>:<本地分支>語句合併更新一步到位

接下來在DL課上補了點知識

1. 感受野的計算

什麼叫感受野呢,其實就是網路中中間層的節點受原始input中節點影響的程度。通俗點說,就是你曾曾曾曾曾曾曾曾祖父對你的遺傳有什麼影響。太高呢,沒什麼進化;太低呢,又不像是一個種的。接下來講怎麼計算

用N_RF表示第n層hidden的感受野(N_RF初始為這一層的kernalsize)

N-1_RF = N_RF * (N-1)_strides + (N - 1)_kernalsSize.

不斷更新,直到N - 1等於0

2.VGG

最大的特點,通過數個構造相似的VGG_BLOCK, 每個BLOCK做類似地卷積和池化,使得channels翻倍,但是解析度h,w都減半。

這樣構造的特點是,整個模型每層引數計算的複雜度是一樣的,由公式Cinput*Coutput*h*w(這裡可能有問題)

3.SGD + Momentum(動量法)

動量法直觀解釋:

如果把梯度下降法想象成一個小球從山坡到山谷的過程,那麼前面幾篇文章的小球是這樣移動的:從A點開始,計算當前A點的坡度,沿著坡度最大的方向走一段路,停下到B。在B點再看一看周圍坡度最大的地方,沿著這個坡度方向走一段路,再停下。確切的來說,這並不像一個球,更像是一個正在下山的盲人,每走一步都要停下來,用柺杖來來探探四周的路,再走一步停下來,周而復始,直到走到山谷。而一個真正的小球要比這聰明多了,從A點滾動到B點的時候,小球帶有一定的初速度,在當前初速度下繼續加速下降,小球會越滾越快,更快的奔向谷底。momentum 動量法就是模擬這一過程來加速神經網路的優化的。

這裡寫圖片描述

上圖直觀的解釋了動量法的全部內容。 A為起始點,首先計算A點的梯度∇a ,然後下降到B點, θnew=θ−α∇a θ 為引數  α 為學習率。 到了B點需要加上A點的梯度,這裡梯度需要有一個衰減值γγ ,推薦取0.9。這樣的做法可以讓早期的梯度對當前梯度的影響越來越小,如果沒有衰減值,模型往往會震盪難以收斂,甚至發散。所以B點的引數更新公式是這樣的: vt=γvt−1+α∇b

θnew​=θ−vt​ 其中vt−1​ 表示之前所有步驟所累積的動量和。 這樣一步一步下去,帶著初速度的小球就會極速的奔向谷底。