正则化
正则化即表示减少数据方差的策略
- 误差可分解为:偏差,方差与噪声之和。即
误差=偏差+方差+噪声 偏差:度量了学习算法的期望预测与真实结果的偏离程度,即刻画了学习算法本身的拟合能力。 方差:度量了同样大小的训练集的变动所导致的学习性能的变化,即刻画了数据扰动所造成的影响。 噪声:表达了在当前任务上任何学习算法所能达到的期望泛化误差的下界。 - nn.Dropout
减轻神经元对某个特征的过度依赖,减少过拟合。 随机:dropout probability 失活:weight=0 注意:测试时,所有权重应乘以1-drop_prob - Batch Normalization(一个batch中单个通道归一化)
批:一批数据,通常为一个batch的大小 标准化:均值为0,方差为1 优点: 可以用更大学习率,加速模型收敛 可以不用精心设计权重初始化 可以不用dropout或较小的dropout 可以不用L2或者较小的weight decay 可以不用LRN(local response normalization)
__init__(self,num_features,eps=1e-5,momentum=0.1,affine=True,tracking_running_stats=True)
参数: num_features:样本特征数量 eps:分母修正项 momentum:指数加权平均估计当前mean/var affine:是否需要affine transform track running stats: 是训练状态,还是测试状态 在训练时,均值和方差是计算的一个batch的数量的样本,测试时,我们要逐一处理样本,方法是根据你的训练集估算均值和方差。 估算的方式:理论上可以在最终的网络中运行整个训练集得到均值和方差,但是在实际操作中,通常运用指数加权平均来追踪在训练过程中看到的均值和方差的值,然后用网络训练过程中得到的
β
\beta
β和
γ
\gamma
γ参数来计算测试样本 4. Layer Normalization (单个样本的归一化) BN实际使用时需要计算并且保存某一层神经网络batch的均值和方差等统计信息,对于一个固定深度的前向神经网络使用BN,很方便;但是对于RNN来说,sequence长度是不一致的,换句话说RNN的深度是不固定的,不同的time-step需要保存不同的statics特征,可能存在一个特殊sequence比其他sequence长得多
nn.LayerNorm(
normalized_shape,
eps=1e-05,
elementwise_affine=True
)
主要参数: normalized_shape:该层特征形状 eps:分母修正项 elementwise_affine:是否需要affine transform LN中同层神经元输入拥有相同的均值的方差,不同的输入样本有不同的均值和方差; BN中则针对不同神经元输入计算均值和方差,同一个batch中的输入拥有相同的均值和方差。
- Instance Normalization(W,H 归一化)
常见于图像生成,因为BN注重对每个batch进行归一化,保证数据分布一致,因为判别模型中结果取决于数据整体分布,但是图像风格化总,生成结果主要依赖于某个图像实例,所以对整个batch归一化不适合图像风格化中,因而对HW做归一化,可以加速模型收敛,并且保持每个图像实例之间的独立。
nn.InstanceNorm2d(
num_features,
eps=1e-05,
momentum=0.1,
affine-False,
tracking_running_stats=False
)
主要参数: num_features:一个样本特征数量 eps:分母修正项 momentum:指数加权平均估计当前mean/var affine: 是否需要affine transform track_running_stats: 是训练状态,还是测试状态
- Group Normalization(G,W,H归一化)
起因:小batch样本中,BN估计的值不准 思路:数量不够,通道来凑 注意事项: 1 不再有running_mean和running_var 2
γ
\gamma
γ和
β
\beta
β为逐通道(channel) 主要是针对BN对小batchsize效果差,GN将channel方向分组,然后每个组内做归一化
nn.GroupNorm(
num_groups,
num_channels,
eps=1e-05,
affine=True)
|