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 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 【李宏毅机器学习笔记】BP算法 -> 正文阅读

[人工智能]【李宏毅机器学习笔记】BP算法

Backpropagation

神经网络中,我们利用梯度下降法来对损失函数进行优化,这在神经元数量不多的时候很有效。但是深层神经网络中,有上百万的参数需要调整,单纯使用梯度下降法可以算,但几乎不可能算完。因此我们需要更有效的方法来优化损失函数,这也就引出了反向传播(backpropagation)

链式法则

下图是多层神经网络的一个模型,现在我们要对损失函数L进行优化,即对其中每个参数求偏导。以图中三角部分为例,展开:

Backpropagation

假设该部分的模型函数如下:

z = w 1 x 1 + w 2 x 2 + b z=w_1x_1+w_2x_2+b z=w1?x1?+w2?x2?+b

z是即将输入给激活函数的值, w 1 w_1 w1? x 1 x_1 x1?的权重, w 2 w_2 w2? x 2 x_2 x2?的权重,b是偏置值,如下:

forward_backward_pass
根据链式法则,我们将损失函数(这里的C是整个损失函数中的某一个加项)对某一个 w w w的偏导,拆成了上图中的形式。

前/后向传播

就像上图中标出的那样,我们把 ? z ? w \frac{\partial z}{\partial w} ?w?z?,称为前向传播项;把 ? C ? z \frac{\partial C}{\partial z} ?z?C?,称为后向传播项。

1、前向传播

之所以 ? z ? w \frac{\partial z}{\partial w} ?w?z?称为前向传播,是因为它的值只和与参数直接相连的输入有关。例如在上图中, ? z ? w 1 = x 1 \frac{\partial z}{\partial w_1} = x_1 ?w1??z?=x1? ? z ? w 2 = x 2 \frac{\partial z}{\partial w_2} = x_2 ?w2??z?=x2?

2、反向传播

? C ? z \frac{\partial C}{\partial z} ?z?C?是很复杂的,因为C和z并不直接相关,我们用链式法则对其可以继续分解(假设经过激活函数后的输出可表示为 a = σ ( z ) a=\sigma(z) a=σ(z)):

? C ? z = ? a ? z ? C ? a \frac{\partial C}{\partial z}=\frac{\partial a}{\partial z}\frac{\partial C}{\partial a} ?z?C?=?z?a??a?C?

Backward_pass

其中 ? a ? z \frac{\partial a}{\partial z} ?z?a?就是激活函数在z处的值,可以简单的表示为 σ ′ ( z ) \sigma^{'}(z) σ(z)。而 ? C ? a \frac{\partial C}{\partial a} ?a?C?又要求我们继续进行链式展开:

? C ? a = ? z ′ ? a ? C ? z ′ + ? z ′ ′ ? a ? C ? z ′ ′ \frac{\partial C}{\partial a}=\frac{\partial z^{'}}{\partial a}\frac{\partial C}{\partial z^{'}}+\frac{\partial z^{''}}{\partial a}\frac{\partial C}{\partial z^{''}} ?a?C?=?a?z??z?C?+?a?z??z?C?

很容易发现这是一个迭代的过程,因为我们总需要继续求解下一层的偏导数。这里我们先假设 ? C ? z ′ \frac{\partial C}{\partial z^{'}} ?z?C? ? C ? z ′ ′ \frac{\partial C}{\partial z^{''}} ?z?C?已知,那么可以把最初的式子改写为:

? C ? z = σ ′ ( z ) [ w 3 ? C ? z ′ + w 4 ? C ? z ′ ′ ] \frac{\partial C}{\partial z}=\sigma^{'}(z)\left[w_3 \frac{\partial C}{\partial z^{'}} + w_4 \frac{\partial C}{\partial z^{''}} \right] ?z?C?=σ(z)[w3??z?C?+w4??z?C?]

下面这张图能够让你更好的理解,为什么它被称为“反向”传播。

为什么叫后向传播

如何继续计算

1、单隐层

如果,上图中红色的就是output层,那么我们上面给出的假设已知是成立的,因为此时:

? C ? z ′ = ? y 1 ? z ′ ? C ? y 1 \frac{\partial C}{\partial z^{'}}=\frac{\partial y_1}{\partial z^{'}}\frac{\partial C}{\partial y_1} ?z?C?=?z?y1???y1??C?

? C ? z ′ ′ = ? y 2 ? z ′ ′ ? C ? y 2 \frac{\partial C}{\partial z^{''}}=\frac{\partial y_2}{\partial z^{''}}\frac{\partial C}{\partial y_2} ?z?C?=?z?y2???y2??C?

y与z之间的关系,由激活函数得出;而C与y之间的关系,正是你定义的损失函数,这些偏导都是已知的。

2、多隐层

那如果红色的之后还有很多层,我们其实只需要继续迭代,直到达到output层即可。我们可以想象成有一个逆向的神经网络,其优化过程如下:

逆向网络

总结

BP算法分为三个步骤(对某一个参数):

  1. forward pass。正向求取各个 ? z ? w = a \frac{\partial z}{\partial w}=a ?w?z?=a
  2. backward pass。反向求取各个 ? C ? z \frac{\partial C}{\partial z} ?z?C?
  3. combine。 a × ? C ? z = ? C ? w a \times \frac{\partial C}{\partial z} = \frac{\partial C}{\partial w} a×?z?C?=?w?C?
  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-08-21 15:22:26  更:2021-08-21 15:29:58 
 
开发: 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年11日历 -2024/11/27 18:48:35-

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