文章目录

  • 过拟合 overfitting
  • 数据增强
  • 正则化项
  • 范数 norm
  • L1 正则 Lasso regularizer
  • L2 正则 Ridge Regularizer / Weight Decay
  • L1 与 L2 的差异
  • Dropout

过拟合 overfitting

  • 在训练数据不够多,或者模型过于复杂时,常常会导致模型对训练数据集过度拟合。

  • 其直观的表现如下图所示:随着训练过程的进行,在训练集上的错误率渐渐减小,但是在验证集上的错误率却反而渐渐增大。

  • 正则化技术是保证算法泛化能力的有效工具。

数据增强

数据增强是提升算法性能、满足深度学习模型对大量数据的需求的重要工具。数据增强通过向训练数据添加转换或扰动来人工增加训练数据集。数据增强技术如:水平或垂直翻转图像、裁剪、色彩变换、扩展和旋转通常应用在视觉表象和图像分类中。

正则化项

最基本的正则化方法,是在代价函数中添加惩罚项,对复杂度高的模型进行“惩罚”。正则化一般具有如下形式:

J(w,b)=1m∑i=1mL(y^,y)+λR(w)J(w,b)= \frac{1}{m} \sum_{i=1}^{m}L(\hat{y},y)+\lambda R(w)J(w,b)=m1​i=1∑m​L(y^​,y)+λR(w)

其中:

  • L(y^,y)L(\hat{y},y)L(y^​,y) 是经验风险项

  • λR(w)\lambda R(w)λR(w) 是正则项

  • λ≥0λ≥0λ≥0 为调整两者之间关系的系数

  • λλλ 值可以使用交叉验证的方法尝试一系列可能的值,比如从 0,0.01,0.02,0.04 … 开始,一直试下去,将步长设为2倍的速度增长。

常见的正则项有 L1L1L1 正则项 和 L2L2L2 正则项。

范数 norm

  • L1L_1L1​ 范数: ∣∣x∣∣1=∑i=1N∣xi∣||x||_1 = \sum_{i=1}^N|x_i|∣∣x∣∣1​=∑i=1N​∣xi​∣

    即向量元素绝对值之和。

  • L2L_2L2​ 范数: ∣∣x∣∣2=∑i=1Nxi2||\textbf{x}||_2 =\sqrt{\sum_{i=1}^Nx_i^2}∣∣x∣∣2​=∑i=1N​xi2​​

    即 Euclid范数(欧几里得范数),常用计算向量长度。

  • LpL_pLp​ 范数:∣∣x∣∣p=(∑i=1N∣xi∣p)1p||\textbf{x}||_p = (\sum_{i=1}^N|x_i|^p)^{\frac{1}{p}}∣∣x∣∣p​=(∑i=1N​∣xi​∣p)p1​

    即向量元素绝对值的 ppp 次方之和的 1/p1/p1/p 次幂

L1 正则 Lasso regularizer

J(w,b)=1m∑i=1mL(y^,y)+λ∣w∣J(w,b)=\frac{1}{m} \sum_{i=1}^{m}L(\hat{y},y)+\lambda|w|J(w,b)=m1​i=1∑m​L(y^​,y)+λ∣w∣

  • L1正则化,是一个相对常用的正则化方法。

  • 正则化目的:减少参数的绝对值总和。

L2 正则 Ridge Regularizer / Weight Decay

