- section 3的最末一段,没怎么明白,主要是 a small value of \(\beta_2\) ,看起来与default setting相悖,并且其所说的sparse case与section 5中AdaGrad的描述(\(\beta_2\rightarrow 1\))也不一致
- 个人理解是在梯度在0附近时,使用更小的幅值($|x_1 + x_2|^2/(\sqrt{x_1^2+x_2^2})<1,x_1x_2<0 $), 后面可以试试用一些函数进行尝试验证。
以上 2017-05-24
本想后面找时间把前文扩展后再写全面些,但现在没有太多的必要了,明天要外出消失一段时间,正好现在心情悠扬,就把这结一下。
后面见到不少人说Adam的种种神效,鼓吹sgd是大神御用。之后有几次短暂的debug时用了adam,然后就没有理会了。 前几天刚好和大师兄说到这件事,没想到大师兄也认为sgd更为恰当。问题在于adam的收敛带有不同寻常的味道。下面一些图是早前做的一些实验。
左上角是\(f(x)=x^3-5x^2-50x\)函数概览,右边是\(x\)随迭代次数的变化,下边是\(f(x)\)随迭代次数\(t\)的变化。参数遵照paper默认设置。 初始值为\(x(0)=80\),然而没有冲过大致在\(-6.08\)和\(2.05\)间的障碍,从图中可以看到,这段区间比起从\(80\)下来这段,应该是非常微弱的起伏。 我记得当时把初始至增大到了比较大的级别,刚才找到另一台机器上跑了一下(julia越改越糟糕,现在连Pkg都失败了)换到了\(x(0)=500\): 很明显,依然在上次附近的地方停住了。不过可以观察到的是,初值升高后,收敛值还是有些变化的。从稳定的角度来说(这也是大部分算法看起来在追求的东西),adam是很不错的,不仅能快速俯冲,还能快速凝固。是不是Bengio曾说过局部优解并无妨碍,如是,那么sgd和adam并没有什么可以用来评论优劣。但从这些实验来看adam的高凝固性无疑会造成其局部优解集大小的丢失。而在这一点上sgd听起来能做得更好,另外,有动量辅助的sgd稳定性还是能够保障的,并不是什么大神才能用得起的。
另记
如果能加些sgd的对比实验应该更perfect,后面找机会吧。