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

深度学习系列(二):从神经网络到深度学习

2015-11-29 11:37 661 查看
所谓神经网络自然是模拟人脑的神经元构造,许多神经元结合起来的一个网络,人脑的一个神经元可能是这个样子:




抽象出来一个神经元就是三个东西,前中后:

前:谁给这个神经元信号(人脑每个神经元可是与10万个其他神经元相连接);

中:这个神经元信号往哪里传;

后:传出的信号大小是多少;

基于此人们构造了人工神经元,可能是这个样子:




每个神经元有好些个输入,然后把信息综合一下有一个输出(这是单个神经元,如果和其他多个神经元相连就不止一个输出了)。

好了好多神经元联合起来就是神经网了,人的可能就是这样:



错综复杂的,这个我们也完全可以通过人工神经元构造出来。那么简单的人工神经网络(比如3层)就如同下面所示:



最原始的输入层是输入信号,经过一个中间隐含层再到输出。这种网络是很久以前人们研究神经网络的时候出来的结构,也是一种浅层(只有一个隐含层)结构,虽然简单,但是也很强大,可以拟合一般情况下的许多非线性输入输出,比如sin(x),cos(x),x,x^2以及它们的任意组合等等。也就是说如果你有一堆输入数据,以及该输入下的输出,那么去训练这个网络,通过改变隐含神经元个数是可以找到输入与输出之间的某种对应关系的(不管是线性还是非线性的),所以你会发现,matlab里面的神经网络工具箱里面的模型基本上都是三层网络的结果,如果说将来matlab融合了深度学习和就会有多层了。那么所谓的深度学习网络,就是把上述的只含有一个隐含层的网络变化成含有多个隐含层的网络,像下面这样:



这个网络实现的最终目的反正也是输入到输出的映射关系,那可能会想,三层网络可以基本上映射所有的线性与非线性输入与输出,为什么还要多层呢?确实是这样,但是有些问题,单靠三层网络映射的效果并不是很好,同时三层网络出来的结构也没有多层网络的那种结构好理解。比如说对一个输入输出关系为:

Y = sin(cos(x^2))的这样一个输入输出,如果单纯用三层神经网络去训练,我们知道,最后网络会训练出权值,这也是我们需要的,但是你去看这些权值,根本发现不了任何关系,但是你去用多层网络训练的话,比如5层(隐含层3层),你在去看那些权值关系,可能会发现第一层隐含层可能把输入x映射成了x^2,第二层隐含层可能把刚刚那个结果(也就是x^2)映射成了cos(x),那也就是cos(x^2),再来一层隐含层可能吧刚刚那个结果又映射成了sin(x),也就是sin(cos(x^2)),每一层的结果在多层网络下可以很明了,而只有一个隐含层的网络可能混为一团,直接映射成一个关系,假如说sin(cos(x^2))的关系约等于x^3的话,那么单层隐含层的网络找到的就是x^3的这个关系,而多层隐含层的网络可能就是分层的找到3种映射关系。并且事实证明,大多数实际问题用多层网络来一次一次的寻找他们之间的映射关系才更加准确的。

一个典型的就是图像识别上,如果单纯的只含有一次隐含层,意思就是有了一个图像,然后训练告诉你这个图像是什么,但是多层隐含层的话,可能告诉你的就是:第一层告诉你基于这个图像的像素点可以组合成哪些边,第二层告诉你基于这些边可以组合成那些小的结构(比如说鼻子耳朵),第三层告诉你基于这些小结构可以组合成那些物体(鼻子耳朵手脚那么就组合成了一个人了)。这就是深度学习通过深度可以将原始数据的特征完全挖掘出来,而我们人的大脑机制也是这样子的,我们看一个物体,大脑自动把这些过程完成了,先提边缘,在组合然后在组合才得到我们认识的一个物体,这里借用这位大神的博客中一个图:zouxy09

表示下就是这样子:



好了,问题的介绍大概就是这样子了,知道了从浅层学习到深度学习的过程以及为什么要使用深度学习,一个最简单的目的就是深层挖掘输入与输出之间的各种潜在关系,而不是混为一团的组合关系。

知道了神经网络与深度网络的模型,那么现在的问题就是如何求取连接在网络之间的权值参数了,这也是人们一直研究的重点。知道了网络参数,那么给定一个输入后,通过网络权值参数的计算映射,就可以得到网络输出了,所以这些网络的核心问题也是在于网络的参数训练与计算上。

神经网络中最简单的也就是三层网络,只含有一层隐含层。神经网络的一般训练方法可以根据梯度下降法来进行,关于梯度下降法网络上的参考资料交到,相关的实验也可以参考:

机器学习之从logistic到神经网络算法

关于梯度下降法,只需要知道原理,至于实现过程可能在实际应用中不需要我们自己去设计,但是原理的了解对于深度学习的操作以及设计都是有好处的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: