Back Propagation 反向传播

简介: Back Propagation 反向传播

3、Back Propagation 反向传播

B站视频教程传送门:PyTorch深度学习实践 - 反向传播

3.1 引出算法

对于简单(单一)的权重 W ,我们可以将它封装到 Neuron(神经元)中,然后对权重W进行更新即可:

但是,往往实际情况中会涉及多个权重(例如下图:会有几十到上百个),我们几乎不可能做到写出所有的解析式:

矩阵论参考:The Matrix Cookbook - http://matrixcookbook.com

所以,引出反向传播(Back Propagation)算法:

当然,也可以将括号里面展开,如下如所示:

注意:不断地进行线性变化,不管有多少层,最后都会统一成一种形式。

所以:不能够化简(展开),因为增加的这些权重毫无意义。

3.2 非线性函数

所以我们需要引进非线性函数,每一层都需要一个非线性函数

3.3 算法步骤

在具体讲解反向传播之间,先回顾一下链式求导法则

(1)创建计算图表 Create Computational Graph (Forward)

(2)本地梯度 Local Gradient

(3)给出连续节点的梯度 Given gradient from successive node

(4)使用链式规则来计算梯度 Use chain rule to compute the gradient (Backward)

(5)Example: 𝑓 = 𝑥 ∙ 𝜔, 𝑥 = 2, 𝜔 = 3

3.3.1 例子

3.3.2 作业1

解答如下:

3.3.3 作业2

解答如下:

3.4 Tensor in PyTorch

3.5 PyTorch实现线性模型

import torch
x_data = [1.0, 2.0, 3.0, 4.0]
y_data = [2.0, 4.0, 6.0, 8.0]
w = torch.Tensor([1.0])
w.requires_grad = True  # 计算梯度
def forward(x):
    return x * w
def loss(x, y):
    y_pred = forward(x)
    return (y_pred - y) ** 2
print("predict (before training)", 4, forward(4).item())
for epoch in range(100):
    for x, y in zip(x_data, y_data):
        l = loss(x, y)
        l.backward()
        print('\tgrad:', x, y, w.grad.item())
        w.data -= 0.01 * w.grad.data
        w.grad.data.zero_()
    print("progress:", epoch, l.item())
print("predict (after training)", 4, forward(4).item())
predict (before training) 4 4.0
  grad: 1.0 2.0 -2.0
  grad: 2.0 4.0 -7.840000152587891
  grad: 3.0 6.0 -16.228801727294922
  grad: 4.0 8.0 -23.657981872558594
progress: 0 8.745314598083496
...
  grad: 1.0 2.0 -2.384185791015625e-07
  grad: 2.0 4.0 -9.5367431640625e-07
  grad: 3.0 6.0 -2.86102294921875e-06
  grad: 4.0 8.0 -3.814697265625e-06
progress: 99 2.2737367544323206e-13
predict (after training) 4 7.999999523162842

3.6 作业3

解答如下:

代码实现:

import torch
x_data = [1.0, 2.0, 3.0]
y_data = [2.0, 4.0, 6.0]
w1 = torch.Tensor([1.0])  # 初始权值
w1.requires_grad = True  # 计算梯度,默认是不计算的
w2 = torch.Tensor([1.0])
w2.requires_grad = True
b = torch.Tensor([1.0])
b.requires_grad = True
def forward(x):
    return w1 * x ** 2 + w2 * x + b
def loss(x, y):  # 构建计算图
    y_pred = forward(x)
    return (y_pred - y) ** 2
print('Predict (before training)', 4, forward(4))
for epoch in range(100):
    l = loss(1, 2)  # 为了在for循环之前定义l,以便之后的输出,无实际意义
    for x, y in zip(x_data, y_data):
        l = loss(x, y)
        l.backward()
        print('\tgrad:', x, y, w1.grad.item(), w2.grad.item(), b.grad.item())
        w1.data = w1.data - 0.01 * w1.grad.data  # 注意这里的grad是一个tensor,所以要取他的data
        w2.data = w2.data - 0.01 * w2.grad.data
        b.data = b.data - 0.01 * b.grad.data
        w1.grad.data.zero_()  # 释放之前计算的梯度
        w2.grad.data.zero_()
        b.grad.data.zero_()
    print('Epoch:', epoch, l.item())
