Google 发布『多巴胺』开源强化学习框架

强化学习是一种非常重要 AI 技术,它能使用奖励(或惩罚)来驱动智能体(Agents)朝着特定目标前进,比如它训练的 AI 系统 AlphaGo 击败了顶尖围棋选手,它也是 DeepMind 的深度 Q 网络(DQN)的核心部分,它可以在多个 Workers 之间分步学习,例如,在 Atari 2600 游戏中实现『超人』性能。麻烦的是,强化学习框架需要花费大量时间来掌握一个目标,而且框架往往是不灵活和不总是稳定的。

但不用担心,Google 近日发布了一个替代方案:基于 TensorFlow 的开源强化学习框架 Dopamine(多巴胺)。 Google 的博文中提到,这个基于 TensorFlow 的强化学习框架,旨在为 RL 的研究人员提供灵活性,稳定性和可重复性的研究。受到大脑中奖励动机行为的主要成分的启发,以及反映神经科学与强化学习研究之间强烈的历史联系,该平台旨在实现可推动激进发现的思辨研究(Speculative Research)。此版本还包括一组阐明如何使用整个框架的 Colabs。

除了强化学习框架的发布,谷歌还推出了一个 Baseline plots 网站,允许开发人员快速可视化多个智能体的训练运行情况。他们希望,这一框架的灵活性和易用性将使研究人员能积极尝试新的想法,不管是渐进式还是激进式的想法。

GitHub地址项目 GitHub 地址

23 个 Pandas 核心操作

Pandas 是基于 NumPy 构建的库,在数据处理方面可以把它理解为 NumPy 加强版,同时 Pandas 也是一项开源项目。它基于 Cython,因此读取与处理数据非常快,并且还能轻松处理浮点数据中的缺失数据(表示为 NaN)以及非浮点数据。在本文中,基本数据集操作主要介绍了 CSV 与 Excel 的读写方法,基本数据处理主要介绍了缺失值及特征抽取,最后的 DataFrame 操作则主要介绍了函数和排序等方法。

读取 CSV 格式的数据集

pd.DataFrame.from_csv(“csv_file”)

或者

pd.read_csv(“csv_file”)

读取 Excel 数据集

pd.read_excel("excel_file")

将 DataFrame 直接写入 CSV 文件

如下采用逗号作为分隔符,且不带索引:

df.to_csv("data.csv", sep=",", index=False)

基本的数据集特征信息

df.info()

基本的数据集统计信息

print(df.describe())

将 DataFrame 输出到一张表

print(tabulate(print_table, headers=headers))

当「print_table」是一个列表,其中列表元素还是新的列表,「headers」为表头字符串组成的列表。

列出所有列的名字

df.columns

删除缺失数据

df.dropna(axis=0, how='any')

返回一个 DataFrame,其中删除了包含任何 NaN 值的给定轴,选择 how=「all」会删除所有元素都是 NaN 的给定轴。

替换缺失数据

df.replace(to_replace=None, value=None)

使用 value 值代替 DataFrame 中的 to_replace 值,其中 value 和 to_replace 都需要我们赋予不同的值。

检查空值 NaN

pd.isnull(object)

检查缺失值,即数值数组中的 NaN 和目标数组中的 None/NaN。

删除特征

df.drop('feature_variable_name', axis=1)

axis 选择 0 表示行,选择表示列。

将目标类型转换为浮点型

pd.to_numeric(df["feature_name"], errors='coerce')

将目标类型转化为数值从而进一步执行计算,在这个案例中为字符串。

将 DataFrame 转换为 NumPy 数组

df.as_matrix()

取 DataFrame 的前面「n」行

df.head(n)

通过特征名取数据

df.loc[feature_name]

对 DataFrame 使用函数

该函数将令 DataFrame 中「height」行的所有值乘上 2:

df["height"].apply(*lambda* height: 2 * height)

或者:

def multiply(x):
return x * 2
df["height"].apply(multiply)

重命名行

下面代码会重命名 DataFrame 的第三行为「size」:

df.rename(columns = {df.columns[2]:'size'}, inplace=True)

取某一行的唯一实体

下面代码将取「name」行的唯一实体:

df["name"].unique()

访问子 DataFrame

以下代码将从 DataFrame 中抽取选定了的行「name」和「size」:

new_df = df[["name", "size"]]

总结数据信息

