当前位置: 首页 > 编程日记 > 正文

吴恩达老师深度学习视频课笔记:深度学习的实用层面

        训练、验证和测试数据集(training、development and test sets):训练神经网络时,我们需要作出很多决策,如神经网络分多少层(layers)、每层含有多少个隐藏层单元(hidden units)、学习率(learning rates)、各层采用哪些激活函数(activation functions)等。开始一个新应用时,我们不可能从一开始就准确预测出这些信息和其它的超参数。实际上,应用型机器学习是一个高度迭代的过程。通常在项目启动时,我们会先有一个初步想法,比如构建一个含有特定层数(certain number of layers)、特定隐藏层单元数量、特定数据集的神经网络。然后编码并尝试运行这些代码。通过运行和实验,你得到该神经网络结果,告知你设置这些配置信息后的运行结果是怎样的。然后基于输出结果,重新完善你的想法、改变策略,或者为了找到更好的神经网络不断迭代更新自己的方案。

        我们通常会把数据集分为三部分:一部分作为训练集(training set);一部分作为交叉验证集(hold-out cross validation set),有时也称为验证集(development set);一部分作为测试集(test set)。首先,对训练集执行训练算法,然后通过验证集选择最好的模型,最后在测试集上对选择的最终模型进行评估。为了无偏评估(unbiased estimate)算法的状态,在机器学习发展的小数据量时代,常见的做法是将数据集七三分,即70%作为训练集,30%作为测试集;如果有验证集,则60%作为训练集,20%作为验证集,20%作为测试集。如果数据集仅有100、1000或10000,按上述比例划分是非常合理的。但是在大数据时代,数据量可能是百万级别,或更大,那么验证集和测试集占数据总量的比例会趋向于变得更小。验证集的目的就是验证不同的算法,校验哪种算法更有效,因此验证集要足够大才能评估。通过验证集可以选择几种较好的算法,最后通过测试集选择最终的算法。测试集的主要目的是评估算法的效果。在训练模型时,要保证验证集和测试集的数据来自同一分布。有时没有测试集也是可以的,因为测试集的主要目的是对所选定的神经网络做出无偏评估(unbiased estimate)。如果不需要无偏评估也可以不设置测试集。在机器学习中,如果只有一个训练集和一个验证集而没有测试集,在这种情况下,人们经常将训练集称为训练集,而把验证集称为测试集。

        偏差(bias)/方差(variance)高偏差我们称为欠拟合(underfitting),高方差称为过拟合(overfitting)。理解偏差和方差的两个关键是训练集误差(train set error)和验证集误差(development set error)。


通过查看训练集误差和验证集误差,我们便可以判断出现有算法是否具有高方差,高偏差,如下图。假设:(1)、训练集误差为1%,验证集误差为11%,此种情况属于高方差;(2)、训练集误差为15%,验证集误差为16%,此种情况属于高偏差;(3)、训练集误差为15%,验证集误差为30%,此种情况属于高偏差、高方差;(4)、训练集误差为0.5%,验证集误差为1%,此种情况正常,属于低偏差、低方差。注:以上假设的前提是:基于最优误差(optimal error)或贝叶斯误差(Bayes error)接近0%,即人眼辨别的错误率接近0%,且训练集和验证集数据来自相同分布。


当我们训练神经网络的时用到的基本方法(basic recipe)是判断算法偏差或方差是否偏高。初始模型训练完成后,我们首先要判断算法的偏差高不高,如果偏差过高,甚至无法拟合数据集,就需要试图选择(pick)一个新网络,比如含有更多隐藏层或者隐藏单元的网络,或者花费更多的时间来训练网络,或者尝试更先进(more advanced)的优化算法或者尝试其它不同的神经网络架构(neural network architectures)。一般采用更大规模的网络会有所帮助。反复尝试,直到拟合数据为止。一旦偏差降低到可接受的数值,然后检查方差是否正常。如果方差高,最好的解决办法是采用更多的数据。如果无法获得更多数据,我们也可以尝试通过正则化(regularization)来减少过拟合。有时为了能够找到更合适的神经网络架构,我们不得不反复尝试,直到找到一个低偏差和低方差的架构。

有两点需要注意:第一:高偏差和高方差是两种不同的情况,通常会用训练集、验证集来诊断算法是否存在偏差或方差问题;要清楚存在问题的是偏差还是方差,还是两者都有问题。第二:只要持续训练一个更大的网络,准备更多的数据,就可以减少偏差或方差,而不影响另一方,也不用太过于关注如何平衡偏差和方差。

        正则化(regularization):解决高方差(过度拟合)一般有两种方法,一个是正则化,一个是准备更多数据。正则化是一种非常实用的减少方差的方法