print('Predict (after training)', 4, forward(4).item())
Predict (before training) 4 tensor([21.], grad_fn=<AddBackward0>)
  grad: 1.0 2.0 2.0 2.0 2.0
  grad: 2.0 4.0 22.880001068115234 11.440000534057617 5.720000267028809
  grad: 3.0 6.0 77.04720306396484 25.682401657104492 8.560800552368164
Epoch: 0 18.321826934814453
...
  grad: 1.0 2.0 0.31661415100097656 0.31661415100097656 0.31661415100097656
  grad: 2.0 4.0 -1.7297439575195312 -0.8648719787597656 -0.4324359893798828
  grad: 3.0 6.0 1.4307546615600586 0.47691822052001953 0.15897274017333984
Epoch: 99 0.00631808303296566
Predict (after training) 4 8.544171333312988


目录
相关文章
|
机器学习/深度学习 算法 PyTorch
反向传播(Backpropagation)
反向传播(Backpropagation)是一种用于训练神经网络的常用算法。它通过计算神经网络中各个参数对于损失函数的梯度,从而实现参数的更新和优化。神经网络是一种模拟人脑神经元相互连接的计算模型,用于解决各种机器学习和深度学习任务。
189 1
|
4月前
|
算法 数据挖掘
文献解读-Consistency and reproducibility of large panel next-generation sequencing: Multi-laboratory assessment of somatic mutation detection on reference materials with mismatch repair and proofreading deficiency
Consistency and reproducibility of large panel next-generation sequencing: Multi-laboratory assessment of somatic mutation detection on reference materials with mismatch repair and proofreading deficiency,大panel二代测序的一致性和重复性:对具有错配修复和校对缺陷的参考物质进行体细胞突变检测的多实验室评估
37 6
文献解读-Consistency and reproducibility of large panel next-generation sequencing: Multi-laboratory assessment of somatic mutation detection on reference materials with mismatch repair and proofreading deficiency
|
7月前
|
机器学习/深度学习 算法 Python
Backpropagation
【6月更文挑战第24天】
58 7
|
7月前
|
监控 Java API
Java一分钟之-JPA事务管理:PROPAGATION_REQUIRED, PROPAGATION_REQUIRES_NEW等
【6月更文挑战第14天】Java企业开发中,事务管理确保数据一致性,Spring事务管理核心概念包括`PROPAGATION_REQUIRED`和`PROPAGATION_REQUIRES_NEW`。前者在无事务时新建,有事务时加入,常用于保证业务方法在事务中执行。后者始终创建新事务,独立于当前事务,适用于需隔离影响的场景。理解其应用场景和易错点,合理配置事务传播行为,能提升应用的健壮性和性能。通过监控和日志优化事务策略是关键。
181 1
|
7月前
|
机器学习/深度学习 存储 PyTorch
四、反向传播 back propagation
四、反向传播 back propagation
|
8月前
|
机器学习/深度学习 人工智能 算法
神经网络算法——反向传播 Back Propagation
神经网络算法——反向传播 Back Propagation
96 0
|
机器学习/深度学习 算法 Python
BP神经网络(Back Propagation Neural Network)算法原理推导与Python实现详解
BP神经网络(Back Propagation Neural Network)算法原理推导与Python实现详解
|
机器学习/深度学习 算法 搜索推荐
On the Unreasonable Effectiveness of Feature propagation in Learning on Graphs with Missing 论文阅读笔记
On the Unreasonable Effectiveness of Feature propagation in Learning on Graphs with Missing 论文阅读笔记
220 0
On the Unreasonable Effectiveness of Feature propagation in Learning on Graphs with Missing 论文阅读笔记
|
机器学习/深度学习 资源调度 Python
一文弄懂神经网络中的反向传播法——Back Propagation
其实应用挺广的,在图像识别,文本分类等等都会用到,我会专门再写一篇Auto-Encoder的文章来说明,包括一些变种之类的。如果你的输出和原始输入不一样,那么就是很常见的人工神经网络了,相当于让原始数据通过一个映射来得到我们想要的输出数据,也就是我们今天要讲的话题。
一文弄懂神经网络中的反向传播法——Back Propagation
|
机器学习/深度学习 边缘计算 人工智能
Re0:读论文 PPNP/APPNP Predict then Propagate: Graph Neural Networks meet Personalized PageRank
Re0:读论文 PPNP/APPNP Predict then Propagate: Graph Neural Networks meet Personalized PageRank
Re0:读论文 PPNP/APPNP Predict then Propagate: Graph Neural Networks meet Personalized PageRank

热门文章

最新文章