BAT机器学习面试1000题系列(第76~149题)

正文共43140个字,124张图,预计阅读时间:108分钟。


76、看你是搞视觉的,熟悉哪些CV框架,顺带聊聊CV最近五年的发展史如何?深度学习 DL应用 难


原英文: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必须够深,视觉数据的层次化表示才有用。深的同时结构简单。


GoogleLe Net(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,Fast R-CNN,Fater R-CNN


一些人可能会认为,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


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 模型。本文实现了对输入图像进行仿射变换的简单的想法,以使模型对平移,缩放和旋转保持不变。更多请查看《CNN十篇经典论文》。


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


00

引言


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



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


01

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


1.1 图像分类(Image Classfication)


自从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 Generateor)


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



图6.根据文字生成图片


02

强化学习


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


 图7. 强化学习玩flappy bird


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



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


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


03

深度无监督学习-预测学习


相比有限的监督学习数据,自然界有无穷无尽的未标注数据。试想,如果人工智能可以从庞大的自然界自动去学习,那岂不是开启了一个新纪元?当前,最有前景的研究领域或许应属无监督学习,这也正是Yann Lecun教授把无监督学习比喻成人工智能大蛋糕的原因吧。


深度学习牛人Ian Goodfellow在2014年提出生成对抗网络后,该领域越来越火,成为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 条件生成对抗网络


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



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


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


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


生成对抗网络也用在了图像超分辨率上,2016年有人提出SRGAN模型,它把原高清图下采样后,试图用生成对抗网络模型来还原图片来生成更为自然的,更逼近原图像的图像。下图中最右边是原图,把他降采样后采用三次差值(Bicubic Interpolation)得到的图像比较模糊,采用残差网络的版本(SRResNet)已经干净了很多,我们可以看到SRGAN生成的图片更为真实一些。



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


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


图13. DCGAN论文中的例图


生成对抗网络的发展是在是太火爆,一篇文章难以罗列完全,对此感兴趣的朋友们可以自己在网络搜素相关论文来研究.


openAI的一篇描述生成对抗网络的博客非常棒,因为Ian Goodfellow就在OpenAI工作,所以这篇博客的质量还是相当有保障的。链接为:Open AI 生成对抗网络博客


3.2 视频预测


该方向是笔者自己最感兴趣的方向,Yann LeCun也提出,“用预测学习来替代无监督学习”,预测学习通过观察和理解这个世界是如何运作的,然后对世界的变化做出预测,机器学会了感知世界的变化,然后对世界的状态进行了推断。


今年的NIPS上,MIT的学者Vondrick等人发表了一篇名为Generating Videos with Scene Dynamics的论文,该论文提出了基于一幅静态的图片,模型自动推测接下来的场景,例如给出一张人站在沙滩的图片,模型自动给出一段接下来的海浪涌动的小视频。该模型是以无监督的方式,在大量的视频上训练而来的。该模型表明它可以自动学习到视频中有用的特征。下图是作者的官方主页上给出的图,是动态图,如果无法正常查看,请转入官方网站
视频生成例子,下图的视频是模型自动生成的,我们可以看到图片不太完美,但已经能相当好的表示一个场景了。 


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


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


 图15.根据一张草地静态图,模型自动推测人的移动场景。


图16.给出一张铁道图,模型自动推测火车跑过的样子


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


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


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



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


04

总结


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


05

参考文献


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


参考博客

参考论文


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


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


c、图像分割Conditional Random Fields as Recurrent Neural Networks


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


e、文字生成图像Generative Adversarial Text to Image Synthesis


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


g、强化学习玩Atari游戏 Playing Atari with Deep Reinforcement Learning


h、生成对抗网络 Generative Adversarial Networks


i、条件生成对抗网络Conditional Generative Adversarial Nets


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


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


L、由图片推演视频Generating Videos with Scene Dynamics


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


N、【NIPS 主旨演讲】Yann LeCun:用预测学习替代无监督学习


O、计算机视觉和 CNN 发展十一座里程碑


P、Generative Models


Q、Generating Videos with Scene Dynamics


R、Teaching machines to predict the future


78、HashMap与HashTable区别?数据结构 hash表 中


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


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




79、在分类问题中,我们经常会遇到正负样本数据量不等的情况,比如正样本为10w条数据,负样本只有1w条数据,以下最合适的处理方法是(  )? 机器学习 ML基础 中


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


80、以下第69题~第83题来自:http://blog.csdn.net/u011204487
深度学习是当前很热门的机器学习算法,在深度学习中,涉及到大量的矩阵相乘,现在需要计算三个稠密矩阵A,B,C的乘积ABC,假设三个矩阵的尺寸分别为m*n,n*p,p*q,且m<n<p<q,以下计算顺序效率最高的是()?深度学习 DL基础 中


A.(AB)C
B.AC(B)
C.A(BC)
D.所以效率都相同
正确答案:A
@BlackEyes_SGC: m*n*p<m*n*q,m*p*q< n*p*q, 所以 (AB)C 最小


81、Nave Bayes是一种特殊的Bayes分类器,特征变量是X,类别标签是C,它的一个假定是()机器学习 ML模型 中


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


82、关于支持向量机SVM,下列说法错误的是() 机器学习 ML模型 中
A.L2正则项,作用是最大化分类间隔,使得分类器拥有更强的泛化能力
B.Hinge 损失函数,作用是最小化经验分类错误
C.分类间隔为1/||w||,||w||代表向量的模
D.当参数C越小时,分类间隔越大,分类错误越多,趋于欠学习
正确答案: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中,如果已知观察序列和产生观察序列的状态序列,那么可用以下哪种方法直接进行参数估计()机器学习 ML模型 中


A.EM算法
B.维特比算法
C.前向后向算法
D.极大似然估计
正确答案:D
@BlackEyes_SGC: 
EM算法: 只有观测序列,无状态序列时来学习模型参数,即Baum-Welch算法
维特比算法: 用动态规划解决HMM的预测问题,不是参数估计
前向后向算法:用来算概率
极大似然估计:即观测序列和相应的状态序列都存在时的监督学习算法,用来估计参数
注意的是在给定观测序列和对应的状态序列估计模型参数,可以利用极大似然发估计。如果给定观测序列,没有对应的状态序列,才用EM,将状态序列看不不可测的隐数据。


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


A.这个被重复的特征在模型中的决定作用会被加强
B.模型效果相比无重复特征的情况下精确度会降低
C.如果所有特征都被重复一遍,得到的模型预测结果相对于不重复的情况下的模型预测结果一样。
D.当两列特征高度相关时,无法用两列特征相同时所得到的结论来分析问题
E.NB可以用来做最小二乘回归
F.以上说法都不正确
正确答案:BD


@BlackEyes_SGC:NB的核心在于它假设向量的所有分量之间是独立的。在贝叶斯理论系统中,都有一个重要的条件独立性假设:假设所有特征之间相互独立,这样才能将联合概率拆分。


85、以下哪些方法不可以直接来对文本分类?机器学习 ML模型 易
A、Kmeans 
B、决策树 
C、支持向量机 
D、KNN正确答案: A分类不同于聚类。
@BlackEyes_SGC:A:Kmeans是聚类方法,典型的无监督学习方法。分类是监督学习方法,BCD都是常见的分类方法。


86、已知一组数据的协方差矩阵P,下面关于主分量说法错误的是()机器学习 ML基础 易


A、主分量分析的最佳准则是对一组数据进行按一组正交基分解, 在只取相同数量分量的条件下,以均方误差计算截尾误差最小 
B、在经主分量分解后,协方差矩阵成为对角矩阵 
C、主分量分析就是K-L变换 
D、主分量是通过求协方差矩阵的特征值得到
正确答案: C


