反向传播算法推导

?

神经网络中权重 \(w^{(l)}_{ij}\) 的改变将影响到接下来的网络层,直到输出层,最终影响损失函数

?

\(\color{red}{公式推导符号说明}\)

符号 说明
\(n_l\) 网络层数
\(y_j\) 输出层第 \(j\) 类 标签
\(S_l\) 第 \(l\) 层神经元个数(不包括偏置)
\(g(x)\) 激活函数
\(w^{(l)}_{ij}\) 第 \(l\) 层第 \(j\) 个单元与第 \(l+1\) 层第 \(i\) 个单元之间的连接参数
\(b^{(l)}_i\) 第 \(l+1\) 层第 \(i\) 个单元的偏置
\(z^{(l)}_i\) 第 \(l\) 层第 \(i\) 个单元的输入加权和(包含偏置)
\(a^{(l)}_i\) 第 \(l\) 层第 \(i\) 个单元的激活值(输出值)
\(\delta^{(l)}_i\) 第 \(l\) 层第 \(i\) 个单元的梯度值

MSE 损失函数推导

\(\color{red}{基本公式}\)

\[
\begin{align*}
z^{(l+1)}_i &= b^{(l)}_i + \sum^{S_l}_{j=1}{w^{(l)}_{ij}a^{(l)}_j} \tag{1} \ g(x) &= \frac{1}{1 + e^{-x}} \tag{2}\ a^{(l)}_i &= g(z^{(l)}_i) \tag{3} \ J(\theta) &= \frac12{{\sum^{S_{n_l}}_{j=1}\big ({y_j - a^{(n_l)}_j}}}\big)^2 \tag{4}\ \delta^{(l)}_i &=\frac{\partial{J(\theta)}}{\partial{z^{(l)}_i}} \tag{5} \ \ \end{align*}
\]

梯度反向传播公式推导

\(\color{red}{初始条件}\)

\[
\begin{align*}
\delta ^{ (n_{ l }) }_{ i }&=\frac { \partial { J(\theta ) } }{ \partial { z^{ (n_{ l }) }_{ i } } } \\
&=\frac { 1 }{ 2 } \frac { \partial { } }{ \partial { z^{ (n_{ l }) }_{ i } } } \sum _{ j=1 }^{ S_{ n_l } } \left( y_{ j }-a^{ (n_{ l }) }_{ j } \right) ^{ 2 }\\
&=\frac { 1 }{ 2 } \frac { \partial { } }{ \partial { z^{ (n_{ l }) }_{ i } } } \sum _{ j=1 }^{ S_{ n_l } } \left( y_{ j }-g(z^{ (n_{ l }) }_{ j }) \right) ^{ 2 }\\
&=\frac { 1 }{ 2 } \frac { \partial { } }{ \partial { z^{ (n_{ l }) }_{ i } } } \left( y_{ i }-g(z^{ (n_{ l }) }_{ i }) \right) ^{ 2 }\\
&=-\left( y_{ i }-a^{ (n_{ l }) }_{ i } \right) g\prime (z^{ (n_{ l }) }_{ i })\\
\end{align*}
\]

\(\color{red}{递推公式}\)

\[
\begin{align*}
\delta ^{ (l) }_{ i }&=\frac { \partial { J(\theta ) } }{ \partial { z^{ (l) }_{ i } } } \\
&=\sum _{ j=1 }^{ S_{ l+1 } } \frac { \partial { J(\theta ) } }{ \partial { z^{ (l+1) }_{ j } } } \frac { \partial { z^{ (l+1) }_{ j } } }{ \partial { a^{ (l) }_{ i } } } \frac { \partial { a^{ (l) }_{ i } } }{ \partial { z^{ (l) }_{ i } } } \\
&=\sum_{ j=1 }^{ S_{ l+1 } } \frac { \partial { J(\theta ) } }{ \partial { z^{ (l+1) }_{ j } } } \frac { \partial { } }{ \partial { a^{ (l) }_{ i } } } \left( b^{ (l) }_{ j }+\sum _{ k=1 }^{ S_{ l } } w^{ (l) }_{ jk }a^{ (l) }_{ k }) \right) \frac { \partial { a^{ (l) }_{ i } } }{ \partial { z^{ (l) }_{ i } }} \\
&=\sum_{ j=1 }^{ S_{ l+1 } } \delta ^{ (l) }_{ j } w^{ (l) }_{ ji }g\prime (z^{ (l) }_{ i }) \\
&= g\prime (z^{ (l) }_{ i }) \sum_{ j=1 }^{ S_{ l+1 } } \delta ^{ (l+1) }_{ j } w^{ (l) }_{ ji } \\
\end{align*}
\]

