首页 > 其他分享 >吴恩达课程学习笔记--第二课第一周:深度学习的实践层面

吴恩达课程学习笔记--第二课第一周:深度学习的实践层面

时间:2022-12-02 15:02:46浏览次数:48  
标签:吴恩达 第二课 方差 -- 梯度 dropout 正则 拟合 函数


训练,验证,测试

在机器学习的小数据时代,70%验证集,30%测试集,或者60%训练,20%验证和20%测试。大数据时代,如果有百万条数据,我们可以训练集占98%,验证测试各占1%。
深度学习的一个趋势是越来越多的训练集和测试集分布不匹配,根据经验,我们要确保两个数据集来自同一分布。
测试集的作用是给最后的模型提供无偏估计,如果不需要无偏估计,也可以不设置测试集

偏差,方差

考虑如下的数据,如果采用线性模型,可能会导致高偏差就是不能较好的拟合数据,称为欠拟合;而如果拟合一个非常复杂的分类器,可能会导致高方差,称为过拟合。

吴恩达课程学习笔记--第二课第一周:深度学习的实践层面_深度学习


我们想要达到的是中间的情况

吴恩达课程学习笔记--第二课第一周:深度学习的实践层面_深度学习_02


诊断方差和偏差的方式通过分析在训练集和验证集的的误差。

方差是通过查看训练集和验证集的误差,加入训练集误差为1%,验证集误差为11%,则可能是过度拟合,导致高方差。偏差,加入训练集误差15%,测试集误差16%,而人的误差为1%,这是我们认为偏差过大,而方差合理。

机器学习基础

通常首先看偏差,如果偏差很大,尝试选择不同的神经网络结构和延长训练时间,直到可以拟合数据为止。
当偏差降到可以接受的数值,再查看方差,通过验证集性能。如果方差过大,可以通过增加数据集、正则化等方法,不断尝试。
在正则适度的情况,一个更大的网络可以在不影响方差的同时减少偏差;采取更多的数据可以在不过多影响偏差的前提下减少方差。

正则化

正则化和增加数据是解决过拟合问题(高方差)的有效方法,正则化参数是

吴恩达课程学习笔记--第二课第一周:深度学习的实践层面_方差_03

吴恩达课程学习笔记--第二课第一周:深度学习的实践层面_过拟合_04是训练样本的个数,吴恩达课程学习笔记--第二课第一周:深度学习的实践层面_吴恩达_05称为吴恩达课程学习笔记--第二课第一周:深度学习的实践层面_正则化_06的欧几里得范数(2范数)的平方,包含了每一层的w的元素的平方和,此方法称为L2正则化。因为吴恩达课程学习笔记--第二课第一周:深度学习的实践层面_正则化_06包含了绝大多数参数,所以参数b可以不加。L1正则加的则是吴恩达课程学习笔记--第二课第一周:深度学习的实践层面_深度学习_08,使用L1正则,w会变得稀疏,但却没有降低太多内存。具体计算如下

吴恩达课程学习笔记--第二课第一周:深度学习的实践层面_方差_09

在反向传播时加上吴恩达课程学习笔记--第二课第一周:深度学习的实践层面_正则化_10,则计算梯度时相当于给梯度W乘了吴恩达课程学习笔记--第二课第一周:深度学习的实践层面_吴恩达_11,该值小于1,因而正则化也被称为权重衰减。

直观理解正则化,w权重的值需要有一定的约束,当增大w的同时,我们在损失函数计算上加上该权重的平方,使其承受一定的损失,有助于维持模型的稳定。下面我们借助激活函数,我们通过正则化权重衰减w值较小,则获取的z也会较小,再通过激活函数时,就会处于下图中红线段,近似于线性函数,而不是一个高度复杂的非线性函数,从而减少过拟合。

吴恩达课程学习笔记--第二课第一周:深度学习的实践层面_深度学习_12

dropout正则化

dropout会遍历网络的每一层,把每个节点以一定的概率消除,得到一个节点更少规模更小的网络,然后使用backprop。
使用正则化最常用的方法反向随机失活如下:
首先生成一个与每层W相同的矩阵,0~1的随机数
​​​d = np.random.rand(w.shape[0],w.shape[1])<keep_size​​​ 然后看是否大于0.8(假设keep prob=0.8),大于0.8的我们置为0
然后与权重元素相乘
​w = np.multipy(w,d)​​ 然后将w向外扩展,除以0.8,用来修正我们所需的那20%,
最后,测试阶段不需要dropout,因为测试阶段进行预测时,我们不希望输出结果是随机的。

