深度学习笔记(吴恩达)在更

一、深度学习概论

1.1欢迎

以下是吴恩达老师的原话:

深度学习改变了传统互联网业务,例如如网络搜索和广告。但是深度学习同时也使得许多新产品和企业以很多方式帮助人们,从获得更好的健康关注。

深度学习做的非常好的一个方面就是读取X光图像,到生活中的个性化教育,到精准化农业,甚至到驾驶汽车以及其它一些方面。如果你想要学习深度学习的这些工具,并应用它们来做这些令人窒息的操作,本课程将帮助你做到这一点。当你完成cousera上面的这一系列专项课程,你将能更加自信的继续深度学习之路。在接下来的十年中,我认为我们所有人都有机会创造一个惊人的世界和社会,这就是AI(人工智能)的力量。我希望你们能在创建AI(人工智能)社会的过程中发挥重要作用。

我认为AI是最新的电力,大约在一百年前,我们社会的电气化改变了每个主要行业,从交通运输行业到制造业、医疗保健、通讯等方面,我认为如今我们见到了AI明显的令人惊讶的能量,带来了同样巨大的转变。显然,AI的各个分支中,发展的最为迅速的就是深度学习。因此现在,深度学习是在科技世界中广受欢迎的一种技巧。

1.2什么是神经网络?

让我们从一个房价预测的例子开始讲起。

假设你有一个数据集,它包含了六栋房子的信息。所以,你知道房屋的面积是多少平方英尺或者平方米,并且知道房屋价格。这时,你想要拟合一个根据房屋面积预测房价的函数。

如果你对线性回归很熟悉,那么我们可以用这些数据拟合一条类似下图的直线。
image.png
但是价格永远不会是负数的。因此,为了替代一条可能会让价格为负的直线,我们把直线弯曲一点,让它最终在零结束。这条粗的蓝线所得的函数,用于根据房屋面积预测价格。有一部分是零,而直线的部分拟合的很好。

作为一个神经网络,这几乎可能是最简单的神经网络。我们把房屋的面积作为神经网络的“输入”,通过一个节点(一个小圆圈),最终输出了价格(我们用表示)。其实这个小圆圈就是一个单独的神经元。接着你的网络实现了左边这个函数的功能。
image.png

在有关神经网络的文献中,你经常看得到这个函数。从趋近于零开始,然后变成一条直线。这个函数被称作ReLU激活函数,它的全称是Rectified Linear Unit。rectify(修正)可以理解成max(0,x),这也是你得到一个这种形状的函数的原因。
如果这是一个单神经元网络,不管规模大小,它正是通过把这些单个神经元叠加在一起来形成。如果你把这些神经元想象成单独的乐高积木,你就通过搭积木来完成一个更大的神经网络。
让我们再来看一个例子,我们不仅仅用房屋的面积来预测它的价格,还可以用卧室的数量,或是一家人的数量也会影响房屋价格,这个房屋能住下一家人或者是四五个人的家庭吗?而这确实是基于房屋大小,以及真正决定一栋房子是否能适合你们家庭人数的卧室数。

除此之外,你还可以会根据邮政编码可以得出一个地区的大致位置,进而获取该地的交通程度。比如这附近是不是高度步行化,你是否能步行去杂货店或者是学校,以及你是否需要驾驶汽车。有些人喜欢居住在以步行为主的区域。
image.png
对于一个房子来说,这些都是与它息息相关的事情。在这个情景里,家庭人口、交通程度以及学校的质量都能帮助你预测房屋的价格。以此为例, x是所有的这四个输入,y是你尝试预测的价格,把这些单个的神经元叠加在一起,我们就有了一个稍微大一点的神经网络。
image.png
当你实现它之后,你要做的只是输入x,就能得到输出y。因为它可以自己计算你训练集中样本的数目以及所有的中间过程。所以,你实际上要做的就是:这里有四个输入的神经网络,这输入的特征可能是房屋的大小、卧室的数量、邮政编码和区域的富裕程度。给出这些输入的特征之后,神经网络的工作就是预测对应的价格。同时也注意到这些被叫做隐藏单元圆圈,在一个神经网络中,它们每个都从输入的四个特征获得自身输入,比如说,第一个结点代表家庭人口,而家庭人口仅仅取决于x1和x2特征,换句话说,在神经网络中,你决定在这个结点中想要得到什么,然后用所有的四个输入来计算想要得到的。因此,我们说输入层和中间层被紧密的连接起来了。

1.3用神经网络进行监督学习

  • 监督学习是从标记的训练数据来推断一个功能的机器学习任务。

训练数据包括一套训练示例。在监督学习中,每个实例都是由一个输入对象(通常为矢量)和一个期望的输出值(也称为监督信号)组成。监督学习算法是分析该训练数据,并产生一个推断的功能,其可以用于映射出新的实例。一个最佳的方案将允许该算法来正确地决定那些看不见的实例的类标签。这就要求学习算法是在一种“合理”的方式从一种从训练数据到看不见的情况下形成。
在监督学习中你有一些输入x,你想学习到一个函数来映射到一些输出y,比如我们之前提到的房价预测的例子,你只要输入有关房屋的一些特征,试着去输出或者估计价格y。我们举一些其它的例子,来说明神经网络已经被高效应用到其它地方。
image.png
如今应用深度学习获利最多的一个领域,就是在线广告。具体就是通过在网站上输入一个广告的相关信息,因为也输入了用户的信息,于是网站就会考虑是否向你展示广告。

