Coursera机器学习课程笔记(5) Neural Networks Representation

来源:互联网 发布:vmware mac os 10.9 编辑:程序博客网 时间:2024/05/01 21:06

为什么引入神经网络?——Nonlinear hypothesis

我们之前学的,无论是线性回归还是逻辑回归都有这样一个缺点,即当特征太多时,计算的负荷会非常大。
下面是一个例子:

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

实例: Problems where n is large - computer vision

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

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

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

神经网络 Neural Networks


神经网络在现代机器学习中的应用:

模型表示 Model representation

神经元与大脑 Neuron in the brain

神经元工作模式:
![](http://7xi2wq.com1.z0.glb.clouddn.com/Neuron .png)

神经网络的逻辑单元:

其中 x1,x2,x3 是输入单元(input units),我们将原始数据输入给它们。a1,a2,a3 是中间单元,它们负责将数据进行处理,然后呈递到下一层。最后是输出单元,它负责计算 h(x)。

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


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

为了更好了了解 Neuron Networks 的工作原理,我们先把左半部分遮住:

右半部分其实就是以 a0,a1,a2,a3 按照 Logistic Regression 的方式输出 h(x):
其实神经网络就像是 logistic regression,只不过我们把 logistic regression 中的输入向量
[x1~x3]变成了中间层的[a(2)1~a(2)3], 即

h(x)=g(Θ(2)0 a(2)0+Θ(2)1 a(2)1+Θ(2)2 a(2)2+Θ(2)3 a(2)3)

我们可以把 a0,a1,a2,a3 看成更为高级的特征值,也就是 x0,x1,x2,x3 的进化体,并且它们是由 x 与决定的,因为是梯度下降的,所以 a 是变化的,并且变得越来越厉害,所以这些更高级的特征值远比仅仅将 x 次方厉害,也能更好的预测新数据。
这就是神经网络相比于逻辑回归和线性回归的优势。

Examples and intuitions

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

我们可以用这样的一个神经网络表示 AND 函数:

举例说明:逻辑与 AND;下图中左半部分是神经网络的设计与 output 层表达式,右边
上部分是 sigmod 函数,下半部分是真值表。

OR 与 AND 整体一样,区别只在于的取值不同。

NOT 函数

x1 XNOR x2


a(2)1 = x1 && x2
a(2)2 = (﹁x1)&&(﹁x2)
a(3)1 =a(2)1 ||a(2)2 =(x1 && x2) || (﹁x1)&&(﹁x2) = x1 XNOR x2

应用:手写识别系统

多类分类 Multi-class classification

我们有不止两种分类时(也就是 y=1,2,3….),比如以下这种情况,该怎么办?如果我们要训练一个神经网络算法来识别路人、汽车、摩托车和卡车,在输出层我们应该有 4 个值。例如,第一个值为 1 或 0 用于预测是否是行人,第二个值用于判断是否为汽车。
输入向量 x 有三个维度,两个中间层,输出层 4 个神经元分别用来表示 4 类,也就是每一个数据在输出层都会出现[a b c d]T,且 a,b,c,d 中仅有一个为 1,表示当前类。下面是该神经网络的可能结构示例:

1 0
原创粉丝点击