《Machine Learning》第五讲 神经网络

1.为什么使用神经网络

《Machine Learning》第五讲 神经网络

       在之前的学习中,我们学会了用正则化的逻辑回归来处理分类问题,我们尝试从二分类推广到多分类,在特征维数较低的情况下,可以不错的解决分类问题。我们知道,线性分类问题中,sigmoid函数模型的参数是(θ0 + θ1 * x1 +θ2 * x2 + … + θn * xn) , 这个时候的计算量还相对较小,因为特征量的个数就是我们选取的维度的数目,我们用逻辑回归还能做,但是对于非线性分类问题,我们不得不在原本的特征量上再增加多项式,可能是二次多项式,三次多项式等等,那样将使得我们的特征量一下子增长到一个特别大的值,计算复杂度将急速扩大,传统的逻辑回归难以满足我们的需求,因此,我们考虑一种新的,适合用于高维度的非线性分类算法。

2.神经网络模型

2.1人脑中的神经元

《Machine Learning》第五讲 神经网络
       图中是人的大脑中单个神经元的示意图,可以简单地认为一个神经元是由多个树突(输入信号)和一个胞体(处理信号)和一个轴突(输出信号)组成。大脑处理信息就是通过无数个神经元组合完成的,我们可以根据这个基础的神经元模型来构建人工的神经网络模型。

2.2 神经元模型 : 逻辑单元

《Machine Learning》第五讲 神经网络

       根据上面对于人脑神经元的描述,我们不妨构建电脑的神经元模型,如图所示,左边的x1, x2 , x3就类似于树突,我们称之为输入节点(input node),橘色的圆圈类似于神经元胞体,进行信息的处理,右边的 h(x)就类似于轴突,称之为输出节点(output node)。
       在分类问题中,h(x)通常表示的是一个sigmoid函数,需要记住的是,在人工神经元中,我们又把这个函数称为**函数( activation function)。对于x0这个输入节点可省略,我们知道这个值是一定存在的,而且默认是1就行了,有时候也把这个节点称为偏置单元 (bias unit)或偏置神经元(bias neuron)。另外,我们在之前一直称θ为参数向量,在神经网络这一章,我们也称它为权重(weight)。

2.3神经网络模型:多个神经元组合

《Machine Learning》第五讲 神经网络

       图中左上角给出了一个简单的神经网络图,它是由3个输入节点,4个逻辑单元构成。我们可以将这个网络分为三层,x0 , x1 , x2 , x3组成的是第一层输入层,最后输出结果的那一层称之为输出层,这里需要注意的是输出层中逻辑单元的个数等于分类问题的总类别数(两类问题除外,它只需要1个),输入层与输出层之间的所有层统称为隐藏层(hidden layer)。《Machine Learning》第五讲 神经网络 表示在第 j 层中第 i 个节点的**函数,《Machine Learning》第五讲 神经网络表示从第 j 层到第 (j+1)层的参数矩阵,这个参数矩阵中的每一个行向量与 第(j+1)层中每一个神经元的sigmoid函数中的参数列向量是一一对应的。所以《Machine Learning》第五讲 神经网络矩阵中列的个数等于第 j 层中每个单元的特征量的个数再加1(1是bias neuron), 行的个数就是看第(j+1)层有多少个神经元,即该矩阵的维度为:《Machine Learning》第五讲 神经网络,Sj表示第 j 层中逻辑单元的个数(不包含bias neuron)。

       **函数activation function:突然想到一个解释,为什么在神经网络里面把这个称之为**函数。从生物学的角度来看,神经元之间传递信息是将电信号转为化学信号,然后通过神经递质,将化学信号转为电信号,整个就是一个传递兴奋的过程,那么一个本来是抑制状态的神经元变为兴奋态,那可以就认为它是被**了,我猜这也是为什么人造的神经网络模型也引入**一词的原因吧。

2.4 Forward Propagation(FP算法,向前传播)

《Machine Learning》第五讲 神经网络
       我们已经知道,第二层中的几个神经元都是**函数,我们用《Machine Learning》第五讲 神经网络来表示第二层(上标)中第二个**函数的所有参数(橘色划线部分),也就是 g 括号里面的参数,如图中右上角所表示,《Machine Learning》第五讲 神经网络则是由第二层中的所有**函数的参数组成的 n 维向量。
《Machine Learning》第五讲 神经网络
       上图解释了 《Machine Learning》第五讲 神经网络,我们可以将 x向量推广为 a 上标为 (1),然后再分析 《Machine Learning》第五讲 神经网络这个式子,注意这是一个三维向量对应三维向量的sigmoid函数,分别对每一个维度的 z 求它的 sigmoid值。


《Machine Learning》第五讲 神经网络

       如果我们遮住神经网络左边的部分,我们观察剩下的部分,会发现这个模型,或者说 h(x)的计算方法,和逻辑回归的表达式是一样的,只是参数有些不同。不同的是,这个地方的三个特征值,a1 , a2 , a3并不是我们自己输入的,而是神经网络经过一系列的运算,自己找到的合适的特征值。
       另外我的个人理解是,不仅是在最后的输入层这个地方像逻辑回归,而在前面的隐藏层的逻辑单元的**函数中,也是像一个逻辑回归模型,所以我目前觉得神经网络是由大量的逻辑回归叠成的。

