本文参考黄海广主编针对吴恩达深度学习课程DeepLearning.ai 《深度学习课程 笔记 (V5.1 )》
一、 第一周 : 深度学习引言
1.1 欢迎(Welcome)
什么是深度学习,深度学习能做些什么事情?
1. 深度学习改变了传统互联网业务,例如如网络搜索和广告。
2. 深度学习同时也使得许多新产品和企业以很多方式帮助人们,从获得更好的健康关注。
应用:
一个方面就是读取 X 光图像,到生活中的个性化教育,到精准化农业,甚至到驾驶汽车以及其它一些方面。如果你想要学习深度学习的这些工具,并应用它们来做这些令人窒息的操作
AI 是最新的电力,大约在一百年前,我们社会的电气化改变了每个主要行业,从交通运输行业到制造业、医疗保健、通讯等方面,我认为如今我们见到了 AI 明显的令人惊讶的能量,带来了同样巨大的转变。显然,AI 的各个分支中,发展的最为迅速的就是深度学习。因此现在,深度学习是在科技世界中广受欢迎的一种技巧。
1.2 什么是神经网络?(What is a Neural Network)
我们常常用深度学习这个术语来指训练神经网络的过程。有时它指的是特别大规模的神
经网络训练。
神经网络究竟是什么呢?
举例一:房价预测的例子(单神经元网络一:一个X房屋的面积 预测一个Y房屋价格)
假设你有一个数据集,它包含了六栋房子的信息。
所以,你知道房屋的面积是多少平方英尺或者平方米,并且知道房屋价格。这时,你想要拟合一个根据房屋面积预测房价的函数。如果你对线性回归很熟悉,你可能会说:“好吧,让我们用这些数据拟合一条直线。”于
是你可能会得到这样一条直线。
价格永远不会是负数的。因此,为了替代一条可能会让价格为负的直线,我们把直线弯曲一点,让它最终在零结束。这条粗的蓝线最终就是你的函数,用于根据房屋面积预测价格。有部分是零,而直线的部分拟合的很好。你也许认为这个函数只拟合房屋价格。
作为一个神经网络,这几乎可能是最简单的神经网络。我们把房屋的面积作为神经网络的输入(我们称之为x),通过一个节点(一个小圆圈),最终输出了价格(我们用𝑧表示)。其实这个小圆圈就是一个单独的神经元。
在有关神经网络的文献中,你经常看得到这个函数。从趋近于零开始,然后变成一条直线。这个函数被称作 ReLU 激活函数,它的全称是 Rectified Linear Unit。rectify(修正)可以理解成max(0,x),这也是你得到一个这种形状的函数的原因。
举例二:
我们不仅仅用房屋的面积来预测它的价格,现在有了一些有关房屋的其它特征,比如卧室的数量,或许有一个很重要的因素,一家人的数量也会影响房屋价格,而这确实是基于房屋大小,以及真正决定一栋房子是否能适合你们家庭人数的卧室数。换个话题,你可能知道邮政编码或许能作为一个特征,告诉你步行化程度。比如这附近是不是高度步行化,你是否能步行去杂货店或者是学校,以及你是否需要驾驶汽车。有些人喜欢居住在以步行为主的区域,另外根据邮政编码还和富裕程度相关(在美国是这样的)。
但在其它国家也可能体现出附近学校的水平有多好。
在图上每一个画的小圆圈都可以是 ReLU 的一部分,也就是指修正线性单元,或者其它稍微非线性的函数。基于房屋面积和卧室数量,可以估算家庭人口,基于邮编,可以估测步行化程度或者学校的质量。最后你可能会这样想,这些决定人们乐意花费多少钱。
对于一个房子来说,这些都是与它息息相关的事情。在这个情景里,家庭人口、步行化程度以及学校的质量都能帮助你预测房屋的价格。以此为例,x 是所有的这四个输入,y是你尝试预测的价格,把这些单个的神经元叠加在一起,我们就有了一个稍微大一点的神经网络。这显示了神经网络的神奇之处,虽然我已经描述了一个神经网络,它可以需要你得到房
屋面积、步行化程度和学校的质量,或者其它影响价格的因素。
神经网络的一部分神奇之处在于,当你实现它之后,你要做的只是输入x,就能得到输出y。
值得注意的是神经网络给予了足够多的关于𝑦和𝑧的数据,给予了足够的训练样本有关x和y。神经网络非常擅长计算从x到y的精准映射函数。这就是一个基础的神经网络。
1.3 神经网络的监督学习(Supervised Learning with Neural Networks)
如今应用深度学习获利最多的一个领域,就是在线广告。这也许不是最鼓舞人心的,但真的很赚钱。
计算机视觉在过去的几年里也取得了长足的进步,这也多亏了深度学习。你可以输入一个图像,然后想输出一个索引,范围从 1 到 1000 来试着告诉你这张照片,它可能是,比方说,1000 个不同的图像中的任何一个,所以你可能会选择用它来给照片打标签。
深度学习最近在语音识别方面的进步也是非常令人兴奋的,你现在可以将音频片段输入神经网络,然后让它输出文本记录。得益于深度学习,机器翻译也有很大的发展。你可以利用神经网络输入英语句子,接着输出一个中文句子。
在自动驾驶技术中,你可以输入一幅图像,就好像一个信息雷达展示汽车前方有什么,据此,你可以训练一个神经网络,来告诉汽车在马路上面具体的位置,这就是神经网络在自动驾驶系统中的一个关键成分。
网络应用
对于图像应用,我们经常在神经网络上使用卷积(Convolutional Neural Network),通常缩写为 CNN。
对于序列数据,例如音频,有一个时间组件,随着时间的推移,音频被播放出来,所以音频是最自然的表现。作为一维时间序列(两种英文说法 one-dimensional timeseries / temporal sequence).对于序列数据,经常使用 RNN,一种递归神经网络(RecurrentNeural Network),语言,英语和汉语字母表或单词都是逐个出现的,所以语言也是最自然的序列数据,因此更复杂的 RNNs 版本经常用于这些应用。
对于更复杂的应用比如自动驾驶,你有一张图片,可能会显示更多的 CNN 卷积神经网络结构,其中的雷达信息是完全不同的,你可能会有一个更定制的,或者一些更复杂的混合的神经网络结构。所以为了更具体地说明什么是标准的 CNN 和 RNN 结构,在文献中你可能见过这样的图片,这是一个标准的神经网络。
这是一个卷积神经网络的例子,CNN通常用于图像数据。
递归神经网络(RNN)非常适合这种一维序列,数据可能是一个时间组成部分。
你可能也听说过机器学习对于结构化数据和非结构化数据的应用。
结构化数据意味着数据的基本数据库。例如在房价预测中,你可能有一个数据库,有专门的几列数据告诉你卧室的大小和数量,这就是结构化数据。或预测用户是否会点击广告,你可能会得到关于用户的信息,比如年龄以及关于广告的一些信息,然后对你的预测分类标注,这就是结构化数据,意思是每个特征,比如说房屋大小卧室数量,或者是一个用户的年龄,都有一个很好的定义。
相反非结构化数据是指比如音频,原始音频或者你想要识别的图像或文本中的内容。这里的特征可能是图像中的像素值或文本中的单个单词。
从历史经验上看,处理非结构化数据是很难的,与结构化数据比较,让计算机理解非结构化数据很难,而人类进化得非常善于理解音频信号和图像,文本是一个更近代的发明,但是人们真的很擅长解读非结构化数据。
多亏了深度学习和神经网络,计算机现在能更好地解释非结构化数据,这是与几年前相比的结果,这为我们创造了机会。许多新的令人兴奋的应用被使用,语音识别、图像识别、自然语言文字处理,甚至可能比两三年前的还要多。
因为人们天生就有本领去理解非结构化数据,你可能听说了神经网络更多在媒体非结构化数据的成功。但结果也表明,神经网络在许多短期经济价值的创造,也是基于结构化数据的。比如更好的广告系统、更好的利润建议,还有更好的处理大数据的能力。许多公司不得不根据神经网络做出准确的预测。
神经网络已经改变了监督学习,正创造着巨大的经济价值,事实证明,基本的神经网络背后的技术理念大部分都离我们不遥远。
1.4 为什么深度学习会兴起?(Why is Deep Learning takingoff?)
推动深度学习变得如此热门的主要因素:包括数据规模、计算量及算法的创新。
多亏数字化社会的来临,现在的数据量都非常巨大,我们花了很多时间活动在这些数字的领域,比如在电脑网站上、在手机软件上以及其它数字化的服务,它们都能创建数据,同时便宜的相机被配置到移动电话,还有加速仪及各类各样的传感器,同时在物联网领域我们也收集到了越来越多的数据。仅仅在过去的 20 年里对于很多应用,我们便收集到了大量的数据,远超过机器学习算法能够高效发挥它们优势的规模。
神经网络展现出的是,如果你训练一个小型的神经网络,那么这个性能可能会像下图黄色曲线表示那样;如果你训练一个稍微大一点的神经网络,比如说一个中等规模的神经网络(下图蓝色曲线),它在某些数据上面的性能也会更好一些;如果你训练一个非常大的神经网络,它就会变成下图绿色曲线那样,并且保持变得越来越好。
因此可以注意到两点:如果你想要获得较高的性能体现,那么你有两个条件要完成,
1. 第一个是你需要训练一个规模足够的神经网络,以发挥数据规模量巨大的优点
2. 很多的数据。
因此我们经常说规模一直在推动深度学习的进步,这里的规模指的也同时神经网络的规模,我们需要一个带有许多隐藏单元的神经网络,也有许多的参数及关联性,就如同需要大规模的数据一样。事实上如今最可靠的方法来在神经网络上获得更好的性能,
往往就是 要么训练一个更大的神经网络,要么投入更多的数据,这只能在一定程度上起作用,因为最终你耗尽了数据,或者最终你的网络是如此大规模导致将要用太久的时间去训练,但是仅仅提升规模的的确确地让我们在深度学习的世界中摸索了很多时间。为了使这个图更加从技术上讲更精确一点,我在x轴下面已经写明的数据量,这儿加上一个标签(label)量,通过添加这个标签量,也就是指在训练样本时,我们同时输入x和标签y,接下来引入一点符号,使用小写的字母m表示训练集的规模,或者说训练样本的数量,这个小写m就横轴结合其他一些细节到这个图像中
在深度学习萌芽的初期,数据的规模以及计算量,局限在我们对于训练一个特别大的神经网络的能力,无论是在 CPU 还是 GPU 上面,那都使得我们取得了巨大的进步。但是渐渐地,尤其是在最近这几年,我们也见证了算法方面的极大创新。许多算法方面的创新,一直是在尝试着使得神经网络运行的更快。
作为一个具体的例子,神经网络方面的一个巨大突破是从 sigmoid 函数转换到一个 ReLU函数,这个函数我们在之前的课程里提到过。
可以知道的一个使用 sigmoid 函数和机器学习问题是,在这个区域,也就是这个 sigmoid 函数的梯度会接近零,所以学习的速度会变得非常缓慢,因为当你实现梯度下降以及梯度接近零的时候,参数会更新的很慢,所以学习的速率也会变的很慢,而通过改变这个被叫做激活函数的东西,神经网络换用这一个函数,叫做 ReLU 的函数(修正线性单元),ReLU 它的梯度对于所有输入的负值都是零,因此梯度更加不会趋向逐渐减少到零。
而这里的梯度,这条线的斜率在这左边是零,仅仅通过将 Sigmod 函数转换成 ReLU 函数,便能够使得一个叫做梯度下降(gradient descent)的算法运行的更快,这就是一个或许相对比较简单的算法创新的例子。但是根本上算法创新所带来的影响,实际上是对计算带来的优化。
研究表明我们的社会仍然正在抛出越来越多的数字化数据,或者用一些特殊的硬件来进行计算,比如说 GPU,以及更快的网络连接各种硬件。