梯度方向是函数局部上升最快的方向
微分的定义与理解
- 假设在任意方程中存在自变量 \(t\) 和因变量 \(x,y\),他们都是 \(t\) 的函数 \(x(t),y(t)\),则当所有因变量都对同一个自变量 \(t\) 计算变化量时,即可得到微分形式:
$$
\begin{align}
d y &= y(t+\Delta) - y(t) \\
d x &= x(t+\Delta) - x(t) \\
d t &= (t+\Delta) - t = \Delta
\end{align}
$$- 其中 \(\Delta \rightarrow 0\)
- 此时有:
- 导数 \(\frac{dy}{dt}\) 表示因变量 \(y\) 关于 \(t\) 的变化率,是 \(t\) 的函数
- 导数 \(\frac{dx}{dt}\) 表示因变量 \(x\) 关于 \(t\) 的变化率,是 \(t\) 的函数
- 导数 \(\frac{dy}{dx}\) 可以表示因变量 \(y\) 关于 \(x\) 的变化率:
$$ \frac{dy}{dx} = \frac{\frac{dy}{dt}}{\frac{dx}{dt}} $$- 注意: 从上面的证明可以看出,要求 \(dy\) 和 \(dx\) 都是在同一个自变量(这里是 \(t\),也可以是其他变量,比如 \(x\) )发生微小变化的时候得到的
- 注意:
- \(dy\) 表示微分,具体是关于 \(x\) 或 \(t\),亦或是其他变量的增量,要根据上下文来判断
- \(\frac{dy}{dt}\) 表示 \(y\) 关于 \(t\) 的变化率,在不同的 \(t\) 点,变化率不同,所以 \(\frac{dy}{dt}\) 是关于 \(t\) 的函数, \(\frac{dy}{dt}\vert_{t=t_0}\) 可表示 \(y\) 关于 \(t\),在 \(t=t_0\) 处的变化率
梯度的定义与理解
- 对函数 \(f(x, y, z)\) 而言
- 方向导数:各个方向的导数,函数,标量
- 关于x, y, x的偏导数: \(\frac {\partial f}{\partial x}, \frac {\partial f}{\partial y}, \frac {\partial f}{\partial z}\)
- 对特定的某一点 \((x_{0}, y_{0}, z_{0})\) 而言,改点的偏导数是将对应的值带入后得到的数值,是一个确定的数值
- 梯度:各个方向导数组成的向量,每一维为一个方向导数,矢量
- 梯度: \((\frac {\partial f}{\partial x}, \frac {\partial f}{\partial y}, \frac {\partial f}{\partial z}\)),一个向量
- 梯度方向表示函数局部上升最快的方向
- 梯度的模 \(|\nabla f|\) 表示变化率
直观理解
- 一维函数中,代表参数(自变量)的点在一条直线上运动,所以梯度的方向有正向和负向
- 二维函数中,代表参数(自变量)的点在一个平面上运动,所以梯度的方向有无数种,但都在二维平面上
- 三维函数中,代表参数(自变量)的点在一个空间中运动,所以梯度的方向有无数种,但都在三维空间中
- 无论何时,梯度方向是函数上升最快的方向,指明参数朝着这个方向移动时,函数上升的速度最快
- 梯度下降法中,求取梯度的意义就在于知道函数上升或者下降最快的方向
关于梯度的模 \(|\nabla f|\)
- 梯度的方向与参数(自变量)的变化相关,梯度的模 \(|\nabla f|\) 与函数变化相关
- 梯度的模可以理解为变化率,也就是在梯度对应的方向上移动单位长度后,函数能上升的数值大小为 \(|\nabla f|\) (当然,这是按照当前点周围的极小的曲面拟合出来的平面计算得到的数值,不是真正的函数数值)
- 梯度下降法中,梯度的方向指明了参数移动的方向,梯度的模暗示着参数移动时函数的增量大小
- 但为什么梯度下降法中,保留着梯度的模?而不是将梯度向量变成单位向量?梯度的模有什么特殊的意义吗?
- 一个猜想:在梯度下降法时,如果超参数步长 \(\alpha\) 不变的话,每次迭代时参数(自变量)真正移动的长度是 \(\alpha\times |\nabla f|\),此时随着迭代次数的增加, \(|\nabla f|\) 值会越来越小(可以证明,因为越来越接近最地点,函数变化率越来越小),这会导致 \(\alpha\times |\nabla f|\) 越来越小,从而减少震荡?
- 梯度的模的意义可用数学证明,移动梯度的模的 \(\alpha\) 倍是最优的,详情参考我的博客ML——最优化方法-无约束参数优化方法中用一阶泰勒展开推导梯度下降法的过程
- 基本思路,将函数在参数的某个值 \(\theta_{t} + \delta\) 处一阶泰勒展开,然后对 \(\delta\) 加上正则项.最后在直接求导即可得到梯度下降法的更新表达式
附录:其他参考博客
- 参考链接: 为什么梯度方向是函数局部上升最快的方向
