机器学习笔记 Week4 神经网络:表达

学习笔记(Machine Learning) Week4

全部笔记PDF版:http://vdisk.weibo.com/s/J4rRX/1373287206

Week4 神经网络:表达

神经网络:表达

1.1非线性假设(Non-Linear Hypothesis)

之前我们已经看到过,使用非线性的多项式项能够帮助我们建立更好的分类模型。假设我们有非常多的特征,例如大于100个变量,我们希望用这100个特征来构建一个非线性的多项式模型,结果将是数量非常惊人的特征组合,即便我们只采用两两特征的组合(x1x2+x1x3+x1x4+...+x2x3+x2x4+...+x99x100),我们也会有接近5000个组合而成的特征。这对于一般的逻辑回归来说需要计算的特征太多了。

假设我们希望训练一个模型来识别视觉对象(例如识别一张图片上是否是一两汽车),我们怎样才能这么做呢?一种方法是我们利用很多汽车的图片和很多非汽车的图片,然后利用这写图片上一个个像素的值(饱和度或亮度)来作为特征。

假如我们只选用灰度图片,每个像素则只有一个值(而非RGB值),我们可以选取图片上的两个不同位置上的两个像素,然后训练一个逻辑回归算法利用这两个像素的值来判断图片上是否是汽车:

neural network

假使我们采用的都是50x50像素的小图片,并且我们将所有的像素视为特征,则会有2500个特征,如果我们要进一步将两两特征组合构成一个多项式模型,则会有约25002/2个(接近3百万个)特征。普通的逻辑回归模型,不能有效地处理这么多的特征,这时候我们需要神经网络。

1.2神经网络介绍

神经网络算法的来源:

神经网络算法源自对大脑的模仿。神经网络算法在八十到九十年代被广为使用过,再之后便逐渐减少了使用,但是最近又开始变得流行起来,原因是神经网络是非常依赖计算能力的算法,随着新计算机性能的提高,算法又成为了有效的技术。

神经网络算法的目的是发现一个能模仿人类大脑学习能力的算法。研究表明,如果我们将视觉信号传道给大脑中负责其他感觉的大脑皮层处,则那些大脑组织将能学会如何处理视觉信号。

sensors

下面是一个让舌头学会如何去看的例子。在一个盲人的头顶配置一台低像素的照相机,然后将照片的像素转换为不同的电极,每个像素都按照亮度给赋予一个不同的电压值。结果随着实验进行,这个盲人开始能够利用舌头看见眼前的东西。

blind people see

1.3模型表达

为了构建神经网络模型,我们需要首先思考大脑中的神经网络是怎样的?每一个神经元都可以被认为是一个处理单元/神经核(processing unit/ Nucleus),它含有许多输入/树突(input/Dendrite),并且有一个输出/轴突(output/Axon)。神经网络是大量神经元相互链接并通过电脉冲来交流的一个网络。

nuron

神经网络模型建立在很多神经元之上,每一个神经元又是一个个学习模型。这些神经元(也叫激活单元,activation unit)采纳一些特征作为输出,并且根据本身的模型提供一个输出。下图是一个以逻辑回归模型作为自身学习模型的神经元示例,在神经网络中,参数又可被成为权重(weight)。

neurons

1.4神经网络模型表达

神经网络模型是许多逻辑单元按照不同层级组织起来的网络,每一层的输出变量都是下一层的输入变量。下图为一个3层的神经网络,第一层成为输入层(Input Layer),最后一层称为输出层(Output Layer),中间一层成为隐藏层(Hidden Layers)。我们为每一层都增加一个偏倚单位(bias unit):

neural net work

下面引入一些标记法来帮助描述模型:

  • aij代表第j层的第i个激活单元。
  • theta代表从第j层映射到第j+1层时的权重的矩阵,例如theta1代表从第一层映射到第二层的权重的矩阵。其尺寸为:以第j层的激活单元数量为行数,以第j+1层的激活单元数为列数的矩阵。例如:上图所示的神经网络中theta1的尺寸为4*3。

对于上图所示的模型,激活单元和输出分别表达为:

activation unit and output

上面进行的讨论中只是将特征矩阵中的一行(一个训练实例)喂给了神经网络,我们需要将整个训练集都喂给我们的神经网络算法来学习模型。

1.5向量化实现(正向传播)Vectorized Implementation (Forward Propagation)

相对与使用循环来编码,利用向量化的方法会使得计算更为简便。以上面的神经网络为例,试着计算第二层的值:

222

我们令daum_equation_1372514573895,则daum_equation_1372514860191,计算后添加daum_equation_1372514962733

计算输出的值为:

333

我们令daum_equation_1372515089311,则daum_equation_1372515160729

这只是针对训练集中一个训练实例所进行的计算。如果我们要对整个训练集进行计算,我们需要将训练集特征矩阵进行转置,使得同一个实例的特征都在同一列里。即:

daum_equation_1372515388097

1.6对神经网络的理解

本质上将,神经网络能够通过学习得出其自身的一系列特征。在普通的逻辑回归中,我们被限制为使用数据中的原始特征x1,x2,...,xn,我们虽然可以使用一些二项式项来组合这些特征,但是我们仍然受到这些原始特征的限制。在神经网络中,原始特征只是输入层,在我们上面三层的神经网络例子中,第三层也就是输出层做出的预测利用的是第二层的特征,而非输入层中的原始特征,我们可以认为第二层中的特征是神经网络通过学习后自己得出的一系列用于预测输出变量的新特征。

1.7神经网络示例:二元逻辑运算符(Binary Logical Operators)

当输入特征为布尔值(0或1)时,我们可以用一个单一的激活层可以作为二元逻辑运算符,为了表示不同的运算符,我们之需要选择不同的权重即可。

下图的神经元(三个权重分别为-30,20,20)可以被视为作用同于逻辑(AND):

and

下图的神经元(三个权重分别为-10,20,20)可以被视为作用等同于逻辑(OR):

229

下图的神经元(两个权重分别为10,-20)可以被视为作用等同于逻辑(NOT):

or

我们可以利用神经元来组合成更为复杂的神经网络以实现更复杂的运算。例如我们要实现XNOR功能(输入的两个值必须一样,均为1或均为0),即XNOR=(x1ANDx2)OR((NOTx1)AND(NOTx2))

首先构造一个能表达(NOTx1)AND(NOTx2)部分的神经元:

230

然后将表示AND的神经元和表示(NOTx1)AND(NOTx2)的神经元以及表示OR的神经元进行组合:

231

我们就得到了一个能实现XNOR运算符功能的神经网络。

1.8多类分类

如果我们要训练一个神经网络算法来识别路人、汽车、摩托车和卡车,在输出层我们应该有4个值。例如,第一个值为1或0用于预测是否是行人,第二个值用于判断是否为汽车。

下面是该神经网络的可能结构示例:

232

神经网络算法的输出结果为四种可能情形之一:

daum_equation_1372517792858

课程地址:https://class.coursera.org/ml-003/class/index

Leave a Reply

Your email address will not be published. Required fields are marked *