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

神经网络的反向传播算法推导有了上一篇神经网络的反向传播算法推导—前期知识准备做铺垫,下一步来看看反向传播算法具体的推导过程。一、定义机器学习中常说的两个函数:损失函数(lossfunction):是定义在单个样本上的,算的是一个样本的值和预测值的误差,记为C(Θ);代价函数(costfunction):是定义在整个训练集上的,是所有样本误差的平均,也就是损失函数的平均,记为J(Θ);假设函数:二、神经网络结构图以三层神经网络为例:…

大家好,又见面了,我是你们的朋友全栈君。

目录

一、定义

二、神经网络结构图

三、反向传播算法的四个公式推导


        有了上一篇  神经网络的反向传播算法推导 — 前期知识准备  做铺垫,下一步来看看反向传播算法具体的推导过程。

一、定义

机器学习中常说的两个函数:

损失函数 (loss function):是定义在单个样本上的,算的是一个样本的值和预测值的误差,记为C(Θ)

代价函数 (cost function):是定义在整个训练集上的,是所有样本误差的平均,也就是损失函数的平均,记为J(Θ);

假设函数:h_{\theta }(x) = g(z^{l}) = g(\Theta^{l} x)

[变量定义]

s_{l} : 表示神经网络第 l 层神经元的个数

s_{L}:表示神经网络最终输出的类别数(L表示最后一层)

i:\theta 的尺寸/维度的列,第 i 列

j:\theta 的尺寸/维度的行,第 j 行

二、神经网络结构图

以三层神经网络为例:

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

                                                                (图1)

上图按照神经网络的计算方法(如不清楚的请参考文章 从逻辑回归到神经网络):

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

                                                                (图2)

说明:图2中将 \theta _{10}^{(2)} 、\theta _{20}^{(2)} 标为”常量“,有些欠妥,总之意思就是与 a_{j}^{(2)} 无关。

在计算图中可表示如下( 损失函数计算方式有多种,假设我们使用最小化误差函数   \frac{1}{2} \sum_{i=1}^{n} (f(x_{i}) - y_{i})^{2}    ):

这里为什么不是平方误差损失函数  \frac{1}{2m} \sum_{i=1}^{m} (f(x_{i}) - y_{i})^{2}  ,我的理解是在神经网络在计算损失函数时 i 从1到 n对应的是一个样本的多个特征属性,而不是多个样本,因此无需求和后除以m.

三、反向传播算法的四个公式推导

先抛出反向传播算法的四个公式:

\delta ^{L} = \bigtriangledown _{a} C \odot g^{'}(z^{L})         ——————– BP1

\delta ^{l} = ( (\theta ^{l})^{T} \delta ^{l+1} ) \odot g^{'}(z^{l}) ——————- BP2 

\frac{\partial C}{ \partial b_{j}^{l}} = \delta _{j}^{l+1}  ————————————– BP3

\frac{ \partial C }{ \partial \theta_{ji}^{l} } = a_{i}^{l} \delta _{j}^{l+1}  ———————————- BP4

(说明:其中,

BP2有的定义为:\delta ^{l} = ( (w ^{l+1})^{T} \delta ^{l+1} ) \odot g^{'}(z^{l}) 

BP3有的定义为:\frac{\partial C}{ \partial b_{j}^{l}} = \delta _{j}^{l}

BP4有的定义为:\frac{ \partial C }{ \partial \Theta_{jk}^{l} } = a_{k}^{l-1} \delta _{j}^{l}

主要是层数 l 的定义不同,和变量命名不同,本质一样的。

)

下面用计算图的方式逐一推导(依然以三层神经网络开头):

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

 

                                                              (图3)

由三层神经网络推广到L层,我们从L-1层开始计算,则计算图如下:

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

                                                                (图4)

为了方便对图中路径进行求导(计算权重),所以补充了节点虚线,类似如下:

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

                                                                (图5)

下一步开始对每条路径求偏导:

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

                                                                (图6)

        根据上一篇  神经网络的反向传播算法推导 — 前期知识准备  求导的反向模式求导:求损失函数C关于某一节点的偏导数,只需要把该节点每条反向路径上的偏导数做乘积,再求和即可。到此,我们已经在计算图上求得损失函数C关于模型参数的偏导数  \frac{\partial C}{\partial \Theta _{ji}^{(l)}}  、\frac{\partial C}{\partial b _{j}^{(l)}}  ,而反向传播算法就是在此基础上通过定义一个损失/误差: \delta _{j}^{(l)}  ,先逐层向后传播得到每一层节点的损失  \delta _{j}^{(l)}  ,再通过每一个节点的损失  \delta _{j}^{(l)}  来求解该节点的  \frac{\partial C}{\partial \Theta _{ji}^{(l)}}  、\frac{\partial C}{\partial b _{j}^{(l)}}  ,计算步骤:

第一步:令损失函数C关于第 l 层的第 j 个元素的偏导为:\delta _{j}^{(l)} = \frac{\partial C}{\partial z _{j}^{(l)}}

第二步:计算最后一层  \delta _{j}^{(L)}  

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

                                                                (图7)

        按照反向模式求导,节点 C 到 z _{j}^{(L)} 的反向路径只有一条,例如:上图中 C 到 z _{1}^{(L)} 的路径为① -> ② ,按照”同一可达路径相乘,不同可达路径相加“的原则:

\delta _{1}^{(L)} = \frac{\partial C}{\partial z _{1}^{(L)}} = \frac{\partial C}{\partial a _{1}^{(L)}} * g^{'}(z _{1}^{(L)}) = (a _{1}^{(L)} - y_{1}) * g^{'}(z _{1}^{(L)})

\delta _{j}^{(L)} = \frac{\partial C}{\partial z _{j}^{(L)}} = \frac{\partial C}{\partial a _{j}^{(L)}} * g^{'}(z _{j}^{(L)}) = (a _{j}^{(L)} - y_{j}) * g^{'}(z _{j}^{(L)})

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

                                                                (图8)

【说明】▽的物理意义:▽为对矢量做偏导,它是一个矢量,▽U表示为矢量U的梯度;

其中 \odot 的操作是把两个向量对应元素相乘组成新的元素。

图8即为反向传播算法公式 BP1:   \delta ^{L} = \bigtriangledown _{a} C \odot g^{'}(z^{L})

图7中(紫色路径) C 节点到 z _{j}^{(L-1)} 的反向路径有s_{L}条,按照“同一可达路径相乘,不同可达路径相加”的原则:

\delta _{1}^{(L-1)} = \frac{\partial C}{\partial z _{1}^{(L-1)}}

= (a _{1}^{(L)} - y_{1}) * g^{'}(z _{1}^{(L)}) * \Theta _{11}^{L-1} * g^{'}(z _{1}^{(L-1)})

+ (a _{2}^{(L)} - y_{2}) * g^{'}(z _{2}^{(L)}) * \Theta _{21}^{L-1} * g^{'}(z _{1}^{(L-1)})

+ (a _{ j }^{(L)} - y_{ j }) * g^{'}(z _{ j }^{(L)}) * \Theta _{j1}^{L-1} * g^{'}(z _{1}^{(L-1)})

+ (a _{ s_{L} }^{(L)} - y_{ s_{L} }) * g^{'}(z _{ s_{L} }^{(L)}) * \Theta _{s_{L} 1}^{L-1} * g^{'}(z _{1}^{(L-1)})

其中 (a _{ s_{L} }^{(L)} - y_{ s_{L} }) = \frac{\partial C}{\partial a _{s_{L}}^{(L)}}    ——>  (a _{ s_{L} }^{(L)} - y_{ s_{L} }) * g^{'}(z _{ s_{L} }^{(L)}) = \frac{\partial C}{\partial a _{s_{L}}^{(L)}} * g^{'}(z _{ s_{L} }^{(L)}) = \delta _{s_{L} }^{(L)},所以,提取公共部分g^{'}(z _{1}^{(L-1)}),并且向量化、得到:

\delta ^{L-1} = ( (\Theta ^{L-1})^{T} \delta ^{L} ) \odot g^{'}(z^{L-1})

推广到 l 层:\delta ^{l} = ( (\Theta ^{l})^{T} \delta ^{l+1} ) \odot g^{'}(z^{l}) 即反向传播算法公式 BP2

说明:有的定义 BP2 \delta ^{l} = ( (w ^{l+1})^{T} \delta ^{l+1} ) \odot g^{'}(z^{l}),这应该是层数 l 的定义不同,w ^{l+1} 相当于 \theta ^{l},本文延续斯坦福大学机器学习教程中的定义 z^{(l)} = \theta ^{(l-1)} a^{(l-1)}h_{\theta } (x) = a^{l} = g(z^{(l)})

接下来计算  \frac{\partial C}{ \partial b_{j}^{l}} 

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

                                                                (图9)

图9中 节点C到节点 b_{1}^{L-1} 的反路径为 ① -> ② -> ③ 

\frac{\partial C}{ \partial b_{1}^{L-1}} = \frac{\partial C}{\partial z _{1}^{L}} *\frac{\partial z _{1}^{L}}{\partial b_{1}^{L-1}} = \frac{\partial C}{\partial z _{1}^{L}} * 1 = \delta _{1}^{L} *1 = \delta _{1}^{L}

\frac{\partial C}{ \partial b_{1}^{L-2}} = \frac{\partial C}{\partial z _{1}^{L-1}} *1 =\delta _{1}^{L-1}

\frac{\partial C}{ \partial b_{j}^{l}} = \frac{\partial C}{\partial z _{j}^{l+1}} *1 =\delta _{j}^{l+1}

\frac{\partial C}{ \partial b_{s_{l}}^{l}} = \frac{\partial C}{\partial z _{s_{l}}^{l+1}} *1 =\delta _{s_{l}}^{l+1}

由此,得到反向传播算法公式 BP3  \frac{\partial C}{ \partial b_{j}^{l}} = \delta _{j}^{l+1} 

最后计算  \frac{ \partial C }{ \partial \Theta_{jk}^{l} }

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

                                                                (图9)

图9中 节点C到节点 \theta _{11}^{L-1} 的反路径为 ① -> ② -> ③ 

\frac{\partial C}{ \partial \theta _{11}^{L-1}} = \frac{\partial C}{\partial z _{1}^{L}} * a_{1}^{L-1} = \delta _{1}^{L}*a_{1}^{L-1} = a_{1}^{L-1} \delta _{1}^{L}

\frac{\partial C}{ \partial \theta _{11}^{L-2}} = \frac{\partial C}{\partial z _{1}^{L-1}} * a_{1}^{L-2} = \delta _{1}^{L-1}*a_{1}^{L-2} = a_{1}^{L-2} \delta _{1}^{L-1}

\frac{\partial C}{ \partial \theta _{ji}^{l}} = \frac{\partial C}{\partial z _{j}^{l+1}} * a_{i}^{l} = \delta _{j}^{l+1}*a_{i}^{l} = a_{i}^{l} \delta _{j}^{l+1}

由此,得到反向传播算法公式 BP4  \frac{ \partial C }{ \partial \theta_{ji}^{l} } = a_{i}^{l} \delta _{j}^{l+1} 

到此,神经网络的反向传播算法的四个公式推导结束。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/140822.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • poe交换机跟普通交换机的区别_以太网交换机和poe交换机的区别

    poe交换机跟普通交换机的区别_以太网交换机和poe交换机的区别众所周知电气设备只有通电后才能工作,而一些基于IP网络的各种设备也同样需要供电才能使用,自从有了poe供电技术后IP网络设备就又多了一种供电方式。那么具体poe工业以太网交换机可以当普通工业以太网交换机用吗,poe工业以太网交换机有哪些优势呢?poe工业以太网交换机可以当普通工业以太网交换机用吗poe工业以太网交换机的可以当作普通工业以太网交换机来用的,不过必要是正规厂商生成的支持802.3at/af协议的poe工业以太网交换机,因为这些poe工业以太网交换机在供电前会先提供1个低电压检测前..

    2022年10月5日
    0
  • web服务器双机热备方案解析「建议收藏」

    (1)、假设外网虚拟IP72.249.146.214上,内网hosts设置db10对应内网虚拟IP192.168.146.214  (2)、默认情况下,由主机绑定内、外网虚拟IP,备机作为备份,当主机的MySQL、Nginx或服务器出现故障无法访问时,备机会自动接管内、外网虚拟IP。两台服务器都启动负责监控、自动切换虚拟IP的守护进程/usr/bin/nohup/bi

    2022年4月7日
    84
  • sublime 激活码 2021[在线序列号][通俗易懂]

    sublime 激活码 2021[在线序列号],https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月18日
    160
  • Oracle 11g安装步骤(超详细)

    Oracle 11g安装步骤(超详细)今天电脑装了win10,需要重新装oracle,这边记录一下重装过程,避免下次浪费时间。1、oracle下载官方下地址:http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html注意Oracle分成两个文件,下载完后,将两个文件解压到同一目录下即可。路径名称中,最好不要出现中文,也不…

    2022年7月25日
    8
  • 西尔斯罗巴克公司案例分析_巴宝莉滑铁卢

    西尔斯罗巴克公司案例分析_巴宝莉滑铁卢这几天看到网上对WannaCry勒索病毒讨论得沸沸扬扬,不免有些感触。其实该病毒的这次爆发,完全可以类比N年前“熊猫烧香”爆发的情况。也就是国内杀软纷纷歇菜,让本来就没什么技术含量的病毒横行于世。所不同的是,这次在病毒横行的时候,假设有技术爱好者出来质疑国内杀软的查杀水平,那么该杀软厂商的公关人员就会第…

    2022年8月20日
    3
  • 1100000/1011模二除法_四位数除以两位数的除法算式

    1100000/1011模二除法_四位数除以两位数的除法算式原题链接这里所谓的“光棍”,并不是指单身汪啦~ 说的是全部由1组成的数字,比如1、11、111、1111等。传说任何一个光棍都能被一个不以5结尾的奇数整除。比如,111111就可以被13整除。 现在,你的程序要读入一个整数x,这个整数一定是奇数并且不以5结尾。然后,经过计算,输出两个数字:第一个数字s,表示x乘以s是一个光棍,第二个数字n是这个光棍的位数。这样的解当然不是唯一的,题目要求你输出最小的解。提示:一个显然的办法是逐渐增加光棍的位数,直到可以整除x为止。但难点在于,s可能是个非常大的数 ——

    2022年8月9日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号