理解 dropout

dropout会使得不能依赖于任何一个特征,产生收缩权重的平方范数的效果,与之前的L2正则化效果类似,实施dropout会压缩权重,来预防过拟合;L2对不同权重的衰减是不同的,它取决于激活函数倍增的大小。
总结一下,dropout功能类似于L2,与L2不同的是,应用的方式的不同会导致dropout的不同,甚至更适用于不同的输入范围。
关于keep-prob的设置,对于W矩阵过大的神经层可以考虑较小的keep-prob,如果某一层不担心出现过拟合,keep-prob可以为1。
dropout的应用主要在计算机视觉,因为没有足够的数据,很容易造成过拟合。如果不存在过拟合的情况,不需要使用dropout。
当然,dropout的一大缺点就是代价函数J不再被明确定义,梯度下降的性能难于复查。

其他正则化方法

数据扩增,通过图像裁剪、翻转等数据处理,增大数据集

early stopping 代表提早停止训练,如下图,通过提早结束训练来减少过拟合的情况。

吴恩达课程学习笔记--第二课第一周:深度学习的实践层面_吴恩达_13


early stopping的优点是,只运行一次梯度下降,就可以找到w的较小值,中间值和较大值,无需吴恩达课程学习笔记--第二课第一周:深度学习的实践层面_正则化_14的很多值,缺点是不能独立处理两个问题,提早停止梯度下降,也就停止了优化代价函数J,所以代价函数可能不够小,但是又不希望出现过拟合。

归一化输入

我们希望无论是训练集还是测试集都是经过相同的均值和方差定义的数据转换

  1. 零均值
  2. 归一化方差
    如下图,假设有两个维度吴恩达课程学习笔记--第二课第一周:深度学习的实践层面_正则化_15,通过零均值化和标准化,零均值化就是每一个维度减去维度的平均值,标准化则是所有零均值化后的数据除以方差

    通过归一化可以使代价函数更平均,以参数w和参数b为例,如下图,归一化后特征都在相似的范围内,而不是1到1000,0到1,使得代价函数优化起来更加简单快速。图二中的结果函数是一个更圆的球形轮廓,那么不管从哪个位置开始,梯度下降法都能更直接的找到最小值。

梯度爆炸/梯度消失

梯度爆炸和消失是指在训练神经网络的时候,导数或坡度变得非常大或非常小。比如我们只考虑初始的一种情况,一个L层的网络,假设激活函数为线性函数吴恩达课程学习笔记--第二课第一周:深度学习的实践层面_过拟合_16,每一层的有两个神经元假设为1.5倍的单位矩阵,那么预测结果吴恩达课程学习笔记--第二课第一周:深度学习的实践层面_过拟合_17,如果对于深度神经网络L较大,那么预测的y值也会很大,实际上它是指数级增长的。同样如果为0.5倍的单位矩阵,会变得指数级下降。

神经网络的权重初始化

我们想出了一个不完整的解决方案,有助于我们为神经网络更谨慎的选择随机初始化参数。
假设一个神经元接受四个输入
吴恩达课程学习笔记--第二课第一周:深度学习的实践层面_深度学习_18,暂时忽略吴恩达课程学习笔记--第二课第一周:深度学习的实践层面_正则化_19,为了预防吴恩达课程学习笔记--第二课第一周:深度学习的实践层面_过拟合_20过大或过小,随着吴恩达课程学习笔记--第二课第一周:深度学习的实践层面_过拟合_21越大,吴恩达课程学习笔记--第二课第一周:深度学习的实践层面_正则化_22应该越小,最合理的方法是设置吴恩达课程学习笔记--第二课第一周:深度学习的实践层面_深度学习_23,n表示输入神经元的特征数,实际上我们要做的是吴恩达课程学习笔记--第二课第一周:深度学习的实践层面_深度学习_24吴恩达课程学习笔记--第二课第一周:深度学习的实践层面_正则化_25就是我们喂给第l层神经单元的数量。通常relu激活函数引用高斯分布的方差,使用吴恩达课程学习笔记--第二课第一周:深度学习的实践层面_吴恩达_26
对于tanh激活函数吴恩达课程学习笔记--第二课第一周:深度学习的实践层面_吴恩达_27,被称为Xavier初始化
以及吴恩达课程学习笔记--第二课第一周:深度学习的实践层面_正则化_28
我们可以给上述参数再增加一个乘法参数,但上述方差参数的调优优先级并不高。通过上述的方法,我们确实降低的梯度爆炸和梯度消失问题。

