吴恩达深度学习课程笔记-Classes 2

简介:

Classes 2 深度学习

1 深度学习实践

1.1 训练集、验证集、测试集(Train / Dev / Test sets)

对训练执行算法,通过验证集或简单交叉验证集选择最好的模型。
在机器学习发展的小数据量时代,常见做法是将所有数据三七分,就是人们常说的 70%验证集,30%测试集,如果没有明确设置验证集,也可以按照 60%训练,20%验证和 20%测试集来划分。
在这里插入图片描述
在这里插入图片描述

  • 假设我们有 100 万条数据,其中 1 万条作为验证集,1 万条作为测试集,100 万里取 1 万,比例是 1%,即:训练集占 98%,验证集和测试集各占 1%。对于数据量过百万的应用,训练集可以占到 99.5%,验证和测试集各占 0.25%,或者验证集占 0.4%,测试集占 0.1%
  • 通常将样本分成训练集,验证集和测试集三部分,数据集规模相对较小,适用传统的划分比例,数据集规模较大的,验证集和测试集要小于数据总量的 20%或 10%
  • 要确保验证集和测试集的数据来自同一分布

1.2 偏差与方差

  • 欠拟合:高偏差 high bias
  • 过拟合:高方差 high variance

在这里插入图片描述
在这里插入图片描述

1.3 机器学习基础

  • 高偏差解决方法:欠拟合,增大网络模型、更多的时间训练、更好的优化方法
  • 高方差解决方法:过拟合,增加训练数据、减小网络模型、加入正则化

1.4 正则化

深度学习可能存在过拟合问题——高方差,有两个解决方法,一个是正则化,另一个是准备更多的数据。但准备更多的数据比较耗时耗力。
以逻辑回归损失函数为例:
在这里插入图片描述

  • L0正则:参数为零的个数,难求解
  • L1正则:各个参数绝对值之和,侧重于让其为0(LASSO)
  • L2正则: 各个参数的平方的和的开方值,侧重于让参数稀疏化(Ridge)

实现参数的稀疏有什么好处吗?

  • 可以简化模型,避免过拟合。因为一个模型中真正重要的参数可能并不多,如果考虑所有的参数起作用,那么可以对训练数据可以预测的很好,但是对测试数据就不行了
  • 参数变少可以使整个模型获得更好的可解释性

参数值越小代表模型越简单吗?

  • 是的。为什么参数越小,说明模型越简单呢,这是因为越复杂的模型,越是会尝试对所有的样本进行拟合,甚至包括一些异常样本点,这就容易造成在较小的区间里预测值产生较大的波动,这种较大的波动也反映了在这个区间里的导数很大,而只有较大的参数值才能产生较大的导数。因此复杂的模型,其参数值会比较大。

总结

  • L1会趋向于产生少量的特征,而其他的特征都是0,而L2会选择更多的特征,这些特征都会接近于0。Lasso在特征选择时候非常有用,而Ridge就只是一种规则化而已
  • 在所有特征中只有少数特征起重要作用的情况下,选择Lasso L1比较合适,因为它能自动选择特征。而如果所有特征中,大部分特征都能起作用,而且起的作用很平均,那么使用Ridge L2也许更合适
  • 一般倾向于选择L2正则

𝜆是正则化参数,通常使用验证集或交叉验证集来配置这个参数,尝试各种各样的数据,寻找最好的参数,要考虑训练集之间的权衡,把参数设置为较小值,这样可以避免过拟合

如果正则化参数𝜆变得很大,参数𝑊很小,𝑧也会相对变小,此时忽略𝑏的影响,𝑧会相对变小,实际上,𝑧的取值范围很小,曲线函数𝑡𝑎𝑛ℎ会相对呈线性,整个神经网络会计算离线性函数近的值,这个线性函数非常简单,并不是一个极复杂的高度非线性函数,不会发生过拟合。

1.5 dropout正则化