***2.5 神经网络的示例

《Machine Learning》第五讲 神经网络

       为了理解上图,我们需要了解以下预备知识:
(1)sigmoid函数( g(z) 函数),在 z = 4.6 时,g (4.6) ≈ 0.99 ;在 z = - 4.6 时,g (4.6) ≈ 0 . 01 ;也就是说,对于 z > 4.6 ,我们认为g(z) = 1; z < - 4.6,我们认为g(z) = 0;
(2)在这个例子中,我们认为输入值 x0 , x1只有 0和1两个取值。
(3)AND操作,相当于 “且”,同为1时结果才为1;
(4)OR操作,相当于“或”,有1则为1;
(5)XOR操作,相当于“异或”,相同为0,不同为1;
(6)XNOR操作,相当于“异或非”,相同为1,不同为 0。

       现在我们可以来分析上图中左下角的神经网络,第一层是基本的输入层,隐藏层只有一层,也就是第二层,我们用了两个神经元或者逻辑单元,一个实现了比较简单的AND运算,将输入向量 x 转变成a1(a1是一个值不是向量,因为g(z)的结果为 0或1) , 另一个实现了简单的OR操作,将输入向量 x 转变成 a2,第三层采用了一个较为复杂的XOR运算,a0, a1, a2 整体作为输入向量,然后得到 h(x) , h(x) 的值也代表了这个原始数据最终的分类!


       小结:要记住,在分类问题中,输出结果用 h(x) 表示的,或者说g(z)形式表示的,这个是一个数值,可能为0或1,不要混淆了,误以为这个还是一个复杂的sigmoid函数。另外,从上述例子中,我们可以直观地发现,神经网络每深入一层,函数的复杂度就扩大一次,我们可以认为神经网络的计算是逐层复杂化的,用更深的层数计算更复杂的函数,然后最终得到正确的分类。

2.6多分类神经网络

《Machine Learning》第五讲 神经网络

       观察上图的输出函数 《Machine Learning》第五讲 神经网络,发现结果是一个四维向量 如列向量[0,0,1,0],也就是说有4个类别划分。这里的分类思想,也还是和之前逻辑回归多分类一样,把某一类的标签设为1,其余三类的标签全部设为0,也就是图中底部 yi 的设法,然后根据这种数据就可以训练出多分类模型。

3.Cost function in NN

3.1代价函数公式

《Machine Learning》第五讲 神经网络

       在本文的前面,我有提到猜测神经网络实际上是大量的逻辑回归叠起来的,这里的神经网络代价函数似乎证明了我的这个观点,如图所示,上面是逻辑回归的代价函数,逻辑回归的输出单元 y 只有1个,0或1 ,我想这也是求和函数后面没有加括号的原因吧,因为两项不会同时出现;对比看的是下面NN的代价函数,神经网络是多分类的,假设有 k 类,那么输出单元 y 也是有 k 个,y 是一个 k 维的列向量 ,对于一个测试样本,它的代价是所以输出单元的代价之和。刚刚分析的是第一项,第二项是正则化项,L表示神经网络的层次( L >= 2 至少有个输入输出层),也就是说这个正则化项,是神经网络中所有 θ的平方和。

3.2 Back propagation algorithm (BP算法)

《Machine Learning》第五讲 神经网络

       基于一个给定的training data,在向前传播算法中,我们计算的是每一层中神经元的**值,或者说sigmoid函数值a(i),然后一直到计算出最后一层的**值,也就是data的最终分类结果。

《Machine Learning》第五讲 神经网络

       在反向传播算法中,我们将输出层的误差首先传播到第三层,然后再传播到第二层,注意第一层代表实际数据,所以误差只会到第二层。

       还要格外注意的是,图中最后一行蓝色字写的公式,定义了偏导数项与 a 和 δ(delta)的关系。
       我们是从后往前计算delta项(delta 是一个向量),如图所示,首先是计算出δ4,用第四层的输出向量a4减去实际结果组成的向量 y。另外上图的第二行中给出了《Machine Learning》第五讲 神经网络 的定义,表示第 l 层中的第 j 个输出单元与真实结果的误差。然后接下来给出了δ3、δ2的定义,暂时还不知道为什么是这样写,只能先记住了,下面给一个公式的推导过程。
《Machine Learning》第五讲 神经网络
       注: .是矩阵中对应位置变量相乘,组成新的矩阵。 如[1 2 3].[3 4 5]=[3 8 15]


《Machine Learning》第五讲 神经网络

       上面讨论了,对于一个数据(x,y)的每一层误差δ的计算过程,下面来分析的就是给定训练集中,所有的逻辑单元 a 产生的误差之和。三角形表示大写的δ的意思,通过累加所有项的δ,用来 计算J(θ) 的偏导数项。


To be continued!