有这么一个理论:
任何连续函数都可以用一层的神经网络表示
对,但是效率不见得高啊,所以需要研究深度神经网络DNN!
越深的网络可以得到更好的表现,因为参数更多了。
但是,参数多可以纵向发展,变得更深,也能横向发展,变得更胖。那么在相同参数下,细长的网络更好,还是矮胖的模型更好呢?
有人做了实验:
结论就是相同参数(神经元不一样相等)情况下,层数更多的网络,效果更好。下面就是解释这个。
模块化
写代码经常做到就是模块化,把各个函数按功能性质划分成不同模块,比如数学模块、文件操作模块、网络模块、助手模块等等。而每个模块下又有更具体的划分成不同函数。
图像分类
那么对图像分类的任务(其中,长发男生数据是比较少的,所以在训练的时候对于该项的参数就比较弱):
类比编程写代码,我们也可以把分类看做是模块化任务。这里的模块划分依据就是特征性质:
有以下模块:
- 检测性别模块
- 检测长短发模块
这样做的好处就是:长短发训练集数据量是差不多的,男女生训练数据量是差不多的。所以充分发挥训练数据对参数的更新。
然后训练就变成:
前面一层已经区分了性别和头发(复杂的任务),后面的一层,就算数据量少,但也可训练好了。
这里有个观念:深度学习恰恰是减少了训练所需参数
每层的模块化:
语音识别
Phoneme:音素/音标
Tri-phone:音标根据上下文会有不同发音
State:Tri-phone还有状态
acoustic feature → state → phoneme → word
每取一个窗口,产生acoustic feature,然后根据acoustic feature输出state
传统做法Gaussian Mixture Model (GMM)
每个state是关于acoustic feature的固定分布,那么就会有分布太多的问题:
而后就有改进,减少分布数量(共用分布,共用基础特征,联系编程共用基础函数),称为subsapce GMM,也提现了模块化思想。
DNN做法
相比GMM,参数是差不多的(GMM每个分布里面的参数也是很多的),但是DNN把这么多参数放在一个model里,更有效。
解释这个现象还是拿实验说话:
一个DNN其中一个隐藏层output降成2维,如上图,可以发现它和人类嘴型发音规律一样
就是说DNN先学到了发音的嘴型规律,然后再区分state
其他
剩下根据电路和剪纸解释深度的含义,这里简单解释下。
电路
多层的逻辑门产生的电路更精简,这也是为什么要用与非门作为基本门,而不是使用与门,非门,或门,这种一层的结构。类别到神经网络就是多层的结构,神经元就能更精简的去表示函数。
剪纸
剪纸没折一次就看做神经网络多加一层,当折了很多次后,在一个地方剪一刀,实际上在剪纸上产生了多处效果。
在神经网络上的含义就是,使得数据更有效。
这两个例子都提到使得所需数据更少
End-to-end Learning
看做生产线,中间有多个步骤,最后输出产品。
早期语音识别前面要有很多手工提取步骤,全部换成神经网络
就变成深度学习网络了。
图像领域也是,早期手工抽取特征:
换成深度学习
也就是说,手动取特征部分换成神经网络来学习,而更有效的自动提取特征就是CNN,通过卷积方式学习filter来自动取特征。
下面两个例子,说明了越深的网络可以区分的越细,也就是说越深的网络,得到的语义越深。
语音识别
数字识别
DNN YES!
http://research.microsoft.com/apps/video/default.aspx?id= 232373&r=1
以上参考李宏毅老师视频和ppt,仅作为学习笔记交流使用