当前位置:网站首页 > 技术博客 > 正文

多层感知机和bp神经网络



多层感知机(MLP,Multilayer Perceptron)也叫人工神经网络(ANN,Artificial Neural Network),除了输入输出层,它中间可以有多个隐层,最简单的MLP只含一个隐层,即三层的结构,如下图:



从上图可以看到,多层感知机层与层之间是全连接的(全连接的意思就是:上一层的任何一个神经元与下一层的所有神经元都有连接)。多层感知机最底层是输入层,中间是隐藏层,最后是输出层。


输入层没什么好说,你输入什么就是什么,比如输入是一个n维向量,就有n个神经元。

隐藏层的神经元怎么得来?首先它与输入层是全连接的,假设输入层用向量X表示,则隐藏层的输出就是

f(W1X+b1),W1是权重(也叫连接系数),b1是偏置,函数f 可以是常用的sigmoid函数或者tanh函数:


       


最后就是输出层,输出层与隐藏层是什么关系?其实隐藏层到输出层可以看成是一个多类别的逻辑回归,也即softmax回归,所以输出层的输出就是softmax(W2X1+b2),X1表示隐藏层的输出f(W1X+b1)。


MLP整个模型就是这样子的,上面说的这个三层的MLP用公式总结起来就是,函数G是softmax



因此,MLP所有的参数就是各个层之间的连接权重以及偏置,包括W1、b1、W2、b2。对于一个具体的问题,怎么确定这些参数?求解最佳的参数是一个最优化问题,解决最优化问题,最简单的就是梯度下降法了(SGD):首先随机初始化所有参数,然后迭代地训练,不断地计算梯度和更新参数,直到满足某个条件为止(比如误差足够小、迭代次数足够多时)。这个过程涉及到代价函数、规则化(Regularization)、学习速率(learning rate)、梯度计算等,本文不详细讨论,读者可以参考本文顶部给出的两个链接。


了解了MLP的基本模型,下面进入代码实现部分。




再次说明,代码来自:Multilayer Perceptron,本文只是做一个详细解读,如有错误,请不吝指出。

这个代码实现的是一个三层的感知机,但是理解了代码之后,实现n层感知机都不是问题,所以只需理解好这个三层的MLP模型即可。概括地说,MLP的输入层X其实就是我们的训练数据,所以输入层不用实现,剩下的就是“输入层到隐含层”,“隐含层到输出层”这两部分。上面介绍原理时已经说到了,“输入层到隐含层”就是一个全连接的层,在下面的代码中我们把这一部分定义为HiddenLayer。“隐含层到输出层”就是一个分类器softmax回归(也有人叫逻辑回归),在下面的代码中我们把这一部分定义为LogisticRegression。

代码详解开始:

(1)导入必要的python模块

主要是numpy、theano,以及python自带的os、sys、time模块,这些模块的使用在下面的程序中会看到。

 

(2)定义MLP模型(HiddenLayer+LogisticRegression)

这一部分定义MLP的基本“构件”,即上文一直在提的HiddenLayer和LogisticRegression

  • HiddenLayer
隐含层我们需要定义连接系数W、偏置b,输入、输出,具体的代码以及解读如下:

 
  • LogisticRegression

逻辑回归(softmax回归),代码详解如下。

(如果你想详细了解softmax回归,可以参考: DeepLearning tutorial(1)Softmax回归原理简介+代码详解)

 

ok!这两个基本“构件”做好了,现在我们可以将它们“组装”在一起。

我们要三层的MLP,则只需要HiddenLayer+LogisticRegression,

如果要四层的MLP,则为HiddenLayer+HiddenLayer+LogisticRegression........以此类推。

下面是三层的MLP:

 

MLP类里面除了隐含层和分类层,还定义了损失函数、规则化项,这是在求解优化算法时用到的。

(3)将MLP应用于MNIST(手写数字识别)

上面定义好了一个三层的MLP,接下来使用它在MNIST数据集上分类,MNIST是一个手写数字0~9的数据集。

首先定义加载数据 mnist.pkl.gz 的函数load_data():

 
加载了数据,可以开始训练这个模型了,以下就是主体函数test_mlp(),将MLP用在MNIST上: 


 

个人理解:

      单个感知器本身是希望通过一个切面或者切线来把数据集分开,这是线性可分的,针对线性不可分或者说非线性问题,它无法解决,可以用多层感知器实现非线性的切分,这就是MLP,如下公式,当然这只是两层的,我们可以继续接很多层。

                                        

      从公式可以看出,MLP多层感知器其实就是一个普通的人工神经网络,人工神经网络中全连接,其实就是一种线性的组合关系,而多层感知器其实就是多个全连接层的组合而已。

参考文章:

文章原文:https://blog.csdn.net/u0/article/details/




版权声明


相关文章:

  • 自动化测试app2025-03-19 17:30:05
  • 计数排序和快速排序2025-03-19 17:30:05
  • gevent django2025-03-19 17:30:05
  • sqlmap下载安装教程2025-03-19 17:30:05
  • 迈迪工具集正版多少钱2025-03-19 17:30:05
  • 电脑上好用的电子书阅读软件2025-03-19 17:30:05
  • 键盘鼠标记录大师怎么用2025-03-19 17:30:05
  • java面试一问三不知怎么办2025-03-19 17:30:05
  • 自动化测试常用工具2025-03-19 17:30:05
  • java线程方法详解2025-03-19 17:30:05