\(\color{red}{损失函数关于权重和偏置的导数}\)

\[
\begin{align*}
\\frac { \partial { J(\theta ) } }{ \partial { w^{ (l) }_{ ij } } } &=\frac { \partial { J(\theta ) } }{ \partial { z^{ (l+1) }_{ i } } } \frac { \partial { z^{ (l+1) }_{ i } } }{ \partial { w^{ (l) }_{ ij } } } \\
&=\delta ^{ (l+1) }_{ i }\frac { \partial { z^{ (l+1) }_{ j } } }{ \partial { w^{ (l) }_{ ij } } } \\
&=\delta ^{ (l+1) }_{ i }\frac { \partial { } }{ \partial { w^{ (l) }_{ ij } } } \left( b^{ (l) }_{ i }+\sum _{ k=1 }^{ S_{ l } } w^{ (l) }_{ ik }a^{ (l) }_{ k }) \right) \\ &=\delta ^{ (l+1) }_{ i }a^{ (l) }_{ j }\\frac { \partial { J(\theta ) } }{ \partial { b^{ (l) }_{ i } } } &=\delta ^{ (l+1) }_{ i }
\end{align*}
\]

交叉熵损失函数推导

?

\(\color{red}{递推公式}\)

\[
\begin{align*}
g(x) &= \frac{1}{1 + e^{-x}}\quad \quad 激活函数 \a^{(l)}_{i} &= g\left(z^{(l)}_{i}\right) \z^{(l)}_{i} &= \left( \sum^{S_l}_{j=1}{w^{(l-1)}_{ij}a^{(l-1)}_i} \right ) + b^{(l-1)}_i \\frac { \partial { J(\theta ) } }{ \partial { z^{ (l) }_{ i } } }
&=\sum _{ j=1 }^{ S_{ l+1 } } \frac { \partial { J(\theta ) } }{ \partial { z^{ (l+1) }_{ j } } } \frac { \partial { z^{ (l+1) }_{ j } } }{ \partial { a^{ (l) }_{ i } } } \frac { \partial { a^{ (l) }_{i} } }{ \partial { z^{ (l) }_{ i } } }\\
\end{align*}
\]

其中

\[
\begin{align*}
\frac { \partial { z^{ (l+1) }_{ j } } }{ \partial { a^{ (l) }_{ i } } } &= w^{(l)}_{kj} \\frac { \partial { a^{ (l) }_{i} } }{ \partial { z^{ (l) }_{ i } } } &= z^{ (l) }_{ i } \left(1- z^{ (l) }_{ i }\right)
\end{align*}
\]

初始条件

\[
\begin{align*}
J \left( \theta \right ) &= -\sum^{s_l}_{i=1}y^t \space \ln \space y^p \y^p_j &= \frac{e^{a^N_j}}{\sum^{s_N}_{k=1}e^{a^L_k}} \\end{align*}
\]

\[
\begin{align*}
J \left( \theta \right ) &= -\sum^{s_l}_{i=1}y^t \space \ln \space y^p \y^p_j &= \frac{e^{a^N_j}}{\sum^{s_N}_{k=1}e^{a^L_k}} \\end{align*}
\]

softmax偏导数计算

\[
\begin{align*}
\frac{\partial y^p_j}{\partial a^N_i} =
\begin{cases}
-y^p_i \space y^p_j \quad \quad \quad\quad i \ne j\y^p_i \space (1-y^p_i) \quad \quad \space i =j
\end{cases}
\end{align*}
\]

求导链式法则如下

