IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 李宏毅深度学习笔记(二)——后向传播(Backpropagation) -> 正文阅读

[人工智能]李宏毅深度学习笔记(二)——后向传播(Backpropagation)

Backpropagation解决的是在神经网络中如何有效率的进行Gradient?Descent算法的问题。更具体地说,假设将Loss?Function记为\L(\theta),其中\theta为一个向量,表示所有的参数,那么L(\theta)的梯度表示为

\nabla L(\theta)=\begin{bmatrix} \frac{\partial L(\theta)}{\partial w_{1}}\\ \frac{\partial L(\theta)}{\partial w_{2}}\\ ...\\ \frac{\partial L(\theta)}{\partial b_{1}}\\ \frac{\partial L(\theta)}{\partial b_{2}}\\ ...\\ \end{bmatrix}

Backpropagation就是快速计算\nabla L的一种方法。

定义函数C^{n}(\theta)为第n个预测值与真实值之间的距离函数,则Loss?Function可以表示为

L(\theta)=\sum_{n=1}^{N}C^{n}(\theta)

\theta中的某一个参数记为w,C^{n}简记为C,下面开始展示\frac{\partial C}{\partial w}的计算过程。

如图所示是一个神经元,输入为x_{1}x_{2},令sigmoid函数的输入z=w_{1}x_{1}+w_{2}x_{2}+b,则根据链式法则,\frac{\partial C}{\partial w}=\frac{\partial C}{\partial z}\frac{\partial z}{\partial w}.

?其中\frac{\partial z}{\partial w}是容易得到的。若w=w_{1},则\frac{\partial z}{\partial w}=x_{1};若w=w_{2},则\frac{\partial z}{\partial w}=x_{2};否则\frac{\partial z}{\partial w}=0。但是,计算\frac{\partial C}{\partial z}需要考虑后面的运算对C带来的影响。

进一步地,令a=\sigma(z),我们可以得到\frac{\partial C}{\partial z}=\frac{\partial C}{\partial a}\frac{\partial a}{\partial z}??。同样的,\frac{\partial a}{\partial z}可以由sigmoid函数求导得到,计算\frac{\partial C}{\partial a}需要考虑后面的运算对C带来的影响。

于是我们考虑下一层神经元。假设这个神经元只与下一层的两个神经元的连接。在下一层中,经过同样的运算可以得到{z}'{z}''。于是\frac{\partial C}{\partial a}=\frac{\partial C}{\partial {z}'}\frac{\partial {z}'}{\partial a}+\frac{\partial C}{\partial {z}''}\frac{\partial {z}''}{\partial a}

?

?观察这个式子,从图中易得\frac{\partial {z}'}{\partial a}=w_{3}\frac{\partial {z}''}{\partial a}=w_{4},而\frac{\partial C}{\partial {z}'}\frac{\partial C}{\partial {z}''}的求法与\frac{\partial C}{\partial z}没有任何区别。于是我们考虑:能不能用递推的方法求出所有的\frac{\partial C}{\partial z}呢?

答案是肯定的。通过以上的推导可以得到递推式

\frac{\partial C}{\partial z}={\sigma}'(z)[w_{3}\frac{\partial C}{\partial {z}'}+w_{4}\frac{\partial C}{\partial {z}''}]

?如果这层神经元不是最后一层,即不是output?layer,则用递推式计算;如果是output?layer,假设输出分别为y_{1}y_{2},则\frac{\partial C}{\partial {z}'}=\frac{\partial C}{\partial y_{1}}\frac{\partial y_{1}}{\partial {z}'}=\frac{\partial C}{\partial y_{1}}{\sigma}'({z}')\frac{\partial C}{\partial {z}''}=\frac{\partial C}{\partial y_{2}}\frac{\partial y_{2}}{\partial {z}''}=\frac{\partial C}{\partial y_{2}}{\sigma}'({z}'')

?由于C是距离函数,表达式已知且显含y,所以\frac{\partial C}{\partial y}易于求得。

与此同时,我们观察到,递推式的项数与该神经元连接到的神经元的个数相同,并且同样乘以一个系数之后相加,这个过程与神经网络做的事情很像。于是我们用一个反向的神经元来表示这个计算过程。但是激活函数由sigmoid函数换为乘一个常数{\sigma}'(z),并且没有bias项。

?

由于这个过程与正常的神经网络进行运算的方向是相反的,所以这个过程又叫做Backward?pass。

整理一遍整个运算过程,假设下图为我们要计算的神经网络。

?首先,对整个神经网络进行一次运算,计算出z1,z2…以及y1和y2。

然后进行backward?pass,计算\frac{\partial C}{\partial z_{1}}\frac{\partial C}{\partial z_{2}}…一次性计算出所有需要用到的偏微分值。

?最后依次对所有参数进行运算即可。

?

?

?

?

?

?

?

?

?

?

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-07-25 11:39:27  更:2021-07-25 11:43:28 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/22 10:19:24-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码