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 依然有优势。理论分析要多读,这个比较麻烦。