浅谈自动微分是个啥?

简介: 浅谈自动微分

大家好,我是董董灿。

今天简单说一下自动微分这个概念。之前在查看华为MindSpore资料时,看到了MindSpore的软件流程图中,有一项是自动微分技术。
而我们学AI算法,或者说深度学习算法,肯定都离不开自动微分技术。
虽然大部分同学可能没有正面接触过这个技术,但是在进行网络训练的时候,这个技术肯定都是默默的隐藏在深度学习框架中,默默的完成梯度的更新。
自动微分或许不引人关注,但肯定很重要。
image.png

其实不光是华为的MindSpore,其他的框架如TensorFlow,PyTorch等深度学习框架,也都支持自动微分技术。

说到微分,其实很好理解,简单的说就是求导。

而自动微分,则是计算机借助程序自动求出一个函数导数的方法。在深度学习中,通常指对网络模型的自动求导,通过梯度反向传播完成对网络权重的优化。

那为什么要做自动微分呢? 一说到微分,我们第一反应肯定是手动推导计算微积分。毕竟,我们学习的高数知识还没有完全还给老师。

简单的函数,通过手动计算它的导数是可以实现的,比如 y = x^2 导数就是 f = 2x。

但是复杂的函数,比如高次方程高维数据的复合函数,先不说手动计算能不能算出来,即使算出来了,这效率和出错概率,也让人害怕。比如下面的这个,手动推导就已经很复杂了。

image.png

手动计算是一种最简单最好理解的微分方法,也就是手动微分。

除了手动微分之外,还有数值微分和符号微分(这俩以后再介绍)。而自动微分是一种介于数值微分与符号微分之间的一种求导方法。

自动微分的核心思想是将计算机程序中的一个复杂运算操作分解为一个有限的基本操作合集,且合集中基本操作的求导规则均为已知的。在完成每一个基本操作的求导后,使用链式求导法则将结果组合得到整体程序的求导结果。

一个通俗点但不严谨的表述就是,自动微分将AI模型中的很复杂的算法分解为一个个基本操作,比如乘法,平方等。然后利用链式求导法则,从最基本的运算开始求导,一步步完成整个复杂运算的求导。

这样,一旦有了自动微分的技术加持,AI模型再复杂,运算量再庞大,也不需要我们手动针对复杂运算编码来进行求导了。通过自动微分的技术将复杂求导过程分解,一步步,最终完成整个算法的求导过程。

这也是为什么,自动微分技术几乎成为了各大深度学习框架的标配。

这有点像算法中的分治算法。将一个复杂的问题分解成多个小问题,然后各个击破。

或者说有点像我们学过的数学归纳法,先证明n=1成立,然后证明如果 n = x 成立时, n = x + 1也成立,那么就可以归纳推导出,n 等于任意数都成立。

不得不说,经典的数学思想真是无处不在。

相关文章
|
6月前
|
机器学习/深度学习 算法 PyTorch
Pytorch自动求导机制详解
在深度学习中,我们通常需要训练一个模型来最小化损失函数。这个过程可以通过梯度下降等优化算法来实现。梯度是函数在某一点上的变化率,可以告诉我们如何调整模型的参数以使损失函数最小化。自动求导是一种计算梯度的技术,它允许我们在定义模型时不需要手动推导梯度计算公式。PyTorch 提供了自动求导的功能,使得梯度的计算变得非常简单和高效。
125 0
|
1月前
|
机器学习/深度学习 PyTorch TensorFlow
自动微分
【10月更文挑战第02天】
23 4
|
1月前
|
机器学习/深度学习 PyTorch 算法框架/工具
探索PyTorch:自动微分模块
探索PyTorch:自动微分模块
|
3月前
|
机器学习/深度学习 PyTorch 算法框架/工具
PyTorch中的自动微分机制:深入理解反向传播
【8月更文第27天】PyTorch 是一个强大的机器学习框架,它因其灵活性和易用性而受到广泛欢迎。其中一个关键特性就是它的自动微分机制,这个机制使得 PyTorch 能够自动计算任何张量操作的梯度,这对于训练深度学习模型至关重要。本文将详细介绍 PyTorch 中自动微分机制的工作原理,并通过具体的代码示例来展示如何使用这一机制来实现反向传播。
198 1
|
5月前
|
机器学习/深度学习 存储 PyTorch
Pytorch-自动微分模块
PyTorch的torch.autograd模块提供了自动微分功能,用于深度学习中的梯度计算。它包括自定义操作的函数、构建计算图、数值梯度检查、错误检测模式和梯度模式设置等组件。张量通过设置`requires_grad=True`来追踪计算,`backward()`用于反向传播计算梯度,`grad`属性存储张量的梯度。示例展示了如何计算标量和向量张量的梯度,并通过`torch.no_grad()`等方法控制梯度计算。在优化过程中,梯度用于更新模型参数。注意,使用numpy转换要求先`detach()`以避免影响计算图。
|
6月前
|
机器学习/深度学习 算法 PyTorch
深入理解PyTorch自动微分:反向传播原理与实现
【4月更文挑战第17天】本文深入解析PyTorch的自动微分机制,重点讨论反向传播的原理和实现。反向传播利用链式法则计算神经网络的梯度,包括前向传播、梯度计算、反向传播及参数更新。PyTorch通过`autograd`模块实现自动微分,使用`Tensor`和计算图记录操作历史以自动计算梯度。通过示例展示了如何在PyTorch中创建张量、定义计算过程及求梯度。掌握这些有助于提升深度学习模型的训练效率。
|
6月前
|
机器学习/深度学习 存储 算法
PyTorch 中的自动求导
PyTorch 中的自动求导
36 0
|
PyTorch Serverless 算法框架/工具
Pytorch与autograd自动求导
Pytorch与autograd自动求导
80 0
|
机器学习/深度学习 算法 PyTorch
PyTorch中的梯度微分机制
PyTorch中的梯度微分机制