梯度的个人理解

1,362 阅读4分钟

梯度下降(仅代表个人理解,请以实际概念为准)

在这里简单说一个概念,什么是梯度。 想要理解梯度的概念,需要逐渐看看下面这些概念。

首先说说导数。

一个未知量的导数,其实就是这个未知量在某一时刻的趋势。并且反映了这个变化量在空间中的走势:为正上升,为负下降,为零持平。 可以想象,有一阵风吹过了一片山脉,风顺着山体流淌着。 风的位置在山脉里下降的时候,说明风越吹越低; 风的位置在山脉里上升的时候,说明风越吹越高; 风的位置在山脉里不变的时候,风是平和地吹动的。 山脉是函数,风是函数上游走的点,起起落落的坡度,是自变量的导数。

image.png

再来说说偏导数。

当一个函数中出现多个自变量时,我们依次将唯一自变量进行锁定。 将其他自变量默认为固定值,此时对锁定的自变量进行求导,得到的就是关于这个锁定自变量的偏导数。 在这片山脉中,有水,有树,有草。 他们代表着这边山脉上各个不同的位置。 在他们各自的一亩三分地上,他们主宰着这边空间的走势。 水是往低处流淌的,风吹过的时候,被水牵着手走向了山涧。 树是高大的,风吹过的时候,被树冠轻轻挑向了高空。 小草是绵密的,风吹过的时候,小草轻轻摆动,看着风渐行渐远。 山脉是函数,风是函数上游走的点,水、树、草都是函数的特征,他们在各自的位置对风牵引的动作,就是特征所在指定位置上的偏导数。

image.png

最后说说梯度。

当一个函数中存在多个自变量,逐个求偏导,最后会得到一串偏导数, 将这串偏导数编成一个向量,这个向量就是关于这个函数的梯度。 山脉里的风在自由地流动。 水是山脉,树是山脉,草也是山脉。 风在其中游走,遇水下潜,遇树升空,遇草漫步。 他们的存在,决定了风会用什么样的方式走过他们的身前。 山脉是函数,风是函数上游走的点,水、树、草所在的各自的位置相互交织,融成梯度,共同决定了点在函数上某位置的走势。 image.png

现在可以来说梯度下降了,如果还不理解,给我说,我自裁谢罪。 梯度下降是一种非常通用的优化算法,能够为大范围的问题找到最优解。 梯度下降的中心思想就是迭代地调整参数,从而使得成本函数(常见的有RMSE/MSE等)最小化。

关于梯度下降,最大众也最便于理解地解释就是下山问题。 假设有人在充满大的地山中迷失了,想要尽快下山,最快速的方法是沿着最陡峭的斜坡跳下去。 这就是梯度下降最核心的思想。 通过测量参数向量θ相关的误差函数的局部梯度,并不断沿着梯度降低的方向前进,直到梯度为零时,误差函数达到最低点。

在梯度下降中,有一个非常重要的参数,就是步长,这一值取决于超参数学习率。 学习率过低,步长很短很短,算法需要经过大量迭代才能实现收敛(想象一下一直拼命奔跑的蜗牛),这将会消耗大量的时间。 而学习率过高,会导致步长过大,很容易直接跨过最低点(前面有个水坑,刘翔嗖的一下垮了了过去),甚至于下一步所得的位置还要高于起点。

梯度下降还有个问题,就是比较容易被限制在局部最小中。 机器都是傻乎乎的,他们的使命是找到最低点,当机器在局部最小的时候,再前进会离开当前的最小值,这是违背了机器的初衷的,所以机器会选择就地躺好。 这就导致了,找到最小了,但又没完全找到。

值得庆幸的是,线性回归模型的MSE成本函数是一个凸函数,这就使得连接曲线上任意两点产生的线段是不会和曲线相交的(想象一下,一口正常的碗的内壁)。 这就意味着不存在局部最小,只有全局最小,同时,这个函数也是个连续函数,不存在陡峭。 上面两点就保证了,不管怎么走,在足够长的时间之后,梯度都会下降到全局最小。

此处增加一个注意点,应用梯度下降时,要保证所有特征值的大小比例都持平,否则收敛的时间将会大大延长。