在这里插入图片描述
实现方式:反向随机失活(inverted dropout)
在测试阶段,当我们评估一个神经网络时,也就是用绿线框标注的反向随机失活方法,使测试阶段变得更容易
反向随机失活(inverted dropout)方法通过除以 keep-prob,确保激活值a的期望值不变。
在测试阶段,并未使用 dropout,自然也就不用抛硬币来决定失活概率,以及要消除哪些隐藏单元,因为在测试阶段进行预测时,不期望输出结果是随机的。

dropout好处:

  • 不要依赖于任何一个特征,因为该单元的输入可能随时被清除, 将产生收缩权重的平方范数的效果。将产生收缩权重的平方范数的效果。
  • 每个单元,它不能依靠任何特征,因为特征都有可能被随机清除,或者说该单元的输入也都可能被随机清除,将产生收缩权重的平方范数的效果。

dropout缺点:

  • 代价函数𝐽不再被明确定义

使用经验:

  • dropout 是一种正则化方法,它有助于预防过拟合。
  • 因此除非算法过拟合,不然是不会使用 dropout 的,所以它在其它领域应用得比较少,主要存在于计算机视觉领域

只有存在过拟合时,才决定是否使用dropout。如果不存在过拟合,使用它并不一定能够提升模型性能。

1.6 其它正则化方法

1.数据扩增(data augmentation)

在这里插入图片描述
方法:水平垂直翻转、随机裁剪、随机放大裁剪、轻微形变

2.early stopping

在这里插入图片描述
验证集性能有多少次迭代都没有变化时,使用early stop,在此时停止。

优点:

  • 只运行一次梯度下降,可以找出𝑤的较小值,中间值和较大
    值,而无需尝试𝐿2正则化超级参数𝜆的很多值

缺点:

  • 不能独立地处理这两个问题,因为提早停止梯度下降,也就是停止了优化代价函数𝐽,因为现在你不再尝试降低代价函数𝐽,所以代价函数𝐽的值可能不够小。

建议还是使用L2正则化来代替early stopping。

1.7 归一化输入

标准化

标准化需要两个步骤:

  • 零均值
  • 归一化方差
    在这里插入图片描述

确保所有特征都在相似范围内,通常可以帮助学习算法运行得更快。

1.8 梯度消失/爆炸

训练神经网络,尤其是深度神经所面临的一个问题就是梯度消失或梯度爆炸,导数或坡度有时会变得非常大,或者非常小,甚至于以指数方式变小,这加大了训练的难度。

1.9 神经网络的权重初始化

在这里插入图片描述

  • 随机高斯 初始化变量,然后除以每层节点数的平方根
  • 设置的权重矩阵既不会增长过快,也不会太快下降到 0,从而训练出一个权重或梯度不会增长或消失过快的深度网络,也可以加快收敛速度。

2 优化方法

2.1 mini-batch gradient descent

在这里插入图片描述
batch: 每次都拿全部的样本进行梯度更新来训练网络,导致速度很慢。
mini-batch: 把训练集分割为小一点的子集,然后用子集进行训练。

在这里插入图片描述

  • batch: 训练耗时,曲线更平滑
  • mini-batch: 训练更快,曲线有噪声,增大mini-batch数,曲线会平滑些

在这里插入图片描述
mini-batch = m ----> batch
mini-batch = 1 ----> sgd

2.2 指数加权平均数

在这里插入图片描述
做偏差修正,可以让平均数运算更加准确。初始时候预测结果不准确,导致前期结果有一段不准确。使用偏差修正能够解决这类问题。

2.3 动量梯度下降算法 Momentum

计算梯度的指数加权平均数,并利用该梯度更新权重。比一般的梯度下降算法要快。
等高线纵轴方向波动小些,横轴方向移动快些。
在这里插入图片描述

2.4 RMSprop

root mean square prop
减缓𝑏方向的学习,即纵轴方向,同时加快,至少不是减缓横轴方向的学习。
在这里插入图片描述
与动量梯度下降有些相似,但是偏导数的平方项,且在进行参数更新的时候,除以开方数。

