为什么要采用神经网络:因为只是简单增加二次项、三次向的类似逻辑回归之类的算法并不是解决复杂非线性问题的好办法。因为当n很大时,会产生非常非常多的特征项。神将网络被证明是解决复杂非线性问题好得多的方法。
神经网络算法是一种非常古老的算法,它最初产生的目的是制造能模拟大脑的机器。
神经网络产生的缘由是人们想设计出模仿大脑的算法。某种意义上说,如果我们想要建立学习系统,那我们为什么不去模仿最神奇的学习机器人类的大脑呢。
神经网络逐渐兴起于二十世纪八九十年代,应用的非常广泛,但由于各种原因在九十年代后期应用减少了,但是最近神经网络又东山再起了,其中一个原因是神经网络是计算量有些偏大的算法,大概由于近些年计算机的运行速度变快才足以真正运行起大规模的神经网络。如今神经网络对于许多应用来说是最先进的技术。
大脑通过自学掌握如何处理看、听、触觉等不同类型的数据。在很大程度上,可以猜想如果我们把几乎任何一种传感器接入到大脑的任何一个部位的话,大脑就会学会处理它。
左上角:用舌头学会“看”的一个例子,这是一个名为BrainPort的系统,它能帮助失明人士看见事物,它的原理是你在头上戴一个灰度摄像头,他能获取你面前事物的低分辨率的灰度图像,你联一根线到舌头上的电极阵列上,那么每个像素都被映射到你舌头的某个位置上,可能电压值高的店对应一个暗像素,电压值低的点对应于亮像素,即使依靠它现在的功能,使用这种系统就能让你我在几十分钟里学会用舌头“看”东西。
右上:人体回声定位或者说人体声呐,帮助失明人士理解从环境中反弹回来的声波模式。
……
在一个神经网络里或这说在我们电脑上实现的人工神经网络里,我们将使用一个非常简单的模型来模拟神经元的工作。我们将神经元模拟成一个逻辑单元,黄圈代表类似神经元的东西,然后我们通过它的树突或者说它的输入神经传递给它一些信息,然后神经元做一些计算并通过它的输出神经(轴突)输出计算结果。这样一个图表表示了对假设进行计算。
有时会增加一个神经节点x0=1,也被称作偏置单元或偏执神经元,是否画出偏置单元取决于它是否对例子有利。
有时我们会说这是一个有s型函数或者逻辑函索作为激励函数的人工神经元。在神经网络术语中,激励函数只是对类似非线性函数g(z)的另一个术语称呼。在神经网络中,theta可能不称为参数,而称为权重。
x1,x2,x3(有时画上x0)被称为输入单元,黄圈代表神经元代表神经元(有时画上偏置单元a0(2)=1),最后计算假设函数的结果。
Layer1被称为输入层,因为我们在这一层输入我们的特征项x1,x2,x3;最后一层称为输出层,因为这一层的神经元输出假设的最终计算结果;中间的层被称为隐藏层,因为在监督学习中,你能看到输入,也能看到正确的输出,而隐藏层的值在训练集里是看不到的。
所谓的激励(activation):由一个具体神经元读入、计算并输出的值。
ai(j):表示第j层的第i个单元或神经元,也即隐藏层的第一个激励
a1(2):表示第2层的第一个单元(激励)
所谓的激励(activation):由一个具体神经元读入、计算并输出的值。
我们的神经网络被矩阵参数化,大theta上标j将成为一个波矩阵控制着比如说从第j层到第j+1层的函数。
这样一个图表表示了下面的计算过程:a1(2)是第一个隐藏单元=s函数/s激励函数/逻辑激励函数作用在输入的线性组合上的结果。第二个隐藏单元a2(2)等于s函数作用在如图所示的线性组合上的值。a3(2)……
这里我们有三个输入单元和三个隐藏单元,这一样来大theta(1)参数矩阵控制了来自三个输入单元到三个隐藏单元的映射,因此它是维数3*4的矩阵。
一般的,如果一个神经网络在第j层有sj个单元,在j+1层有sj+1个单元,那么大theta(j)的维度就是sj+1*(sj+1)。e.g. 在第1层有sj=3个单元,在j+1层有s1+1= s2=3个单元,那么大theta(1)的维度就是s2*(s1+1)=3*4。
神经网络所做的就像逻辑回归,但是它不是使用x1,x2,x3作为输入特征,而是用a1(2),a2(2),a3(2)作为新的的特征,还需要加上上标来和之前的记号保持一致,但是这些特征是是作为输入函数来学习的。具体来说就是从第一层映射到第二层的函数,而这个函数是由其他一组参数大theta(1)决定的。也就是说在神经网络中自己通过打theta(1)训练逻辑回归的输入,在theta(1)中选择不同的参数有时就可以学习到一些很有趣和复杂的特征,因此可以得到一个更好的假设,比用原始的x1,x2,x3得到的假设更好。
神经网络中神经元相连接的方式成为神经网络的架构,所以架构是指不同的神经元是如何相互连接的。这个神经网络架构第二层有三个隐藏单元,他们根据输入层计算一个复杂的函数,第三层则用第二层训练处的特征作为输入并在第三层计算一些更复杂的函数,这样你到达输出层之前即第四层就可以利用第三层训练出的风复杂的特征作为输入,一次得到非常有趣的非线性假设。
向前传播在神经网络里的工作原理:从输入层的激励开始向前传播到第一隐藏层,然后传播到第二隐藏层...最终到达输出层。
我们有二进制的输入特征,x1,x2要么取0要么取1,组图中只画出两个正样本和两个负样本,我们可以视其为复杂学习问题(右图)的简化版本。我们想要做的是学习一种非线性的决策边界来区分正负样本。
具体来讲,这里需要计算的是目标函数y等于x1异或x2,或者y也可以等于x1异或非x2,异或非表示x1异或x2后取反。所以当x1、 x2同时为1或0时,y=1,而x1、x2中只有一个为真是则y=0。
我们需要找到一个神经网络模型来你和这种训练结集。为了建立能拟合XNOR运算的神经网络,我们先从一个稍微简单的神经网络开始,它拟合了“且运算”。
!!异或运算的运算法则:相同为零,不同为一。异或非运算法则:将异或的结果取反。
神经网络来表示逻辑与运算
用神经网络表示逻辑或运算
复杂的神经网络可以实现更复杂的算法
我们用神经网络进行多类别分类,其本质上就是方法的扩展。e.g.给出一幅图片就需要识别出是否有行人、汽车、摩托车或者卡车什么的。这个例子中,我们需要构建一个神经网络,它有四个输出单元,即我们的神将网络要输出一个四个数字组成的向量。