Last Updated: 2024-05-14 13:18:41 Tuesday
-- TOC --
对于一元函数,即只有一个变量,我们说导数(derivative)。对于多元函数,即有多个变量,我们说梯度(gradient)。导数是个标量,只有大小(有正负),没有方向。梯度是个向量,除了每个维度的大小,组合在一起就是个方向。
梯度每个维度的值,就是一个方向导数,或偏导数,比如对于一个二元函数z=f(x,y),可以固定x得到z对于y的偏导数\(\cfrac{\partial z}{\partial y}\),也可以固定住y得到z对于x的偏导数\(\cfrac{\partial z}{\partial x}\)。组合在一起,就是z的梯度\(\nabla=(\cfrac{\partial z}{\partial x},\cfrac{\partial z}{\partial y})\)。
一元函数的导数,其值在每一点均可能不相同,导数在某一点是个数,在某一区间,就是个函数,叫做导函数。梯度是一个向量,空间中的某一点,向量可以理解为空间中的一个数值。梯度在某一片空间内,每个维度的值可能都在变化,也就是一个多元函数。
常常看到这样的结论:梯度方向是因变量变化最快的方向!比如二元函数的因变量z。
二元函数变量空间中的某个点,其切是一个面,这个点在这个面上,可以按任意方向变化,360度无死角,无数个变化方向。但是,只有梯度确定的方向,是z变化最快的方向。现在将这个结论对应到一元函数的导数身上:导数是y变化最快的方向。
不仅是变化最快的方向,还有确定的变化率,梯度的变化率就是梯度向量的长度。
导数是个标量,没有方向呀?
导数没有方向,但是与导数同源的,是一条切线(不是切面)。这条线就已经决定了方向!
因此,IMHO,梯度下降算法在一元函数上的应用,就是导数下降算法,完全一样。而且,用一元函数的平面曲线图,可以更容易地理解梯度下降算法。
补充一个细节:变化最快的方向,其实有两个方向,一正一负。
梯度下降算法,利用的就是梯度的负方向,即所谓“下降”,降低z的值(即cost function的值),以此来优化z,达到拟合数据的效果。
为什么负方向(negative gradient direction)就是下降呢?让我们用一元函数的图形来理解“导数下降”这个算法,请脑补一副可导曲线的图像:
\(\eta\)就是learning rate,带上负号,就是朝着梯度的反方向。
多元函数的梯度下降,也是这么一回事儿。
SGD
Stochastic Gradient Descent
这里的stochastic,在应用中就是训练时的minibatch。为什么有效?从数学上理解,整个要优化的公式,等号的右边,是个和式。Coss的计算,是对每一个training data的cost的求和。如果只对minibatch中的data进行计算,同样可能够达到整体降cost的效果。使用minibatch,有计算上的优势。
本文链接:https://cs.pynote.net/math/202209041/
-- EOF --
-- MORE --