@BlackEyes_SGC:K-L变换与PCA变换是不同的概念,PCA的变换矩阵是协方差矩阵,K-L变换的变换矩阵可以有很多种(二阶矩阵、协方差矩阵、总类内离散度矩阵等等)。当K-L变换矩阵为协方差矩阵时,等同于PCA。


87、kmeans的复杂度?机器学习 ML模型 易




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


88、关于logit 回归和SVM 不正确的是(A) 机器学习 ML模型 中


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)之后,输出特征图大小为() 深度学习 DL基础 中

A 95
B 96
C 97
D 98
E 99
F 100
正确答案:C


@BlackEyes_SGC:计算尺寸不被整除只在GoogLeNet中遇到过。卷积向下取整,池化向上取整。


本题 (200-5+2*1)/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 ) 机器学习 ML模型 易

A.已知类别的样本质量;
B.分类准则;
C.特征选取;
D.模式相似性测度 


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


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


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


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


95、欧式距离具有(A B );马式距离具有(A B C D ) 机器学习 ML基础 易
A. 平移不变性;
B. 旋转不变性;
C. 尺度缩放不变性;
D. 不受量纲影响的特性


96、你有哪些deep learning(rnn、cnn)调参的经验? 深度学习 DL基础 中


@萧瑟,来源:https://www.zhihu.com/question/41631631/answer/94816420


参数初始化


下面几种方式,随便选一个,结果基本都差不多。但是一定要做。否则可能会减慢收敛速度,影响收敛结果,甚至造成Nan等一系列问题。


下面的n_in为网络的输入大小,n_out为网络的输出大小,n为n_in或(n_in+n_out)*0.5


Xavier初始法论文:http://jmlr.org/proceedings/papers/v9/glorot10a/glorot10a.pdf

He初始化论文:https://arxiv.org/abs/1502.01852


数据预处理方式


1、zero-center ,这个挺常用的.X -= np.mean(X, axis = 0) # zero-centerX /= np.std(X, axis = 0) # normalize


2、PCA whitening,这个用的比较少.


训练技巧


1、要做梯度归一化,即算出来的梯度除以minibatch size


2、clip c(梯度裁剪): 限制最大梯度,其实是value = sqrt(w1^2+w2^2….),如果value超过了阈值,就算一个衰减系系数,让value的值等于阈值: 5,10,15


3、dropout对小数据防止过拟合有很好的效果,值一般设为0.5,小数据上dropout+sgd在我的大部分实验中,效果提升都非常明显.因此可能的话,建议一定要尝试一下。 dropout的位置比较有讲究, 对于RNN,建议放到输入->RNN与RNN->输出的位置.关于RNN如何用dropout,可以参考这篇论文:http://arxiv.org/abs/1409.2329


4、adam,adadelta等,在小数据上,我这里实验的效果不如sgd, sgd收敛速度会慢一些,但是最终收敛后的结果,一般都比较好。如果使用sgd的话,可以选择从1.0或者0.1的学习率开始,隔一段时间,在验证集上检查一下,如果cost没有下降,就对学习率减半. 我看过很多论文都这么搞,我自己实验的结果也很好. 当然,也可以先用ada系列先跑,最后快收敛的时候,更换成sgd继续训练.同样也会有提升.据说adadelta一般在分类问题上效果比较好,adam在生成问题上效果比较好。


5、除了gate之类的地方,需要把输出限制成0-1之外,尽量不要用sigmoid,可以用tanh或者relu之类的激活函数.1. sigmoid函数在-4到4的区间里,才有较大的梯度。之外的区间,梯度接近0,很容易造成梯度消失问题。2. 输入0均值,sigmoid函数的输出不是0均值的。


6、rnn的dim和embdding size,一般从128上下开始调整. batch size,一般从128左右开始调整.batch size合适最重要,并不是越大越好.


7、word2vec初始化,在小数据上,不仅可以有效提高收敛速度,也可以可以提高结果.


8、尽量对数据做shuffle


9、LSTM 的forget gate的bias,用1.0或者更大的值做初始化,可以取得更好的结果,来自这篇论文:http://jmlr.org/proceedings/papers/v37/jozefowicz15.pdf, 我这里实验设成1.0,可以提高收敛速度.实际使用中,不同的任务,可能需要尝试不同的值.


10、Batch Normalization据说可以提升效果,不过我没有尝试过,建议作为最后提升模型的手段,参考论文:Accelerating Deep Network Training by Reducing Internal Covariate Shift


11、如果你的模型包含全连接层(MLP),并且输入和输出大小一样,可以考虑将MLP替换成Highway Network,我尝试对结果有一点提升,建议作为最后提升模型的手段,原理很简单,就是给输出加了一个gate来控制信息的流动,详细介绍请参考论文: http://arxiv.org/abs/1505.00387


Ensemble


Ensemble是论文刷结果的终极核武器,深度学习中一般有以下几种方式

  • 同样的参数,不同的初始化方式

  • 不同的参数,通过cross-validation,选取最好的几组

  • 同样的参数,模型训练的不同阶段,即不同迭代次数的模型。

  • 不同的模型,进行线性融合. 例如RNN和传统模型.

更多深度学习技巧,请参见专栏:炼丹实验室 - 知乎专栏


97、简单说说RNN的原理?深度学习 DL模型 中


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




关于RNN,这里有课程详细讲RNN,包括RNN条件生成、attention,以及LSTM等等均有细致讲解:深度学习 [同品类最牛,培养DL工程师]。


98、什么是RNN?深度学习 DL模型 中


@一只鸟的天空,本题解析来源: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个单词的语句,那么展开的网络便是一个五层的神经网络,每一层代表一个单词。对于该网络的计算过程如下:


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


2、st为隐藏层的第 t步的状态,它是网络的记忆单元。  st根据当前输入层的输出与上一步隐藏层的状态进行计算。 st=f(Uxt+Wst−1),其中 f一般是非线性的激活函数,如tanh或ReLU,在计算 s0时,即第一个单词的隐藏层状态,需要用到 s−1,但是其并不存在,在实现中一般置为0向量;


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

 
更多请看此文:循环神经网络(RNN, Recurrent Neural Networks)介绍。


99、RNN是怎么从单层网络一步一步构造的?深度学习 DL模型 难


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


一、从单层网络谈起


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



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


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


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




如:


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




图示中记号的含义是:


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


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结构建模,如:


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


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


三、N VS 1


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




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


四、1 VS N


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




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




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


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


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


2、从类别生成语音或音乐等


五、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结构不限制输入和输出的序列长度,因此应用的范围非常广泛,比如:

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


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


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


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


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


101、深度学习(CNN RNN Attention)解决大规模文本分类问题。深度学习 DL应用 难
https://zhuanlan.zhihu.com/p/25928551


102、如何解决RNN梯度爆炸和弥散的问题?深度学习 DL模型 难


本题解析来源:深度学习与自然语言处理(7)_斯坦福cs224d 语言模型,RNN,LSTM与GRU


为了解决梯度爆炸问题,Thomas Mikolov首先提出了一个简单的启发性的解决方案,就是当梯度大于一定阈值的的时候,将它截断为一个较小的数。具体如算法1所述:

算法:当梯度爆炸时截断梯度(伪代码)


g^←∂E∂W

if  ∥g^∥≥threshold then

g^←threashold∥∥g^∥∥g^


下图可视化了梯度截断的效果。它展示了一个小的rnn(其中W为权值矩阵,b为bias项)的决策面。这个模型是一个一小段时间的rnn单元组成;实心箭头表明每步梯度下降的训练过程。当梯度下降过程中,模型的目标函数取得了较高的误差时,梯度将被送到远离决策面的位置。截断模型产生了一个虚线,它将误差梯度拉回到离原始梯度接近的位置。



 


梯度爆炸,梯度截断可视化 


