【BAT 机器学习面试题】前 100 题汇总及勘误(下)



转载请注明 AIQ - 最专业的机器学习大数据社区  http://www.6aiq.com

AIQ 机器学习大数据 知乎专栏 点击关注

76. 看你是搞视觉的,熟悉哪些 CV 框架,顺带聊聊 CV 最近五年的发展史如何?

  原英文:adeshpande3.github.io
  作者:Adit Deshpande,UCLA CS 研究生
  译者:新智元闻菲、胡祥杰
  译文链接:https://mp.weixin.qq.com/s?__biz=MzI3MTA0MTk1MA==&mid=2651986617&idx=1&sn=fddebd0f2968d66b7f424d6a435c84af&scene=0#wechat_redirect 的
  本段结构如下:

  AlexNet(2012 年)

  ZF Net(2013 年)

  VGG Net(2014 年)

  GoogLeNet (2015 年)

  微软 ResNet (2015 年)

  区域 CNN(R-CNN - 2013 年,Fast R-CNN - 2015 年,Faster R-CNN - 2015 年)

  生成对抗网络 (2014 年)

  生成图像描述 (2014 年)

  空间转化器网络 (2015 年)

  AlexNet(2012 年)

  一切都从这里开始 (尽管有些人会说是 Yann LeCun 1998 年发表的那篇论文才真正开启了一个时代)。这篇论文,题目叫做“ImageNet Classification with Deep Convolutional Networks”,迄今被引用 6184 次,被业内普遍视为行业最重要的论文之一。Alex Krizhevsky、Ilya Sutskever 和 Geoffrey Hinton 创造了一个“大型的深度卷积神经网络”,赢得了 2012 ILSVRC(2012 年 ImageNet 大规模视觉识别挑战赛)。稍微介绍一下,这个比赛被誉为计算机视觉的年度奥林匹克竞赛,全世界的团队相聚一堂,看看是哪家的视觉模型表现最为出色。2012 年是 CNN 首次实现 Top 5 误差率 15.4% 的一年 (Top 5 误差率是指给定一张图像,其标签不在模型认为最有可能的 5 个结果中的几率),当时的次优项误差率为 26.2%。这个表现不用说震惊了整个计算机视觉界。可以说,是自那时起,CNN 才成了家喻户晓的名字。

  论文中,作者讨论了网络的架构 (名为 AlexNet)。相比现代架构,他们使用了一种相对简单的布局,整个网络由 5 层卷积层组成,最大池化层、退出层(dropout layer) 和 3 层全卷积层。网络能够对 1000 种潜在类别进行分类。

  AlexNet 架构:看上去有些奇怪,因为使用了两台 GPU 训练,因而有两股“流”。使用两台 GPU 训练的原因是计算量太大,只能拆开来。

要点

  使用 ImageNet 数据训练网络,ImageNet 数据库含有 1500 多万个带标记的图像,超过 2.2 万个类别。

  使用 ReLU 代替传统正切函数引入非线性 (ReLU 比传统正切函数快几倍,缩短训练时间)。

  使用了图像转化 (image translation)、水平反射(horizontal reflection) 和补丁提取 (patch extraction) 这些数据增强技术。

  用 dropout 层应对训练数据过拟合的问题。

  使用批处理随机梯度下降训练模型,注明动量衰减值和权重衰减值。

  使用两台 GTX 580 GPU,训练了 5 到 6 天
为什么重要?

  Krizhevsky、Sutskever 和 Hinton 2012 年开发的这个神经网络,是 CNN 在计算机视觉领域的一大亮相。这是史上第一次有模型在 ImageNet 数据库表现这么好,ImageNet 数据库难度是出了名的。论文中提出的方法,比如数据增强和 dropout,现在也在使用,这篇论文真正展示了 CNN 的优点,并且以破纪录的比赛成绩实打实地做支撑。

ZF Net(2013 年)

  2012 年 AlexNet 出尽了风头,ILSVRC 2013 就有一大批 CNN 模型冒了出来。2013 年的冠军是纽约大学 Matthew Zeiler 和 Rob Fergus 设计的网络 ZF Net,错误率 11.2%。ZF Net 模型更像是 AlexNet 架构的微调优化版,但还是提出了有关优化性能的一些关键想法。还有一个原因,这篇论文写得非常好,论文作者花了大量时间阐释有关卷积神经网络的直观概念,展示了将滤波器和权重可视化的正确方法。

  在这篇题为“Visualizing and Understanding Convolutional Neural Networks”的论文中,Zeiler 和 Fergus 从大数据和 GPU 计算力让人们重拾对 CNN 的兴趣讲起,讨论了研究人员对模型内在机制知之甚少,一针见血地指出“发展更好的模型实际上是不断试错的过程”。虽然我们现在要比 3 年前知道得多一些了,但论文所提出的问题至今仍然存在! 这篇论文的主要贡献在于提出了一个比 AlexNet 稍微好一些的模型并给出了细节,还提供了一些制作可视化特征图值得借鉴的方法。

  

要点

  除了一些小的修改,整体架构非常类似 AlexNet。

  AlexNet 训练用了 1500 万张图片,而 ZFNet 只用了 130 万张。

  AlexNet 在第一层中使用了大小为 11×11 的滤波器,而 ZF 使用的滤波器大小为 7x7,整体处理速度也有所减慢。做此修改的原因是,对于输入数据来说,第一层卷积层有助于保留大量的原始象素信息。11×11 的滤波器漏掉了大量相关信息,特别是因为这是第一层卷积层。

  随着网络增大,使用的滤波器数量增多。

  利用 ReLU 的激活函数,将交叉熵代价函数作为误差函数,使用批处理随机梯度下降进行训练。

  使用一台 GTX 580 GPU 训练了 12 天。

  开发可视化技术“解卷积网络”(Deconvolutional Network),有助于检查不同的特征激活和其对输入空间关系。名字之所以称为“deconvnet”,是因为它将特征映射到像素 (与卷积层恰好相反)。

DeConvNet

  DeConvNet 工作的基本原理是,每层训练过的 CNN 后面都连一层“deconvet”,它会提供一条返回图像像素的路径。输入图像进入 CNN 之后,每一层都计算激活。然而向前传递。现在,假设我们想知道第 4 层卷积层某个特征的激活值,我们将保存这个特征图的激活值,并将这一层的其他激活值设为 0,再将这张特征图作为输入送入 deconvnet。Deconvnet 与原来的 CNN 拥有同样的滤波器。输入经过一系列 unpool(maxpooling 倒过来),修正,对前一层进行过滤操作,直到输入空间满。

  这一过程背后的逻辑在于,我们想要知道是激活某个特征图的是什么结构。下面来看第一层和第二层的可视化。

  ConvNet 的第一层永远是低层特征检测器,在这里就是对简单的边缘、颜色进行检测。第二层就有比较圆滑的特征了。再来看第三、第四和第五层。

  这些层展示出了更多的高级特征,比如狗的脸和鲜花。值得一提的是,在第一层卷积层后面,我们通常会跟一个池化层将图像缩小 (比如将 32x32x32 变为 16x16x3)。这样做的效果是加宽了第二层看原始图像的视野。更详细的内容可以阅读论文。

