目录

第一周(深度学习的实践层面)

第二周(优化算法)

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

目标: 如何有效运作神经网络,内容涉及超参数调优,如何构建数据,以及如何确保优化算法快速运行,从而使学习算法在合理时间内完成自我学习。

第一周(深度学习的实践层面)

如何选取一个神经网络的训练集、验证集和测试集呢?

如果数据量比较少,例如只有100条,1000条或者1万条数据,按照60%、20%、20%划分是比较合理的,但是在目前大部分数据都是远远大于这个数理级,也可以说是大数据规模的级别。那么,此时选择的比例比较合适的为训练集占98%,验证集和测试集各占1%。

在对于验证集和测试集的数据选择上,尽量确保这两部分数据来自同一分布,这样处理的是会使得算法的性能验证结果更加精确。

优化神经网络性能的基本思路

合理地分析训练集在训练算法产生的误差和验证集上验证算法产生的误差来诊断算法是否存在高偏差和高方差,对系统地优化算法有很大的帮助。

在训练神经网络时,如果算法的偏差很高,甚至无法拟合训练集,那么此时需要选择一个新的网络,比如含有更多隐藏层或者隐藏单元的网络,或者花费更多时间来训练网络,或者尝试更先进的优化算法。

训练网络完成后,验证其性能时,如果方差很高,最好的解决办法就是采用更多数据,如果能够做到,会有一定的帮助,但有时候,我们无法获得更多数据,我们也可以尝试通过正则化来减少过拟合。

L2正则化方法

L2正则化更新W值过程

为什么正则化有利于预防过拟合呢?

如果正则化参数很大,激活函数的参会会相对较小,因为代价函数的参数变大了。如果W很小,相对来说,z也会很小。此时,激活函数g(z)大致呈线性,和线性回归函数一样,此时就可以很好地解决过拟合问题。具体如下图:

dropout正则化

使用数据扩增可以有效减少神经网络中的过拟合,例如把已有数据进行相关处理,可以把图片翻转或者变形压缩等处理,这样就大大增加了已有样本数据集的数量。

此外,还可以选择采用early stopping方式来减少神经网络中的过拟合。例如下图:

梯度检验应用的注意事项

首先,不要在训练中使用梯度检验,它只用于调试。

第二点,如果算法的梯度检验失败,要检查所有项,检查每一项,并试着找出bug

第三点,在实施梯度检验时,如果使用正则化,请注意正则项。

第四点,梯度检验不能与dropout同时使用,因为每次迭代过程中,dropout会随机消除隐藏层单元的不同子集,难以计算dropout在梯度下降上的代价函数J。

最后一点,也是比较微妙的一点,现实中几乎不会出现这种情况。当w和b接近0时,梯度下降的实施是正确的,在随机初始化过程中……,但是在运行梯度下降时,w和b变得更大。可能只有在w和b接近0时,backprop的实施才是正确的。但是当W和b变大时,它会变得越来越不准确。你需要做一件事,我(吴恩达老师)不经常这么做,就是在随机初始化过程中,运行梯度检验,然后再训练网络,w和b会有一段时间远离0,如果随机初始化值比较小,反复训练网络之后,再重新运行梯度检验。

第二周(优化算法)

Mini-batch梯度下降简单介绍

mini-bach梯度下降法,核心是把输入数据以及输出数据,以一定数量组分组变成向量化的结果进行相关计算,这样做的好处就是循环次数大大减少,也能够提高运行效率。下图可参考:

使用batch(批量)梯度下降法,一次遍历训练集只能让你做一个梯度下降,使用mini-batch梯度下降法,一次遍历训练集,能让你做5000个梯度下降。当然正常来说你想要多次遍历训练集,还需要为另一个while循环设置另一个for循环。所以你可以一直处理遍历训练集,直到最后你能收敛到一个合适的精度。

如果你有一个丢失的训练集,mini-batch梯度下降法比batch梯度下降法运行地更快,所以几乎每个研习深度学习的人在训练巨大的数据集时都会用到。

mini-bathc梯度下降法和batch梯度下降法随着训练次数的关系图:

如果mini-batch中设置的分组数目大小为1,此时算法就变成了随机梯度下降法。

样本集较小时,推荐直接使用batch梯度下降法,此时没有必要使用mini-batch梯度下降法。

使用mini-batch梯度下降法注意点

