所有由admin发布的文章

如何用自动驾驶系统工具箱设计和验证多目标跟踪算法 | 硬创公开课

雷锋网按:2017 年 6 月 28 日至 6 月 29 日,「第四届中国智能网联汽车技术年会「(CICV 2017)将于上海举办。为提前引发行业对会议议题的思考和讨论,雷锋网新智驾与中国汽车工程学会合作组织公开课,邀请智能网联汽车行业专家以及从业者分享相关成果和观点。

MathWorks 今年推出自动驾驶系统工具箱(ADST),借助这个新的工具箱提供的一系列设计和验证工具,能够更快速地开发感知算法,并简化算法的验证工作。

本文内容是 MathWorks 应用工程师王鸿钧在雷锋网与中国汽车工程学会组织的公开课上的分享。由雷锋网编辑与整理。

本期公开课要点:

  • 自动驾驶系统工具箱简介

  • 多目标跟踪原理

  • 使用自动驾驶系统工具箱设计多目标跟踪算法

  • 使用基准真值标注工具分析计算结果

  • 算法的实时验证技术

我们来回顾一下主动安全和自动驾驶系统的开发流程。

首先,我们会有一个系统的需求。然后,我们会在系统需求的基础上进行感知算法与控制算法的设计。感知算法包括了图象、雷达、GPS 以及一系列传感器的采集、目标检测以及感知算法。控制算法主要包括控制策略与控制执行部分。

开发完算法之后,我们需要进行系统的集成、测试和验证,然后自动生成代码,最后进行代码的测试和系统最终确认验证。

传感器融合与多目标跟踪的算法,其实是处于感知算法和控制算法中间的部分,对于控制工程师来说,我们需要对感知的传感器信息进行处理,得到用于控制的输入信息。这就是我们的工作。

MathWorks 在最新的 2017A 版本中推出了一个全新的自动驾驶系统工具箱,它希望为从事自动驾驶以及主动安全系统设计的工程师提供一系列加速自动驾驶系统及主动安全系统开发的工具。

主要包括三方面:

第一,测试与验证工具,包括真实值标签与场景生成;

第二,算法开发工具,包括传感器融合与目标跟踪,和视觉系统设计工具;

第三,可视化工具,包括鸟瞰图工具,以及雷达点云工具。

目标跟踪原理

什么是目标跟踪?要进行控制,首先必须从真实的世界采集到一定的信息,根据信息进行闭环控制。

我们要从真实的世界进行感知,感知部件包括一系列传感器,比如雷达、视觉、激光雷达等等。然后,我们需要在感知的基础上,对真实的世界进行估计。

这就是我们要介绍的目标跟踪等相关算法和传感器融合。

先介绍一些概念:

真实值指的是物体的实际运动。检测指的是通过传感器获得的含有分类属性的一系列目标列表,检测通常是根据时间的序列来完成的。

比如上图右版部分 6 个时刻,我们分别检测到了一系列目标:红色和蓝色代表车辆,绿色是行人。当然,检测的时候还可能出现一些问题,比如黑色的点就是我们没有办法对它进行分类的目标,黄色的点属于虚景,但是我们在实际检测的时候是不知道的,所以我们也把它归类为没有分类的目标。

其实从 T0 时刻一直到 T2、T3、T4、T5 时刻,我们对目标检测情况进行一系列分析,通过跟踪算法对物体进行实际运动估计。

在 T0 时刻,我们成功检测到了蓝色的车辆与绿色的行人,那么我们就将它作为车辆与行人跟踪。但是我们没有检测到红色车辆,所以我们添加了两个灰色的点进行试探性跟踪。

在 T1 时刻,我们观测到了红色车辆,所以我们现在确认了灰色跟踪当中其中一个是车辆,但另一个没有确认的跟踪,我们把它删除了。

T3 时刻,我们并没有观测到行人,但是我们通过预测,把被遮挡的行人目标预测出来,也把它作为跟踪的一部分。

T4 时刻,红色和蓝色的车辆离开了观测范围,所以我们对离开的目标位置也进行了预测。

最后,红色和蓝色的车辆都离开了观测范围,行人也穿过了马路,于是我们完成了对这三个物体的跟踪,我们将跟踪从我们跟踪的列表当中删除。

如果以上介绍过于抽象,我们在 2017A 自动驾驶系统工具箱当中提供了一个前向碰撞预警的 Demo。你们可以通过这个 Demo 来形象地了解到跟踪器是如何工作的。

  

视频当中通过右侧的鸟瞰图可以发现蓝色的是视觉目标,红色是雷达目标,方块形状是我们跟踪的目标。

我们会对车辆进行检测,然后将最近的最有可能发生碰撞的目标作为 MIO(最重要目标),防撞预警系统会对它进行监测并进行告警。

多目标跟踪算法

现在我们看到的是前向碰撞预警系统算法的框图,我们可以通过雷达目标与视觉目标进行传感器的融合以及卡尔曼滤波完成跟踪器的工作。

然后,我们会对跟踪到的目标进行威胁评估,最后得到 MIO,进行防撞预警。预警的结果还可以输入给 AEB(自动刹车系统)来进行控制处理。

我们可以借助计算机视觉工具箱当中代价矩阵的方法将雷达目标与视觉目标进行配对:根据配对的结果将匹配的雷达与视觉目标进行融合。

我们可以通过以下的函数来实现:

实际的跟踪算法会通过卡尔曼滤波来实现。卡尔曼滤波的含义或者是公式可能有些人比较熟悉,它就是通过前状态和协方差来对当前的状态进行预测,通过当前的测量值去更新当前的状态,将更新的状态进行输出。

在计算机视觉工具箱当中同样提供了卡尔曼滤波的函数。

实际多目标的跟踪,远远比一个卡尔曼滤波器更为复杂,因为它涉及到了我们提到的传感器融合,以及多目标跟踪管理,包括跟踪的初始化、确认、预测。

比如,刚才提到的可能会有一些未确认的目标,但是我们同样也要对这些目标进行跟踪。同时有些目标会被遮挡,我们要对被遮挡的目标进行预测。所以现在我们看到的就是一个完整的多目标跟踪器的逻辑。

上图,分别是目标检测数据需要包括的信息、目标跟踪数据能够提供的信息。

这些信息包括了时间测量值、测量噪声、传感器编号、目标 ID、目标属性等等。我们最后得到的跟踪数据包括了跟踪的 ID、时间、年龄、状态、协方差、确认标志、遮挡标志、目标类别的 ID 以及目标属性(如果大家对以上的信息还有疑问的话,在我们的帮助文件里会有更详细的描述)。

介绍一下多目标跟踪器的层级,一共分为三个层级。

第一,顶层与用户的交互界面,它同时负责分配多个检测到多个跟踪,进行这样一个匹配,以及维护跟踪的列表,进行新建或者是删除跟踪。

第二,对单个跟踪来说,会处理对单个跟踪的多个检测,就是完成传感器融合的算法,同时也会负责单个跟踪的确认与删除,以及维护跟踪的 ID 分类等信息。

第三,跟踪滤波器,用户自定义的滤波器,负责处理测量产生的滤波器更新,以及维护滤波器的状态和协方差。

