多层神经网络的学习本领比单层网络强得多。想要练习多层网络,需要更强大的学习算法。误差反向传播算法(Back Propagation)是其中最杰出的代表,它是目前最成功的神经网络学习算法。实际任务利用神经网络时,大多是在利用 BP 算法举行练习,值得指出的是 BP 算法不但可用于多层前馈神经网络,还可以用于其他类型的神经网络。通常说 BP 网络时,一样平常是指用 BP 算法练习的多层前馈神经网络。
误差反向传播算法(BP)的根本步骤:
前向传播:正向盘算得到猜测值。
盘算损失:通过损失函数 L ( y pred , y true ) L(y_{\text{pred}}, y_{\text{true}}) L(ypred,ytrue) 盘算猜测值和真实值的差距。
链式求导法则(Chain Rule)是微积分中的一个重要法则,用于求复合函数的导数。在深度学习中,链式法则是反向传播算法的基础,如许就可以通过分层的盘算求得损失函数相对于每个参数的梯度。以下面的复合函数为例:
f ( x ) = 1 1 + e − ( w x + b ) \mathrm{f(x)=\frac{1}{1+e^{-(wx+b)}}} f(x)=1+e−(wx+b)1
其中 x x x 是输入数据, w w w 是权重, b b b 是偏置。
2.2.1 函数分解
可以将该复合函数分解为:
函数导数我们假设 w=0, b=0, x=1 h 1 = x × w h_1 = x \times w h1=x×w ∂ h 1 ∂ w = x , ∂ h 1 ∂ x = w \frac{\partial h_1}{\partial w} = x, \quad \frac{\partial h_1}{\partial x} = w ∂w∂h1=x,∂x∂h1=w h 1 = x × w = 0 h_1 = x \times w = 0 h1=x×w=0 h 2 = h 1 + b h_2 = h_1 + b h2=h1+b ∂ h 2 ∂ h 1 = 1 , ∂ h 2 ∂ b = 1 \frac{\partial h_2}{\partial h_1} = 1, \quad \frac{\partial h_2}{\partial b} = 1 ∂h1∂h2=1,∂b∂h2=1 h 2 = h 1 + b = 0 + 0 = 0 h_2 = h_1 + b = 0 + 0 = 0 h2=h1+b=0+0=0 h 3 = h 2 × − 1 h_3 = h_2 \times -1 h3=h2×−1 ∂ h 3 ∂ h 2 = − 1 \frac{\partial h_3}{\partial h_2} = -1 ∂h2∂h3=−1 h 3 = h 2 × − 1 = 0 × − 1 = 0 h_3 = h_2 \times -1=0 \times -1 = 0 h3=h2×−1=0×−1=0 h 4 = e x p ( h 3 ) h_4 = exp(h_3) h4=exp(h3) ∂ h 4 ∂ h 3 = e x p ( h 3 ) \frac{\partial h_4}{\partial h_3} = exp(h_3) ∂h3∂h4=exp(h3) h 4 = e x p ( h 3 ) = e x p ( 0 ) = 1 h_4 = exp(h_3) = exp(0)=1 h4=exp(h3)=exp(0)=1 h 5 = h 4 + 1 h_5 = h_4 + 1 h5=h4+1 ∂ h 5 ∂ h 4 = 1 \frac{\partial h_5}{\partial h_4} = 1 ∂h4∂h5=1 h 5 = h 4 + 1 = 1 + 1 = 2 h_5 = h_4 + 1 = 1 + 1 = 2 h5=h4+1=1+1=2 h 6 = 1 / h 5 h_6 = 1/h_5 h6=1/h5 ∂ h 6 ∂ h 5 = − 1 h 5 2 \frac{\partial h_6}{\partial h_5} = -\frac{1}{h^2_5} ∂h5∂h6=−h521 h 6 = 1 / h 5 = 1 / 2 = 0.5 h_6 = 1/h_5 = 1 / 2 = 0.5 h6=1/h5=1/2=0.5 2.2.2 链式求导
复合函数数学过程如下:
∂ f ( x ; w , b ) ∂ w = ∂ f ( x ; w , b ) ∂ h 6 ∂ h 6 ∂ h 5 ∂ h 5 ∂ h 4 ∂ h 4 ∂ h 3 ∂ h 3 ∂ h 2 ∂ h 2 ∂ h 1 ∂ h 1 ∂ w ∂ f ( x ; w , b ) ∂ b = ∂ f ( x ; w , b ) ∂ h 6 ∂ h 6 ∂ h 5 ∂ h 5 ∂ h 4 ∂ h 4 ∂ h 3 ∂ h 3 ∂ h 2 ∂ h 2 ∂ b \frac{\partial f(x;w,b)}{\partial w}=\frac{\partial f(x;w,b)}{\partial h_6}\frac{\partial h_6}{\partial h_5}\frac{\partial h_5}{\partial h_4}\frac{\partial h_4}{\partial h_3}\frac{\partial h_3}{\partial h_2}\frac{\partial h_2}{\partial h_1}\frac{\partial h_1}{\partial w} \\ \\ \frac{\partial f(x;w,b)}{\partial b}=\frac{\partial f(x;w,b)}{\partial h_6}\frac{\partial h_6}{\partial h_5}\frac{\partial h_5}{\partial h_4}\frac{\partial h_4}{\partial h_3}\frac{\partial h_3}{\partial h_2}\frac{\partial h_2}{\partial b} ∂w∂f(x;w,b)=∂h6∂f(x;w,b)∂h5∂h6∂h4∂h5∂h3∂h4∂h2∂h3∂h1∂h2∂w∂h1∂b∂f(x;w,b)=∂h6∂f(x;w,b)∂h5∂h6∂h4∂h5∂h3∂h4∂h2∂h3∂b∂h2
可以得到:
∂ f ( x ; w , b ) ∂ w ∣ x = 1 , w = 0 , b = 0 = ∂ f ( x ; w , b ) ∂ h 6 ∂ h 6 ∂ h 5 ∂ h 5 ∂ h 4 ∂ h 4 ∂ h 3 ∂ h 3 ∂ h 2 ∂ h 2 ∂ h 1 ∂ h 1 ∂ w = 1 × − 0.25 × 1 × 1 × − 1 × 1 × 1 = 0.25. \begin{aligned} \frac{\partial f(x;w,b)}{\partial w}|_{x=1,w=0,b=0}& =\frac{\partial f(x;w,b)}{\partial h_6}\frac{\partial h_6}{\partial h_5}\frac{\partial h_5}{\partial h_4}\frac{\partial h_4}{\partial h_3}\frac{\partial h_3}{\partial h_2}\frac{\partial h_2}{\partial h_1}\frac{\partial h_1}{\partial w} \\ &=1\times-0.25\times1\times1\times-1\times1\times1 \\ &=0.25. \end{aligned} ∂w∂f(x;w,b)∣x=1,w=0,b=0=∂h6∂f(x;w,b)∂h5∂h6∂h4∂h5∂h3∂h4∂h2∂h3∂h1∂h2∂w∂h1=1×−0.25×1×1×−1×1×1=0.25.
2.2.3 代码实现
i 1 = 0.05 , i 2 = 0.10 i_1=0.05, i_2=0.10 i1=0.05,i2=0.10 代表输入层输入数据的2个特征;
w 1 = 0.15 , w 2 = 0.20 w_1=0.15, w_2=0.20 w1=0.15,w2=0.20代表的是输入数据映射到 h 1 h_1 h1的权重参数;
w 3 = 0.25 , w 4 = 0.30 w_3=0.25, w_4=0.30 w3=0.25,w4=0.30代表的是输入数据映射到 h 2 h_2 h2的权重参数;
b 1 = 0.35 , b 2 = 0.60 b1=0.35,b2=0.60 b1=0.35,b2=0.60分别代表输入层到隐蔽层、隐蔽层到输出层的偏执;
w 5 = 0.40 , w 6 = 0.45 w_5=0.40, w_6=0.45 w5=0.40,w6=0.45代表的是隐蔽层的神经元映射到 o 1 o_1 o1的权重参数;
w 7 = 0.50 , w 8 = 0.55 w_7=0.50, w_8=0.55 w7=0.50,w8=0.55代表的是隐蔽层的神经元映射到 o 2 o_2 o2的权重参数;
o 1 o_1 o1下面标注的 0.01 0.01 0.01表示target为 0.01 0.01 0.01, o 2 o_2 o2下面标注的 0.99 0.99 0.99表示target为 0.99 0.99 0.99;
2.5.2 神经元盘算
以是,我们可以得到如下数据:
盘算h1的相干数据:
h 1 = w 1 ∗ i 1 + w 2 ∗ i 2 + b 1 = 0.15 ∗ 0.05 + 0.20 ∗ 0.10 + 0.35 = 0.3775 k 1 = s i g m o i d ( h 1 ) = s i g m o i d ( 0.3775 ) = 0.5933 \mathrm{h}_{1}=\mathrm{w}_{1}*\mathrm{i}_{1}+\mathrm{w}_{2}*\mathrm{i}_{2}+\mathrm{b}_{1}\quad =0.15 * 0.05 + 0.20 * 0.10 + 0.35 =0.3775 \\ k_{1}=sigmoid(h1)=sigmoid(0.3775)=0.5933 h1=w1∗i1+w2∗i2+b1=0.15∗0.05+0.20∗0.10+0.35=0.3775k1=sigmoid(h1)=sigmoid(0.3775)=0.5933
盘算h2的相干数据:
h 2 = w 3 ∗ i 1 + w 4 ∗ i 2 + b 1 = 0.25 ∗ 0.05 + 0.30 ∗ 0.10 + 0.35 = 0.3925 k 2 = s i g m o i d ( h 2 ) = s i g m o i d ( 0.3925 ) = 0.5969 \mathrm{h}_{2}=\mathrm{w}_{3}*\mathrm{i}_{1}+\mathrm{w}_{4}*\mathrm{i}_{2}+\mathrm{b}_{1}\quad =0.25 * 0.05 + 0.30 * 0.10 + 0.35 =0.3925 \\ k_{2}=sigmoid(h2)=sigmoid(0.3925)=0.5969 h2=w3∗i1+w4∗i2+b1=0.25∗0.05+0.30∗0.10+0.35=0.3925k2=sigmoid(h2)=sigmoid(0.3925)=0.5969
盘算o1的相干数据:
o 1 = w 5 ∗ k 1 + w 6 ∗ k 2 + b 2 = 0.40 ∗ 0.5933 + 0.45 ∗ 0.5969 + 0.60 = 1.1059 m 1 = s i g m o i d ( o 1 ) = s i g m o i d ( 1.1059 ) = 0.7514 \mathrm{o}_{1}=\mathrm{w}_{5}*\mathrm{k}_{1}+\mathrm{w}_{6}*\mathrm{k}_{2}+\mathrm{b}_{2}\quad =0.40 * 0.5933 + 0.45 * 0.5969 + 0.60 =1.1059 \\ m_{1}=sigmoid(o1)=sigmoid(1.1059)=0.7514 o1=w5∗k1+w6∗k2+b2=0.40∗0.5933+0.45∗0.5969+0.60=1.1059m1=sigmoid(o1)=sigmoid(1.1059)=0.7514
盘算o2的相干数据:
o 2 = w 7 ∗ k 1 + w 8 ∗ k 2 + b 2 = 0.50 ∗ 0.5933 + 0.55 ∗ 0.5969 + 0.60 = 1.2249 m 2 = s i g m o i d ( o 2 ) = s i g m o i d ( 1.2249 ) = 0.7729 \mathrm{o}_{2}=\mathrm{w}_{7}*\mathrm{k}_{1}+\mathrm{w}_{8}*\mathrm{k}_{2}+\mathrm{b}_{2}\quad =0.50 * 0.5933 + 0.55 * 0.5969 + 0.60 =1.2249 \\ m_{2}=sigmoid(o2)=sigmoid(1.2249)=0.7729 o2=w7∗k1+w8∗k2+b2=0.50∗0.5933+0.55∗0.5969+0.60=1.2249m2=sigmoid(o2)=sigmoid(1.2249)=0.7729
以是,最终的猜测结果分别为: 0.7514、0.7729
2.5.3 损失盘算
猜测值和真实值(target)举行比较盘算损失:
M S E L o s s = 1 2 ( ( m 1 − t a r g e t 1 ) 2 + ( ( m 2 − t a r g e t 2 ) 2 ) = 1 2 ( ( 0.7514 − 0.01 ) 2 + ( ( 0.7729 − 0.99 ) 2 ) = 0.2984 MSELoss = \frac{1}{2}((\mathrm{m}_{1}\mathrm{-target}_{1})^{2}+((\mathrm{m}_{2}\mathrm{-target}_{2})^{2}) \\ = \frac{1}{2}((0.7514-0.01)^{2}+((0.7729-0.99)^{2}) =0.2984 MSELoss=21((m1−target1)2+((m2−target2)2)=21((0.7514−0.01)2+((0.7729−0.99)2)=0.2984
得到损失是:0.2984
2.5.4 梯度盘算
接下来,我们举行梯度盘算和参数更新
盘算 w5 权重的梯度
∂ L ∂ w 5 = ∂ L ∂ o 1 1 ∗ ∂ m 1 ∂ o 1 ∗ ∂ o 1 ∂ w 5 = ( m 1 − t a r g e t 1 ) ∗ s i g m o i d ( o 1 ) ∗ ( 1 − s i g m o i d ( o 1 ) ) ∗ k 1 = ( 0.7514 − 0.01 ) ∗ s i g m o i d ( 1.1059 ) ∗ ( 1 − s i g m o i d ( 1.1059 ) ) ∗ 0.5933 = 0.0822 \begin{aligned} \frac{\partial\mathrm{L}}{\partial\mathrm{w}_{5}}& =\frac{\partial\mathrm{L}}{\partial\mathrm{o1}_{1}}*\frac{\partial\mathrm{m}_{1}}{\partial\mathrm{o}_{1}}*\frac{\partial\mathrm{o}_{1}}{\partial\mathrm{w}_{5}} \\ &=(\mathrm{m}_{1}-\mathrm{target}_{1})*\mathrm{sigmoid}(\mathrm{o}_{1})*\left(1-\mathrm{sigmoid}(\mathrm{o}_{1})\right)*\mathrm{k}_{1} \\ &=(0.7514-0.01)*sigmoid(1.1059)*\left(1-sigmoid(1.1059)\right)*0.5933 \\ &=0.0822 \end{aligned} ∂w5∂L=∂o11∂L∗∂o1∂m1∗∂w5∂o1=(m1−target1)∗sigmoid(o1)∗(1−sigmoid(o1))∗k1=(0.7514−0.01)∗sigmoid(1.1059)∗(1−sigmoid(1.1059))∗0.5933=0.0822
盘算 w7 权重的梯度
∂ L ∂ w 7 = ∂ L ∂ m 2 ∗ ∂ m 2 ∂ o 2 ∗ ∂ o 2 ∂ w 7 = ( m 2 − t a r g e t 2 ) ∗ s i g m o i d ( o 2 ) ∗ ( 1 − s i g m o i d ( o 2 ) ) ∗ k 1 = ( 0.7729 − 0.99 ) ∗ s i g m o i d ( 1.2249 ) ∗ ( 1 − s i g m o i d ( 1.2249 ) ) ∗ 0.5933 = − 0.0226 \begin{aligned} \frac{\partial\mathrm{L}}{\partial\mathrm{w}_7}& =\frac{\partial\mathrm{L}}{\partial\mathrm{m}_2}*\frac{\partial\mathrm{m}_2}{\partial\mathrm{o}_2}*\frac{\partial\mathrm{o}_2}{\partial\mathrm{w}_7} \\ &=(\mathrm{m}_{2}-\mathrm{target}_{2})*\mathrm{sigmoid}(\mathrm{o}_{2})*\left(1-\mathrm{sigmoid}(\mathrm{o}_{2})\right)*\mathrm{k}_{1} \\ &=(0.7729-0.99)*sigmoid(1.2249)*\left(1-sigmoid(1.2249)\right)*0.5933 \\ &=-0.0226 \end{aligned} ∂w7∂L=∂m2∂L∗∂o2∂m2∗∂w7∂o2=(m2−target2)∗sigmoid(o2)∗(1−sigmoid(o2))∗k1=(0.7729−0.99)∗sigmoid(1.2249)∗(1−sigmoid(1.2249))∗0.5933=−0.0226
盘算 w1 权重的梯度
w i j n e w = w i j o l d − α ∂ E ∂ w i j w_{ij}^{new}= w_{ij}^{old} - \alpha \frac{\partial E}{\partial w_{ij}} wijnew=wijold−α∂wij∂E
其中, α \alpha α是学习率:
学习率太小,每次练习之后的结果太小,增加时间和算力成本。
学习率太大,大概率会跳过最优解,进入无限的练习和震荡中。
解决的方法就是,学习率也需要随着练习的举行而变化。
3.1.2 过程论述
初始化参数:随机初始化模型的参数 θ \theta θ,如权重 W W W和偏置 b b b。
盘算梯度:损失函数 L ( θ ) L(\theta) L(θ)对参数 θ \theta θ 的梯度 ∇ θ L ( θ ) \nabla_\theta L(\theta) ∇θL(θ),表示损失函数在参数空间的变化率。
公式:
θ : = θ − α 1 m ∑ i = 1 m ∇ θ L ( θ ; x ( i ) , y ( i ) ) \theta := \theta - \alpha \frac{1}{m} \sum_{i=1}^{m} \nabla_\theta L(\theta; x^{(i)}, y^{(i)}) θ:=θ−αm1i=1∑m∇θL(θ;x(i),y(i))
其中, m m m 是练习集样本总数, x ( i ) , y ( i ) x^{(i)}, y^{(i)} x(i),y(i)是第 i i i 个样本及其标签。
3.2.2 随机梯度降落
Stochastic Gradient Descent, SGD
特点:
每次更新参数时,仅利用一个样本来盘算梯度。
优点:
更新频率高,盘算快,适合大规模数据集。
能够跳出局部最小值,有助于找到全局最优解。
缺点:
收敛不稳定,轻易震荡,由于每个样本的梯度可能都不完全代表整体方向。
需要较小的学习率来缓解震荡。
公式:
θ : = θ − α ∇ θ L ( θ ; x ( i ) , y ( i ) ) \theta := \theta - \alpha \nabla_\theta L(\theta; x^{(i)}, y^{(i)}) θ:=θ−α∇θL(θ;x(i),y(i))
其中, x ( i ) , y ( i ) x^{(i)}, y^{(i)} x(i),y(i) 是当前随机抽取的样本及其标签。
3.2.3 小批量梯度降落
Mini-batch Gradient Descent MGBD
特点:
每次更新参数时,利用一小部分练习集(小批量)来盘算梯度。
优点:
在盘算效率和收敛稳定性之间取得均衡。
能够利用向量化加速盘算,适合现代硬件(如GPU)。
缺点:
选择适当的批量大小比较困难;批量太小则靠近SGD,批量太大则靠近批量梯度降落。
通常会根据硬件算力设置为32\64\128\256等2的次方。
公式:
θ : = θ − α 1 b ∑ i = 1 b ∇ θ L ( θ ; x ( i ) , y ( i ) ) \theta := \theta - \alpha \frac{1}{b} \sum_{i=1}^{b} \nabla_\theta L(\theta; x^{(i)}, y^{(i)}) θ:=θ−αb1i=1∑b∇θL(θ;x(i),y(i))
其中, b b b 是小批量的样本数量,也就是 b a t c h _ s i z e batch\_size batch_size。
梯度降落公式中梯度的盘算,就不再是当前时候 t 的梯度值,而是历史梯度值的指数移动加权平均值。
公式修改为: W t + 1 = W t − α ∗ D t W_{t+1}=W_t-α*D_t Wt+1=Wt−α∗Dt c.原理
那么,Monmentum 优化方法是如何肯定程度上克服 “平缓”、”鞍点”、”峡谷” 的问题呢?