吴恩达深度学习课程理论加实践(一、概述)

整套课程相对来说也是比较基础的,更多的是一种快速入门。学习者其实也没有硬性要求有一定相关基础,对于机器学习算法有一定相关了解即可(可以参见博客吴恩达机器学习系列理论加实践),关于实践部分给出了代码框架,对于python可以边用边学即可。
此系列文章并没有什么创新和添加,看完一遍更多是是一个回顾总结以及夯实,然后也是为了共同学习过课程的小伙伴之间可以相互交流学习。


课程介绍


我们将帮助你掌握深度学习,理解如何应用深度学习,在人工智能业界开启你的职业生涯。”吴恩达在课程页面中提到。

你会学到深度学习的基础,理解如何创建神经网络,学习怎么成功地领导机器学习项目。你会学习卷积神经网络、 RNNs、LSTM、Adam、Dropout、BatchNorm、Xavier/He initialization 以及更多。学习过程中,你会接触到医疗、自动驾驶、读手语、音乐生成、自然语言处理的案例。
在这里插入图片描述
本课程总共分为5次课,每次课大概需要4周左右,合起来还是一个比较漫长的过程的,所以是对于基础入门的同学来说还是比较合适的,慢工出细活,对于基本知识的掌握还是应该认真学习、积极实践的

第一次课:神经网络和深度学习基础
第二次课:提升神经网络:超参数、正则化及其优化等
第三次课:结构化机器学习
第四次课:卷积神经网络
第五次课:序列模型

第一课 神经网络和深度学习

第一周 深度学习介绍

1.1 什么是神经网络

深度学习这个术语来指训练神经网络的过程。有时它指的是特别大规模的神经网络训练。那么神经网络究竟是什么呢?

让我们从一个房价预测的例子开始讲起。
假设你有一个数据集,它包含了六栋房子的信息。所以,你知道房屋的面积是多少平方英尺或者平方米,并且知道房屋价格。这时,你想要拟合一个根据房屋面积预测房价的函数。
如果你对线性回归很熟悉,你可能会说:“好吧,让我们用这些数据拟合一条直线。”于是你可能会得到这样一条直线。
在这里插入图片描述
我们知道价格永远不会是负数的。因此,为了替代一条可能会让价格为负的直线,我们把直线弯曲一点,让它最终在零结束。这条粗的蓝线最
终就是你的函数,用于根据房屋面积预测价格。有部分是零,而直线的部分拟合的很好。你也许认为这个函数只拟合房屋价格。
作为一个神经网络,这几乎可能是最简单的神经网络。我们把房屋的面积作为神经网络的输入(我们称之为?),通过一个节点(一个小圆圈),最终输出了价格(我们用?表示)。其实这个小圆圈就是一个单独的神经元。接着你的网络实现了上边这个函数的功能。
在有关神经网络的文献中,你经常看得到这个函数。从趋近于零开始,然后变成一条直线。这个函数被称作 ReLU 激活函数,它的全称是 Rectified Linear Unit。rectify(修正)可以理解成???(0,?),这也是你得到一个这种形状的函数的原因。
让我们再来看一个例子,我们不仅仅用房屋的面积来预测它的价格,现在你有了一些有关房屋的其它特征,比如卧室的数量,或许有一个很重要的因素,一家人的数量也会影响房屋价格,这个房屋能住下一家人或者是四五个人的家庭吗?而这确实是基于房屋大小,以及真正决定一栋房子是否能适合你们家庭人数的卧室数。
在这里插入图片描述
在图上每一个画的小圆圈都可以是 ReLU 的一部分,也就是指修正线性单元,或者其它非线性的函数。基于房屋面积和卧室数量,可以估算家庭人口。
在这个情景里,家庭人口、步行化程度以及学校的质量都能帮助你预测房屋的价格。以此为例,? 是所有的这四个输入,? 是你尝试预测的价格,把这些单个的神经元叠加在一起,我们就有了一个稍微大一点的神经网络。
在这里插入图片描述
当你实现它之后,你要做的只是输入?,就能得到输出?。因为它可以自己计算你训练集中样本的数目以及所有的中间过程。所以,你实际上要做的就是:这里有四个输入的神经网络,这输入的特征可能是房屋的大小、卧室的数量、邮政编码和区域的富裕程度。给出这些输入的特征之后,神经网络的工作就是预测对应的价格。同时也注意到这些被叫做隐藏单元圆圈,在一个神经网络中,它们每个都从输入的四个特征获得自身输入,比如说,第一个结点代表家庭人口,而家庭人口仅仅取决于?1和?2特征,换句话说,在神经网络中,你决定在这个结点中想要得到什么,然后用所有的四个输入来计算想要得到的。因此,我们说输入层和中间层被紧密的连接起来了。
值得注意的是神经网络给予了足够多的关于?和?的数据,给予了足够的训练样本有关?和?。神经网络非常擅长计算从?到?的精准映射函数
这就是一个基础的神经网络。你可能发现你自己的神经网络在监督学习的环境下是如此的有效和强大,也就是说你只要尝试输入一个?,即可把它映射成?,就好像我们在刚才房价预测的例子中看到的效果。

1.2 神经网络的监督学习

在监督学习中你有一些输入?,你想学习到一个函数来映射到一些输出?,比如我们之前提到的房价预测的例子,你只要输入有关房屋的一些特征,试着去输出或者估计价格?。还有如以下监督学习实例应用等:在线广告的点击预测、图片分类、声音到文本的转录、翻译等等;
在这里插入图片描述
也许对于房地产和在线广告来说可能是相对的标准一些的神经网络,正如我们之前见到的。对于图像应用,我们经常在神经网络上使用卷积(Convolutional Neural Network),通常缩写为 CNN。对于序列数据,例如音频,有一个时间组件,随着时间的推移,音频被播放出来,所以音频作为一维时间序列(两种英文说法 one-dimensional time
series / temporal sequence)是最自然的表现。对于序列数据,经常使用 RNN,一种递归神经网络(Recurrent Neural Network),英语和汉语字母表或单词都是逐个出现的,所以语言也是最自然的序列数据,因此更复杂的 RNNs 版本经常用于这些应用。
习对于结构化数据和非结构化数据的应用,结构化数据意味着数据的基本数据库。例如在房价预测中,你可能有一个数据库,有专门的几列数据告诉你卧室的大小和数量,这就是结构化数据。或预测用户是否会点击广告,你可能会得到关于用户的信息,比如年龄以及关于广告的一些信息,然后对你的预测分类标注,这就是结构化数据,意思是每个特征,比如说房屋大小卧室数量,或者是一个用户的年龄,都有一个很好的定义。
相反非结构化数据是指比如音频,原始音频或者你想要识别的图像或文本中的内容。这里的特征可能是图像中的像素值或文本中的单个单词。
在这里插入图片描述
从历史经验上看,处理非结构化数据是很难的,与结构化数据比较,让计算机理解非结构化数据很难,而人类进化得非常善于理解音频信号和图像,文本是一个更近代的发明,但是人们真的很擅长解读非结构化数据。
神经网络的兴起就是这样最令人兴奋的事情之一,多亏了深度学习和神经网络,计算机现在能更好地解释非结构化数据,这是与几年前相比的结果,这为我们创造了机会。许多新的令人兴奋的应用被使用,语音识别、图像识别、自然语言文字处理,甚至可能比两三年前的还要多。

1.3 神经网络的兴起

数据规模、计算能力及创新算法的推动。
在水平轴上画一个形状,在此绘制出所有任务的数据量,而在垂直轴上,画出机器学习算法的性能。比如说准确率体现在垃圾邮件过滤或者广告点击预测,或者是神经网络在自动驾驶汽车时判断位置的准确性,根据图像可以发现,如果你把一个传统机器学习算法的性能画出来,作为数据量的一个函数,你可能得到一个弯曲的线,就像图中这样,它的性能一开始在增加更多数据时会上升,但是一段变化后它的性能就会像一个高原一样。
在这里插入图片描述
如果你训练一个小型的神经网络,那么这个性能可能会像下图黄色曲线表示那样;如果你训练一个稍微大一点的神经网络,比如说一个中等规模的神经网络(下图蓝色曲线),它在某些数据上面的性能也会更好一些;如果你训练一个非常大的神经网络,它就会变成下图绿色曲线那样,并且保持变得越来越好。因此可以注意到两点:如果你想要获得较高的性能体现,那么你有两个条件要完成,第一个是你需要训练一个规模足够大的神经网络,以发挥数据规模量巨大的优点,另外你需要能画到?轴的这个位置,所以你需要很多的数据。因此我们经常说规模一直在推动深度学习的进步,这里的规模指的也同时是神经网络的规模,我们需要一个带有许多隐藏单元的神经网络,也有许多的参数及关联性,
就如同需要大规模的数据一样。事实上如今最可靠的方法来在神经网络上获得更好的性能,往往就是要么训练一个更大的神经网络,要么投入更多的数据。
在这里插入图片描述
为了使这个图更加从技术上讲更精确一点,我在?轴下面已经写明的数据量,这儿加上一个标签(label)量,通过添加这个标签量,也就是指在训练样本时,我们同时输入?和标签?,接下来引入一点符号,使用小写的字母?表示训练集的规模,或者说训练样本的数量,这个小写字母?就横轴结合其他一些细节到这个图像中。

在深度学习萌芽的初期,数据的规模以及计算量,局限在我们对于训练一个特别大的神经网络的能力,无论是在 CPU 还是 GPU 上面,那都使得我们取得了巨大的进步。但是渐渐地,尤其是在最近这几年,我们也见证了算法方面的极大创新。许多算法方面的创新,一直是在尝试着使得神经网络运行的更快。
作为一个具体的例子,神经网络方面的一个巨大突破是从 sigmoid 函数转换到一个 ReLU函数,
在这里插入图片描述
在坐标轴趋近两侧时sigmoid 函数的梯度会接近零,所以学习的速度会变得非常缓慢,因为当你实现梯度下降以及梯度接近零的时候,参数会更新的很慢,所以学习的速率也会变的很慢,而通过改变这个被叫做激活函数的东西,神经网络换用这一个函数,叫做 ReLU 的函数(修正线性单元),ReLU 它的梯度对于所有输入的负值都是零,因此梯度更加不会趋向逐渐减少到零。而这里的梯度,这条线的斜率在这左边是零,仅仅通过将 Sigmod 函数转换成 ReLU 函数,便能够使得一个叫做梯度下降(gradient descent)的算法运行的更快,这就是一个或许相对比较简单的算法创新的例子。
快速计算显得更加重要的另一个原因是,训练你的神经网络的过程,很多时候是凭借直觉的,往往你对神经网络架构有了一个想法,于是你尝试写代码实现你的想法,然后让你运行一个试验环境来告诉你,你的神经网络效果有多好,通过参考这个结果再返回去修改你的神经网络里面的一些细节,然后你不断的重复上面的操作。达到一个不断快速迭代的目的。
在这里插入图片描述
第一周主要是一个课程框架的了解及相关知识的一个宏观的介绍,并不包含实践部分。

下一讲
第二周:神经网络编程基础

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值