# Sum of values in a data frame
df.sum()
# Lowest value of a data frame
df.min()
# Highest value
df.max()
# Index of the lowest value
df.idxmin()
# Index of the highest value
df.idxmax()
# Statistical summary of the data frame, with quartiles, median, etc.
df.describe()
# Average values
df.mean()
# Median values
df.median()
# Correlation between columns
df.corr()
# To get these values for only one column, just select it like this#
df["size"].median()

给数据排序

df.sort_values(ascending = False)

布尔型索引

以下代码将过滤名为「size」的行,并仅显示值等于 5 的行:

df[df["size"] == 5]

选定特定的值

以下代码将选定「size」列、第一行的值:

df.loc([0], ['size'])

PyTorch 经验指南:技巧与陷阱

PyTorch 的构建者表明,PyTorch 的哲学是解决当务之急,也就是说即时构建和运行计算图。目前,PyTorch 也已经借助这种即时运行的概念成为最受欢迎的框架之一,开发者能快速构建模型与验证想法,并通过神经网络交换格式 ONNX 在多个框架之间快速迁移。本文(机器之心翻译)从基本概念开始介绍了 PyTorch 的使用方法、训练经验与技巧,并展示了可能出现的问题与解决方案。

PyTorch 是一种灵活的深度学习框架,它允许通过动态神经网络(例如利用动态控流——如 if 语句或 while 循环的网络)进行自动微分。它还支持 GPU 加速、分布式训练以及各类优化任务,同时还拥有许多更简洁的特性。以下是作者关于如何利用 PyTorch 的一些说明,里面虽然没有包含该库的所有细节或最优方法,但可能会对大家有所帮助。

神经网络是计算图的一个子类。计算图接收输入数据,数据被路由到对数据执行处理的节点,并可能被这些节点转换。在深度学习中,神经网络中的神经元(节点)通常利用参数或可微函数转换数据,这样可以优化参数以通过梯度下降将损失最小化。更广泛地说,函数是随机的,图结构可以是动态的。所以说,虽然神经网络可能非常适合数据流式编程,但 PyTorch 的 API 却更关注命令式编程——一种编程更常考虑的形式。这令读取代码和推断复杂程序变得简单,而无需损耗不必要的性能;PyTorch 速度很快,且拥有大量优化,作为终端用户你毫无后顾之忧。

本文其余部分写的是关于 grokking PyTorch 的内容,都是基于 MINIST 官网实例,应该要在学习完官网初学者教程后再查看。为便于阅读,代码以块状形式呈现,并带有注释,因此不会像纯模块化代码一样被分割成不同的函数或文件。

Pytorch 基础

PyTorch 使用一种称之为 imperative / eager 的范式,即每一行代码都要求构建一个图,以定义完整计算图的一个部分。即使完整的计算图还没有构建好,我们也可以独立地执行这些作为组件的小计算图,这种动态计算图被称为「Define-by-Run」方法。

GitHub地址项目 GitHub 地址

深度学习新王者:AutoML

TowardDataScienc 最近发布文章 《Everything you need to know about AutoML and Neural Architecture Search 》,将 AutoML 和神经架构搜索(NAS),定义为深度学习领域的新一代王者。

神经架构搜索(NAS)

在开发神经网络的过程中,架构工程事关重大,架构先天不足,再怎么训练也难以得到优秀的结果。当然,提到架构,很多人会想到迁移学习:譬如:把 ImageNet 上训练的 ResNet 拿来,换个数据集再训练,并根据训练结果更新权重,便完成了。这种方法的确也可行,但是要想得到最好的效果,还是根据实际情况设计自己的网络架构比较靠谱。设计神经网络架构,能称得上机器学习过程中门槛最高的一项任务了。想要设计出好架构,需要专业的知识技能,还要大量试错。

NAS 就为了搞定这个费时费力的任务而生。这种算法的目标,就是搜索出最好的神经网络架构。它的工作流程,通常从定义一组神经网络可能会用到的『建筑模块』开始。比如说 Google Brain 那篇 NasNet 论文,就为图像识别网络总结了这些常用模块:其中包含了多种卷积和池化模块 ——

NASNet blocks for image recognition network

