赞
踩
不可导。人为将梯度规定为0
优化函数就是用来最小化我们的损失函数的。
当目标函数是凸函数的时候,用梯度下降的方法取得的最小值是全局最优解。但神经网络的损失函数往往是非凸函数,所以梯度下降法往往找到的是局部最优解。
2. 批次梯度下降法。
为了解决梯度下降法的耗时问题,批次梯度下降法在计算梯度时,不用遍历整个训练集,而是针对一个批次的数据。一个批次数据对应一个梯度
3. 随机梯度下降法。
再极端一点,就是随机梯度下降法,即每次从训练集中随机抽取一个数据来计算梯度。因此,其速度较快(优点),但是其每次的优化方向不一定是全局最优的(缺点)。因为误差,所以每一次迭代的梯度受抽样的影响比较大,也就是说梯度含有比较大的噪声,不能很好的反映真实梯度,并且SGD有较高的方差,其波动较大。而且SGD无法逃离鞍点。
优点: 收敛速度快。
缺点:1. 训练不稳定。2. 选择适当的学习率可能很困难。 3. 无法逃脱鞍点。
SGD算法没有动量的概念,SGD和Adam相比,缺点是下降速度慢,对学习率要求严格。
而Adam引入了一阶动量和二阶动量,下降速度比SGD快,Adam可以自适应学习率,所以初始学习率可以很大。
SGD相比Adam,更容易达到全局最优解。主要是后期Adam的学习率太低,影响了有效的收敛。
我们可以前期使用Adam,后期使用SGD进一步调优。
Adam法主要的优点在于经过偏置校正后,每一次迭代学习率都有一个确定范围,这样可以使得参数更新比较平稳。
Batch选择时尽量采用2的幂次,如8、16、32等
在合理范围内,增大Batch_size的好处:
梯度下降法是原始的优化方法,梯度下降的核心思想:负梯度方向是使函数值下降最快的方向,因此我们的目标就是求取目标函数的负梯度。
在梯度下降法中,因为每次都遍历了完整的训练集,其能保证结果为全局最优(优点),但是也因为我们需要对于每个参数求偏导,且在对每个参数求偏导的过程中还需要对训练集遍历一次,当训练集很大时,计算费时(缺点)
l1正则化,
l2正则化
Dropout
验证集的使用和早停
在训练过程中使用训练集,在每一个epoch结束后使用验证集验证模型效果,画出训练曲线,这样就可以判断是否过拟合了。当发现网络有点过拟合了,当然就是“早停”了,可以直接停止训练了。
扩充数据集
数据集越大,网络泛化性能越好,所以努力扩充数据集,通过平移、翻转、旋转、放缩、随机截取、加噪声、色彩抖动等等方式
BN(Batch Normolization)
作为正则化的一种形式
批规范化,即在模型每次随机梯度下降训练时,通过mini-batch来对每一层卷积的输出做规范化操作,使得结果(各个维度)的均值为0,方差为1。
BN实际就是对网络的每一层都进行白化操作。白化操作是线性的,最后的“尺度变换和偏移”操作是为了让BN能够在线性和非线性之间做一个权衡。引入了可学习参数γ、β,这就是算法关键之处。引入了这个可学习重构参数γ、β,让我们的网络可以学习恢复出原始网络所要学习的特征分布。
Bagging和Boosting(模型融合)
Bagging算法使用Bootstrap方法从原始样本集中随机抽取样本。共提取K个轮次,得到K个独立的训练集,元素可以重复。分类问题以结果中的多个值投票作为最终结果,回归问题以平均值作为最终结果。结果采用投票法,避免了决策树的过拟合问题。
Boosting是为每个训练样本设置一个权重,在下一轮分类中,误分类的样本权重较大,即每轮样本相同,但样本权重不同;对于分类器来说,分类误差小的分类器权重较大,反之则小
L1是模型各个参数的绝对值之和;L2是模型各个参数的平方和。
• L1会趋向于产生少量的特征,而其他的特征都是0;L2会选择更多的特征,这些特征都会接近于0,得到的解比较平滑(不是稀疏),降低模型的复杂度。
L1正则要算绝对值,算绝对值比较麻烦;直接平方要比算绝对值来得简单,这一点上L2正则计算更加简便(优化时求导方便)。
L1是模型各个参数的绝对值之和∣w⃗∣,L1正则项解空间为菱形。最优解必定是有且仅有一个交点。菱形的唯一交点大概率出现在坐标轴上,那么对目标函数经过优化后,一部分参数会变为0,另一部分参数为非零实值。这样我们就得到了稀疏特征了。
LN:Layer Normalization,LN是“横”着来的,对一个样本,经过同一层的所有神经元间做归一化。Layer Normalization是每个样本内部做标准化,跟size没关系,不受其影响。也适用于RNN等动态网络
BN:Batch Normalization,BN是“竖”着来的,经过一个神经元的所有样本做归一化,所以与batch size有关系。
缺点:1BN比较依赖size的大小
2在训练的时候,是分批量进行填入模型的,但是在预测的时候,如果只有一个样本或者很少量的样本来做inference,这个时候用BN显然偏差很大
3. BN并不适用于RNN等动态网络
二者提出的目的都是为了加快模型收敛,减少训练时间。
通道C可以理解为神经元
同时使用BN和dropout时,可能存在方差偏移的问题
针对方差偏移,论文给出了两种解决方案:
因为训练的时候以概率p drop了一些节点,比如dropout设置为0.5,隐藏层共有6个节点,那训练的时候有3个节点的值被丢弃,而测试的时候这6个节点都被保留下来(测试时候不加dropout),这就导致了训练和测试的时候以该层节点为输入的下一层的神经网络节点获取的期望会有量级上的差异。为了解决这个问题,在训练时对当前dropout层的输出数据除以(1-p),之后再输入到下一层的神经元节点,以作为失活神经元的补偿,以使得在训练时和测试时每一层的输入有大致相同的期望。
Batch Normalization
BN就是在深度神经网络训练时通过对每一个batch的数据采用均值和方差进行归一化,使得每一层神经网络的输入保持相同的分布,这样能够加快训练的速度。此外,因为在训练时,为每一次迭代求全局的均值和方差是不现实的,因此借鉴moment的方式对均值和方差进行更新,使得每一层归一化的均值和方差都不一样,也相当于引入了噪声,能够增加模型的鲁棒性,有效减少过拟合。
方差偏移
dropout和BN结合使用使模型性能下降的连接方式,用通俗的话讲,就是先在网络的内部使用dropout,随后再跟上一个BN层,而且这个BN层还不止一个。原因有二。首先,如上图所示,因为训练时采用了dropout,虽然通过除以(1-p)的方式来使得训练和测试时,每个神经元输入的期望大致相同,但是他们的方差却不一样。第二,BN是采用训练时得到的均值和方差对数据进行归一化的,现在dropout层的方差不一样,一步错步步错,最终导致输出不准确,影响最后的性能。
对网络某一层A的输出数据做归一化,然后送入网络下一层B,这样是会影响到本层网络A所学习到的特征的。于是BN最后的“尺度变换和偏移”操作,引入了可学习参数γ、β,这就是算法关键之处。引入了这个可学习重构参数γ、β,让我们的网络可以学习恢复出原始网络所要学习的特征分布
数据集越大,网络泛化性能越好,所以努力扩充数据集,通过平移、翻转、旋转、放缩、随机截取、加噪声、色彩抖动等等方式。
L1正则化假设参数分布为Laplace分布;L2正则化假设参数分布为正态分布
要乘以keep-prib。
因为神经元预测的时候就没办法随机丢弃,一种”补偿“的方案就是每个神经元的权重都乘以一个p,这样在“总体上”使得测试数据和训练数据是大致一样的。保证测试的时候把这个神经元的权重乘以p可以得到同样的期望。
注:目前主流是采用inverted dropout替代dropout,inverted dropout不需要乘以keep-prib。它的做法是在训练阶段对执行了dropout操作的层,其输出激活值要除以keep_prob,而测试的模型不用再做任何改动。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。