神經網絡的訓練過程,就是通過已有的樣本,求取使代價函數最小化時所對應的參數。代價函數測量的是模型對樣本的預測值與其真實值之間的誤差,最小化的求解一般使用梯度下降法(Gradient Decent)或其他與梯度有關的方法。其中的步驟包括:
單個神經元的結構如下圖。假設一個訓練樣本爲(x,y)(x,y)。在下圖中,xx是輸入向量,通過一個激勵函數hw,b(x)hw,b(x)得到一個輸出aa,aa再通過代價函數得到JJ。
f(W,b,x)=a=sigmoid(∑ixiwi+b)f(W,b,x)=a=sigmoid(∑ixiwi+b) (公式1)
J(W,b,x,y)=12∥y−hw,b(x)∥2J(W,b,x,y)=12‖y−hw,b(x)‖2 (公式2)
這裏激勵函數以使用sigmoid爲例,當然也可以使用其他的比如tanh或者rectived linear unit函數。要求的參數爲WW和bb。
通過定義變量z=∑ixiwi+bz=∑ixiwi+b可以將激勵函數看做是兩部分,如下圖右圖所示。第一部分是仿射求和得到zz, 第二部分是通過sigmoid得到aa。
訓練過程中,要求代價函數JJ關於WW和bb的偏導數。先求JJ關於中間變量aa和zz的偏導:
δ(a)=∂∂aJ(W,b,x,y)=−(y−a)δ(a)=∂∂aJ(W,b,x,y)=−(y−a) (公式3)
δ(z)=∂∂zJ(W,b,x,y)=∂J∂a∂a∂z=δ(a)a(1−a)δ(z)=∂∂zJ(W,b,x,y)=∂J∂a∂a∂z=δ(a)a(1−a) (公式4)
公式(4)中根據sigmoid函數的定義σ(z)=11+e−zσ(z)=11+e−z可得∂a∂z=a(1−a)∂a∂z=a(1−a)。
再根據鏈導法則,可以求得JJ關於WW和bb的偏導數,即得WW和bb的梯度。
∇WJ(W,b,x,y)=∂∂WJ=∂J∂z∂z∂W=δ(z)xT∇WJ(W,b,x,y)=∂∂WJ=∂J∂z∂z∂W=δ(z)xT (公式5)
∇bJ(W,b,x,y)=∂∂bJ=∂J∂z∂z∂b=δ(z)∇bJ(W,b,x,y)=∂∂bJ=∂J∂z∂z∂b=δ(z) (公式6)
在這個過程中,先求∂J/∂a∂J/∂a,進一步求∂J/∂z∂J/∂z,最後求得∂J/∂W∂J/∂W和∂J/∂b∂J/∂b。結合上圖及鏈導法則,可以看出這是一個將代價函數的增量∂J∂J自後向前傳播的過程,因此稱爲反向傳播(back propagation)。
多層網絡的一個例子如下圖。
假設第l+1l+1層的輸入和輸出分別是alal和al+1al+1, 參數爲WlWl和blbl,仿射結果爲中間變量zlzl。注意第一層的輸出a1=xa1=x,爲整個網絡的輸入,最後一層的輸出aLaL是代價函數的輸入。
zl+1=WlxTl+blzl+1=WlxlT+bl (公式7)
al+1=sigmoid(zl+1)al+1=sigmoid(zl+1) (公式8)
對多層網絡的訓練需要求代價函數JJ對每一層的參數求偏導。後向傳播過程變爲:
1,第一步,根據代價函數的定義,求JJ對aLaL的偏導δ(a)LδL(a)。
2,在第l+1l+1層,將誤差信號從al+1al+1傳遞到zl+1zl+1。
∂a(l+1)∂z(l+1)=a(l+1)(1−a(l+1))∂a(l+1)∂z(l+1)=a(l+1)(1−a(l+1)) (公式9)
3,第三步,將誤差信號從第l+1l+1層向第ll層傳播。
∂z(l+1)∂a(l)=W(l),∂z(l+1)∂W(l)=a(l),∂z(l+1)∂b(l)=I∂z(l+1)∂a(l)=W(l),∂z(l+1)∂W(l)=a(l),∂z(l+1)∂b(l)=I (公式10)
4, 對第ll層可得JJ對a(l)a(l)和z(l)z(l)的偏導數。
δ(a)l=∂J∂a(l)={−(y−a(l)),∂J∂z(l+1)∂z(l+1)∂a(l)=(W(l))Tδ(z)l+1,if l=Lotherwiseδl(a)=∂J∂a(l)={−(y−a(l)),if l=L∂J∂z(l+1)∂z(l+1)∂a(l)=(W(l))Tδl+1(z),otherwise (公式11)
δ(z)l=∂J∂z(l)=∂J∂a(l)∂a(l)∂z(l)=δ(a)la(l)(1−a(l))δl(z)=∂J∂z(l)=∂J∂a(l)∂a(l)∂z(l)=δl(a)a(l)(1−a(l)) (公式12)
5, 最後可得JJ對第ll層的參數WlWl和blbl的梯度:
∇W(l)J(W,b,x,y)=∂∂W(l)J=∂J∂z(l+1)∂z(l+1)∂W(l)=δ(z)l+1(a(l))T∇W(l)J(W,b,x,y)=∂∂W(l)J=∂J∂z(l+1)∂z(l+1)∂W(l)=δl+1(z)(a(l))T (公式13)
∇b(l)J(W,b,x,y)=∂∂b(l)J=∂J∂z(l+1)∂z(l+1)∂b(l)=δ(z)l+1∇b(l)J(W,b,x,y)=∂∂b(l)J=∂J∂z(l+1)∂z(l+1)∂b(l)=δl+1(z) (公式14)
1,將整個神經網絡加上代價函數的結構看做是一串函數(每一層對應一個函數)級聯而成的一個函數,其中的每一個函數的導數都可通過數學表達式解析求得:
hθ(x)=(f(L+1)∘...∘f(l)θl∘...∘f(2)θ2f(1))(x)hθ(x)=(f(L+1)∘...∘fθl(l)∘...∘fθ2(2)f(1))(x) (公式15)
其中θθ是該神經網絡的參數。f(1)=xf(1)=x, f(L+1)=hθ(x)f(L+1)=hθ(x),並且對任何一個ll,相鄰兩層間函數的導數∂f(l+1)∂f(l)∂f(l+1)∂f(l)都是已知的。
2,根據鏈導法則,求代價函數對任何一個ll層JJ關於f(l)f(l)的導數,即通過數值計算將誤差信號後向傳遞到第ll層。
δl=∂∂f(l)J(θ,x,y)=∂J∂f(l+1)∂f(l+1)∂f(l)=δl+1∂f(l+1)∂f(l)δl=∂∂f(l)J(θ,x,y)=∂J∂f(l+1)∂f(l+1)∂f(l)=δl+1∂f(l+1)∂f(l) (公式16)
3,在第ll層求JJ關於該層參數θ(l)θ(l)的梯度。
∇θ(l)J(θ,x,y)=∂∂θ(l)J=∂J∂f(l)∂f(l)∂θ(l)=δl∂f(l)∂θ(l)∇θ(l)J(θ,x,y)=∂∂θ(l)J=∂J∂f(l)∂f(l)∂θ(l)=δl∂f(l)∂θ(l)。(公式17)
其中第ll層對應的函數關於該層的參數的導數∂f(l)∂θ(l)∂f(l)∂θ(l)是已知的。
4,將所有樣本的梯度相加得到總梯度。
∇θ(l)J(θ)=∑mi=1∇θ(l)J(θ,x(i),y(i))∇θ(l)J(θ)=∑i=1m∇θ(l)J(θ,x(i),y(i)) (公式17)
對於不同的網絡結構,在第2步和第3步中根據具體的∂f(l+1)∂f(l)∂f(l+1)∂f(l)和∂f(l)∂θ(l)∂f(l)∂θ(l)就可以求得所有參數的梯度。
卷積神經網絡(CNN)的結構可閱讀上一篇博文。CNN的基本層包括卷積層和池化層,二者通常一起使用,一個池化層緊跟一個卷積層之後。這兩層包括三個級聯的函數:卷積,求sigmoid函數(或使用其他激勵函數),池化。其前向傳播和後向傳播的示意圖如下:
後向傳播需要求得這三個函數的導數。sigmoid函數前面已經討論過,這裏講一講其他兩個函數的處理:
假設一個卷積層的輸入向量是xx,輸出向量是yy, 參數向量(卷積算子)是ww。從輸入到輸出的過程爲:
y=x∗wy=x∗w(公式18)
yy的長度爲|y|=|x|−|w|+1|y|=|x|−|w|+1。yy中每一個元素的計算方法爲:
yn=(x∗w)[n]=∑|w|i=1xn+i−1wi=wTxn:n+|w|−1yn=(x∗w)[n]=∑i=1|w|xn+i−1wi=wTxn:n+|w|−1 (公式19)
卷積過程的示意圖如下:
yy中的元素與xx中的元素有如下導數關係:
∂yn−i+1∂xn=wi∂yn−i+1∂xn=wi, ∂yn∂wi=xn−i+1,for1≤i≤|w|.∂yn∂wi=xn−i+1,for1≤i≤|w|. (公式20)
進一步可以得到JJ關於ww和xx的導數:
δ(x)n=∂J∂y∂y∂xn=∑|w|i=1∂J∂yn−i+1∂yn−i+1∂xn=∑|w|i=1δ(y)n−i+1wi=(δ(y)∗flip(w))[n]δn(x)=∂J∂y∂y∂xn=∑i=1|w|∂J∂yn−i+1∂yn−i+1∂xn=∑i=1|w|δn−i+1(y)wi=(δ(y)∗flip(w))[n] (公式21)
δ(x)=δ(y)∗flip(w)δ(x)=δ(y)∗flip(w) (公式22)
∂∂wiJ=∂J∂y∂y∂wi=∑|x|−|w|+1n=1∂J∂yn∂yn∂wi=∑|x|−|w|+1n=1δ(y)nxn+i−1=(δ(y)∗x)[i]∂∂wiJ=∂J∂y∂y∂wi=∑n=1|x|−|w|+1∂J∂yn∂yn∂wi=∑n=1|x|−|w|+1δn(y)xn+i−1=(δ(y)∗x)[i] (公式23)
∂∂wJ=δ(y)∗x∂∂wJ=δ(y)∗x (公式24)
因此,通過δ(y)δ(y)與flip(ww)的卷積就可得到JJ關於xx的導數δ(x)δ(x),通過δ(y)δ(y)與xx的卷積就可計算出ww的梯度∂∂wJ∂∂wJ。
池化函數是一個下采樣函數,對於大小爲mm的池化區域,池化函數及其導數可以定義爲:
均值池化: g(x)=∑mk=1xkmg(x)=∑k=1mxkm, 導數爲 ∂g∂xi={10if xi=max(x)otherwise∂g∂xi={1if xi=max(x)0otherwise
p範數池化 g(x)=∥x∥p=(∑mk=1|xk|p)1/pg(x)=‖x‖p=(∑k=1m|xk|p)1/p, 導數爲∂g∂xi=(∑mk=1|xk|p)1/p−1|xi|p−1∂g∂xi=(∑k=1m|xk|p)1/p−1|xi|p−1
下采樣的後向傳播過程爲上採樣,其示意圖爲:
該後向傳播過程就是利用gg的導數將誤差信號傳遞到gg的輸入。
δ(x)(n−1)m+1:nm=∂∂x(n−1)m+1:nmJ=∂J∂yn∂yn∂x(n−1)m+1:nm=δ(y)ng′nδ(n−1)m+1:nm(x)=∂∂x(n−1)m+1:nmJ=∂J∂yn∂yn∂x(n−1)m+1:nm=δn(y)gn′ (公式25)
δ(x)=upsample(δ(y),g′)=[δ(x)(n−1)m+1:nm]δ(x)=upsample(δ(y),g′)=[δ(n−1)m+1:nm(x)]. (公式26)
有了上述求導公式,就能夠將誤差信號傳遞到每一層的輸出,再通過每一層的函數對參數的導數,可求得參數的梯度。有了計算梯度的方法,再通過基於梯度的最優化,就能尋得最優值,完成訓練過程。
PPT及參考資料:
1,http://www.slideshare.net/kuwajima/cnnbp
2,http://ufldl.stanford.edu/tutorial/
神經網絡的訓練過程,就是通過已有的樣本,求取使代價函數最小化時所對應的參數。代價函數測量的是模型對樣本的預測值與其真實值之間的誤差,最小化的求解一般使用梯度下降法(Gradient Decent)或其他與梯度有關的方法。其中的步驟包括:
單個神經元的結構如下圖。假設一個訓練樣本爲(x,y)(x,y)。在下圖中,xx是輸入向量,通過一個激勵函數hw,b(x)hw,b(x)得到一個輸出aa,aa再通過代價函數得到JJ。
f(W,b,x)=a=sigmoid(∑ixiwi+b)f(W,b,x)=a=sigmoid(∑ixiwi+b) (公式1)
J(W,b,x,y)=12∥y−hw,b(x)∥2J(W,b,x,y)=12‖y−hw,b(x)‖2 (公式2)
這裏激勵函數以使用sigmoid爲例,當然也可以使用其他的比如tanh或者rectived linear unit函數。要求的參數爲WW和bb。
通過定義變量z=∑ixiwi+bz=∑ixiwi+b可以將激勵函數看做是兩部分,如下圖右圖所示。第一部分是仿射求和得到zz, 第二部分是通過sigmoid得到aa。
訓練過程中,要求代價函數JJ關於WW和bb的偏導數。先求JJ關於中間變量aa和zz的偏導:
δ(a)=∂∂aJ(W,b,x,y)=−(y−a)δ(a)=∂∂aJ(W,b,x,y)=−(y−a) (公式3)
δ(z)=∂∂zJ(W,b,x,y)=∂J∂a∂a∂z=δ(a)a(1−a)δ(z)=∂∂zJ(W,b,x,y)=∂J∂a∂a∂z=δ(a)a(1−a) (公式4)
公式(4)中根據sigmoid函數的定義σ(z)=11+e−zσ(z)=11+e−z可得∂a∂z=a(1−a)∂a∂z=a(1−a)。
再根據鏈導法則,可以求得JJ關於WW和bb的偏導數,即得WW和bb的梯度。
∇WJ(W,b,x,y)=∂∂WJ=∂J∂z∂z∂W=δ(z)xT∇WJ(W,b,x,y)=∂∂WJ=∂J∂z∂z∂W=δ(z)xT (公式5)
∇bJ(W,b,x,y)=∂∂bJ=∂J∂z∂z∂b=δ(z)∇bJ(W,b,x,y)=∂∂bJ=∂J∂z∂z∂b=δ(z) (公式6)
在這個過程中,先求∂J/∂a∂J/∂a,進一步求∂J/∂z∂J/∂z,最後求得∂J/∂W∂J/∂W和∂J/∂b∂J/∂b。結合上圖及鏈導法則,可以看出這是一個將代價函數的增量∂J∂J自後向前傳播的過程,因此稱爲反向傳播(back propagation)。
多層網絡的一個例子如下圖。
假設第l+1l+1層的輸入和輸出分別是alal和al+1al+1, 參數爲WlWl和blbl,仿射結果爲中間變量zlzl。注意第一層的輸出a1=xa1=x,爲整個網絡的輸入,最後一層的輸出aLaL是代價函數的輸入。
zl+1=WlxTl+blzl+1=WlxlT+bl (公式7)
al+1=sigmoid(zl+1)al+1=sigmoid(zl+1) (公式8)
對多層網絡的訓練需要求代價函數JJ對每一層的參數求偏導。後向傳播過程變爲:
1,第一步,根據代價函數的定義,求JJ對aLaL的偏導δ(a)LδL(a)。
2,在第l+1l+1層,將誤差信號從al+1al+1傳遞到zl+1zl+1。
∂a(l+1)∂z(l+1)=a(l+1)(1−a(l+1))∂a(l+1)∂z(l+1)=a(l+1)(1−a(l+1)) (公式9)
3,第三步,將誤差信號從第l+1l+1層向第ll層傳播。
∂z(l+1)∂a(l)=W(l),∂z(l+1)∂W(l)=a(l),∂z(l+1)∂b(l)=I∂z(l+1)∂a(l)=W(l),∂z(l+1)∂W(l)=a(l),∂z(l+1)∂b(l)=I (公式10)
4, 對第ll層可得JJ對a(l)a(l)和z(l)z(l)的偏導數。
δ(a)l=∂J∂a(l)={−(y−a(l)),∂J∂z(l+1)∂z(l+1)∂a(l)=(W(l))Tδ(z)l+1,if l=Lotherwiseδl(a)=∂J∂a(l)={−(y−a(l)),if l=L∂J∂z(l+1)∂z(l+1)∂a(l)=(W(l))Tδl+1(z),otherwise (公式11)
δ(z)l=∂J∂z(l)=∂J∂a(l)∂a(l)∂z(l)=δ(a)la(l)(1−a(l))δl(z)=∂J∂z(l)=∂J∂a(l)∂a(l)∂z(l)=δl(a)a(l)(1−a(l)) (公式12)
5, 最後可得JJ對第ll層的參數WlWl和blbl的梯度:
∇W(l)J(W,b,x,y)=∂∂W(l)