【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())
目录
打赏
0
0
0
0
0
分享
相关文章
深度学习实践技巧:提升模型性能的详尽指南
深度学习模型在图像分类、自然语言处理、时间序列分析等多个领域都表现出了卓越的性能,但在实际应用中,为了使模型达到最佳效果,常规的标准流程往往不足。本文提供了多种深度学习实践技巧,包括数据预处理、模型设计优化、训练策略和评价与调参等方面的详细操作和代码示例,希望能够为应用实战提供有效的指导和支持。
PyTorch生态系统中的连续深度学习:使用Torchdyn实现连续时间神经网络
神经常微分方程(Neural ODEs)是深度学习领域的创新模型,将神经网络的离散变换扩展为连续时间动力系统。本文基于Torchdyn库介绍Neural ODE的实现与训练方法,涵盖数据集构建、模型构建、基于PyTorch Lightning的训练及实验结果可视化等内容。Torchdyn支持多种数值求解算法和高级特性,适用于生成模型、时间序列分析等领域。
186 77
PyTorch生态系统中的连续深度学习:使用Torchdyn实现连续时间神经网络
深度学习在故障检测中的应用:从理论到实践
深度学习在故障检测中的应用:从理论到实践
226 6
深度学习工具和框架详细指南:PyTorch、TensorFlow、Keras
在深度学习的世界中,PyTorch、TensorFlow和Keras是最受欢迎的工具和框架,它们为研究者和开发者提供了强大且易于使用的接口。在本文中,我们将深入探索这三个框架,涵盖如何用它们实现经典深度学习模型,并通过代码实例详细讲解这些工具的使用方法。
PyTorch FlexAttention技术实践:基于BlockMask实现因果注意力与变长序列处理
本文介绍了如何使用PyTorch 2.5及以上版本中的FlexAttention和BlockMask功能,实现因果注意力机制与填充输入的处理。通过attention-gym仓库安装相关工具,并详细展示了MultiheadFlexAttention类的实现,包括前向传播函数、因果掩码和填充掩码的生成方法。实验设置部分演示了如何组合这两种掩码并应用于多头注意力模块,最终通过可视化工具验证了实现的正确性。该方法适用于处理变长序列和屏蔽未来信息的任务。
96 17
揭秘人工智能:深度学习的奥秘与实践
在本文中,我们将深入浅出地探索深度学习的神秘面纱。从基础概念到实际应用,你将获得一份简明扼要的指南,助你理解并运用这一前沿技术。我们避开复杂的数学公式和冗长的论述,以直观的方式呈现深度学习的核心原理和应用实例。无论你是技术新手还是有经验的开发者,这篇文章都将为你打开一扇通往人工智能新世界的大门。
深度学习中的自编码器:从理论到实践
在这篇文章中,我们将深入探讨深度学习的一个重要分支——自编码器。自编码器是一种无监督学习算法,它可以学习数据的有效表示。我们将首先介绍自编码器的基本概念和工作原理,然后通过一个简单的Python代码示例来展示如何实现一个基本的自编码器。最后,我们将讨论自编码器的一些变体,如稀疏自编码器和降噪自编码器,以及它们在实际应用中的优势。
揭秘AI:深度学习的奥秘与实践
本文将深入浅出地探讨人工智能中的一个重要分支——深度学习。我们将从基础概念出发,逐步揭示深度学习的原理和工作机制。通过生动的比喻和实际代码示例,本文旨在帮助初学者理解并应用深度学习技术,开启AI之旅。
深入浅出深度学习:从理论到实践的探索之旅
在人工智能的璀璨星空中,深度学习如同一颗耀眼的新星,以其强大的数据处理能力引领着技术革新的浪潮。本文将带您走进深度学习的核心概念,揭示其背后的数学原理,并通过实际案例展示如何应用深度学习模型解决现实世界的问题。无论您是初学者还是有一定基础的开发者,这篇文章都将为您提供宝贵的知识和启发。
82 5
探索深度学习的奥秘:从理论到实践的技术感悟
本文深入探讨了深度学习技术的核心原理、发展历程以及在实际应用中的体验与挑战。不同于常规摘要,本文旨在通过作者个人的技术实践经历,为读者揭示深度学习领域的复杂性与魅力,同时提供一些实用的技术见解和解决策略。
64 0