L1范数正则化、L2范数正则化。λ是正则化参数,通常用验证集来配置这个参数。L2范数正则化也被称为权重衰减(weight decay)。在神经网络中,L2范数一般被称为弗罗贝尼乌斯范数(frobenius norm),如下图。


为了调试梯度下降,务必使用带有正则化的J函数(成本函数),它可以保证在所有调幅范围内单调递减。

        Dropout正则化:直观上,dropout可以随机删除(knocking out)网络中的神经单元,好像每次迭代之后,神经网络都会变得比之前更小。dropout可以采用inverted dropout方法,其有一个参数为keep_prob,如果你担心某些层比其它层更容易发生过拟合,可以把某些层的keep_prob值设置的比其它层更低。也可以有些层应用dropout,而有些层不使用dropout。应用dropout,只含有一个超参即keep_prob。dropout的一大缺点就是成本函数J不再被明确定义,因为每次迭代都会随机移除一些节点。

        其它几种减少神经网络过拟合的方法:(1)、训练数据扩增(dataaugmentation):水平翻转原有图像、随意裁剪原有图像、旋转并随机缩放原有图像等增加额外假(fake)训练数据,这样可以不用增加额外的花费,代价几乎为0。(2)、early stopping:提早停止训练神经网络,因为验证集误差通常会先呈下降趋势,然后在某个节点处开始上升,在此节点处停止训练神经网络。

        加速训练的方法:归一化输入(normalize your inputs)。归一化输入需要两个步骤:第一:零均值化(subtract out or to zero out the mean);第二:归一化方差(normalizethe variances);如下图。


需要用同样的方法调整测试集,我们希望不论是在训练数据还是在测试数据都是通过相同的μ和σ2,其中μ和σ2是由训练集数据计算得来的。归一化输入的原因:应用梯度下降法,使学习算法运行的更快,可以更快地找到最小值,更容易优化,如下图。如果输入特征处于不同范围内,可能有些特征值从0到1,有些从1到1000,那么归一化特征值就非常重要。如果特征值处于相似范围内,那么归一化就不是很重要了。


        梯度消失与梯度爆炸(vanishing/exploding gradients):当你训练深度网络时,导数或坡度(slope)有时会变得非常大或非常小,这加大了训练的难度,明智地选择随机初始化权重可以避免这个问题,即设置的权重矩阵,既不会增长过快,也不会太快下降到0。

        梯度的数值逼近(numerical approximation of gradients):在实施back propagation时,有一个测试叫梯度校验(gradient checking),它的作用是确保back propagation正确实施,可以使用双边误差(two sided difference),如下图:


GitHub:https://github.com/fengbingchun/NN_Test  

相关文章:

FtpCopy数据定时自动备份软件(FTP定时备份)

1. 软件说明 FtpCopy是一款免费的FTP数据自动备份软件,如果FtpCopy对您有较大的帮助,欢迎捐赠我们,我们对您表示衷心的感谢! 如果有需求的话会一直更新下去,将软件做到极致! 有问题可直接“反馈留言”。 特…

专注NLP,竹间智能完成4500万美元B+轮融资

近日,竹间智能在成立四周年之际宣布完成4500万美元B轮融资。本轮由某重要战略合作方、云晖资本及领沨资本联合领投,凯思博投资、众安资本、趋势资本、普华资本、一路资本跟投,光源资本担任本轮融资的独家财务顾问。竹间智能方面表示&#xff…

JDBC连接各种数据库方法

为什么80%的码农都做不了架构师?>>> 声明 以下内容收集自网络,并没有亲自测试可用性。 一、Oracle8/8i/9i数据库(thin模式) Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); String url&…

OpenCV支持中文字符输出实现

在 http://www.opencv.org.cn/forum.php?modviewthread&tid2083&extra&page1 中,作者给出了原始的在OpenCV中 支持中文字符的输入,原始的实现使用的是OpenCV的C接口,使用起来不怎么方便,这里对原作者的实现进行调整&…

CSDN”原力计划“在召唤:技术人请集结,用原创技术影响万千开发者

技术深不可测、薪资难以想象、着装招人吐槽、发量让人惊叹、笑点着实密集、情商令人堪忧......在这个你我他她它通过网络紧密互联、消息实时互通的 21 世纪,人们对身处技术至高点的程序员们仍然有着以上不接地气、呆板保守的误解,对此,操着一…

.asmx支持post请求或者get请求调用(WebService 因 URL 意外地以 结束,请求格式无法识别 的解决方法)...

使用Post调用以asmx形式提供的webservice时&#xff0c;在本机调试没有调用问题。一旦部署至服务器后会提示如下信息&#xff1a; <html><head><title>因 URL 意外地以“/GetCertByToken”结束&#xff0c;请求格式无法识别。</title><meta name&qu…

