Repeat the Wheel of Deep Neural Networks - DNN造轮记 (3)

本文介绍了深度神经网络(DNN)的正则化技术,包括L1和L2范数以及dropout方法。L1范数涉及权重绝对值之和,而L2范数涉及权重平方和。dropout是一种更常见的正则化策略,通过在训练过程中随机忽略部分神经元来防止过拟合。正向传播时,dropout层会根据保留概率选择性地激活节点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

提要

Regularization

Regularization的目标是防止过拟合(overfitting)。在logic regression中,最常见的方法是L2 Normalization。在神经网络中,L2方法不是那么常见,我们经常采用的是dropout。

L1 / L2 Norm

所谓L1,是指用所有weights(不包含bias)的绝对值之和最为惩罚函数。所谓L2,是指用所有weights的平方和作为惩罚函数。下面以L2 Normalization为例。

JL2=Jorigin+λl,i,jw2l,i,jJL2wl,i,j=Joriginwl,i,j+2λwl,i,j

通过合理的选择λ,可以有效的限制模型的复杂度(避免出现过大的权重),从而达到避免过拟合的效果。
dropout

Dropout是一种更新更常用的Regularization方法。Dropout的意思是在选定层中,每个mini-batch随机的把一部分节点屏蔽掉,使其不参与运算。一般我们会给定一个Keep probability(pk),从而控制有多少的节点被屏蔽掉。

Dropout layer的正向运算如下

S=X×W+bY=f(X)Mpk

其中,M是一个跟Y具有相同形状的{0,1}矩阵,其中1的比例为pk
dS=dYMf(X)dX=dS×wT

由于dropout的目的在于降低训练阶段的过拟合,所以在inference的过程中我们只需要将pk设为1就可以关闭dropout。
代码
class dropout_layer(object):
    def __init__(self, cfg=dict()):
        self.cfg = cfg

    def forward(self, x):
        return self.dropout_vector(x, ff=True)

    def backward(self, x, gy):
        return self.dropout_vector(gy, ff=False)

    def dropout_vector(self, x_, ff=True):
        if self.cfg['keep_prob'] == 1:
            return x_
        x = np.copy(x_)
        if ff:
            self.dropmask = np.random.rand(*x.shape) < self.cfg['keep_prob']
        x *= self.dropmask.astype('int') / self.cfg['keep_prob']
        return x
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值