前言
为了帮助读者在后面的章节中更好地理解优化问题和方法, 本节提供了一个非常简短的入门教程,帮助读者快速掌握深度学习中常用的微分知识。
矩阵计算
导数的物理意义是切线的斜率,反映了函数的变化情况。
存在不可微的情况用亚导数表示。
梯度
梯度是与切线正交的方向,以下展示集中求导的情况。
1.分子为标量,分母为向量(pytorch中所有向量均理解为列向量)。
- 求导后是一个长度为n的行向量,即形状为1 × n的二维行向量。
- 分子为一个函数,函数也是一个标量。
- 求导后带入(1,1)后方向(2,4)与等高线正交,表示当前点(1,1)的梯度,梯度指向的方向是变化量最大的方向。
2.分子为向量,分母为标量。
- 求导后是一个长度为m的列向量,即形状为m × 1的二维列向量。
- 这里与上面相反,可以理解为求导的时候是以列为优先的,比如列向量y,依次取y的所有元素分别与x求导,但是在存放时按行优先存放(注意:这里只有当y中单个元素与所有x求导后才存放一行),故这里是列向量。
3.分子分母均为向量。
- 分子为m × 1的二维向量,分母为n × 1的二维向量,求导后变为m × n的矩阵。
- 与上相同求导的时候是以列为优先的(注意:这里的以列优先是指依次按列取,实际上每次取的元素是一行元素,这里有一点绕仔细想象一下),比如列向量y,依次取y的一个元素分别与x中所有元素求导,但是在存放时按行优先存放(注意:这里只有当y中单个元素与所有x求导后才存放一行),故求导后变成m × n的矩阵。
4.拓展到矩阵
- 当分子为m × 1的向量,分母为n × k的矩阵。按照求导的时候是以列为优先,存放的时候按照行优先的原则。比如取出y的第一个元素,与矩阵的第一列做完求导后按行存放,则矩阵发生了转置,因此求导后变成了m × k × n的三维张量。
- 当分子为m × l的矩阵,分母为n × 1的向量。依次按每一列中y的每一行元素与所有x求导,并存放在一行,须知y分子的形状是不会发生改变的,分母转置即可。
- 当分子为m × l的矩阵,分母为n × k的矩阵。与上同理
小结
- 微分和积分是微积分的两个分支,前者可以应用于深度学习中的优化问题。
- 导数可以被解释为函数相对于其变量的瞬时变化率,它也是函数曲线的切线的斜率。
- 梯度是一个向量,其分量是多变量函数相对于其所有变量的偏导数。
- 链式法则可以用来微分复合函数。