关于StartCoroutine的简单线程使用

StartCoroutine在unity3d的帮助中叫做协程&#xff0c;意思就是启动一个辅助的线程。 在C#中直接有Thread这个线程&#xff0c;但是在unity中有些元素是不能操作的。这个时候可以使用协程来完成。 使用线程的好处就是不会出现界面卡死的情况&#xff0c;如果有一次非常大量的运…

Robot Framework(十八) 支持工具

5支持工具 5.1库文档工具&#xff08;libdoc&#xff09; libdoc是一种用于为HTML和XML格式的测试库和资源文件生成关键字文档的工具。前一种格式适用于人类&#xff0c;后者适用于RIDE和其他工具。Libdoc也没有很少的特殊命令来显示控制台上的库或资源信息。 可以创建文档&…

基于开源TiRG的文本检测与提取实现

在 http://funkybee.narod.ru/ 中作者给出了文本检测和提取的实现&#xff0c;仅有一个.hpp文件&#xff0c;为了在windows上编译通过&#xff0c;这里简单进行了改动&#xff0c;改动后的code如下&#xff1a; #include <math.h> #include <stdio.h> #include &l…

Kaggle Days首次落地中国,日本团队拿下冠军

2019 年 10 月 20 日&#xff0c; 为期两天的 Kaggle Days 中国活动在北京圆满结束。作为全球最知名的线下数据科学活动在中国的首次落地&#xff0c;Kaggle Days 获得了谷歌、Kaggle 以及 16 位来自美国、俄罗斯、捷克、日本以及中国的 Kaggle Grandmaster 以及 Master 的大力…

《WF编程》笔记目录

《WF编程》笔记目录

activity的四种加载模式

在android里&#xff0c;有4种activity的启动模式&#xff0c;分别为&#xff1a; standard, singleTop, singleTask和singleInstance, 其中standard和singleTop类似&#xff0c; singleTask和singleInstance类似&#xff0c; 用法如下&#xff1a; (1).standard和singleTop 这…

吴恩达老师深度学习视频课笔记:优化算法

优化算法能够帮助你快速训练模型。mini-batch梯度下降法&#xff1a;把训练集分割(split)为小一点的子训练集&#xff0c;这些子集被叫做mini-batch。batch梯度下降法指的是&#xff1a;同时处理整个训练集&#xff0c;只有处理完整个训练集才更新一次权值和偏置。并且预期每次…

程序员编程时戴耳机是在听什么?

1024程序员节&#xff0c;CSDN旗下的码书商店为程序员放个“价”&#xff0c;全场所有书籍8折&#xff0c;电子产品可以拥有大额优惠券&#xff0c;购买前可加文末客服微信领取优惠券哦。兰士顿耳机&#xff0c;原价199元&#xff0c;1024专属价159元&#xff0c;购买时候请输入…

Mac中MacPorts安装和使用

文章转载至http://www.zikercn.com/node/8 星期四, 06/07/2012 - 19:02 — 张慧敏 MacPorts简单介绍 MacPorts&#xff0c;以前叫做DarwinPorts&#xff0c;是一个软件包管理系统&#xff0c;用来简化Mac OS X和Darwin操作系统上软件的安装。它是一个用来简化自由软件/开放源码…

小白入门:我是如何学好机器学习的?

作者 | Jae Duk Seo译者 | Tianyu编辑 | 夕颜出品 | AI科技大本营&#xff08;ID: rgznai100&#xff09;在我看来&#xff0c;机器学习是一个计算机科学和数学知识相融合的研究领域。虽然这是个很有趣的领域&#xff0c;但它其实没有想象中那么难。我相信只要你有足够的动力、…

数据库服务器 之 PostgreSQL数据库的日常维护工作

来自&#xff1a;LinuxSir.Org摘要&#xff1a;为了保持所安装的 PostgreSQL 服务器平稳运行, 我们必须做一些日常性的维护工作。我们在这里讨论的这些工作都是经常重复的事情&#xff0c; 可以很容易地使用标准的 Unix 工具&#xff0c;比如cron 脚本来实现; 目录1. 综述&…

吴恩达老师深度学习视频课笔记:超参数调试、Batch正则化和程序框架

Tuning process(调试处理)&#xff1a;神经网络的调整会涉及到许多不同超参数的设置。需要调试的重要超参数一般包括&#xff1a;学习率、momentum、mini-batch size、隐藏单元(hidden units)、层数、学习率衰减。一般对于你要解决的问题而言&#xff0c;你很难提前知道哪个参数…

AD上删除了Exchange容器,再重装时报'找不到企业组织容器

AD上删除了Exchange容器,再重装时报找不到企业组织容器。安装日志如下:[06/16/2014 04:58:15.0054] [0] **********************************************[06/16/2014 04:58:15.0054] [0] Starting Microsoft Exchange Server 2013 Service Pack 1 Setup[06/16/2014 04:58:15.0…

实战:基于OpenPose的卡通人物可视化 | CSDN博文精选

作者 | Wuzebiao2016来源 | CSDN博客前言去年打算用些现成的Pose做些展示&#xff0c;因为以前有在OpenPose做些识别等开发工作&#xff0c;所以这次我就简单在OpenPose上把骨架用动画填充上去&#xff0c;关于能够和人动作联系起来的动画&#xff0c;我找到了Unity提供的示例A…

基于Idea从零搭建一个最简单的vue项目

一、需要了解的基本知识 node.js Node.js是一个Javascript运行环境(runtime)&#xff0c;发布于2009年5月&#xff0c;由Ryan Dahl开发&#xff0c;实质是对Chrome V8引擎进行了封装。Node.js对一些特殊用例进行优化&#xff0c;提供替代的API&#xff0c;使得V8在非浏览器环境…

OpenCV中基于LBP算法的人脸检测测试代码

下面是OpenCV 3.3中基于CascadeClassifier类的LBP算法实现的人脸检测&#xff0c;从结果上看&#xff0c;不如其它开源库效果好&#xff0c;如libfacedetection&#xff0c;可参考 https://blog.csdn.net/fengbingchun/article/details/52964163 #include "funset.hpp&qu…

解决getOutputStream() has already been called for this response[java io流]

getOutputStream() has already been called for this response以上异常出现的原因和解决方法&#xff1a;jsp中出现此错误一般都是在jsp中使用了输出流&#xff08;如输出图片验证码&#xff0c;文件下载等&#xff09;&#xff0c;没有妥善处理好的原因。具体的原因&#xff…

吴恩达老师深度学习视频课笔记:构建机器学习项目(机器学习策略)(1)

机器学习策略(machine learning strategy)&#xff1a;分析机器学习问题的方法。正交化(orthogonalization)&#xff1a;要让一个监督机器学习系统很好的工作&#xff0c;一般要确保四件事情&#xff0c;如下图&#xff1a;(1)、首先&#xff0c;你通常必须确保至少系统在训练集…

内行的AI盛会——北京智源大会带你洞见未来!(含日程及限量优惠)

报名请点击「阅读原文」北京国家会议中心2019年10月31日-11月1日www.baai.ac.cn/2019使用优惠码「BAAICSDN」专享7折优惠学生票仅69元&#xff0c;数量有限&#xff0c;先到先得世界AI看中国&#xff0c;中国AI看北京&#xff08;长按上图或点击「阅读原文」注册参会&#xff0…

微软职位内部推荐-Sr. Dev Lead

微软近期Open的职位:JD如果你想试试这个职位&#xff0c;请跟我联系&#xff0c;我是微软的员工&#xff0c;可以做内部推荐。发你的中英文简历到我的邮箱&#xff1a;Nicholas.lu.mail(at)gmail.com转载于:https://www.cnblogs.com/DotNetNuke/p/3885283.html

吴恩达老师深度学习视频课笔记:构建机器学习项目(机器学习策略)(2)

进行误差分析&#xff1a;可进行人工统计或可同时并行评估几个想法。进行误差分析时&#xff0c;你应该找一组错误例子&#xff0c;可能在你的开发集里或者在你的测试集里&#xff0c;观察错误标记的例子&#xff0c;看看假阳性(false positives)和假阴性(false negatives)&…

3D机器人视觉在仓储物流和工业自动化领域的应用 | AI ProCon 2019

整理 | 夕颜出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;随着深度学习和机器学习的发展&#xff0c;机器人已经走出实验室&#xff0c;越来越多地地应用于各行各业&#xff0c;其中&#xff0c;仓储物流和工业化领域就有许多适合机器人作业的场景环境。人眼的一大…

【转载】gdi+ 内存泄漏

【转载】http://issf.blog.163.com/blog/static/1941290822009111894413472/ 最近用GDI实现了几个自定义控件&#xff0c;但是发现存在内存泄露问题 BOOL CGdiplusBugDlg::OnEraseBkgnd(CDC* pDC) {Image* pImage Image::FromFile(L"E:\\bac.bmp");Graphics g(pDC-&…

ubuntu fctix

感觉ubuntu自在大ibus输入法用起来实在是灰常蛋痛啊&#xff0c;于是乎就换了fcitx输入法&#xff08;很多人推荐嘛&#xff09;在安装之前先说一下fcitx输入法吧。1.添加fcitx源(官方的源是旧版,不推荐使用)fcitx的ppa源&#xff0c;内含fcitx和fcitx-config,使用命令sudo ged…