J(w,b)=1m∑i=1mL(y^,y)+12λw2J(w,b)=\frac{1}{m} \sum_{i=1}^{m}L(\hat{y},y)+\frac{1}{2}\lambda w^2J(w,b)=m1​i=1∑m​L(y^​,y)+21​λw2

  • L2 正则化,可能是最常用的正则化方法了

  • 正则化目的:减少参数的平方值总和。

  • 系数 12\frac{1}{2}21​ 主要是为了后面的求导操作方便,加上 12\frac{1}{2}21​ 后,该式子关于 www 梯度就是 λw\lambda wλw 而不是 2λw2\lambda w2λw 了。

  • L2 正则化,可以直观理解为它对于大数值的权重向量进行严厉惩罚,倾向于更加分散的权重向量,使网络更倾向于使用所有输入特征,而不是严重依赖输入特征中某些小部分特征。

    举个例子,假设输入向量 x=[1,1,1,1]x=[1,1,1,1]x=[1,1,1,1],两个权重向量 w1=[1,0,0,0],w2=[0.25,0.25,0.25,0.25]w_1=[1,0,0,0],w_2=[0.25,0.25,0.25,0.25]w1​=[1,0,0,0],w2​=[0.25,0.25,0.25,0.25]。那么 w1Tx=w2T=1w^T_1x=w^T_2=1w1T​x=w2T​=1,两个权重向量都得到同样的内积,但是 w1w_1w1​ 的 L2 惩罚是 1.01.01.0,而 w2w_2w2​ 的 L2 惩罚是 0.250.250.25。

    因此,根据 L2 惩罚来看,w2w_2w2​ 更好,因为它的正则化损失更小。从直观上来看,这是因为 w2w_2w2​ 的权重值更小且更分散。既然 L2L2L2 惩罚倾向于更小更分散的权重向量,这就会鼓励分类器最终将所有维度上的特征都用起来,而不是强烈依赖其中少数几个维度。

  • 在梯度下降时,使用 L2 正则化意味着所有的权重都以 www += - λ∗w\lambda *wλ∗w 向着 0 线性下降。

L1 与 L2 的差异

L1 与 L2 的差异

  • 假设个体 xxx 只有两个分量,则 www 也只有两个分量 w1,w2w1,w2w1,w2,将其作为两个坐标轴,对于目标函数:

    J(w,b)=1m∑i=1m(yi−wTxi)2+λR(w)J(w,b)= \frac{1}{m} \sum_{i=1}^{m}(y_i -w^Tx_i)^2+\lambda R(w)J(w,b)=m1​i=1∑m​(yi​−wTxi​)2+λR(w)

  • 先绘出目标函数中 (yi−wTxi)2(y_i -w^Tx_i)^2(yi​−wTxi​)2 的平方误差项等值线(平方误差项取值相同的点的连线)。

  • 再分别绘制出 L1 范数和 L2 范数的等值线。

  • 目标函数的,要在平方误差项与正则化项之间折中,即出现在图中的等值线交点处。

  • 可发现采用 L1 范数时,平方误差等值线与正则化等值线的交点经常出现在坐标轴上,即 w1w1w1 或 w2w2w2 为 000 。

  • 而采用 L2 范数时,交点经常出现在象限中,即 w1w1w1 和 w2w2w2 均不为 000,故采用 L1 正则化项更易得到稀疏解。

L1 与 L2 的使用

  • 由于 L1 正则化得到的是稀疏解,它会让权重向量在最优化的过程中变得稀疏(即非常接近0),使用 L1 正则化的神经元最后使用的是它们最重要的输入特征的稀疏子集。

  • 相较 L1 正则化,L2 正则化中的权重向量大多是分散的小数字。

  • 在实践中,如果不是特别关注某些明确的特征选择,一般说来 L2 正则化都会比 L1 正则化效果好。

Dropout

L1、L2 正则化是通过修改代价函数来实现的,而 Dropout 则是通过修改神经网络本身来实现的,它是在训练网络时用的一种技巧。

随机失活 (dropout)

  • 在训练网络时,对于完整的网络结构(如左图),每次迭代时,都让神经元以超参数 ppp 的概率被随机地停用(Dropout),即输出置为0,如右图。

  • 在训练时,保持输入输出层不变,数据前向传播后,对得到的损失结果进行反向传播,更新神经网络中的权值时,不更新被停用的单元。

  • 在预测时,不进行随机失活,但是神经元的输出都要乘以超参数 ppp,调整其数值范围。以 p=0.5p=0.5p=0.5 为例,在预测时神经元必须把它们的输出减半,这是因为在训练的时候它们的输出只有一半。

""" 普通版随机失活: 不推荐实现 """p = 0.5 # 激活神经元的概率. p值更高 = 随机失活更弱def train_step(X):""" X中是输入数据 """# 3层neural network的前向传播H1 = np.maximum(0, np.dot(W1, X) + b1)U1 = np.random.rand(*H1.shape) < p # 第一个随机失活遮罩H1 *= U1 # drop!H2 = np.maximum(0, np.dot(W2, H1) + b2)U2 = np.random.rand(*H2.shape) < p # 第二个随机失活遮罩H2 *= U2 # drop!out = np.dot(W3, H2) + b3# 反向传播:计算梯度... (略)# 进行参数更新... (略)def predict(X):# 前向传播时模型集成H1 = np.maximum(0, np.dot(W1, X) + b1) * p # 注意:激活数据要乘以pH2 = np.maximum(0, np.dot(W2, H1) + b2) * p # 注意:激活数据要乘以pout = np.dot(W3, H2) + b3

反向随机失活(inverted dropout)

  • 相对于上述的随机失活,实际应用中更倾向使用反向随机失活(inverted dropout),它是在训练时就进行数值范围调整,从而让前向传播在测试时保持不变。

  • 这样做还有一个好处,无论你决定是否使用随机失活,预测方法的代码可以保持不变。反向随机失活的代码如下:

"""
反向随机失活: 推荐实现方式.
在训练的时候drop和调整数值范围,测试时不做任何事.
"""p = 0.5 # 激活神经元的概率. p值更高 = 随机失活更弱def train_step(X):# 3层neural network的前向传播H1 = np.maximum(0, np.dot(W1, X) + b1)U1 = (np.random.rand(*H1.shape) < p) / p # 第一个随机失活遮罩. 注意/p!H1 *= U1 # drop!H2 = np.maximum(0, np.dot(W2, H1) + b2)U2 = (np.random.rand(*H2.shape) < p) / p # 第二个随机失活遮罩. 注意/p!H2 *= U2 # drop!out = np.dot(W3, H2) + b3# 反向传播:计算梯度... (略)# 进行参数更新... (略)def predict(X):# 前向传播时模型集成H1 = np.maximum(0, np.dot(W1, X) + b1) # 不用数值范围调整了H2 = np.maximum(0, np.dot(W2, H1) + b2)out = np.dot(W3, H2) + b3

Dropout 对过拟合的解决

  • 取平均的作用:

    用相同的训练数据去训练 n 个不同的神经网络,一般会得到 n 个不同的结果,此时我们可以采用 n 个结果取均值去决定最终结果。

    取均值策略通常可以有效防止过拟合问题。因为不同的网络可能产生不同的过拟合,取均值则有可能让一些 “相反的” 拟合互相抵消。

    dropout 随机停用不同的隐层神经元,导致在每次迭代时都使用了不同的网络结构,就类似在训练不同的网络,整个 dropout 过程就相当于对很多个不同的神经网络取平均。

  • 减少神经元之间复杂的共适应关系:

    因为 dropout 程序导致两个神经元不一定每次都在一个 dropout 网络中出现。这样权值的更新不再依赖于有固定关系的隐含节点的共同作用,阻止了某些特征仅仅在其它特定特征下才有效果的情况,迫使网络去学习更加鲁棒的特征。