NAS 算法用一个循环神经网络(RNN)作为控制器,从这些模块中挑选,然后将它们放在一起,来创造出某种端到端的架构。这个架构,通常会呈现出和 ResNetDenseNet 等最前沿网络架构一样的风格,但是内部模块的组合和配置有所区别。一个架构的好坏,往往就取决于选择的模块和在它们之间构建的连接。接下来,就要训练这个新网络,让它收敛,得到在留出验证集上的准确率。这个准确率随后会用来通过策略梯度更新控制器,让控制器生成架构的水平越来越高。这个过程很直观了。简单来说,很有小朋友搭积木的风范:让一个算法挑出一些积木,然后把它们组装在一起,做成一个神经网络。训练、测试,根据这个结果来调整选积木(模块)的标准和组装的方式。NAS 就是要用它来构建和当前最先进的架构风格非常类似的网络,这些模块也都是当前研究中常用的。

NAS 算法的主要工作,就是给这些模块换个连接方式。

下面,就是它发现的 ImageNet 最佳神经网络架构:

Best discovered blocks and structure for the ImageNet network on the right below

但是,用 450 个 GPU 来训练,找到一个优秀的架构也需要训练 3 到 4 天,这种方法还是门槛太高、效率太低。于是,2017 年开始,Google 先后提出了渐进式神经架构搜索(PNAS)与高效神经架构搜索(ENAS)。试图通过改进模型训练方式来提高效率,并降低训练成本,使单个 1080 Ti GPU 也能达到不错的模型搜索效率。

深度学习新方法 AutoML

很多人将 AutoML 称为深度学习的新方式,认为它改变了整个系统。有了 AutoML,我们就不再需要设计复杂的深度学习网络,只需运行一个预先设置好的 NAS 算法。最近,Google 提供的 Cloud AutoML 将这种理念发挥到了极致。只要你上传自己的数据,Google 的 NAS 算法就会为你找到一个架构,用起来又快又简单。AutoML 的理念就是把深度学习里那些复杂的部分都拿出去,你只需要提供数据,随后就让 AutoML 在神经网络设计上尽情发挥吧。这样,深度学习就变得像插件一样方便,只要有数据,就能自动创建出由复杂神经网络驱动的决策功能。

How AutoML works

不过,AutoML 价格也并不算亲民,每小时收费 20 美元。此外,一旦你开始训练,则无法导出模型,并且得用谷歌提供的 API 在云上运行你的网络,这些限制看起来都不是很方便,另外,这里有一份 Google AutoML 的快速入门指导。

ENAS 算法模型

总的来说,若你想使用 AutoML,现在已经有很多不同的选择,这完全取决于你是否会使用你想要的算法,以及你对这件事的预算如何。过去几年,在深度学习工作的自动化上,整个领域都在大步向前,让深度学习更贴近大众、更易用。以下是几款同样采用 ENAS 算法模型实现自动神经网络架构搜索的项目,面向 KerasTensorFlowPytorch 深度学习框架 ——

GitHub地址

2018 年 GPU 选型

深度学习是一类对计算资源有着高度要求的领域,而 GPU 的选择将从根本上决定你的深度学习体验。如果没有 GPU,你可能需要等上几个月才能拿到实验结果,或者在单一实验步骤上耗费整整一天乃至更久,甚至有可能在苦等许久之后只得到“所选参数关闭”以及模型分歧等错误。

有了良好且可靠的 GPU,我们将能够对深层网络的设计方案与参数进行快速迭代,且能够将原本长达数月或者数天的处理过程压缩至数小时甚至数分钟。因此,在购买 GPU 时做出正确的选择对深度学习而言至关重要。

Time Dettmers 是瑞士卢加诺大学信息学硕士,热衷于开发自己的 GPU 集群和算法来加速深度学习。以下是他对包括 2018 年薪发布的 RTX GPU 的选型与建议。

总的来说,我认为选择 GPU 有两个主要策略:首先,使用 RTX 20 系列 GPU 进行快速升级,或者使用便宜的 GTX 10 系列 GPU,并在 RTX Titan 上市后进行升级。如果你对性能要求不高,例如对于 Kaggle、初创公司、原型设计或学习深度学习,廉价的 GTX 10 系列 GPU 就可以让你受益匪浅。如果你选择 GTX 10 系列 GPU,请确认 GPU 内存大小可以满足你的要求。

