【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())
目录
相关文章
|
21天前
|
机器学习/深度学习 传感器 数据采集
深度学习在故障检测中的应用:从理论到实践
深度学习在故障检测中的应用:从理论到实践
95 5
|
23天前
|
机器学习/深度学习 人工智能 自然语言处理
揭秘人工智能:深度学习的奥秘与实践
在本文中,我们将深入浅出地探索深度学习的神秘面纱。从基础概念到实际应用,你将获得一份简明扼要的指南,助你理解并运用这一前沿技术。我们避开复杂的数学公式和冗长的论述,以直观的方式呈现深度学习的核心原理和应用实例。无论你是技术新手还是有经验的开发者,这篇文章都将为你打开一扇通往人工智能新世界的大门。
|
24天前
|
机器学习/深度学习 算法 TensorFlow
深度学习中的自编码器:从理论到实践
在这篇文章中,我们将深入探讨深度学习的一个重要分支——自编码器。自编码器是一种无监督学习算法,它可以学习数据的有效表示。我们将首先介绍自编码器的基本概念和工作原理,然后通过一个简单的Python代码示例来展示如何实现一个基本的自编码器。最后,我们将讨论自编码器的一些变体,如稀疏自编码器和降噪自编码器,以及它们在实际应用中的优势。
|
28天前
|
机器学习/深度学习 人工智能 自然语言处理
揭秘AI:深度学习的奥秘与实践
本文将深入浅出地探讨人工智能中的一个重要分支——深度学习。我们将从基础概念出发,逐步揭示深度学习的原理和工作机制。通过生动的比喻和实际代码示例,本文旨在帮助初学者理解并应用深度学习技术,开启AI之旅。
|
28天前
|
机器学习/深度学习 人工智能 自然语言处理
深入浅出深度学习:从理论到实践的探索之旅
在人工智能的璀璨星空中,深度学习如同一颗耀眼的新星,以其强大的数据处理能力引领着技术革新的浪潮。本文将带您走进深度学习的核心概念,揭示其背后的数学原理,并通过实际案例展示如何应用深度学习模型解决现实世界的问题。无论您是初学者还是有一定基础的开发者,这篇文章都将为您提供宝贵的知识和启发。
52 5
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习中的卷积神经网络(CNN): 从理论到实践
本文将深入浅出地介绍卷积神经网络(CNN)的工作原理,并带领读者通过一个简单的图像分类项目,实现从理论到代码的转变。我们将探索CNN如何识别和处理图像数据,并通过实例展示如何训练一个有效的CNN模型。无论你是深度学习领域的新手还是希望扩展你的技术栈,这篇文章都将为你提供宝贵的知识和技能。
192 7
|
1月前
|
机器学习/深度学习 自然语言处理 语音技术
深入探索深度学习中的兼容性函数:从原理到实践
深入探索深度学习中的兼容性函数:从原理到实践
39 3
|
23天前
|
机器学习/深度学习 存储 人工智能
探索深度学习的奥秘:从理论到实践的技术感悟
本文深入探讨了深度学习技术的核心原理、发展历程以及在实际应用中的体验与挑战。不同于常规摘要,本文旨在通过作者个人的技术实践经历,为读者揭示深度学习领域的复杂性与魅力,同时提供一些实用的技术见解和解决策略。
29 0
|
1月前
|
机器学习/深度学习 自然语言处理 算法
深度学习在图像识别中的应用及实践
本文将探讨深度学习在图像识别领域的应用,并分享一个使用Python和Keras库实现的简单代码示例。我们将介绍深度学习的原理、常用模型以及如何在实际应用中解决问题。通过阅读本文,您将了解深度学习在图像识别中的潜力,并学会如何构建一个简单的神经网络模型。
40 0
|
1月前
|
机器学习/深度学习 算法框架/工具 Python
深度学习的奥秘与实践:从理论到代码
本文将探索深度学习的世界,揭示其背后的原理,并分享如何将这些理论应用到实际编程中。我们将一起踏上一段旅程,从神经网络的基础概念出发,逐步深入到复杂的模型训练和优化技术。你将看到,即使是初学者,也可以实现自己的深度学习项目。