梯度检验

所谓梯度检验,实际上是通过微分求导,即吴恩达课程学习笔记--第二课第一周:深度学习的实践层面_方差_29求导,这种方式计算的梯度更准确,但同时也耗费大量的计算资源。

梯度检验就是将损失函数J的所有参数W和b组成一个大的一维向量,然后依次对每一个参数利用微分求导,获得一个一维向量,同时反向传播的梯度也组成一个一维向量,两者求欧几里得距离。下图中的分母是为了防止分子的计算结果太小。通常吴恩达课程学习笔记--第二课第一周:深度学习的实践层面_吴恩达_30吴恩达课程学习笔记--第二课第一周:深度学习的实践层面_正则化_31,如果计算的欧几里得距离为吴恩达课程学习笔记--第二课第一周:深度学习的实践层面_正则化_31或者更小,说明导数逼近很可能是正确的。

吴恩达课程学习笔记--第二课第一周:深度学习的实践层面_吴恩达_33


注意以下几点:

  1. 不要在训练中使用梯度检验,它只用于调试,因为太费时了。
  2. 如果梯度检验失败,要检查,找出bug
  3. 如果使用了正则化,微分求导计算也要包含
  4. Dropout和梯度检验不要同时进行,或者将keepprob设为1
  5. 有时会出现当W和b较大时,梯度计算不正确,我们需要等到反复训练之后再检验梯度结果,但是这种情况几乎不会出现

本文参考
Coursera吴恩达《深度学习的实践层面》课程笔记(2)
第二周:深度学习的实践层面




标签:吴恩达,第二课,方差,--,梯度,dropout,正则,拟合,函数
From: https://blog.51cto.com/u_15899958/5907039

相关文章

  • 吴恩达深度学习 第四课 第四周 人脸识别和神经风格转换
    文章目录​​人脸识别​​​​one-shot学习​​​​siamesenetwork(计算相似度)​​​​tripletloss​​​​三元组数据集的选择​​​​人脸验证与二分类​​​​神经网络......
  • Docker Swarm 安装 Redis 集群(bitnami/redis-cluster:latest)
    准备集群环境:​​docker-79​​​、​​docker-80​​​、​​docker-81​​拉取镜像:dockerpullbitnami/redis-cluster:latest3.在任意文件夹下新建compose.yml脚本:​......
  • Docker 搭建redis集群-三台机机器、三主三从
    1.拉取redis镜像这里我使用的是之前打包的镜像,redis版本是:​​6.2.0​​直接拉取也行:dockerpullredis:latest三台服务器:​​192.168.104.79​​​、​​192.168.104.80​......
  • ensp 报错 40 应急解决办法
    问题是这样的,在ensp启动路由器的时候发现报错,查看日志是因为虚拟机注册异常导致。      现提供以下办法应急解决该问题。1、查看现象是否为启动40报错。 ......
  • pd drop_duplicates返回结果count和to_csv的结果不一致
    目的是从表中找出不重复的公司个数,一开始采用了drop_duplicates获取一个去重后的表,count()后发现是500多家,神奇的是当我将结果导入csv,发现只有不到100条。然后我采用groupby......
  • 382. K取方格数
    题目链接382.K取方格数在一个\(N\timesN\)的矩形网格中,每个格子里都写着一个非负整数。可以从左上角到右下角安排\(K\)条路线,每一步只能往下或往右,沿途经过的格......
  • 【Win10】如何关闭Windows10自动更新
    如何关闭Windows10自动更新零、问题Windows10老是自动更新,有时候第二天起来又得重新打开软件,真麻烦,Win10自动更新的时候还有点卡。如何关闭?经过上网查询,发现完全关闭......
  • Spark导入导出Hbase
    本文代码通过spark-shell运行spark-shell--masteryarn--driver-class-path/home/hadoop/software/spark/spark-2.4.4-bin-hadoop2.7/jars/hbase/*:/home/hadoop/softwar......
  • 准确率为0.81的程序
    因为我观察了baseline错误分类数据的频域发现,他们的振幅所处的频率相同,因此我想用振幅比较大对应的频率来分。我选择这些数据中振幅大于0.1的振幅对应的频率。需要改进的......
  • Hive数据的导入和导出
    导入以下通过hive交互shell执行//创建ai库createdatabaseai;showdatabases;//创建表partition添加分区字段用tab间隔createtabletable_name(namestring,encode......