为什么重要?

  ZF Net 不仅是 2013 年比赛的冠军,还对 CNN 的运作机制提供了极好的直观信息,展示了更多提升性能的方法。论文所描述的可视化方法不仅有助于弄清 CNN 的内在机理,也为优化网络架构提供了有用的信息。Deconv 可视化方法和 occlusion 实验也让这篇论文成了我个人的最爱。

VGG Net(2015 年)

  简单、有深度,这就是 2014 年错误率 7.3% 的模型 VGG Net(不是 ILSVRC 2014 冠军)。牛津大学的 Karen Simonyan 和 Andrew Zisserman Main Points 创造了一个 19 层的 CNN,严格使用 3x3 的过滤器 (stride =1,pad= 1) 和 2x2 maxpooling 层(stride =2)。简单吧?

要点

  这里使用 3x3 的滤波器和 AlexNet 在第一层使用 11x11 的滤波器和 ZF Net 7x7 的滤波器作用完全不同。作者认为两个 3x3 的卷积层组合可以实现 5x5 的有效感受野。这就在保持滤波器尺寸较小的同时模拟了大型滤波器,减少了参数。此外,有两个卷积层就能够使用两层 ReLU。

  3 卷积层具有 7x7 的有效感受野。

  每个 maxpool 层后滤波器的数量增加一倍。进一步加强了缩小空间尺寸,但保持深度增长的想法。

  图像分类和定位任务都运作良好。

  使用 Caffe 工具包建模。

  训练中使用 scale jittering 的数据增强技术。

  每层卷积层后使用 ReLU 层和批处理梯度下降训练。

  使用 4 台英伟达 Titan Black GPU 训练了两到三周。

**  为什么重要?**

  在我看来,VGG Net 是最重要的模型之一,因为它再次强调 CNN 必须够深,视觉数据的层次化表示才有用。深的同时结构简单。

GoogLeNet(2015 年)

  理解了我们刚才所说的神经网络架构中的简化的概念了吗? 通过推出 Inception 模型,谷歌从某种程度上把这一概念抛了出来。GoogLeNet 是一个 22 层的卷积神经网络,在 2014 年的 ILSVRC2014 上凭借 6.7% 的错误率进入 Top 5。据我所知,这是第一个真正不使用通用方法的卷积神经网络架构,传统的卷积神经网络的方法是简单堆叠卷积层,然后把各层以序列结构堆积起来。论文的作者也强调,这种新的模型重点考虑了内存和能量消耗。这一点很重要,我自己也会经常忽略:把所有的层都堆叠、增加大量的滤波器,在计算和内存上消耗很大,过拟合的风险也会增加。

  换一种方式看 GoogLeNet:

Inception 模型

  第一次看到 GoogLeNet 的构造时,我们立刻注意到,并不是所有的事情都是按照顺序进行的,这与此前看到的架构不一样。我们有一些网络,能同时并行发生反应。

  这个盒子被称为 Inception 模型。可以近距离地看看它的构成。

  

  底部的绿色盒子是我们的输入层,顶部的是输出层 (把这张图片向右旋转 90 度,你会看到跟展示了整个网络的那张图片相对应的模型)。基本上,在一个传统的卷积网络中的每一层中,你必须选择操作池还是卷积操作 (还要选择滤波器的大小)。Inception 模型能让你做到的就是并行地执行所有的操作。事实上,这就是作者构想出来的最“初始”的想法。

  现在,来看看它为什么起作用。它会导向许多不同的结果,我们会最后会在输出层体积上获得极端大的深度通道。作者处理这个问题的方法是,在 3X3 和 5X5 层前,各自增加一个 1X1 的卷积操作。1X1 的卷积 (或者网络层中的网络),提供了一个减少维度的方法。比如,我们假设你拥有一个输入层,体积是 100x100x60(这并不定是图像的三个维度,只是网络中每一层的输入)。增加 20 个 1X1 的卷积滤波器,会让你把输入的体积减小到 100X100X20。这意味着,3X3 层和 5X5 层不需要处理输入层那么大的体积。这可以被认为是“池特征”(pooling of feature),因为我们正在减少体积的高度,这和使用常用的最大池化层(maxpooling layers) 减少宽度和长度类似。另一个需要注意的是,这些 1X1 的卷积层后面跟着的是 ReLU 单元,这肯定不会有害。

  你也许会问,“这个架构有什么用?”这么说吧,这个模型由一个网络层中的网络、一个中等大小的过滤卷积、一个大型的过滤卷积、一个操作池 (pooling operation) 组成。网络卷积层中的网络能够提取输入体积中的每一个细节中的信息,同时 5x5 的滤波器也能够覆盖大部分接受层的的输入,进而能提起其中的信息。你也可以进行一个池操作,以减少空间大小,降低过度拟合。在这些层之上,你在每一个卷积层后都有一个 ReLU,这能改进网络的非线性特征。基本上,网络在执行这些基本的功能时,还能同时考虑计算的能力。这篇论文还提供了更高级别的推理,包括的主题有稀疏和紧密联结(见论文第三和第四节)。

要点

  整个架构中使用了 9 个 Inception 模型,总共超过 100 层。这已经很深了……没有使用完全连接的层。他们使用一个平均池代替,从 7x7x1024 的体积降到了 1x1x1024,这节省了大量的参数。比 AlexNet 的参数少了 12X 在测试中,相同图像的多个剪裁建立,然后填到网络中,计算 softmax probabilities 的均值,然后我们可以获得最后的解决方案。在感知模型中,使用了 R-CNN 中的概念。Inception 有一些升级的版本 (版本 6 和 7),“少数高端的 GPU”一周内就能完成训练。

为什么重要?

  GoogLeNet 是第一个引入了“CNN 各层不需要一直都按顺序堆叠”这一概念的模型。用 Inception 模型,作者展示了一个具有创造性的层次机构,能带来性能和计算效率的提升。这篇论文确实为接下来几年可能会见到的令人惊叹的架构打下了基础。

微软 ResNet(2015 年)

  想象一个深度 CNN 架构,再深、再深、再深,估计都还没有 ILSVRC 2015 冠军,微软的 152 层 ResNet 架构深。除了在层数上面创纪录,ResNet 的错误率也低得惊人,达到了 3.6%,人类都大约在 5%~10% 的水平。

为什么重要?

  只有 3.6% 的误差率,这应该足以说服你。ResNet 模型是目前最好的 CNN 架构,而且是残差学习理念的一大创新。从 2012 年起,错误率逐年下降,我怀疑到 ILSVRC2016,是否还会一直下降。我相信,我们现在堆放更多层将不会实现性能的大幅提升。我们必须要创造新的架构。

  区域 CNN:R-CNN(2013 年)、Fast R-CNN(2015 年)、Faster R-CNN(2015 年)

  一些人可能会认为,R-CNN 的出现比此前任何关于新的网络架构的论文都有影响力。第一篇关于 R-CNN 的论文被引用了超过 1600 次。Ross Girshick 和他在 UC Berkeley 的团队在机器视觉上取得了最有影响力的进步。正如他们的文章所写, Fast R-CNN 和 Faster R-CNN 能够让模型变得更快,更好地适应现代的物体识别任务。

  R-CNN 的目标是解决物体识别的难题。在获得特定的一张图像后, 我们希望能够绘制图像中所有物体的边缘。这一过程可以分为两个组成部分,一个是区域建议,另一个是分类。

  论文的作者强调,任何分类不可知区域的建议方法都应该适用。Selective Search 专用于 RCNN。Selective Search 的作用是聚合 2000 个不同的区域,这些区域有最高的可能性会包含一个物体。在我们设计出一系列的区域建议之后,这些建议被汇合到一个图像大小的区域,能被填入到经过训练的 CNN(论文中的例子是 AlexNet),能为每一个区域提取出一个对应的特征。这个向量随后被用于作为一个线性 SVM 的输入,SVM 经过了每一种类型和输出分类训练。向量还可以被填入到一个有边界的回归区域,获得最精准的一致性。

  非极值压抑后被用于压制边界区域,这些区域相互之间有很大的重复。

Fast R-CNN

  原始模型得到了改进,主要有三个原因:训练需要多个步骤,这在计算上成本过高,而且速度很慢。Fast R-CNN 通过从根本上在不同的建议中分析卷积层的计算,同时打乱生成区域建议的顺利以及运行 CNN,能够快速地解决问题。

  

  Faster R-CNN 的工作是克服 R-CNN 和 Fast R-CNN 所展示出来的,在训练管道上的复杂性。作者 在最后一个卷积层上引入了一个区域建议网络 (RPN)。这一网络能够只看最后一层的特征就产出区域建议。从这一层面上来说,相同的 R-CNN 管道可用。

为什么重要?

  能够识别出一张图像中的某一个物体是一方面,但是,能够识别物体的精确位置对于计算机知识来说是一个巨大的飞跃。更快的 R-CNN 已经成为今天标准的物体识别程序。

生成对抗网络 (2015 年)

  按照 Yann LeCun 的说法,生成对抗网络可能就是深度学习下一个大突破。假设有两个模型,一个生成模型,一个判别模型。判别模型的任务是决定某幅图像是真实的 (来自数据库),还是机器生成的,而生成模型的任务则是生成能够骗过判别模型的图像。这两个模型彼此就形成了“对抗”,发展下去最终会达到一个平衡,生成器生成的图像与真实的图像没有区别,判别器无法区分两者。

  左边一栏是数据库里的图像,也即真实的图像,右边一栏是机器生成的图像,虽然肉眼看上去基本一样,但在 CNN 看起来却十分不同。

**  为什么重要?**

  听上去很简单,然而这是只有在理解了“数据内在表征”之后才能建立的模型,你能够训练网络理解真实图像和机器生成的图像之间的区别。因此,这个模型也可以被用于 CNN 中做特征提取。此外,你还能用生成对抗模型制作以假乱真的图片。

生成图像描述 (2014 年)

  把 CNN 和 RNN 结合在一起会发生什么?Andrej Karpathy 和李飞飞写的这篇论文探讨了结合 CNN 和双向 RNN 生成不同图像区域的自然语言描述问题。简单说,这个模型能够接收一张图片,然后输出

  很神奇吧。传统 CNN,训练数据中每幅图像都有单一的一个标记。这篇论文描述的模型则是每幅图像都带有一句话 (或图说)。这种标记被称为弱标记,使用这种训练数据,一个深度神经网络“推断句子中的部分与其描述的区域之间的潜在对齐 (latent alignment)”,另一个神经网络将图像作为输入,生成文本的描述。

为什么重要?

  使用看似不相关的 RNN 和 CNN 模型创造了一个十分有用的应用,将计算机视觉和自然语言处理结合在一起。这篇论文为如何建模处理跨领域任务提供了全新的思路。

空间转换器网络 (2015 年)

  最后,让我们来看该领域最近的一篇论文。本文是谷歌 DeepMind 的一个团队在一年前写的。这篇论文的主要贡献是介绍了空间变换器 (Spatial Transformer) 模块。基本思路是,这个模块会转变输入图像,使随后的层可以更轻松地进行分类。作者试图在图像到达特定层前改变图像,而不是更改主 CNN 架构本身。该模块希望纠正两件事:姿势标准化 (场景中物体倾斜或缩放) 和空间注意力(在密集的图像中将注意力集中到正确的物体)。对于传统的 CNN,如果你想使你的模型对于不同规格和旋转的图像都保持不变,那你需要大量的训练样本来使模型学习。让我们来看看这个模块是如何帮助解决这一问题。

  传统 CNN 模型中,处理空间不变性的是 maxpooling 层。其原因是,一旦我们知道某个特定特性还是起始输入量 (有高激活值),它的确切位置就没有它对其他特性的相对位置重要,其他功能一样重要。这个新的空间变换器是动态的,它会对每个输入图像产生不同的行为 (不同的扭曲 / 变形)。这不仅仅是像传统 maxpool 那样简单和预定义。让我们来看看这个模块是如何工作的。该模块包括:

  一个本地化网络,会吸收输入量,并输出应施加的空间变换的参数。参数可以是 6 维仿射变换。

  采样网格,这是由卷曲规则网格和定位网络中创建的仿射变换 (theta) 共同产生的。

  一个采样器,其目的是执行输入功能图的翘曲。

  

  该模块可以放入 CNN 的任何地方中,可以帮助网络学习如何以在训练过程中最大限度地减少成本函数的方式来变换特征图。

为什么重要?

  CNN 的改进不一定要到通过网络架构的大改变来实现。我们不需要创建下一个 ResNet 或者 Inception 模型。本文实现了对输入图像进行仿射变换的简单的想法,以使模型对平移,缩放和旋转保持不变。更多请查看https://pan.baidu.com/s/1dFyVLst#list/path=%2F

77. 深度学习在视觉领域有何前沿进展
  @元峰,本题解析来源:https://zhuanlan.zhihu.com/p/24699780

引言

  在今年的神经网络顶级会议 NIPS2016 上,深度学习三大牛之一的 Yann Lecun 教授给出了一个关于机器学习中的有监督学习、无监督学习和增强学习的一个有趣的比喻,他说:如果把智能(Intelligence)比作一个蛋糕,那么无监督学习就是蛋糕本体,增强学习是蛋糕上的樱桃,那么监督学习,仅仅能算作蛋糕上的糖霜(图 1)。

图 1. Yann LeCun 对监督学习,增强学习和无监督学习的价值的形象比喻

1. 深度有监督学习在计算机视觉领域的进展

1.1 图像分类(Image Classification)

  自从 Alex 和他的导师 Hinton(深度学习鼻祖)在 2012 年的 ImageNet 大规模图像识别竞赛(ILSVRC2012)中以超过第二名 10 个百分点的成绩 (83.6% 的 Top5 精度) 碾压第二名(74.2%,使用传统的计算机视觉方法)后,深度学习真正开始火热,卷积神经网络(CNN)开始成为家喻户晓的名字,从 12 年的 AlexNet(83.6%),到 2013 年 ImageNet 大规模图像识别竞赛冠军的 88.8%,再到 2014 年 VGG 的 92.7% 和同年的 GoogLeNet 的 93.3%,终于,到了 2015 年,在 1000 类的图像识别中,微软提出的残差网(ResNet)以 96.43% 的 Top5 正确率,达到了超过人类的水平(人类的正确率也只有 94.9%).
  Top5 精度是指在给出一张图片,模型给出 5 个最有可能的标签,只要在预测的 5 个结果中包含正确标签,即为正确

图2. 2010-2015 年 ILSVRC 竞赛图像识别错误率演进趋势

1.2 图像检测(Image Dection)

  伴随着图像分类任务,还有另外一个更加有挑战的任务–图像检测,图像检测是指在分类图像的同时把物体用矩形框给圈起来。从 14 年到 16 年,先后涌现出 R-CNN,Fast R-CNN, Faster R-CNN, YOLO, SSD 等知名框架,其检测平均精度(mAP),在计算机视觉一个知名数据集上 PASCAL VOC 上的检测平均精度(mAP),也从 R-CNN 的 53.3%,到 Fast RCNN 的 68.4%,再到 Faster R-CNN 的 75.9%,最新实验显示,Faster RCNN 结合残差网(Resnet-101),其检测精度可以达到 83.8%。深度学习检测速度也越来越快,从最初的 RCNN 模型,处理一张图片要用 2 秒多,到 Faster RCNN 的 198 毫秒 / 张,再到 YOLO 的 155 帧 / 秒(其缺陷是精度较低,只有 52.7%),最后出来了精度和速度都较高的 SSD,精度 75.1%,速度 23 帧 / 秒。 

图 3. 图像检测示例

1.3 图像分割(Semantic Segmentation)

  图像分割也是一项有意思的研究领域,它的目的是把图像中各种不同物体给用不同颜色分割出来,如下图所示,其平均精度(mIoU,即预测区域和实际区域交集除以预测区域和实际区域的并集),也从最开始的 FCN 模型(图像语义分割全连接网络,该论文获得计算机视觉顶会 CVPR2015 的最佳论文的)的 62.2%,到 DeepLab 框架的 72.7%,再到牛津大学的 CRF as RNN 的 74.7%。该领域是一个仍在进展的领域,仍旧有很大的进步空间。

图 4. 图像分割的例子

1.4 图像标注–看图说话(Image Captioning)

  图像标注是一项引人注目的研究领域,它的研究目的是给出一张图片,你给我用一段文字描述它,如图中所示,图片中第一个图,程序自动给出的描述是“一个人在尘土飞扬的土路上骑摩托车”,第二个图片是“两只狗在草地上玩耍”。由于该研究巨大的商业价值(例如图片搜索),近几年,工业界的百度,谷歌和微软 以及学术界的加大伯克利,深度学习研究重地多伦多大学都在做相应的研究。图 5. 图像标注,根据图片生成描述文字

1.5 图像生成–文字转图像(Image Generator)

  图片标注任务本来是一个半圆,既然我们可以从图片产生描述文字,那么我们也能从文字来生成图片。如图 6 所示,第一列“一架大客机在蓝天飞翔”,模型自动根据文字生成了 16 张图片,第三列比较有意思,“一群大象在干燥草地行走”(这个有点违背常识,因为大象一般在雨林,不会在干燥草地上行走),模型也相应的生成了对应图片,虽然生成的质量还不算太好,但也已经中规中矩。

图 6. 根据文字生成图片

2. 强化学习(Reinforcement Learning)

**  ** 在监督学习任务中,我们都是给定样本一个固定标签,然后去训练模型,可是,在真实环境中,我们很难给出所有样本的标签,这时候,强化学习就派上了用场。简单来说,我们给定一些奖励或惩罚,强化学习就是让模型自己去试错,模型自己去优化怎么才能得到更多的分数。2016 年大火的 AlphaGo 就是利用了强化学习去训练,它在不断的自我试错和博弈中掌握了最优的策略。利用强化学习去玩 flyppy bird,已经能够玩到几万分了。

 

 图7. 强化学习玩 flappy bird

  谷歌 DeepMind 发表的使用增强学习来玩 Atari 游戏,其中一个经典的游戏是打砖块(breakout),DeepMind 提出的模型仅仅使用像素作为输入,没有任何其他先验知识,换句话说,模型并不认识球是什么,它玩的是什么,令人惊讶的是,在经过 240 分钟的训练后,它不光学会了正确的接球,击打砖块,它甚至学会了持续击打同一个位置,游戏就胜利的越快(它的奖励也越高)。

  视频链接:http://v.youku.com/v_show/id_XMTUxODU2NjY5Ng==.html

图 8. 使用深度增强学习来玩 Atari Breakout 

  强化学习在机器人领域和自动驾驶领域有极大的应用价值,当前 arxiv 上基本上每隔几天就会有相应的论文出现。机器人去学习试错来学习最优的表现,这或许是人工智能进化的最优途径,估计也是通向强人工智能的必经之路。
