本文将会介绍一种叫“神经网络”(Neural Network)的机器学习算法。算法
咱们以前已经学习过线性回归和逻辑回归算法了,为何还要研究神经网络? 咱们先看一个例子。下面是一个监督学习分类问题的训练集:网络
若是利用逻辑回归算法来解决这个问题,首先须要构造一个包含不少非线性项的逻辑回归函数。以下所示:架构
这里g还是sigmod函数,咱们能让函数,包含不少像这样的多项式项。事实上,当多项式项数足够多时,那么可能你可以获得一个分开正负样本的曲线:机器学习
这里只有$x_1$和$x_2$两项,所以能够得出不错的结果。但若是应对一些复杂的机器学习问题时,设计的项每每多余两项。假设咱们要预测某房子将来半年卖出去的可能性,这是一个分类问题,而特征项可能有好比面积,层数,房间数等等不少,那么咱们构建出来的函数将会很复杂,其中二次项的数目可能达到$\frac{n^2}{2}$,并且因为项数过多,可能会致使过拟合问题。除此以外,运算量显然也是很庞大的。不过也能够试试只加入这些二次项的子集,好比$x_1^2$,$x_2^2$,$x_n^2$,这样就只有n个二次项,但因为忽略了太多二次项,获得的结果可能会不许确。再者,这里只讨论了二次项,那三次项的数量一样也是不少的。因此,当初始特征个数n增大时 这些高阶多项式项数将以几何级数递增,特征空间也随之急剧膨胀,当特征个数n很大时找出附加项来创建一些分类器,这显然并非一个好作法。
对于实际的不少机器学习问题,特征个数n是很大的。好比一个计算机视觉的问题,假设你想要使用机器学习算法来训练一个分类器,使它检测一个图像,来判断图像是否为一辆汽车。咱们取出这幅图片中的一小部分将其放大,好比图中这个红色方框内的部分,结果代表,当人眼看到一辆汽车时,计算机实际上看到的倒是这个一个数据矩阵或像这种格网,它们表示了像素强度值,告诉咱们图像中每一个像素的亮度值。所以对于计算机视觉来讲问题就变成了,根据这个像素点亮度矩阵来告诉咱们这些数值表明一个汽车门把手。函数
具体而言,当用机器学习算法构造一个汽车识别器时,咱们要想出一个带标签的样本集,其中一些样本是各种汽车,另外一部分样本是其余任何东西,将这个样本集输入给学习算法,以训练出一个分类器,训练完毕后,咱们输入一幅新的图片,让分类器断定,“这是什么东西?”。为了理解引入非线性分类器的必要性,咱们从学习算法的训练样本中挑出一些汽车图片和一些非汽车图片。学习
让咱们从其中每幅图片中挑出一组像素点,像素点1和像素点2,在坐标系中标出这幅汽车的位置,在某一点上车的位置取决于像素点1和像素点2的亮度。让咱们用一样的方法标出其余图片中汽车的位置,而后咱们再举几个 关于汽车的不一样的例子,观察这两个相同的像素位置。咱们用“+”表明是汽车,“-”表明非汽车,这些数据分布在坐标系的不一样位置,咱们须要一个非线性分类器来分开这两类样本。假设咱们用50*50像素的图片,那么久一共是2500个像素点。所以,咱们的特征向量的元素数量N=2500,特征向量X包含了全部像素点的亮度值,对于典型的计算机图片表示方法,若是存储的是每一个像素点的灰度值,(色彩的强烈程度),那么每一个元素的值,应该在0到255之间,所以,这个问题中n=2500,可是,这只是使用灰度图片的状况,若是咱们用的是RGB彩色图像,每一个像素点包含红、绿、蓝三个子像素,那么n=7500。
所以,若是咱们非要经过包含全部的二次项来解决这个非线性问题,那么,这就是式子中的全部条件,$x_i*x_j$,连同开始的2500像素,总共大约有300万个,这数字大得有点离谱了,对于每一个样原本说,要发现并表示,全部这300万个项,这计算成本过高了。所以,只是简单的增长二次项或者三次项之类的逻辑回归算法并非一个解决复杂非线性问题的好办法。人工智能
神经网络产生的缘由,是人们想尝试设计出模仿大脑的算法,神经网络逐渐兴起于,二十世纪八九十年代,应用得很是普遍,但因为各类缘由,在90年代的后期应用减小了,可是最近神经网络,又东山再起了。其中一个缘由是,神经网络是计算量有些偏大的算法,然而,大概因为近些年,计算机的运行速度变快,才足以真正运行起大规模的神经网络。spa
大脑能经过看处理图像,也能帮咱们作数学题能帮咱们处理各类事情。若是咱们想模仿它,那么须要写出不一样的软件来模拟大脑作不一样事情的方法。不过能不能假设,大脑所作的这些事情不须要成百上千的程序去实现,相反的,大脑处理的方法,只须要一个单一的学习算法就能够了?
以下图, 图中的片红色区域听觉皮层,咱们理解他人说的话靠的是耳朵接收到声音信号并把声音信号传递给你的听觉皮层而后你才能明白个人话。
神经系统科学家作了一个有趣的实验,把耳朵到听觉皮层的神经切断,在这种状况下,将其从新接到一个动物的大脑上,这样从眼睛到视神经的信号最终将传到听觉皮层,若是这样作了,那么结果代表,听觉皮层将会学会“看”,这里“看”表明了,咱们所知道的每层含义。因此,若是你对动物这样作,那么动物就能够完成视觉辨别任务,它们能够看图像,并根据图像作出适当的决定,它们正是经过脑组织中的这个部分完成的。设计
来看另外一个例子,图中红色的脑组织是你的躯体感受皮层,这是你用来处理触觉的若是你作一个和刚才相似的重接实验,那么躯体感受皮层也能学会”看“、这个实验和其它一些相似的实验被称为神经重接实验。从这个意义上说,若是,人体有同一块,脑组织能够处理光、,声或触觉信号,那么也许存在一种学习算法,能够同时处理,视觉、听觉和触觉,而不是须要,运行上千个不一样的程序,或者上千个不一样的算法来作这些,大脑所完成的,成千上万的美好事情,也许咱们须要作的就是找出,一些近似的或,实际的大脑学习算法,而后实现它,大脑经过自学掌握如何,处理这些不一样类型的数据,图片
从某种意义上来讲,若是咱们能找出大脑的学习算法,而后在计算机上执行,大脑学习算法或与之类似的算法,也许这将是咱们向人工智能迈进作出的最好的尝试,人工智能的梦想就是 有一天能制造出真正的智能机器。
神经网络是在模仿大脑中的神经元或者神经网络时发明的,所以,要解释如何表示模型假设,咱们先来看单个 神经元在大脑中是什么样的。
神经元在大脑中,是什么样的,咱们的大脑中充满了,这样的神经元,神经元是大脑中的细胞,其中有两点,值得咱们注意,一是神经元有,像这样的细胞主体,二是神经元有,必定数量的,输入神经,这些输入神经叫作树突,能够把它们想象成输入电线,它们接收来自其余,神经元的信息,神经元的输出神经叫作轴突,这些输出神经,是用来,给其余神经元传递信号,或者传送信息的,简而言之,神经元是一个计算单元,它从输入神经接受必定数目的信息,并作一些计算,而后将结果经过它的,轴突传送到其余节点,或者大脑中的其余神经元,下面是一组神经元的示意图:
神经元利用微弱的电流进行沟通,这些弱电流也称做动做电位,其实就是一些微弱的电流,因此若是神经元想要传递一个消息,它就会就经过它的轴突发送一段微弱电流给其余神经元,接下来这个神经元接收这条消息作一些计算,它有可能会反过来将在轴突上的本身的消息传给其余神经元,这就是全部,人类思考的模型:咱们的神经元把,本身的收到的消息进行计算,并向其余神经元传递消息,顺便说一下,这也是咱们的感受和肌肉运转的原理,若是你想活动一块肌肉,就会触发一个神经元,给你的肌肉发送脉冲,并引发你的肌肉收缩,若是一些感官好比说眼睛,想要给大脑传递一个消息,那么它就像这样发送。
在一个神经网络里,或者说在咱们在电脑上实现的人工神经网络里,咱们将使用一个很是简单的模型来模拟神经元的工做,咱们将神经元模拟成一个逻辑单元。以下图所示,当我画一个这样的,黄色圆圈能够理解为神经元的东西,而后咱们经过,它的树突或者说它的输入神经,传递给它一些信息,而后神经元作一些计算,并经过它的输出神经,即它的轴突,输出计算结果。这里的$h_\theta(x) = \frac{1}{1+e^{-\theta^Tx}}$。一般x和θ是咱们的参数向量,这是一个简单的模型,甚至说是一个过于简单的模拟神经元的模型,它被输入$x_1$,$x_2$和$x_3$,而后输出一些相似这样的结果,绘制一个神经网络时,一般只绘制输入节点$x_1$,$x_2$,$x_3$,但有时也能够增长一个额外的节点$x_0$,这个$x_0$节点有时也被称做偏置单位,或偏置神经元,但由于$x_0$老是等于1,因此有时候会画出它有时不会画出,这取决于它是否对例子有利。
有时咱们会说,这是一个神经元,一个有s型函数或者逻辑函数做为激励函数的人工神经元,在神经网络术语中,激励函数只是对相似非线性函数g(z)的另外一个术语称呼,$g(z) = \frac{1}{1+e^{-z}}$,到目前为止,我一直称θ为模型的参数,之后大概会继续将这个术语与“参数”相对应,而不是与神经网络,在关于神经网络的文献里,有时你可能会看到人们,谈论一个模型的权重,权重其实和,模型的参数,是同样的东西,,这个小圈,表明一个单一的神经元,神经网络其实就是,这些不一样的神经元,组合在一块儿的集合。
图中,网络中的第一层,也被称为输入层,由于咱们在这一层,输入咱们的特征项,$x_1$,$x_2$,$x_3$,最后一层,也称为输出层,由于这一层的神经元指的是输出,假设的最终计算结果,中间的两层,也被称做隐藏层,隐藏层不是一个,很合适的术语,可是,直觉上咱们知道,在监督学习中,你能看到输入,也能看到正确的输出,而隐藏层的值,你在训练集里是看不到的,它的值不是x,也不是y,因此咱们叫它隐藏层,隐藏层也可能不止一个,实际上任何,非输入层或非输出层的层,就被称为隐藏层。
接下来咱们逐步分析图表中的计算步骤,首先咱们须要解释一些记号:
我要使用a上标(j)下标i表示,第j层的第i个神经元或单元,具体来讲,图中好比a上标(2),下标1,表示第2层的第一个激励,即隐藏层的第一个激励,所谓激励(activation),是指由一个具体神经元读入,计算并输出的值。此外,咱们的神经网络,被这些矩阵参数化,θ上标(j),它将成为一个波矩阵,控制着从一层,好比说从第一层到第二层或者第二层到第三层的做用。
因此,这就是这张图所表示的计算,好比这里的第一个隐藏单元,是这样计算它的值的,如图中公式所示:$a_1^(2)$等于s函数,做用在这种,第一个公式中输入的线性组合上的结果,第二个隐藏单元,等于s函数做用在这个第二个线性组合上的值,以此类推。在这里,咱们有三个输入单元和三个隐藏单元,这样一来,参数矩阵控制了,咱们来自三个输入单元三个隐藏单元的映射,所以$\Theta^(1)$的维数,将变成3,$\Theta^(1)$将变成一个3*4维的矩阵,更通常的,若是一个网络在第j层有$s_j$个单元,在j+1层有,$s_{j+1}$个单元,那么矩阵$\Theta^(j)$,即控制第j层到第j+1层映射的矩阵的,维度为$s_{j+1}*(s_j+1)$,因此$\Theta^(j)$的维度是,$s_{j+1}$行,$s_j+1$列。最后,在输出层,咱们还有一个单元,它计算h(x),这个也能够,写成$a_1^(3)$就等于后面这块,注意到我这里,写了个上标2,由于$\Theta$上标2,是参数矩阵,或着说是权重矩阵,该矩阵控制从第二层即隐藏层的3个单位到第三层的一个单元,即输出单元的映射。总之,以上咱们,展现了像这样一张图是怎样定义一我的工神经网络的,这个神经网络定义了函数h从输入x到输出y的映射,我将这些假设的参数,记为大写的$\Theta$,这样一来,不一样的$\Theta$,对应了不一样的假设,因此咱们有不一样的函数,好比说从,x到y的映射。
在上述的式子里,咱们将g的部分表达为$z_1^(2)$即$a_1^2 = g(z_1^(2))$,$a_2^2 = g(z_2^(2))$,$a_3^2 = g(z_3^(2))$,因此这些z值都是一个线性组合,是输入值$x_0$,$x_1$,$x_2$,$x_3$的加权线性组合,他将会进入一个特定的神经元。也就是说,对于j=2的第k个节点有:
用向量表示x和$z^j$为:
在上述示例中:
$z^(2) = \Theta^(1)$, $a^(2) = g(z^(2))$,这里的$z^(2)$是个三维向量,$a^(2)$也是个三维向量,所以这里的激励g将sigmod函数逐元素做用于$z^(2)$中的每一个元素。这里咱们还有隐藏的偏置单元只是未在图中画出,为了注意这额外的偏置单元,咱们额外加上一个$a_0^(2) = 1$,这样$a^(2)$就是一个四维特征向量。而后咱们为了计算假设的实际输出值,咱们只须要计算$z^(3)$,它等于上图中g括号中的部分,$z^(3) = \Theta^(2)a^(2)$,则假设输出$h_\Theta(x) = a^(3) = g(z^(3))$。
这个计算h(x)的过程,也称为前向传播(forward propagation),这样命名是由于咱们从输入层的激励开始,而后前向传播给隐藏层并计算隐藏层的激励,而后咱们继续前向传播,并计算输出层的激励。这个从输入层到隐藏层再到输入层依次计算激励的过程就叫作前向传播。
定义$x = a^(1)$,咱们能够将等式转换成:
这种前向传播的方式,也能够帮助咱们理解神经网络的原理和它为何可以帮助咱们学习非线性假设。以下图神经网络,假设咱们只看后半部分,也就是从隐藏层到输出层的部分,这看起来就很想逻辑回归。
逻辑回归中,咱们用输出层这个节点,即这个逻辑回归单元来预测$h(x)$的值,具体来讲,假设函数的等式为:
$$ h_\Theta(x) = g(\Theta_10^2a_0^2+\Theta_11^2a_1^2+\Theta_12^2a_2^2+\Theta_13^2a_3^2) $$
显然这里很像是逻辑回归模型,只是这里的$\Theta$咱们用的是大写的。这样作完,咱们只获得了逻辑回归,可是逻辑回归的输入特征值是经过隐藏层计算的。它不是使用$x_1$,$x_2$,$x_3$做为输入特征,而是用$a_1$, $a_2$,$a_3$做为新的输入特征。一样咱们须要把上标加上来和以前的记号保持一致。有趣的是,特征项$a_1$, $a_2$,$a_3$它们是做为输入的函数来学习的,具体来讲,就是从第一层映射到第二层的函数,这个函数由其余 一组参数$\Theta^(1)$决定。因此,在神经网络中它没有使用输入特征$x_1$,$x_2$,$x_3$来训练逻辑回归,而是本身训练逻辑回归的输入$a_1$, $a_2$,$a_3$。能够想象,若是在$\Theta^(1)$中选择不一样的参数,有时能够学习到一些颇有趣和复杂的特征 就能够获得一个更好的假设,比使用原始输入$x_1$,$x_2$,$x_3$时获得的假设更好。你也能够选择多项式项$x_1$,$x_2$,$x_3$等做为输入项,但这个算法能够灵活地快速学习任意的特征项,把这些$a_1$, $a_2$,$a_3$输入最后的单元,实际上,它就是逻辑回归。
你还能够用其余类型的图来表示神经网络中神经元相链接的方式,称为神经网络的架构,因此说,架构是指,不一样的神经元是如何相互链接的,这里有一个不一样的,神经网络架构的例子以下图所示:
你能够,意识到这个第二层是如何工做的。在这里,咱们有三个隐藏单元,它们根据输入层计算一个复杂的函数,而后第三层能够将第二层训练出的特征项做为输入,并在第三层计算一些更复杂的函数,这样,在你到达输出层以前即第四层,就能够利用第三层训练出的更复杂的特征项做为输入,以此获得很是有趣的非线性假设。顺便说一下,在这样的网络里,第一层被称为输入层,第四层仍然是咱们的输出层,这个网络有两个隐藏层,因此,任何一个不是,输入层或输出层的,都被称为隐藏层。
以上,为吴恩达机器学习第四周关于神经网络概念部分的课程笔记。