Coursera课程《Neural Networks and Deep Learning》 deeplearning.ai
Week1 Introduction to deep learning
What is a Neural Network?
让我们从一个房价预测的例子开始讲起。
假设你有一个数据集,它包含了六栋房子的信息。所以,你知道房屋的面积是多少平方英尺或者平方米,并且知道房屋价格。这时,你想要拟合一个根据房屋面积预测房价的函数。
如果使用线性回归进行拟合,那么可以拟合出一条直线。但是我们知道,价格永远不会是负数的。因此,为了替代一条可能会让价格为负的直线,我们把直线折一下,让它在这里归零。所以这条粗的蓝线最终就是我们的函数。
我们可以把这个方程当做一个很简单的神经网络。
我们把房屋的面积作为神经网络的输入(我们称之为\(x\)),通过一个节点(一个小圆圈),最终输出了价格(我们用\(y\)表示)。其实这个小圆圈就是一个单独的神经元。接着你的网络实现了左边这个函数的功能。
在有关神经网络的文献中,经常看得到这个函数。从趋近于零开始,然后变成一条直线。这个函数被称作ReLU激活函数,它的全称是修正线性单元Rectified Linear Unit。可以理解成\(max(0,x)\),这也是得到一个这种形状的函数的原因。
如果这是一个单神经元网络,不管规模大小,它正是通过把这些单个神经元叠加在一起来形成。如果你把这些神经元想象成单独的乐高积木,你就通过搭积木来完成一个更大的神经网络。
假设我们不仅仅用房屋的面积来预测它的价格,现在你有了一些有关房屋的其它特征,比如卧室的数量,或许有一个很重要的因素,一家人的数量也会影响房屋价格,这个房屋能住下一家人或者是四五个人的家庭吗?而这确实是基于房屋大小,以及真正决定一栋房子是否能适合你们家庭人数的卧室数。
你可能知道邮政编码或许能作为一个特征,告诉你步行化程度。比如这附近是不是高度步行化,你是否能步行去杂货店或者是学校,以及你是否需要驾驶汽车。有些人喜欢居住在以步行为主的区域,另外根据邮政编码还和富裕程度相关(在美国是这样的)。但在其它国家也可能体现出附近学校的水平有多好。
在图上每一个画的小圆圈都可以是ReLU的一部分,也就是指修正线性单元,或者其它稍微非线性的函数。基于房屋面积和卧室数量,可以估算家庭人口,基于邮编,可以估测步行化程度或者学校的质量。最后这些决定人们乐意花费多少钱。
以此为例,\(x\) 是所有的这四个输入,\(y\) 是你尝试预测的价格,把这些单个的神经元叠加在一起,我们就有了一个稍微大一点的神经网络。
神经网络的一部分神奇之处在于,当你实现它之后,你要做的只是输入\(x\),就能得到输出\(y\)。因为它可以自己计算你训练集中样本的数目以及所有的中间过程。中间的这些圆圈被叫做隐藏单元圆圈,在一个神经网络中,它们每个都从输入的四个特征获得自身输入。
值得注意的是神经网络给予了足够多的关于\(x\)和\(y\)的数据,给予了足够的训练样本有关\(x\)和\(y\)。神经网络非常擅长计算从\(x\)到\(y\)的精准映射函数。
Supervised Learning with Neural Networks
监督学习的一些应用举例,以及它们常用的神经网络。
神经网络类型
下图是一种标准神经网络。
而下图是卷积神经网络(CNN)。它通常用于图像数据。
下图是递归神经网络(RNN)。它非常适合处理一维序列,一维序列化数据也许就是时序数据。
结构化数据与非结构化数据
结构化数据(Structured Data)意味着数据的基本数据库。例如在房价预测中,你可能有一个数据库,有专门的几列数据告诉你卧室的大小和数量,这就是结构化数据。
非结构化数据(Unstructured Data)是指比如音频,原始音频或者你想要识别的图像或文本中的内容。这里的特征可能是图像中的像素值或文本中的单个单词。
Why is Deep Learning taking off?
如果你把一个传统机器学习算法的性能画出来,作为数据量的一个函数,你可能得到一个弯曲的线,就像图中这样,它的性能一开始在增加更多数据时会上升,但是一段变化后它的性能就会像一个高原一样。假设你的水平轴拉的很长很长,它们不知道如何处理规模巨大的数据。
神经网络展现出的是,如果你训练一个小型的神经网络,那么这个性能可能会像下图黄色曲线表示那样;如果你训练一个稍微大一点的神经网络,比如说一个中等规模的神经网络(下图蓝色曲线),它在某些数据上面的性能也会更好一些;如果你训练一个非常大的神经网络,它就会变成下图绿色曲线那样,并且保持变得越来越好。因此可以注意到两点:如果你想要获得较高的性能体现,那么你有两个条件要完成,第一个是你需要训练一个规模足够大的神经网络,以发挥数据规模量巨大的优点,另外你需要能画到\(x\)轴的这个位置,所以你需要很多的数据。因此我们经常说规模一直在推动深度学习的进步,这里的规模指的也同时是神经网络的规模,我们需要一个带有许多隐藏单元的神经网络,也有许多的参数及关联性,就如同需要大规模的数据一样。事实上如今最可靠的方法来在神经网络上获得更好的性能,往往就是要么训练一个更大的神经网络,要么投入更多的数据,这只能在一定程度上起作用,因为最终你耗尽了数据,或者最终你的网络是如此大规模导致将要用太久的时间去训练,但是仅仅提升规模的的确确地让我们在深度学习的世界中摸索了很多时间。
【参考】