3 深度无监督学习(Deep Unsupervised Learning)–预测学习

  相比有限的监督学习数据,自然界有无穷无尽的未标注数据。试想,如果人工智能可以从庞大的自然界自动去学习,那岂不是开启了一个新纪元?当前,最有前景的研究领域或许应属无监督学习,这也正是 Yann Lecun 教授把无监督学习比喻成人工智能大蛋糕的原因吧。
  深度学习牛人 Ian Goodfellow 在 2014 年提出生成对抗网络(https://arxiv.org/abs/1406.2661)后,该领域越来越火,成为 16 年研究最火热的一个领域之一。大牛 Yann LeCun 曾说:“对抗网络是切片面包发明以来最令人激动的事情。”这句话足以说明生成对抗网络有多重要。 
  生成对抗网络的一个简单解释如下:假设有两个模型,一个是生成模型(Generative Model,下文简写为 G),一个是判别模型(Discriminative Model,下文简写为 D),判别模型 (D) 的任务就是判断一个实例是真实的还是由模型生成的,生成模型 (G) 的任务是生成一个实例来骗过判别模型(D),两个模型互相对抗,发展下去就会达到一个平衡,生成模型生成的实例与真实的没有区别,判别模型无法区分自然的还是模型生成的。以赝品商人为例,赝品商人(生成模型)制作出假的毕加索画作来欺骗行家(判别模型 D),赝品商人一直提升他的高仿水平来区分行家,行家也一直学习真的假的毕加索画作来提升自己的辨识能力,两个人一直博弈,最后赝品商人高仿的毕加索画作达到了以假乱真的水平,行家最后也很难区分正品和赝品了。下图是 Goodfellow 在发表生成对抗网络论文中的一些生成图片,可以看出,模型生成的模型与真实的还是有大差别,但这是 14 年的论文了,16 年这个领域进展非常快,相继出现了条件生成对抗网络(Conditional Generative Adversarial Nets)和信息生成对抗网络(InfoGAN),深度卷积生成对抗网络(Deep Convolutional Generative Adversarial Network, DCGAN),更重要的是,当前生成对抗网络把触角伸到了视频预测领域,众所周知,人类主要是靠视频序列来理解自然界的,图片只占非常小的一部分,当人工智能学会理解视频后,它也真正开始显现出威力了。

  这里推荐一篇 2017 年初 Ian GoodFellow 结合他在 NIPS2016 的演讲写出的综述性论文 NIPS 2016 Tutorial: Generative Adversarial Networks

图 9 生成对抗网络生成的一些图片,最后边一列是与训练集中图片最相近的生产图片

3.1 条件生成对抗网络(Conditional Generative Adversarial Nets,CGAN)

  生成对抗网络一般是根据随机噪声来生成特定类型的图像等实例,条件生成对抗网络则是根据一定的输入来限定输出,例如根据几个描述名词来生成特定的实例,这有点类似 1.5 节介绍的由文字生成图像,下图是 Conditioanal Generative Adversarial Nets 论文中的一张图片,根据特定的名词描述来生成图片。(注意:左边的一列图片的描述文字是训练集中不存在的,也就是说是模型根据没有见过的描述来生成的图片,右边的一列图片的描述是训练集中存在的)

图 10. 根据文字来生成图片

  条件生成对抗网络的另一篇有意思的论文是图像到图像的翻译,该论文提出的模型能够根据一张输入图片,然后给出模型生成的图片,下图是论文中的一张图,其中左上角第一对非常有意思,模型输入图像分割的结果,给出了生成的真实场景的结果,这类似于图像分割的反向工程。

图 11. 根据特定输入来生成一些有意思的输出图片

  生成对抗网络也用在了图像超分辨率上,2016 年有人提出 SRGAN 模型

https://arxiv.org/abs/1609.04802),它把原高清图下采样后,试图用生成对抗网络模型来还原图片来生成更为自然的,更逼近原图像的图像。下图中最右边是原图,把他降采样后采用三次差值(Bicubic Interpolation)得到的图像比较模糊,采用残差网络的版本(SRResNet)已经干净了很多,我们可以看到 SRGAN 生成的图片更为真实一些。

图 12. 生成对抗网络做超分辨率的例子,最右边是原始图像

  生成对抗网络的另一篇有影响力的论文是深度卷积生成对抗网络 DCGAN(https://arxiv.org/abs/1511.06434), 作者把卷积神经网络和生成对抗网络结合起来,作者指出该框架可以很好的学习事物的特征,论文在图像生成和图像操作上给出了很有意思的结果,例如图 13,带眼睛的男人 - 不戴眼镜的男人 + 不带眼睛的女人 = 带眼睛的女人, 该模型给出了图片的类似向量化操作。图 13. DCGAN 论文中的例图

  生成对抗网络的发展是在是太火爆,一篇文章难以罗列完全,对此感兴趣的朋友们可以自己在网络搜素相关论文来研究
  openAI 的一篇描述生成对抗网络的博客非常棒,因为 Ian Goodfellow 就在 OpenAI 工作,所以这篇博客的质量还是相当有保障的。链接为:https://openai.com/blog/generative-models/

3.2 视频预测

  该方向是笔者自己最感兴趣的方向,Yann LeCun 也提出,“用预测学习来替代无监督学习”, 预测学习通过观察和理解这个世界是如何运作的,然后对世界的变化做出预测,机器学会了感知世界的变化,然后对世界的状态进行了推断。
  今年的 NIPS 上,MIT 的学者 Vondrick 等人发表了一篇名为 Generating Videos with Scene Dynamics(http://carlvondrick.com/tinyvideo/)的论文, 该论文提出了基于一幅静态的图片,模型自动推测接下来的场景,例如给出一张人站在沙滩的图片,模型自动给出一段接下来的海浪涌动的小视频。该模型是以无监督的方式,在大量的视频上训练而来的。该模型表明它可以自动学习到视频中有用的特征。下图是作者的官方主页上给出的图,是动态图,如果无法正常查看,请转入 http://carlvondrick.com/tinyvideo/
  视频生成例子,下图的视频是模型自动生成的,我们可以看到图片不太完美,但已经能相当好的表示一个场景了。 

 

图 14. 随机生成的视频,沙滩上波涛涌动,火车奔驰的场景

  条件视频生成,下图是输入一张静态图,模型自动推演出一段小视频。

 

 图 15. 根据一张草地静态图,模型自动推测人的移动场景, 该图为动图,如果无法查看,请访问http://carlvondrick.com/tinyvideo/

图 16. 给出一张铁道图,模型自动推测火车跑过的样子, 该图为动图,如果无法查看,请访问http://carlvondrick.com/tinyvideo/

  MIT 的 CSAIL 实验室也放出了一篇博客,题目是《教会机器去预测未来》(http://news.mit.edu/2016/teaching-machines-to-predict-the-future-0621), 该模型在 youtube 视频和电视剧上(例如 The Office 和《绝望主妇》)训练,训练好以后,如果你给该模型一个亲吻之前的图片,该模型能自动推测出加下来拥抱亲吻的动作,具体的例子见下图。 

图 17. 给出一张静态图,模型自动推测接下来的动作

  哈佛大学的 Lotter 等人提出了 PredNet(https://coxlab.github.io/prednet/),该模型也是在 KITTI 数据集(http://www.cvlibs.net/datasets/kitti/)上训练, 然后该模型就可以根据前面的视频,预测行车记录仪接下来几帧的图像,模型是用长短期记忆神经网络(LSTM)训练得到的。具体例子见下图, 给出行车记录仪前几张的图片,自动预测接下来的五帧场景,模型输入几帧图像后,预测接下来的 5 帧,由图可知,越往后,模型预测的越是模糊, 但模型已经可以给出有参加价值的预测结果了。图片是动图,如果无法正常查看,请访问论文作者的博客 https://coxlab.github.io/prednet/


图 18. 给出行车记录仪前几张的图片,自动预测接下来的五帧场景, 该图为动图,如果无法查看,请访问https://coxlab.github.io/prednet/

4 总结

**  ** 生成对抗网络,无监督学习视频预测的论文实在是太多,本人精力实在有限,对此感兴趣的读者可以每天刷一下 arxiv 的计算机视觉版块的计算机视觉和模型识别,神经网络和进化计算和人工智能等相应版块,基本上每天都有这方面新论文出现。图像检测和分割,增强学习,生成对抗网络,预测学习都是人工智能发展火热的方向,希望对深度学习感兴趣的我们在这方面能做出来点成果。谢谢朋友们的阅读,对深度无监督学习感兴趣的朋友,欢迎一起学习交流,请私信我。

5 参考文献

**  ** 在写本文的过程中,我尽量把论文网址以链接的形式附着在正文中. 本文参考的大部分博客和论文整理如下,方便大家和自己以后研究查看。

**  ** 参考博客

1.NIPS 主旨演讲】Yann LeCun:用预测学习替代无监督学习

https://mp.weixin.qq.com/s/VJkiVmGBMv3sL94mivjNHg

2. 计算机视觉和 CNN 发展十一座里程碑

https://mp.weixin.qq.com/s/eosTWBbLpwVroYPEb9Q0wA

3.Generative Models

https://blog.openai.com/generative-models/

4.Generating Videos with Scene Dynamics

http://carlvondrick.com/tinyvideo/

5.Teaching machines to predict the future

http://news.mit.edu/2016/teaching-machines-to-predict-the-future-0621

**  ** 参考论文

1.Resnet 模型,图像分类,超过人类的计算机识别水平。Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification

https://arxiv.org/abs/1502.01852

2. 图像检测 Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks

https://arxiv.org/abs/1506.01497

3. 图像分割 Conditional Random Fields as Recurrent Neural Networks

http://www.robots.ox.ac.uk/~szheng/CRFasRNN.html

4. 图像标注,看图说话 Show and Tell: A Neural Image Caption Generator

https://arxiv.org/abs/1411.4555

5. 文字生成图像 Generative Adversarial Text to Image Synthesis

https://arxiv.org/abs/1605.05396

6. 强化学习玩 flyppy bird Using Deep Q-Network to Learn How To Play Flappy Bird

https://github.com/yenchenlin/DeepLearningFlappyBird

7. 强化学习玩 Atari 游戏 Playing Atari with Deep Reinforcement Learning

https://arxiv.org/abs/1312.5602

8. 生成对抗网络 Generative Adversarial Networks

https://arxiv.org/abs/1406.2661

9. 条件生成对抗网络 Conditional Generative Adversarial Nets

https://arxiv.org/abs/1411.1784

10. 生成对抗网络做图像超分辨率 Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network

https://arxiv.org/abs/1609.04802

11. 深度卷积生成对抗网络 Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks

https://arxiv.org/abs/1511.06434

12. 由图片推演视频 Generating Videos with Scene Dynamics

http://carlvondrick.com/tinyvideo/

13. 视频预测和无监督学习 Deep Predictive Coding Networks for Video Prediction and Unsupervised Learning

https://coxlab.github.io/prednet/

78.HashMap 与 HashTable 区别
  点评:HashMap 基于 Hashtable 实现,不同之处在于 HashMap 是非同步的,并且允许 null,即 null value 和 null key,Hashtable 则不允许 null,详见:http://oznyang.iteye.com/blog/30690。此外,记住一点:hashmap/hashset 等凡是带有 hash 字眼的均基于 hashtable 实现,没带 hash 字眼的如 set/map 均是基于红黑树实现,前者无序,后者有序,详见此文第一部分:《教你如何迅速秒杀掉:99% 的海量数据处理面试题》http://blog.csdn.net/v_july_v/article/details/7382693

  不过,估计还是直接来图更形象点,故直接上图(图片来源:July9 月 28 日在上海交大面试 & 算法讲座的PPThttp://vdisk.weibo.com/s/zrFL6OXKg_1me):

79. 在分类问题中,我们经常会遇到正负样本数据量不等的情况,比如正样本为 10w 条数据,负样本只有 1w 条数据,以下最合适的处理方法是 (  )
A 将负样本重复 10 次,生成 10w 样本量,打乱顺序参与分类
B 直接进行分类,可以最大限度利用数据
C 从 10w 正样本中随机抽取 1w 参与分类
D 将负样本每个权重设置为 10,正样本权重为 1,参与训练过程
  @管博士:准确的说,其实选项中的这些方法各有优缺点,需要具体问题具体分析,有篇文章对各种方法的优缺点进行了分析,讲的不错 感兴趣的同学可以参考一下:https://www.analyticsvidhya.com/blog/2017/03/imbalanced-classification-problem/。

80. 以下第 80 题 ~ 第 94 题来自:http://blog.csdn.net/u011204487
  深度学习是当前很热门的机器学习算法,在深度学习中,涉及到大量的矩阵相乘,现在需要计算三个稠密矩阵 A,B,C 的乘积 ABC, 假设三个矩阵的尺寸分别为
m∗n,n∗p,p∗q,且 m  @BlackEyes_SGC: mnp

81.Nave Bayes 是一种特殊的 Bayes 分类器, 特征变量是 X, 类别标签是 C, 它的一个假定是:(C)
  A. 各类别的先验概率 P(C) 是相等的
  B. 以 0 为均值,sqr(2)/2 为标准差的正态分布
  C. 特征变量 X 的各个维度是类别条件独立随机变量
  D.P(X|C) 是高斯分布
  @BlackEyes_SGC:朴素贝叶斯的条件就是每个变量相互独立。

82. 关于支持向量机 SVM, 下列说法错误的是(C)

  A.L2 正则项,作用是最大化分类间隔,使得分类器拥有更强的泛化能力
  B.Hinge 损失函数,作用是最小化经验分类错误
  C. 分类间隔为 1/||w||,||w|| 代表向量的模
  D. 当参数 C 越小时,分类间隔越大,分类错误越多,趋于欠学习
  @BlackEyes_SGC:A 正确。考虑加入正则化项的原因:想象一个完美的数据集,y>1 是正类,y<-1 是负类,决策面 y=0,加入一个 y=-30 的正类噪声样本,那么决策面将会变“歪”很多,分类间隔变小,泛化能力减小。加入正则项之后,对噪声样本的容错能力增强,前面提到的例子里面,决策面就会没那么“歪”了,使得分类间隔变大,提高了泛化能力。B 正确。 C 错误。间隔应该是 2/||w|| 才对,后半句应该没错,向量的模通常指的就是其二范数。 D 正确。考虑软间隔的时候,C 对优化问题的影响就在于把 a 的范围从 [0,+inf] 限制到了[0,C]。C 越小,那么 a 就会越小,目标函数拉格朗日函数导数为 0 可以求出 w= 求和 ai∗yi∗xi,a 变小使得 w 变小,因此间隔 2/||w|| 变大

83. 在 HMM 中, 如果已知观察序列和产生观察序列的状态序列, 那么可用以下哪种方法直接进行参数估计 (D)
A.EM 算法    B. 维特比算法    C. 前向后向算法    D. 极大似然估计
  @BlackEyes_SGC: EM 算法: 只有观测序列,无状态序列时来学习模型参数,即 Baum-Welch 算法
  维特比算法: 用动态规划解决 HMM 的预测问题,不是参数估计
  前向后向算法:用来算概率
  极大似然估计:即观测序列和相应的状态序列都存在时的监督学习算法,用来估计参数
  注意的是在给定观测序列和对应的状态序列估计模型参数,可以利用极大似然发估计。如果给定观测序列,没有对应的状态序列,才用 EM,将状态序列看不不可测的隐数据。

84. 假定某同学使用 Naive Bayesian(NB)分类模型时,不小心将训练数据的两个维度搞重复了,那么关于 NB 的说法中正确的是 (BD):

A. 这个被重复的特征在模型中的决定作用会被加强
B. 模型效果相比无重复特征的情况下精确度会降低
C. 如果所有特征都被重复一遍,得到的模型预测结果相对于不重复的情况下的模型预测结果一样。
D. 当两列特征高度相关时,无法用两列特征相同时所得到的结论来分析问题
E.NB 可以用来做最小二乘回归
F. 以上说法都不正确
  @BlackEyes_SGC:NB 的核心在于它假设向量的所有分量之间是独立的。在贝叶斯理论系统中,都有一个重要的条件独立性假设:假设所有特征之间相互独立,这样才能将联合概率拆分

85. 以下哪些方法不可以直接来对文本分类? (A)

A、Kmeans     B、决策树     C、支持向量机     D、KNN
  @BlackEyes_SGC:A:Kmeans 是聚类方法,典型的无监督学习方法。分类是监督学习方法,BCD 都是常见的分类方法。

86. 已知一组数据的协方差矩阵 P, 下面关于主分量说法错误的是 (C)

A、主分量分析的最佳准则是对一组数据进行按一组正交基分解, 在只取相同数量分量的条件下, 以均方误差计算截尾误差最小 
B、在经主分量分解后, 协方差矩阵成为对角矩阵 
C、主分量分析就是 K-L 变换 
D、主分量是通过求协方差矩阵的特征值得到
  @BlackEyes_SGC:K-L 变换与 PCA 变换是不同的概念,PCA 的变换矩阵是协方差矩阵,K-L 变换的变换矩阵可以有很多种(二阶矩阵、协方差矩阵、总类内离散度矩阵等等)。当 K-L 变换矩阵为协方差矩阵时,等同于 PCA。

87.kmeans 的复杂度

  时间复杂度:O(tKmn),其中,t 为迭代次数,K 为簇的数目,m 为记录数,n 为维数空间复杂度:O((m+K)n),其中,K 为簇的数目,m 为记录数,n 为维数

88. 关于 logit 回归和 SVM 不正确的是(A)
A. Logit 回归本质上是一种根据样本对权值进行极大似然估计的方法,而后验概率正比于先验概率和似然函数的乘积。logit 仅仅是最大化似然函数,并没有最大化后验概率,更谈不上最小化后验概率。A 错误
B. Logit 回归的输出就是样本属于正类别的几率,可以计算出概率,正确
C. SVM 的目标是找到使得训练数据尽可能分开且分类间隔最大的超平面,应该属于结构风险最小化。
D. SVM 可以通过正则化系数控制模型的复杂度,避免过拟合。
  @BlackEyes_SGC:Logit 回归目标函数是最小化后验概率,Logit 回归可以用于预测事件发生概率的大小,SVM 目标是结构风险最小化,SVM 可以有效避免模型过拟合。

89. 输入图片大小为 200×200,依次经过一层卷积(kernel size 5×5,padding 1,stride 2),pooling(kernel size 3×3,padding 0,stride 1),又一层卷积(kernel size 3×3,padding 1,stride 1)之后,输出特征图大小为 (97): 

  @BlackEyes_SGC:计算尺寸不被整除只在 GoogLeNet 中遇到过。卷积向下取整,池化向上取整。
  本题 (200-5+21)/2+1 为 99.5,取 99
  (99-3)/1+1 为 97
  (97-3+2
1)/1+1 为 97
  研究过网络的话看到 stride 为 1 的时候,当 kernel 为 3 padding 为 1 或者 kernel 为 5 padding 为 2 一看就是卷积前后尺寸不变。计算 GoogLeNet 全过程的尺寸也一样。

90. 影响聚类算法结果的主要因素有(B、C、D )。
A. 已知类别的样本质量;    B. 分类准则;    C. 特征选取;    D. 模式相似性测度 

91. 模式识别中,马式距离较之于欧式距离的优点是(C、D)。
A. 平移不变性;    B. 旋转不变性;    C 尺度不变性;    D. 考虑了模式的分布

92. 影响基本 K- 均值算法的主要因素有 (ABD)。
A. 样本输入顺序;
B. 模式相似性测度;
C. 聚类准则;
D. 初始类中心的选取 

93. 在统计模式分类问题中,当先验概率未知时,可以使用(BD)。
A. 最小损失准则; 
B. 最小最大损失准则;
C. 最小误判概率准则; 
D. N-P 判决

94. 如果以特征向量的相关系数作为模式相似性测度,则影响聚类算法结果的主要因素有(BC)。
A. 已知类别样本质量;    B. 分类准则;    C. 特征选取;    D. 量纲

95. 欧式距离具有(A B );马式距离具有(A B C D )。
A. 平移不变性;    B. 旋转不变性;    C. 尺度缩放不变性;    D. 不受量纲影响的特性

96. 你有哪些 deep learning(rnn、cnn)调参的经验?
参考https://www.zhihu.com/question/41631631

97. 简单说说 RNN 的原理
  我们升学到高三准备高考时,此时的知识是由高二及高二之前所学的知识加上高三所学的知识合成得来,即我们的知识是由前序铺垫,是有记忆的,好比当电影字幕上出现:“我是”时,你会很自然的联想到:“我是中国人”。


  关于 RNN,这里有课程详细讲 RNN,包括 RNN 条件生成、attention,以及 LSTM 等等均有细致讲解:http://www.julyedu.com/category/index/8/21

98. 什么是 RNN?

  @一只鸟的天空,本题解析来源:http://blog.csdn.net/heyongluoyao8/article/details/48636251
  RNNs 的目的使用来处理序列数据。在传统的神经网络模型中,是从输入层到隐含层再到输出层,层与层之间是全连接的,每层之间的节点是无连接的。但是这种普通的神经网络对于很多问题却无能无力。例如,你要预测句子的下一个单词是什么,一般需要用到前面的单词,因为一个句子中前后单词并不是独立的。RNNs 之所以称为循环神经网路,即一个序列当前的输出与前面的输出也有关。具体的表现形式为网络会对前面的信息进行记忆并应用于当前输出的计算中,即隐藏层之间的节点不再无连接而是有连接的,并且隐藏层的输入不仅包括输入层的输出还包括上一时刻隐藏层的输出。理论上,RNNs 能够对任何长度的序列数据进行处理。但是在实践中,为了降低复杂性往往假设当前的状态只与前面的几个状态相关,下图便是一个典型的 RNNs: 

 
From Nature 
  RNNs 包含输入单元 (Input units),输入集标记为{x0,x1,…,xt,xt+1,…},而输出单元(Output units) 的输出集则被标记为{y0,y1,…,yt,yt+1.,..}。RNNs 还包含隐藏单元(Hidden units),我们将其输出集标记为{s0,s1,…,st,st+1,…},这些隐藏单元完成了最为主要的工作。你会发现,在图中:有一条单向流动的信息流是从输入单元到达隐藏单元的,与此同时另一条单向流动的信息流从隐藏单元到达输出单元。在某些情况下,RNNs 会打破后者的限制,引导信息从输出单元返回隐藏单元,这些被称为“Back Projections”,并且隐藏层的输入还包括上一隐藏层的状态,即隐藏层内的节点可以自连也可以互连。 
  上图将循环神经网络进行展开成一个全神经网络。例如,对一个包含 5 个单词的语句,那么展开的网络便是一个五层的神经网络,每一层代表一个单词。对于该网络的计算过程如下:

  xt 表示第 t,t=1,2,3…步 (step) 的输入。比如,x1 为第二个词的 one-hot 向量(根据上图,x0 为第一个词); 

  st 为隐藏层的第 t 步的状态,它是网络的记忆单元。 st 根据当前输入层的输出与上一步隐藏层的状态进行计算。st=f(Uxt+Wst−1),其中 f 一般是非线性的激活函数,如 tanh(https://reference.wolfram.com/language/ref/Tanh.html)或 ReLU(https://en.wikipedia.org/wiki/Rectifier_%28neural_networks%29),在计算 s0 时,即第一个单词的隐藏层状态,需要用到 s−1,但是其并不存在,在实现中一般置为 0 向量;

  ot 是第 t 步的输出,如下个单词的向量表示,ot=softmax(Vst). 

  更多请看此文:http://blog.csdn.net/heyongluoyao8/article/details/48636251

99. RNN 是怎么从单层网络一步一步构造的的?

  @何之源,本题解析来源:https://zhuanlan.zhihu.com/p/28054589

##  一、从单层网络谈起

  在学习 RNN 之前,首先要了解一下最基本的单层网络,它的结构如图:

  输入是 x,经过变换 Wx+b 和激活函数 f 得到输出 y。相信大家对这个已经非常熟悉了。

  二、经典的 RNN 结构(N vs N)

  在实际应用中,我们还会遇到很多序列形的数据:

如:

  • 自然语言处理问题。x1 可以看做是第一个单词,x2 可以看做是第二个单词,依次类推。

  • 语音处理。此时,x1、x2、x3……是每帧的声音信号。

  • 时间序列问题。例如每天的股票价格等等。

  序列形的数据就不太好用原始的神经网络处理了。为了建模序列问题,RNN 引入了隐状态 h(hidden state)的概念,h 可以对序列形的数据提取特征,接着再转换为输出。先从 h1 的计算开始看:

  图示中记号的含义是:

  • 圆圈或方块表示的是向量。

  • 一个箭头就表示对该向量做一次变换。如上图中 h0 和 x1 分别有一个箭头连接,就表示对 h0 和 x1 各做了一次变换。

  在很多论文中也会出现类似的记号,初学的时候很容易搞乱,但只要把握住以上两点,就可以比较轻松地理解图示背后的含义。

  h2 的计算和 h1 类似。要注意的是,在计算时,每一步使用的参数 U、W、b 都是一样的,也就是说每个步骤的参数都是共享的,这是 RNN 的重要特点,一定要牢记。

  依次计算剩下来的(使用相同的参数 U、W、b):

  我们这里为了方便起见,只画出序列长度为 4 的情况,实际上,这个计算过程可以无限地持续下去。

  我们目前的 RNN 还没有输出,得到输出值的方法就是直接通过 h 进行计算:

  正如之前所说,一个箭头就表示对对应的向量做一次类似于 f(Wx+b) 的变换,这里的这个箭头就表示对 h1 进行一次变换,得到输出 y1。

  剩下的输出类似进行(使用和 y1 同样的参数 V 和 c):

  OK!大功告成!这就是最经典的 RNN 结构,我们像搭积木一样把它搭好了。它的输入是 x1, x2, …..xn,输出为 y1, y2, …yn,也就是说,输入和输出序列必须要是等长的。

  由于这个限制的存在,经典 RNN 的适用范围比较小,但也有一些问题适合用经典的 RNN 结构建模,如:

  • 计算视频中每一帧的分类标签。因为要对每一帧进行计算,因此输入和输出序列等长。

  • 输入为字符,输出为下一个字符的概率。这就是著名的 Char RNN(详细介绍请参考:The Unreasonable Effectiveness of Recurrent Neural Networks,Char RNN 可以用来生成文章、诗歌,甚至是代码。此篇博客里有自动生成歌词的实验教程《基于 torch 学汪峰写歌词、聊天机器人、图像着色 / 生成、看图说话、字幕生成》)。

  三、N VS 1

  有的时候,我们要处理的问题输入是一个序列,输出是一个单独的值而不是序列,应该怎样建模呢?实际上,我们只在最后一个 h 上进行输出变换就可以了:

  这种结构通常用来处理序列分类问题。如输入一段文字判别它所属的类别,输入一个句子判断其情感倾向,输入一段视频并判断它的类别等等。

  四、1 VS N

  输入不是序列而输出为序列的情况怎么处理?我们可以只在序列开始进行输入计算:

  还有一种结构是把输入信息 X 作为每个阶段的输入:

  下图省略了一些 X 的圆圈,是一个等价表示:

这种 1 VS N 的结构可以处理的问题有:

  • 从图像生成文字(image caption),此时输入的 X 就是图像的特征,而输出的 y 序列就是一段句子

  • 从类别生成语音或音乐等

## 五、N vs M

  下面我们来介绍 RNN 最重要的一个变种:N vs M。这种结构又叫 Encoder-Decoder 模型,也可以称之为 Seq2Seq 模型。

  原始的 N vs N RNN 要求序列等长,然而我们遇到的大部分问题序列都是不等长的,如机器翻译中,源语言和目标语言的句子往往并没有相同的长度。

  为此,Encoder-Decoder 结构先将输入数据编码成一个上下文向量 c:

  得到 c 有多种方式,最简单的方法就是把 Encoder 的最后一个隐状态赋值给 c,还可以对最后的隐状态做一个变换得到 c,也可以对所有的隐状态做变换。

  拿到 c 之后,就用另一个 RNN 网络对其进行解码,这部分 RNN 网络被称为 Decoder。具体做法就是将 c 当做之前的初始状态 h0 输入到 Decoder 中:

  还有一种做法是将 c 当做每一步的输入:

  由于这种 Encoder-Decoder 结构不限制输入和输出的序列长度,因此应用的范围非常广泛,比如:

  • 机器翻译。Encoder-Decoder 的最经典应用,事实上这一结构就是在机器翻译领域最先提出的

  • 文本摘要。输入是一段文本序列,输出是这段文本序列的摘要序列。

  • 阅读理解。将输入的文章和问题分别编码,再对其进行解码得到问题的答案。

  • 语音识别。输入是语音信号序列,输出是文字序列。


100.RNN 中只能采用 tanh 而不是 ReLu 作为激活函数么?
  解析详见:https://www.zhihu.com/question/61265076


更多高质资源 尽在AIQ 机器学习大数据 知乎专栏 点击关注

转载请注明 AIQ - 最专业的机器学习大数据社区  http://www.6aiq.com