为什么我们一定要用随机权重初始化神经网络
2018年08月07日 由 yuxiangyu 发表
299400
0
必须将人工神经网络的权重初始化为小的随机数。这是因为这是用于训练模型的随机优化算法的期望,即随机梯度下降。
要理解这种解决问题的方法,首先必须了解非确定性和随机算法的作用,以及随机优化算法在搜索过程中利用随机性的要求。
在这篇文章中,你会了解为什么神经网络权重必须被随机初始化的全部背景知识。
阅读这篇文章后,你会知道:
- 对于具有挑战性的问题的非确定性和随机算法的必要性。
- 在随机优化算法中初始化和搜索期间使用随机性。
- 随机梯度下降是随机优化算法,需要随机初始化网络权重。
让我们开始吧。
这篇文章分为4部分; 他们是:
- 确定性和非确定性算法
- 随机搜索算法
- 神经网络中的随机初始化
- 初始化方法
确定性和非确定性算法
经典算法是确定性的。例如,对列表进行排序的算法。
给定一个未排序的列表,排序算法,比如冒泡排序或快速排序,系统地对列表进行排序,直到得到有序的结果。确定性的意思是算法每次给出相同的列表,将以完全相同的方式执行。它将在程序的每个步骤中进行相同的动作。
确定性算法确实很不错,因为它们可以保证最佳,或最差,或平均的运行时间。可惜,它们并不适合所有问题。
有些问题对计算机来说很难。有可能是由于组合的数量;也有可能因为数据的大小。这些问题往往难到,确定性算法不能用于有效地解决它们。算法当然可以运行,但想要得出结果可能会一直运行到宇宙终结。
于是我们使用非确定性算法替换它。这些算法在执行算法时使用随机性元素进行决策。这意味着当对同一数据重新运行相同的算法时,会有不同的步骤顺序。
他们可以极大地加速获得解决方案的过程,但解决方案将是近似的,也许很好,但通常不是最佳。非确定性算法通常无法对运行时间或所找到的解决方案的质量做出有力保证。
这通常已经不错了,因为问题非常难,任何较好的解决方案通常都会令人满意。
随机搜索算法
搜索问题通常非常具有挑战性,需要使用不确定的算法,这些算法大量地利用了随机性。
算法本身并不是随机的;相反,他们会谨慎使用随机性。它们在一个边界内是随机的,被称为随机算法。
搜索的增量或步进式的性质通常意味着程序和算法被称为从初始状态或位置到最终状态或位置的最优化。例如,随机优化问题或随机优化算法。
例如,遗传算法,模拟退火和随机梯度下降。
搜索过程是从可能的解决方案空间的起点开始,向一些足够好的解决方案递增的。
它们在使用随机性方面具有共同特征,例如:
- 在初始化期间使用随机性。
- 在搜索过程中使用随机性。
我们对搜索空间的结构一无所知。因此,为了消除搜索过程中的偏差,我们从随机选择的位置开始。
随着搜索过程的展开,我们有可能陷入搜索空间的不利区域。在搜索过程中使用随机性,会让你有可能摆脱困境,找到更好的最终候选方案。
陷入困境并返回不太好的解决方案被称为陷入局部最优。在搜索过程中随机初始化和随机性一起使用。
如果我们将搜索找到的任何解决方案视为临时或候选,并且搜索过程可以多次执行,它们可以更好地协同工作。
这为随机搜索过程提供了多个机会来启动和遍历候选解决方案的空间,以寻找更好的候选解决方案 - 即所谓的全局最优解。
候选解决方案空间的导航通常使用山脉和山谷的进行类比和描述(例如,fitness landscape)。如果我们在搜索过程中最大化了得分,我们可以将空间中的“小山丘”视为局部最优,将最大的山丘视为全局最优。
神经网络中的随机初始化
我们通常使用被称为随机梯度下降的随机优化算法训练人工神经网络。
这个算法使用随机性为正在学习的数据中输入到输出的特定映射函数找到足够好的权重组合。这意味着每次运行训练算法时,特定训练数据的特定网络将拟合具有不同模型技能的不同网络。
这是一个特征,而不是一个bug。
更多关于这个问题:
- https://machinelearningmastery.com/randomness-in-machine-learning/
如前所述,随机优化算法(如随机梯度下降法)在选择搜索的起始点和搜索的进展时使用随机性。
具体来说,随机梯度下降要求将网络的权重初始化为小的随机值(随机,但接近零,例如[0.0,0.1])。在搜索过程中,在每个周期前的训练数据集的混洗中也使用随机性,这反过来导致每个批次的梯度估计的差异。
更多关于随机梯度下降的信息:
- https://machinelearningmastery.com/gentle-introduction-mini-batch-gradient-descent-configure-batch-size/
搜索或学习神经网络的过程称为收敛。发现次优解或者说局部最优解被称为早熟收敛(premature convergence)。
用于深度学习模型的训练算法通常需要迭代,因此需要用户指定开始迭代的一些初始点。此外,训练深度模型是一项非常困难的任务,大多数算法都会受到初始化选择的强烈影响。
- 第301页,Deep Learning,2016年。
评估神经网络配置技能的最有效方法是多次重复搜索过程,并报告模型在这些重复过程中的平均性能。这为配置提供了从多个不同初始条件集搜索空间的机会。一般,这称为多次重启或多次重启搜索( multiple-restart search)。
有关神经网络有效评估的更多信息:
- https://machinelearningmastery.com/evaluate-skill-deep-learning-models/
为什么不将权重设置为零?
每次我们训练网络时,我们都可以使用相同的权重组合。例如,可以对所有权重使用0.0的值。
在这种情况下,学习算法将无法对网络权重进行任何更改,模型会卡住。需要注意的是,每个神经元的偏置权重默认设置为零,而不是一个小的随机值。
具体来说,在连接到相同输入的隐藏层中并排的节点必须有不同的权重,这样才能使学习算法更新权重。
这通常被称为在训练期间需要打破对称性(symmetry)。
也许唯一已知的完全确定的性质是初始参数需要不同单元之间“打破对称性”。如果具有相同激活功能的两个隐藏单元连接到相同的输入,则这些单元必须具有不同的初始参数。如果它们具有相同的初始参数,那么应用于确定性损失和型的确定性学习算法将以相同的方式不断更新这两个单元。
- 第301页,Deep Learning,2016年。
何时初始化为相同权重?
每次训练网络时,我们都可以使用相同的随机数集合。这对评估网络性能并没有帮助。
在生产环境中使用模型的情况下,给定一个训练集可能有助于训练相同的最终网络权重。
有关使用Keras开发的神经网络的随机种子的更多信息:
- https://machinelearningmastery.com/reproducible-results-neural-networks-keras/
初始化方法
传统上,神经网络的权重被设置为小的随机数。
神经网络权重的初始化是一个完整的研究领域,对网络进行细致的初始化可以加速学习过程。
现代深度学习库,例如Keras,提供了许多网络初始化方法,它们都是用小随机数初始化权重的变体。
例如,在为所有网络类型编写时,Keras中提供的方法有:
- Zeros:生成初始化为0的张量的初始化器。
- Ones:生成初始化为1的张量的初始化器。
- Constant:生成初始化为常量值的张量的初始化器。
- RandomNormal:生成具有正态分布的张量的初始化器。
- RandomUniform:生成具有均匀分布的张量的初始化器。
- TruncatedNormal:生成截断正态分布的初始化器。
- VarianceScaling:能够根据权重的形状调整其缩放比例的初始化器。
- Orthogonal:生成随机正交矩阵的初始化器。
- Identity:生成单位矩阵的初始化器。
- lecun_uniform:LeCun uniform initializer。
- glorot_normal:Glorot normal initializer,也称为Xavier normal initializer。
- glorot_uniform:Glorot uniform initializer,也称为Xavier uniform initializer。
- he_normal:He normal initializer。
- lecun_normal:LeCun normal initializer。
- he_uniform:He uniform variance scaling initializer。
详细信息,请参阅文档。
文档:https://keras.io/initializers/
Keras开发人员为不同的层类型选择的初始化器如下:
- Dense (例如MLP):glorot_uniform
- LSTM:glorot_uniform
- CNN:glorot_uniform
更多关于“ glorot_uniform ”的信息(该文章中也称为“ Xavier normal ”):
- http://proceedings.mlr.press/v9/glorot10a.html
没有单一的某种最佳方法来初始化神经网络的权重。
现代初始化策略简单且具有启发性。设计改进的初始化策略是一项艰巨的任务,因为神经网络优化还没有被很好地理解。……我们对初始点如何影响泛化的理解特别付钱,对于如何选择初始点几乎没有任何指导。
- 第301页,Deep Learning,2016年。
总结
在这篇文章中,你了解了为什么必须随机初始化神经网络权重。
具体来说,你学到了:
- 对于具有挑战性的问题的非确定性和随机算法的必要性。
- 在随机优化算法中初始化和搜索期间使用随机性。
- 随机梯度下降是随机优化算法,需要随机初始化网络权重。
更多深度学习数据集点击下载