Coursera 机器学习(by Andrew Ng)课程学习笔记(四)——神经网络(一)

来源:互联网 发布:自学编程需要多久 编辑:程序博客网 时间:2024/05/18 00:44

此系列为 Coursera 网站机器学习课程个人学习笔记(仅供参考)
课程网址:https://www.coursera.org/learn/machine-learning
参考资料:http://blog.csdn.net/scut_arucee/article/details/50144225


Week Four——Neural Network:Representation


一、前言

1.1 分类器

当我们用机器学习算法构造一个汽车识别器时,我们需要一个带标签的样本集,其中一部分是汽车,另一个部分可以是其他任何东西,然后我们将这些样本输入给学习算法,以训练一个分类器。训练完毕后,我们输入一幅新的图像,让分类器判定这是否为汽车。


1.1 神经网络的优势

对于复杂的非线性分类问题,当特征变量个数n很大时,用逻辑回归时 logistic 函数g(θTx)中的θTx如果用二次多项式表示,则二次项数目很多,约为n2,计算复杂度达到O(n2);如果用三次多项式表示,则三次项数目更多,复杂度达O(n3)

而神经网络能很好的解决上面那种复杂的非线性分类问题。


二、神经网络的模型

2.1 神经元的模型

在一个神经网络里,我们将神经元模拟成一个逻辑单元(logistic unit),如下图黄色圆圈所示。

x1,x2,x3是它的输入,向神经元传输一些信息,神经元通过一些计算 hθ(x),然后输出计算结果。这里,hθ(x)=g(θTx)=11+eθTx。我们称之为由logistic 函数作为激励函数的人工神经元。与前面内容相对,有时,输入单元中会加一个偏置单元 (如上图浅蓝色圆圈所示)x0x0=1


2.2 神经网络的模型

神经网络是一组神经元的组合,如下:

同样的,有时我们会加上偏置单元,它们的值永远为1。图中网络的第一层也叫做输入层(Input Layer),第二层叫做隐藏层(Hidden Layer),隐藏层可以有多层,第三层叫做输出层(Output Layer)。


2.3 神经网络的假设函数

为了解释神经网络具体的计算步骤,我们先来说明一些符号:

a(j)i——第 j 层第 i 个神经元的激励(神经元读入数据后计算并输出的值);
Θj——权重矩阵,控制着从第 j 层到第 j+1 层的函数映射。

下面我们看一下隐藏层的神经元是怎么计算它们的值的:

如果神经网络第 j层有 sj 个单元,第 (j+1) 层有 sj+1个单元,则 Θj 就是一个sj+1(sj+1)维的矩阵。(第(j+1)层的偏置单元 a(j+1)0 不必求,始终为1,但第 j偏置单元对第(j+1)层有影响)
如上图,Θ13×4 的矩阵,Θ21×4的矩阵。


三、前向传播

下面我们引入符号 z(j)k来代替上面式子中括号里的部分:

a(2)1=g(z(2)1)
a(2)2=g(z(2)2)
a(2)3=g(z(2)3)

总之,对于第二层的第k 个节点:

z(2)k=Θ(1)k,0x0+Θ(1)k,1x1++Θ(1)k,nxn

我们用向量表示 xz(j)

x=x0x1xnz(j)=z(j)1z(j)2z(j)n

根据上面的映射关系,a(1)=x,可知:

z(j)=Θ(j1)a(j1)

j 层激励单元的向量表示:

a(j)=g(z(j))

-
计算完 a(j) 后,我们可以给第 j 层添加上偏置单元(a(j)0=1)。同前面一层,我们可以得到下一层激励单元的值:

z(j+1)=Θ(j)a(j)a(j+1)=g(z(j+1))

假设第j+1 层为输出层,则:

hΘ(x)=a(j+1)=g(z(j+1))

这种从输入层的激励开始向前传播到隐藏层,再传播到输出层的行为叫做前向传播(Forward Propagation)。

