ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

反向传播算法

2022-09-09 00:33:47  阅读:228  来源: 互联网

标签:right partial boldsymbol 传播 算法 反向 frac hat left


在介绍反向传播算法前,先看看矩阵微分的概念。

矩阵微积分

为了书写简便,我们通常把单个函数对多个变量或者多元函数对单个变量的偏导数写成向量和矩阵的形式,使其可以被当成一个整体处理.

标量关于向量的偏导数

对于 \(M\) 维向量 \(\boldsymbol{x} \in \mathbb{R}^{M}\) 和函数 \(y=f(\boldsymbol{x}) \in \mathbb{R}\) , 则 \(y\) 关 于 \(\boldsymbol{x}\) 的偏导数为:

\[\frac{\partial y}{\partial \boldsymbol{x}}=\left[\frac{\partial y}{\partial x_{1}}, \cdots, \frac{\partial y}{\partial x_{M}}\right]^{\top} \]

向量关于标量的偏导数

对于标量 \(x \in \mathbb{R}\) 和函数 \(\boldsymbol{y}=f(x) \in \mathbb{R}^{N}\) , 则 \(\boldsymbol{y}\) 关于 \(x\) 的 偏导数为:

\[\frac{\partial y}{\partial x}=\left[\frac{\partial y_{1}}{\partial x}, \cdots, \frac{\partial y_{N}}{\partial x}\right] \]

向量关于向量的偏导数

对于 \(M\) 维向量 \(\boldsymbol{x} \in \mathbb{R}^{M}\) 和函数 \(\boldsymbol{y}=f(\boldsymbol{x}) \in \mathbb{R}^{N}\) , 则 \(f(\boldsymbol{x})\) 关于 \(\boldsymbol{x}\) 的偏导数为:

\[\frac{\partial f(\boldsymbol{x})}{\partial \boldsymbol{x}}=\left[\begin{array}{ccc} \frac{\partial y_{1}}{\partial x_{1}} & \cdots & \frac{\partial y_{N}}{\partial x_{1}} \\ \vdots & \ddots & \vdots \\ \frac{\partial y_{1}}{\partial x_{M}} & \cdots & \frac{\partial y_{N}}{\partial x_{M}} \end{array}\right] \]

前向传播算法

根据之前的介绍,第\(l\)层的输出为:

\[\boldsymbol{a}^{(l)}=f_{l}\left(\boldsymbol{W}^{(l)} \boldsymbol{a}^{(l-1)}+\boldsymbol{b}^{(l)}\right) \]

其中:

\[\boldsymbol{z}^{(l)}=\boldsymbol{W}^{(l)} \boldsymbol{a}^{(l-1)}+\boldsymbol{b}^{(l)} \]

反向传播算法

假设采用随机梯度下降进行神经网络参数学习, 给定一个样本 \((\boldsymbol{x}, \boldsymbol{y})\) , 将其输入到神经网络模型中, 得到网络输出为 \(\hat{\boldsymbol{y}}\) . 假设损失函数为 \(\mathcal{L}(\boldsymbol{y}, \hat{\boldsymbol{y}})\) , 要进行参数学习就需要计算损失函数关于每个参数的导数.

不失一般性, 对第 \(l\) 层中的参数 \(\boldsymbol{W}^{(l)}\) 和 \(\boldsymbol{b}^{(l)}\) 计算偏导数. 因为 \(\frac{\partial \mathcal{L}(\boldsymbol{y}, \hat{y})}{\partial \boldsymbol{W}^{(l)}}\) 的计算 涉及向量对矩阵的微分, 十分繁琐, 因此我们先计算 \(\mathcal{L}(\boldsymbol{y}, \hat{\boldsymbol{y}})\) 关于参数矩阵中每个元素的偏导数 \(\frac{\partial \mathcal{L}(\boldsymbol{y}, \hat{y})}{\partial w_{i j}^{(l)}}\) . 根据链式法则:

\[\begin{array}{l} \frac{\partial \mathcal{L}(\boldsymbol{y}, \hat{\boldsymbol{y}})}{\partial w_{i j}^{(l)}}=\frac{\partial \boldsymbol{z}^{(l)}}{\partial w_{i j}^{(l)}} \frac{\partial \mathcal{L}(\boldsymbol{y}, \hat{\boldsymbol{y}})}{\partial \boldsymbol{z}^{(l)}}, \\ \frac{\partial \mathcal{L}(\boldsymbol{y}, \hat{\boldsymbol{y}})}{\partial \boldsymbol{b}^{(l)}}=\frac{\partial \boldsymbol{z}^{(l)}}{\partial \boldsymbol{b}^{(l)}} \frac{\partial \mathcal{L}(\boldsymbol{y}, \hat{\boldsymbol{y}})}{\partial \boldsymbol{z}^{(l)}} \end{array} \]

