Machine Learning —— Why Deep?

Deep is better?

有人就认为,deep learning的表现这么好,完全就是用大量的data去硬train一个非常复杂的model而得到的结果,既然大量的data加上参数足够多的model就可以实现这个效果,那为什么一定要用DNN呢?我们完全可以用一层的shallow neural network来做同样的事情,理论上只要这一层里neuron的数目足够多,有足够的参数,就可以表示出任何函数;那DNN中deep的意义何在呢?

Fat + Short v.s. Thin + Tall

其实深和宽这两种结构的performance是会不一样的,这里我们就拿下面这两种结构的network做一下比较:

如果要给Deep和Shallow的model一个公平的评比,你就要故意调整它们的形状,让它们的参数是一样多的,在这个情况下Shallow的model就会是一个矮胖的model,Deep的model就会是一个瘦高的model

左侧表示的是deep network的情况,右侧表示的是shallow network的情况,为了保证两种情况下参数的数量是比较接近的,因此设置了右侧13772和14634这两种size大小,它们分别对应比较左侧52k和72k这两种情况下的network(注意参数数目和neuron的数目并不是等价的)

只有1层的shallow network的performance甚至都比不过很多参数比它少但层数比它多的deep network,这是为什么呢?

Modularization

introduction

DNN结构一个很大的优势是,Modularization(模块化),它用的是结构化的架构


在DNN的架构中,实际上每一层layer里的neuron都像是在解决同一个级别的任务,它们的output作为下一层layer处理更高级别任务的数据来源,低层layer里的neuron做的是对不同小特征的检测,高层layer里的neuron则根据需要挑选低层neuron所抽取出来的不同小特征,去检测一个范围更大的特征;neuron就像是一个个classifier ,后面的classifier共享前面classifier的参数

这样做的好处是,低层的neuron输出的信息可以被高层不同的neuron重复使用,而并不需要像shallow network一样,每次在用到的时候都要重新去检测一遍,因此大大降低了程序的复杂度

Example

这里举一个分类的例子,我们要把input的人物分为四类:长头发女生、长头发男生、短头发女生、短头发男生

如果按照shallow network的想法,我们分别独立地train四个classifier(其实就相当于训练四个独立的model),然后就可以解决这个分类的问题;但是这里有一个问题,长头发男生的data是比较少的,没有太多的training data,所以,你train出来的classifier就比较weak,去detect长头发男生的performance就比较差

input并不是没有关联的,长头发的男生和长头发的女生都有一个共同的特征,就是长头发,因此如果我们分别独立地训练四个model作为分类器,实际上就是忽视了这个共同特征,也就是没有高效地用到data提供的全部信息,这恰恰是shallow network的弊端

而利用modularization的思想,使用deep network的架构,我们可以训练一个model作为分类器就可以完成所有的任务,我们可以把整个任务分为两个子任务:

  • Classifier1:检测是男生或女生
  • Classifier2:检测是长头发或短头发

虽然长头发的男生data很少,但长头发的人的data就很多,经过前面几层layer的特征抽取,就可以头发的data全部都丢给Classifier2,把男生或女生的data全部都丢给Classifier1,这样就真正做到了充分、高效地利用数据,最终的Classifier再根据Classifier1和Classifier2提供的信息给出四类人的分类结果

经过层层layer的任务分解,其实每一个Classifier要做的事情都是比较简单的,又因为这种分层的、模组化的方式充分利用了data,并提高了信息利用的效率,所以只要用比较少的training data就可以把结果train好

每一个neuron其实就是一个basic的classifier:
  • 第一层neuron,它是一个最basic的classifier,检测的是颜色、线条这样的小特征
  • 第二层neuron是比较复杂的classifier,它用第一层basic的classifier的output当作input,也就是把第一层的classifier当作module,利用第一层得到的小特征分类出不同样式的花纹
  • 而第三层的neuron又把第二层的neuron当作它module,利用第二层得到的特征分类出蜂窝、轮胎、人
  • 以此类推

Speech

以语音识别为例,介绍DNN的modularization在语音领域的应用

Language basic

当你说what do you think的时候,这句话其实是由一串phoneme所组成的,所谓phoneme,中文翻成音素,它是由语言学家制订的人类发音的基本单位,what由4个phoneme组成,do由两个phoneme组成,you由两个phoneme组成,等等

