由于准备在一个项目中引入神经网络来对缺失的数据进行预测,这两天看了有关深度学习的资料,做下记录,方便自己查阅(持续更新)
1 为什么要“深”
之前的神经网络理论证明一个隐层的网络就可以任意逼近一个函数,只要这个隐藏层足够大。那为什么我们要深度学习而不是广度学习呢,我看过最好的解释是https://www.zhihu.com/question/25456959中YJango的回答。简单来说,深度学习可以大大减少训练神经网络的数据。在广度学习(2层网络)中,对于输入的一个确定状态,对应着一个确定的输出,因此训练一个样本只能对该样本对应的连接关系有作用,对网络训练需要穷举输入的所有可能状态(与其说这是学习,不如说这是网络在强行记忆)。而在深度学习中,由于从输入到输出,不同的样本之间会有大量的连接关系是重用的,迭代组成的先验知识使得样本可用于帮助训练其他共用同样底层结构的样本,因此大大减少训练神经网络的数据。
2深度学习与传统神经网络有哪些区别
https://www.zhihu.com/question/26017374中Ryuu的回答,全文抄录如下
以我的理解,两种网络被设计出来,所要解决的问题和目的不同。
多层神经网络与universal
approximation theorem[1](泛逼近性原理,不知这样翻译可对?)相伴而生。该理论指出,单隐藏层(hidden layer)非线性前馈神经网络,可以在实数空间近似任何连续函数。上世纪80 90年代,Backpropagation刚刚开始大行其道,利用这一算法,只需知道输入和输出便可训练网络参数,从而得到一个神经网络“黑箱”。之所以称为黑箱,是因为无需知道y=f(x)中f的表达式是什么,也能轻易做函数计算,因为f(objective
function)就是网络本身。多层神经网络的座右铭是:“函数是什么我不管,反正我能算!“。
当然多层神经网络并非天下无敌,它有三个主要限制:
一是在面对大数据时,需要人为提取原始数据的特征作为输入,这个问题前面的知友提到过@杨延生。必须忽略不相关的变量,同时保留有用的信息。这个尺度很难掌握,多层神经网络会把蹲在屋顶的Kitty和骑在猫奴头上的Kitty识别为不同的猫咪,又会把二哈和狼归类为同一种动物。前者是对不相关变量过于敏感,后者则因无法提取有实际意义的特征。
二是想要更精确的近似复杂的函数,必须增加隐藏层的层数,这就产生了梯度扩散问题@青青子衿。所谓“强弩之末势不能穿鲁缟“。
三是无法处理时间序列数据(比如音频),因为多层神经网络不含时间参数。
随着人工智能需求的提升,我们想要做复杂的图像识别,做自然语言处理,做语义分析翻译,等等。多层神经网络显然力不从心。那么深度模型是如何解决以上三个问题的。
第一,深度学习自动选择原始数据的特征。举一个图像的例子,将像素值矩阵输入深度网络,网络第一层表征物体的位置、边缘、亮度等初级视觉信息。第二层将边缘整合表征物体的轮廓……之后的层会表征更加抽象的信息,如猫或狗这样的抽象概念。所有特征完全在网络中自动呈现,并非出自人工设计。更重要的一点是这种随着层的深入,从具象到抽象的层级式表征跟大脑的工作原理吻合,视网膜接收图像从LGN到视皮层、颞叶皮层再到海马走的是同样的路数[2]!
第二,深度网络的学习算法。一种方法是改变网络的组织结构,比如用卷积神经网络代替全连接(full connectivity)网络,训练算法仍依据Backpropagating gradients的基本原理。另一种则是彻底改变训练算法,我尝试过的算法有Hessian-free optimization[3],recursive least-squares(RLS)等。
第三,使用带反馈和时间参数的Recurrent
neural network处理时间序列数据。从某种意义上讲,Recurrent
neural network可以在时间维度上展开成深度网络,使用(二)中的算法可以有效处理音频信息,或者用来模拟动力系统。
本人计算神经科学小博士,写些粗浅的认识,有不对的地方还请各位大神指正。
[1] http://deeplearning.cs.cmu.edu/pdfs/Cybenko.pdf
[2] Distributed Hierarchical Processing in the Primate Cerebral Cortex
[3] http://icml2010.haifa.il.ibm.com/papers/458.pdf