1.gradient descent梯度下降优化
1.1假设要优化一个函数
f(x)=(x−1)2
求它的最小值。这个函数在
x=1
时有最小值,这是解析解。如果用梯度下降法,是这样的:
f′(x)=2(x−1)
每一步的迭代公式是:
xi+1=xi−ηf′(xi)
(为什么是减号?因为是求最小值,如果是求最大值,就是加号)
如果
∣xi+1−xi∣<0.1
则精度足够,终止计算。
1.2 初始值
x0=5
,
η=0.8
(初始值可以随便设,但
η
需要经验性地选择一下,步长太大可能会引起不收敛,步长太小会慢,更复杂一点可以搞个自适应的计算方式以调优)
1.3 第1步:
x1=x0−ηf′(x0)=5−0.8∗2∗(5−1)=−1.4
1.3 第2步
x2=x1−ηf′(x1)=−1.4−0.8∗2∗(−1.4−1)=2.44
1.3第3步
x3=x2−ηf′(x2)=2.44−0.8∗2∗(2.44−1)=0.138
1.4 第4步
x4=x3−ηf′(x3)=0.138−0.8∗2∗(0.138−1)=1.517
1.5 第5步
x5=x4−ηf′(x4)=1.517−0.8∗2∗(1.517−1)=0.69
1.6 第6步
x6=x5−ηf′(x5)=0.69−0.8∗2∗(0.69−1)=1.186
1.7 第7步
x7=x6−ηf′(x6)=1.186−0.8∗2∗(1.186−1)=0.89
1.8 第8步
x8=x7−ηf′(x7)=0.89−0.8∗2∗(0.89−1)=1.066
1.9第9步
x9=x8−ηf′(x8)=1.066−0.8∗2∗(1.066−1)=0.9604
1.10第10步
x10=x9−ηf′(x9)=0.9604−0.8∗2∗(0.9604−1)=1.02
此时 ∣x10−x9∣=0.0596<0.1 ,精度足够,计算终止。此时,数值解1.02和解析解1非常接近了。
这就是梯度下降算法。
2.随机梯度下降算法
1.1假设要优化一个函数
f(x,y)=(x−1)2+(y−2)2
。这个函数在
x=1,y=2
时有最小值,这是解析解。如果用梯度下降法,是这样的:
∂f(x,y)∂x=2(x−1)
∂f(x,y)∂y=2(y−2)
每一步的迭代公式是:
xi+1=xi−η∂f(x,y)∂x
yi+1=yi−η∂f(x,y)∂x
如果 ∣xi+1−xi∣<0.1 且 ∣yi+1−yi∣<0.1 则精度足够,终止计算。随机梯度下降算法,跟梯度下降算法,唯一的差别,就是每次不是选择全部变量进行优化,而是随机选择少量变量进行优化。比如本例是两个变量,那么就每次随机选择一个变量优化。
3.SGD的若干理论分析
在知乎有一个文章谈的很好https://zhuanlan.zhihu.com/p/28060786 ,总结起来就是,从直觉、试验、理论三个方面,SGD性能都好:a) 相对于非随机算法,SGD 能更有效的利用信息,特别是信息比较冗余的时候; b)相对于非随机算法, SGD 在前期迭代效果卓越; c)如果样本数量大,那么 SGD的Computational Complexity 依然有优势。理论分析要多读,这个比较麻烦。