首页 > 其他分享 >跟着吴恩达学深度学习(二)

跟着吴恩达学深度学习(二)

时间:2024-07-07 18:27:51浏览次数:17  
标签:吴恩达学 训练 梯度 归一化 batch 神经网络 参数 深度 跟着

前言

第一门课的笔记见:跟着吴恩达学深度学习(一)

本文对应了吴恩达深度学习系列课程中的第二门课程《改善深层神经网络:超参数调试、正则化以及优化》

第二门课程授课大纲:

  • 深度学习的实用层面
  • 优化算法
  • 超参数调试、Batch正则化和程序框架

目录

1 深度学习的实用层面 

1.1  训练/开发/测试集

1.2  偏差/方差

1.3  机器学习基础

1.4  正则化

1.5  为什么正则化可以减少过拟合?

1.6  Dropout 正则化

1.7  理解 Dropout

1.8  其他正则化方法

1.9  归一化输入

1.10  梯度消失与梯度爆炸

1.11  神经网络的权重初始化

1.12  梯度的数值逼近

1.13  梯度检验

1.14  关于梯度检验实现的注记

2 优化算法

2.1  Mini-batch 梯度下降法

2.2  理解 mini-batch 梯度下降法

2.3  指数加权平均

2.4  理解指数加权平均

2.5  指数加权平均的偏差修正

2.6  动量梯度下降法

2.7  RMSprop

2.8  Adam 优化算法

2.9  学习率衰减

2.10  局部最优的问题

3 超参数调试、Batch正则化和程序框架

3.1  调试处理

3.2  为超参数选择合适的范围

3.3  超参数训练的实践:Pandas VS Caviar

3.4  正则化网络的激活函数

3.5  将 Batch Norm 拟合进神经网络

3.6  Batch Norm 为什么奏效?

3.7  测试时的 Batch Norm

3.8  Softmax 回归

3.9  训练一个 Softmax 分类器

3.10  深度学习框架


1 深度学习的实用层面 

1.1  训练/开发/测试集

 在配置训练(train)、验证(devlopment)和测试(test)数据集的过程中做出正确决策在很大程度上会帮助大家创建高效的神经网络。训练神经网络时我们需要做很多决策,包括:

  • 神经网络的层数
  • 每个隐藏层包含的隐藏单元
  • 学习因子(学习速率)
  • 各层激活函数的选择
  • ...

 应用型机器学习是一个高度迭代的过程。具体过程如下:

(1)项目启动时,先有一个初步想法(idea),比如构建一个含有特定层数、隐藏单元数量或者数据集个数等的神经网络。

(2)然后编码(code),并尝试运行这些代码,通过运行和测试得到该神经网络,或这些配置信息的运行结果。

(3)根据结果重新完善自己的想法,改变策略,不断试验(experiment),或者找到更好的神经网络不断更新迭代自己的方案。

同样,应用深度学习也是一个反复迭代的过程,需要通过反复多次的循环训练得到最优化参数。因此,循环该过程的效率是决定项目进展速度的一个关键因素。而创建高质量的训练数据集、验证集和测试集也有助于提高循环效率。

在实验中通常将所有的样本数据分成三个部分:Train/Dev/Test sets。训练集(Train sets):用来执行训练算法;验证集(Dev sets)简单交叉验证集:选择最好的模型,经过充分验证不同算法的表现情况,选定了最终模型; 测试集(Test sets):进行评估,用来测试最好算法的实际表现,作为该算法的无偏估计。

