本文主要介绍通过不同的方法初始化神经网络中的图层权重。并且通过各种简短的实验和思想练习,我们将逐步发现为什么在训练深度神经网络时足够的重量初始化非常重要。在此过程中,我们将介绍研究人员多年来提出的各种方法,并最终深入研究最适合您且最有可能使用的当代网络架构的方法。
接下来的例子来自我自己重新实现的一套笔记,Jeremy Howard在最新版本的fast.ai的深度学习第二部分课程中介绍了这一课程,该课程目前正在2019年春天在USF的数据研究所举行。
为什么要初始化权重
权重初始化的目的是防止层激活输出在正向通过深度神经网络的过程中爆炸或消失。如果发生任何一种情况,损失梯度将太大或太小而无法有效地向后流动,并且如果网络甚至能够这样做,则网络将花费更长时间来收敛。
矩阵乘法是神经网络的基本数学运算。在具有多个层的深度神经网络中,一个前向通道仅需要在每个层,在该层的输入和权重矩阵之间执行连续的矩阵乘法。在一层的这种乘法的乘积成为后续层的输入,依此类推。
对于一个说明这一点的快速和肮脏的例子,让我们假设我们有一个包含一些网络输入的向量x。这是训练神经网络时的标准做法,以确保我们的输入值被缩放,使得它们落入这样的正态分布,平均值为0,标准差为1。
让我们假设我们有一个没有激活的简单的100层网络,并且每个层都有一个包含图层权重的矩阵a。为了完成单个前向传递,我们必须在层输入和每100个层中的权重之间执行矩阵乘法,这将使总共100个连续矩阵乘法。
事实证明,从我们对输入进行缩放的相同标准正态分布初始化图层权重值绝不是一个好主意。为了了解原因,我们可以模拟我们假设网络的正向传递。
哇!在这100次乘法期间的某个地方,层输出变得非常大,甚至计算机也无法识别它们的标准偏差并且意味着数字。我们实际上可以确切地看到发生了多长时间。
激活输出在我们网络的29层内爆炸。我们明确地将权重初始化为过大。
不幸的是,我们还要担心防止层输出消失。为了看看当我们初始化网络权重太小时会发生什么 - 我们将扩展我们的权重值,使得它们仍然落入平均值为0的正态分布内,它们的标准偏差为0.01。
在上述假设的前向传递过程中,激活输出完全消失。
总结一下,如