吴恩达深度学习笔记(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博客
相关推荐
NAGNIP7 小时前
一文搞懂深度学习中的通用逼近定理!
人工智能·算法·面试
冬奇Lab9 小时前
一天一个开源项目(第36篇):EverMemOS - 跨 LLM 与平台的长时记忆 OS,让 Agent 会记忆更会推理
人工智能·开源·资讯
冬奇Lab9 小时前
OpenClaw 源码深度解析(一):Gateway——为什么需要一个"中枢"
人工智能·开源·源码阅读
AngelPP12 小时前
OpenClaw 架构深度解析:如何把 AI 助手搬到你的个人设备上
人工智能
宅小年12 小时前
Claude Code 换成了Kimi K2.5后,我再也回不去了
人工智能·ai编程·claude
九狼13 小时前
Flutter URL Scheme 跨平台跳转
人工智能·flutter·github
ZFSS13 小时前
Kimi Chat Completion API 申请及使用
前端·人工智能
天翼云开发者社区14 小时前
春节复工福利就位!天翼云息壤2500万Tokens免费送,全品类大模型一键畅玩!
人工智能·算力服务·息壤
知识浅谈14 小时前
教你如何用 Gemini 将课本图片一键转为精美 PPT
人工智能
Ray Liang14 小时前
被低估的量化版模型,小身材也能干大事
人工智能·ai·ai助手·mindx