数据集比例划分:

  •  小数据量(如数量为100、1000或10000一般三七分,即70%训练集30%测试集。如果有验证集,则设置比例依次为60%、20%、20%。
  • 大数据量:对于百万级别的数据,训练集、验证集、测试集的比例通常可以设置为98%、1%、1%。对于超过百万级别的数据,比例可以为99.5%、0.25%、0.25或者99.5%、0.4%、0.1%。

因此,样本数据量越大,相应的验证集和测试集的比例可以设置的越低一些。 

数据没有测试集也没关系,测试集的目的是对所选定的神经网络系统做出无偏评估,如果不需要无偏评估,也可以不设置测试集,在验证集(test sets)上选择合适的模型。

1.2  偏差/方差

 如上图(图左)的数据集,拟合成一条直线,可能得到一个逻辑回归拟合,但它并不能很好地拟合该数据集,这是偏差高(high bias)的情况,。称为欠拟合(underfit the data)

如上图(图右)的数据集,拟合一个非常复杂的分类器,分类器方差较高(high variance),数据过度拟合(overfit the data)

这两者之间,如(图中)这种情况,复杂程度适中,数据拟合适度的分类器,这个看上起更为合理,称适度拟合(just right),是介于过拟合和欠拟合中间的一类。

以上是在二维的情况下,将偏差和方差可视化。而多维则无法通过绘制数据和可视化分割边界实现,但我们可以通过几个指标来研究偏差和方差。

理解偏差和方差的两个关键数据是训练集误差(train set error)验证集误差(development set error)

同样以识别小猫为例,可能出现以下情况。

情形1:Train set error为1%,Dev set error为11%。

根据误差情况可以看出训练集设置的非常好,而验证集设置的相对较差。分析原因,可能存在过拟合,某种程度上,验证集并没有充分利用交叉验证集的作用,模型泛化能力不强,导致验证集识别率低。这种情况,通常被称之为”高方差“(high variance)。 

情形2:Train set error为16%,Dev set error为16%。

根据误差情况可以看出训练集没有得到很好训练,而验证集设置的相对合理。如果训练集的拟合度不高,就是欠拟合,即偏差较高(high bias)。

情形3:Train set error为15%,Dev set error为30%。

根据误差情况,可以说明该模型既存在高偏差(high bias)也存在高方差(high variance),这是深度学习中最坏的情况。

情形4:Train set error为0.5%,Dev set error为1%。

根据误差情况,可以说明该模型不仅低偏差(low bias)还低方差(low variance),这是深度学习中最好的情况。

注意,上面的情形都是假设人眼辨别的错误率接近0%,即人类都能正确识别所有猫类图片。一般来说,最优误差(optimal error)也称为基本误差(base error),所以最优误差接近0。如果基本误差(base error)不同,例如图片很模糊,相应的train set error和dev set error会有所变化,那分析过程就要做出改变了。

一般来说,Train set error体现了是否出现bias,Dev set error体现了是否出现variance(正确地说,应该是Dev set error与Train set error的相对差值)。

上图中的模型既存在high bias也存在high variance,可以理解成某段区域是欠拟合的,某段区域是过拟合的。

1.3  机器学习基础

在训练神经网络时, 如果碰到高偏差(欠拟合),通常是增加神经网络的隐藏层层数、神经元个数,训练时间延长,选择其它更复杂的NN模型等

如果碰到高方差(过拟合),通常是增加训练样本数据,但有时无法获得更多的数据,进行正则化(Regularization)来减少过拟合。

总之,通过不断地尝试找到一个低方差,低偏差的模型。

⚠️注意:

  • 处理高方差和高偏差的方法不一样,首先要通过验证集找到存在的问题,再对症下药,明确这一点有助于选出最有效的方法。
  • 在当前的深度学习和大数据时代,只需要持续训练一个更大的网络,只要准备了更多的数据,同时减少方差和偏差不是没有可能。

1.4  正则化

如果怀疑神经网络过度拟合了数据,即出现了高方差(high variance),那么最先想到的可能是正则化(regularization),另一个方法是准备更多的数据(more data)。但获取更多样本的成本可能很高但正则化通常有助于避免过度拟合或减少网络误差。

成本函数(cost function)J的最小值。它是定义的成本函数,参数包含一些训练数据和不同数据中个体预测的损失,w和b逻辑回归的两个参数,w是一个多维度参数矢量,b是一个实数。实现正则化只需要添加参数λ(正则化参数),这种方法称为L2 regularization。先给出两种常见的正则化表达式:

L2 regularization的表达式为:

L1 regularization的表达式为:

具体解释看下图:

标签:吴恩达学,训练,梯度,归一化,batch,神经网络,参数,深度,跟着
From: https://blog.csdn.net/Zhoozie/article/details/140153354

相关文章

  • python中TensorFlow框架的简单深度学习项目图像分类示例
    ❤❤引言......
  • 【C++深度探索】:继承(定义&&赋值兼容转换&&作用域&&派生类的默认成员函数)
    ✨                            愿随夫子天坛上,闲与仙人扫落花    ......
  • Pytorch 实践手写数字识别深度学习网络 LeNet-5
    Pytorch实践手写数字识别深度学习网络LeNet-5文章目录Pytorch实践手写数字识别深度学习网络LeNet-5认识LeNet-5认识数据集处理数据集下载数据集读取数据定义Dataset的继承类把数据进行载入载入`dataloader`编写网络编写训练与测试代码实践结果展示完整代码训......
  • 【深度解析】Zxing:开源条形码图像处理库的领航者
                    在数字化浪潮席卷全球的今天,二维码和条形码已经成为我们日常生活中不可或缺的一部分,从超市购物到移动支付,从文档管理到物流追踪,它们无处不在。而在这背后,有一个开源项目默默地支撑着这一切——Zxing,一个强大的条形码图像处理库。     ......
  • 深度学习1
    1.支持向量机SupportVectorMachine(SVM)是一种对数据二分类的线性分类器,目的是寻找一个超平面对样本进行分割,广泛应用人像识别,手写数字识别,生物信息识别。二维空间分割界是一条直线,在三维空间是一个平面,在本文中为了方便起见,把二维空间也称为超平面。2.SVM求解是一个含有不......
  • 深度学习3 基于规则的决策树模型
    1.决策树是一种归纳学习算法,从一些没有规则、没有顺序、杂乱无章的数据中,推理出决 策模型。不管是什么算法的决策树,都是一种对实例进行分类的树形结构。决策树有三个要素:节点(Node)、分支(Branches)和结果(Leaf)。训练决策树,其实就是对训练样本的分析,把样本通过某个边界划分......
  • 深度解析:机器学习与深度学习的关系与区别
    一、前言在人工智能领域,机器学习与深度学习常常被提及并广泛应用。虽然它们在本质上都是通过数据训练模型以进行预测或分类,但两者之间存在着显著的区别和联系。本文将深入解析机器学习与深度学习的关系与区别,帮助读者更好地理解和应用这两种技术。二、机器学习概述定义机器......
  • 力扣第22题:括号生成 深度优先搜索(DFS)和它的优化(C++)
    数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。示例:输入:n=3输出:["((()))","(()())","(())()","()(())","()()()"]思路递出去,再归回来,是为递归。DFS算法是利用递归思想的一种搜索算法。想象一个矿井,从地面到井底有多层......
  • 【C++干货基地】C++模板深度解析:进阶技巧与高级特性掌握(按需实例化、全特化与偏特化)文
    ......
  • 深度解析 Raft 分布式一致性协议
    深度解析Raft分布式一致性协议本文参考转载至:浅谈Raft分布式一致性协议|图解Raft-白泽来了-博客园(cnblogs.com)深度解析Raft分布式一致性协议-掘金(juejin.cn)raft-zh_cn/raft-zh_cn.mdatmaster·maemual/raft-zh_cn(github.com)本篇文章将模拟一个KV......