为了解决梯度弥散的问题,我们介绍了两种方法。第一种方法是将随机初始化 W(hh)改为一个有关联的矩阵初始化。第二种方法是使用ReLU(Rectified Linear Units)代替sigmoid函数。ReLU的导数不是0就是1.因此,神经元的梯度将始终为1,而不会当梯度传播了一定时间之后变小。


103、如何理解LSTM网络。深度学习 DL模型 难


@Not_GOD,本题解析来源:http://www.jianshu.com/p/9dc9f41f0b29/


Recurrent Neural Networks


人类并不是每时每刻都从一片空白的大脑开始他们的思考。在你阅读这篇文章时候,你都是基于自己已经拥有的对先前所见词的理解来推断当前词的真实含义。我们不会将所有的东西都全部丢弃,然后用空白的大脑进行思考。我们的思想拥有持久性。


传统的神经网络并不能做到这点,看起来也像是一种巨大的弊端。例如,假设你希望对电影中的每个时间点的时间类型进行分类。传统的神经网络应该很难来处理这个问题——使用电影中先前的事件推断后续的事件。


RNN 解决了这个问题。RNN 是包含循环的网络,允许信息的持久化。



RNN 包含循环


在上面的示例图中,神经网络的模块,A,正在读取某个输入 x_i,并输出一个值 h_i。循环可以使得信息可以从当前步传递到下一步。


这些循环使得 RNN 看起来非常神秘。然而,如果你仔细想想,这样也不比一个正常的神经网络难于理解。RNN 可以被看做是同一神经网络的多次复制,每个神经网络模块会把消息传递给下一个。所以,如果我们将这个循环展开:




展开的 RNN


链式的特征揭示了 RNN 本质上是与序列和列表相关的。他们是对于这类数据的最自然的神经网络架构。


并且 RNN 也已经被人们应用了!在过去几年中,应用 RNN 在语音识别,语言建模,翻译,图片描述等问题上已经取得一定成功,并且这个列表还在增长。我建议大家参考 Andrej Karpathy 的博客文章——The Unreasonable Effectiveness of Recurrent Neural Networks 来看看更丰富有趣的 RNN 的成功应用。


而这些成功应用的关键之处就是 LSTM 的使用,这是一种特别的 RNN,比标准的 RNN 在很多的任务上都表现得更好。几乎所有的令人振奋的关于 RNN 的结果都是通过 LSTM 达到的。这篇博文也会就 LSTM 进行展开。


长期依赖(Long-Term Dependencies)问题


RNN 的关键点之一就是他们可以用来连接先前的信息到当前的任务上,例如使用过去的视频段来推测对当前段的理解。如果 RNN 可以做到这个,他们就变得非常有用。但是真的可以么?答案是,还有很多依赖因素。


有时候,我们仅仅需要知道先前的信息来执行当前的任务。例如,我们有一个语言模型用来基于先前的词来预测下一个词。如果我们试着预测 “the clouds are in the sky” 最后的词,我们并不需要任何其他的上下文 —— 因此下一个词很显然就应该是 sky。在这样的场景中,相关的信息和预测的词位置之间的间隔是非常小的,RNN 可以学会使用先前的信息。



不太长的相关信息和位置间隔


但是同样会有一些更加复杂的场景。假设我们试着去预测“I grew up in France... I speak fluent French”最后的词。当前的信息建议下一个词可能是一种语言的名字,但是如果我们需要弄清楚是什么语言,我们是需要先前提到的离当前位置很远的 France 的上下文的。这说明相关信息和当前预测位置之间的间隔就肯定变得相当的大。


不幸的是,在这个间隔不断增大时,RNN 会丧失学习到连接如此远的信息的能力。



相当长的相关信息和位置间隔


在理论上,RNN 绝对可以处理这样的 长期依赖 问题。人们可以仔细挑选参数来解决这类问题中的最初级形式,但在实践中,RNN 肯定不能够成功学习到这些知识。Bengio, et al. (1994)等人对该问题进行了深入的研究,他们发现一些使训练 RNN 变得非常困难的相当根本的原因。


然而,幸运的是,LSTM 并没有这个问题!


LSTM 网络


Long Short Term 网络—— 一般就叫做 LSTM ——是一种 RNN 特殊的类型,可以学习长期依赖信息。如@寒小阳所说:LSTM和基线RNN并没有特别大的结构不同,但是它们用了不同的函数来计算隐状态。LSTM的“记忆”我们叫做细胞/cells,你可以直接把它们想做黑盒,这个黑盒的输入为前状态 ht−1和当前输入 xt。这些“细胞”会决定哪些之前的信息和状态需要保留/记住,而哪些要被抹去。实际的应用中发现,这种方式可以有效地保存很长时间之前的关联信息。


LSTM 由Hochreiter & Schmidhuber (1997)提出,并在近期被Alex Graves进行了改良和推广。在很多问题,LSTM 都取得相当巨大的成功,并得到了广泛的使用。


LSTM 通过刻意的设计来避免长期依赖问题。记住长期的信息在实践中是 LSTM 的默认行为,而非需要付出很大代价才能获得的能力!


所有 RNN 都具有一种重复神经网络模块的链式的形式。在标准的 RNN 中,这个重复的模块只有一个非常简单的结构,例如一个 tanh 层。



标准 RNN 中的重复模块包含单一的层


LSTM 同样是这样的结构,但是重复的模块拥有一个不同的结构。不同于 单一神经网络层,这里是有四个,以一种非常特殊的方式进行交互。




LSTM 中的重复模块包含四个交互的层


不必担心这里的细节。我们会一步一步地剖析 LSTM 解析图。现在,我们先来熟悉一下图中使用的各种元素的图标。



LSTM 中的图标


在上面的图例中,每一条黑线传输着一整个向量,从一个节点的输出到其他节点的输入。粉色的圈代表 pointwise 的操作,诸如向量的和,而黄色的矩阵就是学习到的神经网络层。合在一起的线表示向量的连接,分开的线表示内容被复制,然后分发到不同的位置。


LSTM 的核心思想


LSTM 的关键就是细胞状态,水平线在图上方贯穿运行。


细胞状态类似于传送带。直接在整个链上运行,只有一些少量的线性交互。信息在上面流传保持不变会很容易。




LSTM 有通过精心设计的称作为“门”的结构来去除或者增加信息到细胞状态的能力。门是一种让信息选择式通过的方法。他们包含一个 sigmoid 神经网络层和一个 pointwise 乘法操作。


     


Sigmoid 层输出 0 到 1 之间的数值,描述每个部分有多少量可以通过。0 代表“不许任何量通过”,1 就指“允许任意量通过”!


LSTM 拥有三个门,来保护和控制细胞状态。


逐步理解 LSTM


在我们 LSTM 中的第一步是决定我们会从细胞状态中丢弃什么信息。这个决定通过一个称为忘记门层完成。该门会读取 h_{t-1} 和 x_t,输出一个在 0 到 1 之间的数值给每个在细胞状态 C_{t-1} 中的数字。1 表示“完全保留”,0 表示“完全舍弃”。


让我们回到语言模型的例子中来基于已经看到的预测下一个词。在这个问题中,细胞状态可能包含当前主语的性别,因此正确的代词可以被选择出来。当我们看到新的主语,我们希望忘记旧的主语。



决定丢弃信息


下一步是确定什么样的新信息被存放在细胞状态中。这里包含两个部分。第一,sigmoid 层称 “输入门层” 决定什么值我们将要更新。然后,一个 tanh 层创建一个新的候选值向量,\tilde{C}_t,会被加入到状态中。下一步,我们会讲这两个信息来产生对状态的更新。


在我们语言模型的例子中,我们希望增加新的主语的性别到细胞状态中,来替代旧的需要忘记的主语。



确定更新的信息


现在是更新旧细胞状态的时间了,C_{t-1} 更新为 C_t。前面的步骤已经决定了将会做什么,我们现在就是实际去完成。


我们把旧状态与 f_t 相乘,丢弃掉我们确定需要丢弃的信息。接着加上 i_t * \tilde{C}_t。这就是新的候选值,根据我们决定更新每个状态的程度进行变化。


在语言模型的例子中,这就是我们实际根据前面确定的目标,丢弃旧代词的性别信息并添加新的信息的地方。



更新细胞状态


最终,我们需要确定输出什么值。这个输出将会基于我们的细胞状态,但是也是一个过滤后的版本。首先,我们运行一个 sigmoid 层来确定细胞状态的哪个部分将输出出去。接着,我们把细胞状态通过 tanh 进行处理(得到一个在 -1 到 1 之间的值)并将它和 sigmoid 门的输出相乘,最终我们仅仅会输出我们确定输出的那部分。


在语言模型的例子中,因为他就看到了一个 代词,可能需要输出与一个 动词 相关的信息。例如,可能输出是否代词是单数还是负数,这样如果是动词的话,我们也知道动词需要进行的词形变化。



输出信息


LSTM 的变体


我们到目前为止都还在介绍正常的 LSTM。但是不是所有的 LSTM 都长成一个样子的。实际上,几乎所有包含 LSTM 的论文都采用了微小的变体。差异非常小,但是也值得拿出来讲一下。


其中一个流形的 LSTM 变体,就是由 Gers & Schmidhuber (2000) 提出的,增加了 “peephole connection”。是说,我们让 门层 也会接受细胞状态的输入。



peephole 连接


上面的图例中,我们增加了 peephole 到每个门上,但是许多论文会加入部分的 peephole 而非所有都加。


另一个变体是通过使用 coupled 忘记和输入门。不同于之前是分开确定什么忘记和需要添加什么新的信息,这里是一同做出决定。我们仅仅会当我们将要输入在当前位置时忘记。我们仅仅输入新的值到那些我们已经忘记旧的信息的那些状态 。




coupled 忘记门和输入门


另一个改动较大的变体是 Gated Recurrent Unit (GRU),这是由 Cho, et al. (2014) 提出。它将忘记门和输入门合成了一个单一的 更新门。同样还混合了细胞状态和隐藏状态,和其他一些改动。最终的模型比标准的 LSTM 模型要简单,也是非常流行的变体。




GRU


这里只是部分流行的 LSTM 变体。当然还有很多其他的,如Yao, et al. (2015) 提出的 Depth Gated RNN。还有用一些完全不同的观点来解决长期依赖的问题,如Koutnik, et al. (2014) 提出的 Clockwork RNN。


要问哪个变体是最好的?其中的差异性真的重要吗?Greff, et al. (2015) 给出了流行变体的比较,结论是他们基本上是一样的。Jozefowicz, et al. (2015) 则在超过 1 万种 RNN 架构上进行了测试,发现一些架构在某些任务上也取得了比 LSTM 更好的结果。



Jozefowicz等人论文截图


结论


刚开始,我提到通过 RNN 得到重要的结果。本质上所有这些都可以使用 LSTM 完成。对于大多数任务确实展示了更好的性能!


由于 LSTM 一般是通过一系列的方程表示的,使得 LSTM 有一点令人费解。然而本文中一步一步地解释让这种困惑消除了不少。


LSTM 是我们在 RNN 中获得的重要成功。很自然地,我们也会考虑:哪里会有更加重大的突破呢?在研究人员间普遍的观点是:“Yes! 下一步已经有了——那就是注意力!” 这个想法是让 RNN 的每一步都从更加大的信息集中挑选信息。例如,如果你使用 RNN 来产生一个图片的描述,可能会选择图片的一个部分,根据这部分信息来产生输出的词。实际上,Xu, et al.(2015)已经这么做了——如果你希望深入探索注意力可能这就是一个有趣的起点!还有一些使用注意力的相当振奋人心的研究成果,看起来有更多的东西亟待探索……
注意力也不是 RNN 研究领域中唯一的发展方向。例如,Kalchbrenner, et al. (2015) 提出的 Grid LSTM 看起来也是很有前途。使用生成模型的 RNN,诸如Gregor, et al. (2015) Chung, et al. (2015) 和 Bayer & Osendorfer (2015) 提出的模型同样很有趣。在过去几年中,RNN 的研究已经相当的燃,而研究成果当然也会更加丰富!


再次说明下,本题解析基本取自Not_GOD翻译Christopher Olah 博文的《理解LSTM网络》,致谢。


104、RNN、LSTM、GRU区别。深度学习 DL模型 难


@我愛大泡泡,本题解析来源:http://blog.csdn.net/woaidapaopao/article/details/77806273


RNN引入了循环的概念,但是在实际过程中却出现了初始信息随时间消失的问题,即长期依赖(Long-Term Dependencies)问题,所以引入了LSTM。


LSTM:因为LSTM有进有出且当前的cell informaton是通过input gate控制之后叠加的,RNN是叠乘,因此LSTM可以防止梯度消失或者爆炸的变化是关键,下图非常明确适合记忆: 



GRU是LSTM的变体,将忘记门和输入们合成了一个单一的更新门。 



105、当机器学习性能遭遇瓶颈时,你会如何优化的?机器学习 ML应用 难


可以从这4个方面进行尝试:、基于数据、借助算法、用算法调参、借助模型融合。当然能谈多细多深入就看你的经验心得了。这里有一份参考清单:机器学习性能改善备忘单。


106、如何提高深度学习的性能?深度学习 DL应用 难


http://blog.csdn.net/han_xiaoyang/article/details/52654879


107、做过什么样的机器学习项目?比如如何从零构建一个推荐系统。机器学习 ML应用 难
这里有一个推荐系统的公开课《推荐系统》,另,再推荐一个课程:机器学习项目班 [10次纯项目讲解,100%纯实战]。


108、什麽样的资料集不适合用深度学习?深度学习 DL应用 难


@抽象猴,来源:https://www.zhihu.com/question/41233373

数据集太小,数据样本不足时,深度学习相对其它机器学习算法,没有明显优势。


数据集没有局部相关特性,目前深度学习表现比较好的领域主要是图像/语音/自然语言处理等领域,这些领域的一个共性是局部相关性。图像中像素组成物体,语音信号中音位组合成单词,文本数据中单词组合成句子,这些特征元素的组合一旦被打乱,表示的含义同时也被改变。对于没有这样的局部相关性的数据集,不适于使用深度学习算法进行处理。举个例子:预测一个人的健康状况,相关的参数会有年龄、职业、收入、家庭状况等各种元素,将这些元素打乱,并不会影响相关的结果。


109、广义线性模型是怎被应用在深度学习中?深度学习 DL模型 中


@许韩,来源:https://www.zhihu.com/question/41233373/answer/145404190
A Statistical View of Deep Learning (I): Recursive GLMs
深度学习从统计学角度,可以看做递归的广义线性模型。


广义线性模型相对于经典的线性模型(y=wx+b),核心在于引入了连接函数g(.),形式变为:y=g−1(wx+b)。


深度学习时递归的广义线性模型,神经元的激活函数,即为广义线性模型的链接函数。逻辑回归(广义线性模型的一种)的Logistic函数即为神经元激活函数中的Sigmoid函数,很多类似的方法在统计学和神经网络中的名称不一样,容易引起初学者(这里主要指我)的困惑。下图是一个对照表:



110、准备机器学习面试应该了解哪些理论知识?机器学习 ML模型 中


@穆文,来源:https://www.zhihu.com/question/62482926




看下来,这些问题的答案基本都在本BAT机器学习面试1000题系列里了。


111、标准化与归一化的区别?机器学习 ML基础 易


@艾华丰,本题解析来源:https://www.zhihu.com/question/20467170


归一化方法:


1、把数变为(0,1)之间的小数主要是为了数据处理方便提出来的,把数据映射到0~1范围之内处理,更加便捷快速。


2、把有量纲表达式变为无量纲表达式 归一化是一种简化计算的方式,即将有量纲的表达式,经过变换,化为无量纲的表达式,成为纯量。


标准化方法: 数据的标准化是将数据按比例缩放,使之落入一个小的特定区间。由于信用指标体系的各个指标度量单位是不同的,为了能够将指标参与评价计算,需要对指标进行规范化处理,通过函数变换将其数值映射到某个数值区间。


112、随机森林如何处理缺失值?机器学习 ML模型 中


方法一(na.roughfix)简单粗暴,对于训练集,同一个class下的数据,如果是分类变量缺失,用众数补上,如果是连续型变量缺失,用中位数补。


方法二(rfImpute)这个方法计算量大,至于比方法一好坏?不好判断。先用na.roughfix补上缺失值,然后构建森林并计算proximity matrix,再回头看缺失值,如果是分类变量,则用没有缺失的观测实例的proximity中的权重进行投票。如果是连续型变量,则用proximity矩阵进行加权平均的方法补缺失值。然后迭代4-6次,这个补缺失值的思想和KNN有些类似12。


113、随机森林如何评估特征重要性?机器学习 ML模型 中


衡量变量重要性的方法有两种,Decrease GINI 和 Decrease Accuracy:


1) Decrease GINI: 对于回归问题,直接使用argmax(VarVarLeftVarRight)作为评判标准,即当前节点训练集的方差Var减去左节点的方差VarLeft和右节点的方差VarRight。


2) Decrease Accuracy:对于一棵树Tb(x),我们用OOB样本可以得到测试误差1;然后随机改变OOB样本的第j列:保持其他列不变,对第j列进行随机的上下置换,得到误差2。至此,我们可以用误差1-误差2来刻画变量j的重要性。基本思想就是,如果一个变量j足够重要,那么改变它会极大的增加测试误差;反之,如果改变它测试误差没有增大,则说明该变量不是那么的重要。


114、优化Kmeans?机器学习 ML模型 中


使用kd树或者ball tree


将所有的观测实例构建成一颗kd树,之前每个聚类中心都是需要和每个观测点做依次距离计算,现在这些聚类中心根据kd树只需要计算附近的一个局部区域即可。


115、KMeans初始类簇中心点的选取。机器学习 ML模型 中


k-means++算法选择初始seeds的基本思想就是:初始的聚类中心之间的相互距离要尽可能的远。


1. 从输入的数据点集合中随机选择一个点作为第一个聚类中心;


2. 对于数据集中的每一个点x,计算它与最近聚类中心(指已选择的聚类中心)的距离D(x);


3. 选择一个新的数据点作为新的聚类中心,选择的原则是:D(x)较大的点,被选取作为聚类中心的概率较大;


4. 重复2和3直到k个聚类中心被选出来;


5. 利用这k个初始的聚类中心来运行标准的k-means算法。


116、解释对偶的概念。机器学习 ML基础 易


一个优化问题可以从两个角度进行考察,一个是primal 问题,一个是dual 问题,就是对偶问题,一般情况下对偶问题给出主问题最优值的下界,在强对偶性成立的情况下由对偶问题可以得到主问题的最优下界,对偶问题是凸优化问题,可以进行较好的求解,SVM中就是将primal问题转换为dual问题进行求解,从而进一步引入核函数的思想。


117、如何进行特征选择?机器学习 ML基础 中


特征选择是一个重要的数据预处理过程,主要有两个原因:一是减少特征数量、降维,使模型泛化能力更强,减少过拟合;二是增强对特征和特征值之间的理解.


常见的特征选择方式:


1. 去除方差较小的特征;


2. 正则化。1正则化能够生成稀疏的模型。L2正则化的表现更加稳定,由于有用的特征往往对应系数非零。


3. 随机森林,对于分类问题,通常采用基尼不纯度或者信息增益,对于回归问题,通常采用的是方差或者最小二乘拟合。一般不需要feature engineering、调参等繁琐的步骤。它的两个主要问题,1是重要的特征有可能得分很低(关联特征问题),2是这种方法对特征变量类别多的特征越有利(偏向问题)。


4. 稳定性选择。是一种基于二次抽样和选择算法相结合较新的方法,选择算法可以是回归、SVM或其他类似的方法。它的主要思想是在不同的数据子集和特征子集上运行特征选择算法,不断的重复,最终汇总特征选择结果,比如可以统计某个特征被认为是重要特征的频率(被选为重要特征的次数除以它所在的子集被测试的次数)。理想情况下,重要特征的得分会接近100%。稍微弱一点的特征得分会是非0的数,而最无用的特征得分将会接近于0。


118、数据预处理。机器学习 ML基础 易
1. 缺失值,填充缺失值fillna:
i. 离散:None,
ii. 连续:均值。
iii. 缺失值太多,则直接去除该列
2. 连续值:离散化。有的模型(如决策树)需要离散值
3. 对定量特征二值化。核心在于设定一个阈值,大于阈值的赋值为1,小于等于阈值的赋值为0。如图像操作
4. 皮尔逊相关系数,去除高度相关的列


119、简单说说特征工程。机器学习 ML基础 中




上图来源:http://www.julyedu.com/video/play/18


120、你知道有哪些数据处理和特征工程的处理?机器学习 ML应用 中



更多请查看此课程《机器学习工程师 第八期 [六大阶段、层层深入]》第7次课 特征工程。


121、请对比下Sigmoid、Tanh、ReLu这三个激活函数。深度学习 DL基础 中


sigmoid函数又称logistic函数,应用在Logistic回归中。logistic回归的目的是从特征学习出一个0/1分类模型,而这个模型是将特性的线性组合作为自变量,由于自变量的取值范围是负无穷到正无穷。因此,使用logistic函数将自变量映射到(0,1)上,映射后的值被认为是属于y=1的概率。


 假设函数

 

其中x是n维特征向量,函数g就是logistic函数。


    而的图像是




  可以看到,将无穷映射到了(0,1)。


  而假设函数就是特征属于y=1的概率。



 从而,当我们要判别一个新来的特征属于哪个类时,只需求即可,若大于0.5就是y=1的类,反之属于y=0类。




更多详见:https://mp.weixin.qq.com/s/7DgiXCNBS5vb07WIKTFYRQ


所以,sigmoid函数将输出映射到0-1范围之间,可以被看做是概率,因而,sigmoid函数是Logstic回归模型的激活函数。


但sigmoid函数有如下几个缺点:


正向计算包含指数,反向传播的导数也包含指数计算和除法运算,因而计算复杂度很高。
输出的均值非0。这样使得网络容易发生梯度消失或梯度爆炸。这也是batch normalization要解决的问题。


假如sigmoid函数为f(x),那么f'(x)=f(x)(1-f(x)),因为f(x)输出在0-1之间,那么f'(x)恒大于0。 这就导致全部的梯度的正负号都取决于损失函数上的梯度。这样容易导致训练不稳定,参数一荣俱荣一损俱损。


同样的,f'(x)=f(x)(1-f(x)),因为f(x)输出在0-1之间,那么f'(x)输出也在0-1之间,当层次比较深时,底层的导数就是很多在0-1之间的数相乘,从而导致了梯度消失问题。


对于tanh来说,同sigmoid类似,但是输出值在-1到1之间,均值为0,是其相对于sigmoid的提升。但是因为输出在-1,1之间,因而输出不能被看做是概率。



对于ReLU来说,相对于sigmoid和tanh来说,有如下优点:


计算量下,没有指数和除法运算。


不会饱和,因为在x>0的情况下,导数恒等于1


收敛速度快,在实践中可以得知,它的收敛速度是sigmoid的6倍。


Relu会使一部分神经元的输出为0,这样就造成了网络的稀疏性,并且减少了参数的相互依存关系,缓解了过拟合问题的发生


但是Relu也有缺点,缺点在于,


如果有一个特别大的导数经过神经单元使得输入变得小于0,这样会使得这个单元永远得不到参数更新,因为输入小于0时导数也是0. 这就形成了很多dead cell。


122、Sigmoid、Tanh、ReLu这三个激活函数有什么缺点或不足,有没改进的激活函数。深度学习 DL基础 中


@张雨石:sigmoid、Tanh、ReLU的缺点在121问题中已有说明,为了解决ReLU的dead cell的情况,发明了Leaky Relu, 即在输入小于0时不让输出为0,而是乘以一个较小的系数,从而保证有导数存在。同样的目的,还有一个ELU,函数示意图如下。




还有一个激活函数是Maxout,即使用两套w,b参数,输出较大值。本质上Maxout可以看做Relu的泛化版本,因为如果一套w,b全都是0的话,那么就是普通的ReLU。Maxout可以克服Relu的缺点,但是参数数目翻倍。


@我愛大泡泡,来源:http://blog.csdn.net/woaidapaopao/article/details/77806273




123、怎么理解决策树、xgboost能处理缺失值?而有的模型(svm)对缺失值比较敏感。机器学习 ML模型 中
https://www.zhihu.com/question/58230411


124、为什么引入非线性激励函数?深度学习 DL基础 中


