上一篇文章提到了数据挖掘、机器学习、深度学习的区别:http://www.cnblogs.com/charlesblc/p/6159355.html

深度学习具体的内容可以看这里:

参考了这篇文章:https://zhuanlan.zhihu.com/p/20582907?refer=wangchuan  《王川: 深度学习有多深, 学了究竟有几分? (一)》
笔记:神经网络的研究,因为人工智能的一位大牛Marvin Minsky的不看好,并且出书说明其局限性,而出现二十年的长期低潮。
 
在系列里面,能找到全部文章:https://zhuanlan.zhihu.com/wangchuan
他的公众号的文章也挺好的,可以看:Link
 
 
笔记: 分布式表征 (Distributed Representation), 是神经网络研究的一个核心思想.    
它的意思是,当你表达一个概念的时候,不是用单个神经元,一对一地存储定义; 概念和神经元是多对多的关系: 一个概念可以用多个神经元共同定义表达, 同时一个神经元也可以参与多个不同概念的表达.

举个最简单的例子, 一辆 "大白卡车",如果分布式地表达,一个神经元代表大小,一个神经元代表颜色,第三个神经元代表车的类别. 三个神经元同时激活时,就可以准确描述我们要表达的物体.

分布式表征,和传统的 局部表征 (localized representation) 相比,存储效率高很多. 线性增加的神经元数目,可以表达指数级增加的大量不同概念.

分布式表征的另一个优点是,即使局部出现硬件故障,信息的表达不会受到根本性的破坏.

这个理念让 Geoffrey Hinton 顿悟, 使他四十多年来, 一直在神经网络研究的领域里坚持下来没有退缩.

神经网络的一代鼻祖是多伦多大学的Geoffrey Hinton。 Geoffrey Hinton和吴恩达一起在Google搞深度学习 (Google Brain Project).

 
来一张图吧,来自https://www.zhihu.com/question/27177122
 

从左至右:

Yann LeCun :卷积神经网络,参考http://www.leiphone.com/news/201406/deep-learning-yann-lecun-facebook.html
Geoffrey Hinton :深度学习鼻祖
Yoshua Bengio :也是深度学习,(深而稀疏的修正神经网络)
Andrew Ng :Hinton的合作伙伴

都是深度学习相关的,也可以看这篇文章:Link《Yann LeCun、Geoffrey Hinton或Yoshua Bengio能得图灵奖吗?》

这几个人还有错综复杂的关系:
 

神经网络当年被 Minsky 诟病的问题之一是巨大的计算量.

简单说,传统的感知器用所谓 "梯度下降"的算法纠错时,耗费的计算量,和神经元数目的平方成正比. 当神经元数目增多,庞大的计算量,是当时的硬件无法胜任的.

1986年七月, Hinton 和 David Rumelhart 合作在自然杂志上发表论文, "Learning Representations by Back-propagating errors", 第一次系统简洁地阐述,反向传播算法在神经网络模型上的应用.

反向传播算法,把纠错的运算量, 下降到只和神经元数目本身成正比.

反向传播算法,通过在神经网络里增加一个所谓隐层 (hidden layer), 同时也解决了感知器无法解决异或门 (XOR gate) 的难题.

(3)
Yann Lecun (我给他取个中文名叫 "严乐春"吧) 1960年出生于巴黎. 1987年在法国获得博士学位后,他曾追随 Hinton 教授到多伦多大学做了一年博士后的工作, 随后搬到新泽西州的贝尔实验室继续研究工作.  
 

(4)

Vladmir Vapnik, 1936年出生于前苏联, 90年移民到美国,在贝尔实验室做研究.

早在1963年, Vapnik 就提出了 支持向量机 (Support Vector Machine) 的算法.支持向量机, 是一种精巧的分类算法.

除了基本的线性分类外,在数据样本线性不可分的时候, SVM 使用所谓 "核机制" (kernel trick) 的非线性映射算法, 将线性不可分的样本转化到高维特征空间 (high-dimensional feature space),使其线性可分.

SVM, 作为一种分类算法,九十年代初开始, 在图像和语音识别上,找到了广泛的用途.

在贝尔实验室的走廊上,严乐春和 Vapnik 常常就(深度)神经网络和 SVM,两种技术的优缺点,展开热烈的讨论.

Vapnik 的观点是, SVM,非常精巧地在 "容量调节" (Capacity Control)上 选择一个合适的平衡点, 而这是神经网络不擅长的.

什么是 "容量调节"? 举个简单的例子: 如果算法容量太大,就像一个记忆力极为精准的植物学家, 当她看到一颗新的树的时候,由于这棵树的叶子和她以前看到的树的叶子数目不一样,所以她判断这不是树; 如果算法容量太小,就像一个懒惰的植物学家,只要看到绿色的东西,都把它叫做树.

在手写邮政编码的识别问题上, SVM 的技术不断进步,1998年就把错误率降到低于 0.8%,2002年最低达到了 0.56%, 这远远超越同期传统神经网络算法的表现.

神经网络的计算,在实践中还有另外两个主要问题:

第一, 算法经常停止于局部最优解,而不是全球最优解. 这好比"只见树木,不见森林".

第二, 算法的培训,时间过长时,会出现过度拟合 (overfit),把噪音当做有效信号.

第三篇:

https://zhuanlan.zhihu.com/p/20613630?refer=wangchuan
 
 

When in doubt, use brute force.
"如果遇到困惑(的问题), 就使用蛮力. "

此话出自当年 UNIX 系统的发明人之一 Ken Thompson. 他的本意是, 程序设计中,简单粗暴的计算方法, 虽然可能计算量大, 但是便于实现和维护, 长期看, 还是优于一些精巧但是复杂的计算手段.

这句话常令我遐想起 1943年七月, 苏联和德国在库尔斯克的坦克大决战. 苏军八千多辆傻大黑粗的T-34 坦克, 以损失三倍于对手的惨重代价, 最终挫败德军三千多辆质量精良的虎式坦克集群.

有哲人对蛮力有另外一个诠释: "Quantity is Quality".

数量就是质量. 向数量要质量.

量变引起质变。

(2)

这个蛮力的基础,其实在1993年就埋下了种子.

黄仁勋, 1963年出生于台湾. 1993年从斯坦福大学硕士毕业后不久,创立了 Nvidia.

Nvidia 起家时,做的是图像处理的芯片,主要面对电脑游戏市场. 1999 年Nvidia推销自己的 Geforce 256 芯片时, 发明了 GPU (Graphics Processing Unit, 图像处理器)这个名词.

GPU 的主要任务, 是要在最短时间内显示上百万,千万甚至更多的像素.这在电脑游戏中是最核心的需求. 这个计算工作的核心特点, 是要同时并行处理海量的数据.

GPU 在芯片层面的设计时, 专门优化系统, 用于处理大规模并行计算.

传统的 CPU (中央处理器) 芯片架构, 关注点不在并行处理, 一次只能同时做一两个加减法运算. 而GPU 在最底层的算术逻辑单元 (ALU, Arithmetic Logic Unit), 是基于所谓的 Single Instruction Multiple Data ( 单指令多数据流)的架构,擅长对于大批量数据并行处理.

SIMD可以参考:

http://blog.csdn.net/conowen/article/details/7256260

CPU一般是MIMD,因为是多核。
多核CPU硬件结构:多核CPU是将多个CPU核集成到单个芯片中,每个CPU核都是一个单独的处理器。每个CPU核可以有自己单独的Cache,也可以多个CPU核共享同一Cache。下图便是一个不共享Cache的双核CPU体系结构。
 
 

在现代的多核硬件结构中,内存对多个CPU核是共享的,CPU核一般都是对称的,因此多核属于共享存储的对称多处理器(Symmetric Multi-processor,SMP)。

在多核硬件结构中,如果要充分发挥硬件的性能,必须要采用多线程(或多进程)执行,使得每个CPU核在同一时刻都有线程在执行。

和单核上的多线程不同,多核上的多个线程是在物理上并行执行的,是一种真正意义上的并行执行,在同一时刻有多个线程在并行执行。而单核上的多线程是一种多线程交错执行,实际上在同一时刻只有一个线程在执行。

继续回到GPU和神经网络

打个最简单的比方, 如果有 1, 2, 3, .. 32 个数字, 你需要对它们进行计算处理. 传统的 CPU , 32 个数字要一个个按顺序依次计算.

