前言
这一章内容还是紧接着上一章的内容,在前面,给大家介绍了Linear Regression(线性回归)问题和Logistic Regression(逻辑回归)问题。在这一章将给大家介绍另一种机器学习方法Neural Networks(神经网络),既然已经有了这两种机器学习方法,为什么还需要Neural Networks这种方法了?下面将给大家进行详细地讨论。
最后,如果有些理解有误,希望大家不吝赐教,谢谢!
第六章 Neural Networks(神经网络)
6.1 Non-linear hypotheses(非线性假设问题)
在这里用一个非线性的逻辑回归问题来给大家解释为什么我们要向大家引入一个新的学习方法Neural Networks。如图1所示,这是一个非线性的分类问题,在前面也给大家介绍了,我们需要表示出一个边界决策线来对其进行分类,我们可以设这条线的表达式为:,由前面知识可知,我们在这里可以拟合成如图1所示的那条线,把正和负两类数据分开。这是只考虑了两种特征,而在实际问题中,比如房子的价格,跟房子大小、房间的个数、几层楼等等都有关系,而我们的表达式中不仅有各自的平方项还有两者相乘的项等等,这就导致了我们的计算量会很大很复杂,而且在前面也讨论了,当特征越多越容易过拟合,所以这个时候前面给大家介绍的方法就不合适了。
图1 Non-linear Classification
再又比如另一个问题,给你一张照片,判断是辆车,我们人眼很容易一眼看出是辆车,但是机器看到的会是什么了?如图2所示。
图2 车手把的像素表
比如一辆车的手把,在机器的“眼中”是一张像素表,一张像素表有大量的数据,如果我们要在四张图片中找出哪几张是小车如图3所示。
图3 对小车和非小车图片进行分类
在图3中,我们可以看到,有两张图片是小车,接下来简化下这个图,如图4所示,这个时候问题似乎就变成了我们前面所讲的分类问题。
图4 对小车进行分类的简化图
对于一张小车的图片,我们肯定不可能只用一个把手出的像素就判断出这是一辆小车,在这里我们仅用两处的像素,比如图5所示的位置。
图5 选取小车两处的像素
这个时候分类问题可能是这样的如图6所示,这就成了一个非线性逻辑回归的问题,而在这个问题中我们要考虑的特征是像素,对于一个小部分的像素来说就是一个矩阵数据,假设我们上面所选的一处有50*50个像素,这样一共就有2500个像素,那样我们的一个输入x就有2500个分量,而每个像素可能值都是0~255,如果我们只考虑两个特征的相乘项即,则大概有三百万个特征,可见这该有多大的计算量,而且当特征越多时,越容易发生过拟合,再次说明了我们前面所讨论的非线性逻辑回归算法不适用于这些问题。
图6 小车分类问题
6.2 Neurons and the brain(神经元和大脑)
在前面讨论的问题中,我们很明显地感受到了在前面章节讨论的算法不行,在这里我们就要像大家引进Neural Networks,顾名思义我们希望机器能像大脑一样自动进行计算,在我们的大脑皮层上有听觉皮层,视觉皮层,触觉皮层等等,如果我们想让机器拥有和我们一样的感官,我们是不是要写不同的算法分别来实现不同的功能了?答案肯定是NO,这样问题还是会复杂化,在实验中我们发现,如果断掉耳朵和听觉皮层间的神经,我们让眼睛和听觉皮层相连,这样我们就让听觉皮层学会了看,是不是很不可思议,下面还有一些不可思议的实例,让大家对神经网络这个学习方法有更大的兴趣,如图7所示,比如让舌头学会看,或者更神奇的,我们给青蛙第三只眼睛,那只眼睛也会学会看等等。
图7 大脑中的感官器
有了前面的铺垫,既然我们要做的就是模拟大脑,那么我们首先得先了解大脑神经元的构造,如图8所示。
图8 大脑中的神经元
对照图8,我们来给大家介绍几个名词,对于Dendrite(树突)我们称为输入线,对于Axon(轴突)我们称为输出线,那么我们是怎样感受到外界并做出相应的反应的了?其实感知并做出相应的反应不过是树突对我们接收到的信息给我们的神经元核心进行分析然后给轴突进行输出到相应的器官上做出反应。所以这个问题的简化就是有输入,处理中心,输出,我们对此也给出了Neural Networks的模型,如图9所示。
图9 神经元模型:逻辑单元
在图9这个模型中,我们就有x1、x2、x3这样的输入,最后h(x)即是我们的输出,而中间就是我们的处理单元,在这个问题中我们有时会给输入多加一个x0,我们称为bias unit(偏置单元),我们通常设置为1,这样输入就是,在这里我们把称为weights(权重),这里的,还是我们前面给大家介绍的逻辑函数。
前面给大家介绍的还只是模型,下面给大家介绍一个具体的神经网络结构。如图10所示
图10 神经网络
在图10中,如果我们把第二层遮住,这样我们就会得到和前面一样的模型,在这里我们同样把第一层称为我们的输入,第三层称为我们的输出,只是这里比较特殊的是多了一个第二层,在这里我们称第二层为掩藏层,同样我们在除了输出层外的其他层加一个偏置单元。在这个问题中xi依然是输入,为输出,而这里的则是第j层第i个单元的activation,下面我们来表示出
而我们的
在这里我们有,称为权值控制函数矩阵的映射,大小是第j+1层的层数*(第j层的层数+1),如果我们把第j层的层数用来表示,则的大小为,如果我们对表达式中的输入参数用来代替,这样,同样地,后面也可以这样表示,这样表达式就成了我们对x用表示,,,,我们加上,则,,这个时候表达式就比较简单了。
在这个Neural Networks中为什么计算就比较简单了?当我们把第二层遮住时,即给输入就可以得到输出了,相当于中间的计算是它自己完成的,就是一个自我学习的过程。
对于其他的神经网络构造,如图11所示,除了输入层第一层和输出层最后一层外,其他的我们都称为掩藏层,掩藏层越复杂也就表示我们可以进行更复杂问题的学习。
图11 其他神经网络构造
6.3 例子和直观的解释
在上面的分析中可能比较抽象,下面我将用几个例子来给大家详细分析下整个神经网络是如何工作的。
example one:非线性的分类问题(XOR异或、XNOR异或非)
如图12所示,关于两个输入x1、x2(他们的取值都只有0和1),这是一个异或非的问题,对于这个问题,很明显是一个非线性的,那么该如何构造神经网络来对此进行解决了?在下面我先给大家介绍几个简单的例子来先说明神经网络工作的过程,到后面再来给大家解决这个问题。
图12 非线性分类问题
1)AND
在这里x1,x2{0,1},y=x1 AND x2,在这里我们构造出神经网络模型如图13所示,我们还相应地给出了每个输入对应的权重,分别是-30、20、20,则,而这个g函数,我们在前面时已经给大家做过介绍,在这里我们同样用它,如图14所示,这就是g(z)的图像,而当z=4.6时,g(z)0.99接近于1,当z=-4.6时,g(z)0.01接近于0,所以对于这个表达式,我们可以列出真值表,如下所示:
图13 AND的神经网络结构
x1 x2
0 0 g(-30)0
0 1 g(-10)0
1 0 g(-10)0
1 1 g(10)1
我们根据这个真值表可以看出,只有当x1和x2都为1时,最后结果才为1,这不就是AND的功能吗?即x1 AND x2
2)OR
在这里我们要实现或的功能,我们同样给出神经网络的模型如图14所示。只是这里的权重有所改变,为-10、20、20,则,同样我们给大家列出真值表如下:
图14 OR的神经网络模型
x1 x2
0 0 g(-10)0
0 1 g(10)1
1 0 g(10)1
1 1 g(30)1
很明显这是一个OR运算,即=x1 OR x2。
3)NOT
有了AND和OR,再给大家介绍一个NOT,取反运算。模型如图15所示,在这里输入只有一个,再加上一个偏置单元,我们给的权重是10、-20,则,同样当x1=0时,=g(10)1;当x1=1时,=g(-10)0,既是x1取反的结果,所以=NOT x1。
图15 NOT的神经网络模型
好了,前面已经给大家介绍了AND、OR、NOT,下面就来解决前面提出的那个问题如何构造出XNOR,在这里,大家首先要明白x1 XNOR x2=,下面我们就有x1 AND x2,,x1 OR x2,如图16所示。
图16 三个神经网络模型
所以现在我们就可以用以上三种来构造出更复杂的神经网络XNOR了,如图17所示。
图17 XNOR模型
同样地,我们列出真值表如下:
x1 x2
0 0 0 1 1 =x1 AND x2
0 1 0 0 0 =(NOT x1)AND(NOT x2)
1 0 0 0 0 =x1 XNOR x2
1 1 1 0 1
6.4 Multi-class classification(多类分类问题)
在我们的实际生活中,很多分类的问题不止只有两类,比如前面给大家介绍的怎样在几张照片中找出小车,那如果现在我们把问题更加复杂化,我们需要对最后的结果进行分类,哪些是小车,哪些是行人,哪些是摩托车等等,这个时候输出的结果就不能只用单一的0或1表示了,如图18所示的分类问题。
图18 one-vs-all
这个时候,神经网络大概是这样的,如图19所示,输出的结果就不止一个了这个时候结果就不能只用一个分量来表示了。
图19 one-vs-all的神经网络模型
在这里我们用来表示结果是行人,来表示结果是小车等等。这个时候我们的训练集还是,,...,,不过y就不是在属于1,2,3,4了,而是我们这里的、、、,他们分别代表上面的四种结果。