看了这么多,神经网络到底在做什么呢?

对于上面神经网络的模型那张图,如果不看输入层,只看后面两层:

写出计算公式:

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

忽略一些上下标,看上去很像逻辑回归。

神经网络所做的事情很像逻辑回归,但它不是使用 x0,x1,x2,x3 作为输入特征来训练逻辑回归,而是通过另一组参数 Θ(1)x0,x1,x2,x3 映射为隐藏层的 a(2)1,a(2)2,a(2)3 作为输入特征。


四、利用神经网络解决非线性问题

首先,我们先来看下面两张图:

如左图所示,x1,x2 只能取0和1,图中只画了4个样本,我们可以把左图看做是右图的简化版本,用叉来代表正样本,圆圈代表负样本。在以前的例子中,我们会通过学习一个非线性的决策边界来区分正负样本,那么神经网络是如何做到的?

下面我们通过几个例子来看一下:

与运算(AND)
x1,x2{0,1},y=x1 and x2,按下图给神经网络分配权重:

hΘ(x)=a(2)=g(30+20x1+20x2)

-
又由于logistic函数g(z)有在z>4.6 时越来越接近1,在z<4.6时越来越接近0的趋势,如下图:

故我们可以得到神经网络的输出和输入的关系:

x1 x2 hΘ(x) 0 0 g(30)0 0 1 g(10)0 1 0 g(10)0 1 1 g(10)1

可以看到,hΘ(x)x1 or x2,该神经网络实现了与运算。

或运算(OR)
x1,x2{0,1},y=x1 and x2,按下图给神经网络分配权重:

hΘ(x)=a(2)=g(10+20x1+20x2)

画出真值表:

x1 x2 hΘ(x) 0 0 g(10)0 0 1 g(10)1 1 0 g(10)1 1 1 g(30)1

可以看到,hΘ(x)x1 or x2,该神经网络实现了或运算。

逻辑非(NOT)
x1{0,1},y=not x_{1}$,按下图给神经网络分配权重:

hΘ(x)=a(2)=g(1020x1)

画出真值表:

x1 hΘ(x) 0 g(10)1 1 g(10)0

可以看到,hΘ(x)not x_{1}$,该神经网络实现了逻辑非运算。

(NOT x1) AND (NOT x2)
按下图给神经网络分配权重:

可以自己画真值表验证。

同或运算(XNOR)
按下图给神经网络分配权重:

仔细观察,可知

a(2)1=x1 and x2,即红色部分实现的是AND;
a(2)2= (not x1) and (not x2),即蓝色部分实现的是(NOT x1) AND (NOT x2);
hΘ(x)=a(3)1=a(2)1 or a(2)2,即绿色部分实现的是OR;

通过真值表,我们会发现这个神经网络确实实现了同或运算(XNOR)。

通过这个例子我们可以看到,复杂函数可以通过一些简单函数的组合来实现。

比如神经网络的第二层可以计算输入层特征变量的函数;第三层可以以第二层为基础,计算更复杂的函数;第四层可以以第三层为基础计算比第三层还要复杂的函数,以此类推。神经网络运用更深的层数可以计算更复杂的函数,使其作为特征传递给最后一层的逻辑回归分类器,更准确地预测分类结果。


五.神经网络在多类别分类中的应用

在多类别分类中,我们的输出并不是一个数,而是一个向量,例如有一个三类别分类问题,我们要识别一个物体是行人,小汽车,摩托车还是卡车,则神经网络的模型可以如下图:

最后一层的输出层相当于有4个逻辑回归的分类器,hΘ(x)R4,更具体的说:

训练数据集是 (x(1),y(1)),(x(2),y(2)),,(x(m),y(1))y(i)一定是上面4个列向量中的一个。神经网络的目标是使 hΘ(x)y(i)

阅读全文
0 0
原创粉丝点击