| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> Back Propagation 反向传播 -> 正文阅读 |
|
[人工智能]Back Propagation 反向传播 |
目录 BP学习目标对权重w进行更新,随机梯度下降采用的是loss对w进行求导求梯度,使得w的更新来减少loss,并尽可能是loss最小。 ? ? ? ? ?? BP计算图? ? ? ? ? 这个结构就成为神经网络中的一层 完整的两层神经网络如下图。 具体的Matrix multiplication矩阵乘法可以参考 matrix cookbook。 ? ? ? ? ? ? BP的链式法则chain rule1. 前馈网络形式,先向前计算从输入x和权重w,然后算出loss ? ? ? ?? 2. Local gradient,求f关于x的导数和关于w的导数 ? ? ? ? ? 3. 再反向将loss关于z的偏导传递 ? ? ? ?? 4. 反向传播,使用链式法则来求的loss关于x的偏导和关于w的偏导,从而产生新的输入内容 ? ? ? ? 计算流程:前向网络传播? ? ? ? ? ? ?? 反向传播过程? ? ? ? ? ?? 完整的计算图举例:? ? ? ? ?? Tensor 张量,可以是标量,向量,也可以是三维的,还可以是更高阶的数据。 代码剖析:1. 确定好张量w后,构建计算图、 ? ? ? ? ?? 因为当前张量w是一个数,所以torch.Tensor([1.0]),用中括号括起来的数值填写1.0就可以了。 默认情况下tensor不会保留计算的梯度,所以需要w.requires_grad = True 来计算获得张量的梯度。 2. 因为w是张量需要获取w的梯度,所以x*w计算后也是张量也需要获取x*w的梯度 ? ? ? ? ? ? 3. 每调用一次loss函数,构建一次计算图。获得loss ? ? ? ? ?? 4. 前馈过程,计算loss ? ? ? ? ?? 5. 反馈过程,计算张量的梯度,在反向传播的过程中计算所有张量需要的梯度 ? ? ? ? ?? 6. 利用梯度来更新权重,因为梯度也是tensor,而进行tensor的计算需要构建计算图,但是更新权重只是数值的计算也不需要构建计算图,因此需要用tensor的data,即w.data= w.data - 0.01 * w.grad.data. ? ? ? ? ?? 在更新权重之前可以使用张量直接计算,但是到权重更新时只能使用标量。 7. 将权重里面的梯度数据全部清零。在这里梯度不需要累加,所以需要显式地清零。不然得到的权重的梯度就是累加的结果。 ? ? ? ? ?? 8.? 获取损失,继续迭代。l.item()来获取标量的损失,epoch表示迭代第几轮 ? ? ? ? ?? ?练习:? ? ? ? ?? 练习代码:
?结果:
?总结:? ? ? ? BP学习过程由信号正向传播和误差反向传播两个阶段构成。其中信号正向传播用于获得在隐含层神经元和输出层神经元的输出信号;误差反向传播用于将网络期望输出与实际输出的误差从输出层反向传播至隐含层在至输入层,并在此过程中更新各个神经元的连接权值。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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/17 20:22:14- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |