【深度学习】嘿马深度学习系统性知识教程第5篇:深度学习进阶,2.3 深度学习正则化【附代码文档】

58 阅读1分钟

教程全知识点简介:4.1.4 GRU(门控循环单元) 4.1.5 LSTM(长短记忆网络) 循环神经网络 4.2 词嵌入与NLP 学习目标 4.2.2 词嵌入 4.2.3 Word2Vec案例 4.3 seq2seq与Attention机制 4.3.2 注意力机制 4.3.3 机器翻译案例 4.3.4 集束搜索(Beam Search) 4.3.5 BLEU-机器翻译的自动评估方法 5.1 生成对抗网络(GAN) 高级主题 5.2 自动编码器 在职高新课-深度学习 要求 目标 课程安排 环境要求 1.1 深度学习介绍 深度学习与神经网络 1.2 神经网络基础 1.3 浅层神经网络 深度学习进阶 2.1 多分类与TensorFlow 5、得出每次训练的准确率(通过真实值和预测值进行位置比较,每个样本都比较) 4.7.3.6 完整代码 2.2 梯度下降算法改进 2.3.4 其它正则化方法 2.4 BN与神经网络调优 3.1 图像数据与边缘检测 3.2 卷积神经网络(CNN)原理 3.3 经典分类网络结构

👉👉👉   gitee.com/yinuo112/AI…

深度学习进阶

知道softmax回归的原理
应用softmax_cross_entropy_with_logits实现softamx以及交叉熵损失计算
应用matmul实现多隐层神经网络的计算
应用TensorFlow完成Mnist手写数字势识别

了解深度学习遇到的一些问题
知道批梯度下降与MiniBatch梯度下降的区别
知道指数加权平均的意义
知道动量梯度、RMSProp、Adam算法的公式意义
知道学习率衰减方式
知道参数初始化策略的意义

了解偏差与方差的意义
知道L2正则化与L1正则化的数学意义
知道Droupout正则化的方法
了解早停止法、数据增强法的其它正则化方式

知道常用的一些神经网络超参数
知道BN层的意义以及数学原理

2.3 深度学习正则化

学习目标

  • 目标

    • 了解偏差与方差的意义
    • 知道L2正则化与L1正则化的数学意义
    • 知道Droupout正则化的方法
    • 了解早停止法、数据增强法的其它正则化方式
  • 应用

2.3.1 偏差与方差

2.3.1.1 数据集划分

首先我们对机器学习当中涉及到的数据集划分进行一个简单的复习

  • 训练集(train set):用训练集对算法或模型进行训练过程;
  • 验证集(development set):利用验证集(又称为简单交叉验证集,hold-out cross validation set)进行交叉验证选择出最好的模型
  • 测试集(test set):最后利用测试集对模型进行测试,对学习方法进行评估。

小数据量的时代,如 100、1000、10000 的数据量大小,可以将数据集按照以下比例进行划分:

  • 无验证集的情况:70% / 30%
  • 有验证集的情况:60% / 20% / 20%

而在如今的大数据时代,拥有的数据集的规模可能是百万级别的,所以验证集和测试集所占的比重会趋向于变得更小。

  • 100 万数据量:98% / 1% / 1%
  • 超百万数据量:99.5% / 0.25% / 0.25%

以上这些比例可以根据数据集情况选择。

2.3.1.2 偏差与方差的意义

**“偏差-方差分解”(bias-variance decomposition)**是解释学习算法泛化性能的一种重要工具。

泛化误差可分解为偏差、方差与噪声,泛化性能是由学习算法的能力数据的充分性以及学习任务本身的难度所共同决定的。

  • 偏差:度量了学习算法的期望预测与真实结果的偏离程度,即刻画了学习算法本身的拟合能力
  • 方差:度量了同样大小的训练集的变动所导致的学习性能的变化,即刻画了数据扰动所造成的影响
  • 噪声:表达了在当前任务上任何学习算法所能够达到的期望泛化误差的下界,即刻画了学习问题本身的难度

那么偏差、方差与我们的数据集划分到底有什么关系呢?

  • 1、训练集的错误率较小,而验证集/测试集的错误率较大,说明模型存在较大方差,可能出现了过拟合
  • 2、训练集和测试集的错误率都较大,且两者相近,说明模型存在较大偏差,可能出现了欠拟合
  • 3、训练集和测试集的错误率都较小,且两者相近,说明方差和偏差都较小,这个模型效果比较好。

所以我们最终总结,方差一般指的是数据模型得出来了,能不能对未知数据的扰动预测准确。而偏差说明在训练集当中就已经误差较大了,基本上在测试集中没有好的效果。

所以如果我们的模型出现了较大的方差或者同时也有较大的偏差,该怎么去解决?

2.3.1.3 解决方法

对于高方差,有以下几种方式:

  • 获取更多的数据,使得训练能够包含所有可能出现的情况
  • 正则化(Regularization)
  • 寻找更合适的网络结构

对于高偏差,有以下几种方式:

  • 扩大网络规模,如添加隐藏层或者神经元数量
  • 寻找合适的网络架构,使用更大的网络结构,如AlexNet
  • 训练时间更长一些

不断尝试,直到找到低偏差、低方差的框架。

2.3.2 正则化(Regularization)

正则化即在成本函数中加入一个正则化项(惩罚项),惩罚模型的复杂度,防止网络过拟合

2.3.2.1 逻辑回归的L1与L2正则化

逻辑回归的参数W数量根据特征的数量而定,那么正则化如下

  • 逻辑回归的损失函数中增加L2正则化

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

其中的L2范数可以理解:λ2m∣∣w∣∣22=λ2m∑j=1nxwj2=λ2mwTw\frac{\lambda}{2m}{||w||}^2_2=\frac{\lambda}{2m}\sum_{j=1}^{n_x}w^2_j = \frac{\lambda}{2m}w^Tw​2m​​λ​​∣∣w∣∣​2​2​​=​2m​​λ​​∑​j=1​n​x​​​​w​j​2​​=​2m​​λ​​w​T​​w

解释:所有w参数的平方和的结果

  • 逻辑回归的损失函数中增加L1正则化

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

其中L2范数可以理解为:λ2m∣∣w∣∣1=λ2m∑j=1nx∣wj∣\frac{\lambda}{2m}{||w||}1 = \frac{\lambda}{2m}\sum{j=1}^{n_x}{|w_j|}​2m​​λ​​∣∣w∣∣​1​​=​2m​​λ​​∑​j=1​n​x​​​​∣w​j​​∣

注:其中,λ 为正则化因子,是超参数。由于 L1 正则化最后得到 w 向量中将存在大量的 0,使模型变得稀疏化,因此 L2 正则化更加常用。

2.3.2.2 正则化项的理解

在损失函数中增加一项,那么其实梯度下降是要减少损失函数的大小,对于L2或者L1来讲都是要去减少这个正则项的大小,那么也就是会减少W权重的大小。这是我们一个直观上的感受。

  • 接下来我们通过方向传播来理解这个其中的L2,对于损失函数我们要反向传播求参数梯度:

(1)dW=∂L∂w+λmWdW = \frac{\partial L}{\partial w}+ \frac{\lambda}{m} {W}dW=​∂w​​∂L​​+​m​​λ​​W

前面的默认损失函数的梯度计算结果默认为backprop,那么更新的参数就为

(2)W:=W−αdWW := W - \alpha dWW:=W−αdW

−−>W:=W−α(∂L∂w+λmW)-->W := W - \alpha(\frac{\partial L}{\partial w} + \frac{\lambda}{m}W)−−>W:=W−α(​∂w​​∂L​​+​m​​λ​​W)

−−>=W−αλmW−α∗∂L∂w-->=W - \frac{\alpha \lambda}{m}W - \alpha*\frac{\partial L}{\partial w}−−>=W−​m​​αλ​​W−α∗​∂w​​∂L​​

所以每次更新的时候都会让W(1−αλm)W(1 - \frac{\alpha \lambda}{m})W(1−​m​​αλ​​)权重衰减

2.3.2.3 神经网络中的正则化

神经网络中的正则化与逻辑回归相似,只不过参数W变多了,每一层都有若干个权重,可以理解成一个矩阵

我们把w[l]w[l]w[l]

∥w[l]∥F2=∑i=1n[l−1]∑j=1nl2{\begin{Vmatrix}w^{[l]}\end{Vmatrix}}^2_F = \sum^{n^{[l-1]}