正则化方法

正则化

1 数据集的划分

正常情况下,主要将数据集分为三种,如果只使用一种算法,可以只划分两种

1.1 训练集

用于训练

1.2 验证集

用于验证哪种算法更优

1.3 测试集

测试训练完成的模型准确率

2 偏差与方差

2.1 高偏差(欠拟合)

训练集测试集结果
15%20%欠拟合

2.2 高方差(过拟合)

训练集测试集结果
1%20%过拟合

3 修正网络

如果不幸出现高偏差或者方差,可以从下面几个角度入手修改

3.1 高偏差:

1.更复杂的网络

2.修改网络的结构、参数

3.寻找更好的特征值

3.2 高方差:

1.更多的数据

2.正则化

3.更适合的网络架构

4.适当减少特征

4 正则化

避免过拟合的最常用的方法,最好祈祷这种方法有作用,否则你就要更换网络模型或者进行漫无天日的寻找数据集的过程。

4.1 L1正则化

在原本的损失函数后面加上正则项
λ 2 m ∣ ∣ W ∣ ∣ ∣ ∣ W ∣ ∣ = λ m ∑ j = 1 m ∣ W ∣ \frac{\lambda}{2m}{||W||}\\ {||W||} = \frac{\lambda}{m}\sum_{j=1}^{m} |W| 2mλWW=mλj=1mW

4.2 L2正则化

在原本的损失函数后面加上正则项
λ 2 m ∣ ∣ W ∣ ∣ 2 ∣ ∣ W ∣ ∣ 2 为 W 所 有 元 素 的 平 方 和 \frac{\lambda}{2m}{||W||}^2\\ {||W||}^2 为W所有元素的平方和 2mλW2W2W
λ:正则化参数

通常设置为比较小的值,随着λ的增大,W的值会减小,这样保证了线性运算的结果保持在一个较小的区间内,比如:原来的线性运算结果为(-100,100)之间,经过L2正则化之后,范围在(-10,10)之间,这样在经过非线性运算时,看起来更像是一段线性运算,以减少非线性运算后的过拟合状态。

4.3 Dropout正则化:

随即丢弃一定数量的神经网络节点,用以修正过拟合状态。

通过设置丢弃率,比如,丢弃率为25%,则以随机1/4的概率丢弃该层的节点,以避免过拟合状态

下面是Dropout的常用方法

4.3.1 反向随机失活

假设我们使用的是一个三层的神经网络,主要分为以下几个步骤:

1.第三层的权重矩阵为W3,生成一个与W3相同大小的0-1的随机矩阵d3。

d3 = np.random.rand(W3.shape[0],W3.shape[1])

W 3 : [ 2 3 1 5 4 1 3 3 1 ] d 3 : [ 0.20295277 0.81966998 0.28544819 0.97917905 0.22021902 0.15454601 0.2466112 0.82815697 0.03148317 ] W3: \begin{bmatrix} 2 & 3 & 1\\ 5 & 4 & 1\\ 3 & 3 & 1\\ \end{bmatrix} \\ d3: \begin{bmatrix} 0.20295277 & 0.81966998 & 0.28544819\\ 0.97917905 & 0.22021902 & 0.15454601\\ 0.2466112 & 0.82815697 & 0.03148317\\ \end{bmatrix} W3:253343111d3:0.202952770.979179050.24661120.819669980.220219020.828156970.285448190.154546010.03148317

2.设置keep_prob(0-1),表示该层中节点保留的概率,并使用d3与keep_prob相比较,比krrp_prob小的置为1(true),大的置0(false).

d3 < keep_prob

keep_prob设为0.8,则输出结果为:

image-20210626110356633

3.再将W3与生成的bool矩阵逐元素相乘,生成新的矩阵W3

W3 = np.multiply(W3, d3)

此时W3为:
[ 2 0 1 0 4 1 3 0 1 ] \begin{bmatrix} 2 & 0 & 1\\ 0 & 4 & 1\\ 3 & 0 & 1\\ \end{bmatrix} 203040111
4.最后,最关键的一步来了,需要将W3除以keep_prob,保证输出的期望值与原来相同,保证与原来的输出不变

W3 = W3/keep_prob

此时的w3为:
[ 2.5 0 1.25 0 5 1.25 3.75 0 1.25 ] \begin{bmatrix} 2.5 & 0 & 1.25\\ 0 & 5 & 1.25\\ 3.75 & 0 & 1.25\\ \end{bmatrix} 2.503.750501.251.251.25
至此,第三层的Dropout就完成了,那么为什么能达到正则化的效果呢?

4.3.2 为什么Dropout能达到正则化的效果?

首先,我第一次使用Dropout层进行网络设计时,我觉得这不就是直接简化网络了吗?少设计几个神经单元不也一样能行?直到看了AlexNet网络模型的论文,才知道我小了,格局小了。

随机失活,每一次的训练都会选择不同的神经单元节点进行删除,这样不会过于依赖某一个或几个节点,因为每个节点都有可能会失活,会有收缩权重的平方范数的效果。

4.4 数据集增强正则化

并不是让你去获取更多的数据集,而是通过在原有数据集上修改获得更多的数据,比如将数据集中的图片反转或者截取主题的一部分等操作。

举个栗子,手写数字识别中,可以将原有的数字图片进行扭曲,缩放等操作获得更多的图片

这种获取的方法成本几乎为0,但肯定比不上完全不同的数据集,实际上可能是我方法不对,这种增强办法一次也没有奏效过,俺也不知道为什么。

4.5 早停止策略(early stopping)

跟名字一样,就是在未达到过拟合状态的时候就停止梯度下降的训练。

在这里插入图片描述

怎么说呢,感觉用处不大。。。。需要控制的因素太多,精度和过拟合问题无法同时满足,两者折中,中国人的性情总是调和的,折中的。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值