PS:本文是一位即将毕业的研三学渣,在做毕业设计时思考了一些关于神经网络的优化方法,迫于工作压力和时间限制,给出一些设想,文中可能有许多不正确的地方,希望大佬多多批评指正。
1、引言
相信学过神经网络的朋友都知道,深度神经网络在训练的过程中容易出现震荡或者梯度下降慢等问题,尽管目前已经出现残差网络、BN网络和注意力机制,并且也取得很好的效果,但是有时候差强人意。
值得注意的是,神经网络反向传播的时候是链式求导法则一层层传递的,那势必会出现一个问题,那就是传递到输入层时,必然会出现梯度跨步较大问题,诚然,现在大部分人使用自适应随机优化(Adam),可以通过设置较小的学习率防止梯度跨步过大跳出最优解,但是在实际训练过程中仍然出现loss不断起伏的问题。
我记得神经网络的梯度优化有一个理想的设定----即默认正反向传播互不干扰,但是实际上每次反向传播都会修改权重参数,此时即便输入相同的值正向传播输出结果也有可能发生较大的变化。举一个不太恰当的例子:如果把网络深度比作一根竹竿,设定网络深度越深竹竿越长,将最优化比作竹竿指向一个指定的方向,显然竹竿越长,想要指定一个固定的方向越难,这是因为竹竿越长,调节竹竿的一头即便发生了轻微的变化,另一端都可能发生了巨大的变化。(比如想象一根地球到太阳的竹竿,你在地球的一端控制竹竿指向一个点,是不是会觉得很难)
2、设想
前文的比喻确实也是目前神经网络优化时的一个问题,那就是输出层的误差链式传播到输入层时,这个误差是成指数级放大的,当然,加入了残差网络或许有一点进步,将指数级误差变成了倍数级,然而残差基网络(残差基网络这里指链式传播模块)仍然会指数级放大误差,这点仍然可能导致前几层网络的参数难以优化。
那能不能有办法尽量减少这种指数级误差增长趋势呢?我想其实大部分人都有这个疑惑。现在请大家设想一下显微镜观察细胞的做法,是不是有种明悟的感觉,这篇文章所提的方法也与此有关,当然笔者同样没去尝试,只是一个设想。
3、方案
既然说网络的反向传播类似指数级递增传播,那么,能不能考虑先优化大致方向,然后逐层优化细节呢?就像显微镜那样,先调粗调旋钮,然后调次粗调节旋钮,最后调微旋钮。再做这个问题之前需要明白,首先粗旋钮是什么?看再梯度下降时优化哪一层网络会发生剧烈变化。可以测试,固定前n-1层网络的参数,优化最后一层和固定第一层优化最后一层,看哪一种优化方式网络变化最剧烈。
当变化最剧烈的一层训练得差不多时,然后如法炮制,固定另外n-1层优化次变化大网络层,这样类似调节旋钮得办法最终使得网络逐渐趋于最优。这个过程中值得注意的是学习率的调整,显然每层都不同,然后层层递进。
以上就是一些想法,也不知道对不对,一时心血来潮码了这么多罗嗦话。