在横轴方向或者在例子中的𝑊方向,我们希望学习速度快,而在垂直方向,也就是例子中的𝑏方向,希望减缓纵轴上的摆动,所以有了𝑆𝑑𝑊和𝑆𝑑𝑏,我们希望𝑆𝑑𝑊会相对较小,所以我们要除以一个较小的数,而希望𝑆𝑑𝑏又较大,所以要除以较大的数字,这样就可以减缓纵轴上的变化。

2.5 Adam优化算法

Adam 优化算法基本上就是将 Momentum 和 RMSprop 结合在一起。
在这里插入图片描述

2.6 学习率衰减

加快学习算法的一个办法就是随时间慢慢减少学习率,将之称为学习率衰减。
减少𝑎的本质在于,在学习初期,能承受较大的步伐,但当开始收敛的时候,小一些的学习率能步伐小一些

3 超参数调试

3.1 参数选择

  • 区域网格搜索
    在这里插入图片描述
  • 尺度范围搜索
    用对数标尺搜索超参数的方式会更合理,因此这里不使用线性轴,分别依次取0.0001,0.001,0.01,0.1,1,在对数轴上均匀随机取点。

3.2 超参数调试实践

  • 熊猫方式:每次只训练一个或几个模型,然后参数优化
  • 鱼籽方式:每次训练多个模型,每个模型参数不同
    在这里插入图片描述

这两种方式的选择,是由你拥有的计算资源决定的,如果你拥有足够的计算机去平行试验许多模型,那绝对采用鱼子酱方式,尝试许多不同的超参数,看效果怎么样

3.3 batch normal

Batch归一化会使你的参数搜索问题变得很容易,使神经网络对超参数的选择更加稳定,超参数的范围会更加庞大,工作效果也很好,也会是你的训练更加容易

  • 加快学习速度: 类似于逻辑回归输入归一化
  • 隐藏层:以就会影响𝑤, 𝑏的训练。简单来说,这就是 Batch 归一化的作用。尽管严格来说,真正归一化的不是𝑎,而是𝑧,深度学习文献中有一些争论,关于在激活函数之前是否应该将值𝑧归一化,或是否应该在应用激活函数𝑎后再规范值。实践中,经常做的是归一化𝑧,就是卷积层之后,激活函数之前。
    在这里插入图片描述

Batch 归一化的作用是它适用的归一化过程,不只是输入层,甚至同样适用于神经网络中的深度隐藏层。应用 Batch 归一化了一些隐藏单元值中的平均值和方差,不过训练输入和这些隐藏单元值的一个区别是,也许不想隐藏单元值必须是平均值 0 和方差 1,标准化后还可以加两个参数alpha与beta进行调节,也可以调节其均值与方差值不再是标准的0与1。

为什么有效:

  • 归一化可以加快学习速度
  • 可以使权重比网络更滞后或更深层,减少了“Covariate shift”的问题(前一层参数改变影响后面的层)。Batch 归一化减少了输入值改变的问题,它的确使这些值变得更稳定,减弱了前层参数的作用与后层参数的作用之间的联系,它使得网络每层都可以自己学习,稍稍独立于其它层,这有助于加速整个网络的学习
  • 轻微正则化的效果:在 mini-batch 计算中,由均值
    和方差缩放的,因为在 mini-batch 上计算的均值和方差,而不是在整个数据集上,均值和方差有一些小的噪声,对每一层的激活值加了少许噪声。正则化效果,因为给隐藏单元添加了噪音,这迫使后部单元不过分依赖任何一个隐藏单元。

总结:

  • 在训练时,𝜇和𝜎2是在整个 mini-batch 上计算出来的包含了像是 64 或28 或其它一定数量的样本
  • 在测试时,可能需要逐一处理样本,方法是根据训练集估算𝜇和𝜎2,估算的方式有很多种,理论上可以在最终的网络中运行整个训练集来得到𝜇和𝜎2,但在实际操作中,我通常运用指数加权平均来追踪在训练过程中你看到的𝜇和𝜎2的值。训练时候每个batch计算一个均值与方差,再基于指数加权平均的形式(优化算法中之前用到过)跟踪最新的均值与方差。

