这里写链接内容目录
想法
如果将整个神经网络看作是一个复杂的函数 Fθ(x) F θ ( x ) ,那么与线性回归和逻辑回归相似,选取一些恰当的 θ θ 值就可以得到假设函数。
反向传播算法就是用来确定哪些恰当的 θ θ 值
数学表达
一些数学符号以及正向传播过程已经在神经网络中涉及,此处不做解释
神经网络中结合正则化后的代价函数(需判断是否是线性回归还是逻辑回归,此处给出的逻辑回归):
J(θ)=−1m∑mi=1∑kk=1[yikln(hθ(xi)k)+(1−yik)ln(1−hθ(xi)k)]+λ2m∑L−1l=1∑sli=1∑sl+1j=1(θlji)2 J ( θ ) = − 1 m ∑ i = 1 m ∑ k = 1 k [ y k i ln ( h θ ( x i ) k ) + ( 1 − y k i ) ln ( 1 − h θ ( x i ) k ) ] + λ 2 m ∑ l = 1 L − 1 ∑ i = 1 s l ∑ j = 1 s l + 1 ( θ j i l ) 2
其中的
m m 表示训练集中的数据数量
表示 y y 分类后的数量
表示网络层数,之所以上界是 L−1 L − 1 ,是因为传播过程次数比神经网络的层数少一
sl s l 表示第 l l 层上的神经节点总数
之后,就是选择 使得 minθJ(θ) min θ J ( θ ) ,考虑到导数越接近 0 0 时, 越接近最值;同时,借鉴梯度下降算法,则有
θlij=θlij−∂∂θlijJ(θ) θ i j l = θ i j l − ∂ ∂ θ i j l J ( θ )
其中的学习速率设为 1 1
其中的
上式中的偏导数又分两种情况
计算最后一层的偏导数
(1) hθ(xi)k=aLk,(2) aLk=g(zLk)=11+e−zLk,(3) zLk=θL−1k0aL−10+θL−1k1aL−11+…+θL−1ksl−1aL−1sl−1 ( 1 ) h θ ( x i ) k = a k L , ( 2 ) a k L = g ( z k L ) = 1 1 + e − z k L , ( 3 ) z k L = θ k 0 L − 1 a 0 L − 1 + θ k 1 L − 1 a 1 L − 1 + … + θ k s l − 1 L − 1 a s l − 1 L − 1
令第 k k 个神经单元的代价函数为
则
∂∂θL−1kj[yikln(hθ(xi)k)+(1−yik)ln(1−hθ(xi)k)]=∂∂θL−1kjfθ(x) ∂ ∂ θ k j L − 1 [ y k i ln ( h θ ( x i ) k ) + ( 1 − y k i ) ln ( 1 − h θ ( x i ) k ) ] = ∂ ∂ θ k j L − 1 f θ ( x )
由链式法则及 (1), (2), (3) ( 1 ) , ( 2 ) , ( 3 ) 得
∂∂θL−1kjfθ(x)=∂f∂aLk⋅∂aLk∂zLk⋅∂zLk∂θL−1kj ∂ ∂ θ k j L − 1 f θ ( x ) = ∂ f ∂ a k L ⋅ ∂ a k L ∂ z k L ⋅ ∂ z k L ∂ θ k j L − 1
其中的
∂zLk∂θL−1kj=aL−1j, ∂ z k L ∂ θ k j L − 1 = a j L − 1 ,
∂aLk∂zLk=e−zLk(1+e−zLk)2=11+e−zLk⋅e−zLk1+e−zLk=g(zLk)(1−g(zLk))=aLk(1−aLk), ∂ a k L ∂ z k L = e − z k L ( 1 + e − z k L ) 2 = 1 1 + e − z k L ⋅ e − z k L 1 + e − z k L = g ( z k L ) ( 1 − g ( z k L ) ) = a k L ( 1 − a k L ) ,
∂f∂aLk=∂∂aLk[yikln(aLk)+(1−yik)ln(1−aLk)]=yikaLk−1−yik1−aLk=yik−aLkaLk(1−aLk) ∂ f ∂ a k L = ∂ ∂ a k L [ y k i ln ( a k L ) + ( 1 − y k i ) ln ( 1 − a k L ) ] = y k i a k L − 1 − y k i 1 − a k L = y k i − a k L a k L ( 1 − a k L )则
∂∂θL−1kjfθ(x)=yik−aLkaLk(1−aLk)⋅aLk(1−aLk)⋅aL−1j=(yik−aLk)aL−1j ∂ ∂ θ k j L − 1 f θ ( x ) = y k i − a k L a k L ( 1 − a k L ) ⋅ a k L ( 1 − a k L ) ⋅ a j L − 1 = ( y k i − a k L ) a j L − 1
计算隐藏层的偏导数
对于隐藏层 l l 的中某个神经单元 的偏差会影响下一层的所有神经单元
此外,隐藏层的假设函数不一定都是逻辑回归,此处假设使用逻辑回归
则令第 l l 层中第 个神经单元的代价函数为fθ(zl+11,…,zl+1sl+1)=∑sl+1ℓ=1[yl+1ℓln(g(zl+1ℓ))+(1−yl+1ℓ)ln(1−g(zl+1ℓ))] f θ ( z 1 l + 1 , … , z s l + 1 l + 1 ) = ∑ ℓ = 1 s l + 1 [ y ℓ l + 1 ln ( g ( z ℓ l + 1 ) ) + ( 1 − y ℓ l + 1 ) ln ( 1 − g ( z ℓ l + 1 ) ) ]
注意:其中的 yl+1ℓ y ℓ l + 1 表示第 l+1 l + 1 层上第 ℓ ℓ 个单元的相对正确的输出,而 yik y k i 表示第 i i 组训练数据在最后一层中的相对正确的输出
选取第 层的神经单元并对第 l−1 l − 1 层的 θ θ 求偏导数,又由第一种情况可知,∂∂θl−1kjfθ(zl+11,…,zl+1sl+1)=∂f∂alk⋅∂alk∂zlk⋅∂zlk∂θl−1kj, ∂ ∂ θ k j l − 1 f θ ( z 1 l + 1 , … , z s l + 1 l + 1 ) = ∂ f ∂ a k l ⋅ ∂ a k l ∂ z k l ⋅ ∂ z k l ∂ θ k j l − 1 ,
∂zlk∂θl−1kj=al−1j, ∂ z k l ∂ θ k j l − 1 = a j l − 1 ,
∂alk∂zlk=alk(1−alk), ∂ a k l ∂ z k l = a k l ( 1 − a k l ) ,由全微分性质不变性(全微分与网络的关系,知乎上有晓雷做的介绍)得
∂f∂alk=∑sl+1ℓ=1∂f∂zl+1ℓ⋅∂zl+1ℓ∂alk=∑sl+1ℓ=1∂f∂al+1ℓ⋅∂al+1ℓ∂zl+1ℓ⋅∂zl+1ℓ∂alk=∑sl+1ℓ=1(yl+1ℓ−al+1ℓ)θlℓk ∂ f ∂ a k l = ∑ ℓ = 1 s l + 1 ∂ f ∂ z ℓ l + 1 ⋅ ∂ z ℓ l + 1 ∂ a k l = ∑ ℓ = 1 s l + 1 ∂ f ∂ a ℓ l + 1 ⋅ ∂ a ℓ l + 1 ∂ z ℓ l + 1 ⋅ ∂ z ℓ l + 1 ∂ a k l = ∑ ℓ = 1 s l + 1 ( y ℓ l + 1 − a ℓ l + 1 ) θ ℓ k l则
∂∂θl−1kjfθ(zl+11,…,zl+1sl+1)=∑sl+1ℓ=1(yl+1i−al+1ℓ)θlℓk⋅alk(1−alk)⋅al−1j ∂ ∂ θ k j l − 1 f θ ( z 1 l + 1 , … , z s l + 1 l + 1 ) = ∑ ℓ = 1 s l + 1 ( y i l + 1 − a ℓ l + 1 ) θ ℓ k l ⋅ a k l ( 1 − a k l ) ⋅ a j l − 1
由 1, 2 1 , 2 两种情况下,不考虑正则化时可得代价函数的导数
∂∂θl−1kjJ(θ)={1m∑mi=1∑slk=1(alk−yik)al−1j1m∑mi=1∑slk=1∑sl+1ℓ=1(al+1ℓ−yl+1ℓ)θlℓk⋅alk(1−alk)⋅al−1jl=Ll<L ∂ ∂ θ k j l − 1 J ( θ ) = { 1 m ∑ i = 1 m ∑ k = 1 s l ( a k l − y k i ) a j l − 1 l = L 1 m ∑ i = 1 m ∑ k = 1 s l ∑ ℓ = 1 s l + 1 ( a ℓ l + 1 − y ℓ l + 1 ) θ ℓ k l ⋅ a k l ( 1 − a k l ) ⋅ a j l − 1 l < L
考虑将 (alk−yik) ( a k l − y k i ) 与 ∑sl+1ℓ=1(al+1ℓ−yl+1ℓ)θlℓk⋅alk(1−alk) ∑ ℓ = 1 s l + 1 ( a ℓ l + 1 − y ℓ l + 1 ) θ ℓ k l ⋅ a k l ( 1 − a k l ) 这种偏差用 δlk δ k l 表示
结合 1, 2 1 , 2 求偏导数过程
δlk=∂f∂alk⋅∂alk∂zlk, δ k l = ∂ f ∂ a k l ⋅ ∂ a k l ∂ z k l ,
也就是表示第 l l 层中的第 个神经单元与目标的偏差
那么根据上面对 δlk δ k l 的定义,对代价函数进行简化
注意到对隐藏层求偏导数的过程中有
∂f∂alk=∑sl+1ℓ=1∂f∂zl+1ℓ⋅∂zl+1ℓ∂alk=∑sl+1ℓ=1∂f∂al+1ℓ⋅∂al+1ℓ∂zl+1ℓ⋅∂zl+1ℓ∂alk ∂ f ∂ a k l = ∑ ℓ = 1 s l + 1 ∂ f ∂ z ℓ l + 1 ⋅ ∂ z ℓ l + 1 ∂ a k l = ∑ ℓ = 1 s l + 1 ∂ f ∂ a ℓ l + 1 ⋅ ∂ a ℓ l + 1 ∂ z ℓ l + 1 ⋅ ∂ z ℓ l + 1 ∂ a k l
根据 δlk δ k l 定义则有
∂f∂alk=∑sl+1ℓ=1δl+1ℓ⋅∂zl+1ℓ∂alk ∂ f ∂ a k l = ∑ ℓ = 1 s l + 1 δ ℓ l + 1 ⋅ ∂ z ℓ l + 1 ∂ a k l
则
∂∂θl−1kjJ(θ)={1m∑mi=1∑slk=1δlkal−1j1m∑mi=1∑slk=1∑sl+1ℓ=1δl+1ℓθlℓk⋅alk(1−alk)⋅al−1jl=Ll<L ∂ ∂ θ k j l − 1 J ( θ ) = { 1 m ∑ i = 1 m ∑ k = 1 s l δ k l a j l − 1 l = L 1 m ∑ i = 1 m ∑ k = 1 s l ∑ ℓ = 1 s l + 1 δ ℓ l + 1 θ ℓ k l ⋅ a k l ( 1 − a k l ) ⋅ a j l − 1 l < L
由上式可知,经过正向传播之后,可以求得输出层的偏差;然后就可以反向传播求得之前神经层的偏差,进而求得代价函数对 θ θ 的偏导数,最后利用梯度下降算法的思想,求得接近的 θ θ 值,生成一张拟合较好的神经网络。