具体选择推荐如下:

  • 整体最佳:GPU:RTX 2080 Ti
  • 经济实惠但价格昂贵:RTX 2080,GTX 1080
  • 经济实惠且便宜:GTX 1070,GTX 1070 Ti,GTX 1060
  • 数据集> 250GB:RTX 2080 Ti 或 RTX 2080
  • 不差钱:GTX 1060(6GB)
  • 穷:GTX 1050 Ti(4GB)或 CPU(原型设计)+ AWS / TPU(训练)
  • Kaggle 竞赛:GTX 1060(6GB)用于原型设计,AWS 用于最终训练;使用 FastAI 库
  • 有竞争力的计算机视觉研究员:GTX 2080 Ti在 2019 年升级到 RTX Titan
  • 研究员:RTX 2080 Ti 或 GTX 10XX – > RTX Titan —— 检查当前型号的内存要求
  • 想构建一个 GPU 集群:这非常复杂,参见该文章
  • 认真想学深度学习的人:用 GTX 1060(6GB)或便宜的 GTX 1070 或 GTX 1070 Ti 起步
  • 就是想尝试一下深度学习的人:GTX 1050 Ti(4 或 2GB)最重要的建议

NVIDIA 次世代 AI 芯片 Jetson Xavier

NVIDIA Jetson Xavier Developer Kit
NVIDIA Jetson Xavier Developer Kit

WRC 2018 世界机器人大会上,NVIDIA 展出了专为机器人设计的芯片 Jetson Xavier。同时,NVIDIA 高级软件经理李铭博士也向网易智能等媒体详细介绍了这款芯片的特点,阐述了 Jetson Xavier 如何推动机器人软硬件技术的发展。NVIDIA Jetson Xavier 是 Jetson 平台的最新成员。 它是用于自动机器的 AI 计算机,可在 30 万以下的嵌入式模块中提供 GPU 工作站的性能。 凭借 10 万,15 万和 30 万的多种工作模式,Jetson Xavier 的能效比其前身 Jetson TX2 高出 10 倍以上,性能超过 20 倍。

一直以来,NVIDIA 的产品线都是建立在 GPGPU 这一架构之上。从 NVIDIA 的角度来看,当前人工智能已经发展到了一个转折点。拿图像识别这一应用领域来说,AI 已经从最开始解决『是谁不是谁』的问题,到后来可以寻找某一特定目标,再到如今可以在图像识别过程中附加各种逻辑和决策,越来越复杂抽象,这主要得益于各种计算网络的出现和发展。

Jetson Xavier 是 NVIDIA 单独做过的最长的一个处理器项目,NVIDIA 耗费了五年的时间(三年设计、两年筑造)来打造它,共有超过 8,000 人参与了设计与开发,也是 NVIDIA 首款专门为机器人设计的产品。

Jetson Xavier 拥有 6 种高性能处理器,包括 NVIDIA 自研的 Carmel 架构 8 核 64 位 CPU、Volta 架构 512 CUDA 处理器 GPU、2 个 NVDLA 深度学习加速器、1 个图像处理器、1 个视觉处理器和 1 个视频处理器。这些处理器使其能够同时、且实时地处理数十种算法,以用于传感器处理、测距、定位和绘图、视觉和感知以及路径规划。

Jetson Xavier 专为机器人,无人机和其他自动机器而设计,这些机器需要在边缘进行最大程度的计算,以运行现代 AI 工作负载并解决制造,物流,零售,服务,农业等方面的问题。 Jetson Xavier 也适用于智能城市应用和便携式医疗设备。

跨象乘云™ 《机器人与移动智能开发实战》课程,面向新一代人工智能边缘计算应用场景,基于 NVIDIA Jetson TX 开发平台,借助高性能、低能耗的 GPU,学生将学习到如何将深度学习模型嵌入到移动设备;在嵌入式『板载终端设备』上处理复杂数据;并铸就更大型更复杂的深度神经网络。从机器人和无人机,到企业协作设备和智能摄像机无一不可进行快速及准确的推理。内容覆盖基于各种新一代人工智能算法,实现 Jetson 芯片机器人用于传感器处理、测距、定位和绘图、视觉和感知以及路径规划等操作。

广东省新一代人工智能发展规划

近日,广东省人民政府印发《广东省新一代人工智能发展规划》,提出了『三步走』的发展目标 ——

  • 到 2020 年,广东人工智能产业规模、技术创新能力和应用示范均处于国内领先水平,部分领域关键核心技术取得重大突破,一批具有地域特色的开放创新平台成为行业标杆,人工智能成为助推广东产业创新发展的重要引擎,形成广东经济新的增长点。
  • 到 2025 年,广东人工智能基础理论取得重大突破,部分技术与应用研究达到世界先进水平,开放创新平台成为引领人工智能发展的标杆,有力支撑广东建设国家科技产业创新中心。
  • 到 2030 年,人工智能基础层、技术层和应用层实现全链条重大突破,总体创新能力处于国际先进水平,聚集一批高水平人才队伍和创新创业团队,人工智能产业发展进入全球价值链高端环节,人工智能产业成为引领国家科技产业创新中心和粤港澳大湾区建设的重要引擎。

