在介绍梯度概念之前,首先需要引入偏导数和方向偏导数的概念,
偏导数:
所谓偏导数,简单来说是对于一个多元函数,选定一个自变量并让其他自变量保持不变,只考察因变量与选定自变量的变化关系。
数学上说,是指对于多元函数y=f(x_1,x_2,...x_n),假设其偏导数都存在,则该函数共有n个偏导数,可以表示为:
{f_{{x_1}}} = {{\partial y} over {\partial {x_1}}},
{f_{{x_2}}} = {{\partial y} over {\partial {x_2}}}...
{f_{{x_n}}} = {{\partial y} over {\partial {x_n}}}
因此,偏导数只能表示多元函数沿某个坐标轴方向的导数
如对于二元函数z=x^2+y^2 ,{{partial z} over {partial x}} = 2x表示函数沿X轴方向的导数,
而{{partial z} over {partial y}} = 2y表示函数沿Y轴方向的导数。
方向导数:
除开沿坐标轴方向上的导数,多元函数在非坐标轴方向上也可以求导数,这种导数称为方向导数。
因此,多元函数在特定点的方向导数有无穷多个,表示函数值在各个方向上的增长速度。
在这些方向导数中,是否存在一个最大的方向导数,如果有,其值是否唯一?为了回答这个问题,便需要引入梯度的概念。
梯度:
一般来说,梯度可以定义为一个函数的全部偏导数构成的向量(这一点与偏导数与方向导数不同,两者都为标量)。即梯度是一个包含了各个维度的沿坐标轴方向的导数(偏导数)的集合向量。
梯度向量的方向:
事实上,梯度向量的方向即为函数值增长最快的方向,为什么会如此,可以从几个角度去理解。
e.g.
为了找到方向导数中的最大值,我们可以一个三维图像将其投影到xy(两维)平面来理解,这种投影方式对应的便是等高线图。如对于一个二元函数z=f(x,y),我们可以画出它的等高线图如下:
该函数的等高线图为圆心在原点的一系列圆,等高线的值由里向外逐渐增加。点B(x,y)为点(x,y,z)在xy平面上的投影,可以看到向量vec{AB} 即为函数在点(x,y,z)处的梯度向量。根据方向导数的定义,方向导数{D_u}f = {f_x}\cos (theta) + {f_y}\sin (theta) ,其中theta 为此向量与X正方向的夹角。由于梯度向量为u = ({f_x},{f_y}),单位向量w = (1\cos (theta) ,1\sin (theta ),则方向导数的大小可以表述为梯度向量与此单位向量的数量积:
{D_u}f = {f_x}\cos (theta) + {f_y}\sin (theta)
= vec u cdot (vec w)
= |u| cdot (|w|) cdot cos (alpha)
= |u| cdot cos (alpha)
其中alpha 为梯度向量与单位向量之间的夹角, cdot: 点乘
可以看出,方向导数的大小可以看作梯度向量在指示方向导数方向的单位向量上的投影,即线段AE的长度
显而易见,线段AE的长度小于线段AB的长度,也即梯度向量的模总是大于等于方向导数向量的模。这就解释了为什么沿着梯度向量方向是函数值增长最快的方向,而它正是函数所有偏导数构成的向量。
梯度下降和上升:
我们可以两个角度考虑:第一,在特定函数点,固定每次移动的步长,向那个方向移动函数值增长最快?第二,固定需要增加的函数值,向哪个方向需要移动的步长最短?
在左图中,固定移动的步长,我们可以看到垂直于等高线图的方向即为函数值增长最快的方向,也就是梯度向量指示的方向。在右图中,假设函数值有一个固定的微小的增长,则明显梯度向量指示的方向所需要的步长最短,而这个向量也是垂直于等高线的。
梯度下降或上升法正是基于梯度指示函数值增长最快的方向而产生的,利用这个方法,我们可以使用迭代的方法计算函数的最大或最小值,从而解决机器学习中遇到的最优化问题。