【pytorch深度学习实践】笔记—04.反向传播

简介: 【pytorch深度学习实践】笔记—04.反向传播

问题与思考

【问题】什么是反向传播?用于解决什么问题?

【回答】我们从头屡一下思路。为了找到权重w的值,我们一开始选择暴力枚举;后来通过梯度下降+更新权重的方案让程序自动找到合适的w值;但是在求梯度的时候,w可能会很复杂(比如是多维的)那此时如果在使用loss对w求导来求梯度就变得很麻烦(需要逐个求偏导数,在复杂神经网络中会相当复杂)。所以引入“反向传播”这个概念,生成一个计算图,“倒着”来,根据链式法则来求loss对w的偏导数(梯度),如下图所示:

75c5967cfca3a61585673f28c05fe50e_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzM4MDY4ODc2,size_16,color_FFFFFF,t_70#pic_center.png

蓝色线:正向过程(前馈),红色线:反向过程(反馈)。


正向过程,求出z对x的偏导数,求出z对w的偏导数。

反向过程,根据链式法则(此处假设L对z的偏导数的值为5),可以得到L(loss)对w和l对x的偏导数。

【注】只要拿到l对w的偏导数(梯度),就可以做更新了。


完整的线性模型计算图如下:

正向计算,一步一步计算往后走,直到获取loss的值。

得到loss值后反向计算,一步一步根据链式法则求梯度(loss对w的偏导数)

0c2b49355fb273e2fef5427e060e9df9_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzM4MDY4ODc2,size_16,color_FFFFFF,t_70#pic_center.png


用pytorch实现反向传播

import torch
x_data = [1.0, 2.0, 3.0]
y_data = [2.0, 4.0, 6.0]
# 定义w初始值
w = torch.tensor([1.0])
w.requires_grad = True  # True代表需要计算梯度,tensor会自动求梯度的。
# 定义模型
def forward(x):
    return x * w  # x是个张量、w是个张量, x和w进行矩阵乘法
# 定义loss损失
def loss(x, y):
    y_pred = forward(x)  # 计算y_pred预测值
    return (y_pred - y) ** 2
# 开始训练前,因为定义了初始w值,把x=4带入y=wx得到初始的预测值y_pred=4
print("predict before traning", 4, forward(4).item())
# 训练过程
for epoch in range(100):  # 训练100次
    for x, y in zip(x_data, y_data):
        l = loss(x, y)  # 前馈过程,计算loss损失
        l.backward()  # 反向过程,计算梯度
        print("\t grad:", x, y, w.grad.item())
        w.data = w.data - 0.01 * w.grad.data  # 更新梯度 w= w - α * 梯度
        w.grad.data.zero_()  # 梯度清零
    print("progress:", epoch, l.item())
# 训练结束,测试数据,将x=4带入得到forward(4)的值 接近8
print("predict after training", 4, forward(4).item())
目录
相关文章
|
7天前
|
机器学习/深度学习 PyTorch 测试技术
PyTorch 深度学习(GPT 重译)(四)(1)
PyTorch 深度学习(GPT 重译)(四)
25 2
|
7天前
|
机器学习/深度学习 PyTorch API
PyTorch 深度学习(GPT 重译)(三)(4)
PyTorch 深度学习(GPT 重译)(三)
38 3
|
7天前
|
机器学习/深度学习 存储 PyTorch
PyTorch 深度学习(GPT 重译)(三)(3)
PyTorch 深度学习(GPT 重译)(三)
27 2
|
7天前
|
机器学习/深度学习 PyTorch 算法框架/工具
PyTorch 深度学习(GPT 重译)(二)(3)
PyTorch 深度学习(GPT 重译)(二)
23 1
|
7天前
|
机器学习/深度学习 算法 PyTorch
PyTorch 深度学习(GPT 重译)(二)(2)
PyTorch 深度学习(GPT 重译)(二)
33 2
|
7天前
|
机器学习/深度学习 PyTorch 算法框架/工具
PyTorch 深度学习(GPT 重译)(二)(1)
PyTorch 深度学习(GPT 重译)(二)
25 2
|
7天前
|
存储 PyTorch 算法框架/工具
PyTorch 深度学习(GPT 重译)(一)(3)
PyTorch 深度学习(GPT 重译)(一)
30 2
|
8天前
|
机器学习/深度学习 算法 PyTorch
深入理解PyTorch自动微分:反向传播原理与实现
【4月更文挑战第17天】本文深入解析PyTorch的自动微分机制,重点讨论反向传播的原理和实现。反向传播利用链式法则计算神经网络的梯度,包括前向传播、梯度计算、反向传播及参数更新。PyTorch通过`autograd`模块实现自动微分,使用`Tensor`和计算图记录操作历史以自动计算梯度。通过示例展示了如何在PyTorch中创建张量、定义计算过程及求梯度。掌握这些有助于提升深度学习模型的训练效率。
|
8天前
|
机器学习/深度学习 存储 PyTorch
PyTorch深度学习基础:张量(Tensor)详解
【4月更文挑战第17天】本文详细介绍了PyTorch中的张量,它是构建和操作深度学习数据的核心。张量是多维数组,用于存储和变换数据。PyTorch支持CPU和GPU张量,后者能加速大规模数据处理。创建张量可通过`torch.zeros()`、`torch.rand()`或直接从Python列表转换。张量操作包括数学运算、切片和拼接。在深度学习中,张量用于神经网络模型的构建和训练。理解张量对于掌握PyTorch至关重要。
|
10天前
|
机器学习/深度学习 并行计算 算法框架/工具
Anaconda+Cuda+Cudnn+Pytorch(GPU版)+Pycharm+Win11深度学习环境配置
Anaconda+Cuda+Cudnn+Pytorch(GPU版)+Pycharm+Win11深度学习环境配置