网站建设设计费用,网站开发者工具下载,阿里云静态网站托管,电脑下什么wordpressBP神经网络 B P BP BP神经网络1.激活函数常用的激活函数 2.神经网络结构符号约定 3.损失函数回归问题分类问题 4.反向传播求解梯度矩阵梯度下降法反向传播公式推导#xff08;四个基础等式#xff09;等式一 输出层误差等式二 隐藏层误差等式三 参数变化率等式四 参数更新 反… BP神经网络 B P BP BP神经网络1.激活函数常用的激活函数 2.神经网络结构符号约定 3.损失函数回归问题分类问题 4.反向传播求解梯度矩阵梯度下降法反向传播公式推导四个基础等式等式一 输出层误差等式二 隐藏层误差等式三 参数变化率等式四 参数更新 反向传播图解反向传播公式总结单样本输入公式表多样本输入公式表成本函数误差参数变换率 B P BP BP神经网络
1.激活函数
激活函数Activation Function是在人工神经网络的神经元上运行的函数负责将神经元的输入映射到输出端。激活函数对于人工神经网络模型去学习、理解复杂的非线性函数具有十分重要的作用。
如果不使用激活函数每一层输出都是上一层输入的线性运算无论神经网络有多少层最终的输出只是输入的线性组合相当于感知机。如果使用了激活函数将非线性因素引入到网络中使得神经网络可以任意逼近任何非线性函数能够应用到更多的非线性模型。
常用的激活函数 s i g m o i d sigmoid sigmoid 函数
S i g m o i d Sigmoid Sigmoid函数是一个在生物学中常见的S型函数也称为S型生长曲线。在信息科学中由于其单增以及反函数单增等性质Sigmoid函数常被用作神经网络的阈值函数将变量映射到0,1之间公式如下 f ( x ) 1 1 e ( − x ) f(x)\frac{1}{1e^{(-x)}} f(x)1e(−x)1 R e L U ReLU ReLU函数
R e l u Relu Relu激活函数The Rectified Linear Unit用于隐藏层的神经元输出。公式如下 f ( x ) m a x ( 0 , x ) f(x)max(0,x) f(x)max(0,x) T a n h Tanh Tanh 函数
T a n h Tanh Tanh 是双曲函数中的一个 T a n h ( ) Tanh() Tanh() 为双曲正切。在数学中双曲正切“ T a n h Tanh Tanh”是由基本双曲函数双曲正弦和双曲余弦推导而来。公式如下 f ( x ) e x − e − x e x e − x f(x)\frac{e^{x}-e^{-x}}{e^{x}e^{-x}} f(x)exe−xex−e−x s o f t m a x softmax softmax 函数
s o f t m a x softmax softmax 函数用于输出层。假设输出层共有 n n n 个神经元计算第 k k k 个神经元的输出 y k y_k yk。 s o f t m a x softmax softmax 函数的分子是输入信号 a k a_k ak 的指数函数分母是所有输入信号的指数函数的和。 s o f t m a x softmax softmax 函数公式如下 y k e a k ∑ i 1 n e a i y_{k}\frac{e^{a_{k}}}{\sum_{i1}^{n} e^{a_{i}}} yk∑i1neaieak
2.神经网络结构
第0层是输入层2个神经元第1层是隐含层3个神经元第2层是隐含层2个神经元第3层是输出层。 符号约定
w j k [ l ] w_{j k}^{[l]} wjk[l]表示从网络第 ( l − 1 ) t h (l-1)^{t h} (l−1)th 层第 k t h k^{t h} kth 个神经元指向第 l t h l^{t h} lth 层第 j t h j^{t h} jth 个神经元的连接权重同时也是第 l l l 层权重矩阵第 j j j 行第 k k k 列的元素。例如上图中 w 21 [ 1 ] w_{21}^{[1]} w21[1] 第0层第1个神经元指向第1层第2个神经元的权重褐色也就是第 1 层权重矩阵第 2 行第 1 列的元素。同理使用 b j [ l ] b_{j}^{[l]} bj[l] 表示第 l t h l^{t h} lth 层第 j t h j^{t h} jth 个神经元的偏置 同时也是第 l l l 层偏置向量的第 j j j 个元素。使用 z j [ l ] z_{j}^{[l]} zj[l] 表示第 l t h l^{t h} lth 层第 j t h j^{t h} jth 个神经元的线性结果使用 a j [ l ] a_{j}^{[l]} aj[l] 来表示第 l t h l^{t h} lth 层第 j t h j^{t h} jth 个神经元的激活函数输出。其中激活函数使用符号σ表示第 l t h l^{t h} lth 层中第 j t h j^{t h} jth 个神经元的激活为: a j [ l ] σ ( z j [ l ] ) σ ( ∑ k w j k [ l ] a k [ l − 1 ] b j [ l ] ) a_{j}^{[l]}\sigma(z_{j}^{[l]})\sigma\left(\sum_{k} w_{j k}^{[l]} a_{k}^{[l-1]}b_{j}^{[l]}\right) aj[l]σ(zj[l])σ(k∑wjk[l]ak[l−1]bj[l]) w [ l ] w^{[l]} w[l] 表示第 l l l 层的权重矩阵 b [ l ] b^{[l]} b[l] 表示第 l l l 层的偏置向量 a [ l ] a^{[l]} a[l] 表示第 l l l 层的神经元向量结合上图讲述 w [ 1 ] [ w 11 [ 1 ] w 12 [ 1 ] w 21 [ 1 ] w 22 [ 1 ] w 31 [ 1 ] w 32 [ 1 ] ] w^{[1]}\left[\begin{array}{lll}w_{11}^{[1]} w_{12}^{[1]} \\ w_{21}^{[1]} w_{22}^{[1]} \\ w_{31}^{[1]} w_{32}^{[1]}\end{array}\right] w[1] w11[1]w21[1]w31[1]w12[1]w22[1]w32[1] w [ 2 ] [ w 11 [ 2 ] w 12 [ 2 ] w 13 [ 2 ] w 21 [ 2 ] w 22 [ 2 ] w 23 [ 2 ] ] w^{[2]}\left[\begin{array}{lll}w_{11}^{[2]} w_{12}^{[2]} w_{13}^{[2]} \\ w_{21}^{[2]} w_{22}^{[2]} w_{23}^{[2]}\end{array}\right] w[2][w11[2]w21[2]w12[2]w22[2]w13[2]w23[2]] b [ 1 ] [ b 1 [ 1 ] b 2 [ 1 ] b 3 [ 1 ] ] b^{[1]}\left[\begin{array}{l}b_{1}^{[1]} \\ b_{2}^{[1]} \\ b_{3}^{[1]}\end{array}\right] b[1] b1[1]b2[1]b3[1] b [ 2 ] [ b 1 [ 2 ] b 2 [ 2 ] ] b^{[2]}\left[\begin{array}{l}b_{1}^{[2]} \\ b_{2}^{[2]}\end{array}\right] b[2][b1[2]b2[2]]
进行线性矩阵运算。 z [ 1 ] [ w 11 [ 1 ] w 12 [ 1 ] w 21 [ 1 ] w 22 [ 1 ] w 31 [ 1 ] w 32 [ 1 ] ] ⋅ [ a 1 [ 0 ] a 2 [ 0 ] ] [ b 1 [ 1 ] b 2 [ 1 ] b 3 [ 1 ] ] [ w 11 [ 1 ] a 1 [ 0 ] w 12 [ 1 ] a 2 [ 0 ] b 1 [ 1 ] w 21 [ 1 ] a 1 [ 0 ] w 22 [ 1 ] a 2 [ 0 ] b 2 [ 1 ] w 31 [ 1 ] a 1 [ 0 ] w 32 [ 1 ] a 2 [ 0 ] b 3 [ 1 ] ] z^{[1]}\left[\begin{array}{lll}w_{11}^{[1]} w_{12}^{[1]} \\ w_{21}^{[1]} w_{22}^{[1]} \\ w_{31}^{[1]} w_{32}^{[1]}\end{array}\right] \cdot\left[\begin{array}{c}a_{1}^{[0]} \\ a_{2}^{[0]}\end{array}\right]\left[\begin{array}{l}b_{1}^{[1]} \\ b_{2}^{[1]} \\ b_{3}^{[1]}\end{array}\right]\left[\begin{array}{c}w_{11}^{[1]} a_{1}^{[0]}w_{12}^{[1]} a_{2}^{[0]}b_{1}^{[1]} \\ w_{21}^{[1]} a_{1}^{[0]}w_{22}^{[1]}a_{2}^{[0]}b_{2}^{[1]} \\ w_{31}^{[1]}a_{1}^{[0]}w_{32}^{[1]}a_{2}^{[0]}b_{3}^{[1]}\end{array}\right] z[1] w11[1]w21[1]w31[1]w12[1]w22[1]w32[1] ⋅[a1[0]a2[0]] b1[1]b2[1]b3[1] w11[1]a1[0]w12[1]a2[0]b1[1]w21[1]a1[0]w22[1]a2[0]b2[1]w31[1]a1[0]w32[1]a2[0]b3[1]
矩阵形状 (3,2) (2,1) (3,1) (3,1) z [ 2 ] [ w 11 [ 2 ] w 12 [ 2 ] w 13 [ 2 ] w 21 [ 2 ] w 22 [ 2 ] w 23 [ 2 ] ] ⋅ [ a 1 [ 1 ] a 2 [ 1 ] a 3 [ 1 ] ] [ b 1 [ 2 ] b 2 [ 2 ] ] [ w 11 [ 2 ] a 1 [ 1 ] w 12 [ 2 ] a 2 [ 1 ] w 13 [ 2 ] a 3 [ 1 ] b 1 [ 2 ] w 21 [ 2 ] a 1 [ 1 ] w 22 [ 2 ] a 2 [ 1 ] w 23 [ 2 ] a 3 [ 1 ] b 2 [ 2 ] ] z^{[2]}\left[\begin{array}{ccc}w_{11}^{[2]} w_{12}^{[2]} w_{13}^{[2]} \\ w_{21}^{[2]} w_{22}^{[2]} w_{23}^{[2]}\end{array}\right] \cdot\left[\begin{array}{c}a_{1}^{[1]} \\ a_{2}^{[1]} \\ a_{3}^{[1]}\end{array}\right]\left[\begin{array}{c}b_{1}^{[2]} \\ b_{2}^{[2]}\end{array}\right]\left[\begin{array}{c}w_{11}^{[2]} a_{1}^{[1]}w_{12}^{[2]} a_{2}^{[1]}w_{13}^{[2]} a_{3}^{[1]}b_{1}^{[2]} \\ w_{21}^{[2]} a_{1}^{[1]}w_{22}^{[2]} a_{2}^{[1]}w_{23}^{[2]} a_{3}^{[1]}b_{2}^{[2]}\end{array}\right] z[2][w11[2]w21[2]w12[2]w22[2]w13[2]w23[2]]⋅ a1[1]a2[1]a3[1] [b1[2]b2[2]][w11[2]a1[1]w12[2]a2[1]w13[2]a3[1]b1[2]w21[2]a1[1]w22[2]a2[1]w23[2]a3[1]b2[2]]
矩阵形状 (2,3) (3,1) (2,1) (2,1)
那么前向传播过程可以表示为 a [ l ] σ ( w [ l ] a [ l − 1 ] b [ l ] ) a^{[l]}\sigma\left(w^{[l]} a^{[l-1]}b^{[l]}\right) a[l]σ(w[l]a[l−1]b[l]) 上述讲述的前向传播过程输入层只有1个列向量也就是只有一个输入样本。对于多个样本输入不再是1个列向量而是m个列向量每1列表示一个输入样本。m个 a [ l − 1 ] a^{[l-1]} a[l−1]列向量组成一个m列的矩阵 A [ l − 1 ] A^{[l-1]} A[l−1]。 A [ l − 1 ] [ ∣ ∣ ⋯ ∣ a [ l − 1 ] ( 1 ) a [ l − 1 ] ( 2 ) … a [ l − 1 ] ( m ) ∣ ∣ … ∣ ] A^{[l-1]}\left[\begin{array}{cccc}| | \cdots | \\ a^{[l-1](1)} a^{[l-1](2)} \dots a^{[l-1](m)} \\ | | \dots |\end{array}\right] A[l−1] ∣a[l−1](1)∣∣a[l−1](2)∣⋯……∣a[l−1](m)∣
多样本输入的前向传播过程可以表示为 Z [ l ] w [ l ] ⋅ A [ l − 1 ] b [ l ] A [ l ] σ ( Z [ l ] ) \begin{array}{c} Z^{[l]}w^{[l]} \cdot A^{[l-1]}b^{[l]} \\ A^{[l]}\sigma\left(Z^{[l]}\right) \end{array} Z[l]w[l]⋅A[l−1]b[l]A[l]σ(Z[l]) 与单样本输入相比多样本 w [ l ] w^{[l]} w[l]和 b [ l ] b^{[l]} b[l]的定义是完全一样的不同的只是 Z [ l ] Z^{[l]} Z[l]和 A [ l ] A^{[l]} A[l]从1列变成m列每1列表示一个样本的计算结果。
3.损失函数
在有监督的机器学习算法中我们希望在学习过程中最小化每个训练样例的误差。通过梯度下降等优化策略完成的而这个误差来自损失函数。
损失函数用于单个训练样本而成本函数是多个训练样本的平均损失。优化策略旨在最小化成本函数。下面例举几个常用的损失函数。
回归问题 绝对值损失函数( L 1 L_{1} L1损失函数) L ( y ^ , y ) ∣ y − y ^ ∣ L(\hat{y},y)|y-\hat{y}| L(y^,y)∣y−y^∣ y y y 表示真实值或期望值 y ^ \hat{y} y^ 表示预测值 平方损失函数( L 2 L_{2} L2损失函数) L ( y ^ , y ) ( y − y ^ ) 2 L(\hat{y},y)(y-\hat{y})^{2} L(y^,y)(y−y^)2 y y y 表示真实值或期望值 y ^ \hat{y} y^ 表示预测值
分类问题 交叉熵损失 L ( y ^ , y ) − y log ( y ^ ) − ( 1 − y ) log ( 1 − y ^ ) L(\hat{y}, y)-y \log (\hat{y})-(1-y) \log (1-\hat{y}) L(y^,y)−ylog(y^)−(1−y)log(1−y^) y y y 表示真实值或期望值 y ^ \hat{y} y^ 表示预测值
4.反向传播
反向传播的基本思想通过计算输出层与期望值之间的误差来调整网络参数使得误差变小(最小化损失函数或成本函数)。反向传播基于四个基础等式非常简洁优美但想要理解透彻还是挺烧脑的。
求解梯度矩阵
假设函数 f : R n × 1 → R f:R^{n \times 1} \rightarrow R f:Rn×1→R 将输入的列向量shape: n × 1 n \times 1 n×1 映射为一个实数。那么函数 f f f 的梯度定义为 ∇ x f ( x ) [ ∂ f ( x ) ∂ x 1 ∂ f ( x ) ∂ x 2 ⋮ ∂ f ( x ) ∂ x n ] \nabla_{x} f(x)\left[\begin{array}{c}\frac{\partial f(x)}{\partial x_{1}} \\ \frac{\partial f(x)}{\partial x_{2}} \\ \vdots \\ \frac{\partial f(x)}{\partial x_{n}}\end{array}\right] ∇xf(x) ∂x1∂f(x)∂x2∂f(x)⋮∂xn∂f(x)
同理假设函数 f : R m × n → R f: R^{m \times n} \rightarrow R f:Rm×n→R 将输入的矩阵shape: m × n m \times n m×n 映射为一个实数。函数 f f f 的梯度定义为 ∇ A f ( A ) [ ∂ f ( A ) ∂ A 11 ∂ f ( A ) ∂ A 12 … ∂ f ( A ) ∂ A 13 ∂ 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{array}{cccc}\frac{\partial f(A)}{\partial A_{11}} \frac{\partial f(A)}{\partial A_{12}} \dots \frac{\partial f(A)}{\partial A_{13}} \\ \frac{\partial f(A)}{\partial A_{21}} \frac{\partial f(A)}{\partial A_{22}} \dots \frac{\partial f(A)}{\partial A_{2 n}} \\ \vdots \vdots \ddots \vdots \\ \frac{\partial f(A)}{\partial A_{m 1}} \frac{\partial f(A)}{\partial A_{m 2}} \dots \frac{\partial f(A)}{\partial A_{m n}}\end{array}\right] ∇Af(A) ∂A11∂f(A)∂A21∂f(A)⋮∂Am1∂f(A)∂A12∂f(A)∂A22∂f(A)⋮∂Am2∂f(A)……⋱…∂A13∂f(A)∂A2n∂f(A)⋮∂Amn∂f(A)
可以简化为 ( ∇ A f ( A ) ) i j ∂ f ( A ) ∂ A i j \left(\nabla_{A} f(A)\right)_{i j}\frac{\partial f(A)}{\partial A_{i j}} (∇Af(A))ij∂Aij∂f(A)
注意梯度求解的前提是函数 f f f 返回的必须是一个实数如果函数返回的是一个矩阵或者向量是没有办法求解梯度的。例如函数 f ( A ) ∑ i 0 m ∑ j 0 n A i j 2 f(A) \sum_{i0}^{m} \sum_{j0}^{n} A_{i j}^{2} f(A)∑i0m∑j0nAij2函数返回一个实数可以求解梯度矩阵。如果 f ( x ) A x ( A ∈ R m × n , x ∈ R n × 1 ) , f(x)A x\left(A \in R^{m \times n}, x \in R^{n \times 1}\right), f(x)Ax(A∈Rm×n,x∈Rn×1), 函数返回一个m行的列向量就不能对 f f f 求解梯度矩阵。
矩阵相乘
矩阵 A [ 1 2 3 4 ] A\left[\begin{array}{cc}1 2 \\ 3 4\end{array}\right] A[1324]矩阵 B [ − 1 − 2 − 3 − 4 ] B\left[\begin{array}{cc}-1 -2 \\ -3 -4\end{array}\right] B[−1−3−2−4] A B [ 1 × − 1 2 × − 3 1 × − 2 2 × − 4 3 × − 1 4 × − 3 3 × − 2 4 × − 4 ] [ − 7 − 10 − 15 − 22 ] A B\left[\begin{array}{ll}1 \times-12 \times-3 1 \times-22 \times-4 \\ 3 \times-14 \times-3 3 \times-24 \times-4\end{array}\right]\left[\begin{array}{cc}-7 -10 \\ -15 -22\end{array}\right] AB[1×−12×−33×−14×−31×−22×−43×−24×−4][−7−15−10−22]
矩阵对应元素相乘
使用符号 ⊙ \odot ⊙表示 A ⊙ B [ 1 × − 1 2 × − 2 3 × − 3 4 × − 4 ] [ − 1 − 4 − 9 − 16 ] A \odot B\left[\begin{array}{cc}1 \times-1 2 \times-2 \\ 3 \times-3 4 \times-4\end{array}\right]\left[\begin{array}{cc}-1 -4 \\ -9 -16\end{array}\right] A⊙B[1×−13×−32×−24×−4][−1−9−4−16]
梯度下降法
从几何意义梯度矩阵代表了函数增加最快的方向沿着梯度相反的方向可以更快找到最小值。 反向传播的过程就是利用梯度下降法原理逐步找到成本函数的最小值得到最终的模型参数。
反向传播公式推导四个基础等式
要想最小化成本函数需要求解神经网络中的权重 w w w 和偏置 b b b 的梯度再用梯度下降法优化参数。求解梯度也就是计算偏导数 ∂ L ( a [ l ] , y ) ∂ w j k [ l ] \frac{\partial L\left(a^{[l]}, y\right)}{\partial w_{j k}^{[l]}} ∂wjk[l]∂L(a[l],y) 和 ∂ L ( a [ l ] , y ) ∂ b j [ l ] \frac{\partial L\left(a^{[l]}, y\right)}{\partial b_{j}^{[l]}} ∂bj[l]∂L(a[l],y) 。为了计算这些偏导数引入一个中间变量 δ j [ l ] \delta_{j}^{[l]} δj[l]它表示网络中第 l t h l^{t h} lth 层第 j t h j^{t h} jth 个神经元的误差。反向传播能够计算出误差 δ j [ l ] , \delta_{j}^{[l]}, δj[l], 再根据链式法则求出 ∂ L ( a [ l ] , y ) ∂ w j k [ l ] \frac{\partial L\left(a^{[l]}, y\right)}{\partial w_{j k}^{[l]}} ∂wjk[l]∂L(a[l],y) 和 ∂ L ( a [ l ] , y ) ∂ b j l \frac{\partial L\left(a^{[l]}, y\right)}{\partial b_{j}^{l}} ∂bjl∂L(a[l],y) 。
定义网络中第 l l l 层第 j j j 个神经元的误差为 δ j [ l ] \delta_{j}^{[l]} δj[l] : δ j [ l ] ∂ L ( a [ L ] , y ) ∂ z j [ l ] \delta_{j}^{[l]}\frac{\partial L\left(a^{[L]},y\right)}{\partial z_{j}^{[l]}} δj[l]∂zj[l]∂L(a[L],y)
其中 L ( a [ L ] , y ) L(a^{[L]},y) L(a[L],y) 表示损失函数 y y y 表示真实值 a [ L ] a^{[L]} a[L] 表示输出层的预测值。
每一层的误差向量可以表示为 δ [ l ] [ δ 1 [ l ] δ 2 [ l ] ⋮ δ n [ l ] ] \delta^{[l]}\left[\begin{array}{c}\delta_{1}^{[l]} \\ \delta_{2}^{[l]} \\ \vdots \\ \delta_{n}^{[l]}\end{array}\right] δ[l] δ1[l]δ2[l]⋮δn[l]
等式一 输出层误差 δ j [ L ] ∂ L ∂ a j [ L ] σ ′ ( z j [ L ] ) \delta_{j}^{[L]}\frac{\partial L}{\partial a_{j}^{[L]}} \sigma^{\prime}\left(z_{j}^{[L]}\right) δj[L]∂aj[L]∂Lσ′(zj[L])
L表示输出层层数。以下用 ∂ L \partial L ∂L 表示 ∂ L ( a [ L ] , y ) \partial L\left(a^{[L]}, y\right) ∂L(a[L],y)
写成矩阵形式是 δ [ L ] [ ∂ L ∂ a 1 [ L ] ∂ L ∂ a 2 [ L ] ⋮ ∂ L ∂ a j [ L ] ] ⊙ [ σ ′ ( z 1 [ L ] ) σ ′ ( z 2 [ L ] ) ⋮ σ ′ ( z j [ L ] ) ] \delta^{[L]} \left[\begin{array}{c}\frac{\partial L}{\partial a_{1}^{[L]}} \\ \frac{\partial L}{\partial a_{2}^{[L]}} \\ \vdots \\ \frac{\partial L}{\partial a_{j}^{[L]}}\end{array}\right] \odot\left[\begin{array}{c}\sigma^{\prime}\left(z_{1}^{[L]}\right) \\ \sigma^{\prime}\left(z_{2}^{[L]}\right) \\ \vdots \\ \sigma^{\prime}\left(z_{j}^{[L]}\right)\end{array}\right] δ[L] ∂a1[L]∂L∂a2[L]∂L⋮∂aj[L]∂L ⊙ σ′(z1[L])σ′(z2[L])⋮σ′(zj[L])
表示成公式 δ [ L ] ∇ a L ⊙ σ ′ ( z [ L ] ) \delta^{[L]}\nabla_{a} L \odot \sigma^{\prime}\left(z^{[L]}\right) δ[L]∇aL⊙σ′(z[L]) 推导
计算输出层的误差 δ j [ L ] ∂ L ∂ z j [ L ] \delta_{j}^{[L]}\frac{\partial L}{\partial z_{j}^{[L]}} δj[L]∂zj[L]∂L 根据链式法则 δ j [ L ] ∑ k ∂ L ∂ a k [ L ] ∂ a k [ L ] ∂ z j [ L ] \delta_{j}^{[L]}\sum_{k} \frac{\partial L}{\partial a_{k}^{[L]}} \frac{\partial a_{k}^{[L]}}{\partial z_{j}^{[L]}} δj[L]∑k∂ak[L]∂L∂zj[L]∂ak[L]
输出层不一定只有一个神经元可能有多个神经元。成本函数是每个输出神经元的损失函数之和每个输出神经元的误差与其它神经元没有关系所以只有 k j kj kj 的时候值不是0。
当 k ≠ j k\neq j kj 时 ∂ L ∂ z j [ L ] 0 \frac{\partial L}{\partial z_{j}^{[L]}}0 ∂zj[L]∂L0 简化误差 δ j [ L ] \delta_{j}^{[L]} δj[L] 得到 δ j [ L ] ∂ L ∂ a j [ L ] ∂ a j [ L ] ∂ z j [ L ] \delta_{j}^{[L]}\frac{\partial L}{\partial a_{j}^{[L]}} \frac{\partial a_{j}^{[L]}}{\partial z_{j}^{[L]}} δj[L]∂aj[L]∂L∂zj[L]∂aj[L] σ \sigma σ 表示激活函数由 a j [ L ] σ ( z j [ L ] ) a_{j}^{[L]}\sigma\left(z_{j}^{[L]}\right) aj[L]σ(zj[L])计算出 ∂ a j [ L ] ∂ z j [ L ] σ ′ ( z j [ L ] ) \frac{\partial a_{j}^{[L]}}{\partial z_{j}^{[L]}}\sigma^{\prime}\left(z_{j}^{[L]}\right) ∂zj[L]∂aj[L]σ′(zj[L]) 代入最后得到 δ j [ L ] ∂ L ∂ a j [ L ] σ ′ ( z j [ L ] ) \delta_{j}^{[L]}\frac{\partial L}{\partial a_{j}^{[L]}} \sigma^{\prime}\left(z_{j}^{[L]}\right) δj[L]∂aj[L]∂Lσ′(zj[L])
等式二 隐藏层误差 δ j [ l ] ∑ k w k j [ l 1 ] δ k [ l 1 ] σ ′ ( z j [ l ] ) \begin{array}{c} \delta_{j}^{[l]}\sum_{k} w_{k j}^{[l1]} \delta_{k}^{[l1]} \sigma^{\prime}\left(z_{j}^{[l]}\right) \end{array} δj[l]∑kwkj[l1]δk[l1]σ′(zj[l])
写成矩阵形式 δ [ l ] [ [ w 11 [ l ] w 12 [ l ] … w 1 k [ l ] w 21 [ l ] w 22 [ l ] … w 2 k [ l ] ⋮ ⋮ ⋱ ⋮ w j 1 [ l ] w j 2 [ l ] … w j k [ l ] ] [ δ 1 [ l 1 ] δ 2 [ l 1 ] ⋮ δ k [ l 1 ] ] ] ⊙ [ σ ′ ( z 1 [ l ] ) σ ′ ( z 2 [ l ] ) ⋮ σ ′ ( z j [ l ] ) ] \delta^{[l]}\left[\begin{array}{lll} \left[\begin{array}{lll}w_{11}^{[l]} w_{12}^{[l]} \dots w_{1k}^{[l]} \\ w_{21}^{[l]} w_{22}^{[l]} \dots w_{2k}^{[l]} \\ \vdots \vdots \ddots \vdots\\ w_{j1}^{[l]} w_{j2}^{[l]} \dots w_{jk}^{[l]} \end{array}\right] \left[\begin{array}{c}\delta_{1}^{[l1]} \\ \delta_{2}^{[l1]} \\ \vdots \\ \delta_{k}^{[l1]}\end{array}\right] \end{array}\right] \odot\left[\begin{array}{c}\sigma^{\prime}\left(z_{1}^{[l]}\right) \\ \sigma^{\prime}\left(z_{2}^{[l]}\right) \\ \vdots \\\sigma^{\prime}\left(z_{j}^{[l]}\right)\end{array}\right] δ[l] w11[l]w21[l]⋮wj1[l]w12[l]w22[l]⋮wj2[l]……⋱…w1k[l]w2k[l]⋮wjk[l] δ1[l1]δ2[l1]⋮δk[l1] ⊙ σ′(z1[l])σ′(z2[l])⋮σ′(zj[l])
矩阵形状(j,k) * (k,1) ⊙ \odot ⊙ (j,1) (j,1)
权重矩阵的形状从(k,j)转置变成(j,k)。
表示成公式 δ [ l ] [ w [ l 1 ] T δ [ l 1 ] ] ⊙ σ ′ ( z [ l ] ) \delta^{[l]}\left[w^{[l1]^{T}} \delta^{[l1]}\right] \odot \sigma^{\prime}\left(z^{[l]}\right) δ[l][w[l1]Tδ[l1]]⊙σ′(z[l]) 推导 z k [ l 1 ] ∑ j w k j [ l 1 ] a j [ l ] b k [ l 1 ] ∑ j w k j [ l 1 ] σ ( z j [ l ] ) b k [ l 1 ] z_{k}^{[l1]}\sum_{j} w_{k j}^{[l1]} a_{j}^{[l]}b_{k}^{[l1]}\sum_{j} w_{k j}^{[l1]} \sigma\left(z_{j}^{[l]}\right)b_{k}^{[l1]} zk[l1]∑jwkj[l1]aj[l]bk[l1]∑jwkj[l1]σ(zj[l])bk[l1]
对 z j [ l ] z_{j}^{[l]} zj[l] 求偏导 ∂ z k [ l 1 ] ∂ z j [ l ] w k j [ l 1 ] σ ′ ( z j [ l ] ) \frac{\partial z_{k}^{[l1]}}{\partial z_{j}^{[l]}}w_{k j}^{[l1]} \sigma^{\prime}\left(z_{j}^{[l]}\right) ∂zj[l]∂zk[l1]wkj[l1]σ′(zj[l])
根据链式法则 δ j [ l ] ∂ L ∂ z j [ l ] ∂ L ∂ z k [ l 1 ] ∂ z k [ l 1 ] ∂ z j [ l ] ∑ k w k j [ l 1 ] δ k [ l 1 ] σ ′ ( z j [ l ] ) \delta_{j}^{[l]}\frac{\partial L}{\partial z_{j}^{[l]}}\frac{\partial L}{\partial z_{k}^{[l1]}}\frac{\partial z_{k}^{[l1]}}{\partial z_{j}^{[l]}}\sum_{k} w_{k j}^{[l1]} \delta_{k}^{[l1]} \sigma^{\prime}\left(z_{j}^{[l]}\right) δj[l]∂zj[l]∂L∂zk[l1]∂L∂zj[l]∂zk[l1]∑kwkj[l1]δk[l1]σ′(zj[l])
等式三 参数变化率 ∂ L ∂ b j [ l ] δ j [ l ] ∂ L ∂ w j k [ l ] a k [ l − 1 ] δ j [ l ] \begin{array}{c} \frac{\partial L}{\partial b_{j}^{[l]}}\delta_{j}^{[l]} \\ \frac{\partial L}{\partial w_{j k}^{[l]}}a_{k}^{[l-1]} \delta_{j}^{[l]} \end{array} ∂bj[l]∂Lδj[l]∂wjk[l]∂Lak[l−1]δj[l]
写成矩阵形式 ∂ L ∂ b [ l ] [ δ 1 [ l ] δ 2 [ l ] ⋮ δ j [ l ] ] δ [ l ] \frac{\partial L}{\partial b^{[l]}}\left[\begin{array}{c}\delta_{1}^{[l]} \\ \delta_{2}^{[l]} \\ \vdots \\ \delta_{j}^{[l]}\end{array}\right]\delta^{[l]} ∂b[l]∂L δ1[l]δ2[l]⋮δj[l] δ[l]
矩阵形状(j,1) ∂ L ∂ w [ l ] [ δ 1 [ l ] δ 2 [ l ] ⋮ δ j [ l ] ] [ a 1 [ l ] a 2 [ l ] … a k [ l ] ] \frac{\partial L}{\partial w^{[l]}}\left[\begin{array}{c}\delta_{1}^{[l]} \\ \delta_{2}^{[l]} \\ \vdots \\ \delta_{j}^{[l]}\end{array}\right] \left[\begin{array}{c}a_{1}^{[l]} a_{2}^{[l]}\dots a_{k}^{[l]} \end{array}\right] ∂w[l]∂L δ1[l]δ2[l]⋮δj[l] [a1[l]a2[l]…ak[l]]
矩阵形状(j,1) * (1,k) (j,k)
注意 ∂ L ∂ w [ l ] \frac{\partial L}{\partial w^{[l]}} ∂w[l]∂L 是一个dim ( δ [ l ] ) \left(\delta^{[l]}\right) (δ[l]) 行 dim ( a [ l − 1 ] ) \operatorname{dim}\left(a^{[l-1]}\right) dim(a[l−1]) 列的矩阵 和 w [ l ] w^{[l]} w[l] 的维度一致 $ \frac{\partial L}{\partial b^{[l]}}$ 是一个维度为 dim ( δ [ l ] ) \operatorname{dim}\left(\delta^{[l]}\right) dim(δ[l]) 的列向量
表示成公式 ∂ L ∂ b [ l ] δ [ l ] ∂ L ∂ w [ l ] δ [ l ] a [ l − 1 ] T \begin{array}{c} \frac{\partial L}{\partial b^{[l]}}\delta^{[l]} \\ \frac{\partial L}{\partial w^{[l]}}\delta^{[l]} a^{[l-1] T} \end{array} ∂b[l]∂Lδ[l]∂w[l]∂Lδ[l]a[l−1]T 推导 z j [ l ] ∑ k w j k [ l ] a k [ l − 1 ] b k [ l ] z_{j}^{[l]}\sum_{k} w_{j k}^{[l]} a_{k}^{[l-1]}b_{k}^{[l]} zj[l]∑kwjk[l]ak[l−1]bk[l]
L 对 b j [ l ] b_{j}^{[l]} bj[l] 求偏导根据链式法则得到 ∂ L ∂ b j [ l ] ∂ L ∂ z j [ l ] ∂ z j [ l ] b j [ l ] ∂ L ∂ z j [ l ] ∗ 1 δ j [ l ] \frac{\partial L}{\partial b_{j}^{[l]}}\frac{\partial L}{\partial z_{j}^{[l]}} \frac{\partial z_{j}^{[l]}}{b_{j}^{[l]}} \frac{\partial L}{\partial z_{j}^{[l]}} * 1 \delta_{j}^{[l]} ∂bj[l]∂L∂zj[l]∂Lbj[l]∂zj[l]∂zj[l]∂L∗1δj[l]
L 对 w j k [ l ] w_{j k}^{[l]} wjk[l] 求偏导根据链式法则得到 ∂ L ∂ w j k [ l ] ∂ L ∂ z j [ l ] ∂ z j [ l ] w j k [ l ] a k [ l − 1 ] δ j [ l ] \frac{\partial L}{\partial w_{j k}^{[l]}}\frac{\partial L}{\partial z_{j}^{[l]}} \frac{\partial z_{j}^{[l]}}{w_{j k}^{[l]}}a_{k}^{[l-1]} \delta_{j}^{[l]} ∂wjk[l]∂L∂zj[l]∂Lwjk[l]∂zj[l]ak[l−1]δj[l]
等式四 参数更新
根据梯度下降法原理朝着梯度的反方向更新参数 b j [ l ] ← b j [ l ] − α ∂ L ∂ b j [ l ] w j k [ l ] ← w j k [ l ] − α ∂ L ∂ w j k [ l ] \begin{array}{c} b_{j}^{[l]} \leftarrow b_{j}^{[l]}-\alpha \frac{\partial L}{\partial b_{j}^{[l]}} \\ w_{j k}^{[l]} \leftarrow w_{j k}^{[l]}-\alpha \frac{\partial L}{\partial w_{j k}^{[l]}} \end{array} bj[l]←bj[l]−α∂bj[l]∂Lwjk[l]←wjk[l]−α∂wjk[l]∂L 写成矩阵形式 b [ l ] ← b [ l ] − α ∂ L ∂ b [ l ] w [ l ] ← w [ l ] − α ∂ L ∂ w [ l ] \begin{array}{l} b^{[l]} \leftarrow b^{[l]}-\alpha \frac{\partial L}{\partial b^{[l]}} \\ w^{[l]} \leftarrow w^{[l]}-\alpha \frac{\partial L}{\partial w^{[l]}} \end{array} b[l]←b[l]−α∂b[l]∂Lw[l]←w[l]−α∂w[l]∂L 这里的 α \alpha α 指的是学习率。学习率决定了反向传播过程中梯度下降的步长。
反向传播图解
计算输出层误差
计算隐藏层误差 隐藏层误差公式写成矩阵形式 δ [ l ] [ w [ l 1 ] T δ [ l 1 ] ] ⊙ σ ′ ( z [ l ] ) \delta^{[l]}\left[w^{[l1]^{T}} \delta^{[l1]}\right] \odot \sigma^{\prime}\left(z^{[l]}\right) δ[l][w[l1]Tδ[l1]]⊙σ′(z[l]) 时 权重矩阵需要转置。上面两幅图直观地解释了转置的原因。 计算参数变化率
最后更新每层的参数。
反向传播公式总结
单样本输入公式表
说明公式输出层误差 δ [ L ] ∇ a L ⊙ σ ′ ( z [ L ] ) \delta^{[L]}\nabla_{a} L \odot \sigma^{\prime}\left(z^{[L]}\right) δ[L]∇aL⊙σ′(z[L])隐含层误差 δ [ l ] [ w [ l 1 ] T δ [ l 1 ] ] ⊙ σ ′ ( z [ l ] ) \delta^{[l]}\left[w^{[l1]^{T}} \delta^{[l1]}\right] \odot \sigma^{\prime}\left(z^{[l]}\right) δ[l][w[l1]Tδ[l1]]⊙σ′(z[l])参数变化率 ∂ L ∂ b [ l ] δ [ l ] ∂ L ∂ w [ l ] δ [ l ] a [ l − 1 ] T \begin{array}{c}\frac{\partial L}{\partial b^{[l]}}\delta^{[l]} \\\frac{\partial L}{\partial w^{[l]}}\delta^{[l]} a^{[l-1] T}\end{array} ∂b[l]∂Lδ[l]∂w[l]∂Lδ[l]a[l−1]T参数更新 b [ l ] ← b [ l ] − α ∂ L ∂ b [ l ] w [ l ] ← w [ l ] − α ∂ L ∂ w [ l ] \begin{array}{l}b^{[l]} \leftarrow b^{[l]}-\alpha \frac{\partial L}{\partial b^{[l]}} \\w^{[l]} \leftarrow w^{[l]}-\alpha \frac{\partial L}{\partial w^{[l]}}\end{array} b[l]←b[l]−α∂b[l]∂Lw[l]←w[l]−α∂w[l]∂L
多样本输入公式表
成本函数
多样本输入使用的成本函数与单样本不同。假设单样本的成本函数是交叉熵损失函数。 L ( a , y ) − [ y ⋅ log ( a ) ( 1 − y ) ⋅ log ( 1 − a ) ] L(a, y)-[y \cdot \log (a)(1-y) \cdot \log (1-a)] L(a,y)−[y⋅log(a)(1−y)⋅log(1−a)]
那么对于m个样本输入成本函数是每个样本的成本总和的平均值。 C ( A , y ) − 1 m ∑ i 0 m ( y ( i ) ⋅ log ( a ( i ) ) ( 1 − y ( i ) ) ⋅ log ( 1 − a ( i ) ) ) C(A,y)-\frac{1}{m} \sum_{i0}^{m}\left(y^{(i)} \cdot \log \left(a^{(i)}\right)\left(1-y^{(i)}\right) \cdot \log \left(1-a^{(i)}\right)\right) C(A,y)−m1∑i0m(y(i)⋅log(a(i))(1−y(i))⋅log(1−a(i)))
误差
单样本输入的每一层的误差是一个列向量 δ [ l ] [ δ 1 [ l ] δ 2 [ l ] ⋮ δ n [ l ] ] \delta^{[l]}\left[\begin{array}{c}\delta_{1}^{[l]} \\ \delta_{2}^{[l]} \\ \vdots \\ \delta_{n}^{[l]}\end{array}\right] δ[l] δ1[l]δ2[l]⋮δn[l]
而多样本输入的每一层的误差不再是一个列向量变成一个m列的矩阵每一列对应一个样本的向量。那么多样本的误差定义为 d Z [ l ] [ δ [ l ] ( 1 ) δ [ l ] ( 2 ) … δ [ l ] ( m ) ] [ δ 1 [ l ] ( 1 ) δ 1 [ l ] ( 2 ) … δ 1 [ l ] ( m ) δ 2 [ l ] ( 1 ) δ 2 [ l ] ( 2 ) … δ 2 [ l ] ( m ) ⋮ ⋮ ⋱ ⋮ δ n [ l ] ( 1 ) δ n [ l ] ( 2 ) … δ n [ l ] ( m ) ] dZ^{[l]}\left[\begin{array}{c}\delta^{[l](1)} \delta^{[l](2)} \dots \delta^{[l](m)}\end{array}\right]\left[\begin{array}{c}\delta_{1}^{[l](1)}\delta_{1}^{[l](2)}\dots\delta_{1}^{[l](m)} \\ \delta_{2}^{[l](1)}\delta_{2}^{[l](2)}\dots\delta_{2}^{[l](m)} \\ \vdots \vdots \ddots \vdots \\ \delta_{n}^{[l](1)}\delta_{n}^{[l](2)}\dots\delta_{n}^{[l](m)} \end{array}\right] dZ[l][δ[l](1)δ[l](2)…δ[l](m)] δ1[l](1)δ2[l](1)⋮δn[l](1)δ1[l](2)δ2[l](2)⋮δn[l](2)……⋱…δ1[l](m)δ2[l](m)⋮δn[l](m) d Z [ l ] dZ^{[l]} dZ[l]的维度是 n × m n×m n×m n n n 表示第 l l l 层神经元的个数 m m m 表示样本数量。
参数变换率
因为 d Z [ l ] dZ^{[l]} dZ[l]的维度是 j × m j×m j×m 更新 b [ l ] b^{[l]} b[l] 的时候需要对每行求平均值使得维度变为 j × 1 j×1 j×1再乘以 1 m \frac{1}{m} m1。 d Z [ l ] dZ^{[l]} dZ[l]的维度是 j × m j×m j×m $A^{[l-1]T} $ 的维度是 m × k m×k m×k矩阵相乘得到的维度是 j × k j×k j×k 与 w [ l ] w^{[l]} w[l] 本身的维度相同。因此更新 w [ l ] w^{[l]} w[l] 时只需乘以 1 m \frac{1}{m} m1 求平均值。
说明公式输出层误差 d Z [ L ] ∇ A C ⊙ σ ′ ( Z [ L ] ) d Z^{[L]}\nabla_{A} C \odot \sigma^{\prime}\left(Z^{[L]}\right) dZ[L]∇AC⊙σ′(Z[L])隐含层误差 d Z [ l ] [ w [ l 1 ] T d Z [ l 1 ] ] ⊙ σ ′ ( Z [ l ) ] d Z^{[l]}\left[w^{[l1] T} d Z^{[l1]}\right] \odot \sigma^{\prime}\left(Z^{[l)}\right] dZ[l][w[l1]TdZ[l1]]⊙σ′(Z[l)]参数变化率 d b [ l ] ∂ C ∂ b [ l ] 1 m m e a n O f E a c h R o w ( d Z [ l ] ) d w [ l ] ∂ C ∂ w [ l ] 1 m d Z [ l ] A [ l − 1 ] T d b^{[l]}\frac{\partial C}{\partial b^{[l]}}\frac{1}{m} m e a n O f E a c h R o w\left(d Z^{[l]}\right) \\d w^{[l]}\frac{\partial C}{\partial w^{[l]}}\frac{1}{m} d Z^{[l]} A^{[l-1] T} db[l]∂b[l]∂Cm1meanOfEachRow(dZ[l])dw[l]∂w[l]∂Cm1dZ[l]A[l−1]T参数更新 b [ l ] ← b [ l ] − α ∂ C ∂ b [ l ] w [ l ] ← w [ l ] − α ∂ C ∂ w [ l ] \begin{array}{l}b^{[l]} \leftarrow b^{[l]}-\alpha \frac{\partial C}{\partial b^{[l]}} \\w^{[l]} \leftarrow w^{[l]}-\alpha \frac{\partial C}{\partial w^{[l]}}\end{array} b[l]←b[l]−α∂b[l]∂Cw[l]←w[l]−α∂w[l]∂C
转载请注明出处限时免费公开如有错误❌请评论提醒更正谢谢