\[
\begin{align*}
\frac { \partial { J(\theta ) } }{ \partial { z^{ (N) }_{ i } } }
&= \frac { \partial { J(\theta ) } }{ \partial { a^{ (N) }_{ i } } } \frac { { \partial { a^{ (N) }_{ i } } } }{ \partial { z^{ (N) }_{ i } } }
\\
\frac { \partial { J(\theta ) } }{ \partial { a^{ (N) }_{ i } } }
&=\sum _{ j=1 }^{ S_{ N } } \frac { \partial { J(\theta ) } }{ \partial { y^{ (p) }_{ j } } } \frac { { \partial { y^{ (p) }_{ j } } } }{ \partial { a^{ (N) }_{ i } } } \\
\frac { \partial { J(\theta ) } }{ \partial { y^{ (p) }_{ j } } } &= -\frac{y^t_j}{y^p_j}
\end{align*}
\]

由上可知:

\[
\begin{align*}
\frac { \partial { J(\theta ) } }{ \partial { a^{ (N) }_{ i } } }
&= \frac { \partial { J(\theta ) } }{ \partial { y^{ (p) }_{ i } } } \frac { { \partial { y^{ (p) }_{ i } } } }{ \partial { a^{ (N) }_{ i } } } + \sum _{ j \ne i }^{ S_{ N } } \frac { \partial { J(\theta ) } }{ \partial { y^{ (p) }_{ j } } } \frac { { \partial { y^{ (p) }_{ j } } } }{ \partial { a^{ (N) }_{ i } } }
\ &= - \frac { y_{ i }^{ t } }{ y_{ i }^{ p } } y_{ i }^{ p }\left( 1-y_{ i }^{ p } \right) +\sum _{ j\ne i }^{ s_{ N } } -\frac { y_{ j }^{ t } }{ y_{ j }^{ p } } \left(- y_{ j }^{ p }y_{ i }^{ p } \right) \&= -y_{ i }^{ t }\left( 1-y_{ i }^{ p } \right) +\sum _{ j\ne i }^{ s_{ N } } \left( y_{ j }^{ t }y_{ i }^{ p } \right) \&= -y^t_i + \sum _{ j }^{ s_{ N } } \left( y_{ j }^{ t }y_{ i }^{ p } \right) \ &=y^p_i - y^t_i
\end{align*}
\]

由此可知反向传播迭代算法的初始值

\[
\begin{align*}
\frac { \partial { J(\theta ) } }{ \partial { z^{ (N) }_{ i } } }
&= \frac { \partial { J(\theta ) } }{ \partial { a^{ (N) }_{ i } } } \frac { { \partial { a^{ (N) }_{ i } } } }{ \partial { z^{ (N) }_{ i } } }
\\
&=\left( y^p_i - y^t_i \right) \cdot z^{ (l) }_{ i } \left(1- z^{ (l) }_{ i }\right) \\end{align*}
\]

原文地址:https://www.cnblogs.com/nowgood/p/backprop2.html

时间: 2024-08-10 10:16:17

反向传播算法推导的相关文章

神经网络和反向传播算法推导

注:由于自己画图实在太难画,本文中基本所有插图来源于算法团子机器学习班,请勿转载 1.普通的机器学习模型: 其实,基本上所有的基本机器学习模型都可以概括为以下的特征:根据某个函数,将输入计算并输出.图形化表示为下图: 当我们的g(h)为sigmoid函数时候,它就是一个逻辑回归的分类器.当g(h)是一个只能取0或1值的函数时,它就是一个感知机.那么问题来了,这一类模型有明显缺陷:当模型线性不可分的时候,或者所选取得特征不完备(或者不够准确)的时候,上述分类器效果并不是特别喜人.如下例: 我们可以

循环神经网络(RNN)模型与前向反向传播算法

在前面我们讲到了DNN,以及DNN的特例CNN的模型和前向反向传播算法,这些算法都是前向反馈的,模型的输出和模型本身没有关联关系.今天我们就讨论另一类输出和模型间有反馈的神经网络:循环神经网络(Recurrent Neural Networks ,以下简称RNN),它广泛的用于自然语言处理中的语音识别,手写书别以及机器翻译等领域. 1. RNN概述 在前面讲到的DNN和CNN中,训练样本的输入和输出是比较的确定的.但是有一类问题DNN和CNN不好解决,就是训练样本输入是连续的序列,且序列的长短不

机器学习之反向传播算法

Thoughts of Algorithms 博客园 首页 联系 订阅 管理 随笔 - 54  文章 - 1  评论 - 141 机器学习公开课笔记(5):神经网络(Neural Network)--学习 这一章可能是Andrew Ng讲得最不清楚的一章,为什么这么说呢?这一章主要讲后向传播(Backpropagration, BP)算法,Ng花了一大半的时间在讲如何计算误差项δδ,如何计算ΔΔ的矩阵,以及如何用Matlab去实现后向传播,然而最关键的问题--为什么要这么计算?前面计算的这些量到