@张雨石:第一,对于神经网络来说,网络的每一层相当于f(wx+b)=f(w'x),对于线性函数,其实相当于f(x)=x,那么在线性激活函数下,每一层相当于用一个矩阵去乘以x,那么多层就是反复的用矩阵去乘以输入。根据矩阵的乘法法则,多个矩阵相乘得到一个大矩阵。所以线性激励函数下,多层网络与一层网络相当。比如,两层的网络f(W1*f(W2x))=W1W2x=Wx。


第二,非线性变换是深度学习有效的原因之一。原因在于非线性相当于对空间进行变换,变换完成后相当于对问题空间进行简化,原来线性不可解的问题现在变得可以解了。
下图可以很形象的解释这个问题,左图用一根线是无法划分的。经过一系列变换后,就变成线性可解的问题了。


@Begin Again,来源:https://www.zhihu.com/question/29021768
如果不用激励函数(其实相当于激励函数是f(x) = x),在这种情况下你每一层输出都是上层输入的线性函数,很容易验证,无论你神经网络有多少层,输出都是输入的线性组合,与没有隐藏层效果相当,这种情况就是最原始的感知机(Perceptron)了。


正因为上面的原因,我们决定引入非线性函数作为激励函数,这样深层神经网络就有意义了(不再是输入的线性组合,可以逼近任意函数)。最早的想法是sigmoid函数或者tanh函数,输出有界,很容易充当下一层输入(以及一些人的生物解释)。




125、问人工神经网络中为什么ReLu要好过于tanh和sigmoid function?深度学习 DL基础 中
先看sigmoid、tanh和RelU的函数图:

@Begin Again,来源:https://www.zhihu.com/question/29021768

第一,采用sigmoid等函数,算激活函数时(指数运算),计算量大,反向传播求误差梯度时,求导涉及除法和指数运算,计算量相对大,而采用Relu激活函数,整个过程的计算量节省很多。


第二,对于深层网络,sigmoid函数反向传播时,很容易就会出现梯度消失的情况(在sigmoid接近饱和区时,变换太缓慢,导数趋于0,这种情况会造成信息丢失),这种现象称为饱和,从而无法完成深层网络的训练。而ReLU就不会有饱和倾向,不会有特别小的梯度出现。


第三,Relu会使一部分神经元的输出为0,这样就造成了网络的稀疏性,并且减少了参数的相互依存关系,缓解了过拟合问题的发生(以及一些人的生物解释balabala)。当然现在也有一些对relu的改进,比如prelu,random relu等,在不同的数据集上会有一些训练速度上或者准确率上的改进,具体的大家可以找相关的paper看。


多加一句,现在主流的做法,会多做一步batch normalization,尽可能保证每一层网络的输入具有相同的分布[1]。而最新的paper[2],他们在加入bypass connection之后,发现改变batch normalization的位置会有更好的效果。大家有兴趣可以看下。


[1] Ioffe S, Szegedy C. Batch normalization: Accelerating deep network training by reducing internal covariate shift[J]. arXiv preprint arXiv:1502.03167, 2015.
[2] He, Kaiming, et al. "Identity Mappings in Deep Residual Networks." arXiv preprint arXiv:1603.05027 (2016). 


126、为什么LSTM模型中既存在sigmoid又存在tanh两种激活函数?深度学习 DL模型 难
为什么不是选择统一一种sigmoid或者tanh,而是混合使用呢?这样的目的是什么?
 


本题解析来源:https://www.zhihu.com/question/46197687
@beanfrog:二者目的不一样
sigmoid 用在了各种gate上,产生0~1之间的值,这个一般只有sigmoid最直接了。
tanh 用在了状态和输出上,是对数据的处理,这个用其他激活函数或许也可以。


@hhhh:另可参见A Critical Review of Recurrent Neural Networks for Sequence Learning的section4.1,说了那两个tanh都可以替换成别的。


127、衡量分类器的好坏?机器学习 ML基础 中


@我愛大泡泡,来源:http://blog.csdn.net/woaidapaopao/article/details/77806273
  这里首先要知道TP、FN(真的判成假的)、FP(假的判成真)、TN四种(可以画一个表格)。 


几种常用的指标:


精度precision = TP/(TP+FP) = TP/~P (~p为预测为真的数量)


召回率 recall = TP/(TP+FN) = TP/ P


F1值: 2/F1 = 1/recall + 1/precision


ROC曲线:ROC空间是一个以伪阳性率(FPR,false positive rate)为X轴,真阳性率(TPR, true positive rate)为Y轴的二维坐标系所代表的平面。其中真阳率TPR = TP / P = recall, 伪阳率FPR = FP / N


更详细请点击:https://siyaozhang.github.io/2017/04/04/%E5%87%86%E7%A1%AE%E7%8E%87%E3%80%81%E5%8F%AC%E5%9B%9E%E7%8E%87%E3%80%81F1%E3%80%81ROC%E3%80%81AUC/


128、机器学习和统计里面的auc的物理意义是啥?机器学习 ML基础 中
https://www.zhihu.com/question/39840928


129、观察增益gain, alpha和gamma越大,增益越小?机器学习 ML基础 中


@AntZ:xgboost寻找分割点的标准是最大化gain. 考虑传统的枚举每个特征的所有可能分割点的贪心法效率太低,xgboost实现了一种近似的算法。大致的思想是根据百分位法列举几个可能成为分割点的候选者,然后从候选者中计算Gain按最大值找出最佳的分割点。它的计算公式分为四项, 可以由正则化项参数调整(lamda为叶子权重平方和的系数, gama为叶子数量):


第一项是假设分割的左孩子的权重分数, 第二项为右孩子, 第三项为不分割总体分数, 最后一项为引入一个节点的复杂度损失.
由公式可知, gama越大gain越小, lamda越大, gain可能小也可能大.


原问题是alpha而不是lambda, 这里paper上没有提到, xgboost实现上有这个参数. 上面是我从paper上理解的答案,下面是搜索到的:
https://zhidao.baidu.com/question/2121727290086699747.html?fr=iks&word=xgboost+lamda&ie=gbk.


lambda[默认1]权重的L2正则化项。(和Ridge regression类似)。 这个参数是用来控制XGBoost的正则化部分的。虽然大部分数据科学家很少用到这个参数,但是这个参数在减少过拟合上还是可以挖掘出更多用处的。11、alpha[默认1]权重的L1正则化项。(和Lasso regression类似)。 可以应用在很高维度的情况下,使得算法的速度更快。


gamma[默认0]在节点分裂时,只有分裂后损失函数的值下降了,才会分裂这个节点。


Gamma指定了节点分裂所需的最小损失函数下降值。 这个参数的值越大,算法越保守。


130、什麽造成梯度消失问题? 推导一下。深度学习 DL基础 中


@许韩,来源:https://www.zhihu.com/question/41233373/answer/145404190


Yes you should understand backdrop-Andrej Karpathy


How does the ReLu solve the vanishing gradient problem?


神经网络的训练中,通过改变神经元的权重,使网络的输出值尽可能逼近标签以降低误差值,训练普遍使用BP算法,核心思想是,计算出输出与标签间的损失函数值,然后计算其相对于每个神经元的梯度,进行权值的迭代。


梯度消失会造成权值更新缓慢,模型训练难度增加。造成梯度消失的一个原因是,许多激活函数将输出值挤压在很小的区间内,在激活函数两端较大范围的定义域内梯度为0,造成学习停止。

@张雨石:简而言之,就是sigmoid函数f(x)的导数为f(x)*(1-f(x)), 因为f(x)的输出在0-1之间,所以随着深度的增加,从顶端传过来的导数每次都乘以两个小于1的数,很快就变得特别特别小。


131、什么是梯度消失和梯度爆炸?深度学习 DL基础 中


@寒小阳,反向传播中链式法则带来的连乘,如果有数很小趋于0,结果就会特别小(梯度消失);如果数都比较大,可能结果会很大(梯度爆炸)。


@单车,下段来源:https://zhuanlan.zhihu.com/p/25631496
层数比较多的神经网络模型在训练时也是会出现一些问题的,其中就包括梯度消失问题(gradient vanishing problem)和梯度爆炸问题(gradient exploding problem)。梯度消失问题和梯度爆炸问题一般随着网络层数的增加会变得越来越明显。


例如,对于下图所示的含有3个隐藏层的神经网络,梯度消失问题发生时,接近于输出层的hidden layer 3等的权值更新相对正常,但前面的hidden layer 1的权值更新会变得很慢,导致前面的层权值几乎不变,仍接近于初始化的权值,这就导致hidden layer 1相当于只是一个映射层,对所有的输入做了一个同一映射,这是此深层网络的学习就等价于只有后几层的浅层网络的学习了。


而这种问题为何会产生呢?以下图的反向传播为例(假设每一层只有一个神经元且对于每一层为sigmoid函数)




可以推导出,



而sigmoid的导数如下图,


可见,的最大值是1/4,而我们初始化的权值|W|通常都小于1,因此因此对于上面的链式求导,层数越多,求导结果越小,因而导致梯度消失的情况出现。


这样,梯度爆炸问题的出现原因就显而易见了,即也就是w比较大的情况。但对于使用sigmoid激活函数来说,这种情况比较少。因为的大小也与有关(z=wx+b),除非该层的输入值x在一直一个比较小的范围内。

其实梯度爆炸和梯度消失问题都是因为网络太深,网络权值更新不稳定造成的,本质上是因为梯度反向传播中的连乘效应。对于更普遍的梯度消失问题,可以考虑用ReLU激活函数取代sigmoid激活函数。另外,LSTM的结构设计也可以改善RNN中的梯度消失问题。


132、如何解决梯度消失和梯度膨胀?深度学习 DL基础 中


(1)梯度消失:


根据链式法则,如果每一层神经元对上一层的输出的偏导乘上权重结果都小于1的话,那么即使这个结果是0.99,在经过足够多层传播之后,误差对输入层的偏导会趋于0。


可以采用ReLU激活函数有效的解决梯度消失的情况,也可以用Batch Normalization解决这个问题。关于深度学习中 Batch Normalization为什么效果好?参见:https://www.zhihu.com/question/38102762


(2)梯度膨胀


根据链式法则,如果每一层神经元对上一层的输出的偏导乘上权重结果都大于1的话,在经过足够多层传播之后,误差对输入层的偏导会趋于无穷大。


可以通过激活函数来解决,或用Batch Normalization解决这个问题。


133、推导下反向传播Backpropagation。深度学习 DL基础 难


@我愛大泡泡,来源:http://blog.csdn.net/woaidapaopao/article/details/77806273


首先,要理解反向传播的基本原理,那就是求导的链式法则。




反映到神经网络里:




下面从损失函数开始用公式进行推导。


反向传播是在求解损失函数L对参数w求导时候用到的方法,目的是通过链式法则对参数进行一层一层的求导。这里重点强调:要将参数进行随机初始化而不是全部置0,否则所有隐层的数值都会与输入相关,这称为对称失效。 


大致过程是:


首先前向传导计算出所有节点的激活值和输出值, 



计算整体损失函数: 



然后针对第L层的每个节点计算出残差(这里是因为UFLDL中说的是残差,本质就是整体损失函数对每一层激活值Z的导数),所以要对W求导只要再乘上激活函数对W的导数即可 


 



134、SVD和PCA。机器学习 ML模型 中

PCA的理念是使得数据投影后的方差最大,找到这样一个投影向量,满足方差最大的条件即可。而经过了去除均值的操作之后,就可以用SVD分解来求解这样一个投影向量,选择特征值最大的方向。
PCA的本质是对于一个以矩阵为参数的分布进行似然估计,而SVD是矩阵近似的有效手段。
详见:https://www.zhihu.com/question/40043805


135、数据不平衡问题。机器学习 ML基础 易

这主要是由于数据分布不平衡造成的。解决方法如下:


采样,对小样本加噪声采样,对大样本进行下采样


数据生成,利用已知样本生成新的样本


进行特殊的加权,如在Adaboost中或者SVM中


采用对不平衡数据集不敏感的算法


改变评价标准:用AUC/ROC来进行评价


采用Bagging/Boosting/ensemble等方法


在设计模型的时候考虑数据的先验分布


136、简述神经网络的发展历史。深度学习 DL基础 中


1949年Hebb提出了神经心理学学习范式——Hebbian学习理论
1952年,IBM的Arthur Samuel写出了西洋棋程序
1957年,Rosenblatt的感知器算法是第二个有着神经系统科学背景的机器学习模型.
3年之后,Widrow因发明Delta学习规则而载入ML史册,该规则马上就很好的应用到了感知器的训练中.


感知器的热度在1969被Minskey一盆冷水泼灭了。他提出了著名的XOR问题,论证了感知器在类似XOR问题的线性不可分数据的无力。


尽管BP的思想在70年代就被Linnainmaa以“自动微分的翻转模式”被提出来,但直到1981年才被Werbos应用到多层感知器(MLP)中,NN新的大繁荣。


1991年的Hochreiter和2001年的Hochreiter的工作,都表明在使用BP算法时,NN单元饱和之后会发生梯度损失。又发生停滞。


时间终于走到了当下,随着计算资源的增长和数据量的增长。一个新的NN领域——深度学习出现了。


简言之,MP模型+sgn—->单层感知机(只能线性)+sgn— Minsky 低谷 —>多层感知机+BP+sigmoid—- (低谷) —>深度学习+pre-training+ReLU/sigmoid


137、深度学习常用方法。深度学习 DL基础 中
@SmallisBig,来源:http://blog.csdn.net/u010496169/article/details/73550487


全连接DNN(相邻层相互连接、层内无连接): 

AutoEncoder(尽可能还原输入)、Sparse Coding(在AE上加入L1规范)、RBM(解决概率问题)—–>特征探测器——>栈式叠加 贪心训练 
RBM—->DBN 
解决全连接DNN的全连接问题—–>CNN 
解决全连接DNN的无法对时间序列上变化进行建模的问题—–>RNN—解决时间轴上的梯度消失问题——->LSTM


@张雨石:现在在应用领域应用的做多的是DNN,CNN和RNN。

DNN是传统的全连接网络,可以用于广告点击率预估,推荐等。其使用embedding的方式将很多离散的特征编码到神经网络中,可以很大的提升结果。


CNN主要用于计算机视觉(Computer Vision)领域,CNN的出现主要解决了DNN在图像领域中参数过多的问题。同时,CNN特有的卷积、池化、batch normalization、Inception、ResNet、DeepNet等一系列的发展也使得在分类、物体检测、人脸识别、图像分割等众多领域有了长足的进步。同时,CNN不仅在图像上应用很多,在自然语言处理上也颇有进展,现在已经有基于CNN的语言模型能够达到比LSTM更好的效果。在最新的AlphaZero中,CNN中的ResNet也是两种基本算法之一。


GAN是一种应用在生成模型的训练方法,现在有很多在CV方面的应用,例如图像翻译,图像超清化、图像修复等等。


RNN主要用于自然语言处理(Natural Language Processing)领域,用于处理序列到序列的问题。普通RNN会遇到梯度爆炸和梯度消失的问题。所以现在在NLP领域,一般会使用LSTM模型。在最近的机器翻译领域,Attention作为一种新的手段,也被引入进来。


除了DNN、RNN和CNN外, 自动编码器(AutoEncoder)、稀疏编码(Sparse Coding)、深度信念网络(DBM)、限制玻尔兹曼机(RBM)也都有相应的研究。


138、神经网络模型(Neural Network)因受人类大脑的启发而得名。深度学习 DL基础 易


神经网络由许多神经元(Neuron)组成,每个神经元接受一个输入,对输入进行处理后给出一个输出,如下图所示。请问下列关于神经元的描述中,哪一项是正确的?


  答案:(E)

  每个神经元可以有一个或多个输入,和一个或多个输出。

A 每个神经元可以有一个输入和一个输出

B 每个神经元可以有多个输入和一个输出

C 每个神经元可以有一个输入和多个输出

D 每个神经元可以有多个输入和多个输出

E 上述都正确


139、下图是一个神经元的数学表示。深度学习 DL基础 易


这些组成部分分别表示为:


  - x1, x2,…, xN:表示神经元的输入。可以是输入层的实际观测值,也可以是某一个隐藏层(Hidden Layer)的中间值

  - w1, w2,…,wN:表示每一个输入的权重

  - bi:表示偏差单元/偏移量(bias unit)。作为常数项加到激活函数的输入当中,类似截距(Intercept)

  - a:作为神经元的激励函数(Activation),可以表示为


  - y:神经元输出

  考虑上述标注,线性等式(y = mx + c)可以被认为是属于神经元吗:

  A. 是

  B. 否

  答案:(A)

输入只有一个变量,激活函数为线性。所以可以被认为是线性回归函数。


140、在一个神经网络中,知道每一个神经元的权重和偏差是最重要的一步。如果知道了神经元准确的权重和偏差,便可以近似任何函数,但怎么获知每个神经的权重和偏移呢?深度学习 DL基础 易
 A 搜索每个可能的权重和偏差组合,直到得到最佳值
 B 赋予一个初始值,然后检查跟最佳值的差值,不断迭代调整权重
 C 随机赋值,听天由命
 D 以上都不正确的
答案:(B)
选项B是对梯度下降的描述。


141、梯度下降算法的正确步骤是什么?深度学习 DL基础 易

  A. 1, 2, 3, 4, 5

  B. 5, 4, 3, 2, 1

  C. 3, 2, 1, 5, 4

  D. 4, 3, 1, 5, 2

  答案:(D)

计算预测值和真实值之间的误差

重复迭代,直至得到网络权重的最佳值

把输入传入网络,得到输出值

用随机值初始化权重和偏差

对每一个产生误差的神经元,调整相应的(权重)值以减小误差


已知:
  - 大脑是有很多个叫做神经元的东西构成,神经网络是对大脑的简单的数学表达。
  - 每一个神经元都有输入、处理函数和输出。
  - 神经元组合起来形成了网络,可以拟合任何函数。
  - 为了得到最佳的神经网络,我们用梯度下降方法不断更新模型
  给定上述关于神经网络的描述,什么情况下神经网络模型被称为深度学习模型?深度学习 DL基础 易
  A 加入更多层,使神经网络的深度增加
  B 有维度更高的数据
  C 当这是一个图形识别的问题时
  D 以上都不正确
答案:(A)
更多层意味着网络更深。没有严格的定义多少层的模型才叫深度模型,目前如果有超过2层的隐层,那么也可以及叫做深度模型。


142、使用CNN时,是否需要对输入进行旋转、平移、缩放等预处理?深度学习 DL基础 易
A 需要
B 不需要
答案:(A)
把数据传入神经网络之前需要做一系列数据预处理(也就是旋转、平移、缩放)工作,神经网络本身不能完成这些变换。


143、下面哪项操作能实现跟神经网络中Dropout的类似效果?(B)深度学习 DL基础 易
A Boosting
B Bagging
C Stacking
D Mapping
Dropout可以认为是一种极端的Bagging,每一个模型都在单独的数据上训练,同时,通过和其他模型对应参数的共享,从而实现模型参数的高度正则化。


144、下列哪一项在神经网络中引入了非线性?深度学习 DL基础 易


答案:(B)

修正线性单元是非线性的激活函数。

A 随机梯度下降

B 修正线性单元(ReLU)

C 卷积函数

D 以上都不正确


145、在训练神经网络时,损失函数(loss)在最初的几个epochs时没有下降,可能的原因是?(D)深度学习 DL基础 易
A 学习率(learning rate)太低
B 正则参数太高
C 陷入局部最小值

D 以上都有可能


146、下列哪项关于模型能力(model capacity)的描述是正确的?(指神经网络模型能拟合复杂函数的能力)深度学习 DL基础 易

答案:(A)

A 隐藏层层数增加,模型能力增加

B Dropout的比例增加,模型能力增加

C 学习率增加,模型能力增加

D 都不正确


147、如果增加多层感知机(Multilayer Perceptron)的隐藏层层数,分类误差便会减小。这种陈述正确还是错误?深度学习 DL基础 易

答案:(B)

并不总是正确。层数增加可能导致过拟合,从而可能引起错误增加。

A 正确

B 错误


148、构建一个神经网络,将前一层的输出和它自身作为输入。深度学习 DL模型 易

下列哪一种架构有反馈连接?

答案:(A)

A 循环神经网络

B 卷积神经网络

C 限制玻尔兹曼机

D 都不是


149、在感知机中(Perceptron)的任务顺序是什么?深度学习 DL基础 易


1 随机初始化感知机的权重

2 去到数据集的下一批(batch)
3 如果预测值和输出不一致,则调整权重
4 对一个输入样本,计算输出值
  A. 1, 2, 3, 4
  B. 4, 3, 2, 1
  C. 3, 1, 2, 4
  D. 1, 4, 3, 2
  答案:(D)


原文链接:http://blog.csdn.net/v_JULY_v/article/details/78121924


查阅更为简洁方便的分类文章以及最新的课程、产品信息,请移步至全新呈现的“LeadAI学院官网”:

www.leadai.org


请关注人工智能LeadAI公众号,查看更多专业文章

大家都在看

LSTM模型在问答系统中的应用

基于TensorFlow的神经网络解决用户流失概览问题

最全常见算法工程师面试题目整理(一)

最全常见算法工程师面试题目整理(二)

TensorFlow从1到2 | 第三章 深度学习革命的开端:卷积神经网络

装饰器 | Python高级编程

今天不如来复习下Python基础


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值