吴恩达深度学习笔记(3)--深度学习的实际应用

训练、开发、测试集

目前超参数的确定依赖于实验迭代调整,将数据集划分为:训练、开发(验证)、测试集会使迭代效率更高。

如果数据少的时候用传统的分割方法:60/20/20,数据量大的时候则都可以。

确保开发和测试集的数据分布相同。

偏差-方差

目前关于偏差-方差的权衡讨论很少。

高偏差--欠拟合

高方差--过拟合

机器学习的基本原则

当模型训练好的时候:

  • 检查模型是否高偏差,即模型在训练集数据上的表现,如果存在高偏差的情情况,可以尝试选择其他更合适的网络,如有更多隐藏层和隐藏单元的,或延长训练时间,选用其他优化方法
  • 当偏差降低到可接受范围内后,判断方差,需要在开发集上判断,看模型是否具有一般化的能力,如果方差高,解决方法最好时取得更多的数据,有时候无法获取更多的数据,可以尝试正则化,或者更适合的网络

正则化:

如果出现方差过高,即过拟合情况,可以考虑使用正则化方法

在逻辑回归代价函数中加入正则化项:

在神经网络中:

矩阵的范数:

权重衰减:

加入正则化项之后,梯度变为:

梯度更新公式变为:

其中,<1,会给之前的权重矩阵一个衰减参数。

为什么正则化可以缓解过拟合

加入正则化项,正则化因子λ设置的足够大的情况下,为了使代价函数最小化,权重矩阵W就会被设置为接近于0的值。则相当于消除了很多神经元的影响,大的神经网络就会变成一个较小的网络.

对于激活函数而言,加入正则化项之后,z的值变小,近似于线性变换,整个网络就成为一个简单的近似线性的网络,从而不会发生过拟合。

dropout正则化(随机失活)

假如上述神经网络过拟合,随机失活技术遍历网络每一层,为dropout网络中的某个结点,设置一个概率值,50%概率被丢弃,消除那些结点的运算,得到一个相对小的神经网络。小的网络可以达到正则化的效果。

随机失活的方法:反向随机失活

理解dropout:

单个神经元的工作就是接收输入,并产生一些有意义的输出,加入了Dropout后,输入的特征都是有可能会被随机清除的,所以神经元不会再特别依赖于任何一个输入特征,因此给每一个输入较小的权重,可以达到收缩权重防止过度拟合的目的。如果某一层的参数过多,更容易发生过拟合,给这一层设置更低的留存率。

缺点是,这样做使得在交叉验证搜索时会有更多的超参数,因此可以对一些层使用dropout,其他不用,且dropout相同,这样就只产生了一个超参数。另一个缺点是,让代价函数不明确,去验证梯度下降算法时,不能依据随着迭代,代价函数值变小,不能用绘图方式判断迭代结果

PS:在测试阶段不要用dropout,因为那样会使得预测结果变得随机。

其他正则化方法:

扩增训练集:将图片数据水平翻转、随机裁剪图片(旋转放大)

早终止法 :在运行梯度下降时,画一个训练误差的图,同时画出开发集误差

缺点:机器学习有很多步骤,其中获取代价函数最小有很多方式实现,即便优化了成本函数,我们希望不会过拟合,可以通过正则化等步骤实现,现在机器学习中增加了很多超参数。早终止的话,即增加超参数,又想避免过拟合,用一个工具解决两个问题,考虑的更复杂。

输入归一化:加速训练过程

以两个特征的训练集为例,需要两步实现

训练集和测试集应该以同样的方式实现归一化

1、中心化:计算每一个特征样本的数据均值,样本减去均值

2、方差归一化

归一化之前,需要较小的学习率多次迭代次数找到全局最优解

归一化之后,可以设置更大的学习效率,较少的迭代次数就能找到全局最优解

梯度的消失和爆炸

在训练深度神经网络时,损失函数的导数或者斜率很大,或者很小,导致训练变得很困难

出现的原因:在一个很深的网络,权参数系数矩阵只比单位阵大一点点,激活函数的值将以指数级递增,激活函数就会爆炸,只比单位阵小一点点就会消失,导致梯度下降超级缓慢

神经网络权重初始化

输入的数量n较大时,我们希望每个w i的值都小一些,这样它们的和得到的z也较小。

设置

梯度的数值近似:

双侧差值:

梯度验证:可以找出反向传播中的错误

将网络中的参数全部连接起来,转换成一个向量

  • 梯度验证不能在训练中使用,只能调试的时候用
  • 如果梯度检验出问题,逐个检查看看哪个差距最大
  • 不要忘记加入正则化项
  • 梯度检验不能与随机失活一起使用,因为每一次迭代中随机失活随机消除,这时是难以计算dropout在梯度下降上的代价函数J;
  • 最后虽然很少发生,但也是有可能的,当参数w和b接近0时,梯度下降是正确的,但是随着梯度下降的进行,w和b会增大,算法的精度有所下降,可以尝试在随机初始化的时候,运行梯度检验,之后训练网络一段时间,w和b将会在0附近摇摆一段时间,即很小的随机初始值,在进行几次训练的迭代后,再与运行梯度检验。吴恩达Coursera深度学习课程 DeepLearning.ai 提炼笔记(2-1)-- 深度学习的实践方面_cousera deeplearing笔记-CSDN博客
相关推荐
LIjin_100630 分钟前
pytorch resnet源码分析
开发语言·python·深度学习
吃什么芹菜卷1 小时前
机器学习:opencv--人脸检测以及微笑检测
人工智能·opencv·机器学习
子午1 小时前
【交通标志识别系统】Python+卷积神经网络算法+人工智能+深度学习+机器学习+算法模型
人工智能·深度学习·机器学习
工作姬1 小时前
《柬埔寨语翻译通》App是如何实现高棉语语音识别翻译技术的,高精度OCR文字识别技术分享!
人工智能·ocr·语音识别·柬埔寨·柬埔寨语·高棉语·柬埔寨语翻译
kejijianwen1 小时前
端到端语音大模型上线,Soul App创始人张璐团队提升用户语音互动体验
人工智能
王俊山IT1 小时前
C++学习笔记----9、发现继承的技巧(一)---- 使用继承构建类(4)
开发语言·c++·笔记·学习
沈询-阿里1 小时前
用Spring AI 做智能客服,基于私有知识库和RAG技术
java·人工智能·spring
强哥之神1 小时前
大型语言模型(LLMs)关键技术指南
人工智能·深度学习·机器学习·语言模型·自然语言处理·llm·llama
还在抒写2 小时前
西瓜书机器学习第五章——神经网络
人工智能·神经网络·机器学习
GISer Liu2 小时前
AI金融攻防赛:YOLO理论学习及赛题代码进阶(DataWhale组队学习)
人工智能·python·算法·yolo·leetcode·金融·目标识别