吴恩达DeepLearningCourse2-改善深层神经网络:超参数调试、正则化以及优化

文章目录

      • 第一周:深度学习的实用层面
          • 训练、开发、测试集
          • 偏差、方差
          • 机器学习基本步骤
          • L2正则化
          • Dropout(随机失活)正则化
          • 其它正则化方法
          • 正则化输入
          • 神经网络的权重初始化
          • 梯度检验
      • 第二周:优化算法
          • Mini-Batch梯度下降法
          • 指数加权平均
          • 指数加权平均的偏差修正
          • 动量梯度下降法
          • RMSprop
          • Adam优化算法
          • 学习率衰减
      • 第三周:超参数调试、Batch正则化、程序框架
          • 调试处理
          • 为超参数选择合适的范围
          • Batch Norm/z的归一化处理
          • Batch Norm作用的原理
          • SoftMax回归

第一周:深度学习的实用层面

训练、开发、测试集

应用深度学习是一个典型的迭代过程,因为不可能一开始就确定最优的超参数,需要多次循环往复,才能设计优秀的神经网络,因此循环该过程的效率是决定项目进展速度的一个关键因素,而创建高质量的训练数据集,验证集和测试集也有助于提高循环效率。如果不需要无偏估计,也可以不设置测试集。
数据规模较小时,开发和测试集占总数据的30%~40%;数据量较大时验证集和测试集占数据总量的比例会趋于变得更小。
建议确保验证集和测试集的数据来自同一分布。

偏差、方差

假设已有一个识别猫的分类器。已知人眼识别的错误率接近0%
训练集错误率:15% 测试集错误率:16% 拟合结果的偏差较大
训练集错误率:5% 测试集错误率:20% 拟合结果方差较大
训练集错误率:20% 测试集错误率:40% 拟合结果偏差和方差都较大
训练集错误率:0.1% 测试集错误率:1% 拟合结果的误差和方差合理
在这里插入图片描述

机器学习基本步骤

在这里插入图片描述

L2正则化

解决高方差通常采用增加数据量(如果可行)、正则化的方法。
在这里插入图片描述

假设采用tanh作为激活函数,当λ很大而w接近0的时候,z的范围非常接近0,而对于tanh,接近0的部分约等于线性函数,因此将神经网络的各个层向线性靠近,使得多层的神经网络计算结果更简单(参考前面课程中介绍的,为什么要使用非线性激活函数),减轻过拟合的情况。
在这里插入图片描述

Dropout(随机失活)正则化

对于神经网络的每个隐层,对每个节点设定其失活的概率,被设置为失活的节点其激活后的值设置为0,不参与神经网络的计算。在测试时不使用dropout方法。

假设有一L=3的神经网络,d3是一个布尔类型的矩阵,d3.shape=(第3层节点数, 样本数)
在Python的运算中,将d3中的True解析为1,False解析为0,其中每个元素为True或False的概率由输入 keep-prob决定。
a3 =np.multiply(a3,d3),让d3中 0 元素与a3中相对元素归零。
a3 /= keep-prob,以保证a3的期望值不变。

可以为不同层设置不同的keep-prob值,将易发生过拟合的层keep-prob值设置得更低;也可以将某些不会发生过拟合的层的keep-prob值设置为1,即不使用dropout阻塞节点。

使用dropout的一个缺点是,代价函数J无法明确定义,不便观察训练效果。

其它正则化方法

①数据扩增:将原输入的图片进行对称、裁剪、旋转处理,以较小的代价得到更大的数据集。
②提前终止训练:当神经网络在迭代到某时刻时,其表现已满足要求,提前终止。
early stopping 的主要缺点就是不能独立地处理这两个问题,因为提早停止梯度下降,也就是停止了优化代价函数J,因为终止后不再尝试降低代价函数J,所以代价函数J的值可能不够小,同时又希望不出现过拟合,没有采取不同的方式来解决这两个问题,而是用一种方法同时解决两个问题,这样做的结果是要考虑的东西变得更复杂。

注意:正则化有损于训练集的表现,因为它会限制网络过度拟合训练集的能力,但是它最终会提高测试集的表现。

正则化输入

在这里插入图片描述

神经网络的权重初始化

为了避免深层神经网络中,梯度爆炸和梯度消失的现象,需要对各层节点的权值进行合理初始化。
在这里插入图片描述

