BP 神经网络原理

BP (Back Propagation) 神经网络是1986年由 Rumelhart 和 McClelland 为首的科学家提出的概念,是一种按照误差逆向传播算法训练的多层前馈神经网络,是应用最广泛的神经网络。

1 BP 神经网络的结构和传播规则

BP神经网络由 输入层、隐含层(也称中间层)和 输出层 构成 ,其中隐含层有一层或者多层。每一层可以有若干个节点。层与层之间节点的连接状态通过 权重 来体现。

在这里插入图片描述

BP神经网络的核心步骤如下。其中,实线代表正向传播,虚线代表反向传播。

在这里插入图片描述

1.1 正向传播

数据(信息、信号)从输入端输入后,沿着网络的指向,乘以对应的权重后再加和,再将结果作为输入在激活函数中计算,将计算的结果作为输入传递给下一个节点。依次计算,直到得到最终结果。
通过每一层的感知器,层层计算,得到输出,每个节点的输出作为下一个节点的输入。这个过程就是正向传播。

1.1.1 激活函数

必须处处可导(一般都使用S型函数)。

sigmoid 函数:

δ ( x ) = 1 1 + e − x \delta(x) = \frac{1}{1 + e^{-x}} δ(x)=1+ex1

sigmoid 函数的导函数:

δ ′ ( x ) = δ ( x ) ( 1 − δ ( x ) ) \delta ^{'} (x) = \delta(x) (1 - \delta(x)) δ(x)=δ(x)(1δ(x))

1.1.2 前向传播计算

如前面的 BP 神经网络结构图所示,使用 w j k l w_{jk}^{l} wjkl 表示从网络第 (l-1)层中的第 k 个神经元指向网络第 l 层中的第 j 个神经元的连接权重; b j l b_{j}^{l} bjl 表示网络第 l 层中的第 j 个神经元的 bias; y j l y_{j}^{l} yjl 表示网络第 l 层中的第 j 个神经元的线性输出的结果; x j l x_{j}^{l} xjl 表示网络第 l 层中的第 j 个神经元的激活函数的输出。

那么网络第 l 层中的第 j 个神经元的激活函数的输出可以表示成:

x j l = δ ( ∑ k w j k l a k l − 1 + b l l ) x_{j}^{l} = \delta (\sum _k w_{jk}^{l}a_k^{l-1} + b_l^l) xjl=δ(kwjklakl1+bll)

写成矩阵形式,定义权重矩阵 w l w^l wl,权重矩阵的每一个元素都代表一个权重:

w l = [ w 11 l w 12 l w 13 l w 21 l w 22 l w 23 l w 31 l w 32 l w 33 l ] w^l = \left[ \begin{matrix} w_{11}^l & w_{12}^l & w_{13}^l \\ w_{21}^l & w_{22}^l & w_{23}^l \\ w_{31}^l & w_{32}^l & w_{33}^l \\ \end{matrix} \right] wl= w11lw21lw31lw12lw22lw32lw13lw23lw33l

同样可以写出 x、b、y 的矩阵形式:

x l = [ x 1 l x 2 l x 3 l ] x^l = \left[ \begin{matrix} x_1^l \\ x_2^l \\ x_3^l \\ \end{matrix} \right] xl= x1lx2lx3l

b l = [ b 1 l b 2 l b 3 l ] b^l = \left[ \begin{matrix} b_1^l \\ b_2^l \\ b_3^l \\ \end{matrix} \right] bl= b1lb2lb3l

y l = δ ( [ w 11 l w 12 l w 13 l w 21 l w 22 l w 23 l w 31 l w 32 l w 33 l ] ⋅ [ x 1 l − 1 x 2 l − 1 x 3 l − 1 ] + [ b 1 l b 2 l b 3 l ] ) y^l = \delta \left( \left[ \begin{matrix} w_{11}^l & w_{12}^l & w_{13}^l \\ w_{21}^l & w_{22}^l & w_{23}^l \\ w_{31}^l & w_{32}^l & w_{33}^l \\ \end{matrix} \right] \cdot \left[ \begin{matrix} x_1^{l-1} \\ x_2^{l-1} \\ x_3^{l-1} \\ \end{matrix} \right] + \left[ \begin{matrix} b_1^l \\ b_2^l \\ b_3^l \\ \end{matrix} \right] \right) yl=δ w11lw21lw31lw12lw22lw32lw13lw23lw33l x1l1x2l1x3l1 + b1lb2lb3l

即,

y l = δ ( [ w 11 l x 1 l − 1 + w 12 l x 2 l − 1 + w 13 l x 3 l − 1 + b 1 l w 21 l x 1 l − 1 + w 22 l x 2 l − 1 + w 23 l x 3 l − 1 + b 2 l w 31 l x 1 l − 1 + w 32 l x 2 l − 1 + w 33 l x 3 l − 1 + b 3 l ] ) y^l = \delta \left( \left[ \begin{matrix} w_{11}^lx_1^{l-1} + w_{12}^lx_2^{l-1} + w_{13}^lx_3^{l-1} + b_1^l \\ w_{21}^lx_1^{l-1} + w_{22}^lx_2^{l-1} + w_{23}^lx_3^{l-1} + b_2^l \\ w_{31}^lx_1^{l-1} + w_{32}^lx_2^{l-1} + w_{33}^lx_3^{l-1} + b_3^l \\ \end{matrix} \right] \right) yl=δ w11lx1l1+w12lx2l1+w13lx3l1+b1lw21lx1l1+w22lx2l1+w23lx3l1+b2lw31lx1l1+w32lx2l1+w33lx3l1+b3l

前向传播的一般形式:

y l = δ ( w l ⋅ x l − 1 + b l ) y^l = \delta (w^l \cdot x^{l-1} + b^l) yl=δ(wlxl1+bl)

这里的输入只有一条数据,因此输入数据表现为一维列向量。多样本输入的时候是一样的,只是输入数据变成了一个二维的矩阵,矩阵的每一列都是一个输入样本数据。

多样本输入可以表示为:

Y l = δ ( w l ⋅ X l − 1 + b l ) X l = δ ( Y l ) Y^l = \delta (w^l \cdot X^{l-1} +b^l) \\ X^l = \delta (Y^l) Yl=δ(wlXl1+bl)Xl=δ(Yl)

1.2 梯度下降算法

梯度下降法是训练神经网络和线性分类器的一种普遍方法。斜率是函数的导数。梯度上的每个元素都会指明函数在该点处各个方向的斜率,梯度指向函数变化最快的方向。正梯度和负梯度指向变大最快的方向和变小最快的方向。

在正向传播的过程中,有一个 与期望的结果比较是否满意 的环节,在这个环节中实际的输出结果与期望的输出结果之间就会产生一个误差。为了减小这个误差,这个问题就转换为了一个优化问题。在这个优化问题中,目标函数就是损失函数(Loss function)。

L o s s = 1 2 ∑ i = 1 n ( y i − y ^ i ) 2 = 1 2 ∑ i = 1 n [ y i − ( w x i + b ) ] 2 Loss = \frac{1}{2} \sum _{i=1}^{n} (y_i - \hat{y}_{i})^2 \\ = \frac{1}{2} \sum _{i=1}^{n} [y_i - (wx_i + b)]^2 Loss=21i=1n(yiy^i)2=21i=1n[yi(wxi+b)]2

为了让实际的输出结果与期望的输出结果之间的误差最小,需要寻找损失函数的最小值。

1.2.1 使用迭代的方式寻找最小值

解析解:通过严格的公示推倒计算,给出的方程的精确解,任意精度下满足方程。

数值解:在一定条件下,通过某种近似计算得到的解,能够在给定的精度下满足方程。

迭代的方法寻找损失最小值 就是通过 梯度下降 + 迭代 的方式寻找数值解。

在这里插入图片描述

在迭代过程中,每次迭代各层节点之间的权重将不断地更新。

W ( t + 1 ) = W ( t ) − η ∂ L o s s ∂ w + α [ W ( t ) − W ( t − 1 ) ] W_{(t+1)}=W_{(t)} - \eta \frac{\partial Loss}{\partial w} + \alpha [W_{(t)} - W_{(t - 1)}] W(t+1)=W(t)ηwLoss+α[W(t)W(t1)]

  • η ∂ L o s s ∂ w \eta \frac{\partial Loss}{\partial w} ηwLoss,每次更新权重的调整量
  • α [ W ( t ) − W ( t − 1 ) ] \alpha [W_{(t)} - W_{(t - 1)}] α[W(t)W(t1)],更新权重时的平滑项

每次迭代都会更新一次权重,之后将更新的权重与训练样本进行正向传播,如果得到的结果不满意,则进行反向传播,继续迭代。如此往复,直到得到满意的结果为止。

1.2.2 局部最小值和全局最小值

梯度下降学习法,总是沿着梯度下降的方向对权重进行调整。考虑梯度存在多个极值点,那么这些极值点中只有一个时全局最小值点,其他都是局部最小值点。

在这里插入图片描述

当权重调整至某个局部最小值附近的时候,由于总是沿着梯度下降的方向对权重进行调整,那么最终就会将权重调整至这个局部最小值点,并把它当作是全局最小值点了。但是实际上此时权重并不是处于全局最小值点,这样的情况并不是我们期望的。

1.2.3 算法改进
1.2.3.1 引入动量项

W ( t + 1 ) = W ( t ) − η [ ( 1 − α ) ∂ L o s s ∂ W ( t ) + α ∂ L o s s ∂ W ( t − 1 ) ] W_{(t+1)}=W_{(t)} - \eta [(1 - \alpha) \frac{\partial Loss}{\partial W_{(t)}} + \alpha \frac{\partial Loss}{\partial W_{(t-1)}}] W(t+1)=W(t)η[(1α)W(t)Loss+αW(t1)Loss]

  • η > 0 \eta > 0 η>0,为学习率
  • 0 ≤ α < 1 0 \le \alpha < 1 0α<1 ,为动量因子
  • 通过引入动量项,给权重调整量添加一个梯度正方向的修正,类似于物体的惯性的效果,可以一定程度解决把局部最小值当做全局最小值的问题。
1.2.3.2 变步长法

学习率 η \eta η 选的太小,会导致收敛太慢;选的太大,会导致权重调整过头,导致震荡甚至发散。可以采用变步长法进行改进:
W ( t + 1 ) = W ( t ) − η ( t ) ∂ L o s s ∂ w η ( t ) = 2 λ η ( t − 1 ) λ = s g n [ ∂ L o s s ∂ w ( t ) ⋅ ∂ L o s s ∂ w ( t − 1 ) ] W_{(t+1)}=W_{(t)} - \eta (t) \frac{\partial Loss}{\partial w} \\ \eta (t) = 2^{\lambda} \eta (t - 1) \\ \lambda = sgn[\frac{\partial Loss}{\partial w_{(t)}} \cdot \frac{\partial Loss}{\partial w_{(t - 1)}}] W(t+1)=W(t)η(t)wLossη(t)=2λη(t1)λ=sgn[w(t)Lossw(t1)Loss]

  • 上面第三个式子根据相邻两次计算的梯度乘积来计算符号函数,可以实时调整学习率。当连续两次迭代的梯度的方向相同,说明下降太慢,这时通过上面第二个式子使步长加倍;当连续两次迭代的梯度的方向相反,说明下降过头,这时通过上面第二个式子使步长减半。
  • 上面的第二个式子里面的 2,可以根据实际需要,改成其他值,以此来控制步长的变化快慢。
1.2.3.3 引入动量项与变步长法结合

W ( t + 1 ) = W ( t ) − η ( t ) [ ( 1 − α ) ∂ L o s s ∂ w ( t ) + α ∂ L o s s ∂ w ( t − 1 ) ] η ( t ) = 2 λ η ( t − 1 ) λ = s g n [ ∂ L o s s ∂ w ( t ) ⋅ ∂ L o s s ∂ w ( t − 1 ) ] W_{(t+1)}=W_{(t)} - \eta (t) [(1 - \alpha) \frac{\partial Loss}{\partial w_{(t)}} + \alpha \frac{\partial Loss}{\partial w_{(t - 1)}}] \\ \eta (t) = 2^{\lambda} \eta (t - 1) \\ \lambda = sgn[\frac{\partial Loss}{\partial w_{(t)}} \cdot \frac{\partial Loss}{\partial w_{(t - 1)}}] W(t+1)=W(t)η(t)[(1α)w(t)Loss+αw(t1)Loss]η(t)=2λη(t1)λ=sgn[w(t)Lossw(t1)Loss]

1.3 反向传播
1.3.1 求梯度矩阵

假设函数 f : R m × n → R f: R^{m \times n} \rightarrow R f:Rm×nR 可以把输入矩阵映射为一个实数,那么函数 f f f 的梯度定义为:

∇ A f ( A ) = [ ∂ f ( A ) ∂ A 11 ∂ f ( A ) ∂ A 12 … ∂ f ( A ) ∂ A 1 n ∂ f ( A ) ∂ A 21 ∂ f ( A ) ∂ A 22 … ∂ f ( A ) ∂ A 2 n ⋮ ⋮ ⋱ ⋮ ∂ f ( A ) ∂ A m 1 ∂ f ( A ) ∂ A m 2 … ∂ f ( A ) ∂ A m n ] \nabla _A f(A) = \left[ \begin{matrix} \frac{\partial f(A)}{\partial A_{11}} & \frac{\partial f(A)}{\partial A_{12}} & \dotsc & \frac{\partial f(A)}{\partial A_{1n}} \\ \frac{\partial f(A)}{\partial A_{21}} & \frac{\partial f(A)}{\partial A_{22}} & \dotsc & \frac{\partial f(A)}{\partial A_{2n}} \\ \vdots & \vdots & \ddots & \vdots \\ \frac{\partial f(A)}{\partial A_{m1}} & \frac{\partial f(A)}{\partial A_{m2}} & \dotsc & \frac{\partial f(A)}{\partial A_{mn}} \\ \end{matrix} \right] Af(A)= A11f(A)A21f(A)Am1f(A)A12f(A)A22f(A)Am2f(A)A1nf(A)A2nf(A)Amnf(A)

( ∇ A f ( A ) ) i j = ∂ f ( A ) ∂ A i j (\nabla_A f(A))_{ij} = \frac{\partial f(A)}{\partial A_{ij}} (Af(A))ij=Aijf(A)

同样地,对于输入向量的函数 f : R n × 1 → R f: R^{n \times 1} \rightarrow R f:Rn×1R,那么:

∇ x f ( x ) = [ ∂ f ( x ) ∂ x 1 ∂ f ( x ) ∂ x 2 ⋮ ∂ f ( x ) ∂ x n ] \nabla_x f(x) = \left[ \begin{matrix} \frac{\partial f(x)}{\partial x_1} \\ \frac{\partial f(x)}{\partial x_2} \\ \vdots \\ \frac{\partial f(x)}{\partial x_n} \\ \end{matrix} \right] xf(x)= x1f(x)x2f(x)xnf(x)

根据上面的矩阵和向量的梯度矩阵的定义,可以得到:

∇ x ( f ( x ) + g ( x ) ) = ∇ x f ( x ) + ∇ x g ( x ) ∇ x ( t f ( x ) ) = t ∇ x f ( x ) , t ∈ R \nabla_x (f(x) + g(x)) = \nabla_x f(x) + \nabla_x g(x) \\ \nabla_x (tf(x)) = t\nabla_x f(x), t \in R x(f(x)+g(x))=xf(x)+xg(x)x(tf(x))=txf(x),tR

1.3.2 海塞矩阵

定义一个输入为 n 维向量,输出为实数的函数 f : R n → R f: R^n \rightarrow R f:RnR,那么海塞矩阵定义为多元函数 f f f 的二阶偏导数构成的方阵:

∇ x 2 f ( x ) = [ ∂ 2 f ( x ) ∂ x 1 2 ∂ 2 f ( x ) ∂ x 1 ∂ x 2 ⋯ ∂ 2 f ( x ) ∂ x 1 ∂ x n ∂ 2 f ( x ) ∂ x 2 ∂ x 1 ∂ 2 f ( x ) ∂ x 2 2 ⋯ ∂ 2 f ( x ) ∂ x 2 ∂ x n ⋮ ⋮ ⋱ ⋮ ∂ 2 f ( x ) ∂ x n ∂ x 1 ∂ 2 f ( x ) ∂ x n ∂ x 2 ⋯ ∂ 2 f ( x ) ∂ x n 2 ] \nabla _x ^2 f(x) = \left[ \begin{matrix} \frac{\partial ^2 f(x)}{\partial x_1^2} & \frac{\partial ^2 f(x)}{\partial x_1 \partial x_2} & \cdots & \frac{\partial ^2 f(x)}{\partial x_1 \partial x_n} \\ \frac{\partial ^2 f(x)}{\partial x_2 \partial x_1} & \frac{\partial ^2 f(x)}{\partial x_2 ^2} & \cdots & \frac{\partial ^2 f(x)}{\partial x_2 \partial x_n} \\ \vdots & \vdots & \ddots & \vdots \\ \frac{\partial ^2 f(x)}{\partial x_n \partial x_1} & \frac{\partial ^2 f(x)}{\partial x_n \partial x_2} & \cdots & \frac{\partial ^2 f(x)}{\partial x_n^2} \\ \end{matrix} \right] x2f(x)= x122f(x)x2x12f(x)xnx12f(x)x1x22f(x)x222f(x)xnx22f(x)x1xn2f(x)x2xn2f(x)xn22f(x)

由上式可以看出,海塞矩阵一定是对称矩阵。

根据梯度矩阵和海塞矩阵可以得到:

b ∈ R n , x ∈ R n , A ∈ R n × n b \in R^n , x \in R^n, A \in R^{n \times n} bRn,xRn,ARn×n,A 为对称矩阵,b 和 x 都是列向量,那么有:
∇ x b T x = b ∇ x x T A x = 2 A x ∇ x 2 x T A x = 2 A \nabla _x b^T x = b \\ \nabla _x x^T Ax = 2Ax \\ \nabla _x ^2 x^T Ax = 2A \\ xbTx=bxxTAx=2Axx2xTAx=2A

1.3.3 矩阵相乘和矩阵对应元素相乘

有矩阵 A = [ 1 2 3 4 ] A = \left[ \begin{matrix} 1 & 2 \\ 3 & 4 \\ \end{matrix}\right] A=[1324] B = [ − 1 − 2 − 3 − 4 ] B = \left[ \begin{matrix} -1 & -2 \\ -3 & -4 \\ \end{matrix}\right] B=[1324]:

  • 矩阵相乘:
    A B = [ 1 × ( − 1 ) + 2 × ( − 3 ) 1 × ( − 2 ) + 2 × ( − 4 ) 3 × ( − 1 ) + 4 × ( − 3 ) 3 × ( − 2 ) + 4 × ( − 4 ) ] = [ − 7 − 10 − 15 − 22 ] AB = \left[ \begin{matrix} 1 \times (-1) + 2 \times (-3) & 1 \times (-2) + 2 \times (-4) \\ 3 \times (-1) + 4 \times (-3) & 3\times (-2) + 4 \times (-4) \\ \end{matrix}\right] = \left[ \begin{matrix} -7 & -10 \\ -15 & -22 \\ \end{matrix}\right] AB=[1×(1)+2×(3)3×(1)+4×(3)1×(2)+2×(4)3×(2)+4×(4)]=[7151022]

  • 矩阵对应元素相乘:
    A ⊙ B = [ 1 × ( − 1 ) 2 × ( − 2 ) 3 × ( − 3 ) 4 × ( − 4 ) ] = [ − 1 − 4 − 9 − 16 ] A \odot B = \left[ \begin{matrix} 1 \times (-1) & 2 \times (-2) \\ 3 \times (-3) & 4 \times (-4) \\ \end{matrix}\right] = \left[ \begin{matrix} -1 & -4 \\ -9 & -16 \\ \end{matrix}\right] AB=[1×(1)3×(3)2×(2)4×(4)]=[19416]

1.3.4 反向传播原理

反向传播可以得到如何调整权重 w w w 和偏差 b b b 能够使损失函数的值沿着梯度下降的方向移动,这表明反向传播需要计算偏导数:
∂ L o s s ( a l , y ) ∂ w j k l ∂ L o s s ( a l , y ) ∂ b j l \frac{\partial Loss(a^l, y)}{\partial w_{jk}^l} \\ \frac{\partial Loss(a^l, y)}{\partial b_{j}^l} wjklLoss(al,y)bjlLoss(al,y)

其中 a l a^l al 是上一层的输出的激活函数输出。

为了计算这些偏导数,引入中间变量 e j l e_j^l ejl,用来表示网络中第 l l l 层第 j 个神经元的误差。后向传播能够计算出 e j l e_j^l ejl,然后将其对应回 $
\frac{\partial Loss(a^l, y)}{\partial w_{jk}^l}$ 和 $\frac{\partial Loss(a^l, y)}{\partial b_{j}^l}
$。

那么,如何定义每一层的误差才合理呢?如果为第 l l l 层的第 j 个神经元添加一个扰动 Δ y j l \Delta y_j^l Δyjl,使得损失函数的值变小,那么我们就可以认为这是一个好的扰动。通过选择 Δ y j l \Delta y_j^l Δyjl ∂ L o s s ( a l , y ) ∂ y j l \frac{\partial Loss(a^l, y)}{\partial y_{j}^l} yjlLoss(al,y) 的符号相反(梯度下降法的原理),就可以每次都添加一个好的扰动最终达到最优。

秉持上面的思想,可以定义网络第 l l l 层中第 j j j 个神经元的误差为:

e j l = ∂ L o s s ( a l , y ) ∂ y j l e_j^l = \frac{\partial Loss(a^l, y)}{\partial y_{j}^l} ejl=yjlLoss(al,y)

从而可以得到每一层误差的向量表示:

e l = [ e 1 l e 2 l ⋮ e n l ] e^l = \left[ \begin{matrix} e_1^l \\ e_2^l \\ \vdots \\ e_n^l \\ \end{matrix} \right] el= e1le2lenl

1.3.4.1 输出层误差

e j l = ∂ L ∂ a j l δ ′ ( y j l ) e_j^l = \frac{\partial L}{\partial a_j^l} \delta ^ {'}(y_j^l) ejl=ajlLδ(yjl)

其中 ∂ L \partial L L 表示 ∂ L o s s ( a l , y ) \partial Loss(a^l, y) Loss(al,y)
上式写成矩阵形式:

e l = ∇ a L ⊙ δ ′ ( y l ) e^l = \nabla _a L \odot \delta ^{'}(y^l) el=aLδ(yl)

说明:
误差定义:
e j l = ∂ L ∂ y j l e_j^l = \frac{\partial L}{\partial y_j^l} ejl=yjlL
根据链式法则得到:
e j l = ∑ k ∂ L ∂ a k l ∂ a k l ∂ y j l e_j^l = \sum _k \frac{\partial L}{\partial a_k^l} \frac{\partial a_k^l}{\partial y_j^l} ejl=kaklLyjlakl
j ≠ k j \ne k j=k 时, ∂ a k l ∂ y j l = 0 \frac{\partial a_k^l}{\partial y_j^l} = 0 yjlakl=0,那么上式可以化简为:
e j l = ∂ L ∂ a j l ∂ a j l ∂ y j l e_j^l = \frac{\partial L}{\partial a_j^l} \frac{\partial a_j^l}{\partial y_j^l} ejl=ajlLyjlajl
考虑到 a j l = δ ( y j l ) a_j ^l = \delta (y_j^l) ajl=δ(yjl):
e j l = ∂ L ∂ a j l δ ′ ( y j l ) e_j^l = \frac{\partial L}{\partial a_j^l} \delta ^ {'}(y_j^l) ejl=ajlLδ(yjl)
即得到了输出层的误差表示。

1.3.4.2 隐藏层误差

e j l = ∑ k w j k l + 1 e j l + 1 δ ′ ( y j l ) e_j^l = \sum _k w_{jk}^{l+1} e_j^{l+1} \delta ^ {'}(y_j^l) ejl=kwjkl+1ejl+1δ(yjl)

写成矩阵形式:

e l = [ ( w l + 1 ) T e l + 1 ] ⊙ δ ′ ( y l ) e^l = [(w^{l+1})^T e^{l+1}] \odot \delta ^ {'}(y^l) el=[(wl+1)Tel+1]δ(yl)

说明:
y k l + 1 = ∑ j ( w l + 1 ) T a j l + b k l + 1 = ∑ j w l + 1 δ ( y j l ) + b k l + 1 y_k^{l+1} = \sum _j (w^{l+1})^T a_j ^l + b_k^{l+1} \\ = \sum _j w^{l+1} \delta (y_j ^l) + b_k^{l+1} ykl+1=j(wl+1)Tajl+bkl+1=jwl+1δ(yjl)+bkl+1
对上式求偏导得到:
∂ y k l + 1 ∂ y l l = w l + 1 δ ′ ( y j l ) \frac{\partial y_k^{l+1}}{\partial y_l^l} = w^{l+1} \delta ^{'} (y_j^l) yllykl+1=wl+1δ(yjl)
结合上面两个式子可以得到:
e j l = ∑ k w j k l + 1 e j l + 1 δ ′ ( y j l ) e_j^l = \sum _k w_{jk}^{l+1} e_j^{l+1} \delta ^ {'}(y_j^l) ejl=kwjkl+1ejl+1δ(yjl)

1.3.4.3 参数变化率

∂ L ∂ b j l = e j l ∂ L ∂ w j k l = a k l − 1 e j l \frac{\partial L}{\partial b_j^l} = e_j^l \\ \frac{\partial L}{\partial w_{jk}^l} = a_k^{l-1} e_j^l bjlL=ejlwjklL=akl1ejl

写成矩阵形式:

∂ L ∂ b l = e l ∂ L ∂ w l = e l ( a l − 1 ) T \frac{\partial L}{\partial b^l} = e^l \\ \frac{\partial L}{\partial w^l} = e^l (a^{l-1})^T blL=elwlL=el(al1)T

说明:
根据求导法则,可以得到:
y j l = ∑ k w j k l a k l + b k l y_j^l = \sum _k w_{jk}^l a_k^l + b_k^l yjl=kwjklakl+bkl
b k l b_k^l bkl 求导:
∂ L ∂ b j l = ∂ L ∂ y j l ∂ y j l ∂ b j l = e j l \frac{\partial L}{\partial b_j^l} = \frac{\partial L}{\partial y_j^l} \frac{\partial y_j^l}{\partial b_j^l} = e_j^l bjlL=yjlLbjlyjl=ejl
w j k l w_{jk}^l wjkl 求导:
∂ L ∂ w j k l = ∂ L ∂ y j l ∂ y j l ∂ w j k l = a k l − 1 e j l \frac{\partial L}{\partial w_{jk}^l} = \frac{\partial L}{\partial y_j^l} \frac{\partial y_j^l}{\partial w_{jk}^l} = a_k ^{l-1}e_j^l wjklL=yjlLwjklyjl=akl1ejl

1.3.4.4 参数更新规则

根据梯度下降原理,想着梯度的反方向更新参数:

b j l ← b j l − η ∂ L ∂ b j l w j k l ← w j k l − η ∂ L ∂ w j k l b_j^l \leftarrow b_j^l - \eta \frac{\partial L}{\partial b_j^l} \\ w_{jk}^l \leftarrow w_{jk}^l - \eta \frac{\partial L}{\partial w_{jk}^l} bjlbjlηbjlLwjklwjklηwjklL

写成矩阵形式:

b l ← b l − η ∂ L ∂ b l w l ← w l − η ∂ L ∂ w l b^l \leftarrow b^l - \eta \frac{\partial L}{\partial b^l} \\ w^l \leftarrow w^l - \eta \frac{\partial L}{\partial w^l} blblηblLwlwlηwlL

1.3.4.5 关于多样本的说明

多样本输入的时候,由于损失函数带有一个 1 m \frac{1}{m} m1 的常数项,因此参数更新规则都需要添加一个 1 m \frac{1}{m} m1 的前缀。

  • 输出层误差

    d Y l = ∇ A C ⊙ δ ′ ( Y l ) dY^l = \nabla _A C \odot \delta ^{'}(Y^l) dYl=ACδ(Yl)

    此时 d Y l dY^l dYl 不再是列向量,而是一个 m 列的矩阵,每一列都对应一个样本的列向量。

  • 隐藏层误差

    d Y l = [ ( w l + 1 ) T d Y l + 1 ] ⊙ δ ′ ( Y l ) dY^l = [(w^{l+1})^TdY^{l+1}] \odot \delta ^{'}(Y^l) dYl=[(wl+1)TdYl+1]δ(Yl)

    此时 d Y l dY^l dYl 的维度时 n × m n \times m n×m,n 表示第 l l l 层中的神经元个数,m 表示样本数量。

  • 参数变化率

    d b l = ∂ C ∂ b l = 1 m M e a n O f E a c h R o w ( d Y l ) d w l = ∂ C ∂ w l = 1 m d Y l ( A l − 1 ) T db^l = \frac{\partial C}{\partial b^l} = \frac{1}{m} MeanOfEachRow(dY^l) \\ dw^l = \frac{\partial C}{\partial w^l} = \frac{1}{m} dY^l (A^{l-1})^T dbl=blC=m1MeanOfEachRow(dYl)dwl=wlC=m1dYl(Al1)T

    更新 B l B^l Bl 时需要对每行求平均值。

  • 参数更新

    b l ← b l − η ∂ C ∂ b l w l ← w l − η ∂ C ∂ w l b^l \leftarrow b^l - \eta \frac{\partial C}{\partial b^l} \\ w^l \leftarrow w^l - \eta \frac{\partial C}{\partial w^l} blblηblCwlwlηwlC

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/423808.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Revit-二开之立面视图创建FilledRegion-(3)

在上一篇博客中介绍了FilledRegion的创建方法,这种方法通常只在平面视图中适用,在三维视图中也是无法创建的(目前研究的是这样的,如果有其他方法,请赐教)。 本片文章介绍一个下在立面视图中创建FilledRegion的方法,主要操作是在立面视图中拾取一个点,然后以该点为原点,…

javaweb day9 day10

昨天序号标错了 vue的组件库Elent 快速入门 写法 常见组件 复制粘贴 打包部署

PYTHON 自动化办公:压缩图片(PIL)

1、介绍 在办公还是学习过程中&#xff0c;难免会遇到上传照片的问题。然而照片的大小限制一直都是个问题&#xff0c;例如照片限制在200Kb之内&#xff0c;虽然有很多图像压缩技术可以实现&#xff0c;但从图像处理的专业来说&#xff0c;可以利用代码实现 这里使用的库函数是…

【Redis知识点总结】(一)——各种数据结构及其应用场景

Redis知识点总结&#xff08;一&#xff09;——基础数据类型及其应用场景 基础数据类型基础数据类介绍底层数据结构SDS&#xff08;简单动态字符串&#xff09;list&#xff08;双向链表&#xff09;ziplist&#xff08;压缩列表&#xff09;quicklist&#xff08;快速表&…

Unity3D学习之Lua热更新解决方案(二)XLua

文章目录 1 XLua概述2 xLua导入和AB包相关准备3 C#调用Lua3.1 Lua解析器3.2 文件加载重定向3.3 Lua解析器管理器3.3.1 重定向AB包内的Lua3.3.2 获得_G大表 3.4 全局变量的获取3.5 全局函数的获取3.5.1 无参无返回3.5.2 有参有返回3.5.3 多返回值3.5.4 变长参数 3.6 List和Dicti…

策略模式 详解 设计模式

策略模式 策略模式是一种行为型设计模式&#xff0c;它定义了一系列算法&#xff0c;将每个算法封装到具有共同接口的独立类中&#xff0c;并且使它们可以相互替换。 策略模式可以让算法的变化独立于使用算法的客户端。 主要解决&#xff1a; 在有多种算法相似的情况下&#…

Linux系统管理:虚拟机 Kali Linux 安装

目录 一、理论 1.Kali Linux 二、实验 1.虚拟机Kali Linux安装准备阶段 2.安装Kali Linux 2. Kali Linux 更换国内源 3. Kali Linux 设置固定IP 4. Kali Linux 开启SSH远程连接 5. MobaXterm远程连接 Kali Linux 三、问题 1.apt 命令 取代哪些 apt-get命令 一、理论…

Linux文本处理三剑客:awk

在Linux操作系统中&#xff0c;grep、sed、awk被称为文本操作“三剑客”&#xff0c;上两期中&#xff0c;我们将详细介绍grep、sed的基本使用方法&#xff0c;希望能够帮助到有需要的朋友&#xff0c;现在&#xff0c;我们继续学习awk。 虽然awk是一个Linux中常见的命令&…

C 嵌入式系统设计模式 17:静态优先级模式

本书的原著为&#xff1a;《Design Patterns for Embedded Systems in C ——An Embedded Software Engineering Toolkit 》&#xff0c;讲解的是嵌入式系统设计模式&#xff0c;是一本不可多得的好书。 本系列描述我对书中内容的理解。本文章描述嵌入式并发和资源管理模式之三…

Slicer学习笔记(六十五) 3DSlicer的医学图像数据增强扩展模块

1. 医学图像数据增强扩展模块 基于3D Slicer5.1.0 编写了一个测试医学图像的数据增强测试扩展模块。 扩展模块名&#xff1a;DataAugementation 项目地址&#xff1a;DataAugmentation 下载该项目后&#xff0c;可以将该扩展模块添加到3D Slicer的扩展中。 关于如何给3DSlicer…

【STA】多场景时序检查学习记录

单周期路径 建立时间时序检查 在时钟的有效沿到达触发器之前&#xff0c;数据应在一定时间内保持稳定&#xff0c;这段时间即触发器的建立 时间。满足建立时间要求将确保数据可靠地被捕获到触发器中。 建立时间检查是从发起触发器中时钟的第一个有效沿到捕获触发器中时钟后面…

萌新学习RSA第一天

文章来自NSSCTF工坊Xenny的课程 1.非对称加密 2.介绍RSA来源&#xff08;三位数学家名字开头&#xff09; 3.RSA数学基础 4.算法实现 from Crypto.Util.number import * #这个是关于RSA很多函数的库 p getPrime(512) #111RSA第一步&#xff1a;生成随机的51…

Sora学习(一):Sora技术路径整体认知

前文&#xff1a;最近跟着DataWhale组队学习这一期“Sora原理与技术实战”&#xff0c;本篇博客主要是基于DataWhale成员、厦门大学平潭研究院杨知铮研究员分享的Sora技术原理详解课件内容以及参考网上一些博客资料整理而来&#xff08;详见文末参考文献&#xff09;&#xff0…

鸿蒙Harmony应用开发—ArkTS声明式开发(通用属性:禁用控制)

组件是否可交互&#xff0c;可交互状态下响应点击事件、触摸事件、拖拽事件、按键事件、焦点事件和鼠标事件。 说明&#xff1a; 从API Version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 enabled enabled(value: boolean) 设置组…

持续集成(CICD)- Git版本管理工具,Gitee线上仓库

文章目录 一、学习目标:二、什么是Git工具三 、Git环境搭建(windows系统)四、Gitee设置(私钥和公钥绑定)五、Git结合Gittee进行基本设置(重要)六、在Gitee上新建仓库私有仓库(非空仓库)七、Git拉取线上仓库代码,提交代码(重要)八、Git解决版本冲突问题(重要)场景一…

第二讲:用geth和以太坊交互

一&#xff1a;安装geth brew install ethereum geth github网址&#xff1a; https://github.com/ethereum/go-ethereum 二&#xff1a; 用geth连接以太坊 以太坊有主网络&#xff08;Ethereum Mainnet&#xff09;&#xff0c;有测试网络&#xff08;Sepolia、Goerli 等等…

leetcode 热题 100_盛最多水的容器

题解一&#xff1a; 双指针遍历&#xff1a;容量计算公式为min(左高度&#xff0c;右高度)*底部距离&#xff0c;我们可以令底部距离逐步递减&#xff08;左右两边的指针向中部移动&#xff09;。此时对于min(左高度&#xff0c;右高度)&#xff0c;假设较高的线向中部移动&…

如何修炼成“神医”——《OceanBase诊断系列》之一

本系列是基于OcenaBase 开发工程师在工作中的一些诊断经验&#xff0c;也欢迎大家分享相关经验。 1. 关于神医的故事 扁鹊&#xff0c;中国古代第一个被正史记载的医生&#xff0c;他的成才之路非常传奇。年轻时&#xff0c;扁鹊是一家客栈的主管。有一位名叫长桑君的客人来到…

HTTPS的实现原理

图片来源&#xff1a;HTTPS 详解一&#xff1a;附带最精美详尽的 HTTPS 原理图 - 个人文章 - SegmentFault 思否 加密流程按图中的序号分为&#xff1a; 客户端请求 HTTPS 网址&#xff0c;然后连接到 server 的 443 端口 (HTTPS 默认端口&#xff0c;类似于 HTTP 的80端口)。…

小程序和页面生命周期详解

目录 小程序的生命周期 创建&#xff08;onLoad&#xff09;&#xff1a; 显示&#xff08;onShow&#xff09;&#xff1a; 隐藏&#xff08;onHide&#xff09;&#xff1a; 卸载&#xff08;onUnload&#xff09;&#xff1a; 错误监听&#xff08;onError&#xff09;…