为什么要使用神经网络
在笔记三中,曾提到非线性拟合的问题。当时是通过构造特征向量,即由两个或以上的变量构造一个新的变量,增加θ的维度,以拟合出更细腻的曲线。下面是课件中类似的例子:
可以看到,随着变量即数据集的维度增加,这种做法将会导致“维度灾难”,越来越不可行。就上述例子,以100维的数据集为例,二次项的构造复杂度是,实际是5000;三次项复杂度是,实际达到17000;当构造一百次项时,复杂度可能已经超出计算机所能处理的范围了。即使我们可以使用正则使假设函数简化,但正则化的过程也需要大量的数据集和大量的时间,同样不大可行。
NG的例子举到这里就戛然而止,后面就引入神经网络(Neuron Network)了。就我个人来说,把本章的视频看完后,隐约感觉到,神经网络的思想和之前提到的构造特征向量有相似之处,同时避免了维度灾难。如下:
上图是课件后面的部分。NG在这里根据各个层的特点进行分类:Layer1是输入层,Layer2是隐藏层,Layer3是输出层。对神经网络而言,输入层和输出层各只有一个,隐藏层根据实际情况可以有多个。看上去,每一个隐藏层都与上一层的输入量有关,同时根据各连接线的权值不同,实质上也是利用原有特征向量构造了新的特征向量。当然,这只是个人很主观的感觉。
神经网络组成
上面已经说到了,神经网络一般可以分成三个层次:输入层、隐藏层和输出层。对比着生物学上的神经系统,神经网络是由多个神经单元组成的。神经单元,即多个节点指向下一层的单节点这一结构,就是之前学过的多元对率回归所使用的结构。因而,我们可以把神经网络看成许多个神经单元的组合体。
上图的神经单元中,我们发现在原有的特征值上添加了,这个值叫做“偏正量(bias unit)”。事实上神经网络的每一层都有这个偏正量。
前向传播算法
前向传播,直观上理解,就是从左向右赋权值,一层一层地构造隐藏层。对于每一层节点,它只能获取前一层节点的信息。
需要注意的是,最后构造出来的特征向量维度是这样的:,其中j表示所在隐藏层的层数。最后得出的假设函数如下:
神经网络的例子
逻辑运算
在本例中,使用sigmoid函数的特殊性质,构造了上面三个基本的逻辑门:与门、或门和非门。理论上,这三个逻辑门可以通过复杂组合表示所有数学逻辑。同样的,可以使用这些神经单元的组合来构造“或非门”的神经网络。
多分类问题
先前提及的都是二元分类问题,现实中的分类问题往往是多元的。之前我们的做法是通过分割,将多元问题化解为多个二元问题.在神经网络中,我们可以通过多个节点的输出组合,来区分类型的不同。