神经网络已经非常擅长预测你是否会点开这个广告,通过向用户展示最有可能点开的广告,这就是神经网络在很多家公司难以置信地提高获利的一种应用。因为有了这种向你展示你最有可能点击的广告的能力,而这一点击的行为的改变会直接影响到一些大型的在线广告公司的收入。

计算机视觉在过去的几年里也取得了长足的进步,这也多亏了深度学习。你可以输入一个图像,然后想输出一个索引,范围从1到1000来试着告诉你这张照片,它可能是,比方说,1000个不同的图像中的任何一个,所以你可能会选择用它来给照片打标签。

深度学习最近在语音识别方面的进步也是非常令人兴奋的,你现在可以将音频片段输入神经网络,然后让它输出文本记录。得益于深度学习,机器翻译也有很大的发展。你可以利用神经网络输入英语句子,接着输出一个中文句子。

在自动驾驶技术中,你可以输入一幅图像,就好像一个信息雷达展示汽车前方有什么,据此,你可以训练一个神经网络,来告诉汽车在马路上面具体的位置,这就是神经网络在自动驾驶系统中的一个关键成分。

1.4为什么深度学习会兴起?

深度学习和神经网络的概念已经存在几十年了,那么为什么直到现在它们才开始流行起来呢?
image.png
就如上面这个坐标轴所展示的,x轴代表所有任务的数据量,而y轴代表具体机器学习算法的性能。比如垃圾邮件过滤或者广告点击预测性能,或者是神经网络在自动驾驶汽车时判断位置的准确性,根据图像你可以发现,如果你把一个传统机器学习算法的性能画出来,作为数据量的一个函数,你可能就会得到类似上图的一个曲线。它的性能在刚开始增加数据的时候会上升,但在经过一段时间后就会趋于平稳。而在过去的几十年当中,我们所遇到的所有问题只有非常少的数据量,这也就是为什么深度学习在一开始没有兴起的原因。
但是大数据时代的来临,让我们花了很多的时间在数字领域,比如在电脑网站上、手机软件上以及其他的一些数字化服务。相比于前几十年,我们在短短的时间内收集到了大量的数据,而这些数据的规模很轻易就能让机器学习算法去充分发挥它们的优势。
神经网络展现出的是,如果你训练的是一个小型神经网络,那么这个性能可能会像下图黄色曲线表示的那样;如果你训练的是一个稍微大一点的神经网络(蓝色曲线),那么它的表现也许会更好一点;如果你训练一个非常大的神经网络,他就会变成下图绿色曲线那样,并且会越来越好。因此我们可以得出如果你想要获得较好的性能体现,那么就有两个条件:

  • 你需要训练一个规模足够大的神经网络,以发挥数据规模量巨大的优点
  • 另外就是你需要大量的数据来支持你的训练

这就是为什么说规模推动深度学习的进步,这里的规模包括神经网络与数据的规模,我们需要一个带有许多隐藏单元的神经网络,也有许多的参数及关联性,就如同需要大规模的数据一样。要想提高神经网络上的性能,最可靠的方法就是训练一个更大的神经网络,或是投入更多的数据,但这只在一定程度上起作用,因为你最终耗尽了数据,或者因为你庞大的神经网络你需要花费更多的时间去进行训练。
image.png
在这个小的训练集中,各种算法的优先级事实上定义的也不是很明确,所以如果你没有大量的训练集,那效果会取决于你的特征工程能力,那将决定最终的性能。假设有些人训练出了一个SVM(支持向量机)表现的更接近正确特征,然而有些人训练的规模大一些,可能在这个小的训练集中SVM算法可以做的更好。因此你知道在这个图形区域的左边,各种算法之间的优先级并不是定义的很明确,最终的性能更多的是取决于你在用工程选择特征方面的能力以及算法处理方面的一些细节,只是在某些大数据规模非常庞大的训练集,也就是在右边这个m会非常的大时,我们能更加持续地看到更大的由神经网络控制的其它方法。
所以可以这么说,在深度学习的萌芽阶段,数据的规模以及计算量,局限在我们对于训练一个特别大的神经网络的能力无论是在CPU还是GPU上面,那都使得我们取得了巨大的进步。但是渐渐地,尤其是在最近这几年,我们也见证了算法方面的极大创新。许多算法方面的创新,一直是在尝试着使得神经网络运行的更快。

二、神经网络的编程基础

本章介绍神经网络的基础知识,其中需要注意的是,当实现一个神经网络的时候,我们需要知道一些非常重要的技术和技巧。例如有一个包含个样本的训练集,你很可能习惯于用一个for循环来遍历训练集中的每个样本,但是当实现一个神经网络的时候,我们通常不直接使用for循环来遍历整个训练集,所以在本章中你将学会如何处理训练集。

2.1二分类

你可能感兴趣的:(程序员人工智能深度学习)