浅谈自动微分是个啥?

简介: 浅谈自动微分

大家好,我是董董灿。

今天简单说一下自动微分这个概念。之前在查看华为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 等于任意数都成立。

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

相关文章
|
2天前
|
机器学习/深度学习 算法 PyTorch
Pytorch自动求导机制详解
在深度学习中,我们通常需要训练一个模型来最小化损失函数。这个过程可以通过梯度下降等优化算法来实现。梯度是函数在某一点上的变化率,可以告诉我们如何调整模型的参数以使损失函数最小化。自动求导是一种计算梯度的技术,它允许我们在定义模型时不需要手动推导梯度计算公式。PyTorch 提供了自动求导的功能,使得梯度的计算变得非常简单和高效。
|
2天前
|
机器学习/深度学习 算法 PyTorch
深入理解PyTorch自动微分:反向传播原理与实现
【4月更文挑战第17天】本文深入解析PyTorch的自动微分机制,重点讨论反向传播的原理和实现。反向传播利用链式法则计算神经网络的梯度,包括前向传播、梯度计算、反向传播及参数更新。PyTorch通过`autograd`模块实现自动微分,使用`Tensor`和计算图记录操作历史以自动计算梯度。通过示例展示了如何在PyTorch中创建张量、定义计算过程及求梯度。掌握这些有助于提升深度学习模型的训练效率。
|
2天前
|
算法 Windows
R语言广义二次跳跃、非线性跳跃扩散过程转移函数密度的估计及其应用
R语言广义二次跳跃、非线性跳跃扩散过程转移函数密度的估计及其应用
|
2天前
|
机器学习/深度学习 存储 算法
PyTorch 中的自动求导
PyTorch 中的自动求导
14 0
|
2天前
用图直观上理解梯度算子(一阶)与拉普拉斯算子(二阶)的区别,线检测与边缘检测的区别
用图直观上理解梯度算子(一阶)与拉普拉斯算子(二阶)的区别,线检测与边缘检测的区别
62 1
|
6月前
|
PyTorch Serverless 算法框架/工具
Pytorch与autograd自动求导
Pytorch与autograd自动求导
46 0
|
8月前
|
机器学习/深度学习 传感器 算法
用于图像恢复的即插即用 ADMM:定点收敛和应用(Matlab代码实现)
用于图像恢复的即插即用 ADMM:定点收敛和应用(Matlab代码实现)
|
9月前
|
机器学习/深度学习 算法 PyTorch
PyTorch中的梯度微分机制
PyTorch中的梯度微分机制
|
10月前
|
传感器
【状态估计】用于非标量系统估计的最优卡尔曼滤波(Matlab代码实现)
【状态估计】用于非标量系统估计的最优卡尔曼滤波(Matlab代码实现)
|
10月前
|
数据采集 监控 定位技术
【状态估计】基于增强数值稳定性的无迹卡尔曼滤波多机电力系统动态状态估计(Matlab代码实现)
【状态估计】基于增强数值稳定性的无迹卡尔曼滤波多机电力系统动态状态估计(Matlab代码实现)