边缘计算潜力无限

自动驾驶汽车本质上是一台装有轮子的高性能计算机,它通过大量的传感器来收集数据。为了使得这些车辆能够安全可靠地运行,它们需要立即对周围的环境做出反应。处理速度的任何延迟都有可能是致命的。虽然联网设备的数据处理现在主要是在云端进行的,但在中央服务器之间来回传送数据可能需要几秒钟的时间。这一时间跨度太长了。

云计算已经不足以即时处理和分析由物联网设备、联网汽车和其他数字平台生成或即将生成的数据,这个时候边缘计算能够派上用场。该技术拥有着应用于诸多行业领域和发挥巨大作用的潜力。边缘计算则让自动驾驶汽车更快速地处理数据成为可能。这种技术使得联网设备能够处理在『边缘』形成的数据,这里的『边缘』是指位于设备内部或者与设备本身要近得多的地方。

据估计,到 2020 年,每人每天平均将产生 1.5 GB 的数据量。随着越来越多的设备连接到互联网并生成数据,云计算可能无法完全处理这些数据——尤其是在某些需要非常快速地处理数据的使用场景当中。边缘计算是云计算以外的另一种可选解决方案,未来它的应用范围很有可能将远不止是无人驾驶汽车,甚至包括所有能产生数据并执行反馈的物联网设备。包括亚马逊、微软和谷歌在内的一些科技巨头都在探索『边缘计算』 —— 或直接称为物联网技术,这可能会引发下一场大规模的计算竞赛。

在我们到处充斥着数据的未来,将有数十亿部设备连接到互联网,因此更快更可靠的数据处理将变得至关重要。近年来,云计算的整合和集中化性质被证明具有成本效益和灵活性,但物联网和移动计算的兴起给网络带宽带来了不小的压力。最终,并不是所有的智能设备都需要利用云计算来运行。在某些情况下,运算过程中的某些流程与数据的往返传输能够被避免。由此,边缘计算应运而生。边缘计算使得数据能够在最近端(如电动机、泵、发电机或其他的传感器)进行处理,减少在云端之间来回传输数据的需要。

边缘计算被描述为:

『微型数据中心的网状网络』,在本地处理或存储关键数据,并将所有接收到的数据推送到中央数据中心或云存储库,其覆盖范围不到 100 平方英尺。

例如,一列火车可能包含可以立即提供其发动机状态信息的传感器。在边缘计算中,传感器数据不需要传输到火车上或者云端的数据中心,来查看是否有什么东西影响了发动机的运转。本地化数据处理和存储对计算网络的压力更小。当发送到云的数据变少时,发生延迟的可能性 —— 云端与物联网设备之间的交互导致的数据处理延迟就会降低。这也让基于边缘计算技术的硬件承担了更多的任务,它们包含用于收集数据的传感器和用于处理联网设备中的数据的 CPU 或 GPU。边缘计算具体是指在网络的『边缘』处或附近进行的计算过程,而雾计算则是指边缘设备和云端之间的网络连接。换句话说,雾计算使得云更接近于网络的边缘;因此,根据 OpenFog 的说法,“雾计算总是使用边缘计算,而不是边缘计算总是使用雾计算。”

边缘计算的优势

虽然边缘计算是一个新兴的领域,但是它拥有一些显而易见的优点,包括:

  • 实时或更快速的数据处理和分析:数据处理更接近数据来源,而不是在外部数据中心或云端进行,因此可以减少迟延时间。
  • 较低的成本:企业在本地设备的数据管理解决方案上的花费比在云和数据中心网络上的花费要少。
  • 网络流量较少:随着物联网设备数量的增加,数据生成继续以创纪录的速度增加。因此,网络带宽变得更加有限,让云端不堪重负,造成更大的数据瓶颈。
  • 更高的应用程序运行效率:随着滞后减少,应用程序能够以更快的速度更高效地运行。
  • 降低云端计算压力:降低发生集中式云计算故障损失。

