您好,欢迎进入某某沙盘有限公司官网!

咨询热线:

020-88888888

【深度学习】从对抗生成网络出发的目标导向式优化器调参方法

发布时间:2024-03-12 12:02人气:

前言

最近做对抗生成网络实验的过程中出现了模型无法收敛的问题,后来发现是优化器本身的问题,通过从效果较好的优化器数学表达式出发进行调整,最终包括SGD、SGDm、Adagrad、RMSprop和Adam在内的优化器都得到了收敛,特此总结一下调参经验。

正文

(涉及的几种优化器的数学表达式可参考:https://blog.csdn.net/Swocky/article/details/105681518)
对于本次对抗生成网络实验,事实证明,优化器如果不经更改的直接使用,或者按照之前实验的经验设置参数,那么大多数无法收敛的,最终经过推导与尝试成功地使上述所有的优化器都能够收敛,这也是本次实验花费时间较多的地方。
实验初期,经过大量的epoch尝试,无论对于哪一种除RMSprop以外的优化器都无法收敛,生成数据的分布一直在振荡,且loss值也在不断波动,这甚至令人怀疑优化器对于实验结果有决定性作用。
尽管是以往表现比较好的Adam与SGDm也没有收敛的迹象。考虑到出现这个问题的原因,大概是与GAN的问题特点有关,其目标是一个特殊的鞍点,或者说优化器与产生器某种意义上的平衡位置,与一般的凸优化有所不同。
这里容易想到,既然RMSprop能够优化,那么是否可以通过修改参数使Adam的优化公式接近于RMSprop呢?从这个角度出发最终其实是可以使上述所有的自适应优化器的手链问题得到解决,也是本次实验的突破口。
经过对比,相对于RMSprop,Adam在梯度一阶矩采用了动量机制,通过之前的梯度与当前的梯度加权得到新的梯度。如果要尽可能接近RMSprop,可以从参数的角度出发,即将Adam的参数b1控制的很小,当为0的时候便几乎退化回了RMSprop。通过查看PyTorch中Adam的源码,在默认情况下b1为0.9,显然这就是导致它与RMSprop结果大为不同的原因。最终将b1设置为0.01,Adam成功得到了收敛。
从这个角度出发,也可以去解决同为自适应梯度的Adagrad。经过查看公式,可以发现Adagrad没比较明显的内部参数,因此主要的出发点还是学习率。观察Adagrad对于自适应梯度的实现可以发现,分母存在梯度的累加,而非像RMSprop一样的前后梯度加权和,因此到相对来说分母会很大,导致梯度较小,因此考虑可以适当提高学习率,以尽可能接近RMSprop的情况。测试中,将学习率提高至0.002后,发现对于一些情况模型得到了更快的收敛,可视化也可以看出明显的拟合。
基于上述的改良,自适应优化器均能实现拟合。而SGD的拟合仍然无法成功,并且SGD与RMSprop的实现区别较大,也难以从前面的思路进行改良,入手点从参数角度来讲只有学习率。按照以往的经验,SGD的学习率常常设置为0.01,但效果并不好,并且经过查阅资料发现,GAN的目标是寻找到特殊的鞍点,而SGD的优化目标是局部最小值,也常常容易陷入局部最优而发生振荡,与可视化出现的现象一致。
根据以上事实,可以考虑将学习率进一步增大,这样能够帮助SGD跳出局部最优。在更改为0.1后,尽管收敛的较慢,但最终还是能够对数据集中的点分布实现明显的拟合。那么,顺着之前的思路,SGDm只要在该学习率下公式足够接近SGD也能实现拟合,而SGD也可以理解为SGDm在momentum为0的特殊情况,因此将其设置为0.01,经过测试也实现了收敛。
最终,经过推导与尝试,上述常见的几种优化器都能够实现收敛。经过查阅资料与总结进一步发现,对于实验中的问题动量优化算法表现并不好(包括Adam与SGDm),往往需要通过参数控制几乎消除动量的作用才能够实现收敛。
学习率的设置在上面有所提到,在上述参数环境下,将自适应优化器设置为0.001,SGD与SGDm设置为0.1,经过测试能够实现收敛。

总结

以往各种优化器尽管学习效率可能不同,但最终的都能基本实现收敛,而本次实验初期对于很多优化器甚至难以收敛,一直处于振荡中。这是由于GAN的优化目标较为特殊,因此不合适的优化方法很难实现收敛。
但经过对参数的调整,例如Adam的b1和b2,、SGDm的momentum、RMSprop的alpha,模型能够实现收敛。这里同样也要注意不同优化器通常选取的学习率不同,否则也会影响收敛,相对来说SGD更大一些。
可见,各类参数的选取与优化器对GAN的收敛影响较为明显,在实际问题中需要精心调整与选取。另外,正如实验所使用的方法,如果发现某个优化器表现更好,例如本实验中的RMSprop,可以对比其他与之区别,有目的的进行调参。


020-88888888

平台注册入口