正则化方法:数据增强、regularization、dropout相关推荐

  1. 一文解决机器学习中的过拟合与欠拟合问题(正则化,数据增强,Dropout)

    一文解决机器学习中的过拟合与欠拟合问题(正则化,数据增强,Dropout,提前终止) 生活中的过拟合与欠拟合现象 过拟合与欠拟合的概念 解决过拟合与欠拟合问题的四大金刚 正则化 数据增强 Dropou ...

  2. tensorflow中的正则化函数在_tensorflow中的正则化及数据增强

    正则化: 一般可以通过减少特征或者惩罚不重要特征的权重来缓解过拟合,但是我们通常不知道该惩罚那些特征的权重,而正则化就是帮助我们惩罚特征权重的,即特征的权重也会成为模型的损失函数一部分.可以理解为, ...

  3. NLP数据增强方法总结:EDA、BT、MixMatch、UDA

    1. 数据增强的背景和应用场景 随着AI技术的逐步发展,更好的神经网络模型对数据规模的要求也逐步提升.而在分类任务中,若不同类别数据量相差很大,模型则会出现过拟合现象,严重影响预测的正确性. 从广义上 ...

  4. 人机交互系统(3.1)——NLP文本数据增强方法

    一.数据增强的背景和应用场景 随着AI技术的逐步发展,更好的神经网络模型对数据规模的要求也逐步提升.而在分类任务中,若不同类别数据量相差很大,模型则会出现过拟合现象,严重影响预测的正确性. 从广义上来 ...

  5. 【NLP】哈工大|NLP数据增强方法?我有15种

    十一假期过的太快了,不知道你们缓过来没有,没有的话今天我们就来一起读一篇综述缓缓,弥补假期没学习的遗憾. 这篇40多页的综述出自哈工大车万翔老师的团队,一共总结了15种NLP可以用到的数据增强方法.优 ...

  6. 哈工大|NLP数据增强方法?我有15种

    文 | rumor 源 | 李rumor 卷友们好,我是rumor. 十一假期过的太快了,不知道你们缓过来没有,没有的话今天我们就来一起读一篇综述缓缓,弥补假期没学习的遗憾. 这篇40多页的综述出自哈 ...

  7. NLP中数据增强的方法

    为什么使用数据增强 当在一些任务中需要大量数据,但是实际上数据量不足时,可以考虑使用数据增强的方式增加数据量 数据增强的方法 数据增强主要有两种方法: 法一:简单数据增强(Easy Data Augm ...

  8. 数据增强实测之cutout

    cutout是2017年提出的一种数据增强方法,想法比较简单,即在训练时随机裁剪掉图像的一部分,也可以看作是一种类似dropout的正则化方法. Improved Regularization of ...

  9. 神经翻译笔记4扩展b. RNN的正则化方法

    文章目录 神经翻译笔记4扩展b. RNN的正则化方法 层归一化 对dropout的扩展 集大成的方法:AWD-LSTM 正则化方法 不同形式的dropout 变长的反向传播 嵌入共享 嵌入维度与隐藏层 ...

  10. 脑电图分类任务中深度神经网络模型的数据增强:综述2021

    Data Augmentation for Deep Neural Networks Model in EEG Classification Task: A Review 脑电图(EEG)的分类是测量 ...

最新文章

  1. oracle dba_tables各字段含义
  2. 用Go 构建一个区块链 -- Part 5: 地址
  3. 技术图文:Python描述符 (descriptor) 详解
  4. Meta AI发布图音文大一统模型Data2vec,4天在GitHub揽1.5万星
  5. 实战SSM_O2O商铺_13【商铺注册】View层之初始化页面数据
  6. 16 FI配置-财务会计-为准备激活销售会计核算的成本
  7. Zookeeper-Watcher(事件通知)
  8. 继云计算巨头失火事件后,微软决定送数据中心去“泡澡”!
  9. Scp远程批量执行命令
  10. 九章算法笔记 8.哈希表与堆 Hash Heap
  11. 5款工具帮你一键快速图片去水印(附送复杂水印去除教程)
  12. 未来教育题库 * **java二级第28套试题** *
  13. A股的日内交易如何进行?
  14. 手淘首页流量突然暴跌的原因,怎么办?
  15. Jmeter中文设置
  16. 华硕固件默认ip,不能进入路由的管理后台了?千万别慌张
  17. 北大新任校长王恩哥的10句话
  18. 一个简单的字幕滚动程序~~
  19. 计算机无法登陆账户 让注销,电脑开机出现登陆账户,点了以后就马上注销,怎么处理?...
  20. Flare动画进阶——创建可互动的一拳超人动画

热门文章

  1. 【开机自启】属于你的个性化!八步完成喜欢的软件开机自启!
  2. 如何通过缓存来提升系统性能
  3. 你真的会正确使用日志吗?
  4. 一定是你想要的微服务资源springboot、springcloud、docker、dubbo
  5. java面试题大合集(开发者必看二)
  6. Toast的功能和用法
  7. 【KVM系列03】KVM的I/O 全虚拟化和准虚拟化
  8. 从喧闹与富有中搞懂搜索和拓扑
  9. linux入门与常用指令
  10. RabbitMQ(二)工作队列