PyTorch实现L1,L2正则化以及Dropout

    xiaoxiao2021-04-17  247

    PyTorch实现L1,L2正则化以及Dropout

    了解知道Dropout原理用代码实现正则化(L1、L2、Dropout)Dropout的numpy实现PyTorch中实现dropout

    1.Dropout原理 Dropout是防止过拟合的一种方法(过拟合overfitting指:模型在训练数据上损失函数较小,预测准确率较高;但是在测试数据上损失函数比较大,预测准确率较低。) 训练神经网络模型时,如果训练样本较少,为了防止模型过拟合,Dropout可以作为一种优化方法。Dropout是Hintion提出的。Dropout是指在模型训练时随机让网络某些隐含层节点的权重不工作,不工作的那些节点可以暂时认为不是网络结构的一部分,但是它的权重得保留下来。 dropout强迫一个神经单元,和随机挑选出来的其他神经单元共同工作,达到好的效果。消除减弱了神经元节点间的联合适应性,增强了泛化能力。 即:在前向传播的时候,让某个神经元的激活值以一定的概率p停止工作,这样可以使模型泛化性更强,因为它不会太依赖某些局部的特征,如图1所示。 dropout噪声迫使网络在有限的数据里学习到有用的信息。 2.正则化 防止过拟合的另外一种方式就是降低模型的复杂度,一种方式就是在cost函数中加入正则化项,正则化项可以理解为复杂度,cost越小越好,但cost加上正则项之后,为了使cost小,就不能让正则项变大,也就是不能让模型更复杂,这样就降低了模型复杂度,也就降低了过拟合。这就是正则化。正则化也有很多种,常见为两种L2和L1。

    2.1 L1正则化 L1正则化是指权值向量w中各个元素的绝对值之和,通常表示为||w||1 L2正则化是指权值向量w中各个元素的平方和再求平方根,通常表示为||w||2 L1 L2 不同点:

    L1可以让一部分特征的系数缩小到0,从而间接实现特征选择。所以L1适用于特征之间有关联的情况。

    L2让所有特征的系数都缩小,但是不会减为0,它会使优化求解稳定快速。所以L2适用于特征之间没有关联的情况

    L2 regularizer :使得模型的解偏向于 norm 较小的 W,通过限制 W 的 norm 的大小实现了对模型空间的限制,从而在一定程度上避免了 overfitting 。不过 ridge regression 并不具有产生稀疏解的能力,得到的系数 仍然需要数据中的所有特征才能计算预测结果,从计算量上来说并没有得到改观。会选择更多的特征,这些特征都会接近于0。 最优的参数值很小概率出现在坐标轴上,因此每一维的参数都不会是0。当最小化||w||时,就会使每一项趋近于0 L1 regularizer : 它的优良性质是能产生稀疏性,因为最优的参数值很大概率出现在坐标轴上,这样就会导致某一维的权重为0 ,产生稀疏权重矩阵, 导致 W 中许多项变成零。 稀疏的解除了计算量上的好处之外,更重要的是更具有“可解释性”

    def Regularization(model): L1=0 L2=0 for param in model.parameters(): L1+=torch.sum(torch.abs(param)) L2+=torch.norm(param,2) return L1,L2

    2.2 L2 正则化

    3.Pytorch上 的 Dropout

    model = nn.Sequential(nn.Linear(n_in, n_h), torch.nn.Dropout(0.4), ###############dropout nn.ReLU(), nn.Linear(n_h, n_out), torch.nn.Dropout(0.5), nn.Sigmoid())

    未完 参考

    最优化方法:L1和L2正则化regularization https://blog.csdn.net/jinping_shi/article/details/52433975

    dropout理解

    https://blog.csdn.net/dod_jdi/article/details/78379781

    为什么随机性对于深度学习如此重要? https://www.leiphone.com/news/201608/G0lXMy6RkhbZ9NO4.html

    神经网络的提升方法(2)——正则化 https://blog.csdn.net/sinat_29819401/article/details/60885679


    最新回复(0)