梯度检验

在这里插入图片描述

注意:
①不要在训练中使用梯度检验,它只用于调试。
②如果𝑑𝜃approx[𝑖]与𝑑𝜃[𝑖]的值相差很大,查找不同的𝑖值,找出是哪个导致𝑑𝜃approx[𝑖]与𝑑𝜃[𝑖]的值相差这么多。如果你发现,相对某些层或某层的𝜃或𝑑𝜃的值相差很大,但是dw[𝑙]的各项非常接近,(𝜃的各项与𝑏和𝑤的各项都是一一对应的)这时可能在计算参数𝑏的导数𝑑𝑏的过程中存在 bug。反过来也是一样。
③在实施梯度检验时,如果使用正则化,注意包括正则项。
④梯度检验不能与 dropout 同时使用。

第二周:优化算法

Mini-Batch梯度下降法

将大规模的输入集合切分成子集,并进行梯度下降的处理。如:X具有5,000,000样本数,minibatch_size=1000,则X可划分为X{1}…X{5000},对每个子集进行向量化的正向传播、反向传播、更新参数。

采用Mini-Batch梯度下降法时,cost值并非随着迭代次数单调下降,但整体趋势是下降的。
在这里插入图片描述

MiniBatch_Size的选择:
①当MiniBatch_Size=1时,每次迭代仅输入一个样本,本质上是随机梯度下降算法。
②当MiniBatch_Size=m时,本质上是Batch梯度下降法。
因此要在1~m的范围内选择合适的值,使得每次迭代都能快速进行,且迭代次数不至于过多。

batch梯度下降法从某处开始,相对噪声低些,幅度也大一些。
在随机梯度下降法中,每次迭代只对一个样本进行梯度下降,大部分时候向着全局最小值靠近。有时候你会远离最小值,因为那个样本恰好给你指的方向不对,因此随机梯度下降法是有很多噪声的,平均来看,它最终会靠近最小值,不过有时候也会方向错误,因为随机梯度下降法永远不会收敛,而是会一直在最小值附近波动,但它并不会在达到最小值并停留在此。
在这里插入图片描述

指数加权平均

基本公式
当β较小时,1-β较大,θt的权重较高,能更快适应变化,但受噪声影响更大。
反之,θt的权重较低,适应变化更慢,但受噪声影响小,整体趋于稳定。
在这里插入图片描述

第100天的数据是θ[1-100]的权值和,此时β=0.9,θ[90]及其之前的数据的权值很小,因此V100约为最近10天的温度平均情况。
在这里插入图片描述

指数加权平均的偏差修正

按照上述公式,初始时期对温度的估计会明显偏小。
如果关心初始时期的偏差,可以在第t天时用Vt/(1-β^t)估计当天的温度。
随着t的增加,偏差修正的效果逐渐下降。因此只有在初期的时候偏差修正起作用。

动量梯度下降法

在梯度下降的过程中,希望纵轴的摆动尽量小,横轴的跨度尽量大。
注意!右侧Vdw并非上一层的Vdw,而是该层上次更新参数时的Vdw
在这里插入图片描述

在这里插入图片描述

RMSprop

在这里插入图片描述

Adam优化算法

本质上是动量法和RMSprop的结合。
在这里插入图片描述

学习率衰减

当训练结果接近最优值时,继续训练会使参数值在其附近摆动,此时可以尝试减小学习率使其逼近最优解。

第三周:超参数调试、Batch正则化、程序框架

调试处理

在神经网络中,超参数的重要程度存在差异。如:α是最重要的超参数,而Adam方法中的ε重要性很低。
在搜索超参数时,采用随机取样而不是网格取样,效果更好。(因为超参数的重要性存在差异)
在最优样本附近进行细粒度搜索,以确定更好的超参数值。
在这里插入图片描述

为超参数选择合适的范围

例如,对α在[0.0001, 1]进行取值时,用对数标尺(而非线性标尺)搜索超参数的方式会更合理。
在 Python 中,使 r=-4*np.random.rand(),α = 10r
当选择β时,可以考察1-β的值。当β接近1时,其对变化的灵敏度会显著提高,因此不能使用线性标尺。

Batch Norm/z的归一化处理

Batch Norm一次只能处理一个 mini-batch 数据
默认对每层的z进行归一化,而非a。
时刻记住:每层网络的每个单元的输出z,都是下层网络的输入,类比输入层的一个(或多个样本的同一位置的)特征。
在这里插入图片描述