对于非线性的扩展卡尔曼滤波或者无界卡尔曼滤波,用户还需要定义这一时刻的状态转移函数与测量函数,它取决于用户对目标模型的分析情况。

比如,目标运动状态,是否是匀速、匀加速或者是其他运动状态。

同时用户还需要配置跟踪器的其他属性,包括确认跟踪的阈值、被遮挡的更新次数、传感器的数量以及最大数量的跟踪数量等等。

简单介绍检测到跟踪的分配以及传感器的融合是如何实现的。

图一显示的是目标前一时刻的状态,图二显示的是跟踪器对目标当前位置的预测,图三是根据跟踪器对目标当前位置的预测,将检测到的一些目标的信息分配到跟踪的目标。

比如,可能有雷达的测量数据、视觉的测量数据,就是采用代驾矩阵的方法来进行分配的。

最后一步,进行传感器融合的计算,获得当前目标的位置,更新当前的状态。

对于跟踪的预测以及状态更新,我们提供了三种滤波的算法,分别是:KF 线性卡尔曼滤波、EKF 扩展卡尔曼滤波、UKU 无界卡尔曼滤波。

我们预设了三种滤波器的初始化函数,分别针对于匀速目标、匀加速目标和匀转向速目标。同时用户也可以添加自定义的滤波器初始化函数,这通常用于非线性的滤波器。

对于 EKF 和 UKF 来说,用户还需要定义它的运动函数和测量函数。同样,我们预先设置了匀加速、匀速、匀转向速度这三种情况,对于其他一些更复杂的情况,用户可以根据公式添加自定义模型。

单个跟踪来说,有一个生命周期,一共分为三个步骤。

第一,跟踪的初始化,我们会从从没有分配到跟踪的检测创建一个新的跟踪,这就说明我们检测到了一个新的目标,同时我们会创建和初始化滤波器。

第二,跟踪得到了确认,我们会将每个时刻的分配、检测到跟踪。通过检测到的信息我们对跟踪进行修正,同时跟踪也会计算一个预测,这个就是典型的卡尔曼滤波算法。

第三,如果一段时间内没有观测到跟踪目标,那么我们会判断是否删除这个跟踪,经过一个阈值,如果在阈值的范围之外,还是没有观测到跟踪,那么我们将其删除。

对于非线性滤波器来说,我们还会定期地修正它的测量函数与状态转移函数。

这是一个行人目标跟踪的案例,我们从案例中可以很清晰地看到一个跟踪的生命周期:它是如何被初始化和如何确认的,在被遮挡的时候如何进行预测以及最后如何进行删除。

真实值标签工具

我们在自动驾驶系统工具箱当中还提供了很多其他的工具,包括了一系列的算法验证工具,比如说真实值标签工具。

在 2012 版本的 Matlab2012B 之后,有一个 APP 的功能:提供了一系列的应用程序,这包括了我们在自动驾驶系统工具箱当中提供的真实值标签应用程序。

如上述右图所示,我们可以通过这个工具,在一段视频当中添加真实值的标签,将目标通过标签的形式记录下来,可以使用矩形的目标或者是直线的目标。

右图中,我们使用真实值标签标记了卡车、汽车、交通指示牌、车道线等等。

按通常理解,真实值标签一般是用来训练目标检测的算法以及评估目标检测的算法。在这里,我们还可以通过真实值标签的工具,去验证、跟踪和控制算法。

我们可以通过真实值标签去对视频进行处理,人工产生一些视觉目标,通过采集的记录的或者是实验室产生的雷达目标对它进行融合,通过多目标跟踪器与控制算法对整个系统的功能进行一个仿真工作。

使用真实值标签工具添加真实值标签的方法共分为五个步骤:

第一,载入视频。

第二,定义标签的类型。比如,我们可以定义车辆、车道线等目标,定义环境,比如说天气等全局的标签。

第三,通过时间轴的拖动,可以对每一帧进行标签的绘制。

第四,我们可以使用部分自动算法,为我们添加标签,包括中间帧的线性插补、KLT 目标跟踪以及 ACF 车辆检测这些自动化算法,可以逐帧地绘制选定的标签。

第五,我们通过手动的微调得到最终结果,将数据导出到文件或者是工作空间。

算法的实时验证

设计完成之后,就需要进行算法验证,我们可能会通过一些实车的测试进行验证,也可以在实验室里通过模拟方式,在实验室里进行可视化的验证。

Matlab 当中提供的一些数据导入的程序,以及一些可视化的应用,为仿真系统的搭建提供了便利。

比如,我们可以通过这些数据接口的操作函数,导入 excel 工作表、视频文件、CAN 总线数据,我们也可以通过自动驾驶系统工具箱当中提供的函数来生成鸟瞰图以及雷达点云图。

上图就是一个典型的仿真环境,上面是整个系统的架构,下面是仿真的硬件设备,我们采用一台目标机来运行车辆与环境的模型,然后另一台运行感知与控制算法,完成一个硬件再回路的仿真工作。

通过这个视频,我们所有的算法都是能够自动生成 C 语言代码的,我们将生成的代码下载到目标计算机当中,就可以很容易完成硬件再回路的仿真。

对算法进行实车的测试,也是必不可少的一个环节。我们在各种不同的路况下,可以对车载系统进行实车测试,这个系统可以是一台笔记本电脑,也可以是一台实时的仿真计算机。

我们通过 USB、CAN 总线、以太网等等,将它与各个传感器进行连接,就可以测试我们的目标跟踪,以及控制算法。


我们可以看到,在整个系统的设计与验证的过程中,MATLAB、Simulink 提供了一个通用的软件设计与硬件设施的平台,其中就包括使用 MATLAB 设计感知算法和 Simulink 来设计控制算法,将这些算法自动生成 C 语言代码,以及使用 Simulink Real-Time 完成算法的实时仿真工作,进行系统的验证。

雷锋网注:关于此次嘉宾演讲的 PPT,请关注雷锋网「新智驾」(公众号:AI-Drive),在后台回复「ADAS微课堂」即可下载。

雷锋网

吴恩达正式宣布创业,离职百度92天后成立Deeplearning.ai

雷锋网6月24日消息  百度前首席科学家吴恩达前几个小时在Twitter上发布一条消息,显示他已建立了一家新的公司:Deeplearning.ai。这则推文只显示该公司的一个标志和一个域名。不过图片中吴恩达还标上了“2017年8月”的信息,这很有可能暗示新公司将于八月正式对外公布。

有媒体发现Deeplearning.ai的域名似乎已注册到百度位于硅谷森尼韦尔的研发机构,也是吴恩达此前工作过的相同的办公室。根据从Wayback Machine上获取的数据,该域名由Instra注册,并于2015-2017年之间被认领。

三个月前,吴恩达作为首席科学家的身份离职百度,当时业界纷纷猜测其下一步的去向,很多人认为其非常有可能加入Carol Reiley(吴恩达妻子)所在的Drive.ai公司,投身创业浪潮。不过,据雷锋网此前报道,Carol Reiley在Emtech Digital 2017会场接受采访时否定了这一猜测。