但是 GPU 在最低层的ALU, 允许同时对 32个数字做批量处理.

一个 GPU, 往往包含几百个 ALU, 并行计算能力极高. 所以尽管 GPU 内核的时钟速度往往比 CPU的还要慢, 但对大规模并行处理的计算工作, 速度比 CPU 快许多.


而神经网络的计算工作, 本质上就是大量的矩阵计算的操作, 因此特别适合于使用 GPU.
(3)

这个速度有多快呢? Nvidia 480 GPU, 2010年的时候, 一秒钟可以显示十六亿个三角形, 一秒钟计算速度达 1.3 TFLOPS (万亿次浮点计算).

而2015年出品的 Nvidia Titan X GPU, 一秒钟可以达到 6.1 TFLOPS , 接近2010年的五倍. 其二手货的市价不到一千美元.

作为参照,人类的超级计算机,真正第一次突破一个 TFLOPS 的计算速度, 实际上也就是1996年底, 但其价格是几百万美元量级的.

2007年 Nvidia 推出名叫 CUDA 的并行计算软件开发接口, 使开发者可以更方便的使用其 GPU开发应用软件. 多家大学的研究者撰文表示, 对于特定工作, NVIDIA GPU带来的相对于 Intel 的CPU 的计算速度提高, 达到 100-300 倍.

Intel 技术人员2010年专门发表文章驳斥,大意是 Nvidia 实际上只比 intel 快 14倍,而不是传说中的 100 倍.

Nvidia 的 Andy Keane 评论: "老夫在芯片行业混了 26年了, 从没见过一个竞争对手, 在重要的行业会议上站起来宣布, 你的技术 *** 只是 *** 比他们快14 倍".

第四篇:

https://zhuanlan.zhihu.com/p/20648119?refer=wangchuan

九十年代末, 神经网络研究遇到的困境,除了慢,还是慢.

抛开计算速度的因素,传统神经网络的反向传播算法,捉虫时极为困难,一个根本的问题叫做所谓 vanishing gradient problem (梯度消失问题).

这个问题在1991年, 被德国学者 Sepp Hochreiter第一次清晰提出和阐明原因.

简单的说, 就是成本函数 (cost function)从输出层反向传播时, 每经过一层,梯度衰减速度极快, 学习速度变得极慢, 神经网络很容易停滞于局部最优解而无法自拔.

这就像原始部落的小混混,山中无老虎时,在本地称王称霸很舒服. 但任何关于"外面的世界很精彩"的信息, 在落后的层层传播机制中被噪音混淆淹没了. 

小混混一辈子很开心, 没有意识到外面的世界有多大, 也从未想出去多看看.

支持向量机 (SVM) 技术在图像和语音识别方面的成功, 使得神经网络的研究重新陷入低潮.

SVM 理论上更加严谨完备, 结果重复性好, 上手简单, 得到主流学术界的追捧.

加拿大先进研究院 (Canadan Institue oF Advanced Research, 简称 CIFAR) 的基金管理负责人, Silverman 问大家,为什么 CIFAR 要支持他们的研究项目.

计算神经科学研究者, Sebastian Sung (现为普林斯顿大学教授), 回答道, "喔, 因为我们有点古怪. 如果CIFAR 要跳出自己的舒适区,寻找一个高风险,极具探索性的团体,就应当资助我们了!"

最终 CIFAR 同意从2004年开始资助这个团体十年,总额一千万加元. CIFAR 成为当时, 世界上唯一支持神经网络研究的机构.

 

Hinton 拿到资金支持不久,做的第一件事,就是先换个牌坊.

两千多年前的刘三, 改了名换了姓, 叫什么 "汉高祖". 鉴于"神经网络"口碑不好,也被 Hinton 改了名, 换了姓, 叫 "深度学习" (Deep Learning) 了.

Hinton 的同事, 此后时不时会听到他突然在办公室大叫, "我知道人脑是如何工作的了!".

(3)

2006年, Hinton 和合作者发表论文, "A fast algorithm for deep belief nets" (深信度网络的一种快速算法).

在这篇论文里, Hinton 在算法上的核心,是借用了统计力学里的"玻尔兹曼分布"的概念 (一个微粒在某个状态的几率,和那个状态的能量的指数成反比, 和它的温度的倒数之指数成反比), 使用所谓的"限制玻尔兹曼机" (RBM)来学习.

RBM 引入了统计力学常用的概率工具. 而在七十年代, 概率和不确定性恰恰是主流的人工智能的研究者极为痛恨的.

RBM 相当于一个两层网络,同一层神经元之间不可连接 (所以叫 "限制"), 可以对神经网络实现"没有监督的训练" (unsupervised training). 深信度网络就是几层 RBM 叠加在一起.

略掉技术细节, RBM 可以从输入数据中进行预先训练, 自己寻找发现重要的特征, 对神经网络连接的权重进行有效的初始化. 这属于一种叫做特征提取器 (feature extractor)的神经网络, 也称自动编码器 (autoencoder).

经过 RBM 预先训练初始化后的神经网络,再用反向传播算法微调,效果就好多了.

Hinton 后来指出, 深度学习的突破,除了计算蛮力的大幅度提高以外,聪明有效地对网络链接权重的初始化也是一个重要原因.

Hinton 的论文里,经过六万个MNIST 数据库的图像培训后, 对于一万个测试图像的识别错误率最低降到了只有 1.25%.

虽然这还不足以让主流学术界改变观点,但深度学习的发展已经见到一丝曙光.

第五篇:

https://zhuanlan.zhihu.com/p/20648125?refer=wangchuan
 

(1)

主流学术界的研究者,大多注重于在算法上的渐进式提高, 而轻视计算速度和用于训练的数据规模的重要性.

孔丘老师早在两千多年前, 就高瞻远瞩的为深度学习指明了方向: "学而不思则罔, 思而不学则殆".

用深度学习的语言来说,就是, "光有大数据,算得不快,则还是迷惘 ; 光算得快, 而没有大量的数据来训练,则还是疲倦无所得".

2007年之前, 用GPU编程,缺乏一个简单的软件接口. 编程繁琐,捉虫困难.这在 07年 Nvidia 推出 CUDA 的GPU 软件接口后才真正改善.