减少对云的依赖也意味着某些设备可以稳定地离线运行。这在互联网连接受限的地区尤其能够派上用场 —— 无论是在严重缺乏网络服务的特定地区,还是油田等通常无法访问的偏远地区。边缘计算的另一个关键优势是安全性和合规性,由于边缘设备能够在收集和本地处理数据,数据不必传输到云端。因此,敏感信息不需要经由网络,这样要是云遭到网络攻击,影响也不会那么严重。另外,边缘计算还能够让新兴联网设备和旧式的『遗留』设备之间实现互通。它将旧式系统使用的通信协议『转换成现代联网设备能够理解的语言』。这意味着传统工业设备可以无缝且高效地连接到现代的物联网平台。

人工智能芯片制造商英伟达于 2017 年推出了 Jetson TX2,这是一个面向边缘设备的人工智能计算平台。它的前身是 Jetson TX1,它号称要『重新定义将高级 AI 从云端扩展到边缘的可能性』。边缘计算正在交通运输,医疗保健,智能制造业,农业和智能农场,能源和电网控制,金融,零售等行业被广泛应用,从可穿戴设备到汽车再到机器人,物联网设备正呈现出越来越强劲的发展势头。

随着我们朝着更加互联的生态系统迈进,数据生成将继续飞速增加,尤其是在 5G 技术取得腾飞,进一步加快网络连接以后。虽然中央云或数据中心传统上一直是数据管理、处理和存储的首选,但这两种方案都存在局限性。边缘计算可以充当替代解决方案,但由于该技术仍处于起步阶段,因此还很难预料其未来的发展。

设备能力方面的挑战 —— 包括开发能够处理云端分流的计算任务的软件和硬件的能力 —— 可能会出现。能否教会机器在能够在边缘执行的计算任务和需要云端执行的计算任务之间切换,也是一个挑战。即便如此,随着边缘计算更多地被采用,企业将有更多的机会在各个领域测试和部署这种技术。有些用例可能比其他用例更能证明边缘计算的价值,但整体来看,该技术对我们整个互联生态系统的潜在影响则可能是翻天覆地的。

27.31TB 人工智能科研数据集

Academic Torrents 是一个分布式系统,以推动大规模数据共享为目标,包含了各式各样的数据集,总计 27.31 TB 的资源。平台设计了一个分布式系统来共享巨大的数据集,供研究人员和研究人员共享。其结果是一个可扩展的、安全的、容错的数据存储库,具有快速的下载速度。目前已成为国外高校 AI 与大数据科研中数据共享的主要途径。

GitHub地址项目 GitHub 地址

深度学习经典网络架构与数据集

卷积神经网络在视觉识别任务上的表现令人称奇。好的 CNN 网络是带有上百万参数和许多隐含层的『庞然怪物』。事实上,一个不好的经验规则是:网络越深,效果越好。AlexNet,VGG,Inception(GoogleNet)和 ResNet 是最近一些流行的 CNN 网络。

AlexNet

AlexNet 是一个较早应用在 ImageNet 上的深度网络,其准确度相比传统方法有一个很大的提升。它首先是5个卷积层,然后紧跟着是 3 个全连接层,如下图所示:

VGG16

VGG16 是牛津大学 VGG 组提出的。VGG16 相比 AlexNet 的一个改进是采用连续的几个 3×3 的卷积核代替 AlexNet 中的较大卷积核(11×11,5×5)。对于给定的感受野(与输出有关的输入图片的局部大小),采用堆积的小卷积核是优于采用大的卷积核,因为多层非线性层可以增加网络深度来保证学习更复杂的模式,而且代价还比较小(参数更少)。

GoogLeNet/Inception

尽管 VGG 可以在 ImageNet 上表现很好,但是将其部署在一个适度大小的 GPU 上是困难的,因为需要VGG在内存和时间上的计算要求很高。由于卷积层的通道数过大,VGG 并不高效。比如,一个 3×3 的卷积核,如果其输入和输出的通道数均为 512,那么需要的计算量为 9x512x512。

在卷积操作中,输出特征图上某一个位置,其是与所有的输入特征图是相连的,这是一种密集连接结构。GoogLeNet 基于这样的理念:在深度网路中大部分的激活值是不必要的(为0),或者由于相关性是冗余。因此,最高效的深度网路架构应该是激活值之间是稀疏连接的,这意味着 512 个输出特征图是没有必要与所有的 512 输入特征图相连。存在一些技术可以对网络进行剪枝来得到稀疏权重或者连接。但是稀疏卷积核的乘法在 BLAS 和 CuBlas 中并没有优化,这反而造成稀疏连接结构比密集结构更慢。