“我们没有过关于这一话题的谈话,”Reiley说,“他(吴恩达)不会加入Drive.ai。”

结合Reiley的回复,以及Deeplearning.ai这样的域名来看,吴恩达此次创业更有可能是用以开发一种旨在成为关键基础设施以支持人工智能普及的技术。

这在吴恩达离职百度时发表的公开信就可初见端倪,吴恩达在这封信的末尾说道:

“我将继续致力于用人工智能引领这场重大的社会变革。除了推动大公司使用人工智能,也还有很多创业机会,以及更深入进行人工智能研究的机会。”

当时,Quara上就有人猜测,“吴恩达将会用他丰富的AI经验,推动更多小创业公司使用AI技术。”

并且,在离职后吴恩达接受MIT Technology Review采访时也表示,自己对很多垂直领域的AI应用感兴趣,也表示要花一些时间寻求科技公司转型以外的事情:

“我决定离开在百度的职位时一切运行地都很好,我想做一些其他的事情……我并不知道自己具体将要做什么,但是我认为AI不仅为百度这样的大公司提供了机遇,也同样为创业公司和基础研究提供机遇。”


“我打算花一些时间,寻求科技公司转型之外的事情。”


“有很多垂直领域令我感到兴奋,我对医疗领域极其感到兴奋;我对教育领域极其感到兴奋–这些是AI大有可为的主要领域。”

在这周四雷锋网编译的一篇吴恩达张潼接受华尔街日报采访时,吴恩达也重点强调了他对AI+医疗、AI+建筑业,以及美中两国在人工智能技术上的对比的观察。

吴恩达认为,如今AI应用中获利最多的就是在线广告,因为该领域一直都是数字化领域,另外一个就是金融科技领域正在向数字化方向转型。而卫生保健和建筑业在数字化方面稍落后这两个领域。

华尔街日报接着发问吴恩达,什么职业在将来可能已经不存在时,吴恩达也强调表示,AI在医学影像分析上正在取得更好的效果。所以作为放射线技师的职业生涯可能只有五到十年。

作为在中美科技巨头公司均有工作过的这段经历,吴恩达也表达了他对这两个国家在人工智能技术上呈现的差异的看法,吴恩达在采访中表示:

美国非常善于创造底层技术,像很多最近的AI技术革新。我认为中国的生态系统在产品推向市场做的非常强,正在以惊人的速度前进。在美国,当你发布一款新产品,总是感觉要打破原先市场分布,再通过市场细分给用户。有太多的市场细分了!


中国是一个相对同质化的社会。所以,一旦你发现一款适合市场的产品,规模可以扩展的很快。

基于此,我们或有理由猜测,吴恩达成立的Deeplearning.ai这家创业公司将延续其在人工智能、机器学习的研究成果,而主要为医疗、建筑业等领域的创业公司提供人工智能的基础设施技术。

在此之前,吴恩达在任职斯坦福大学副教授时就已做了很多机器学习领域的开拓性工作,且创立了在线教育平台Coursera,在加上在Google Brain、百度的工作经历,这让吴恩达不仅在学术界可称得上是AI领域一位备受尊敬的研究者和传播者,其对工业界而言,也是一位对AI领域的所有形态,包括创业项目、基础技术等具有深刻观察的意见领袖。

距离上次颇具热议的离职事件才刚走过3个月的时间,吴恩达以一如既往的风格在Twitter上率先宣布创业一事。正如吴恩达所说,“人工智能是一次新的'电力革命',无论你是在哪一个行业工作,AI都有可能改变它。”期待Andrew Ng在一个多月后向大家传达的“AI电力惊喜”。

雷锋网

一文详解 Word2vec 之 Skip-Gram 模型(实现篇)

雷锋网按:这是一个关于 Skip-Gram 模型的系列教程,共分为结构训练和实现三个部分,本文为最后一部分:实现篇。原文作者天雨粟,原载于作者知乎专栏,雷锋网已获授权。

前言

上一篇的专栏介绍了Word2Vec中的Skip-Gram模型的结构训练,如果看过的小伙伴可以直接开始动手用TensorFlow实现自己的Word2Vec模型,本篇文章将利用TensorFlow来完成Skip-Gram模型。还不是很了解Skip-Gram思想的小伙伴可以先看一下上一篇的专栏内容。

本篇实战代码的目的主要是加深对Skip-Gram模型中一些思想和trick的理解。由于受限于语料规模、语料质量、算法细节以及训练成本的原因,训练出的结果显然是无法跟gensim封装的Word2Vec相比的,本代码适合新手去理解与练习Skip-Gram模型的思想。

工具介绍

● 语言:Python 3

● 包:TensorFlow(1.0版本)及其它数据处理包(见代码中)

● 编辑器:jupyter notebook