2009年六月, 斯坦福大学的 Rajat Raina 和吴恩达合作发表论文, "用GPU大规模无监督深度学习" ("Large-scale Deep Unsupervised Learning using Graphic Processors).

论文模型里的参数总数 (就是各层不同神经元之间链接的总数),达到一亿,与之相比, Hinton 2006年的论文里用到的参数数目,只有一百七十万.

论文结果显示,使用GPU运行速度和用传统双核CPU相比, 最快时要快近七十倍. 在一个四层, 一亿个参数的深信度网络上,使用GPU把程序运行时间从几周降到一天. 

另一个关键点是:

把训练神经网络的图像,刻意通过旋转, 放大缩小和弹性形变等方式进行改变.这样用于训练的图像数目大大增加. 使用 GPU后,改变六万张训练图像的计算速度从93秒降到了9秒钟, 快了十倍. 不断用计算变形实现的图像, 等价于一个数量无限的训练数据库.

论文结果显示,一个六层, 拥有一千两百万个参数的神经网络模型,经过两个小时的训练后,在测试图像上的错误率就降到1%. 经过114个小时训练后,模型的测试错误率更是降到了 0.35%.

 

(3)

2012 年还在斯坦福大学做研究生的黎越国同学 (Quoc Viet Le) 领衔, 和他的导师吴恩达,以及众多谷歌的科学家联合发表论文, "用大规模无监督学习建造高层次特征" (Building High-level Features Using Large Scale Unsupervised Learning).

黎越国的文章中, 使用了九层神经网络,网络的参数数量高达十亿, 是 Ciresan 2010年论文中的模型的一百倍, 是 2009年Raina 论文模型的十倍.

作为参照,按照丹麦学者 Bente Pakkenberg 2003年的估算, 人的脑皮层 (Neocortex) 内就有接近一百五十万亿个神经元突触 (Synapse, 是连接神经元传递信号的结构), 是黎同学的模型参数数量的十万倍.

(注:意味着神经元达到人脑的数量,就达到了人类的智慧?)

 

用于训练这个神经网络的图像, 都是从谷歌的录像网站 youtube 上截屏获得. 一千万个原始录像, 每个录像只截取一张图片, 每张图片有四万个像素, 与之相比,先前大部分论文使用的训练图像,原始图像的数目大多在十万以下, 图片的像素大多不到一千.

黎越国的计算模型分布式地在一千台机器 (每台机器有 16个CPU内核)上运行,花了三天三夜才完成培训.

经过培训的神经网络,在一个名叫 ImageNet 的共享图像数据库里,面对两万两千个不同类别,一千四百万个图像中, 分类识别的正确率达到了 15.8%. 而在此之前最好的公开发表的模型,正确率只有 9.3%.

深度学习的研究进步在加速,但要说服更多的主流的人工智能研究者加入,需要的是更多的, 可直接对比的, 大幅领先的, 无可辩驳的计算结果。

第6篇:

https://zhuanlan.zhihu.com/p/20648133?refer=wangchuan
 

计算速度和数据规模的大幅度提高,也引导出更多算法上的改进.

在网络构架上,一些算法更多地借鉴人脑认知的成功经验: 多提高效率, 少做无用功. 多闭目养神,少乱说乱动. 多关注主要矛盾, 少关心细枝末节.

2003年纽约大学神经科学中心的 Peter Lennie 在论文中指出,人脑的神经元,一般最多 1-4%的比例, 可以同时处于激活状态. 比例更高时, 大脑则无法提供相应的能量需求.

最典型的传统激励函数,sigmoid function, 输出值在 0 和 1 之间, 也就意味着神经元平均下来, 每时每刻都在使用一半的力量.

 
 
这种高强度能量需求,对于普通生物体而言,是无法持续的.

鳄鱼90%的时间是一动不动的, (一个近距离观察者常会把它误认为是石雕.) 剩下5%的时间用于求偶交配, 5%的时间用于觅食.

 

鳄鱼的低能耗绿色生活方式,使它成为两栖动物界的寿星.虽然野生鳄鱼的平均寿命缺乏严格科学的统计,但是被捕获后人工饲养的鳄鱼中,有不少个体,记录在案的寿命超过了七十岁.

(2)

2011 年, 加拿大的蒙特利尔大学学者 Xavier Glorot 和 Yoshua Bengio 发表论文, "Deep Sparse Rectifier Neural Networks". (深而稀疏的修正神经网络).

论文的算法中使用一种称为"修正线性单元" (REctified Linear Unit, 又称 RELU) 的激励函数. 用数学公式表达: rectifier (x) = max (0, x ).

RELU 的优势还有下面三点:

  1. 传统的激励函数,计算时要用指数或者三角函数,计算量要比简单的RELU 至少高两个数量级.

  2. RELU 的导数是常数, 非零即一, 不存在传统激励函数在反向传播计算中的"梯度消失问题".

  3. 由于统计上,约一半的神经元在计算过程中输出为零,使用 RELU 的模型计算效率更高,而且自然而然的形成了所谓 "稀疏表征" (sparse representation), 用少量的神经元可以高效, 灵活,稳健地表达抽象复杂的概念.

第七篇

https://zhuanlan.zhihu.com/p/20660406?refer=wangchuan

神经网络计算, 另一个常为人诟病的问题,是过度拟合 (overfitting).

过拟合概念可见:https://www.zhihu.com/question/32246256?sort=created

所谓过拟合,也就是说机器学习的太好了,把一些不太一般的特性都学习到了。

一个拥有大量自由参数的模型,很容易通过调试,和训练数据吻合.但这并不意味着,这就是个好模型.

美国数学家冯纽曼 (John Von Neumann) 曾说, "给我四个参数,我的模型可以拟合一个大象. 给我五个参数, 我可以让它扭动它的鼻子."

神经网络模型的自由参数,现在往往超过一亿.如果说四个参数可以拟合一个大象的话,对于全世界总数不到一百万的大象来说,实在是游刃有余.

一个模型好坏的试金石,不在于和现有数据的拟合度, 而在于它是否可以在全新的情况和数据面前,做出正确的判断和预测.

解决这个问题的算法上的革新, 启迪又是来自生物界,来自有性繁殖和无性繁殖的对比.

爱尔兰著名哲学家和诗人,奥斯卡*王尔德 (Oscar Wilde)先生曾有名言, "世界上所有东西都是关于性. 除了性本身" (Everything in the world is about sex. Except sex).

直觉上,有性繁殖是为了生物进化,适应环境. 但是如果一个已经非常健康的个体, 为什么还要通过有性繁殖, 抛弃掉自己一半的优秀基因,去和另外一个个体合作, 制造下一代呢?

无性生殖的优点是节能省时,无须浪费时间求偶交配.但致命的弱点是,基因没有任何变化,遗传病很容易被传播到下一代,进而降低生存的概率.

加州大学伯克利分校学者 Adi Livnat 在2007年的论文, "关于性在进化中的角色的混合能力理论 "(A mixability theory of the role of sex in evolution )中通过模拟计算得出下述结论:

性在生物进化中的目的,不是制造适合某个单一环境的, 最优秀的个体基因,而是为了制造最容易和其它多种基因合作的基因,这样在多变的外界环境下,总有一款可以生存延续下来.

优秀个体在有性繁殖中,虽然损失了一半的基因,短期内看上去不是好事.但是长期看,生物组织整体的存活能力,更加稳健强大.

2012年七月, Hinton 教授发表论文, "通过阻止特征检测器的共同作用来改进神经网络" (Improving neural networks by preventing co-adaptation of feature detectors).

论文中为了解决过度拟合的问题,采用了一种新的称为"丢弃" (Dropout) 的算法.

丢弃算法的具体实施,是在每次培训中, 给每个神经元一定的几率 (比如 50%),假装它不存在,计算中忽略不计.

使用丢弃算法的神经网络,被强迫用不同的,独立的,神经元的子集来接受学习训练. 这样网络更强健,避免了过度拟合的死胡同,不会因为外在输入的很小变化,导致输出质量的很大差异.

论文结果显示,使用丢弃算法后, 在诸如 MINST, TIMID, CIFAR-10 等多个经典语音和图像识别的问题中, 神经网络在测试数据中的错误率, 相对于经典的深度学习算法,都获得了可观的进步 (错误率下降了 10% 到 30% 不等).

深度学习的技术,此时有了

1. GPU快捷的计算速度,

2. 海量的训练数据,

3. 更多新的聪明的算法.

条件已经成熟, 该用实验结果,证明自己相对别的技术,无可辩驳的优越性了.

第八篇:

https://zhuanlan.zhihu.com/p/20671732?refer=wangchuan

2009年, 一群在普林斯顿大学计算机系的华人学者, (第一作者为 Jia Deng )发表了论文 "ImageNet: A large scale hierarchical image database), 宣布建立了第一个超大型图像数据库,供计算机视觉研究者使用.
这个数据库建立之初,包含了三百二十万个图像. 它的目的, 是要把英文里的八万个名词,每个词收集五百到一千个高清图片,存放到数据库里.最终达到五千万以上的图像.
2010 年,以 ImageNet 为基础的大型图像识别竞赛, ImageNet Large Scale Visual Recognition Challenge 2010 (ILSVRC2010) 第一次举办.
 
2010年,SVM获胜,错误率28%.
2011年竞赛的冠军, 用所谓 Fisher Vector 的计算方法 (和支持向量机技术类似), 将错误率降到了 25.7%. 
2012年,Hinton 教授和他的两个研究生 Alex Krizhevsky, Illya Sutskever 将深度学习的最新技术用到 ImageNet 的问题上.

经过训练的模型,面对十五万个测试图像时,预测的头五个类别的错误率只有 15.3%, 在2012年 ImageNet 的竞赛, 三十个团队的测试结果中, 稳居第一.排名第二的来自日本团队的模型,相应的错误率则高达 26.2%.

ImageNet 竞赛结果的公布, 对于深度学习, 对于人工智能, 对于人类的未来, 也许可用丘吉尔的一句话总结:

"这不是结尾. 这连结尾的开头都算不上. 但, 这也许是,开头的结尾."

(Now this is not the end. It is not even the beginning of the end. But it is, perhaps, the end of the beginning.)

第九篇

https://zhuanlan.zhihu.com/p/20761575?refer=wangchuan

2012年神经网络模型在ImageNet 竞赛中的突破,引起了工业界强大的兴趣.

Hinton 教授和他的两个研究生, Alex Krizhevsky 和 Ilya Sutskever, 2012 年底成立了一个名叫 DNNresearch (深度神经网络研究)的公司, 三个月后就被谷歌以五百万美元收购. Hinton 从此一半时间留在多伦多大学,另外一半时间在硅谷. 另外两位研究生则成为谷歌的全职雇员.

原来在纽约大学教书的杨立昆 (Yann LeCun), 2013 年底被脸书聘请为其人工智能研究院的总管.

曾在斯坦福大学和谷歌工作的吴恩达 (Andrew Ng), 2012年创立了网上教育公司 Coursera, 2014年五月被百度聘任为首席科学家, 负责百度大脑的计划.

人工智能的研究,并不止步于对人脑的简单模仿.

人脑的生理结构,过去二十万年没有大的变化.机器的运算速度, 则每十年以 100-1000 倍的增速在发展.这种增速,又促进更多新创的算法在摸索中涌现.

人工智能大幅度超越人脑的认知能力, 是一个数学上的必然 (mathematical certainty).

仅仅是三年之后, 一群80后的中国学者,又把图像识别的成就,推到一个全新的高度,一个超越受过良好训练的正常人的识别能力的新高度.

人工智能的海啸正排山倒海般袭来.

第十篇

https://zhuanlan.zhihu.com/p/20836243?refer=wangchuan
 

2013 年的 ImageNet 竞赛, 获胜的团队是来自纽约大学的研究生 Matt Zeiler, 其图像识别模型 top 5 的错误率, 降到了 11.5%.

Zeiler 的模型共有六千五百万个自由参数, 在 Nvidia 的GPU 上运行了整整十天才完成训练.

2014年, 竞赛第一名是来自牛津大学的 VGG 团队, top 5 错误率降到了 7.4%.

VGG的模型使用了十九层卷积神经网络, 一点四亿个自由参数, 在四个 Nvidia 的 GPU 上运行了将近三周才完成培训.

如何继续提高模型的识别能力? 是不断增加网络的深度和参数数目就可以简单解决的吗?

来自微软亚洲研究院的何恺明和孙健 (Jian Sun, 音译), 西安交通大学的张翔宇 (Xiangyu Zhang, 音译), 中国科技大学的任少庆 (Shaoqing Ren, 音译)四人的团队 MSRA (MicroSoft Research Asia),在2015 年十二月的 Imagenet 图像识别的竞赛中, 横空出世.

他们研究的第一个问题是,一个普通的神经网络,是不是简单地堆砌更多层神经元,就可以提高学习能力?

在研究一个图像识别的经典问题 CIFAR-10 的时候,他们发现一个 56层的简单神经网络,识别错误率反而高于一个20层的模型.

网络深度增加,学习的效率反而下降.为了解决有效信息在层层传递中衰减的问题, MSRA团队尝试了一种称为 "深度残余学习" (Deep Residual Learning) 的算法.

(3)

"深度残余学习"的概念, 借鉴了图像识别中的"残余向量"的概念.

本质上, 所谓'深度残余算法', 就是把神经网络一层层之间的非线性转换问题, 变成一个所谓的 "相对于本体的残余转换" (Residual mapping with respect to identity) 的问题,

实践上,使用所谓 "跳跃链接" (shortcut connection)的方法,把底层的输出值每隔几层跳跃直接传递成更高层的输入, 这样有效的信息不会在深层网络中被淹没.

MSRA 的深度残余学习模型,使用了深达 152层的神经网络, top 5 的识别错误率创造了 3.57%的新低, 这个数字, 已经低于一个接受良好培训的正常人的大约 5% 的错误率.

更有意思的是, MSRA 计算模型的复杂度, 实际上还不到2014年获奖团队 VGG 的十九层神经网络的 60%.

几位研究者自己,都为这一个改进算法的神奇效果感到惊讶.这个模型,甚至连前几年极为流行的丢弃 (dropout) 算法, 都没有用上.

深度学习的现状,是理论基础远远落后于实践成果.新的成果往往来自各种大胆尝试.研究者可以发现有效的算法, 虽然自己也无法严谨地论证,有效性的根本原因.

今天领先的算法,可能没多久又被另外一个不同角度的解决方案完全超越.行业先行者多年经验的积累,很快就可能被新的进展变得过时.

这是一块浩瀚的处女地,等待着众多新生代的研究者去开拓.

即使在这样的初级阶段,深度学习在图像识别的问题上,2015年已经部分超越正常人的认知能力. 而机器仍然在不停地进步.

这对未来的深远影响, 有的人会觉得细思极恐. 但也有的人会是: 细思极乐.

第十篇

https://zhuanlan.zhihu.com/p/20836266?refer=wangchuan

迄今为止我们讨论的神经网络模型, 都属于一种叫做前馈网络 (feedforward network) 的东西. 简而言之, 前馈网络, 信息从底层不断往前单向传输,故而得名.

RNN (Recurrent Neural Network), 也称循环神经网络, 多层反馈神经网络, 则是另一类非常重要的神经网络.

本质上, RNN 和前馈网络的区别是, 它可以保留一个内存状态的记忆, 来处理一个序列的输入, 这对手写字的识别, 语音识别和自然语言处理上, 尤为重要.

1997年 Schmidhuber 和他的学生 Sepp Hochreiter 合作, 提出了 长短期记忆 (LSTM, Long Short-Term Memory) 的计算模型.

 

鲁迅在小说"藤野先生"里曾有这么一段文字: "那坐在后面发笑的是上学年不及格的留级学生,在校已经一年,掌故颇为熟悉的了。他们便给新生讲演每个教授的历史。这藤野先生,据说是穿衣服太模胡了 ... 有一回上火车去,致使管车 的疑心他是扒手,叫车里的客人大家小心些。 "

通俗的说, LSTM 就是这样一个机制, 好似"藤野先生"里面的"留级学生", 帮你管理很久之前的"掌故", 决定何时调用, 何时忽略.

如果"忘记历史意味着背叛", 那么对于没有使用 LSTM 的神经网络, "忘记历史则意味着迷茫和不知所措".

"深度残余学习", 本质上是借鉴了 LSTM 模型的思路, 但是去掉了里面的 forget gate (遗忘之门) 这个概念而已.

 
简而言之,Schmidhuber 认为, 人脑的认知之所以会觉得某个东西有趣,是因为他看到了一个新的以前不知道,但是又能够很快学习理解的东西. 如果完全都在预期之中, 那就枯燥无味; 如果太古怪, 大脑无法迅速识别理解,也不会有回报的快感.
 
公开场合, 他以此理论最爱讲的段子是:
"生物组织四大驱动力都是 F 开头: Feeding (吃), Fighting (斗), Fleeing (逃), Mating (交配) ". ( 这个段子的槽点在最后一个词. 本来听众的预期也是以 F 开头, 但是却看到了 M 开头的另外一个同义词. )
 

艺术, 音乐和幽默, 全在算法掌握之中,一个在新颖和相识间寻找平衡的算法.

艺术家, 作曲家和段子手们, 要感受 RNN 和 LSTM 的威力, 也许还要再过几年.

但在其它领域, LSTM 很早就开始发飙了.

系列十二 Link

RNN 和 LSTM 发挥威力的重要应用之一, 是语音识别.

一直到2009年之前, 主流的语音识别技术, 依靠的是统计学上的两个算法模型, 高斯混合模型 (Gaussian Mixture Model)和隐藏马尔科夫模型 (Hidden Markov Model).

马尔科夫模型, 是一个概率的模型. 其核心思想, 就是一个系统, 下一个时间点的状态, 只取决于当前的状态, 而和更早的时间点 (昨天, 前天, 大前天)的状态无关.

高斯混合模型, 就是把现实中的数据, 分解成一些基于高斯概率密度函数 (又称正态分布)的叠加.

简而言之, GMM-HMM 就是用概率上的算法, 来猜测语音对应的文字.

实践上 GMM-HMM的算法 一直到 2009年, 都是错误率最低的算法. 但即使如此, 对大多数基准测试, 其单词识别错误率 (Word Error Rate) 一直接近 30%甚至更高.

系列十三 Link

研究者们借用了Hinton 使用的"限制玻尔兹曼机" (RBM) 的算法 (这个系列的第四篇有介绍过), 对神经网络进行了"预培训". 深度神经网络模型 (DNN), 在这里, 替代了高斯混合模型 (GMM), 来估算识别文字的几率.

在谷歌的一个语音输入基准测试中,单词错误率 (Word Error Rate) 最低达到了 12.3%

谷歌的研究者 Jeff Dean 评价, "这是20年来,在语音识别领域, 最大的一次性进步. ".

要进一步提高,需要藤野先生班上的那些"掌故颇为熟悉的留级生", 该 RNN/LSTM 粉墨登场了.

系列十四 Link

循环神经网络 (RNN)的本质, 是可以处理一个长度变化的序列的输出和输入 (多对多). 广义的看, 如果传统的前馈神经网络做的事, 是对一个函数的优化 (比如图像识别). 那么循环神经网络做的事, 则是对一个程序的优化,应用空间宽阔得多.

长短期记忆 (LSTM)的架构, 使有用的历史信息, 可以保留下来,很久以后仍然可以读取.

一个有趣的应用, 是把大量文字作为输入培训 RNN, 让它掌握语言的规律, 自己也可以写文章了.

斯坦福大学的计算机博士 Andrej Kapathy 在他的博客中写道:

"有时我的模型的简单程度, 和高质量的输出相比,反差如此之大,远远超越我的预期".

自学习, 这就是人工智能, 让人神往的重要原因.

在 AI 的迅速进步面前, 这段歌词也许应该改为: "终生的所有, 也抵不上几百个小时的 GPU".

系列十五(Link

自然语言处理, 英文是 Natural Language Processing (NLP).其基本定义为: 把一段文字, 转化成一个数据结构, 力求清晰无误地表达文字的意义.

自然语言处理包括对自然语言的理解和生成, 典型应用如机器翻译, 文字分类, 聊天机器人等等. 通过语言沟通, 是智人和其它动物的最重要区别, 这是人工智能技术的重要基石.

2016年二月, 以 Rafal Jozefowicz 为第一作者的谷歌大脑的团队, 发表论文, "探索语言模型的极限" (Exploring the limits of language modeling). 该团队, 使用了 RNN/ LSTM 和所谓 "字母层面的卷积神经网络" (Character-Level Convolutional Neural Network) 的技术结合的模型, 在"十亿单词基准"的测试上把困惑度降低到了 30. 而相应的模型自由参数的数目降到了只有十亿 (相当于 Chelba 团队的模型的百分之五), 计算量大大降低.

更有意思的是,当把十个经过微调的不同参数的LSTM模型综合起来,取其均值, 对测试数据验证时, 其困惑度最低达 23.7.

机器越来越懂人话, 越来越会说人话了.

系列十六 (Link)

回顾深度学习技术在图像识别,语音识别和自然语言处理上的突破, 可以看到的是一个很清晰的主脉络:

计算速度加快, 缩短了新算法的测试周期, 

  成功的新算法, 迅速彻底地淘汰老算法.

深度学习在图像识别上的突破, 一下子让支持向量机 (SVM) 的统计算法过时.

循环神经网络和长短期记忆 (RNN/LSTM) 在语音识别上的突破,也让传统的 GMM/HMM 技术被人冷落.

新算法彻底替代老的算法后, 积累多年经验的老科学家,老程序员, 发现自己原先的一些知识突然过时无用了. 一个在行业浸淫多年的老同志, 可能突然被才入行的年轻人用新的工具超越.

那种江河日下的无奈之痛,向谁可以倾诉?

然而科学技术不相信眼泪,只有放下包袱,才能开动机器. 只有保持随时从零开始的心态,才能跟上甚至引领时代的步伐.

在这个时代,最重要的不是对某个具体算法的耳熟能详 (好比学习装填子弹和射击的技能), 而是研究如何持续更快地提高运算速度,打破各种计算瓶颈,来缩短新算法测试的周期.

这需要对 CPU, GPU 这些底层硬件的计算构架, 以及指引硬件性能进步的摩尔定律的未来路线图, 有深刻的理解.

系列十七 (Link

一般人讨论计算速度时, 大多在说芯片时钟的速度. 芯片频率越高, 时钟的一个周期越短, 速度越快. 但这只是计算能力中的一个维度.

一个典型的计算流程是这样的:

1)数据从 CPU 的内存拷贝到 GPU 的内存.

2) CPU 把计算指令传送给 GPU

3) GPU 把计算任务分配到各个 CUDA core 并行处理

