线性代数、微积分
这两个不作介绍,可以点击下方链接阅读原文
2.3. 线性代数 — 动手学深度学习 2.0.0 documentation (d2l.ai)
2.4. 微积分 — 动手学深度学习 2.0.0 documentation (d2l.ai)
梯度
- 在微积分中,对多元函数的参数求偏导,把求导后的结果(各个参数的偏导数)以向量的形式表达出来就是梯度。
- 梯度的意义:从几何的角度,梯度就是在这一点函数增加最快的方向,反之梯度的相反方向就是函数减小最快的方向。
自动微分
求导是几乎所有深度学习优化算法的关键步骤。虽然求导的计算很简单,只需要一些基本的微积分。 但对于复杂的模型,手工进行更新是一件很痛苦的事情(而且经常容易出错)。
什么是自动微分
自动微分是计算一个函数在指定值上的导数
深度学习框架通过自动计算导数,即自动微分(automatic differentiation)来加快求导。
如何实现自动微分
1.会有一个计算图
2.两种模式
正向积累
反向积累
框架都使用的反向积累
对标量求梯度
import torch
x = torch.arange(4.0)
// 设置需要计算梯度
x.requires_grad_(True) # 等价于x=torch.arange(4.0,requires_grad=True)
// 查看x的梯度值
x.grad # 默认值是None
y = 2 * torch.dot(x, x)
// 反向传播计算梯度
y.backward()
// 打印梯度
x.grad
// 反向传播计算梯度
y.backward()
// 打印梯度
x.grad