据此,GoogLeNet 设计了一种称为 inception 的模块,这个模块使用密集结构来近似一个稀疏的 CNN,如下图所示。前面说过,只有很少一部分神经元是真正有效的,所以一种特定大小的卷积核数量设置得非常小。同时,GoogLeNet 使用了不同大小的卷积核来抓取不同大小的感受。

ResNet

从前面可以看到,随着网络深度增加,网络的准确度应该同步增加,当然要注意过拟合问题。但是网络深度增加的一个问题在于这些增加的层是参数更新的信号,因为梯度是从后向前传播的,增加网络深度后,比较靠前的层梯度会很小。这意味着这些层基本上学习停滞了,这就是梯度消失问题。深度网络的第二个问题在于训练,当网络更深时意味着参数空间更大,优化问题变得更难,因此简单地去增加网络深度反而出现更高的训练误差。残差网络 ResNet 设计一种残差模块让我们可以训练更深的网络。

经典图像识别数据集

INRIA Person 行人数据集

目前使用最多的静态行人检测数据集,由『HOG + SVM』的作者 Dalal 创建(2005年)。训练集有正样本 614 张(包含 2,416 个行人),负样本 1,218 张;测试集有正样本 288 张(包含 1,126 个行人),负样本 453 张。下载地址

KITTI 车辆检测数据集

这是一个测试交通场景中的车辆检测、追踪、语义分割等算法的公开数据集。由丰田汽车主导,目前在测试自动驾驶等识别算法中应用比较多。实际上,KITTI 已经成为 ADAS 行业的实际效果检测标准。下载地址

自然语言处理 (NLP) 库对比

本文概述和比较当前六大常用自然语言处理库 ——

NLTK、spaCy、scikit-learn、gensim、Pattern、polyglot。

现在自然语言处理NLP变得越来越流行,这在深度学习发展的背景下尤其引人注目。NLP 是人工智能的一个分支,旨在从文本中理解和提取重要信息,进而基于文本数据进行训练。NLP 的主要任务包括语音识别和生成、文本分析、情感分析、机器翻译等。

近几十年,只有适当受过语言学教育的专家才能从事自然语言处理方向的工作。除了数学和机器学习,他们还应该熟悉一些重要的语言概念。但是现在,我们可以使用写好的 NLP 库。它们的主要目的是简化文本预处理过程,这样我们可以专注于构建机器学习模型和超参数调整。

人们设计了很多工具和库来解决 NLP 问题。今天,我们想基于自身经验,概述和比较最流行、最有用的自然语言处理库。kdnuggets 近日发文介绍了所有库只有部分任务会重合。因此,有时候很难直接将它们进行对比。该文介绍了一些特征,然后对比这些库。详情查看:对比图片

  • NLTK(自然语言工具包)用于分词、词形还原、词干提取、解析、句法分析、词性标注等任务。该库具备可用于几乎所有 NLP 任务的工具。
  • spaCy 是 NLTK 的主要竞争者。这两个库可用于同样的任务。
  • scikit-learn 提供一个用于机器学习的大型库,包含用于文本预处理的工具。
  • gensim 是用于话题空间建模、向量空间建模和文档相似度的工具包。
  • Pattern 库是作为 web 挖掘模块提供服务的,因此,它也支持 NLP 任务。
  • polyglot 是另一个用于 NLP 的 Python 包。它不是很流行,但也可以用于大量 NLP 任务。

本文对比了几个流行的 NLP 库的特征。尽管大部分库适用的任务有重合,但一些库需要用独特的方法来解决特定的问题。确切来说,现在最流行的 NLP 包是 NLTK 和 spaCy。它们是 NLP 领域中的主要竞争者。我们认为,二者之间的差别在于解决问题的一般哲学。

NLTK 更加学术。你可以用它尝试不同的方法和算法,结合使用等等。spaCy 为每个问题提供一个开箱即用的解决方案。你不用思考哪种方法更好:spaCy 的作者已经替你考虑了。此外,spaCy 速度很快(是 NLTK 的好几倍)。它的一个缺陷在于支持的语言种类有限。但是,它所支持的语言数量在持续增加。因此,我们认为 spaCy 在大部分情况下是最优选,但是如果你想尝试一些特别的任务,可以使用 NLTK。