在用神经网络的时候,权重的更新方向一直是沿着负梯度进行更新,可有想过为什么要沿着梯度进行更新吗?或者说,为什么负梯度方向就是函数下降最快的方向呢?
这学期选课有毒,在各种不可抗力影响下,选了《大数据建模优化》这门课,上了几周发现跟大数据丝毫不沾边,无论是数据存储、挖掘、分析、处理和代码等一个不讲,都在讲本科数学建模竞赛那些基本模型,线性规划、二分类、SVM什么的,就是现在手推公式我能看懂了。后来发现这课的老师之前是数学系的,带《工程优化》这门课,据说讲的很不错,后来的老师都继承了他的风格。好巧不巧,我也选了《工程优化》,也是线性规划、凸集那些。然后选了《数据驱动优化》这门课,我以为是数据分析,玩玩hadoop
什么的,结果发现也是跟数据没关系,也是在约束条件下优化目标,遗传算法、粒子群算法,就是本科建模那些常见算法。我寻思能开个专题好好整理下了,就开了个 Math
的标签。
其实我想选《Linux 内核分析》这种只有计科人才能玩懂的直面怼代码的硬核课程,懂操作系统懂计算机原理才能写出好程序。
偏导
对于一个多元函数$z=f(x_1,x_2,\ldots,x_n)$,对第$i$个分量$x_i$的偏导为$\frac{\partial f}{\partial x_i}$,可以写成:
\begin{equation}
\frac{\partial f}{\partial x_i}=\lim_{t\to 0} \frac{f(x+te_i)-f(x)}{t}
\end{equation}
其中,$e=(0,\ldots,1,\ldots,0)$,只有第$i$个元素为1。
可微
以二元函数为例(我懒,多元写着费劲),若函数$z=f(x,y)$在点$(x_0,y_0)$的全增量$\Delta z=f(x_0+\Delta x,y_0+\Delta y)-f(x_0,y_0)$可表示为$\Delta z =A\Delta x+B \Delta y +o(p)$,则$f(x,y)$在点$(x_0,y_0)$处可微,在这一点的全微分记作$\text{d} z=A\Delta x+B\Delta y$,等价于:
\begin{equation}
\lim_{||(\Delta x,\Delta y)|| \to 0} \frac{f(x_0+\Delta x,y_0+\Delta y)-f(x_0,y_0)-A\Delta x-B \Delta y}{||(\Delta x,\Delta y)||}=0
\end{equation}
记$x=(x,y)^T,\Delta x=(\Delta x,\Delta y)^T,l=(A,B)^T$,再次得到:
\begin{equation}
\lim_{\Delta x \to 0} \frac{f(x+\Delta x)-f(x)-l^T\Delta x}{||\Delta x||}=0
\end{equation}
梯度
若函数$z=f(x,y)$在点$(x_0,y_0)$处可微,在该点的偏导必然存在,$\text{d}z$可以改写成$\text{z}=\frac{\partial z}{\partial x}|_{x=x_0}\Delta x+\frac{\partial z}{\partial y}|_{y=y_0}\Delta y$:
\begin{equation}
l=(A,B)^T=(\frac{\partial z}{\partial x}|_{x=x_0},\frac{\partial z}{\partial y}|_{y=y_0})^T
\end{equation}
则向量$l=(\frac{\partial z}{\partial x}|_{x=x_0},\frac{\partial z}{\partial y}|_{y=y_0})^T$称为函数$f(x,y)$在点$(x_0,y_0)$处的梯度。
注:对于任意多元函数,以上的梯度和可微定理均成立。
方向导数
设多元函数$f$在点$x$处可微,向量$p=te$,$t$是$p$的模,$e$是$p$的单位向量,函数$f$在点$x$沿$p$方向的方向导数记为:
\begin{equation}
\frac{\partial f(x)}{\partial p}=\lim_{t \to 0^+}\frac{f(x+p)-f(x)}{t}=\lim_{t \to 0^+}\frac{f(x+te)-f(x)}{t}
\end{equation}
- 若$\frac{\partial f(x)}{\partial p}<0$,可以得到$f(x+te)-f(x)<0$,函数$f$在点$x$附近沿着$p$方向是下降的;
- 若$\frac{\partial f(x)}{\partial p}>0$,可以得到$f(x+te)-f(x)>0$,函数$f$在点$x$附近沿着$p$方向是上升的。
则方向导数正负决定了函数升降;升降速度的快慢由方向导数绝对值大小来决定,绝对值越大升降速度越大。
结论证明
前面准备了那么多基础知识,现在可以证明标题的结论了:为什么梯度方向是函数的最速上升方向。
多元函数$f$在点$x$处可微,可以得到:
\begin{equation}
f(x+p)=f(x)+l^Tp=f(x)+\nabla f(x)^Tp
\end{equation}
将$p$替换为$te$,可以得到:
\begin{equation}
\frac{\partial f(x)}{\partial p}=\lim_{t\to 0^+}\frac{f(x+p)-f(x)}{t}=\lim_{t\to 0^+}\frac{t\nabla f(x)^Te}{t}=\nabla f(x)^Te
\end{equation}
继续:
\begin{equation}
\frac{\partial f(x)}{\partial p}=\nabla f(x)^T e \text{向量内积} =||\nabla f(x)||\cos \beta (e\text{的模是1})
\end{equation}
我们已经知道:方向导数正负决定了函数升降;升降速度的快慢由方向导数绝对值大小来决定,绝对值越大升降速度越大。所以:
- 当夹角为$\beta =0$时,即方向导数和梯度重合,方向导数取得最大值;
- 当夹角为$\beta =180$时,即沿着负梯度方向,方向导数取得最小值;
可见梯度方向即为函数的最速上升方向;负梯度方向即为函数的最速下降方向,从而梯度方向是函数具有最大变化率的方向。忽然发现这种证明题也挺好玩(逃