深度学习基础-反向传播推导

感知机

感知机接收若干个二进制输入 x 1 , x 2 , ⋯   , x n x_1,x_2,\cdots,x_n x1,x2,,xn,引入权重 w 1 , w 2 , ⋯   , w n w_1,w_2,\cdots,w_n w1,w2,,wn,表示输入对输出的重要性,生成一个二进制输出。可以将感知机看作根据权重做决策的机器。

输出 = { 0   如果 ∑ j w j x j ≤ 阈值 1   如果 ∑ j w j x j > 阈值 输出=\begin{cases}0\ \ 如果\sum_jw_jx_j\le 阈值\\1\ \ 如果\sum_jw_jx_j>阈值\end{cases} 输出={0  如果jwjxj阈值1  如果jwjxj>阈值

输出 = { 0   如果 w ⋅ x + b ≤ 0 1   如果 w ⋅ x + b > 0 输出=\begin{cases}0\ \ 如果w\cdot x+b\le0\\1\ \ 如果w\cdot x+b>0\end{cases} 输出={0  如果wx+b01  如果wx+b>0

用偏置 b = − 阈值 b=-阈值 b=阈值替代

在这里插入图片描述

感知机实现与非门

在这里插入图片描述

( − 2 ) ∗ 0 + ( − 2 ) ∗ 0 + 3 = 3 > 0 (-2)*0+(-2)*0+3=3>0 (2)0+(2)0+3=3>0

( − 2 ) ∗ 1 + ( − 2 ) ∗ 1 + 3 = − 1 < 0 (-2)*1+(-2)*1+3=-1<0 (2)1+(2)1+3=1<0

( − 2 ) ∗ 1 + ( − 2 ) ∗ 0 + 3 = 1 > 0 (-2)*1+(-2)*0+3=1>0 (2)1+(2)0+3=1>0

通过修改权重和偏置调整神经网络的表现,但单个感知机只输出0/1,偏置和权重的微小改变可能导致输出结果翻转,导致整个网络产生复杂的剧变。例如,识别图像时,前一张图像是猫,此时的网络权重输出是“猫”,下一张图像是狗,网络通过调整权重,输出“狗”,但此时的权重,输入猫图像,网络可能输出“乱码”。

因此,使网络能够学习的关键在于权重和偏置的微小变化只会引动输出发生微小变化。

在这里插入图片描述

sigmoid神经元(logistic神经元)

此时输入 x x x是[0,1]之间的连续变量

o u p u t = σ ( w ⋅ x + b ) = 1 1 + e x p ( − ∑ j w j x j − b ) ouput=\sigma(w\cdot x+b)=\frac{1}{1+exp(-\sum_jw_jx_j-b)} ouput=σ(wx+b)=1+exp(jwjxjb)1

σ ( z ) = 1 1 + e − z \sigma(z)=\frac{1}{1+e^{-z}} σ(z)=1+ez1

在这里插入图片描述

将原神经元的激活函数(阶跃函数)进行平滑,此时输出变化如下形式:

Δ o u t p u t ≈ ∑ j ∂   o u p u t ∂   w j Δ w j + ∂   o u t p u t ∂   b Δ b \Delta output\approx\sum_j\frac{\partial\ ouput}{\partial\ w_j}\Delta w_j+\frac{\partial\ output}{\partial\ b}\Delta b Δoutputj wj ouputΔwj+ b outputΔb

为了训练网络拟合训练数据,引入代价函数,使得输出和标签接近。

均方误差代价函数

C ( w , b ) = 1 2 n ∑ x ∣ ∣ y ( x ) − a ∣ ∣ 2 C(w,b)=\frac{1}{2n}\sum_x||y(x)-a||^2 C(w,b)=2n1x∣∣y(x)a2

x x x为一个训练样本, a a a为该训练样本标签, n n n表示总训练样本数。

为什么引入代价函数?

例如,对于图像分类问题,感兴趣的是正确分类的图像数量,不直接最大化分类正确图像数量而引入均方误差间接指标?大部分情况下,权重和偏置的微小变化完全不改变正确分类图像数量,很难通过改变权重和偏置提升模型表现。因此需要寻找平滑的代价函数以调整权重和偏置。

梯度下降

实现“最小化”代价函数。

假设最小化某个函数 C ( v ) , v = v 1 , v 2 , ⋯ C(v),v=v_1,v_2,\cdots C(v),v=v1,v2,,以 v 1 , v 2 v_1,v_2 v1,v2两个变量为例。

Δ C ≈ ∂   C ∂   v 1 Δ v 1 + ∂   C ∂   v 2 Δ v 2 \Delta C\approx\frac{\partial\ C}{\partial\ v_1}\Delta v_1+\frac{\partial\ C}{\partial\ v_2}\Delta v_2 ΔC v1 CΔv1+ v2 CΔv2

寻找 Δ v 1 , Δ v 2 \Delta v_1,\Delta v_2 Δv1,Δv2,使得 Δ C \Delta C ΔC为负。记 Δ v = ( Δ v 1 , Δ v 2 ) T \Delta v=(\Delta v_1,\Delta v_2)^T Δv=(Δv1,Δv2)T,梯度 ∇ C = ( ∂   C ∂   v 1 , ∂   C ∂   v 2 ) T \nabla C=(\frac{\partial\ C}{\partial\ v_1},\frac{\partial\ C}{\partial\ v_2})^T C=( v1 C, v2 C)T。因此,函数C的变化为:

Δ C ≈ ∇ C ⋅ Δ v \Delta C\approx\nabla C\cdot \Delta v ΔCCΔv

因此,使得 ∣ Δ C ∣ |\Delta C| ∣ΔC最大, Δ v \Delta v Δv应该与 ∇ C \nabla C C方向相同(正向或反向)。

Δ v = − η ∇ C \Delta v=-\eta \nabla C Δv=ηC η \eta η为步长(学习率)。

Δ C ≈ − η ∇ C ⋅ ∇ C = − η ∣ ∣ ∇ C ∣ ∣ 2 \Delta C\approx-\eta \nabla C\cdot\nabla C=-\eta||\nabla C||^2 ΔCηCC=η∣∣∇C2

v → v ′ = v − η ∇ C v\rightarrow v\prime=v-\eta\nabla C vv=vηC

因此,训练神经网络就是寻找最小化代价函数的权重 w k w_k wk和偏置 b l b_l bl。权重 w k w_k wk和偏置 b l b_l bl更新方式如下:

w k → w k ′ = w k − η ∂   C ∂   w k w_k\rightarrow w_k^{\prime}=w_k-\eta\frac{\partial \ C}{\partial \ w_k} wkwk=wkη wk C

b l → b l ′ = b l − η ∂   C ∂   b l b_l\rightarrow b_l^{\prime}=b_l-\eta\frac{\partial \ C}{\partial \ b_l} blbl=blη bl C

实际上,损失函数 C = 1 n ∑ x C x C=\frac{1}{n}\sum_xC_x C=n1xCx是定义在所有训练样本上的,理论上求梯度 ∇ C = 1 n ∑ x ∇ C x \nabla C=\frac{1}{n}\sum_x\nabla C_x C=n1xCx,需要为每个训练样本单独计算梯度值 ∇ C x \nabla C_x Cx,再求均值。

随机梯度下降:

小批量训练样本梯度代替整体训练样本梯度,设每个批次选取 m m m个训练样本 x 1 , x 2 , ⋯   , x m x_1,x_2,\cdots,x_m x1,x2,,xm

∑ j = 1 m ∇ C x j m ≈ ∑ x ∇ C x n = ∇ C \frac{\sum_{j=1}^m\nabla C_{x_j}}{m}\approx\frac{\sum_x\nabla C_x}{n}=\nabla C mj=1mCxjnxCx=C

w k → w k ′ = w k − η m ∑ j ∂   C x j ∂   w k w_k\rightarrow w_k^{\prime}=w_k-\frac{\eta}{m}\sum_j\frac{\partial \ C_{x_j}}{\partial \ w_k} wkwk=wkmηj wk Cxj

b l → b l ′ = b l − η m ∑ j ∂   C x j ∂   b l b_l\rightarrow b_l^{\prime}=b_l-\frac{\eta}{m}\sum_j\frac{\partial \ C_{x_j}}{\partial \ b_l} blbl=blmηj bl Cxj

反向传播公式推导

符号定义:

w j k l w_{jk}^l wjkl表示第 l − 1 l-1 l1层的第 k k k个神经元到第 l l l层的第 j j j个神经元连接的权重。

在这里插入图片描述

b j l b^l_j bjl表示第 l l l层第 j j j个神经元的偏置, a j l a^l_j ajl表示第 l l l层第 j j j个神经元的激活值。

在这里插入图片描述

因此第 l l l层第 j j j个神经元的激活值为:

a j l = σ ( ∑ k w j k l a k l − 1 + b j l ) a^l_j=\sigma(\sum_kw^l_{jk}a^{l-1}_k+b^{l}_j) ajl=σ(kwjklakl1+bjl)

a l = σ ( w l a l − 1 + b l ) a^l=\sigma(w^la^{l-1}+b^l) al=σ(wlal1+bl)

z l = w l a l − 1 + b l z^l=w^la^{l-1}+b^l zl=wlal1+bl a l = σ ( z l ) a^l=\sigma(z^l) al=σ(zl) z j l = ∑ k w j k l a k l − 1 + b j l z^l_j=\sum_kw^l_{jk}a^{l-1}_k+b^l_j zjl=kwjklakl1+bjl

代价函数为:

C = 1 2 n ∑ x ∣ ∣ y ( x ) − a L ( x ) ∣ ∣ 2 = 1 n ∑ x C x C=\frac{1}{2n}\sum_x||y(x)-a^L(x)||^2=\frac{1}{n}\sum_xC_x C=2n1x∣∣y(x)aL(x)2=n1xCx

对于每个单独的训练样本, C x = 1 2 ∣ ∣ y − a L ∣ ∣ 2 C_x=\frac{1}{2}||y-a^L||^2 Cx=21∣∣yaL2

神经网络为 L L L层,训练样本总是为 n n n

反向传播实际上对单独的训练样本计算 ∂ C x / ∂ w \partial C_x/\partial w Cx/w ∂ C x / ∂ b \partial C_x/\partial b Cx/b,在所有训练样本上进行平均得到 ∂ C / ∂ w \partial C/\partial w C/w ∂ C / ∂ b \partial C/\partial b C/b。为简化表示,把 C x C_x Cx写为 C C C

反向传播的4个基本方程

反向传播要求的是偏导数 ∂   C / ∂   w j k l \partial\ C/\partial\ w^l_{jk}  C/ wjkl ∂   C / ∂   b j l \partial\ C/\partial\ b^l_{j}  C/ bjl

定义中间变量 δ j l = ∂   C ∂   z j l \delta^l_j=\frac{\partial \ C}{\partial\ z^l_j} δjl= zjl C,其使得代价函数发生 ∂   C / ∂   z j l Δ z j l \partial\ C/\partial\ z^l_j\Delta z^l_j  C/ zjlΔzjl的变化。如果 ∂   C / ∂   z j l \partial\ C/\partial\ z^l_j  C/ zjl接近0,其就很难通过扰动带权输入 z j l z^l_j zjl来缩小代价,此时该神经元接近最优。 ∂   C / ∂   z j l \partial\ C/\partial\ z^l_j  C/ zjl可以看作神经元距离最优的误差,降低代价函数的能力。

输出层误差方程 δ L \delta^L δL:

a j L = σ ( z j L ) a_j^ L=\sigma(z_j^L) ajL=σ(zjL)

δ j L = ∂   C ∂   a j L σ ′ ( z j L ) \delta^L_j=\frac{\partial\ C}{\partial\ a^L_j}\sigma^{\prime}(z^L_j) δjL= ajL Cσ(zjL)

如果使用二次代价函数,那么 C = 1 2 ∑ j ( y j − a j L ) 2 C=\frac{1}{2}\sum_j(y_j-a^L_j)^2 C=21j(yjajL)2 ∂   C / ∂   a j L = ( a j L − y j ) \partial\ C/\partial\ a^L_j=(a^L_j-y_j)  C/ ajL=(ajLyj)

δ L = ∇ a C ⊙ σ ′ ( z L ) \delta^L=\nabla_aC\odot \sigma^{\prime}(z^L) δL=aCσ(zL)(逐元素相乘,BP1)

δ L = ( a L − y ) ⊙ σ ′ ( z L ) \delta^L=(a^L-y)\odot \sigma^{\prime}(z^L) δL=(aLy)σ(zL)(二次函数损失函数)

误差反向传播递推公式,已知 δ l + 1 \delta^{l+1} δl+1,求 δ l \delta^l δl

z l + 1 = w l + 1 a l + b l + 1 z^{l+1}=w^{l+1}a^{l}+b^{l+1} zl+1=wl+1al+bl+1

a l = σ ( z l ) a^l=\sigma(z^l) al=σ(zl)

∂   z l + 1 ∂   z l = ∂   z l + 1 ∂   a l ∂   a l ∂   z l = ( w l + 1 ) T ⊙ σ ′ ( z l ) \frac{\partial\ z^{l+1}}{\partial\ z^l}=\frac{\partial\ z^{l+1}}{\partial\ a^l}\frac{\partial\ a^l}{\partial\ z^l}=(w^{l+1})^T\odot\sigma^{\prime}(z^l)  zl zl+1= al zl+1 zl al=(wl+1)Tσ(zl)

δ l = ∂   C ∂   z l = ∂   z l + 1 ∂   z l ∂   C ∂   z l + 1 = ( w l + 1 ) T ⊙ σ ′ ( z l ) δ l + 1 = ( ( w l + 1 ) T δ l + 1 ) ⊙ σ ′ ( z l ) \begin{aligned}\delta^l&=\frac{\partial\ C}{\partial\ z^l}\\&=\frac{\partial\ z^{l+1}}{\partial\ z^l}\frac{\partial\ C}{\partial\ z^{l+1}}\\&=(w^{l+1})^T\odot\sigma^{\prime}(z^l)\delta^{l+1}\\&=((w^{l+1})^T\delta^{l+1})\odot\sigma^{\prime}(z^l)\end{aligned} δl= zl C= zl zl+1 zl+1 C=(wl+1)Tσ(zl)δl+1=((wl+1)Tδl+1)σ(zl)(BP2)

直观解释:误差沿着神经网络反向传播, w l + 1 w^{l+1} wl+1的每一行是 l + 1 l+1 l+1层的每个神经元的权重,因此 w l + 1 w^{l+1} wl+1的每一列连接到第 l l l层的同一个神经元,所以 ( w l + 1 ) T δ l + 1 (w^{l+1})^T\delta^{l+1} (wl+1)Tδl+1就是反向传播到第 l l l层的误差(此时误差是相对第 l l l层的激活输出),再通过激活函数乘以 σ ′ ( z l ) \sigma^{\prime}(z^l) σ(zl)得到了第 l l l层误差 δ l \delta^l δl(此时误差相对第 l l l层输出)。

代价函数相对偏置的变化率:

z j l = ∑ k w j k l a k l − 1 + b j l z^l_j=\sum_kw^l_{jk}a^{l-1}_k+b^l_j zjl=kwjklakl1+bjl

∂   C ∂   b j l = ∂   C ∂   z j l ∂   z j l ∂   b j l = δ j l \begin{aligned}\frac{\partial\ C}{\partial\ b^l_j}&=\frac{\partial\ C}{\partial\ z^l_j}\frac{\partial\ z^l_j}{\partial\ b^l_j}\\&=\delta^l_j\end{aligned}  bjl C= zjl C bjl zjl=δjl(BP3)

∂   C ∂   b = δ \frac{\partial\ C}{\partial\ b}=\delta  b C=δ

代价函数相对权重的变化率:

z j l = ∑ k w j k l a k l − 1 + b j l z^l_j=\sum_kw^l_{jk}a^{l-1}_k+b^l_j zjl=kwjklakl1+bjl

∂   C ∂   w j k l = ∂   C ∂   z j l ∂   z j l ∂   w j k l = a k l − 1 δ j l \begin{aligned}\frac{\partial\ C}{\partial\ w^l_{jk}}&=\frac{\partial\ C}{\partial\ z^l_j}\frac{\partial\ z^l_j}{\partial\ w^l_{jk}}\\&=a^{l-1}_k\delta^l_j\end{aligned}  wjkl C= zjl C wjkl zjl=akl1δjl(BP4)

∂   C ∂   w = a i n δ o u t \frac{\partial\ C}{\partial\ w}=a_{in}\delta_{out}  w C=ainδout(权重对应的输入和误差相乘即为代价函数相对权重的变化率)

在这里插入图片描述

如果 a i n a_{in} ain很小,那么 ∂   C / ∂   w \partial\ C/\partial\ w  C/ w的值也很小,意味着权重的学习缓慢,受梯度影响不大,即输入小激活值的神经元学习缓慢。

另外,注意到代价函数相对权重和偏置的变化率都和误差 δ \delta δ相关,而 δ l \delta^l δl σ ′ ( z l ) \sigma^{\prime}(z^l) σ(zl)相关,因此激活函数的导数影响权重学习,对应sigmoid函数,在 σ ( z l ) \sigma(z^l) σ(zl)接近0或1时, σ ′ ( z l ) ≈ 0 \sigma^{\prime}(z^l)\approx0 σ(zl)0,出现梯度消失(或者说神经元已经饱和,无法再学到新东西)。因此,可以尝试修改激活函数,使得 σ ′ \sigma^{\prime} σ恒为正且不会趋近于0,保持神经元的学习能力。

总结:反向传播方程

δ L = ∇ a C ⊙ σ ′ ( z L ) \delta^L=\nabla_aC\odot\sigma^{\prime}(z^L) δL=aCσ(zL)(BP1)

δ l = ( ( w l + 1 ) T δ l + 1 ) ⊙ σ ′ ( z l ) \delta^l=((w^{l+1})^T\delta^{l+1})\odot\sigma^{\prime}(z^l) δl=((wl+1)Tδl+1)σ(zl)(BP2)

∂   C ∂   b j l = δ j l \frac{\partial\ C}{\partial\ b^l_j}=\delta^l_j  bjl C=δjl(BP3)

∂   C ∂ w j k l = a k l − 1 δ j l \frac{\partial\ C}{\partial\\ w^l_{jk}}=a^{l-1}_k\delta^l_j wjkl C=akl1δjl(BP4)

反向传播算法

对单独的训练样本计算代价函数的梯度, C = C x C=C_x C=Cx

在这里插入图片描述

结合梯度下降,每批 m m m个样本。

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值