同样的phoneme也可能会有不太一样的发音,当你发d uw和y uw的时候,心里想要发的都是uw,但由于人类发音器官的限制,你的phoneme发音会受到前后的phoneme所影响;所以,为了表达这一件事情,我们会给同样的phoneme不同的model,这个东西就叫做tri-phone

一个phoneme可以拆成几个state,我们通常就订成3个state

Process

语音辨识的过程其实非常复杂,这里只是讲语音辨识的第一步

首先要做的事情是把acoustic feature(声学特征)转成state,这是一个单纯的classification的problem

大致过程就是在一串wave form(声音信号)上面取一个window(通常不会取太大,比如250个mini second大小),然后用acoustic feature来描述这个window里面的特性,每隔一个时间段就取一个window,一段声音信号就会变成一串vector sequence,这个就叫做acoustic feature sequence

建一个Classifier去识别acoustic feature属于哪个state,再把state转成phoneme,然后把phoneme转成文字,接下来你还要考虑同音异字的问题…这里不会详细讲述整个过程,而是想要比较一下过去在用deep learning之前和用deep learning之后,在语音辨识上的分类模型有什么差异

Classification
传统做法

传统的方法叫做HMM-GMM

GMM,即Gaussian Mixture Model ,它假设语音里的每一个state都是相互独立的(跟前面长头发的shallow例子很像,也是假设每种情况相互独立),因此属于每个state的acoustic feature都是stationary distribution(静态分布)的,因此我们可以针对每一个state都训练一个GMM model来识别

但这个方法其实不太现实,因为要列举的model数目太多了,一般中英文都有30几、将近40个phoneme,那这边就假设是30个,而在tri-phone里面,每一个phoneme随着contest(上下文)的不同又有变化,假设tri-phone的形式是a-b-c,那总共就有303030=27000个tri-phone,而每一个tri-phone又有三个state,每一个state都要很用一个GMM来描述,那参数实在是太多了


传统处理方法是,让一些不同的state共享同样的model distribution,这件事情叫做Tied-state,其实实际操作上就把state当做pointer(指针),不同的pointer可能会指向同样的distribution,所以有一些state的distribution是共享的,具体哪些state共享distribution则是由语言学等专业知识决定

那这样的处理方法太粗糙了,所以又有人提出了subspace GMM,它里面其实就有modularization、有模块化的影子,它的想法是,我们先找一个Gaussian pool(里面包含了很多不同的Gaussian distribution),每一个state的information就是一个key,它告诉我们这个state要从Gaussian pool里面挑选哪些Gaussian出来

思考

HMM-GMM的方法,默认把所有的phone或者state都看做是无关联的,对它们分别训练independent model,这其实是不efficient的,它没有充分利用data提供的信息

对人类的声音来说,不同的phoneme都是由人类的发音器官所generate出来的,它们并不是完全无关的,下图画出了人类语言里面所有的元音,这些元音的发音其实就只受到三件事情的影响:

  • 舌头的前后位置
  • 舌头的上下位置
  • 嘴型

比如图中所标英文的5个元音a,e,i,o,u,当你发a到e到i的时候,舌头是由下往上;而i跟u,则是舌头放在前面或放在后面的差别;在图中同一个位置的元音,它们舌头的位置是一样的,只是嘴型不一样

DNN处理

如果采用deep learning的做法,就是去learn一个deep neural network,这个deep neural network的input是一个acoustic feature,它的output就是该feature属于某个state的概率,这就是一个简单的classification problem

最关键的一点是,所有的state识别任务都是用同一个DNN来完成的;值得注意的是DNN并不是因为参数多取胜的,实际上在HMM-GMM里用到的参数数量和DNN其实是差不多的,区别只是GMM用了很多很小的model ,而DNN则用了一个很大的mode

我们拿一个hidden layer出来,然后把这个layer里所有neuron的output降维到2维得到下图,每个点的颜色对应着input a,e,i,o,u,神奇的事情发生了:降维图上这5个元音的分布跟右上角元音位置图的分布几乎是一样的

因此,DNN并不是马上就去检测发音是属于哪一个phone或哪一个state,比较lower的layer会先观察人是用什么样的方式在发这个声音,人的舌头位置应该在哪里,是高是低,是前是后;接下来的layer再根据这个结果,去决定现在的发音是属于哪一个state或哪一个phone

这些lower的layer是一个人类发音方式的detector,而所有phone的检测都share这同一组detector的结果,因此最终的这些classifier是share了同一组用来detect发音方式的参数,这就做到了模块化,同一个参数被更多的地方share,因此显得更有效率

Example:剪窗花

我们之前讲过这个逻辑回归的分类问题,可能会出现下面这种linear model根本就没有办法分类的问题,而当你加了hidden layer的时候,就相当于做了一个feature transformation,把原来的x1,x2转换到另外一个平面,变成x1’、x2’

你会发现,通过这个hidden layer的转换,其实就好像把原来这个平面按照对角线对折了一样,对折后两个蓝色的点就重合在了一起,这个过程跟剪窗花很像:

  • 在做剪窗花的时候,每次把色纸对折,就相当于把原先的这个多维空间对折了一次来提高维度
  • 在某个地方戳一个洞,再把色纸打开,你折了几折,在对应的这些地方就都会有一个洞;这就相当于在折叠后的高维空间上,画斜线的部分是某一个class,不画斜线的部分是另一个class,那你在这个高维空间上的某一个点,就相当于展开后空间上的许多点,由于可以对这个空间做各种各样复杂的对折和剪裁,所以二维平面上无论多少复杂的分类情况,经过多次折叠,不同class最后都可以在一个高维空间上以比较明显的方式被分隔开来

这样做既可以解决某些情况下难以分类的问题,又能够以比较有效率的方式充分利用data

比如下面这个折纸,高维空间上的1个点等于二维空间上的5个点,相当于1笔data发挥出5笔data的作用

End-to-end Learning

introduction

所谓的End-to-end learning,指的是只给model input和output,而不告诉它中间每一个function要怎么分工,让它自己去学会知道在生产线的每一站,自己应该要做什么事情;在DNN里,就是叠一个很深的neural network,每一层layer就是生产线上的一个站

Speech Recognition

End-to-end Learning在语音识别上体现的非常明显

在传统的Speech Recognition里,只有最后GMM这个蓝色的block,才是由training data学出来的,前面绿色的生产线部分都是由过去的“五圣先贤”手动制订出来的,其实制订的这些function非常非常的强,可以说是增一分则太肥,减一分则太瘦这样子,以至于在这个阶段卡了将近20年

后来有了deep learning,我们就可以用neural network把DCT、log这些部分取代掉,甚至你从spectrogram开始都拿deep neural network取代掉,也可以得到更好的结果,如果你分析DNN的weight,它其实可以自动学到要做filter bank这件事情(filter bank是模拟人类的听觉器官所制定出来的filter)

那能不能够叠一个很深很深的neural network,input直接就是time domain上的声音信号,而output直接就是文字,中间完全不要做feature transform之类,目前的结果是,现在machine做的事情就很像是在做Fourier transform,它学到的极限也只是做到与Fourier feature transform打平而已,或许DFT已经是信号处理的极限了

处理Complex Task

如果你的network只有一层的话,就只能做简单的transform,没有办法把一样的东西变得很不一样,把不一样的东西变得很像;如果要实现这些,就需要做很多层次的转换,就像前面那个剪窗花的例子,在二维、三维空间上看起来很难辨别,但是到了高维空间就完全有可能把它们给辨别出来

这里以MNIST手写数字识别为例,展示一下DNN中,在高维空间上对这些Complex Task的处理能力

如果把28*28个pixel组成的vector投影到二维平面上就像左上角所示,你会发现4跟9的pixel几乎是叠在一起的,因为4跟9很像,都是一个圈圈再加一条线,所以如果你光看input的pixel的话,4跟9几乎是叠在一起的,你几乎没有办法把它分开

但是,等到第二个、第三个layer的output,你会发现4、7、9逐渐就被分开了,所以使用deep learning的deep,这也是其中一个理由

Conclusion

  • 考虑input之间的内在关联,所有的class用同一个model来做分类
  • modularization思想,复杂问题简单化,把检测复杂特征的大任务分割成检测简单特征的小任务
  • 所有的classifier使用同一组参数的子特征检测器,共享检测到的子特征
  • 不同的classifier会share部分的参数和data,效率高
  • 联系logic circuit和剪纸画的例子
  • 多层hidden layer对complex问题的处理上比较有优势

参考

https://sakura-gh.github.io/ML-notes/ML-notes-html/14_Why-Deep.html

Machine Learning —— Why Deep?相关推荐

  1. SCI写作【Machine learning and Deep learning】

    先写代码,后写论文 机器学习-八股文结构 重要期刊 重要会议 撰写Related work

  2. Day 5. Suicidal Ideation Detection: A Review of Machine Learning Methods and Applications综述

    Title: Suicidal Ideation Detection: A Review of Machine Learning Methods and Applications 自杀意念检测:机器学 ...

  3. 机器学习(Machine Learning)深入学习(Deep Learning)资料

    FROM:http://news.cnblogs.com/n/504467/ <Brief History of Machine Learning> 介绍:这是一篇介绍机器学习历史的文章, ...

  4. 机器学习(Machine Learning)、深度学习(Deep Learning)、NLP面试中常考到的知识点和代码实现

    网址:https://github.com/NLP-LOVE/ML-NLP 此项目是机器学习(Machine Learning).深度学习(Deep Learning).NLP面试中常考到的知识点和代 ...

  5. 台大李宏毅Machine Learning 2017Fall学习笔记 (12)Why Deep?

    台大李宏毅Machine Learning 2017Fall学习笔记 (12)Why Deep? 本博客整理自: http://blog.csdn.net/xzy_thu/article/detail ...

  6. 台大李宏毅Machine Learning 2017Fall学习笔记 (10)Tips for Deep Learning

    台大李宏毅Machine Learning 2017Fall学习笔记 (10)Tips for Deep Learning 注:本博客主要参照 http://blog.csdn.net/xzy_thu ...

  7. 台大李宏毅Machine Learning 2017Fall学习笔记 (7)Introduction of Deep Learning

    台大李宏毅Machine Learning 2017Fall学习笔记 (7)Introduction of Deep Learning 最近几年,deep learning发展的越来越快,其应用也越来 ...

  8. 机器学习(Machine Learning)深度学习(Deep Learning)资料(Chapter 2)

    机器学习(Machine Learning)&深度学习(Deep Learning)资料(Chapter 2) - tony的专栏 - 博客频道 - CSDN.NET 注:机器学习资料篇目一共 ...

  9. (2018)All-optical machine learning using diffractive deep neural networks

    "All-optical machine learning using diffractive deep neural networks",这篇Science上的文章发表于2018 ...

最新文章

  1. matlab 多维数组储存,多维数组 - MATLAB 系统中文帮助手册
  2. 网络小贷迎来最强监管,八成公司恐将面临转型或淘汰
  3. 实现类似表格内容动态滚动效果
  4. 用python画动态皮卡丘_利用Python绘制萌萌哒的皮卡丘
  5. Oracle与OpenJDK之间的区别
  6. WebRTC 中收集音视频编解码能力
  7. 《统计会犯错——如何避免数据分析中的统计陷阱》—第2章置信区间的优势
  8. Docker实践(六)部署redis
  9. 大文件上传NeatUpload简单用法
  10. 渗透测试 2 --- XSS、CSRF、文件上传、文件包含、反序列化漏洞
  11. 在串口调试助手上使用AT命名控制GPRS模块发送短信
  12. 【原创】matlab 2010的下载和安装
  13. 【推荐】网络安全学习路线和资料分享
  14. Linux下PCIE设备分析软件
  15. Ambiguous mapping(模糊映射)
  16. 搞懂特征值与特征向量
  17. wdcp虚拟主机管理系统注入漏洞
  18. ESP8266-NodeMCU项目(四):将上一项目的空调控制接入小爱同学(Blinker_APP同步控制+DHT11温湿度模块数据接入)
  19. Linkflow新锐洞察 06 | DTC品牌如何快速规模化?
  20. 【收藏】什么是 UCIe?

热门文章

  1. 英语词性系列-B02-动词
  2. 爬虫必备Beautiful Soup包使用详解
  3. python 实现并行计算加快速度
  4. mybatis异步操作数据库
  5. React——返回顶部
  6. linux w3m编译过的,yum安装w3m问题 - 优秀的Free OS(Linux)版 - 北大未名BBS
  7. java crash dump_java crash分析
  8. <微机原理>[汇编语言]-[实验五] 定时器实验
  9. 单片机学习之伟福编译器
  10. 中职计算机网络期末试题,中职计算机网络期末试题及答案.doc