4) 计算结果写到 GPU 内存里, 再拷贝到 CPU 内存里.

除了时钟的速度, 衡量GPU计算能力的其它几个重要参数是:

1. (CUDA cores) 并行计算的核心处理器的数目. (类似轮船的吨位)

2. 内存大小 (类似港口的大小).

3. 内存带宽 (Bandwidth, 指数据传输的速度, 类似轮船装卸货的速度)

4. GPU/CPU之间通讯的带宽. (类似从港口到火车/卡车上的装卸货的速度)

任何一个技术参数过慢, 都可能成为妨碍计算能力进步的瓶颈.

反过来说, 提高计算能力的关键, 在于改进提高计算过程中的瓶颈.

2016年四月, 在硅谷的 GPU 开发者大会上, Nvidia 的黄仁勋宣布推出最新的超算系统 DGX-1. 这是一个拥有八个最新的代号 P100 的GPU的系统,售价接近十三万美元. 在运行 alexnet 的训练计算时间上, 只花费了两个小时, 比2012年十月 Alex Krizhevsky 团队使用两个 GTX 580 GPU, 六天的运算时间快了 75倍.

计算能力的提高,不再主要依靠芯片时钟速度的提高,而是通过提升不同模块之间的通讯带宽,加大并行程度而实现.

单兵作战能力不是主旋律, 大规模兵团的实时协同作战才是王道.

这可能是推动人类文明发展的最重要的洞见之一.

理解了驱动计算速度的重要因素后,很自然地就会引出下面三个问题:

第一, 按照最保守的估计,假设计算速度每四年加快十五倍,那么十四年左右就可以加快一万倍. 2013年谷歌有学者已经有使用两百亿个自由参数的模型, 那么最晚到 2027年, 应该就可以有两百万亿个自由参数的神经网络模型, 其复杂度和人脑在同一个量级上?

第二, 摩尔定律的进步, 在 GPU 内存容量, 内存带宽, 并行的核心处理器的数量增长上, 未来十几年内是否可以继续保持过去的增长速度, 进而支持至少计算速度增加一万倍以上的愿景?

第三, 如果你知道十几年后, 智能的爆发将等价于兵器史上从步枪, 到机枪, 到火箭炮, 到核弹的变化, 那么你现在是要花很多时间学习射击打炮, 还是更多的时间研究准备核武时代的新战略?

系列十八(Link

但是生活中大多数问题,是没有标准正确答案的.你的所作所为,偶尔会得到一些时而清晰, 时而模糊的反馈信号. 这就是"增强学习" (Reinforcement Learning) 要解决的问题.

"增强学习"的计算模型,最核心的有三个部分:

1. 状态 (State): 一组当前状态的变量 (是否吃饱穿暖, 心满意足? 是郁郁寡欢, 还是志得意满? )

2. 行动 (Action): 一组可以采取的行动变量 (是努力工作, 还是游山玩水? 是修身养性, 还是夜夜笙歌? )

3. 回报 (Reward): 采取行动, 状态改变后,把当前获得的回报定量化. (喝酒就脸红, 吃多了就发胖, 大怒就伤肝, 工作超过八个小时身体就被掏空, 等等).

增强学习的最终目的,就是在和外界环境的接触/探索/观察的过程中,不断改进策略,把长期的回报/利益最大化而已.

增强学习的理论基础, 要从运筹学里的"贪婪算法" (Greedy Algorithm) 说起.

什么是贪婪算法? 简单说,就是,任何时候的决策,都是选择当前观察的最优解,而没有整体长远的规划.

贪婪算法的优点是容易理解,简单快速.但缺点是,得到的往往是局部最优解,而不是全球最优.

郭德纲老师在一次访谈中,深刻地指出, "吃亏要趁早,一帆风顺不是好事. 从小娇生惯养,没人跟他说过什么话,六十五岁走街上谁瞪他一眼当时就猝死".

动态规划,英文是 Dynamic Programming, 直译为"动态程序", 这个概念由美国数学家 Richard Bellman 在1950年提出. 它是在贪婪算法的基础上改进的算法. 实际上它和"动态","程序"两个概念没啥关系.

据 Bellman 老师介绍,当初为了忽悠政府的经费,就使用了"动态"这个词.动态,给人一种灵活,性感,高大上的感觉.谁会对"动态"说不?

动态规划算法的本质,是把一个复杂的问题拆分为多个子问题,并且把子问题的答案存储起来,避免以后的重复计算.

系列十九 (Link

动态规划理论的核心, 用以 Richard Bellman 老师名字命名的 贝尔曼方程 (Bellman Equation)表示.

贝尔曼方程的核心, 就是:

用大白话说, 就是

目前状态的最大价值 = 最大化[ 眼前的回报 + {未来的最大价值,贴现到现在} ]

而动态规划要解决的问题,无非就是求解方程里的最优价值函数 V(x) 而已.

动态规划在实际操作上,最大的挑战就是所谓 "维度的诅咒" (Curse of Dimensionality),就是随着变量的增加,问题的复杂度和计算量的需求,指数倍地增长.

维度的诅咒", 主要包含了三个维度:

一, 状态空间 (state space)

二, 结果空间 (outcome space)

三, 行为空间 (action space: )

如果计算量太大,无法精致,那么退而求其次,我们就寻求"近似精致".

一个近似精致的解决思路,是所谓"蒙特卡洛模拟" (Monte-Carlo Simulation).

MC 模拟优化的核心, 分两个部分:

第一是计算模拟. 当没有简单的理论模型,维度的诅咒无法逾越时,取而代之的是用计算机随机产生的参数,对可能的路径发展进行大规模模拟计算. 大量模拟之后,在各个状态节点,根据其模拟的平均值, 计算出一个接近理论值的预期价值函数.

第二是通用策略迭代 (Generalized Policy Iteration), 根据模拟出来的价值函数,使用贪婪算法修正各个状态的策略,也就是说,修正后的策略在每一步的选择,都是根据模拟的价值函数,寻求下一步的眼前利益最大化.  再根据调整的策略,回到第一步, 重新模拟,更新价值函数.

两个步骤不断循环,渐进提高,直到接近最优值.

(如下图, V 代表价值函数, Pai 代表策略)

传统意义上讲,算法名字带有蒙特卡洛的意思就是,他对搜索空间的搜索都是随机给一个方向的,譬如说蒙塔卡罗算圆周率,就是在一个正方形里面随机取点,看看落在圆里面有多少。蒙特卡洛光线追踪,在需要对环境积分的时候随机取角度射光线。蒙特卡洛走迷宫,随便走。

MC 模拟的一个优点是,无须建模,完全根据实际经验来学习,容易上手.

大量 MC模拟后的生成的实用性强的算法,没有生硬的理论培训,就在枪林弹雨中不断被淘汰,被选择,被教育. 而黄埔生则是被"维度的诅咒"束缚的动态规划的理论.

但 MC 模拟算法的一个不足是, 学习和提高 (根据价值函数,更新策略) 是要在一个模拟的轮回, 岁月蹉跎之后才可以发生,而不能够实时进行.

在残酷的生存竞争中,需要的是,一种更快的, 根据反馈来实时调整策略的能力.

这个算法的改进,启发来自于人脑多巴胺 (Dopamine)释放的机制.

系列二十 (Link

所以也有人称其多巴胺为"快感化学物" (pleasure chemical):

快感/奖励, 导致多巴胺的释放.

多巴胺的释放, 来自对于奖励的预期,而不是奖励本身.

研究的结论是: 多巴胺的释放,取决于获得的奖励和预期之间的差值, Delta

现实和预期的差别, 促成了多巴胺的释放, 这是学习和进步的源动力.

(2)

时间差分学习 (Temporal Difference Learning, 下面简称为 TD学习) 思想的雏型, 上世纪五十年代就被不同的学者提出.

它的核心思想, 就是在每个时间点通过计算现实和预期的差值,来微调价值函数值. 这和大脑多巴胺释放的机制,不谋而合.

它和蒙特-卡洛(MC)模拟的区别在于, MC 模拟要在一个轮回之后,再更新各个节点的价值函数. 而 TD 是在每个时间点, 根据观察到的结果不断评估,微调.

打个简单的比方,如果把"过河"作为一个要解决的问题,

动态规划的解决办法,就是耗费大量时间测算河水的深浅,河里的石头大小,分布,然后计算最优的过河方案. 它的缺点是耗时过长, 很可能方案算出来的时候,你的孙子都已经出生了.

MC 模拟,就好比派一大群志愿者强行渡河,有些人在渡河中会摔跤甚至淹死,但经过大量先烈前赴后继的实验后,也可以找到最佳方案.

而TD 算法,就是"摸着石头过河".

当现实和预期存在差别时,有的人选择破口大骂,有的人选择视而不见/掩耳盗铃.而有的人则使用 TD 算法,根据这个差值, 实时的更新自己的世界观和策略. 使用 TD 算法的人,将会有更大的概率,在生存竞争中传递自己的基因.

TD 算法真正名声大噪, 要到 1992年, 在一个古老游戏上的应用.

系列二十一(Link

所有没有成熟的新理论,新技术出现之初,学术界都会有两派:

好派 (人工智能,增强学习就是好, 就是好!)

P 派 (人工智能,增强学习好个 P,  好个 P ! )

P 派对增强学习理论最为诟病之处:不实用,然并卵.

迄今为止关于各种算法的讨论,都离不开一个核心概念: 价值函数.

简单说,在贝尔曼方程里面,价值函数就是目前状态的理论最大值。

早期教科书里的简单例子中,价值函数就是一个表格. 每个状态,表格里对应一个函数值,在模拟和学习中不断更新.

但对于稍微复杂的问题,状态空间极大,表格根本不实用.

以围棋为例,一盘棋下完,每步棋平均有 250个选择,落棋之后平均还会走 150步,状态空间约等于 250 的150次方。 这个数字已经远超过宇宙里的原子的数目 (有估算是 10的 80次方)。计算量之大,即使用前面提到的蒙特-卡洛模拟,也无法胜任.

怎么办?解决方法是: 近似, 近似, 近似.

(2)

如何近似价值函数?

一些研究者,开始使用神经网络用于价值函数的近似计算.

奥地利学者 Kurt Hornik 在1991年的论文里,曾经证明,一个前馈神经网络,可以近似任何连续的非线性的函数。增加近似的精度,可以依靠增加神经元的数目实现.

神经网络用于价值函数的近似计算,它的一个优点,是相对于神经元连接的各个参数可以微分求导。通用的计算方法,是计算神经网络拟合的函数值,和实际值的方差,求导,然后使用所谓的“随机梯度下降” (Stochastic Gradient Descent) 的方法把方差最小化。

神经网络,和时间差分算法,第一个在实用上的突破,来自西洋双陆棋.

(4)

从 双陆棋TD-gammon 算法的成功,已经隐约可以看到一个有趣的现象:

生物进化的历史, 好似算法和计算能力提高的历史.

拥有抽象的近似计算能力,只要超越对手一点点,只要进步速度比对手更快, 就可以在生存竞争中胜出,更大概率的把基因传递到下一代.

系列二十二(Link

在用神经网络计算拟合最优价值函数 (最大利益)的实践中,最大的挑战,就是神经网络的参数无法收敛到最优值,无法求解. 换句话说,神经网络的参数变得发散 (Divergent).

这个问题的第一个原因是, 增强学习在和环境互动的过程中, 获得的数据都是高度相关的连续数列。当神经网络依靠这些数据来优化时,存在严重的样本偏差。

打个比方,当一个交易员短暂的成长过程中,恰好遇到牛市,那么他的世界观就是”涨,涨,涨“, 逢跌就买入, 英文又称 "Buy the f**king dip".

如果碰巧他的成长过程遇到美国上世纪三十年代的长达十几年的经济大萧条,那么他的世界观就是 "经济衰退随时可能发生,任何成长的新生事物都是泡沫",  捂着现金不敢冒任何风险.

(2)

这个问题的第二个原因,在于神经网络对于价值函数的估算值极为敏感。 如果价值函数值出现波动,会直接影响到在和环境互动,学习的过程中收集到的新的数据样本,进而影响神经网络参数的巨大波动而无法收敛.

比如一个机器人在探索环境,学习的过程中,如果价值函数值的改变,告诉他去探索左边的环境,那么他很长时间内收集到的数据都是左边的环境的信息,而无法自拔。如果因为波动,它又到右边去了,那么他学习的数据很长时间又是右边的环境的信息。依靠这样的实验数据培训的神经网络,参数出现错乱的大幅波动和发散,也就不足为奇了.

打个比方,没有任何投资经验的小白,他的学习思路,一般主要是看周围别的人是如何成功的。旁人的成功经验,就好比来自价值函数的信号。 听说有人炒期货成功,就一头扎进去学期货。损失惨重之后,听说有人炒股很厉害,又跑去学做股票。这种策略的本质缺陷,是对周围环境和机会,对前人的好的和坏的经验,缺乏一个整体的,全面的, 系统的理解和学习.

(3)

发散问题的第三个原因,在于价值函数值的范围,事前很难有正确的估计.

如果在学习中突然获得了远大于历史值的回报或者损失,使用反向传播算法的神经网络会出现所谓的 "梯度爆炸问题" (exploding gradient problem), 求解无法收敛.

生活中少数人遇到极度悲伤或者惊喜的事情,而导致精神失常,本质上就是这种“梯度爆炸问题”的后果.

神经网络用于增强学习,在1992年双陆棋的突破之后,很长时间无法有新的进展。P 派观点长期占上风,好派一直在艰难的探索中.

怎么办?如何让神经网络不再发散?

著名思想家郭德纲老师,很早就高瞻远瞩地指出了正确的道路,“(活得明白)不需要时间,需要经历。三岁经历一件事就明白了,活到九十五还没经历这个事他也明白不了。 "

解决的办法,就是”经历回放“  (experience replay)

系列二十三(Link

在增强学习领域,经历 (experience) 是指四个参数的集合, (x, a, y, r) 表示在状态 x, 做了 a, 进入了新的状态 y, 获得了回报 r. 教训 (lesson) 则是指一个时间序列的经历的集合.

"经历回放" 的第一个好处是更有效率。经验教训,尤其是有重大损失的经验教训,是昂贵的,如果把它存储到记忆里,可以日后反复调用学习,那么学习效率就会大大提高, 不用吃二遍苦,受二茬罪.

这就是俗话说的, “吃一堑,长一智”.

这实际上和我以前文章里,介绍过的神经网络的“长短期记忆” (Long Short-term memory) 有异曲同工之妙。

”经历回放“在增强学习的计算中是这样实现的:

在环境中学习积累的数据 (x, a, y, r) 被不断存储到一个数据集里.

每一次对神经网络的参数进行更新时,就从数据集里随机地调取一小批”经历“,帮助培训神经网络.

"经历回放"样本的随机性,彻底解决了上一篇文章里讲述的导致价值函数发散的两个原因:

第一, 每次用于培训的一小批“经历”不再是连续相关的数据。这就好比一个小白投资者可以同时见证学习牛市,熊市,猪市和猴市, 跳出了他生活时代的历史局限.

第二, 每次用于培训的“经历”不再受价值函数波动对环境的影响,这就好比股票投资者在股市时髦的时候,仍然有机会全面地学习房市,债市,外汇, 期权, 期货,风险投资等其它领域的知识,跳出了他工作环境的局限.

(2)

实际操作上,不管是人还是机器, "经历"的数据集的大小是有限制的。如果积累的数据超过这个限制,不得不将老的数据扔掉,给新的数据腾出空间.

有谚语道,“what we learned from experience is that we never learn from experience", (根据经验,我们从来不从经验中吸取教训) 又云,”好了伤疤忘了疼“. 说的就是这个事.

不是所有的经历的记忆,都有同样的价值。算法上如何管理有限的记忆,给有些经历更多的优先权,是一个重要的问题.

一个改进的算法,所谓“优先化经历回放", (Prioritized Experience Replay) , 是把各类经历按照所谓的时间误差 (Temporal Difference Error) 来排序,误差绝对值越大的经历,日后被重新调用的几率也就更大.

时间误差的概念在上个月的文章。那时候说的名词是:时间差分学习。

王川: 深度学习有多深? (二十) - 多巴胺的诱惑

中介绍过,其本质就是实际的回报和预期的回报的差别.

这个算法直觉上也很好理解,生活中越是那些出乎意料的大惊大喜的经历,越是值得我们记忆和学习.

系列二十四 (Link

游戏公司 Atari 在1977年推出的 Breakout (突围)电脑游戏,主要开发者是苹果公司的创始人之一, Steve Wozniak. 乔布斯的角色是 Atari 和 Wozniak 中间的掮客.

Atari 起先告诉乔布斯,游戏如果四天内开发出来,将支付 700 美元的报酬。乔布斯许诺和 Wozniak 平分这笔钱。但Wozniak 不知道的是, Atari 还承诺如果此游戏在逻辑芯片的需求上低于某个指标,将给予更多的奖励.

最终Wozniak 连续四天挑灯夜战只拿到了 350 美元 的报酬, 而乔布斯则独吞了从  Atari 那里获得的五千美元的额外奖励。等Wozniak 知道真相时,已经是1984年,苹果上市四年了.

2013年12月,总部在伦敦的 Deepmind 公司的团队发表论文:Playing Atari with Deep Reinforcement Learning ("使用深度增强学习玩Atari 电脑游戏"), 详细地解释了他们使用改进的神经网络算法在包括 Atari Breakout 在内的电脑游戏的成果.

除了获得的分数以外,没有任何人为输入的游戏规则的信息。全靠长期培训,让机器自己悟出,什么是最佳的策略.

这颇有点像某哲人曾经对培养华尔街交易员的评论, "我们把他们扔到有很多鲨鱼的水箱里,能自己野蛮生长的,就留下来 ".

神经网络有三个隐层,其中有两个卷积层 (convolution layer), 用于过滤和提取像素中的局部特征。第三层是一个全连接层 (Fully connected layer), 针对游戏中每一个瞬间玩家可能采取的行动选择 (大约有 4-18个行动选择),输出相应的价值函数的估算。

不同行动选择的回报值,就是所谓的 Q-value. 神经网络的培训,就是要拟合 Q-value,用于计算如何选择利益最大化的行动. 这个用三层神经网络学习打游戏的模型,就叫 Deep-Q-Network (深度-Q-网络, 简称 DQN).

DQN 的参数初始值,完全随机化,就像一个新入行,两眼一抹黑的小白。但开始不懂没关系,最重要的,是自我学习新技能的速度.

(3)

在增强学习和运筹学里一个经典问题是选择”勘探还是开发“ (exploration or exploitation) . 换言之,是仅仅根据现有的信息把利益最大化,还是花一部分时间去探索外面的世界是否更精彩.

解决这个问题的通行做法,是所谓的 epsilon-greedy strategy, 这里翻译为 "有时不贪婪的策略".   这个策略,就是大部分时间贪婪 (根据现有信息寻求利益最大化),但是还有 epsilon 的几率去做一些完全随机的探索 (有时不贪婪).

埋头读书工作,固步自封的人,epsilon = 0, 这是传统的贪婪策略.

天天到处乱晃,东一榔头西一棒子的人, epsilon = 1.

这两个极端都不好.

有时不贪婪,做一些短期的牺牲,是为了长期的贪婪和利益最大化。如何把握 epsilon 这个度,是个挑战.

DQN 的 epsilon 的初始值为 1,以随机探索为主, 经过一百万帧的培训后慢慢降到 0.1 不变, 也就是始终保持 10%的时间随机探索.

DQN 的算法,用大白话来说,是这样的:

=====================

神经网络参数随机初始化 (刚出道,什么都不懂,无知者无畏)

把下面的循环重复 N 遍:

从 1 到 T 时间

       以 epsilon 的几率随机探索

       否则, 选择现有认知下, 利益最大化的行动 a(t)

       干 a(t), 完事后记下回报 r(t), 和新状态 s(t+1)

       把刚才的经历写入记忆,用于以后回放

 

       从记忆中随机提取部分经历,

            通过随机梯度下降的计算方法,优化拟合神经网络的参数,

            (这个参数优化就好比: 昨天股票抄底亏大了, 下次少抄底;前天买的房子又涨了, 下次就多放点钱买房。)

===================

系列二十五(Link

在训练过程中还有这样一个问题,由于算法在决策过程中总是有一定几率的随机探索,每局游戏的比分总是有些随机的波动。对于一个普通观察者来说,在一个较短的时间段内,他只看到每局得分大起大落,但无法准确判断程序是否真正学到了东西,有技能的提高.

这里对于价值函数最大值 Q-value 的估算就派上用场了, 如下图. 左边两图是程序在多次培训后平均得分的曲线图。对于旁观者而言,图中的右半部波动较大,看不出得分有什么进步。  右边两图,则是神经网络对 Q-value 的估值,这个数字,则是一直缓缓上升的。

这里面有个非常深刻的洞见:如果人们总是让人生旅程上短期的得失,尤其是因为偶然不可控因素导致的得失,影响情绪上的波动,那么精神状态就会象左边两张图一样忽上忽下,而随之而来的狂躁症,忧郁症,双向情感障碍,也就成为必然.

但如果树立了科学的方法论和价值观,可以正确地估算 Q-value, 面对短期的大起大落,知道自己实际上是在不断进步,知道未来在变得更好,知道短期的挫折或者成就以后不值一提,所以可以拒绝一惊一乍,所以可以坚持平心静气.

所谓宠辱不惊,原来无非如此.

(3)

回头看,如果要总结为什么机器打游戏彻底超越人类玩家,主要原因还是三点:

第一,计算能力的大幅度提升,这是最根本的.

和在西洋双陆棋上实现突破的 1992年时相比,2013年的使用 GPU的计算能力至少增加了几十万倍。只有这样的计算能力,才能够处理复杂的神经网络模型和海量的输入数据.

第二, 算法的改进

这里,主要是深度神经网络,经历回放和传统增强学习的理论模型的结合。

第三,由于计算速度的提高,和算法的改进,机器有能力探索更广阔的状态空间,从而有能力发现人类从未感知的一个全新的世界.

更重要的是,和图像识别,语音识别这类有明确标准答案的问题不同,这一次,程序设计者甚至都没有设定任何明确的游戏规则,只有游戏屏幕的原始像素的输入,和游戏得分的回馈,其它一切让机器自己去摸索.

然后机器发现了比人类更好的打法.

这让学者们看到了实现真正的 “强人工智能”, (机器自发解决以前只有人类才可解决的抽象问题)的希望.

机器超越人的智能,本质上也无非就是 算得更快,记得更多,更善于探索 而已。

2014年一月,谷歌宣布以五亿美元收购 Deepmind. 对于大多数吃瓜群众而言,一个没有什么收入,就是写了个可以打游戏的程序的公司, 估值五亿,完全不可思议.

吃瓜群众焉知人工智能之志哉?

有诗为证: “飞来山上千寻塔,闻说鸡鸣见日升,不畏浮云遮望眼,自缘身在最高层".

后面的文章貌似还没有出。继续跟。

https://zhuanlan.zhihu.com/wangchuan (目录)

【Todo】【转载】深度学习&神经网络 科普及八卦 学习笔记 & GPU & SIMD的更多相关文章

  1. 深度学习-深度强化学习(DRL)-Policy Gradient与PPO笔记

    Policy Gradient 初始学习李宏毅讲的强化学习,听台湾的口音真是费了九牛二虎之力,后来看到有热心博客整理的很细致,于是转载来看,当作笔记留待复习用,原文链接在文末.看完笔记再去听一听李宏毅 ...

  2. 【深度学习系列2】Mariana DNN多GPU数据并行框架

    [深度学习系列2]Mariana DNN多GPU数据并行框架  本文是腾讯深度学习系列文章的第二篇,聚焦于腾讯深度学习平台Mariana中深度神经网络DNN的多GPU数据并行框架.   深度神经网络( ...

  3. 卷积神经网络之AlexNet网络模型学习

    ImageNet Classification with Deep Convolutional Neural Networks 论文理解  在ImageNet LSVRC-2010上首次使用大型深度卷 ...

  4. 玩深度学习选哪块英伟达 GPU?有性价比排名还不够!

    本文來源地址:https://www.leiphone.com/news/201705/uo3MgYrFxgdyTRGR.html 与“传统” AI 算法相比,深度学习(DL)的计算性能要求,可以说完 ...

  5. Model-Agnostic Meta-Learning for Fast Adaptation of Deep Networks(用于深度网络快速适应的元学习)

    摘要:我们提出了一种不依赖模型的元学习算法,它与任何梯度下降训练的模型兼容,适用于各种不同的学习问题,包括分类.回归和强化学习.元学习的目标是在各种学习任务上训练一个模型,这样它只需要少量的训练样本就 ...

  6. 了解卷积神经网络如何使用TDA学习

    在我之前的文章中,我讨论了如何对卷积神经网络(CNN)学习的权重进行拓扑数据分析,以便深入了解正在学习的内容以及如何学习它. 这项工作的重要性可归纳如下: 它使我们能够了解神经网络如何执行分类任务. ...

  7. (转) 基于Theano的深度学习(Deep Learning)框架Keras学习随笔-01-FAQ

    特别棒的一篇文章,仍不住转一下,留着以后需要时阅读 基于Theano的深度学习(Deep Learning)框架Keras学习随笔-01-FAQ

  8. [置顶] 人工智能(深度学习)加速芯片论文阅读笔记 (已添加ISSCC17,FPGA17...ISCA17...)

    这是一个导读,可以快速找到我记录的关于人工智能(深度学习)加速芯片论文阅读笔记. ISSCC 2017 Session14 Deep Learning Processors: ISSCC 2017关于 ...

  9. [深度学习] Pytorch(三)—— 多/单GPU、CPU,训练保存、加载模型参数问题

    [深度学习] Pytorch(三)-- 多/单GPU.CPU,训练保存.加载预测模型问题 上一篇实践学习中,遇到了在多/单个GPU.GPU与CPU的不同环境下训练保存.加载使用使用模型的问题,如果保存 ...

随机推荐

  1. Spring+Quartz实现定时执行任务的配置

    1.要想使用Quartz 必须要引入相关的包:以下是我在项目中gradle中的配置: compile 'org.quartz-scheduler:quartz:2.1.1' 2.Scheduler的配 ...

  2. 新学习的语言Groovy

    什么是 Groovy? Groovy 是 JVM 的一个替代语言 —替代 是指可以用 Groovy 在 Java 平台上进行 Java 编程,使用方式基本与使用 Java 代码的方式相同.在编写新应用 ...

  3. easyui datagrid 可过滤行的数据表格 导出

    //过滤栏表格导出数据                  /* xukf                 * id datagrid id                 * url Action 路 ...

  4. zookeeper系列之七—从远程调用认识zookeeper

    http://www.csdn.net/article/2014-01-02/2817944-zookeeper 在Hadoop的学习过程中,Zookeeper是让很多初学者困惑的技术,远程调用服务是 ...

  5. ContentProvider官方教程(1)何时用content provider

    Content Providers Content providers manage access to a structured set of data. They encapsulate the ...

  6. mfc unicode下一些容易容易搞混的基本类型

    经理要求以后的项目都使用unicode,整理以下看起来让人懵逼的基本类型... 其实在mfc中最容易让人发狂的就是关于字符的操作了. 两种常见基本C++char:(当然C++11新增char_16t. ...

  7. (1)定义一个接口CanFly,描述会飞的方法public void fly(); (2)分别定义类飞机和鸟,实现CanFly接口。 (3)定义一个测试类,测试飞机和鸟,在main方法中创建飞机对象和鸟对象, 再定义一个makeFly()方法,其中让会飞的事物飞。并在main方法中调用该方法, 让飞机和鸟起飞。

    package b; public interface CanFly { public void fly(); } package b; public class FeiJi implements C ...

  8. KDTree

    学习链接:http://www.cnblogs.com/eyeszjwang/articles/2429382.html 下面实现的kdtree支持以下操作:(1) 插入一个节点(2) 插入n个节点( ...

  9. BZOJ 1927 星际竞速(最小费用最大流)

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1927 题意:一个图,n个点.对于给出的每条边 u,v,w,表示u和v中编号小的那个到编号 ...

  10. DirectX 矩阵

    基础: 下标:第一个下标为该元素所在行的索引,第二个下标为该元素所在列的索引.如下图所示 行向量和列向量:只有单行的向量称为行向量,只有单列的称之为列向量. 相等 维数和元素都相等 数乘(与标量相乘) ...