七乐彩中奖对照表 七乐彩中奖规则及奖金

深度学习预测曲线

发布时间:2020-09-16      发布人:admin


  从2014年开始,目标检测取得了巨大的突破。目前业界出现的目标检测算法有以下几种:

  本文针对目前主流的目标检测方法进行简单的介绍,文章分为四个部分:第一部分介绍目标检测领域常用的数据集以及性能指标;第二部分介绍R Girshick提出的以R-CNN为代表的结合region proposal和CNN分类的目标检测框架(R-CNN, SPP-NET, Fast R-CNN, Faster R-CNN); 第三部分介绍以YOLO为代表的将目标检测转换为回归问题的目标检测框架(YOLO, SSD); 第四部分介绍一些最新的目标检测算法的进展。

  目标检测常用的数据集包括PASCAL VOC,ImageNet,MS COCO等数据集,这些数据集用于研究者测试算法性能或者用于竞赛。目标检测的性能指标要考虑检测物体的位置以及预测类别的准确性,下面我们会说到一些常用的性能评估指标。

  PASCAL VOC(The PASCAL Visual Object Classification)是目标检测,分类,分割等领域一个有名的数据集。从2005到2012年,共举办了8个不同的挑战赛。PASCAL VOC包含约10,000张带有边界框的图片用于训练和验证。但是,PASCAL VOC数据集仅包含20个类别,因此其被看成目标检测问题的一个基准数据集。

  ImageNet在2013年放出了包含边界框的目标检测数据集。训练数据集包含500,000张图片,属于200类物体。由于数据集太大,训练所需计算量很大,因而很少使用。同时,由于类别数也比较多,目标检测的难度也相当大。

  另外一个有名的数据集是Microsoft公司建立的MS COCO(Common Objects in COntext)数据集。这个数据集用于多种竞赛:图像标题生成,目标检测,关键点检测和物体分割。对于目标检测任务,COCO共包含80个类别,每年大赛的训练和验证数据集包含超过120,000个图片,超过40,000个测试图片。测试集最近被划分为两类,一类是test-dev数据集用于研究者,一类是test-challenge数据集用于竞赛者。测试集的标签数据没有公开,以避免在测试集上过拟合。在COCO 2017 Detection Challenge中,旷视科技团队凭借提出的Light-Head R-CNN模型夺得冠军(AP为0.526 ),看来还是two-stage算法准确度更胜一筹。

  目标检测问题同时是一个回归和分类问题。首先,为了评估定位精度,需要计算IoU(Intersection over Union,介于0到1之间),其表示预测框与真实框(ground-truth box)之间的重叠程度。IoU越高,预测框的位置越准确。因而,在评估预测框时,通常会设置一个IoU阈值(如0.5),只有当预测框与真实框的IoU值大于这个阈值时,该预测框才被认定为真阳性(True Positive, TP),反之就是假阳性(False Positive,FP)。

  对于二分类,AP(Average Precision)是一个重要的指标,这是信息检索中的一个概念,基于precision-recall曲线计算出来。对于目标检测,首先要单独计算各个类别的AP值,这是评估检测效果的重要指标。取各个类别的AP的平均值,就得到一个综合指标mAP(Mean Average Precision),mAP指标可以避免某些类别比较极端化而弱化其它类别的性能这个问题。

  对于目标检测,mAP一般在某个固定的IoU上计算,但是不同的IoU值会改变TP和FP的比例,从而造成mAP的差异。COCO数据集提供了官方的评估指标,它的AP是计算一系列IoU下(0.5:0.05:0.9)AP的平均值,这样可以消除IoU导致的AP波动。其实对于PASCAL VOC数据集也是这样,Facebook的Detectron上的有比较清晰的实现。

  除了检测准确度,目标检测算法的另外一个重要性能指标是速度,只有速度快,才能实现实时检测,这对一些应用场景极其重要。评估速度的常用指标是每秒帧率(Frame Per Second,FPS),即每秒内可以处理的图片数量。当然要对比FPS,你需要在同一硬件上进行。另外也可以使用处理一张图片所需时间来评估检测速度,时间越短,速度越快。

  从Rcnn开始Girshick大神将深度学习引入目标检测领域,后来连续发力,最终将目标检测的所有步骤都统一在了深度学习框架之下,这就意味着所有的计算过程都可以在GPU内进行,从而计算精度和计算速度都有了很大提升。

  R-CNN是基于region proposal(候选区域)方法的目标检测算法系列开山之作,其先进行区域搜索,然后再对候选区域进行分类。在R-CNN中,选用Selective search(选择性搜索)方法来生成候选区域,这是一种启发式搜索算法。它先通过简单的区域划分算法将图片划分成很多小区域,然后通过层级分组方法按照一定相似度合并它们,最后的剩下的就是候选区域,它们可能包含一个物体。

  对于一张图片,R-CNN基于selective search方法大约生成2000个候选区域,然后每个候选区域被resize成固定大小(227×227)并送入一个CNN模型中,最后得到一个4096-d的特征向量。然后这个特征向量被送入一个多类别SVM分类器中,预测出候选区域中所含物体的属于每个类的概率值。每个类别训练一个SVM分类器,从特征向量中推断其属于该类别的概率大小。为了提升定位准确性,R-CNN最后又训练了一个边界框回归模型。训练样本为(P,G),其中P=(Px,Py,Pw,Ph)为候选区域,而G=(Gx,Gy,Gw,Gh)为真实框,G是与P的IoU最大的真实框(只使用IoU大于0.6的样本),回归器的目标值定义为:

  在做预测时,利用上述公式可以反求出预测框的修正位置。R-CNN对每个类别都训练了单独的回归器,采用最小均方差损失函数进行训练。

  R-CNN模型的训练是多管道的,CNN模型首先使用2012 ImageNet中的图像分类竞赛数据集进行预训练。然后在检测数据集上对CNN模型进行finetuning(微调),其中那些与线的候选区域作为正样本,剩余的候选区域是负样本(背景)。共训练两个版本,第一版本使用2012 PASCAL VOC数据集,第二个版本使用2013 ImageNet中的目标检测数据集。最后,对数据集中的各个类别训练SVM分类器(注意SVM训练样本与CNN模型的finetuning不太一样,只有IoU小于0.3的才被看成负样本)。

  总体来看,R-CNN是非常直观的,就是把检测问题转化为了分类问题,并且采用了CNN模型进行分类,但是效果却很好。最好的R-CNN模型在2012 PASCAL VOC数据集的mAP为62.4%(比第二名高出了22个百分点),在2013 ImageNet上的mAP为31.4%(比第二名高出7.1个百分点)。

  (1)selective search进行候选区域提取的过程在cpu内计算完成,占用了大量计算时间。

  (2)对2000个候选框进行卷积计算,提取特征的时候,存在大量的重复计算,进一步增加了计算复杂度。

  在rcnn种需要对2000个候选框进行卷积特征计算,而这2000个候选框是来自与同一张图片的,所以,作者考虑到先对整张图片进行一次卷积计算,得到整张图片的卷积特征,然后依据每个候选框在原始图片中的位置,在卷积特征图中取出对应的区域的卷积特征。再将卷积图中得到的特征向量送入分类器,在这里产生了一个问题,就是每个候选框的大小是不一样的,得到的卷积特征的维度也会不一样,无法送入全连接层,导致分类无法进行,为了将所有候选框的特征维度统一起来,作者就设计了spp-net:

  SPP层原理如下所所示,假定CNN层得到的特征图大小为a×a(比如13×13,随输入图片大小而变化),设定的金字塔尺度为n×n bins(对于不同大小图片是固定的),那么SPP层采用一种滑动窗口池化,窗口大小win_size=⌈a/n⌉,步为stride=⌊a/n⌋,采用max pooling,本质上将特征图均分为n×n个子区域,然后对各个子区域max pooling,这样不论输入图片大小,经过SPP层之后得到是固定大小的特征。一般设置多个金字塔级别,文中使用了4×4,2×2和1×1三个尺度。每个金字塔都得一个特征,将它们连接在一起送入后面的全连接层即可,这样就解决了变大小图片输入的问题了。SPP-net在ImageNet ILSVRC 2014图像分类大赛中夺得了第三名。

  那么SPP-net和R-CNN有什么关系呢?在R-CNN中,由于每个候选区域大小是不同,所以需要先resize成固定大小才能送入CNN网络,SPP-net正好可以解决这个问题。R-CNN每次都要挨个使用CNN模型计算各个候选区域的特征,这是极其费时的,不如直接将整张图片送入CNN网络,然后抽取候选区域的对应的特征区域,采用SPP层,这样可以大大减少计算量,并提升速度。基于SPP层的R-CNN模型在准确度上提升不是很大,但是速度却比原始R-CNN模型快24-102倍。

  在fast-rcnn中作者采用了spp-net的简化版:只对spp-net进行了一种尺度的切分,之后直接下采样,得到特征向量。

  对于每个候选区域,使用RoI pooling层来从CNN特征图中得到一个固定长和宽的特征图(长和宽是超参数,文中选用7×77×7),RoI pooling的原理很简单,其根据候选区域按比例从CNN特征图中找到对应的特征区域,然后将其分割成几个子区域(根据要输出的特征图的大小),然后在每个子区域应用max pooling,从而得到固定大小的特征图,这个过程是可导的。RoI pooling层相比SPP层看起来主要是只使用一个金字塔级别。然后RoI pooling层得到的特征图送入几个全连接层中,并产生新的特征向量,这些特征向量分别用于一个softmax分类器(预测类别)和一个线性回归器上(用于调整边界框位置)来进行检测。在实现上是使用两个不同的全连接层,第一个全连接层有N+1N+1个输出(NN是类别总数,11是背景),表示各个类别的概率值;第二个全连接层有4N4N个输出,表示坐标回归值(tx,ty,tw,th)(tx,ty,tw,th),这个与R-CNN是一样的,每个类别都预测4个位置坐标值。

  用selective search 方法从原始图片中提取2000个候选框(ROI),对整张图片进行卷积计算,得到卷积特征图(conv feature map),然后利用ROI pooling layer从卷积特征图种提取每个候选框的特征向量,通过全连接层之后,特征向量进入两个输出层:一个进行分类,判断该候选框内的物体种类,另一个进行边框回归,判断目标在图中的准确位置。

  所以容易看见,Fast RCNN相对于RCNN的提速原因就在于:不过不像RCNN把每个候选区域给深度网络提特征,而是整张图提一次特征,再把候选框映射到conv5上,而SPP只需要计算一次特征,剩下的只需要在conv5层上操作就可以了。

  对于Fast R-CNN,其仍然需要selective search方法来生产候选区域,这是非常费时的。我们能不能找出一个更加高效的方法来求出这些候选框呢?为了解决这个问题,我们加入一个提取边缘的神经网络,也就说找到候选框的工作也交给神经网络来做了,做这样的任务的神经网络叫做Region Proposal Network(RPN),用RPN来直接产生候选区域。Faster R-CNN可以看成是RPN和Fast R-CNN模型的组合体,即Faster R-CNN = RPN + Fast R-CNN。

  对于RPN网络,先采用一个CNN模型(一般称为特征提取器)接收整张图片并提取特征图。然后在这个特征图上采用一个N×NN×N(文中是3×33×3)的滑动窗口,对于每个滑窗位置都映射一个低维度的特征(如256-d)。然后这个特征分别送入两个全连接层,一个用于分类预测,另外一个用于回归。对于每个窗口位置一般设置kk个不同大小或比例的先验框(anchors, default bounding boxes),这意味着每个位置预测kk个候选区域(region proposals)。对于分类层,其输出大小是2k2k,表示各个候选区域包含物体或者是背景的概率值,而回归层输出4k4k个坐标值,表示各个候选区域的位置(相对各个先验框)。对于每个滑窗位置,这两个全连接层是共享的。因此,RPN可以采用卷积层来实现:首先是一个n×nn×n卷积得到低维特征,然后是两个1×11×1的卷积,分别用于分类与回归。

  为了提取候选框,作者使用了一个小的神经网络也即就是一个n×n的卷积核(文中采用了3×3的网络),在经过一系列卷积计算的特征图上进行滑移,进行卷积计算。每一个滑窗计算之后得到一个低维向量,得到的特征向量,送入两种层:一种是边框回归层进行定位,另一种是分类层判断该区域是前景还是背景。3*3滑窗对应的每个特征区域同时预测输入图像3种尺度(128,256,512),3种长宽比(1:1,1:2,2:1)的region proposal,这种映射的机制称为anchor(锚)。所以对于40*60图片,总共有约20000(40*60*9)个anchor,也就是预测20000个region proposal。

  可以看到RPN采用的是二分类,仅区分背景与物体,但是不预测物体的类别,即class-agnostic(无视类别)。由于要同时预测坐标值,在训练时,要先将先验框与ground-truth box进行匹配,原则为:(1)与某个ground-truth box的IoU最高的先验框;(2)与某个ground-truth box的IoU值大于0.7的先验框,只要满足一个,先验框就可以匹配一个ground-truth,这样该先验框就是正样本(属于物体),并以这个ground-truth为回归目标。对于那些与任何一个ground-truth box的IoU值都低于0.3的先验框,其认为是负样本。RPN网络是可以单独训练的,并且单独训练出来的RPN模型给出很多region proposals。由于先验框数量庞大,RPN预测的候选区域很多是重叠的,要先进行NMS(non-maximum suppression,非极大抑制)操作来减少候选区域的数量,然后按照置信度降序排列,选择top-N个region proposals来用于训练Fast R-CNN模型。

  这样经过多次迭代,Fast R-CNN可以与RPN有机融合在一起,形成一个统一的网络。其实还有另外一种近似联合训练策略,将RPN的2个loss和Fast R-CNN的2个loss结合在一起,然后共同训练。注意这个过程,Fast R-CNN的loss不对RPN产生的region proposals反向传播,所以这是一种近似(如果考虑这个反向传播,那就是非近似联合训练)。应该来说,联合训练速度更快,并且可以训练出同样的性能。

  首先对整张图片进行卷积计算,得到卷积特征,然后利用RPN进行候选框选择,再返回卷积特征图取出候选框内的卷积特征利用ROI提取特征向量最终送入全连接层进行精确定位和分类,总之:RPN+fast-rcnn=faster-rcnn。

  Faster R-CNN将一直以来分离的region proposal和CNN分类融合到了一起,使用端到端的网络进行目标检测,无论在速度上还是精度上都得到了不错的提高。然而Faster-RCNN还是达不到实时的目标检测,预先获取region proposal,然后在对每个proposal分类计算量还是比较大。比较幸运的是YOLO这类目标检测方法的出现让实时性也变的成为可能。总的来说,从R-CNN, SPP-NET, Fast R-CNN, Faster R-CNN一路走来,基于深度学习目标检测的流程变得越来越精简,精度越来越高,速度也越来越快。可以说基于region proposal的R-CNN系列目标检测方法是当前目标最主要的一个分支。

  2.      每个候选框内图像块缩放至相同大小,并输入到CNN内进行特征提取

  3.找到每个候选框在feature map上的映射patch,将此patch作为每个候选框的卷积特征输入到SPP layer和之后的层

  尽管faster-rcnn在计算速度方面已经取得了很大进展,但是仍然无法满足实时检测的要求,因此有人提出力基于回归的方法直接从图片种回归的出目标物体的位置以及种类。具有代表性的两种方法是YOLO和SSD。

  (2) 对于每个网格,我们都预测2个边框(包括每个边框是目标的置信度以及每个边框区域在多个类别上的概率)

  (3)根据上一步可以预测出7*7*2个目标窗口,然后根据阈值去除可能性比较低的目标窗口,最后非极大值抑制去除冗余窗口即可。

  可以看到整个过程非常简单,不需要中间的region proposal在找目标,直接回归便完成了位置和类别的判定。

  YOLO的网络结构图,前边的网络结构跟GoogLeNet的模型比较类似,主要的是最后两层的结构,卷积层之后接了一个4096维的全连接层,然后后边又全连接到一个7*7*30维的张量上。实际上这7*7就是划分的网格数,现在要在每个网格上预测目标两个可能的位置以及这个位置的目标置信度和类别,也就是每个网格预测两个目标,每个目标的信息有4维坐标信息(中心点坐标+长宽),1个是目标的置信度,还有类别数20(VOC上20个类别),总共就是(4+1)*2+20 = 30维的向量。这样可以利用前边4096维的全图特征直接在每个网格上回归出目标检测需要的信息(边框信息加类别)。

  Yolo方法的缺点显而易见,虽然舍弃了Region proposal阶段,加快了速度,但是定位精度比较低,与此同时带来的问题是,分类的精度也比较低。

  鉴于yolo定位精度低的缺陷,SSD 结合faster-rcnn的archor机制和yolo的回归思想进行目标检测,使得定位精度和分类精度相较与yolo都有了大幅度的提高。

  上图是SSD的一个框架图,首先SSD获取目标位置和类别的方法跟YOLO一样,都是使用回归,但是YOLO预测某个位置使用的是全图的特征,SSD预测某个位置使用的是这个位置周围的特征(感觉更合理一些)。那么如何建立某个位置和其特征的对应关系呢?可能你已经想到了,使用Faster R-CNN的anchor机制。如SSD的框架图所示,假如某一层特征图大小是8*8,那么就使用3*3的滑窗提取每个位置的特征,然后这个特征回归得到目标的坐标信息和类别信息(图c)。不同于Faster R-CNN,这个anchor是在多个feature map上,这样可以利用多层的特征并且自然的达到多尺度(不同层的feature map 3*3滑窗感受野不同).

  首先第一步和其他方法一样利用卷积操作提取卷积特征,在最后级层卷积时候开始对与每一种尺度上的特征图运用archor方法进行候选框提取,依据archor在不同尺度上得到的候选框,进行目标种类和位置的判断。

  ssd和yolo采用了回归方法进行目标检测使得目标检测速度大大加快,ssd引入faster-rcnn的archor机制使得目标定位和分类精度都较yolo有了大幅度提高。基于回归方法的目标检测基本达到了实时的要求,是目标检测的另一个主要思路。

  1、结合上下文特征进行目标检测。对于某一类物体,它的周围出现的内容将很好的对其位置进行锁定。

  2、多特征融合。除了利用高维的卷积操作之后的特征之外,同时应该结合低维的卷积特征进行目标检测检测,以便更好的利用细节信息。

  3、使用循环神经网络(RNN)进行目标检测。目前主流的图像处理方法一般都是基于cnn的,其实RNN的很多特性或许能在目标检测问题上产生意想不到的效果。例如Girshick的Inside-Outside-Net。

  大家好,我是李建,目前是清华大学交叉信息研究院的助理教授、博士生导师,也是杉数科技的合作科学家。很高兴认识大家,并在这里进行分享。

  我先做个简单的个人介绍。我来自于清华大学交叉信息研究院,因为我们院是2011年成立的,时间还比较短,可能有些朋友不是很了解。我们院是姚期智院士建立的,姚其智院士是我国唯一的图灵奖获得者,图灵奖是计算机科学的最高奖。他在2005年从普林斯顿大学辞去职位,回国全职到清华创立姚班,也就是我们叉院的本科生班,也被称为清华大学计算机科学实验班。大家以后可能会常遇到叉院、姚班的同学、老师,希望多多关照。

  我合作的杉数科技,是由斯坦福大学教授叶荫宇老师和斯坦福大学几位博士罗小渠、葛冬冬、王子卓联合创办的。叶教授是冯诺伊曼奖的得主,冯诺伊曼奖是运筹管理学里面最高奖。杉数科技主要为企业提供大数据的解决方案,包括为企业提供优化和机器学习的算法引擎,供应链优化,金融方面的比如说风险管理、收益管理,还有定价的一些问题。在算法引擎上,杉数可以帮企业搭建机器学习解决方案,他们开发的机器学习引擎优化算法在单机版上比目前市面上开源的软件能快几十倍。

  我个人的研究方向是理论计算机科学,主要是算法设计,最近几年我也做了一些机器学习和深度学习方面的工作。一会儿给大家分享一下我们在深度学习应用在时空大数据分析方面的一些研究工作,和我个人的一些想法和体会。

  相信大家已经被深度学习刷屏了,它已经在比如图象识别、语音识别、围棋、扑克……很多领域取得了巨大的成功,引起了多个领域革命性的变化。我今天要讲的跟以上所列都不同,将把重点放在时空大数据分析。

  什么是时空大数据呢?大家请看下面这张图。时空大数据有很多的种类,比如说GPS的定位数据,比如说网约车 ——滴滴、Uber的订单的数据,社会网络上的数据,更宏观的国民经济的数据,比如人口密度、人口迁徙的数据。这些数据的共同特点是它既有时间的属性也有空间的属性。

  我们可以考虑有多个时间序列,其中每个时间序列是由一个不同的空间产生的。每个时间序列自身有时间上的依赖关联,而这些时间序列之间也有空间的一些关联。时空大数据的空间上的关联,跟图像上的空间关联有些相似,但也有很多不同,后者的关联是非常均匀的,或者说具有平移不变性,比如说一只狗的图像,在这里放是一只狗的图像,平移一下他还是那一只狗的图像。对于时空大数据就不一样了,比如北京的一条路和天津的一条路,甚至二环上的一条路和三环上的一条路表现可能是完全不一样的,这里面还有许多其他的因素在影响。比如说交通,影响交通的有天气,有PM2.5,有节假日,有其他特殊事件……这些都可能影响我们做预测。多种影响因素导致数据源可能也有很多,如何整合这些数据源也是一个很大的挑战。另外一个不同点是,时空大数据有可能噪音非常大。

  因为有很多不同的影响因素,所以对一些问题,即使人也很难做出判断,这和我们看到的图像分类、机器翻译很不同,因为对这些问题我们至少人可以把它做得比较好,对于时空大数据的预测问题是人都很难进行判断的,反而是机器学习能够做得更好一点。

  **应用深度学习进行时空大数据挖掘,第一个挑战就是如何抓住时空的关联性。**这里面涉及到几个问题:第一,你用什么样的学习框架,监督学习还是非监督学习,还有多任务学习、在线学习、增强学习……很多种方法,你用哪一种框架。这里并没有一个很成熟的做法,比如图像就用CNN;第二,你想用深度学习,什么样的网络结构比较好;第三,我刚才说了有很多的数据源,不同的数据源会产生不同的因子,我们如何构造一个网络,能够将这些不同质的因子综合起来,并且希望这个网络能够易于拓展,易于应用;第四,我们可能还要处理一些噪音很大,或者说数据缺失的问题。

  我们这个工作实际上是基于前一段时间滴滴公司的一个大数据竞赛。滴滴公司提供了一个月某个城市所有订单的资料,以及其他的一些比如说天气、PM2.5,还有一些路况的信息。具体的任务是,在他给定的几个区域内,对每个区域,你去预测未来15分钟有多少个订单将不会被满足,也就是说需求减去供给。

  这个问题对于滴滴来说很重要,因为如果一个地方有很多订单没有被满足的话,他可能事先去调派一些出租车,使得供需达到平衡。另外对他们定价也有很重要的作用。这样的问题就是一个典型的时空大数据的预测问题。这个订单既有时间的属性,也有空间的属性,另外还有其他许多因素。这个问题并不简单,有很多数据源,有些数据源数据缺失也比较严重。

  这里面我们发现有很多挑战,比如下面这张图中,这两个不同的位置的需求模式是非常不一样的。而且,有一些突发的事件,像需求突然增大,想抓住这种突然增大的趋势,也是有一定难度的。

  传统的方法,比较常用的有线性回归、逻辑回归、支持向量级、gradient boosting、随机森林等,这些方法在实际应用想要达到比较好的效果,一个很重要的工作就是要做很大量的特征工程,就是挖掘很多有预测能力的特征,有时甚至是很奇怪的特征,这些特征是可能对预测有帮助的因子。想达到一个非常有竞争力的效果,通常需要做很多很多这样不同的因子,而且有些因子实际上看起来并没有什么道理,或者讲不清楚有什么道理,但有时也有一定效果。一般来说参加这种机器学习比赛的队伍大多用gradient boosting的方法,很多队伍都做了大量人工的因子,有的甚至都做了几百个因子。我们用深度学习的初衷,就是它有自己提取特征的能力,我们希望减小特征工程的人工的工作量,希望是只做一些基本的特征工程,也能达到一个非常有竞争力的预测的准确度。

  同时我们也希望做一个比较易用的框架,使得我们比较容易的将不同类型的数据整合起来,比如说订单数据、日期数据、位置数据、天气等数据,都是不同质的,有些是数值型的,有些是种类,应该有一个方法,把它们的信息非常容易的都综合在一起。此外,每个数据源里面不同的数据有不同的预测能力,你得把里面的信息都抽取出来。再者,这些模块也希望比较灵活的,你可以往里添加模块,也就是添加数据源,有时有些信息可能是冗余信息,它并没有提供新的预测能力,即使添加了这个模块,也不会增加你的准确度,但是你也希望它不会影响降低准确度。

  下面这张图,就是我们后面做的深度学习的一个大的网络框架的示意图。大家可以看到,我们有几个大的模块,每一个模块处理不同类型的数据。order part就是处理订单数据,Environment part处理环境信息,如路况、天气等,还有Identify part就是处理时间,位置的ID就是我们要预测的时间和地点。我们最后是得到了一个端到端的一个模型,就是说我们能够直接将这些原始数据做简单的处理统计,然后就可以输入到这个网络里,然后这个网络就会从不同的数据源里抓取有预测能力的信息,最后给出比较准确的预测。

  我们这里面用了一个小技巧,就是在不同模块之间用了一个residual link,就是残差的连接,这个连接是由深度残差网络这个工作启发得到的,深度残差网络在钛坦白昨天的分享中秦涛博士也提到了(相关文章:),是微软亚洲研究院做的一个很有名的工作,他们用这种残差的连接可以训练几百甚至上千层深度学习的网络。我们这里面的残差链接是从他们的工作受启发,但是我们的目的有所不同,一是为了方便优化,这是跟他们一样的。但另外一点,我们是希望能够使这些模块更容易的进行添加和删除。比如说你现在添加一个模块你直接加进来,比如里面有一个模块没有什么有预测能力的信息,实际上等价于一个权重为零的层,相当于信息直接从这个模块跳过去了,也不影响你的预测能力。

  我们每个模块有不同的设计方法,下面这张图是我们订单数据的一个大致的结构。我们希望对比较典型的几个不同数据类型,设计比较通用和易用的几个网络结构来处理这些数据。

  另外,在实际案例中,周一的订单和周二的订单、周日的订单的模式可能是完全不同的。一种方法是把周一的数据拿过来训练一个模型,对周二数据拿过来训练一个模型,我们的做法是,把他们都加在一起进行训练,但是给他们每一天有一个不同的权重,这个网络会自动的把这些权重学出来。

  下面这张图就是我们神经网络的预测效果,跟其他传统方法进行了比较,我们用的一样的特征。我们网络的一个前期的版本参加了滴滴的预测大赛,一共有1600多个队伍参加,我们获得了第二名。而且据我们所知,在前十名队伍里面只有我们一个队伍是用的深度学习的方法。所以说在时空大数据预测方面,深度学习还是有很潜力的。在比赛以后,我们又把这个网络的模块化、易用性、准确度做了进一步的提升。

  下面这张图显示的是供给减去需求的曲线,大家可以看到,有很多突然出现的波峰,表示一个突发的打车高峰,比如说一个突发的事件来了,突然这个地方有很多打车的人,结果没有打到,就会有一个峰值。虚线是真实的值,蓝线是我们的预测,红线是大家常用的gradient boosting的方法预测的值。大家可以看到,神经网络抓这种峰值的能力还是比较强的。

  同时我们认为,这个技术还可以应用到其他的供需、流量预测的这类问题上。杉数科技目前正在帮助国内某大型物流公司解决供应链问题,流量预测也是其中的一个很重要的环节,我作为杉数的合作科学家也在一起帮助解决这样的一个问题。深度学习是我们认为解决这个问题的一个非常好的解决方案。

  这个任务具体是,你给定一个点作为起点,给定另外一个点作为终点,给出你起始的时间,我们要预测你走这条路需要花多少时间。实际上目前比如说地图、滴滴这些应用上都有这样的功能。现在出行时间的预测是根据当时的路况,但是假如我们从清华到朝阳的某个地方,路线比较长,可能当时某一段路是比较堵的,但我们开到那边其实已经不堵了,实际上我们实际的出行时间就比当时的预测要短。所以我们考虑用机器学习的方法来进行预测,而不是只用当时的路况进行预测。

  前段时间有个数据城堡大数据预测比赛。在这个比赛里面,数据和前面的供需预测有很多相似的地方,但有一点重要的不同,就是要考虑轨迹的数据。也就是训练数据包含很多历史上开车的轨迹,这些轨迹都是GPS点,这些点上有时间的属性和空间的属性。

  下面这张图是我们的大致的网络结构。这个结构跟我们前面的有些相似,也是模块化的,就是每种不同类的数据我们有一个模块去处理它。这里一个重要的不同就是有一个处理轨迹数据的新的模块(在图右上角),我们应用的是两层的LSTM结构,还有一些其他的技巧,比如说刚才提到的残差网络连接的这样一些技巧来连接模块。

  下面这张图,就是我们深度神经网络的预测效果,最后我们这个比赛是拿到了第三名。虽然不是第一,但是我们认为达到了预期的效果。首先我们并没有花很多精力去做特征工程,这是跟其他队伍非常不一样的。另外我认为我们这种模块化设计是比较通用的。另外我们的准确率也很有竞争力,前几名的的准确率都是非常非常接近的。

  这个项目我们没有用到深度学习,但这是一个应用时空大数据比较好的例子。这是我们跟的大数据研究院合作的一个项目,应用了移动端的数据还有糯米、地图的一些数据。我们主要的目的是商店选址。比如说你想开一个咖啡店,我们来帮助你选择在什么地方开店比较好。

  找出已经有的店,然后计算出一个竞争的模型,就是每个地方你会有多少相似的店跟你竞争,然后这些店已经能够吸收多少需求;

  找出这种供给和需求差比较大的一些这些地点,然后进行聚类,找出聚类的中心;

  我们做完这个项目做了一些实地的调研。下面这张图,我们预测了一个地点适合开海底捞,其实在我们做这个工作前面两个月就开了一家店海底捞,距离我们预测的地点非常近:

  我们有用户移动端的很多GPS数据,也有一些到店登录Wifi的数据,还有糯米的其他类相关的数据,我们目的是给定他当前的地点,我们想去预测他实际上是去了哪个店。

  这件事情你可能认为挺简单,已经知道了地点你还不知道去了哪个店,但是实际上并不是那么简单,比如说你去了大悦城,里面有很多家店。你只知道一个大致的GPS地址,这个该怎么预测?我们预测的依据实际上是这个用户的历史信息,这个用户可能历史上去过某些店,将来很可能也去一些相似的店,另外有些相关性,比如说某些用户和某些用户的轨迹非常相似,有相关性,这种信息也会帮助我们进行预测。

  这个预测我们也是用的深度神经网络,我们应用了跟前面很相似的处理轨迹信息的模块,最后也达到了比较好的效果。下面这张图就是我们这个方法预测的准确率,三就代表我们预测三个里面有多少准确的。预测一个基本上可以做到50%左右的准确率,如果预测5个就比较高,就可以做到80%的准确率。

  我下面简单谈一下其他相关的问题,和我们计划下一步做的一些东西,不一定是深度学习。其中一个就是在线学习和增强学习。我刚才说的都是用时空大数据来做分析和预测,在现实应用中,预测只是帮助我们来进行决策。现在一般的方法是将预测和决策进行分离。我们先进行预测,然后再进行决策。决策往往是一个优化问题。

  但是**我们现在想利用在线学习和增强学习这些强大的工具,将预测和决策这两个东西结合起来。**另外在线学习能够得到这个预测和决策的关系。一般说来,我们当然预测的越准确越好。但实际上有时候不需要预测到多准确,或者只对问题的某个方面而不是全部有好的预测,就已经可以做很好的决策了。

  在在线学习里面有一个很著名的问题叫专家问题,就是说假设一个游戏有T轮,有N个不同的专家,每个专家在每一轮都会给我们一些不同的建议,我们每一轮要决定听哪个专家的。但是在那个专家做建议的时候我们实际上不知道他这个建议好还是差的。我们只知道以前这个专家做的建议都是好还是不好。在线学习会告诉我们每轮去听哪个专家的建议。最后我们想达到一个什么效果呢?我们可以达到在整个T轮中,我们的表现可以和最好的那个专家差不多。

  专家问题有一个变种,就是下面这张图片。这个图片上面的人物是一个非常著名的信息论学家,他叫Thomas Cover,前几年过世了。他有一篇很著名的文章叫《Universal Portfolios》,可能翻译成普遍投资组合。这个是个什么问题呢?实际上跟专家问题非常相关的,他实际上考虑的是一个大家更感兴趣的问题就是股票的投资组合,就是说我现在假设有N个股票,我怎么样来进行投资,在这个股票中分散我的投资。目标是使得我最后的效果跟最好的那个股票比都不差。

  Thomas Cover用的是很巧妙的乘法权重调整的方法,然后在不同股票数据中间做投资组合。实际上,不同股票数据也可以被认为是一种时空大数据,就是我们每个股票是个时间序列,不同股票之间也有一个空间上的相关性,比如说相同板块的股票表现有一定的相似性,不同板块独立性就比较强,这个是空间关联性。Thomas Cover就为我们预测加决策的这个在线学习方法提供了一个很好的基础。在当时,Thomas Cover因为这个算法非常兴奋,就根据他的算法去开了一个对冲基金,好像效果还是不错的。

  在线学习还有一个很著名的问题叫多臂问题。假设我们有N个不同的,每个实际上是有一个奖励的概率分布。你可以把它想成一个随机变量,你每拉一次,相当于从随机变量中取一个样本。你是希望找到最好的,也就是平均奖励最高的,这个实际上就是一个学习和决策结合的这样一个过程。事先我们并不知道这些的概率分布,我们需要学习,但最后我们需要决策把最好的找出来。

  多臂问题的算法就是说我们实际上并不需要都把所有的都学习得很好,我们不需要对所有的估计准确率都很高,我们只需要对比较好的的准确率比较高就可以,就可以做很好的决策了,而那些比较差的我们不需要学习到多好。那么这个多臂问题也是控制优化,在线学习里面一个很经典的问题,也有很多很多的应用,我认为也是我们做时空数据学习加决策的这样一个很好的框架。

  另外一个我认为比较有意义的时空大数据的研究方向就是生成模型。比如说我们如何虚拟的生成订单数据,或者我们虚拟生成交通流量,或者虚拟市场交易数据。那么有了这个生成模型,我们才能说我们完全理解了这个模型。一方面生成模型能帮助我们理解,另一方面我们如果有了生成模型,我们就能够用它来模拟新的环境。另外能用它来生成新的数据,来进行训练,就相当于是增多了我们的训练数据,也可以用来测试新的场景。有很多传统的时间序列和空间计量经济的模型,比如说时间序列模型,大家可能知道线性的ARMA模型还有GARCH模型,比如还有一些随机过程,比如说空间点过程模型,但是这些模型都是相对简单,可能很难抓住一个实际复杂的有很多因素决定的过程,其中有很多非线性的特征和细节。我们可能需要利用深度学习生成模型去抓住这种复杂的过程。比如说用深度学习里的authencoder,比如说更新的对抗生成网络这样一些生成模型。

  (本文独家首发钛媒体,根据清华大学交叉信息研究院助理教授、博士生导师、杉数科技科学家李建在钛坦白上的分享整理)

  加载示例数据。chickenpox_dataset包含一个时序,其时间步对应于月份,值对应于病例数。输出是一个元胞数组,其中每个元素均为单一时间步。将数据重构为行向量。

  data = chickenpox_dataset;%加载数据集 chickenpox_dataset是一个函数 data = [data{:}];%将数据集变为数组的形式,此时得到的是一个1*n维的数组,n代表n个时刻,其中存储的是每个时刻的值,即对于时序预测,只有发生的顺序,不存在实际的时间 figure %创建一个用来显示图形输出的一个窗口对象。各种属性都使用的默认设置  plot(data) %若data是向量,则以data的分量为纵坐标,以元素序号为横坐标,用直线以此连接数据点,绘制曲线。若y为实矩阵,则按列绘制每列对应的曲线 xlabel(Month) %纵坐标的名称 ylabel(Cases) %横坐标的名称 title(Monthy Cases of Chickenpox) %曲线图的标题

  对训练数据和测试数据进行分区。序列的前 90% 用于训练,后 10% 用于测试。

  为了获得较好的拟合并防止训练发散,将训练数据标准化为具有零均值和单位方差。在预测时,您必须使用与训练数据相同的参数来标准化测试数据。

  要预测序列在将来时间步的值,请将响应指定为将值移位了一个时间步的训练序列。也就是说,在输入序列的每个时间步,LSTM 网络都学习预测下一个时间步的值。预测变量是没有最终时间步的训练序列。

  指定训练选项。将求解器设置为adam并进行 250 轮训练。要防止梯度爆炸,请将梯度阈值设置为 1。指定初始学习率 0.005,在 125 轮训练后通过乘以因子 0.2 来降低学习率。

  要预测将来多个时间步的值,请使用predictAndUpdateState函数一次预测一个时间步,并在每次预测时更新网络状态。对于每次预测,使用前一次预测作为函数的输入。

  要初始化网络状态,请先对训练数据XTrain进行预测。接下来,使用训练响应的最后一个时间步YTrain(end)进行第一次预测。循环其余预测并将前一次预测输入到predictAndUpdateState。

  对于大型数据集合、长序列或大型网络,在 GPU 上进行预测计算通常比在 CPU 上快。其他情况下,在 CPU 上进行预测计算通常更快。对于单时间步预测,请使用 CPU。要使用 CPU 进行预测,请将predictAndUpdateState的ExecutionEnvironment选项设置为cpu。

  训练进度图会报告根据标准化数据计算出的均方根误差 (RMSE)。根据去标准化的预测值计算 RMSE。

  如果您可以访问预测之间的时间步的实际值,则可以使用观测值而不是预测值更新网络状态。

  首先,初始化网络状态。要对新序列进行预测,请使用resetState重置网络状态。重置网络状态可防止先前的预测影响对新数据的预测。重置网络状态,然后通过对训练数据进行预测来初始化网络状态。

  对每个时间步进行预测。对于每次预测,使用前一时间步的观测值预测下一个时间步。将predictAndUpdateState的ExecutionEnvironment选项设置为cpu。

  曲线拟合常用到polyfit(多项式拟合函数)、lsqcurvefit(非线性拟合函数)、BP神经网络

  legend(‘网络输出平均工资’,’实际输出平均工资’);%对两条曲线的标识(通常在右上角)

  神经网络就是用向量乘法并广泛采用符号函数及各种逼近。并行、容错、可以硬件实现和自我学习特性。都是它的一般优点和特点。

  3.BP(BackProgation)神经网络按误差逆传播算法训练的多层前馈网络,能学习和存储大量的输入-输出模式映射关系。

  有两个,logsig(n)和tansig(n)两个函数图像是否对应着 归一化【0,1】和归一化【-1,1】??

  legend(‘病毒感染预测输出’,’病毒感染实际输出’);%对两条曲线的标识(通常在右上角)

  end存在的问题:与一个输入参数比较,主要预测时出的结果有问题。会出现4个。一个变量时,anew 1,anewn 1,pnew 4,pewne 4

  背景知识最近再看一些量化交易相关的材料,偶然在网上看到了一个关于用RNN实现股票

  的文章,出于好奇心把文章中介绍的代码在本地跑了一遍,发现可以work。于是就花了两个晚上的时间

  算法的可靠性、可移植性、效率进行评估。简单来说,算法测试主要做的是三件事:收集测试数据,思考需要什么样的测试数据以及数据的标注...

  :准确率(Precision)、召回率(Recall)、F值(F-Measure)、ROC

  增注:虽然当时看这篇文章的时候感觉很不错,但是还是写在前面,想要了解关于机器

  度量的几个尺度,建议大家直接看周志华老师的西瓜书的第2章:模型评估与选择,写的是真的很好!! 以下第一部分内容转载自:...

  铁路客运时间序列,代码在tensorflow 1.3上调试运行通过,解决了网络相关资源的一些坑(很多资源不是tensorflow的版本太旧就是数据与铁路客运数据不太匹配,难以直接运行测试),不需要建立train模型和...

  股票未来的走势,看了网上不少别人分享的案例,也实际进行了测试,感觉用 LSTM 算法比较适用。长短期记忆网络(LSTM,Long Short-Term Memory)是一种时间循环神经网络,是为了...

  问题描述 拟合y= xx -2 x +3 + 0.1*(-1到1的随机值)

  曲线) 问题分析 在上篇博客中,我们使用最简单的y=wx+b的模型成功拟合了一条直线,现在我们...

  + tensorflow 解决一个具体的问题。 实际上,这是一个分类问题,即将输入的图片数据分成 0-9 共 10 个类别,...

  文章来源:ATYUN AI平台 当病人被送进医院时,可能想问很多问题,比如:我什么时候能回家?...那么在你通勤时

  本课程在windows下搭建CPU版本Caffe环境,便于初学者学习和调试。...介绍了

  网络训练的原理,结合Caffe的前向、反向传播的实现进行验证;最后修改一个已有的网络模型,使用项目上更常用的方式进行网络训练。

  拟合) %matplotlib inline import os os.environ[KMP_DUPLICATE_LIB_OK]=TRUE import numpy as np ...

  股票价格变动的完整过程。我们将使用生成对抗网络(GAN)与LSTM(一种循环神经网络)作为生成器,使用卷积神经网络CNN作为鉴别器。我们使用LSTM的原因很明显,我们正在尝试

  一只小狐狸带你解锁NLP/ML/DL秘籍来源:机器之心谷歌研究员提出使用机器

  未来短时间内的天气。此方法虽然处于早期发展阶段,但效果已经优于传统模型。前言天气总是会或轻或重地影...

  来源:AISHWARYA SINGH, 2018年10月25日翻译:赵雪尧校对:车前子本文约8000字,建议阅读15+分钟。本文介绍了如何运用

  的结果都是0,1,要不就是1到46中任意一个数,这些结果都是离散化,相互间不兼容。我们这节要用神经网络对输入...

  的项目,除了模型的选择及网格搜索进行选择参数的相关知识外,还着重复习了关于

  来源:AISHWARYA SINGH, 2018年10月25日;翻译:赵雪尧;校对:车前子本文约8000字,建议阅读15+分钟。本文介绍了如何运用