在使用mini-batch梯度下降法时要注意选定的分组数目要合理,一般选择2的指数次,例如64或者512。如果选择的数目不合理,会因为你训练所在的CPU/GPU内存不相符,导致算法的表现得不到预期效果。

理解指数加权平均数

指数加权平均数,类似一个等比数列和等差数列的组合体,计算第n项需要不断迭代,如下图:

动量梯度下降法

加快学习算法的一个办法就是随时间慢慢减少学习率,我们将之称为学习率衰减。

梯度下降

在机器学习中,最简单就是没有任何优化的梯度下降(GD,Gradient Descent),我们每一次循环都是对整个训练集进行学习,这叫做批量梯度下降(Batch Gradient Descent),我们之前说过了最核心的参数更新的公式,这里我们再来看一下:

由梯度下降算法演变来的还有随机梯度下降(SGD)算法和小批量梯度下降算法,随机梯度下降(SGD),相当于小批量梯度下降,但是和mini-batch不同的是其中每个小批量(mini-batch)仅有1个样本,和梯度下降不同的是你一次只能在一个训练样本上计算梯度,而不是在整个训练集上计算梯度。

包含动量的梯度下降

Adam算法

Adam的一些优点包括相对较低的内存要求(虽然比梯度下降和动量下降更高)和通常运作良好,即使对参数进行微调(除了学习率α)。

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

调试处理

在训练神经网络时,有很多参数需要调整来使得训练结果变得更加合理,其中经常需要调试的参数为学习速率a。

当有多个超参数需要调节时,可以采用由粗糙到精细的策略,即估算出最佳参数的调节范围,然后再在缩小的调节范围中精细调节。

超参数调试的实践

(1) 你照看一个模型,通常是有庞大的数据组,但没有许多计算资源或足够的CPUGPU的前提下,基本而言,你只可以一次负担起试验一个模型或一小批模型,在这种情况下,即使当它在试验时,你也可以逐渐改良。类比哺乳动物照看孩子,例如熊猫,一般只能照看一个孩子

(2) 同时试验多种模型,你设置了一些超参数,尽管让它自己运行,或者是一天甚至多天,然后你会获得不同的学习曲线,这可以是损失函数J或实验误差或损失或数据误差的损失,但都是你曲线轨迹的度量。类比鱼产卵,可以由很多很多,但其中只要有成功存活就可以。

Batch归一化一次只能处理一个mini-batch数据,它在mini-batch上计算均值和方差。 使用Batch归一化,能够训练更深的网络,让学习算法运行速度更快。

Softmax回归

有一种logistic回归的一般形式,叫做Softmax回归,能让你在试图识别某一分类时做出预测,或者说是多种分类中的一个,不只是识别两个分类。 Softmax回归或Softmax激活函数将logistic激活函数推广到C类,而不仅仅是两类。可以参考下图的输出层:

Tesorflow框架使用

初始化Tensorflow变量后,进行相关运算时,例如乘法运算,运算前需要创建一个session,然后调用session.run()方法才能成功完成相关运算。

参考资料:

1.https://blog.csdn.net/u013733326/article/details/79907419

2.http://www.ai-start.com/

