我个人看来,梯度下降可以理解为我们生活中如何最快下山的问题。
如何最快的下到山底,需要解决两个问题:1.每走一步时,应该朝哪个方向迈出步子。
2.每一步应该迈多大。
每次朝哪个方向迈出步子,即是要找到一个最陡峭的方向。如果我们每迈出一步都是朝着最陡峭的方向,则最终会以最快的速度到达山底。
现在问题的关键就是如何找到这个最陡峭的方向。
首先讲讲梯度。
梯度实际上就是多变量微分的一般化。
梯度就是分别对每个变量进行微分,然后用逗号分割开,梯度是用<>包括起来,说明梯度其实一个向量。
梯度是微积分中一个很重要的概念
- 在单变量的函数中,梯度其实就是函数的微分,代表着函数在某个给定点的切线的斜率
- 在多变量函数中,梯度是一个向量,向量有方向,梯度的方向就指出了函数在给定点的上升最快的方向
梯度的方向是函数在给定点上升最快的方向,那么梯度的反方向就是函数在给定点下降最快的方向,这正是我们所需要的。所以我们只要沿着梯度的方向一直走,就能走到局部的最低点。
来张图,会更加形象:
下面看看梯度下降中最重要的数学公式:
公式的理解:
J是关于Θ的一个函数,我们当前所处的位置为Θ0点,要从这个点走到J的最小值点,也就是山底。首先我们先确定前进的方向,也就是梯度的反向,然后走一段距离的步长,也就是α,走完这个段步长,就到达了Θ1这个点!
α在梯度下降算法中被称作为学习率或者步长,我们可以通过α来控制每一步走的距离,每一步走的太大或者太小都不好,太小的话,可能导致迟迟走不到最低点,太大的话,会导致错过最低点。
梯度前加一个负号,表示朝着梯度相反的方向前进。梯度的方向实际是函数在此点上升最快的方向,而我们需要朝着下降最快的方向走,自然就是负的梯度的方向,所以需要加上负号。
下面举几个实例来更好的理解梯度下降算法。
假设一个单变量函数:
导数为:
假设起始位置:0 = 2
= 0.2
根据梯度下降的计算公式:
假设一个多变量函数: