当前位置: 首页 > news >正文

【转】Deep Learning(深度学习)学习笔记整理系列之(二)

       因为我们要学习的是特征的表达,那么关于特征,或者说关于这个层级特征,我们需要了解地更深入点。所以在说Deep Learning之前,我们有必要再啰嗦下特征(呵呵,实际上是看到那么好的对特征的解释,不放在这里有点可惜,所以就塞到这了)。

 

四、关于特征

        特征是机器学习系统的原材料,对最终模型的影响是毋庸置疑的。如果数据被很好的表达成了特征,通常线性模型就能达到满意的精度。那对于特征,我们需要考虑什么呢?

4.1、特征表示的粒度

        学习算法在一个什么粒度上的特征表示,才有能发挥作用?就一个图片来说,像素级的特征根本没有价值。例如下面的摩托车,从像素级别,根本得不到任何信息, 其无法进行摩托车和非摩托车的区分。而如果特征是一个具有结构性(或者说有含义)的时候,比如是否具有车把手(handle),是否具有车轮 (wheel),就很容易把摩托车和非摩托车区分,学习算法才能发挥作用。

 

 

 

4.2、初级(浅层)特征表示

        既然像素级的特征表示方法没有作用,那怎样的表示才有用呢?

        1995 年前后,Bruno Olshausen和 David Field 两位学者任职 Cornell University,他们试图同时用生理学和计算机的手段,双管齐下,研究视觉问题。

        他们收集了很多黑白风景照片,从这些照片中,提取出400个小碎片,每个照片碎片的尺寸均为 16x16 像素,不妨把这400个碎片标记为 S[i], i = 0,.. 399。接下来,再从这些黑白风景照片中,随机提取另一个碎片,尺寸也是 16x16 像素,不妨把这个碎片标记为 T。

        他们提出的问题是,如何从这400个碎片中,选取一组碎片,S[k], 通过叠加的办法,合成出一个新的碎片,而这个新的碎片,应当与随机选择的目标碎片 T,尽可能相似,同时,S[k] 的数量尽可能少。用数学的语言来描述,就是:

        Sum_k (a[k] * S[k]) --> T,     其中 a[k] 是在叠加碎片 S[k] 时的权重系数。

        为解决这个问题,Bruno Olshausen和 David Field 发明了一个算法,稀疏编码(Sparse Coding)。

        稀疏编码是一个重复迭代的过程,每次迭代分两步:

1)选择一组 S[k],然后调整 a[k],使得Sum_k (a[k] * S[k]) 最接近 T。

2)固定住 a[k],在 400 个碎片中,选择其它更合适的碎片S’[k],替代原先的 S[k],使得Sum_k (a[k] * S’[k]) 最接近 T。

        经过几次迭代后,最佳的 S[k] 组合,被遴选出来了。令人惊奇的是,被选中的 S[k],基本上都是照片上不同物体的边缘线,这些线段形状相似,区别在于方向。

        Bruno Olshausen和 David Field 的算法结果,与 David Hubel 和Torsten Wiesel 的生理发现,不谋而合!

        也就是说,复杂图形,往往由一些基本结构组成。比如下图:一个图可以通过用64种正交的edges(可以理解成正交的基本结构)来线性表示。比如样例的x 可以用1-64个edges中的三个按照0.8,0.3,0.5的权重调和而成。而其他基本edge没有贡献,因此均为0 。

 

        另外,大牛们还发现,不仅图像存在这个规律,声音也存在。他们从未标注的声音中发现了20种基本的声音结构,其余的声音可以由这20种基本结构合成。

 

 

 

4.3、结构性特征表示

        小块的图形可以由基本edge构成,更结构化,更复杂的,具有概念性的图形如何表示呢?这就需要更高层次的特征表示,比如V2,V4。因此V1看像素级是 像素级。V2看V1是像素级,这个是层次递进的,高层表达由底层表达的组合而成。专业点说就是基basis。V1取提出的basis是边缘,然后V2层是 V1层这些basis的组合,这时候V2区得到的又是高一层的basis。即上一层的basis组合的结果,上上层又是上一层的组合basis……(所以 有大牛说Deep learning就是“搞基”,因为难听,所以美其名曰Deep learning或者Unsupervised Feature Learning)

 

        直观上说,就是找到make sense的小patch再将其进行combine,就得到了上一层的feature,递归地向上learning feature。

        在不同object上做training是,所得的edge basis 是非常相似的,但object parts和models 就会completely different了(那咱们分辨car或者face是不是容易多了):

 

        从文本来说,一个doc表示什么意思?我们描述一件事情,用什么来表示比较合适?用一个一个字嘛,我看不是,字就是像素级别了,起码应该是term,换句 话说每个doc都由term构成,但这样表示概念的能力就够了嘛,可能也不够,需要再上一步,达到topic级,有了topic,再到doc就合理。但每 个层次的数量差距很大,比如doc表示的概念->topic(千-万量级)->term(10万量级)->word(百万量级)。

        一个人在看一个doc的时候,眼睛看到的是word,由这些word在大脑里自动切词形成term,在按照概念组织的方式,先验的学习,得到topic,然后再进行高层次的learning。

 

4.4、需要有多少个特征?

       我们知道需要层次的特征构建,由浅入深,但每一层该有多少个特征呢?

任何一种方法,特征越多,给出的参考信息就越多,准确性会得到提升。但特征多意味着计算复杂,探索的空间大,可以用来训练的数据在每个特征上就会稀疏,都会带来各种问题,并不一定特征越多越好。

 

 

      

       好了,到了这一步,终于可以聊到Deep learning了。上面我们聊到为什么会有Deep learning(让机器自动学习良好的特征,而免去人工选取过程。还有参考人的分层视觉处理系统),我们得到一个结论就是Deep learning需要多层来获得更抽象的特征表达。那么多少层才合适呢?用什么架构来建模呢?怎么进行非监督训练呢?

相关文章:

  • 引用与指针的区别
  • 劣质代码评析——《写给大家看的C语言书(第2版)》附录B之21点程序(三)
  • Android 百度地图定位(手动+自动)
  • Swing的Look And Feel机制研究
  • html Ie 6,7,8 a超链带灰底
  • iMatrix平台核心功能——工作流管理介绍
  • 缓存、缓存算法和缓存框架简介
  • 【学习笔记10】Linux常用命令7 - 网络通信、系统关机
  • SetFileAttributes
  • “与客户的一次沟通”的所思、所虑、所得
  • Delphi Listveiw用法大全
  • apache日志存放位置(转)
  • Centos和RHEL的区别
  • Cacti监控tomcat的方法
  • clean code meaningful names
  • 网络传输文件的问题
  • [nginx文档翻译系列] 控制nginx
  • 2017 年终总结 —— 在路上
  • canvas 高仿 Apple Watch 表盘
  • centos安装java运行环境jdk+tomcat
  • CSS进阶篇--用CSS开启硬件加速来提高网站性能
  • Cumulo 的 ClojureScript 模块已经成型
  • javascript 哈希表
  • Java-详解HashMap
  • js对象的深浅拷贝
  • maya建模与骨骼动画快速实现人工鱼
  • PHP 程序员也能做的 Java 开发 30分钟使用 netty 轻松打造一个高性能 websocket 服务...
  • QQ浏览器x5内核的兼容性问题
  • XForms - 更强大的Form
  • Zsh 开发指南(第十四篇 文件读写)
  • 订阅Forge Viewer所有的事件
  • 短视频宝贝=慢?阿里巴巴工程师这样秒开短视频
  • 对象管理器(defineProperty)学习笔记
  • 近期前端发展计划
  • 开源SQL-on-Hadoop系统一览
  • 如何选择开源的机器学习框架?
  • 用jquery写贪吃蛇
  • 原创:新手布局福音!微信小程序使用flex的一些基础样式属性(一)
  • 继 XDL 之后,阿里妈妈开源大规模分布式图表征学习框架 Euler ...
  • ​Linux Ubuntu环境下使用docker构建spark运行环境(超级详细)
  • # Swust 12th acm 邀请赛# [ A ] A+B problem [题解]
  • #单片机(TB6600驱动42步进电机)
  • $.ajax()
  • $分析了六十多年间100万字的政府工作报告,我看到了这样的变迁
  • (07)Hive——窗口函数详解
  • (八)光盘的挂载与解挂、挂载CentOS镜像、rpm安装软件详细学习笔记
  • (多级缓存)缓存同步
  • (附源码)php投票系统 毕业设计 121500
  • (三)uboot源码分析
  • (一)Mocha源码阅读: 项目结构及命令行启动
  • (原)记一次CentOS7 磁盘空间大小异常的解决过程
  • (转)Linux整合apache和tomcat构建Web服务器
  • (自用)learnOpenGL学习总结-高级OpenGL-抗锯齿
  • (最完美)小米手机6X的Usb调试模式在哪里打开的流程
  • .Net 知识杂记