Deep Learning.ai学习笔记_第二门课_改善深层神经网络:超参数调试、正则化以及优化的更多相关文章

  1. Deep Learning.ai学习笔记_第一门课_神经网络和深度学习

    目录 前言 第一周(深度学习引言) 第二周(神经网络的编程基础) 第三周(浅层神经网络) 第四周(深层神经网络) 前言 目标: 掌握神经网络的基本概念, 学习如何建立神经网络(包含一个深度神经网络), ...

  2. Deep Learning.ai学习笔记_第四门课_卷积神经网络

    目录 第一周 卷积神经网络基础 第二周 深度卷积网络:实例探究 第三周 目标检测 第四周 特殊应用:人脸识别和神经风格转换 第一周 卷积神经网络基础 垂直边缘检测器,通过卷积计算,可以把多维矩阵进行降 ...

  3. Deep Learning.ai学习笔记_第三门课_结构化机器学习项目

    目录 第一周 机器学习策略(1) 第二周 机器学习策略(2) 目标:学习一些机器学习优化改进策略,使得搭建的学习模型能够朝着最有希望的方向前进. 第一周 机器学习策略(1) 搭建机器学习系统的挑战:尝 ...

  4. Deep Learning.ai学习笔记_第五门课_序列模型

    目录 第一周 循环序列模型 第二周 自然语言处理与词嵌入 第三周 序列模型和注意力机制 第一周 循环序列模型 在进行语音识别时,给定一个输入音频片段X,并要求输出对应的文字记录Y,这个例子中输入和输出 ...

  5. 【Deep Learning Nanodegree Foundation笔记】第 7 课:NEURAL NETWORKS Intro to Neural Networks

    In this lesson, you'll dive deeper into the intuition behind Logistic Regression and Neural Networks ...

  6. Coursera Deep Learning笔记 改善深层神经网络:超参数调试 正则化以及梯度相关

    笔记:Andrew Ng's Deeping Learning视频 参考:https://xienaoban.github.io/posts/41302.html 参考:https://blog.cs ...

  7. 【Deep Learning Nanodegree Foundation笔记】第 0 课:课程计划

    第一周 机器学习的类型,以及何时使用机器学习 我们将首先简单介绍线性回归和机器学习.这将让你熟悉这些领域的常用术语,你需要了解的技术进展,并了解深度学习在更大的机器学习背景中的位置. 直播:线性回归 ...

  8. 【Deep Learning Nanodegree Foundation笔记】第 10 课:Sentiment Analysis with Andrew Trask

    In this lesson, Andrew Trask, the author of Grokking Deep Learning, will walk you through using neur ...

  9. 【Deep Learning Nanodegree Foundation笔记】第 1 课:INTRODUCTION Welcome

    Welcome to the Deep Learning Nanodegree Foundations Program! In this lesson, you'll meet your instru ...

随机推荐

  1. 框架MyBatis

    ByBatis MyBatis是Apache的一个开源项目iBatis,iBatis3.x 正式更名为MyBatis ,代码于2013年11月迁移到Github.它是一个基于Java的持久层框架(连数 ...

  2. LoadRunner脚本参数化之自动关联和手动关联

    一.关联的意义  1.关联的含义 关联(correlation):在脚本回放过程中,客户端发出请求,通过关联函数所定义的左右边界值(也就是关联规则),在服务器所响应的内容中查找,得到相应的值,以变量的 ...

  3. JavaEE 之 DBCP

    1.DBCP a.定义:DBCP(DataBase Connection Pool)数据库连接池,是java数据库连接池的一种,由Apache开发,通过数据库连接池,可以让程序自动管理数据库连接的释放 ...

  4. Codeforces 861D - Polycarp's phone book 【Trie树】

    <题目链接> 题目大意: 输入7e4个长度为9的字符串,每个字符串中只出现0~9这几种数字,现在需要你输出每个母串中最短的特有子串. 解题分析: 利用Trie树进行公共子串的判定,因为Tr ...

  5. Codeforces 521C (经典)组合数取模【逆元】

    <题目链接> <转载于 >>>  > 题目大意:给出一串n个数字,让你在这串数字中添加k个 ' + ' 号(添加后表达式合法),然后所有拆分所得的所有合法表达 ...

  6. Effective前端1---chapter 1 HTML/CSS优化

    最近在读高效前端:web高效编程与优化实践,借此本书的感受总结下前端代码与性能优化,纯属自己见解,如有错误,欢迎指出. 1.能用HTML/CSS解决的问题就不要用js 场景1:鼠标悬浮时显示 鼠标悬浮 ...

  7. git 将主分支的提交合并到分支上(主分支同步到分支)

    通常都会遇到将分支修改的内容合并到主分支中,但是在主分支中修改了内容怎么同步到分支上呢,这个时候需要将主分支上的提交操作在分支上再做一次: 1.首先在主分支上执行: git log 2.找到你想要同步 ...

  8. BZOJ2587 : [Ceoi2011]Team

    将球员按限制从大到小排序,那么最优解中每支球队都是一个连续的区间. 设$f[i]$表示前$i$大的球员成功组队时,最多能组的队伍数,$g[i]$表示此时最大人数的最小值. 那么$f[i]=\max(f ...

  9. db2 load报文件系统满

    使用db2 load导入数据 数据量比较大时常常会报文件系统已满错误. 原因分析:导入表建有索引,在load的“索引复制”阶段会从系统临时表空间拷贝到目标表空间,导致系统临时表空间所在的文件系统满,l ...

  10. Annotation 的第一个工程

    一.什么是 Annotation? java.lang.annotation,接口 Annotation.对于Annotation,是Java5的新特性,JDK5引入了Metadata(元数据)很容易 ...