反向传播算法数学推导

虽然数学不是那么好,但还是要对这个经典算法真正推导一遍心里才安稳. 主要参考资料:ufldl 开始:首先要明确,反向传播算法,是为了计算loss相对于w,b的偏导数,以此来更新每次学习的w,b,是一个巧妙地计算方法. 首先定义loss函数: 乍一看,这怎么求关于每个权值的偏导数呢?别急,反向传播算法的一个巧妙之处就是没有直接去定义loss相对于w,b的偏导数,而是先定义了一个残差的概念 以下直接上手写图了(太多公式): 一些注意点明天写!

DL4NLP——神经网络(一)前馈神经网络的BP反向传播算法步骤整理

这里把按[1]推导的BP算法(Backpropagation)步骤整理一下,备忘使用.[1] 中直接使用矩阵微分的记号进行推导,整个过程十分简洁.而且这种矩阵形式有一个非常大的优势就是对照其进行编程实现时非常方便. 但其实用标量计算推导也有一定的好处,比如可以清楚地知道某个权重是被谁所影响的. 记号约定: $L$:神经网络的层数.输入层不算. $n^l$:第 $l$ 层神经元的个数.偏置神经元不算在内. $W^{l}\in\mathbb R^{n^l\times n^{l-1}}$:第 $l-1

【神经网络和深度学习】笔记 - 第二章 反向传播算法

上一章中我们遗留了一个问题,就是在神经网络的学习过程中,在更新参数的时候,如何去计算损失函数关于参数的梯度.这一章,我们将会学到一种快速的计算梯度的算法:反向传播算法. 这一章相较于后面的章节涉及到的数学知识比较多,如果阅读上有点吃力的话也可以完全跳过这一章,把反向传播当成一个计算梯度的黑盒即可,但是学习这些数学知识可以帮助我们更深入的理解神经网络. 反向传播算法的核心目的是对于神经网络中的任何weight或bias计算损失函数$C$关于它们的偏导数$\frac{\partial C}{\par

神经网络中的参数的求解:前向和反向传播算法

神经网络最基本的知识可以参考神经网络基本知识,基本的东西说的很好了,然后这里讲一下神经网络中的参数的求解方法. 一些变量解释: 标上""的圆圈被称为偏置节点,也就是截距项. 本例神经网络有参数 ,其中 (下面的式子中用到)是第 层第 单元与第 层第 单元之间的联接参数(其实就是连接线上的权重,注意标号顺序), 是第 层第 单元的偏置项. 用 表示第 层的节点数(偏置单元不计在内) 用 表示第 层第 单元的激活值(输出值).当 时, ,也就是样本输入值的第 个特征. 用 表示第层各单元对

机器学习之五:神经网络、反向传播算法

一.逻辑回归的局限 在逻辑回归一节中,使用逻辑回归的多分类,实现了识别20*20的图片上的数字. 但所使用的是一个一阶的模型,并没有使用多项式,为什么? 可以设想一下,在原有400个特征的数据样本中,增加二次.三次.四次多项式,会是什么情形? 很显然,训练样本的特征数量将会拔高多个数量级,而且,更重要的,要在一个式子中拟合这么多的特征,其难度是非常大的,可能无法收敛到一个比较理想的状态. 也就是说,逻辑回归没法提供很复杂的模型. 因为其本质上是一个线性的分类器,擅长解决的是线性可分的问题. 那么

神经网络的正反向传播算法推导

1 正向传播 1.1 浅层神经网络 为简单起见,先给出如下所示的简单神经网络: 该网络只有一个隐藏层,隐藏层里有四个单元,并且只输入一个样本,该样本表示成一个三维向量,分别为为\(x_1\),\(x_2\)和\(x_3\).网络的输出为一个标量,用\(\hat{y}\)表示.考虑该神经网络解决的问题是一个二分类的问题,把网络的输出解释为正样本的概率.比方说输入的是一张图片(当然图片不可能只用三维向量就可以表示,这里只是举个例子),该神经网络去判断图片里面是否有猫,则\(\hat{y}\)代表该图