上面两个公式中的第二项都是目标函数关于第 \(l\) 层的神经元 \(\boldsymbol{z}^{(l)}\) 的偏导数, 称为误差项,可以一次计算得到.且记\(\delta^{(l)} \triangleq \frac{\partial \mathcal{L}(\boldsymbol{y}, \hat{\boldsymbol{y}})}{\partial \boldsymbol{z}^{(l)}}\).它的大小间接反应了其神经元对整个网络能力的贡献. 这样我们只需要计算三个偏导数, 分别为 \(\frac{\partial \boldsymbol{z}^{(l)}}{\partial w_{i j}^{(l)}}, \frac{\partial \boldsymbol{z}^{(l)}}{\partial \boldsymbol{b}^{(l)}}\) 和 \(\frac{\partial \mathcal{L}(\boldsymbol{y}, \hat{\boldsymbol{y}})}{\partial \boldsymbol{z}^{(l)}}\) .

下面分别来计算这三个偏导数

因 \(\boldsymbol{z}^{(l)}=\boldsymbol{W}^{(l)} \boldsymbol{a}^{(l-1)}+\boldsymbol{b}^{(l)}\) ,且\(w_{i j}^{(l)}\)为\(l-1\)层的第\(j\)个元素到\(l\)层的第\(i\)个元素连接的权重,所以:

\[\begin{aligned} \frac{\partial \boldsymbol{z}^{(l)}}{\partial w_{i j}^{(l)}} &=\left[\frac{\partial z_{1}^{(l)}}{\partial w_{i j}^{(l)}}, \cdots, \frac{\partial z_{i}^{(l)}}{\partial w_{i j}^{(l)}}, \cdots, \frac{\partial z_{M_{l}}^{(l)}}{\partial w_{i j}^{(l)}}\right] \\ &=\left[0, \cdots, \frac{\partial\left(\boldsymbol{w}_{i:}^{(l)} \boldsymbol{a}^{(l-1)}+b_{i}^{(l)}\right)}{\partial w_{i j}^{(l)}}, \cdots, 0\right] \\ &=\left[0, \cdots, a_{j}^{(l-1)}, \cdots, 0\right]\in \mathbb{R}^{1 \times M_{l}} \end{aligned} \]

\[\frac{\partial \boldsymbol{z}^{(l)}}{\partial \boldsymbol{b}^{(l)}}=\boldsymbol{I}_{M_{l}} \]

其中,\(\boldsymbol{I}_{M_{l}}\)是\({M_{l}}\times{M_{l}}\)的单位阵。

因\(\boldsymbol{z}^{(l+1)}=\boldsymbol{W}^{(l+1)} \boldsymbol{a}^{(l)}+\boldsymbol{b}^{(l+1)}\),\(\boldsymbol{a}^{(l)}=f_{l}\left(\boldsymbol{z}^{(l)}\right)\)所以:

\[\frac{\partial \boldsymbol{z}^{(l+1)}}{\partial \boldsymbol{a}^{(l)}}=\left(\boldsymbol{W}^{(l+1)}\right)^{\top} \]

\[\begin{aligned} \frac{\partial \boldsymbol{a}^{(l)}}{\partial \boldsymbol{z}^{(l)}} &=\frac{\partial f_{l}\left(\boldsymbol{z}^{(l)}\right)}{\partial \boldsymbol{z}^{(l)}} \\ &=\operatorname{diag}\left(f_{l}^{\prime}\left(\boldsymbol{z}^{(l)}\right)\right) \end{aligned} \]

根据链式法则得:

\[\begin{aligned} \delta^{(l)} & \triangleq \frac{\partial \mathcal{L}(\boldsymbol{y}, \hat{\boldsymbol{y}})}{\partial \boldsymbol{z}^{(l)}} \\ &=\frac{\partial \boldsymbol{a}^{(l)}}{\partial \boldsymbol{z}^{(l)}} \cdot \frac{\partial \boldsymbol{z}^{(l+1)}}{\partial \boldsymbol{a}^{(l)}} \cdot \frac{\partial \mathcal{L}(\boldsymbol{y}, \hat{\boldsymbol{y}})}{\partial \boldsymbol{z}^{(l+1)}} \\ &=\operatorname{diag}\left(f_{l}^{\prime}\left(\boldsymbol{z}^{(l)}\right)\right) \cdot\left(\boldsymbol{W}^{(l+1)}\right)^{\top} \cdot \delta^{(l+1)} \end{aligned} \]

从上式可以看出,第

标签:right,partial,boldsymbol,传播,算法,反向,frac,hat,left
来源: https://www.cnblogs.com/gxxtsz/p/16671283.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有