Neural Networks笔记1 - webdancer's Blog

Neural Networks笔记1

webdancer posted @ 2012年10月25日 14:51 in machine learning with tags Machine learning neural network , 2368 阅读

1.继续八卦NN的历史

人工神经网络的研究者,试图创造一个大脑和机器处理信息的统一模型,在这个模型中,信息按照同意的规则进行处理。正如Frank Rosenblatt所希望的:

"the fundamental laws of organization which are common to all information handling systems, machines and men included, may eventually be understood."

Frank Rosenblatt是那时候NN的先锋人物,1957年,他在IBM 704上模仿构造的perceptron模型,后来又创造了专门的硬件设备。这引起了人们非常大的研究热情,但是在1969年Marvin Minsky在他写的书"Perceptrons"中指出了这种模型的致命错误,perceptron模型甚至无法完成XOR这种简单的逻辑操作,那么怎么可能期望它模拟那么复杂的人的大脑的信息处理过程呢?这就给NN的研究浇了一盆冷水。这样NN的研究就基本上停滞了,这对AI的研究也产生了重要的影响。(ps:Rosenblatt与Minsky高中就认识,但在NN的态度上截然不同,他们在AI的会议上时有争吵。)。两年以后的1971年,Rosenblatt在去世。1986 年,D.E. Rumelhart和J.L. McClelland主编了著名的《并行分布处理—认知微结构的探索》[8]一书,对PDP小组的研究工作进行了总结,轰动一时,特别是D.E. Rumelhart、G.E. Hinton和R.J. Williams重新发明了著名的BP算法,产生了非常大的影响。在书中BP网络对Marvin Minsky针对perceptron模型的缺点的指责做了修正。NN的发展又回到正规,如果你看过最近的科技新闻,就会发现人们对GOOGLE的brain simulator[1]产生了极大的兴趣,它基于NN。

2.Perceptron model

Perceptron是一种线性模型,只能把那些线性可分的数据进行分类,是一种只有输入输出层,而没有中间层的简单神经网络,示意图如下(输入,输出层的节点数目都是可以根据具体的问题改变):

下面看一下Perceptron的模型,

 

\[
y(x)=f(W^Tx)
\]

其中,

\[
f(a)=
\begin{align}
\left\{
\begin{array}
+1; a>=0\\
-1 ;a<0
\end{array}
\right .
\end{align}
\]

模型训练

我们使用的一种称为perceptron criterion的误差函数,在这种误差函数中,对那些分类正确的训练实例其错误为0,对那些分类错误的实例,最小化$-W^T\phi^nt^n$[1],所以误差函数的形式为:

\[
\mathbb E_p(W)=-\sum_{x^n \in \mathbf M}W^T\phi^nt^n
\]

其中,$\mathbf M$为分类错误的实例集合。可以看出,$\mathbb E_p(W)$是关于$W$的线性函数。有了目标函数,我们就可以使用sgd方法进行参数的训练。

\[
W^{t+1}=W^{t}-\eta\bigtriangledown E_p(W)=W^{t}-\eta\bigtriangledown E(W)=W^{t}+\eta\phi^nt^n
\]

其中,$t$为训练的次数 ;$\eta$为学习系数,常用系数$\eta=1$。我们可以这样简单的理解上面的过程:在训练集合上,我们选择一个实例,用Perceptron function计算$y(x)$,如果分类正确,则$W$值不变;如果分类错误,根据上面的讨论,更新$W$,如果我们把学习系数设为1,对于$C_1$,我们在$W$上加上特征向量,对于$C_2$,我们在$W$上减去特征向量。

总结一下,算法如下:

 

1. 初始化$W=0$,对$x$进行归一化为单位向量。
2. 给出一个$ x$, 预测为正类如果满足 $W^{t} · x > =0$,否则,为负类
3. 对于预测错误的$x$,按照下面的规则,更新参数$W$:
   • Mistake on positive: $W^{t+1} ← W^{t}+ x.$
   • Mistake on negative:$W^{t+1} ← W^{t}- x.$
     $t ← t + 1$.
4. 如果满足收敛条件,程序停止;否则,跳到(2)继续执行。
 

过程如下图所示:

3.Perceptron模型的XOR问题

 

x1

x2

y

0

0

0

1

0

1

0

1

1

1

1

0

对于XOR问题,Perception无法解决,本质上是因为Perception是一种线性的分类器,无法处理像XOR这样的线性不可分问题,只能处理线性可分问题(这本质是由于基函数的数目是固定的)。下面具体看一下:

1.第一种情况,把$y=0$当作正类,$y=1$当作负类,则应满足:

\[
\begin{align}
\left \{
\begin{array}{l}
w_1*0+w_2*0>=0\\
w_1*1+w_2*1>=0\\
w_1*1+w_2*0<0\\
w_1*0+w_2*1<0
\end{array}
\right .
\end{align}
\]
得出:
\[
\begin{align}
\left \{
\begin{array}{l}
0>=0\\
w_1+w_2>=0\\
w_1<0\\
w_2*1<0
\end{array}
\right .
\end{align}
\]

上面的式子显然矛盾,所以Perception无法处理。

2.第二种情况,把$y=1$当作正类,$y=0$当作负类,则应满足:

\[
\begin{align}
\left \{
\begin{array}{l}
w_1*0+w_2*0<=0\\
w_1*1+w_2*1<=0\\
w_1*1+w_2*0>0\\
w_1*0+w_2*1>0
\end{array}
\right .
\end{align}
\]
得出:
\[
\begin{align}
\left \{
\begin{array}{l}
0<=0\\
w_1+w_2<=0\\
w_1>0\\
w_2*1>0
\end{array}
\right .
\end{align}
\]
上面的式子也显然矛盾,所以Perception无法处理。
综合上面两种情况,我们可以看出Perception无法处理XOR函数。

4.BP网络解决XOR问题

Bp网络相对于perceptron来说,引入了中间层(hidden layer),如果我们增加中间节点的数目,BP网络几乎可以模拟任何函数,这使得BP网络有了巨大的威力。下面看一下我们怎么用BP网络来解决XOR问题。

 

 
BP网络的知识在前面已经具体的记录了,这里用自己写的神经网络进行直接训练。
训练集合:X_train=[1 0 0;1 1 0;1 0 1;1 1 1]; Y_train=[0;1;1;0];
使用sgd的方法,进行1000次epochs,最后得到了正确的结果。cost function值的变化情况如下图:

 

参数是:
W1_opt =
-4.0651 -7.6005 7.4477
-3.6312 6.6970 -7.0214
W2_opt =
-6.1426 12.4327 12.5669

当然BP绝不限于解决像XOR这样的简单函数,它能够模拟很复杂的函数,例如:卷积神经网络(Convolutional neural network, CNN)在手写字符识别等问题中能取得非常好的效果,当然还有很多的新的NN网络的架构在不断的发现和研究。

5.BP网络的问题以及deep learning

在传统的BP网络中,中间层(hidden layer)的层次数目不能过多,一般是1-2层,过多的层次不能取得好的效果。而在人脑中对信息的处理层次更多,人们希望网络中能有更多的中间层。Hinton[2]在2006年发表了论文”A fast learning algorithm for deep belief nets ”成功了训练了多层神经网络,这就是现在收到人们关注的Deep learning 方法。

[1].http://www.bbc.co.uk/news/technology-18595351

[2]http://www.cs.toronto.edu/~hinton/


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter
Host by is-Programmer.com | Power by Chito 1.3.3 beta | © 2007 LinuxGem | Design by Matthew "Agent Spork" McGee