python梯度下降算法算法及注意的细节

首先要明白梯度下降算法我们能干什么?什么时候可以用到梯度下降?
我们先进行两个例子,一个二维函数问题,一个三维的现实问题:
二维函数:比如我们要求

python梯度下降算法算法及注意的细节
三维现实问题:你站在一个一个的山中,你想要的去谷底,那怎么样办才能最快的到达局部谷底呢?要沿着哪个方向进行走动呢?
然后带着问题去思考梯度下降算法。

首先你会有一个函数,比如这个函数有两个参数的函数J(θ_1,θ_2),我们需要一种算法去最小化这个函数
这里我们就需要用到梯度下降算法。
梯度下降算法的步骤:
1.我们开始会有初始数值θ_1,θ_2,一般来说这两个数值为多少没关系,一般可以为0
2.对损失函数求所有 θ 的偏导(梯度): ∂J(θ)/∂θ_j
3.使用样本数据更新假设函数的不停的同时更新θ_1,θ_2,一定要同时更新,后边会说为什么要同时更更新这个两个变量,更新的参数公式为:python梯度下降算法算法及注意的细节(α是为更新步长(调整参数的灵敏度,灵敏度太高容易振荡,灵敏度过低收敛缓慢))
4.直到找到J函数的最小值或者局部最小值

python梯度下降算法算法及注意的细节
比如我们在上图这个点,我想要快速下山,我要怎么办呢?我会根据这个点的变化率最大的方向(也就是偏导数)出发,走一步就再判断一次,最终会走到下图所示的地方python梯度下降算法算法及注意的细节
但是有一个有趣的事情我们会发现,如果我们开始的位置不同的到结果会不同,正如下图所示
python梯度下降算法算法及注意的细节
这就是梯度下降算法的特点,可以尽快的找到局部最优解或者全体最优解
注意的细节:
我们需要同时更新我们的θ_1,θ_2
算法中应该如下图的步骤
python梯度下降算法算法及注意的细节
而不是这样:
python梯度下降算法算法及注意的细节
然后我们思考更新θ_1,θ_2这两个变量的公式,很明显我们要求最低点的时候,偏导数求导是一个正数,但是我们要向下走因此要加负号,第二个求导是负的,我们本身就是要向下走,因此不用加符号,所有最终结果都是python梯度下降算法算法及注意的细节
python梯度下降算法算法及注意的细节
然后我们再考虑α这个步长:
α太小:如下图所示,如果太小了 就会导致我们的步数越来越多,我们进行迭代的次数就很大,就会很浪费时间
α太大:如下图所示,如果太大了就会导致我们可能会超过最低点进而无法收敛越来越偏离正确的道路,因此我们需要选定合适的α
python梯度下降算法算法及注意的细节
大致基本思路就是这样,之后会写一些实际的应用问题