俗话说“万事开头难”,放在卷积神经网络训练中也是如此。
神经网络模型一般依靠随机梯度下降法进行模型训练和参数更新,网络的最终性能与收敛得到的最优解直接相关,而收敛效果实际上又很大程度取决于网络参数最开始的初始化。
理想的网络参数初始化使模型训练事半功倍,相反,糟糕的初始化方案不仅会影响网络收敛甚至会导致“梯度弥散”或“爆炸”致使训练失败。
举个例子,如网络使用sigmoid函数作为非线性激活函数,若参数初始化为过大值,前向运算 经过 sigmoid函数后的输出结果几乎全为0或1的二值,而导致在反向运算时的对应梯度全部 为0。这时便发生了“梯度弥散”现象。无独有偶,不理想的初始化对于 RELU 函数也会产生问题。 若使用了糟糕的参数初始化,前向运算时的输出结果会有可能全部为负,经过 RELU 函数后此部分变为全 0,在反向运算时则毫无响应。这便是RELU函数的“死区”现象。
那么,网络参数初始化都有哪些方案?
全零初始化
虽然能保证参数期望值为0,但是参数全为 0时网络不同神经元的输出必然相同,相同输出则导致梯度更新完全一样,这样便会令更新后的参数仍然保持一样的状态。换句话说,如若参数进行了全零初始化,那么网络神经元将毫无能力对此做出改变,从而无法进行模型训练。
随机初始化
将参数值随机设定为接近 0的一个很小的随机数(有正有负)。在实际应用中,随机参数服从高斯分布(即正态分布)或均匀分布都是较有效的初始化方式。
其中的高斯分布为均值为 0,方差为1的标准高斯分布。
Problem:
上述做法仍会带来一个问题,即网络输出数据分布的方差会随着输入神经元个数改变,原因如下:
为解决这一问题,会在初始化的同时加上对方差大小的规范化,这便是著名的“Xavier参数初始化方法”。
如:
高斯分布参数初始化 Xavier参数初始化方法实验对比发现此初始化方法的网络相比未做方差规范化的版本有更快的收敛速率。
但是,以上方法未考虑激活函数对输入的影响!
未考虑非线性映射函数对输入 s 的影响,因为使用如 RELU函数等非线性映射函数后,输出数据的期望往往不再为0,因此Xavier方法解决的问题并不完全符合要求。
在2015年,He等人提出了改进——将非线性映射造成的影响考虑进参数初始化中,提出了原本Xavier方法中方差规范化的分母应为而不是。
实验证明He方法比Xavier方法有更好的收敛效果。
其他初始化方法
除了直接随机初始化网络参数,一种简便易行且十分有效的方式则是利用预训练模型——将预训练模型的参数作为新任务上模型的参数初始化。
小结
§ 网络参数初始化的优劣极大程度决定了网络的最终性能;
§ 比较推荐的网络初始化方式为He方法,将参数初始化为服从高斯分布或均匀分布的较小随机数,同时对参数方差需施加规范化;
§ 借助预训练模型中参数作为新任务参数初始化的方式是一种简便易行且十分有效的模型参数初始化方法。
网友评论