本周时间太短了,所以只能先简单的记录一下,后续有时间再补充。
本章主要涉及寻找最优权重参数的最优方法,权重参数的初始值,超参数的设定方法等。同时还会介绍权值衰减,Dropout等正则化方法,并进行实现。
1.参数更新
神经网络学习的目的是找到是损失函数的值尽可能小的参数。这是寻找最优参数的问题,解决这个问题的过程称为最优。前面介绍过,将参数的梯度作为线索,使用参数的梯度,沿梯度方向更新参数,并重复这个步骤多次,从而逐渐靠近最优参数,这个过程称为”随机梯度下降法“ 简称 SGD。
SGD 中的梯度更新法则为:
W为需要更新的权重参数, 把损失函数关于W的梯度记为
,
表示学习率。
随机梯度下降法的缺点:如果函数的形状非均向,比如呈延伸状,搜索的路径就会非常低效。Momentum, AdaGrad, Adam可以有效的避免SGD的问题。
Momentum:
,
AdaGrad:会为参数的每个元素适当地调整学习率
在神经网络的学习中,学习率()的值很重要,学习率过小导致学习花费过多时间;反过来,学习率过大,则会导致学习发散而不能正确进行。实际上,在神经网络中常使用学习率衰减的方法,随着学习的进行,使学习率逐渐减小。
,
W为需要更新的权重参数, 把损失函数关于W的梯度记为,
表示学习率。出现新变量 h 保存以前的梯度值得平方和。
表示矩阵元素乘法。乘
是为了调整学习的尺度。这意味着参数的元素中变化较大(被大幅度更新)的元素的学习率将变小。可以按参数的元素进行学习率衰减,使变动大的参数的学习率逐渐减小。
Adam 后续补充
在实际的实践中,应该使用哪种更新方法呢?并不存在能在所有问题中都表现良好的方法。之后可以根据问题不断尝试选择。
权重的初始值
在神经网络的学习中,权重的初始值特别重要,为什么不能直接将权值初始值设置为0呢? 那是因为使用在误差反向传播法中,所有的权重值都会进行相同的更新。这意味着反向传播被过程中权值会进行想听的更新。一次权重拥有了对称的值(重复的值),这使得神经网络拥有许多不同权重的意义就丧失了,为了防止”权重均一化“(为了瓦解权重的对称结构)必须随机生成初始化。
激活函数的选择也是十分重要的,各层的激活值的分布都要求有适当的广度。因为通过在各层间传递多样性的数据,神经网络可以进行高效的学习。反过来,如果传递的是有所偏向的数据,就会出现梯度消失或者”表现力受限“的问题,导致学习可能无法顺利进行。作为几乎函数的函数最好具有远点对称的性质。
He初始值(KaiMing He等人推荐的初始值): 当前一层的节点数为n时候, He初始值使用标准差为的高斯分布。当激活函数使用Relu时,权重初始值使用He初始值,当激活函数为sigmoid挥着tanh等S型曲线函数时,初始值使用 Xavier初始值(当前一层的节点数为n时候, He初始值使用标准差为
的分布)。这个是目前的最佳实践。
Batch Normalization: 通过观察各层的激活分布,从中了解到如果设定了合适的权重初始值,则各层的激活值分布会有适当的广度,从而可以顺利地进行学习。为了使各层拥有适当的广度,“强制性”地调整激活值得分布会怎么样呢? Batch Normalization就是基于这个想法而产生的。
- Batch Normalization 具有以下有点:
- 可以使学习快速进行(可以增大学习率)
- 不那么依赖初始值
- 抑制过拟合(降低对Dropout的必要性)
Batch Normalization 以进行学习时的mini-batch为单位,按 mini-batch进行正规化(进行数据分布均值为0,方法为1的正则化)数学公式如下:
这里对 mini-batch 的m个输入数据的集合求平均值
, 和方差
。然后,对输入数据进行均值为0, 方差为1的正则化。
是为了防止出现分母为0 的问题。通过将这个处理放到激活函数前或者激活函数后,可以减少数据分布的偏向。
接着,Batch Norm 层会对正则化后的数据进行缩放和平移变换。计算公式如下:
这里是参数,开始
后面通过学习在调整到适当的值。
正则化:过拟合是指只能拟合训练数据,但不能很好地拟合不包含在训练数据的其他数据的状态。机器学习的目的是提高泛化能力。即便没包含在训练数据中,也希望能够进行正确的识别。发生过拟合的主要原因有:
- 模型拥有大量的参数,表现能力强。
- 训练数据少
权值衰减是常用来抑制过拟合的方法,该方法通过在学习过程中对大的权证进行乘法。来抑制过拟合。很多过拟合就是权重参数取值过大才发生的。
在神经网络学习过程中为损失函数加上权重的平法范数(L2范数)。就可以抑制权重变大。用符号表示,如果权重为W,L2范数的权重衰减就是,然后加到损失函数中。这里
是控制正则化强度的超参数。
设置的越大,对大的权重的惩罚就越重。
是用于
求导变为
的调整常量。
对于所有权重,权值衰减的方法都会为损失函数加上(求导后:
),还有其他范数L1, Max范数)因此,在求权重梯度的计算中,要为之前的误差反向传播法的结果上加上正则化的导数
。 可以达到部分抑制过拟合的效果。
Dropout:是一种在学习过程中随机删除神经元的方法。训练时,随机(使用随机函数)选出隐藏层的神经元,然后将其删除。被删除的神经元不在进行信号的传递。可以有效的抑制过拟合。
超参数的验证:在神经网络中,除了权重和偏置等参数,超参数也经常出现,比如各层的神经元数量,batch大小,参数更新时的学习率和权值衰减等。如果超参数没有设置后,模型的性能就会很差。虽然超参数很重要,但是在决定超参数的过程中一般会伴随很多的试错。
验证数据:将数据分为训练数据,测试数据,验证数据。训练数据用于参数(权重和偏置) 的学习,验证数据用于超参数的性能评估。为了确认泛化能力,要在最后使用测试数据,验证模型的泛化能力。
超参数的最优化: 逐渐缩小超参数“好值” 的范围(一开始大致设定一个范围,从这个范围中随机选一个超参数(采样),用这个采样到的值进行识别精度的评估;然后重复该炒作,观察识别精度的结果,根据这个结果缩小超参数的"好值“的范围,通过重复该操作,即可逐渐确定超参数的合适范围)。
总结:
- 参数的更新方法,除了SGD之外,还有Momentum, AdamGrad, Adam等方法
- 权重初始值的赋值方法对进行正确的学习非常重要。
- 作为权重初始值,Xavier初始值,He初始值等比较有效。
- 通过使用Batch Normalization可以加速学习,并且对初始值变的健壮。
- 抑制过拟合的正则化技术有权值衰减, Dropout等
- 逐渐缩小”好值“存在的范围是搜索超参数的有效方法