文章目录
- 1. 什么是正则化
- 2. 正则化方法
- 2.1 Dropout正则化
- 2.2 批量归一化(BN层)
学习目标:
- 知道正则化的作用
- 掌握随机失活 DropOut 策略
- 知道 BN 层的作用
1. 什么是正则化
- 在设计机器学习算法时希望在新样本上的泛化能力强。许多机器学习算法都采用相关的策略来减小测试误差,这些策略被统称为正则化。
- 神经网络的强大的表示能力经常遇到过拟合,所以需要使用不同形式的正则化策略。
- 目前在深度学习中使用较多的策略有范数惩罚,DropOut,特殊的网络层等,接下来我们对其进行详细的介绍。
2. 正则化方法
2.1 Dropout正则化
在练神经网络中模型参数较多,在数据量不足的情况下,很容易过拟合。Dropout(随机失活)是一个简单有效的正则化方法。
- 在训练过程中,Dropout 的实现是让神经元以超参数 p 的概率停止工作或者激活被置为0,未被置为0的进行缩放,缩放比例为1/(1-p)。训练过程可以认为是对完整的神经网络的一些子集进行训练,每次基于输入数据只更新子网络的参数。
- 在测试过程中,随机失活不起作用。
python实现:
import torch
import torch.nn as nn
# Dropout 正则化
def test():
# 初始化随机失活层
dropout = nn.Dropout(p=0.4)
# 初始化输入数据:表示某一层的 weight 值
inputs = torch.randint(0,10,size=[1,4]).float()
layer = nn.Linear(4,5)
y = layer(inputs)
print("未失活FC层的输出结果\n",y)
y = dropout(y)
print("失活后FC层的输出结果\n",y)
test()
输出结果:
未失活FC层的输出结果
tensor([[-2.2610, -0.7930, 0.3200, 7.0264, -2.2781]],
grad_fn=<AddmmBackward0>)
失活后FC层的输出结果
tensor([[-0.0000, -1.3217, 0.0000, 0.0000, -3.7968]], grad_fn=<MulBackward0>)
上述代码将 Dropout 层的概率 p 设置为 0.4,此时经过 Dropout 层计算的张量中就出现了很多 0 , 未变为0的按照(1/(1-0.4))进行处理。
2.2 批量归一化(BN层)
先对数据标准化,再对数据重构(缩放+平移),如下所示:
- λ 和 β 是可学习的参数,它相当于对标准化后的值做了一个线性变换,λ 为系数,β 为偏置;
- eps 通常指为 1e-5,避免分母为 0;
- E(x) 表示变量的均值;
- Var(x) 表示变量的方差;
批量归一化层在计算机视觉领域使用较多,具体使用方法我们到后面在给大家进行介绍。