● 线上GPU:floyd (https://www.floydhub.com/)

● 数据集:经过预处理后的维基百科文章(英文)

正文部分

文章主要包括以下四个部分进行代码构造:

- 数据预处理

- 训练样本构建

- 模型构建

- 模型验证

1 数据预处理

关于导入包和加载数据在这里就不写了,比较简单,请参考git上的代码。

数据预处理部分主要包括:

  • 替换文本中特殊符号并去除低频词

  • 对文本分词

  • 构建语料

  • 单词映射表

首先我们定义一个函数来完成前两步,即对文本的清洗和分词操作。

上面的函数实现了替换标点及删除低频词操作,返回分词后的文本。

下面让我们来看看经过清洗后的数据:

有了分词后的文本,就可以构建我们的映射表,代码就不再赘述,大家应该都比较熟悉。

我们还可以看一下文本和词典的规模大小:

整个文本中单词大约为1660万的规模,词典大小为6万左右,这个规模对于训练好的词向量其实是不够的,但可以训练出一个稍微还可以的模型。

2 训练样本构建

我们知道skip-gram中,训练样本的形式是(input word, output word),其中output word是input word的上下文。为了减少模型噪音并加速训练速度,我们在构造batch之前要对样本进行采样,剔除停用词等噪音因素。

采样

在建模过程中,训练文本中会出现很多“the”、“a”之类的常用词(也叫停用词),这些词对于我们的训练会带来很多噪音。在上一篇Word2Vec中提过对样本进行抽样,剔除高频的停用词来减少模型的噪音,并加速训练。

我们采用以下公式来计算每个单词被删除的概率大小:

其中 f(wi) 代表单词 w的出现频次。t为一个阈值,一般介于1e-3到1e-5之间。

上面的代码计算了样本中每个单词被删除的概率,并基于概率进行了采样,现在我们手里就拿到了采样过的单词列表。

构造batch

我们先来分析一下skip-gram的样本格式。skip-gram不同于CBOW,CBOW是基于上下文预测当前input word。而skip-gram则是基于一个input word来预测上下文,因此一个input word会对应多个上下文。我们来举个栗子“The quick brown fox jumps over lazy dog”,如果我们固定skip_window=2的话,那么fox的上下文就是[quick, brown, jumps, over],如果我们的batch_size=1的话,那么实际上一个batch中有四个训练样本。

上面的分析转换为代码就是两个步骤,第一个是找到每个input word的上下文,第二个就是基于上下文构建batch。

首先是找到input word的上下文单词列表:

我们定义了一个get_targets函数,接收一个单词索引号,基于这个索引号去查找单词表中对应的上下文(默认window_size=5)。请注意这里有一个小trick,我在实际选择input word上下文时,使用的窗口大小是一个介于[1, window_size]区间的随机数。这里的目的是让模型更多地去关注离input word更近词。

我们有了上面的函数后,就能够轻松地通过input word找到它的上下文单词。有了这些单词我们就可以构建我们的batch来进行训练:

注意上面的代码对batch的处理。我们知道对于每个input word来说,有多个output word(上下文)。例如我们的输入是“fox”,上下文是[quick, brown, jumps, over],那么fox这一个batch中就有四个训练样本[fox, quick], [fox, brown], [fox, jumps], [fox, over]。

3 模型构建

数据预处理结束后,就需要来构建我们的模型。在模型中为了加速训练并提高词向量的质量,我们采用负采样方式进行权重更新。

输入层到嵌入层

输入层到隐层的权重矩阵作为嵌入层要给定其维度,一般embeding_size设置为50-300之间。

嵌入层的 lookup 通过 TensorFlow 中的 embedding_lookup 实现,详见:

http://t.cn/RofvbgF

嵌入层到输出层

在skip-gram中,每个input word的多个上下文单词实际上是共享一个权重矩阵,我们将每个(input word, output word)训练样本来作为我们的输入。为了加速训练并且提高词向量的质量,我们采用negative sampling的方法来进行权重更新。

TensorFlow中的sampled_softmax_loss,由于进行了negative sampling,所以实际上我们会低估模型的训练loss。详见:http://t.cn/RofvS4t

请注意代码中的softmax_w的维度是vocab_size x embedding_size,这是因为TensorFlow中的sampled_softmax_loss中参数weights的size是[num_classes, dim]。

4 模型验证

在上面的步骤中,我们已经将模型的框架搭建出来,下面就让我们来训练训练一下模型。为了能够更加直观地观察训练每个阶段的情况。我们来挑选几个词,看看在训练过程中它们的相似词是怎么变化的。

训练模型:

在这里注意一下,尽量不要经常去让代码打印验证集相似的词,因为这里会多了一步计算步骤,就是计算相似度,会非常消耗计算资源,计算过程也很慢。所以代码中我设置1000轮打印一次结果。

从最后的训练结果来看,模型还是学到了一些常见词的语义,比如one等计数词以及gold之类的金属词,animals中的相似词也相对准确。

为了能够更全面地观察我们训练结果,我们采用sklearn中的TSNE来对高维词向量进行可视化。详见:http://t.cn/Rofvr7D

上面的图中通过TSNE将高维的词向量按照距离远近显示在二维坐标系中,该图已经在git库中,想看原图的小伙伴去git看~

我们来看一下细节:

上面是显示了整张大图的局部区域,可以看到效果还不错。

关于提升效果的技巧:

  • 增大训练样本,语料库越大,模型学习的可学习的信息会越多。

  • 增加window size,可以获得更多的上下文信息。

  • 增加embedding size可以减少信息的维度损失,但也不宜过大,我一般常用的规模为50-300。

附录:

git代码中还提供了中文的词向量计算代码。同时提供了中文的一个训练语料,语料是我从某招聘网站上爬取的招聘数据,做了分词和去除停用词的操作(可从git获取),但语料规模太小,训练效果并不好。

上面是我用模型训练的中文数据,可以看到有一部分语义被挖掘出来,比如word和excel、office很接近,ppt和project、文字处理等,以及逻辑思维与语言表达等,但整体上效果还是很差。一方面是由于语料的规模太小(只有70兆的语料),另一方面是模型也没有去调参。如果有兴趣的同学可以自己试下会不会有更好的效果。

完整代码请见:

http://t.cn/RofPq2p

雷锋网相关阅读:

一文详解 Word2vec 之 Skip-Gram 模型(结构篇)

一文详解 Word2vec 之 Skip-Gram 模型(训练篇)

25 行 Python 代码实现人脸检测——OpenCV 技术教程

雷锋网

极智嘉(Geek+)CEO郑勇:智能物流和仓储改变商业未来 | CCF-GAIR 2017

雷锋网按:由中国计算机学会(CCF)主办、雷锋网与香港中文大学(深圳)全程承办的 AI 盛会「全球人工智能与机器人峰会」(CCF-GAIR),将于 7.7-7.9 日在深圳召开。

CCF-GAIR 为国内外学术、业界专家提供了一个广阔的交流平台,既在宏观上把握全球人工智能趋势脉搏,也深入探讨人工智能在每一个垂直领域的应用实践细节。延续上一次大会的议题,本次 CCF-GAIR 2017 将会迎来更多人工智能和机器人行业的议题与讨论,其中就包括了机器人智能物流。此次Gair大会将邀请中国智能物流公司极智嘉(Geek+)的 CEO 郑勇分享他的观点。

郑勇,毕业于清华工业工程专业,他先后在ABB集团机器人部门、新天域资本投后管理和机器人行业研究等相关部门工作,在机器人领域,尤其在工业化机器人方面积累了丰富的项目经验。

何为智能物流?

不知道你曾经在网上看过这样一个视频,亚马逊的仓库中,洁净的空旷场地上有少有人影,整齐的货架下有很多小小的“橙色身影”在辛勤劳作。这些状似冰球般的机器人仿佛拥有自我意识,有条不紊地整理着货架上的商品,似乎代替了传统的人力货物拣选方式,不禁让人惊叹物流行业原来已经实现了如此智能的货物管理。这个杰作来自智能物流公司 Kiva system 的机器人项目,实现了自动化物流仓储系统。

而在中国,有一家名叫极智嘉(Geek+)的科技公司在做同样的事情,他们以智能物流为切入点,利用大数据、云计算和人工智能技术,打造出用于货物仓储管理的智能机器人。他们的技术已经用于天猫、唯品会、苏宁等电商仓库,情景跟亚马逊极为相似。

▲ 极智嘉的机器人聪明矩阵

极智嘉(Geek+)的公司选址在来广营路上的钢结构开阔建筑当中,公司 CEO 郑勇说,机器人需要在开阔的空间进行测试,没办法在写字楼办公,所以只能把供应链、机器人研发等部分放在这里。让系统开发的同事到旁边的写字楼工作。

14年的时候他和几个联合创始人开始从事仓储机器人方面的研发,他认为这个方向在未来是有潜力的,事实证明,人工智能和机器人技术与物流有机结合可以快速、灵活的部署于仓储运作的各个环节,有效减少人力成本,降低劳动强度,并且提高货物的物流效率。

郑勇认为,无论是实体零售还是电商,控制成本极为重要,对于销售行业想要获取更高的利润就必须从物流着手。做工厂出身的他,提出了一个新名词——敏捷物流。目前电商零售的环境逼迫着商品本身的进化,想要应对促销高峰的变化,物流必须拥有敏捷的能力,机器智能物流系统便是出于改进物流系统应运而生。

极智嘉(Geek+)的主要产品是机器人拣选系统。该系统通过移动机器人搬运货架实现“货到人”拣选。那么基于“货到人”方案,人工智能与机器人技术能做些什么呢?

1.集中退货

2.智能补货

3.动态货位

4.越库

5.兼容各类场景

▲ 极智嘉(Geek+)某服装客户全年订单数据,想经受住峰值的考验,就需要增减机器人及拣选工位数量实现不同作业量的匹配。

6.多渠道整体方案

▲ 针对不同的订单拣选作业类型采用不同型号的拣选机器人

7.柔性切换

有人会比较担心假设未来物流业都是用机器人,那么很多从业人员会不会就此下岗。雷锋网编辑认为机器代替人类产生的就业问题并没有想象中那么悲观。毕竟机器同样也需要专门的技术人员,而且仓库需要库管员,想让整套系统顺畅运行,没有人是无法实现的。

在7月7-9日的CCF-GAIR大会上,雷锋网安排有机器人为主题的专场,探讨机器人的现状与未来,同时邀请到了极智嘉(Geek+)CEO 郑勇谈谈关于智能物流和仓储对未来商业的影响。如果想了解这一领域的最新见解与洞察,欢迎购票参加

雷锋网

重磅 | Windows 10内部版本及核心源代码泄露,一共32TB

雷锋网6月24日消息,据外媒TheRegister报导,多个微软内部Windows操作系统版本及大量内核源代码被泄露到网上。

据悉,这32TB的非公开官方安装映像和软件蓝图被压缩到了8TB,然后被上传至betaarchive.com,而最新一批文件是本周早些时候上传的。TheRegister怀疑,这些秘密数据很可能是今年3月份前后从微软内部系统中泄露出来的。

见到过泄漏代码内容的消息人士表示,被泄露的代码是微软共享代码工具包(Shared Source Kit),包括Windows 10硬件驱动程序的源码,PnP(Plug-and-Play)代码,USB和WiFi协议,存储驱动程序,以及支持ARM架构的OneCore内核代码。

由于这些数据是Windows操作系统的核心代码,而且部分代码具有最高权限。TheRegister称,任何获取这些数据的个人或组织,都可以查找Windows系统中安全漏铜,并利用它来开发恶意软件,对全球Windows设备发动攻击。

除此之外,尚未公布的绝密Windows 10和Windows Server 2016版本,也随着一些公开发布的版本的副本,一起出现在泄露的数据中。

而且,泄露的数据中还包括多个版本的Windows 10 Mobile Adaptation Kit:这是一款秘密的软件工具包,能够让Windows操作系统在多种便携和移动设备上运行。

据雷锋网了解,能够访问Beta Archive私人资料库的网民,可以免费获得这些被泄露的数据。目前,微软还未就此事置评。Beta Archive则发表声明称,他们已经将这些数据从FTP服务器和列表中删除了。

有外界人士认为,这次泄露比发生在2004年的Windows 2000源代码泄露事故更为严重。

Via. TheRegister,雷锋网编译

雷锋网

腾讯优图杰出科学家贾佳亚:在企业做研究,是我的新课题

2015年的2月,Uber一口气挖走了卡内基梅隆大学机器人实验室约40名研究者,造成大量人才流失。自此以后,关于学术人才的出走是否会导致研究受阻的讨论不断。其实这样的争论一直存在,只是随着人工智能的再次崛起,这次矛盾更加突显。

今年5月,香港中文大学计算机科学工程系教授贾佳亚正式加入腾讯优图实验室,成为学术人才走入工业界的又一案例。如若再细数一下商汤、旷视、第四范式等AI公司的背景,就会发现港中文也着实为国内AI界贡献了不少人才。

学而优则进入工业界,在人工智能中尤其显著。但学术界与工业界的矛盾是否不可调和?在21日的腾讯云+峰会上,雷锋网采访了刚加入优图团队不久的贾佳亚教授,他提供了另一种思路来考虑这个问题。

在企业做研究

他告诉雷锋网,“我希望能做一条新路出来。如何在企业吸引到最好的科研人员,同时帮助企业将做出的成果用上,这是我自己提出的一个新课题:在企业做研究。”

AI对未来如此重要,像Facebook与Google等公司都设立了自己的AI研究部门,分别聘请了Yann LeCun和Geoffrey Hinton两位AI祖师级人物。腾讯也在约一年半前成立AI Lab,主要负责AI方面的基础研究,并在今年先后聘用了张潼与俞栋博士。

但贾教授认为,在业界中,即便是在美国,在Google或者Facebook这样的公司,还没有一套非常完整的一套理念或系统,指导如何在企业做研究。它包括了管理层面、技术的应用层面,以及科技人员的招聘层面。

他希望在腾讯开展这样的研究,通过与企业研究员一起分析任务,同时跟其他产品部门保持沟通,在这个过程中总结出一套理论,并将它形成系统化的管理方案。这样既能在企业做好研究,同时也能让研究给企业带来应该得到的效率或者利润。

贾教授告诉雷锋网,与外界的理解不同,校内其实很难把几个教授聚拢起来做一件事,因为每个人都有自己的地盘、自己的学生、自己的课题、自己感兴趣的话题,而且每位教授都有充分的自主权。这里的一个问题是,虽然学术界的教授、学生都非常厉害,但聚到一起并不能形成规模。

“如果研究国内外各个研究院的设立和消亡,就可以看到,失败的例子多过成功。你很难把一些最强的人绑在一起,他们可能不愿意做,这是很大的问题。”

他预见到的理想状态是,团队中的人既有类似于做研究一样的空间和使命感,又能在面临大项目时和其他人合作,而且既与其他研究人员合作,也与工程人员合作。

“我希望通过这样的机会试验一下,把自己的团队建立成这样的模式。类似于在学校做研究,我在企业里还是做长期的更加偏向企业的研究。”

做2C的人工智能

在企业做研究吸引贾教授的另一点,是能将有趣的东西付诸实施。

他说到,在学校可以五年十年专注做同一件事,比如他本人一直关注图像去模糊与图像理解。他和团队也曾做出了很不错的夜景增强和去噪算法,可一旦涉及到将它转化为产品,所有的问题就都涌现出来了。工程、维护、加密以及收费模式,都需要精心设计,程序出了bug也必须有人处理,版本也需要不断更新,这些对研究者来说都是烫手的山芋。

他说:“我来工业界最重要的目标,是希望改变以往尴尬的局面。研究了这么有趣的东西,居然不能付诸实施,这是我自己的痛点。到腾讯这个大公司,我有兴趣做这样的事情。”

腾讯无疑有国内顶级的产品经理与工程团队,而他加入的优图团队也主要关注AI的应用层面,其技术已经支持了自家QQ和QQ空间产品,也与诸多外部公司有合作。他还特意提到,优图将一些想法设计为算法,再优化到手机端,可能只需要一两个星期,这对他来说是很大的优势。

腾讯的优势,也可以解释为什么贾教授没有选择加入或创立一家创业公司。若想将自己的想法付诸实践,有自己的公司应该是最自由的,而且按现在的环境,若他有意,很多风投应该会跟进。

他反问了雷锋网一个问题,为什么现在做AI的创业公司,绝大部分做的都是B2B业务?

“一个AI技术出身的公司想做2C业务有点天方夜谭,产品经理在哪?怎么了解用户喜好?所以大部分的AI公司在做2B业务,把2B业务做大是他们的基本目标。”

而优图不同的地方在于,在腾讯可以通过它的巨大网络社交平台发展2C业务,把技术直接连接到个人用户上,比如用户常用的图像、相册、视频服务。贾教授认为,在腾讯可以探索如何把技术呈现到终端用户眼前,这是与大部分创业公司不一样的地方。而在腾讯云的基础上,他还可以直接把技术应用到政府系统的新城市构建,以及公安、教育、医疗方面。

同样的,在初创公司要兼顾产品、算法和长期研究,这对个人的精力也是一个挑战。腾讯内部的基础对很多科学家来说都是一个不小的诱惑。

贾教授在采访的最后提到,优图的发展有两条路,一是往高精尖走,二是积累实力,扩充能力。他希望有研究的突破,开发最新的算法,也希望能做更大的场景,让团队达到实现城市级规划的能力。

“我的目标,是在短期或者中长期范围内,让优图依赖云平台做城市级规划的项目,从城市级的开发或管理层面,让云和云结合起来。比如管理超过10万级、百万级的摄像头规模。这对我们的技术绝对有挑战,绝对不会是技术出现后就可以在各个层次的数量上解决问题。”

腾讯云作为技术输出窗口,也会提高优图的技术通用性和面向行业客户的技术能力,开放多元化场景的AI能力。

上面这些就是贾教授想在腾讯做的事,不过在最后的最后,他落脚的一句话却格外的谦虚,他希望争取在自己新的阶段里做好事情,他说,“能去到好的机构都是不容易的,这是我想学习的地方”。

雷锋网

声控技术竞赛的战斗已然打响,聊天机器人如何将我们从屏幕上解放出来?

雷锋网按:最近关于智能音箱的争论沸沸扬扬,在雷锋网此前的智能音箱系列报道中,国内多数业内人士也并不看好它的发展。尽管如此,我们也应该看到支持者发出的声音。本篇为外媒 VentureBeat 上的文章,雷锋网进行了编译整理。

随着苹果 HomePod 在 2017 年 WWDC 大会上发布后,战斗已然打响——我们都在观望看谁能将赢得声控智能音箱市场的领导者。

虽然早期采用者将这些设备应用到了他们的生活中,而晚期采用者由于对安全性的顾虑拖了后腿,但我们仍然觉得,这种声控技术的趋势没有出现任何放缓迹象。尽管已经存在了几十年,但近年来,这种技术使用在了汽车、手机、冰箱,甚至是灯具上。也许这些智能音箱和它们的虚拟助手是家庭控制的一个迹象,它表明我们正处于另一次技术革新的转折点上。

毕竟,声控技术竞赛是一个微妙而振奋的信息,它提醒和预示着屏幕时代正在远去。

为什么屏幕不能与人声竞争?

据美国语言学会介绍,当我们用言语来传达和收集信息的时候,利用的是人性更深层次、更原始的那部分。虽然文字出现了大约 6000 年,但口语存在的时间更为长久。孩子在两岁的时候开始说话,但学会写字(尤其是清晰地书写)则需要更长时间。实际上,口语是人与人交流的最原始的“用户界面”。

那么一般来说,当我们想快速检查天气、运动成绩或航班起飞的时间时,我们应该大声询问,而不是通过加载一个网页输入搜索,然后筛选结果来阅读信息。

诚然,有一些搜索词我们并不希望大声宣布结果(例如,“找到附近的卖订婚戒指珠宝店”),并且希望其他结果将是可视化的(例如,“显示我的订婚戒指设计”)。

但是对于许多需要广泛信息的日常任务,声控技术提供了一种快速组织信息的快捷方式,来获取人们需要在生活中继续使用的数据。

谁将在智能音箱的本土市场中占据制高点?

这些设备正在为人类和技术之间的自然交互发挥作用,这意味着那些最接近真实人类交流的设备提供者将会获胜,它具有准确的结果和完善的功能。

具体来说,在于这种音箱能否分辨一个孩子和一个成年人声音之间的差异,并相应地调整其结果;能否将准确表达意图的书面信息(言语到文本)发送给其他人,并填写正确的标点符号;以及用户对这台机器进行互动的欲望有多强烈。

亚马逊已经给 Alexa(Echo 智能音箱的声音)设置了一些幽默的话语反馈,这种方式可以使得设备展示出“个性”并表达某类人的微妙之处。 Google 聘请了前 Pixel 故事板艺术家,用他的的思维来帮助 Google Assistant 创建其个性。同时,苹果公司已经宣布,Siri 也在进行一些声音的改进 。它甚至在 Siri 给出的反馈中添加了语境,这得益于机器人从手机上收集了日历、位置和当前活动的数据。

这些设备不仅尝试清除屏幕界面,而且这些公司希望让人们会感到这种技术已经不复存在,取而代之的是使用 AI 的真实人性化体验。

声控设备未来的挑战

有人认为,没有强大算法和技术增强能力来帮助指导设备做出响应的语调。虽然这种的想法是愚蠢的,但需要谨记的是,一些设备正在使用的合成声音所能实现的效果仍然存在局限性(Apple 的 Siri 目前由 Susan Bennett 配音)。

随着声控技术不断发展,越来越多的公司都将使用这种新型互动方式,品牌很可能会找出搜索时听起来像它们自己的声音——不仅仅是声音质量,更在于风格。

当品牌创造性地设计如何将声音自然地整合到产品和网站上时,它们将扫清一切障碍。诸如 UX / UI 设计以及其操作的脚本等元素将随着屏幕消失而变得更为重要,人类的声音会再次回到中心舞台。

via VentureBeat

雷锋网

iPhone 8 真机实拍照现身;吴恩达正式宣布创业 | 雷锋早报


百度前首席科学家吴恩达宣布创业

雷锋网 6 月 24 日消息  百度前首席科学家吴恩达刚刚在 Twitter 上发布一条消息,显示他建立了一家新的公司:Deeplearning.ai。这则推文只显示该公司的一个标志和一个域名。不过,图片中吴恩达还标上了 “2017 年 8 月”,这很可能暗示新公司将于八月正式对外公布。也就是说,一个半月之后见分晓。

媒体发现 Deeplearning.ai 的域名似乎已注册到百度位于硅谷森尼韦尔的研发机构,也是吴恩达此前工作过的相同的办公室。根据从 Wayback Machine 上获取的数据,该域名由 Instra 注册,并于 2015-2017 年之间被认领。

有媒体猜测,吴恩达此次创业更有可能是用以开发一种旨在成为关键基础设施以支持人工智能普及的技术。

 iPhone 8 真机实拍首现

昨晚,推特爆料大神 Onleaks 分享了 iPhone 8 的真机谍照。按照 PhoneArena 的分析,这是目前首个最接近真机的实拍图。正面来看,顶部中央是耳机孔,但没有看到前置摄像头,听筒左右两侧依然是屏幕,整机的屏占比非常高,而且边缘过渡的工艺处理已经非常成熟,预计手感会很不错。背面虽然是竖排双摄,但是效果比之前的渲染都要好,另外,没有见到后指纹。

不过,大神没有透露 iPhone 8 的确切屏幕尺寸,其他像是双摄参数等也不得而知,但最终呈现的消费者的使用体验应该还是一流,喜欢的还是努力攒钱吧。

亚马逊设想打造巨型无人机塔 加快无人机送货

据外媒报道,最近公布的一项专利申请显示,电商巨头亚马逊为一个机器人驱动的仓储物流中心提出了新计划。 专利申请中展示了一个巨型无人机塔,可以让无人机在城市周围运送包裹时方便地进出。 亚马逊的这项专利申请称为 “多层次运营中心”(multi-level fulfillment center)。


博世为电动自行车带来 ABS 系统

据外媒报道,根据博世事故研究做的两项调查显示,电动自行车如果配备了制动防抱死系统 (ABS),那么事故的发生率将能减少 25%。为此,这家公司的 eBike Systems 部门开发了全球首套为电动自行车打造的 ABS 系统。博世 eBike ABS 主要是为了防止骑车者在遇到前刹车紧急刹车的情况时从自行车上飞出来。

YouTube 发布新 VR 视频格式 VR180

雷锋网消息,日前谷歌官网发表博文称,YouTube 正在与谷歌 Daydream 团队一起研发新的视频格式 VR180,可帮助制作者更更易于制作 VR 内容。VR180 主要关注眼前出现的场景,具有高分辨率,不管是电脑还是移动端都有很好的观看效果。它可以无缝地切换成一个 VR 体验,使用 Cardboard、Daydream 和 PSVR 等设备观看立体 3D 图像。同时 VR180 还支持视频直播。

全球首位换头志愿者无望手术 称将接受传统治疗

据英国《每日邮报》6 月 21 日报道,日前,换头手术发起人、具有 “科学怪人” 之称的塞尔吉奥 • 卡纳瓦罗 (Sergio Canavaro) 医生决定将为另一位病人实行换头手术。因而,原本自愿成为 “小白鼠” 的俄罗斯人瓦列里 • 斯皮里多诺夫 (Valery Spiridonov) 失去获得新身体的机会。但目前,斯皮里多诺夫已经接受这一事实,并准备接受传统治疗。 

雷锋网

一文详解 Word2vec 之 Skip-Gram 模型(训练篇)

雷锋网按:这是一个关于 Skip-Gram 模型的系列教程,依次分为结构、训练和实现三个部分,本文为第二部分:训练篇,最后一部分我们将随后发布,敬请期待。原文作者天雨粟,原载于作者知乎专栏,雷锋网已获授权。

第一部分我们了解skip-gram的输入层、隐层、输出层。在第二部分,会继续深入讲如何在skip-gram模型上进行高效的训练。

在第一部分讲解完成后,我们会发现Word2Vec模型是一个超级大的神经网络(权重矩阵规模非常大)。

举个栗子,我们拥有10000个单词的词汇表,我们如果想嵌入300维的词向量,那么我们的输入-隐层权重矩阵隐层-输出层的权重矩阵都会有 10000 x 300 = 300万个权重,在如此庞大的神经网络中进行梯度下降是相当慢的。更糟糕的是,你需要大量的训练数据来调整这些权重并且避免过拟合。百万数量级的权重矩阵和亿万数量级的训练样本意味着训练这个模型将会是个灾难(太凶残了)。

Word2Vec 的作者在它的第二篇论文中强调了这些问题,下面是作者在第二篇论文中的三个创新:

1. 将常见的单词组合(word pairs)或者词组作为单个“words”来处理。

2. 对高频次单词进行抽样来减少训练样本的个数。

3. 对优化目标采用“negative sampling”方法,这样每个训练样本的训练只会更新一小部分的模型权重,从而降低计算负担。

事实证明,对常用词抽样并且对优化目标采用“negative sampling”不仅降低了训练过程中的计算负担,还提高了训练的词向量的质量。

Word pairs and "phases"

论文的作者指出,一些单词组合(或者词组)的含义和拆开以后具有完全不同的意义。比如“Boston Globe”是一种报刊的名字,而单独的“Boston”和“Globe”这样单个的单词却表达不出这样的含义。因此,在文章中只要出现“Boston Globe”,我们就应该把它作为一个单独的词来生成其词向量,而不是将其拆开。同样的例子还有“New York”,“United Stated”等。

在Google发布的模型中,它本身的训练样本中有来自Google News数据集中的1000亿的单词,但是除了单个单词以外,单词组合(或词组)又有3百万之多。

如果你对模型的词汇表感兴趣,可以点击:

http://t.cn/RoVde3h

你还可以直接浏览这个词汇表:

http://t.cn/RoVdsZr

如果想了解这个模型如何进行文档中的词组抽取,可以看论文中“Learning Phrases”这一章,对应的代码在 word2phrase.c ,相关链接如下。

论文链接:

http://t.cn/RMct1c7

代码链接:

http://t.cn/R5auFLz

对高频词抽样

在第一部分的讲解中,我们展示了训练样本是如何从原始文档中生成出来的,这里我再重复一次。我们的原始文本为“The quick brown fox jumps over the laze dog”,如果我使用大小为2的窗口,那么我们可以得到图中展示的那些训练样本。

但是对于“the”这种常用高频单词,这样的处理方式会存在下面两个问题:

  1. 当我们得到成对的单词训练样本时,("fox", "the") 这样的训练样本并不会给我们提供关于“fox”更多的语义信息,因为“the”在每个单词的上下文中几乎都会出现。

  2. 由于在文本中“the”这样的常用词出现概率很大,因此我们将会有大量的(”the“,…)这样的训练样本,而这些样本数量远远超过了我们学习“the”这个词向量所需的训练样本数。

Word2Vec通过“抽样”模式来解决这种高频词问题。它的基本思想如下:对于我们在训练原始文本中遇到的每一个单词,它们都有一定概率被我们从文本中删掉,而这个被删除的概率与单词的频率有关。
如果我们设置窗口大小(即),并且从我们的文本中删除所有的“the”,那么会有下面的结果:

1. 由于我们删除了文本中所有的“the”,那么在我们的训练样本中,“the”这个词永远也不会出现在我们的上下文窗口中。

2. 当“the”作为input word时,我们的训练样本数至少会减少10个。

这句话应该这么理解,假如我们的文本中仅出现了一个“the”,那么当这个“the”作为input word时,我们设置span=10,此时会得到10个训练样本 ("the", …) ,如果删掉这个“the”,我们就会减少10个训练样本。实际中我们的文本中不止一个“the”,因此当“the”作为input word的时候,至少会减少10个训练样本。

上面提到的这两个影响结果实际上就帮助我们解决了高频词带来的问题。

抽样率

word2vec的C语言代码实现了一个计算在词汇表中保留某个词概率的公式。

ω是一个单词,Z(ωi) 是 ωi 这个单词在所有语料中出现的频次。举个栗子,如果单词“peanut”在10亿规模大小的语料中出现了1000次,那么 Z(peanut) = 1000/1000000000 = 1e – 6

在代码中还有一个参数叫“sample”,这个参数代表一个阈值,默认值为0.001(在gensim包中的Word2Vec类说明中,这个参数默认为0.001,文档中对这个参数的解释为“ threshold for configuring which higher-frequency words are randomly downsampled”)。这个值越小意味着这个单词被保留下来的概率越小(即有越大的概率被我们删除)。

P(ωi) 代表着保留某个单词的概率:

图中x轴代表着 Z(ωi) ,即单词 ωi 在语料中出现频率,y轴代表某个单词被保留的概率。对于一个庞大的语料来说,单个单词的出现频率不会很大,即使是常用词,也不可能特别大。

从这个图中,我们可以看到,随着单词出现频率的增高,它被采样保留的概率越来越小,我们还可以看到一些有趣的结论:

● 当 Z(ωi) <= 0.0026 时,P(ωi) = 1.0 。当单词在语料中出现的频率小于 0.0026 时,它是 100% 被保留的,这意味着只有那些在语料中出现频率超过 0.26% 的单词才会被采样。

● 当时 Z(ωi) = 0.00746 时,P(ωi) = 0.5,意味着这一部分的单词有 50% 的概率被保留。

● 当 Z(ωi) = 1.0 时,P(ωi) = 0.033,意味着这部分单词以 3.3% 的概率被保留。

如果你去看那篇论文的话,你会发现作者在论文中对函数公式的定义和在C语言代码的实现上有一些差别,但我认为C语言代码的公式实现是更权威的一个版本。

负采样(negative sampling)

训练一个神经网络意味着要输入训练样本并且不断调整神经元的权重,从而不断提高对目标的准确预测。每当神经网络经过一个训练样本的训练,它的权重就会进行一次调整。

正如我们上面所讨论的,vocabulary的大小决定了我们的Skip-Gram神经网络将会拥有大规模的权重矩阵,所有的这些权重需要通过我们数以亿计的训练样本来进行调整,这是非常消耗计算资源的,并且实际中训练起来会非常慢。

负采样(negative sampling)解决了这个问题,它是用来提高训练速度并且改善所得到词向量的质量的一种方法。不同于原本每个训练样本更新所有的权重,负采样每次让一个训练样本仅仅更新一小部分的权重,这样就会降低梯度下降过程中的计算量。

当我们用训练样本 ( input word: "fox",output word: "quick") 来训练我们的神经网络时,“ fox”和“quick”都是经过one-hot编码的。如果我们的vocabulary大小为10000时,在输出层,我们期望对应“quick”单词的那个神经元结点输出1,其余9999个都应该输出0。在这里,这9999个我们期望输出为0的神经元结点所对应的单词我们称为“negative” word。

当使用负采样时,我们将随机选择一小部分的negative words(比如选5个negative words)来更新对应的权重。我们也会对我们的“positive” word进行权重更新(在我们上面的例子中,这个单词指的是”quick“)。

在论文中,作者指出指出对于小规模数据集,选择5-20个negative words会比较好,对于大规模数据集可以仅选择2-5个negative words。

回忆一下我们的隐层-输出层拥有300 x 10000的权重矩阵。如果使用了负采样的方法我们仅仅去更新我们的positive word-“quick”的和我们选择的其他5个negative words的结点对应的权重,共计6个输出神经元,相当于每次只更新 300 x 6 = 1800 个权重。对于3百万的权重来说,相当于只计算了0.06%的权重,这样计算效率就大幅度提高。

如何选择negative words

我们使用“一元模型分布(unigram distribution)”来选择“negative words”。

要注意的一点是,一个单词被选作negative sample的概率跟它出现的频次有关,出现频次越高的单词越容易被选作negative words。

在word2vec的C语言实现中,你可以看到对于这个概率的实现公式。每个单词被选为“negative words”的概率计算公式与其出现的频次有关。

代码中的公式实现如下:

每个单词被赋予一个权重,即 f(ωi), 它代表着单词出现的频次。

公式中开3/4的根号完全是基于经验的,论文中提到这个公式的效果要比其它公式更加出色。你可以在google的搜索栏中输入“plot y = x^(3/4) and y = x”,然后看到这两幅图(如下图),仔细观察x在[0,1]区间内时y的取值,x^(3/4) 有一小段弧形,取值在 y = x 函数之上。

负采样的C语言实现非常的有趣。unigram table有一个包含了一亿个元素的数组,这个数组是由词汇表中每个单词的索引号填充的,并且这个数组中有重复,也就是说有些单词会出现多次。那么每个单词的索引在这个数组中出现的次数该如何决定呢,有公式,也就是说计算出的负采样概率*1亿=单词在表中出现的次数

有了这张表以后,每次去我们进行负采样时,只需要在0-1亿范围内生成一个随机数,然后选择表中索引号为这个随机数的那个单词作为我们的negative word即可。一个单词的负采样概率越大,那么它在这个表中出现的次数就越多,它被选中的概率就越大。

到目前为止,Word2Vec中的Skip-Gram模型就讲完了,对于里面具体的数学公式推导细节这里并没有深入。这篇文章只是对于实现细节上的一些思想进行了阐述。

其他资料

如果想了解更多的实现细节,可以去查看C语言的实现源码:

http://t.cn/R6w6Vi7

其他Word2Vec教程请参考:

http://t.cn/R6w6ViZ

下一部分将会介绍如何用 TensorFlow 实现一个 Word2Vec 中的 Skip-Gram 模型。

雷锋网相关阅读:

一文详解 Word2vec 之 Skip-Gram 模型(结构篇)

一文详解 Word2vec 之 Skip-Gram 模型(实现篇)

25 行 Python 代码实现人脸检测——OpenCV 技术教程

雷锋网

亚马逊野心顿显 ,Echo Show手握智能家居摄像机控制权

亚马逊于当地时间周四宣布,来自Nest,August,Amcrest,EZViz,IC Realtime,Vivint,Logitech Circle 2,Ring和Arlo的智能家居摄像机将与触摸屏Echo Show兼容。也就是说,本月出货的最新一批亚马逊Echo Show产品能够在周围的其他摄像头中使用。

据雷锋网了解,这其中比较知名的算是Nest和Ring,Nest由谷歌所有,拥有一系列智能家庭摄像头;Ring是一个智能门铃厂商,发展势头正猛,主要做智能监控摄像头。

通过这种兼容性,拥有这些智能家居摄像机的Alexa客户将能够连接他们的帐户,并可以在Echo Show上实时显示最新状况。

亚马逊还通过智能家居Skill API(应用程序编程接口)为所有开发人员提供智能家居摄像机控制权,旨在让开发人员连接摄像机与Alexa变得更加简单。该API可以适配亚马逊的标准化Alexa语言模型,这意味着开发人员不需要再一次构建语音交互模型。

据雷锋网获悉,Echo Show配一块7英寸触摸显示屏,接入视频通话功能,可让用户对其他Echo Show所有者或Alexa智能手机用户进行免提视频通话。

via zdnet 雷锋网编译

雷锋网