避免过拟合的方法

1. Weight Decay 权重衰减

​ 等价于L2范数正则化。为模型损失函数添加惩罚项,新的损失函数为:
L = l ( w , b ) + λ 2 ∣ ∣ w ∣ ∣ 2 w ← w − η ∂ L ∂ w L = l(w,b) + \frac{\lambda}{2}||w||^2\\ w \larr w - \eta \frac{\partial L}{\partial w}\\ L=l(w,b)+2λw2wwηwL

λ \lambda λ一般是一个很小的值,如0.01,更新的权值可以转化为 ( 1 − η λ ) w − η ∂ l ∂ w (1-\eta \lambda)w - \eta \frac{\partial l}{\partial w} (1ηλ)wηwl,即在更新权值前将其乘上一个接小于1的数,使权重的参数元素接近0。

2. Dropout 丢弃法

​ 对某个隐层使用dropout,以概率p丢弃单元(有p的概率 h i h_i hi的输出会被置为0)。有些类似bagging的思想。相当于同时对一群共享参数的网络训练。训练时间更长,鲁棒性更好。

class dropout:
    def __init__(self, p):
        self.dropout_ratio = p
        self.mask = None
    
    # 第一种实现
    def forward1(self, x, train_flag=True):
        if train_flag:
            self.mask = np.random.rand(*x.shape) > self.dropout_ratio # 以p的概率丢弃
            return x * self.mask
        else:
            return x * (1 - self.dropout_ratio)   # 测试时乘1-p
    
    # 第二种实现
    def forward2(self, x, train_flag=True):
        if train_flag:
            self.mask = np.random.rand(*x.shape) > self.dropout_ratio # 以p的概率丢弃
            return x * self.mask /1-p)      # inverted dropout 训练时除以1-p进行缩放
        else:
            return x                          # 预测时不进行操作
    
    def backward(self, dout):
		return dout * self.mask

​ 由于dropout添加了随机性,如果不进行处理,训练和测试是的输出期望将不一致。z为random mask,表示神经网络中被置0的项。通过积分边缘化随机性:
y = f ( x ) = E z ( f ( x , z ) ) = ∫ p ( z ) f ( x , z ) d z y = f(x) = E_z(f(x,z)) = \int p(z)f(x,z)dz y=f(x)=Ez(f(x,z))=p(z)f(x,z)dz
但是这种积分无法计算,因此,为了平均这种随机性,通过采样来逼近这个积分。对z多次采样,然后在测试时进行平均化。

​ dropout一般用在全连接层或卷积层。卷积层通常将feature map的均值调整为0而不是将所有输出均值调整为0。

3. Batch Normalization 批正规化

​ 调整各层的激活值分布,使其拥有适当的广度,向神经网络中插入对数据进行正规化的层,以进行学习时的mini-batch为单位进行正规化,使数据的均值为0,方差为1,减小数据分布的偏向。

μ B ← 1 m Σ i = 0 m x i σ B ← 1 m Σ i = 0 m ( x i − μ B ) 2 x ^ i ← x i − μ B σ B 2 + ϵ \begin{aligned} \mu _B &\larr \frac{1}{m} \Sigma_{i=0}^m x_i \\ \sigma _B &\larr \frac{1}{m} \Sigma_{i=0}^m (x_i - \mu _B)^2 \\ \hat x_i &\larr \frac{x_i-\mu_B}{\sqrt{\sigma_B^2+\epsilon}} \end{aligned} μBσBx^im1Σi=0mxim1Σi=0m(xiμB)2σB2+ϵ xiμB

​ 其中 μ B , σ B 2 \mu_B, \sigma_B^2 μB,σB2为mini-batch的m个输入数据的均值和方差。
y i ← γ x ^ i + β y_i \larr \gamma \hat x_i + \beta yiγx^i+β

​ 接着对正规化的数据进行缩放和平移变换, γ , β \gamma, \beta γ,β为缩放参数和平移,是学习参数,一开始 γ = 1 , β = 0 \gamma=1, \beta=0 γ=1,β=0,然后通过学习调整到合适的值。

Batch Norm的优点:

  1. 可以使学习快速进行(增大学习率)
  2. 不那么依赖初始值
  3. 抑制过拟合
dropout 和Batch Norm的思想都是在训练期间给网络添加一些随机性,以防止其过拟合数据,在测试时希望抵消随机性,提升模型的泛化能力。

4. Early Stop 提前终止

5. Data Augmentation 数据增强

6. 对于传统机器学习:

(1)从数据入手,获得更多的数据集

(2)降低模型复杂度

(3)正则化

(4)集成学习方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值