您的位置:首页 > 理论基础 > 计算机网络

机器学习:神经网络之表达

2015-08-13 14:08 435 查看
**************************************

注:本系列博客是博主学习Stanford大学 Andrew Ng 教授的《机器学习》课程笔记。博主深感学过课程后,不进行总结很容易遗忘,根据课程加上自己对不明白问题的补充遂有此系列博客。本系列博客包括线性回归、逻辑回归、神经网络、机器学习的应用和系统设计、支持向量机、聚类、将维、异常检测、推荐系统及大规模机器学习等内容。

**************************************

神经网络:表达

非线性假说

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



这样的问题还有很多,例如在计算机视觉的汽车检测问题中,对于一副汽车图片来说,你可以轻易的辨别出这是一辆汽车,但是在计算机或者相机“眼里”,这只是一堆像素的数字矩阵而已:



所以,对于汽车检测问题,我们需要一堆汽车图片和一堆非汽车图片作为训练集,训练一个用于汽车检测的分类器



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



我们模拟大脑中的神经元结构建立一个简单的模型-Logistic unit:



我们设计出了类似于神经元的神经网络,效果如下:



其中x1,x2,x3是输入单元(input units),我们将原始数据输入给它们。 a1,a2,a3是中间单元,它们负责将数据进行处理,然后呈递到下一层。 最后是输出单元,它负责计算 h(x)。 神经网络模型是许多逻辑单元按照不同层级组织起来的网络,每一层的输出变量都是下一层的输入变量。上图为一个3 层的神经网络,第一层成为输入(InputLayer),最后一层称为输出层(Output Layer),中间一层成为隐藏层(Hidden Layers)。我们为每一层都增加了一个偏差单位(bias unit)。



模型表示二

相对与使用循环来编码,利用向量化的方法会使得计算更为简便。





其实神经网络就像是 logistic regression,只不过我们把 logistic regression 中的输入向量[x1~x3]变成了中间层的[a(2)1~a(2)3],  我们可以把a0,a1,a2,a3看成更为高级的特征值,也就是 x0,x1,x2,x3的进化体,并且它们是由x与决定的,因为是梯度下降的,所以a是变化的,并且变得越来越厉害,所以这些更高级的特征值远比仅仅将 x次方厉害,也能更好的预测新数据。 这就是神经网络相比于逻辑回归和线性回归的优势。 

特征和直观解释

我们的目标是利用神经网络实现一个逻辑代数中的同或运算,因此首先介绍一下同或运算和异或运算:

同或逻辑和异或逻辑是只有两个逻辑变量的逻辑函数。如果当两个逻辑变量A和B相同时,逻辑函数F等于1,否则F等于0,这种逻辑关系称为同或。反之,如果当两个逻辑变量A和B相异时,逻辑函数F等于1,否则F等于0,这种逻辑关系称为异或。



将其对应到一个非线性分类器,如下图所示:



先介绍三种最基本的逻辑运算(与逻辑运算、或逻辑运算、非逻辑运算),同时分别介绍其对应的神经网络实现,最后将这几种基本的逻辑运算组合,形成最终的同或逻辑运算的神经网络。







左图的神经元(三个权重分别为-30,20,20)可以被视为作用同于逻辑与(AND);中图的神经元(三个权重分别为-10,20,20)可以被视为作用等同于逻辑或(OR);右图的神经元(两个权重分别为  10,-20)可以被视为作用等同于逻辑非(NOT):



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



上图中第二层隐藏网络a1和a2分别代表了A And B和Not A And Not B,a1和a2又做了一次或逻辑运算就得到了同或逻辑运算。该神经网络对应的输出与同或运算的真值表相同。

多分类问题

当我们有不止两种分类时(也就是 y=1,2,3….),比如我们要训练一个神经网络算法来识别路人、汽车、摩托车和卡车,在输出层我们应该有 4个值。例如,第一个值为1或0用于预测是否是行人,第二个值用于判断是否为汽车。 输入向量x有三个维度,两个中间层,输出层4个神经元分别用来表示4类,也就是每

一个数据在输出层都会出现[a b c d]T,且a,b,c,d中仅有一个为1,表示当前类。下面是该神经网络的可能结构示例: 



当向量的某个元素为1,其他为0时,代表分类结果为某个为1元素所对应的类别。这与之前逻辑回归中的多类分类表示不同,在逻辑回归中,输出y属于类似于{1, 2, 3,4}中的某个值,而非一个向量。因此,如果要训练一个多类分类问题的神经网络模型,训练集是这样的:



******************

作者:hao_09

时间:2015/8/13

文章地址:http://blog.csdn.net/lsh_2013/article/details/47454079

******************

  

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息