将Batch Norm拟合进神经网络中,对每个batch第k层的z[k],根据γ[k]和β[k]计算得归一化后的值,再进行激活。
因为归一化的操作,所以z[k]=w[k]*a[k-1]+b[k]中的b[k]可以删去。
操作流程:
for k in batch_num:
前向传播计算z{k},并用BN计算z~{k}
反向传播计算dw{k},dγ{k},dβ{k}
更新参数w,γ,β # 可以使用梯度法,Adam方法,动量法等

Batch Norm作用的原理

当神经网络在之前层中更新参数,Batch Norm可以确保无论其怎样变化,得到z的均值和方差保持不变,所以即使z的值改变,至少他们的均值和方差是由β和γ决定的值。
Batch Norm减少了输入值改变的问题,使这些值变得更稳定,神经网络后层会有更坚实的基础。即使输入分布改变了一些,后层网络的值会改变得更少,即使后层适应的程度减小了。它减弱了前层参数的作用与后层参数的作用之间的联系,使得网络每层都可以自己学习,稍稍独立于其它层,这有助于加速整个网络的学习。

SoftMax回归

在这里插入图片描述

Loss(y, y_hat) = -ylog(y_hat)
Cost(Y, Y_hat) = ΣLoss(Y, Y_hat) / m
dz[l] = y_hat - y

有关tensorflow的用法的章节不在此记录。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/307208.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

面向监狱编程:一伙人植入木马程序至 559 万部手机,盈利 33 万!

2018 年下半年以来,孙某(上海宏路数据技术股份有限公司副总经理)与苏某(北京亿量科技有限公司法定代表人)商议合作开展锁屏拉起广告业务(通过在用户手机上植入带有木马程序的 SDK,可控制手机在锁…

吴恩达DeepLearningCourse3-结构化机器学习项目

文章目录第一周:机器学习策略1正交化单一数字评估指标满足和优化指标训练/开发/测试集机器学习和人的表现第二周:机器学习策略2进行误差分析修正标注错误的数据使用来自不同分布的数据进行训练和测试数据分布不匹配时的偏差与方差的分析处理数据分布不匹…

程序员过关斩将--搞定秒杀,只需要这几步!!

“灵魂拷问秒杀这种大并发的写场景,直接分库分表开干?应对秒杀活动的流量高峰很难吗?不要拿淘宝级别的秒杀忽悠我秒杀活动特点我敢说凡是做过电商的同学,都会遇到运营展开的秒杀,限时购等“高并发”的活动。市面上也有…

吴恩达DeepLearningCourse4-卷积神经网络

部分内容参考之前的笔记 PyTorch深度学习实践 文章目录第一周:卷积神经网络边缘检测Padding、Stride三维卷积卷积神经网络中的一层池化层第二周:深度卷积网络实例探究残差网络1x1卷积Inception模块和网络卷积神经网络的迁移学习第三周:目标检…

那些鼓吹国内首个.NET 5框架的,该醒醒了!

前两天看过园子里有篇【国内首个 .NET 5 框架 XX 斩获 XXX stars,XXX 发布】,一顿羡慕嫉妒恨啊。我这.net core 3.1才上手没几天,还没用热乎呢,你这.NET 5的框架都出来了。我好难啊!不过难归难咱也得跟上啊。于是一个天高云淡的的…

吴恩达DeepLearningCourse5-序列模型

终于在八月末学完了这门课程,这个月虽然为此不停地忙碌,但每天都在进步也是一种乐趣。 吴恩达教授的课程循序渐进,适合初学者,非常感谢他的辛苦付出。 文章目录第一周:循环序列模型循环神经网络(RNN&#…

IdentityServer4系列 | 客户端凭证模式

一、前言从上一篇关于 快速搭建简易项目中,通过手动或者官方模板的方式简易的实现了我们的IdentityServer授权服务器搭建,并做了相应的配置和UI配置,实现了获取Token方式。而其中我们也注意到了三点就是,有哪些用户(users)可以通过…

数据结构 - 链表

准备重启尘封一年的博客作为学习笔记,看看自己能坚持多久。 最近会记录做过的算法题,语言描述只用于会意,仅供参考。 文章目录0.从尾到头获取链表的值(不是反转链表)1.寻找/删除单链表倒数第k个节点3.寻找单链表的中点…

[读书笔记] 《修炼之道:.NET 开发要点精讲》

《修炼之道:.NET 开发要点精讲》目录《修炼之道:.NET 开发要点精讲》第 1 章 另辟蹊径:解读.NET1.7 本章思考 > 位置 465第 2 章 高屋建瓴:梳理编程约定2.2 方法与线程的关系 > 位置 5192.7 线程安全 > 位置 5952.8 调用与回调 > 位置 6612.…

ASP.NET Core 使用 gRPC 初探

(RPC通讯示意图)为什么突然说到gRPC呢,其实以前就想说一说这个东西,也想尝试使用一下,一直没有机会,一直看我公众号的小伙伴肯定都知道,这几天一直在录制一个《eShopOnContainer微服务架构》系列…

源码都没调试过,怎么能说熟悉 redis 呢?

一:背景 1. 讲故事记得在很久之前给初学的朋友们录制 redis 视频课程,当时结合了不少源码进行解读,自以为讲的还算可以,但还是有一个非常核心的点没被分享到,那就是源码级调试, 对,读源码还远远…

算法 - DFS/BFS

写DFS函数的时候首先确定当前位置是否已经加入路径 DFS函数大概率会传递“位置信息”,根据位置信息获取下一步的选择,(大部分是在循环中)选择、执行、回退 在哪做选择,就在哪退出选择,参考题9 def DFS()…

你想象中的Task后续,很简单?

【导读】前不久,写过一篇关于Task的简短文章,通过评论和转载得到好评,刚好我昨晚又写了一篇实现简单的消息队列也提到了Task,难道不应该是看具体执行什么操作,再考虑最佳方案?本文我们再次通过简短内容谈谈…

5G在工业互联网应用的机遇与挑战

移动通讯经过十年一代的发展,已经从1G发展到了5G,峰值速率实现十年千倍的增长,1G到4G是面向个人的,而5G是面向产业互联网和智慧城市服务。5G是一个颠覆性的技术,低时延(每秒钟下载一部高清电影)…

[C#.NET 拾遗补漏]10:理解 volatile 关键字

要理解 C# 中的 volatile 关键字,就要先知道编译器背后的一个基本优化原理。比如对于下面这段代码:public class Example {public int x;public void DoWork(){x 5;var y x 10;Debug.WriteLine("x " x ", y " y);} }在 Releas…

跟我一起学.NetCore之MediatR好像有点火

前言随着微服务的流行,而DDD(领域驱动设计)也光速般兴起,CRQS(Command Query Responsibility Seperation--命令查询职责分离)、领域事件名词是不是经常在耳边环绕,而MediatR组件经常用来对其技术的落地,凭这,小伙伴们说…

不想写脚本清理 mongodb 中的垃圾数据,ttlIndex 能帮到你!

mongodb一直都在不断的更新,不断的发展,那些非常好玩也非常实用的功能都逐步加入到了mongodb中,这不就有了本篇对ttlindex的介绍,刚好我们的生产业务场景中就有一个案例。。。一:案例分析 生产的推荐系统要给用户发送短…

后端学习 - 基础 《Java编程的逻辑》读书笔记

文章目录一 基础概念1 有关Java2 JVM / JDK / JRE3 与C的联系和区别4 各类型数据占用空间大小5 和 equals() 的区别、hashCode() 方法6 包装类型7 final 关键字8 参数传递机制:值传递9 String 的内存情况10 访问修饰符11 引用拷贝、浅拷贝与深拷贝三 面向对象1 面向…

cheatengine找不到数值_彩票中奖500万,领了还不到一半?这些问题不解决,钱都拿不走...

长期以来,“一夜暴富”是很多人梦寐以求的梦想,而作为最能让人“一夜暴富”的方式要数我国的福利彩票了,这也是很多人最容易活动暴富的机会,不少彩民长久以来一直买彩票的梦想就是“一夜暴富”。而突然暴富是很多人的梦想&#xf…

一站式Web开发套件BeetleX.WebFamily

BeetleX.WebFamily是一款前后端分离的Web开发套件,但它并不依赖于nodejs/npm/webpack等相关工具;而使用自身实现的方式来完成前后端分离的Web应用开发;套件以组件的方式发布,只需要在项目引用相关组件即可实现前后端分离开发&…