3.4 Softmax分类器

Softmax将逻辑回归推广到C类上,当C==2时,等同于逻辑回归。
在这里插入图片描述
输出是多维向量,维度与类别数一致,表明属于每一类的概率值,相加为1。
softmax激活函数分为以下步骤:

  • 线性激活 --> z=wx+b
  • 求幂指数 --> tmp = e^z
  • 归一化 --> a = tmp / total(tmp)
    在这里插入图片描述

训练Softmax:
在这里插入图片描述

  • 训练样本标签 类似于hardmax形式,属于哪一类,那个维度向量的index为1
  • 损失函数为类似于逻辑回归的损失函数 -y log y'
    在这里插入图片描述

损失函数所做的就是它找到训练集中的真实类别,然后试图使该类别相应的概率尽可能地高。这就是统计学中的极大似然估计。
在这里插入图片描述

3.5 深度学习框架

在这里插入图片描述
挑选原则:

  • 便于编程
  • 运行速度要快,训练等
  • 是否真的开放:不仅需要开源,而且需要良好的管理
  • 对应的编程语言:Python,Java 还是 C++
  • 对应的任务应用:计算机视觉、自然语言处理或者线上广告
目录
相关文章
|
8月前
|
机器学习/深度学习 自然语言处理 算法
深度学习工程师-吴恩达课程汇总
深度学习工程师-吴恩达课程汇总
|
9月前
|
机器学习/深度学习
深度学习入门精华笔记整理
深度学习入门精华笔记整理
80 0
|
10月前
|
机器学习/深度学习 存储 人工智能
【深度学习】笔记
【深度学习】笔记
104 1
|
10月前
|
机器学习/深度学习
深度学习入门笔记7 手写数字识别 续
深度学习入门笔记7 手写数字识别 续
|
10月前
|
机器学习/深度学习 Python
深度学习入门笔记7 手写数字识别
深度学习入门笔记7 手写数字识别
|
10月前
|
机器学习/深度学习 存储 人工智能
深度学习入门笔记6 tensorflow学习
深度学习入门笔记6 tensorflow学习
|
10月前
|
机器学习/深度学习 算法 大数据
深度学习入门笔记5 Facebook营销组合分类预测
深度学习入门笔记5 Facebook营销组合分类预测
|
7天前
|
机器学习/深度学习 API 语音技术
|
9天前
|
机器学习/深度学习 监控 安全
智能化视野下的守卫者:基于深度学习的图像识别技术在智能监控领域的革新应用
【4月更文挑战第9天】 随着人工智能技术的飞速发展,深度学习已经成为了推动计算机视觉进步的重要力量。尤其在智能监控领域,基于深度学习的图像识别技术正逐步转变着传统监控系统的功能与效率。本文旨在探讨深度学习技术如何赋能智能监控,提高对场景理解的准确性,增强异常行为检测的能力,并讨论其在实际部署中所面临的挑战和解决方案。通过深入分析,我们揭示了深度学习在智能监控中的应用不仅优化了安全防范体系,也为城市管理和公共安全提供了有力的技术支持。
|
9天前
|
机器学习/深度学习 算法 数据处理
深度学习在图像识别中的创新应用
【4月更文挑战第9天】 随着人工智能技术的飞速发展,深度学习已成为推动计算机视觉领域进步的关键技术之一。特别是在图像识别任务中,深度学习模型已经展现出超越传统算法的性能。本文将深入探讨深度学习在图像识别领域的最新进展,包括卷积神经网络(CNN)的变体、数据增强技术以及迁移学习等策略。通过对这些技术的综合运用,我们能够实现对复杂图像数据的高效识别和分类,进一步拓展了深度学习在实际应用中的可能性。
12 1