TowardsDataScience-博客中文翻译-2016-2018-九十二-

54 阅读1小时+

TowardsDataScience 博客中文翻译 2016~2018(九十二)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

使用表格数据的深度学习:可视化、数据处理、分类嵌入

原文:towardsdatascience.com/deeplearnin…

(寻求项目合作)

与其他机器学习算法一样,在建立深度学习网络时,理解你的数据很重要。让我们使用一个简单的表格数据集来可视化数据,得出结论,以及不同的处理技术如何提高您的深度学习模型的性能。

金县房价数据集有 21613 个数据点,涉及金县的房屋销售价格。它有大约 19 个专栏,如下所示。它是日期、数字和分类数据的混合。使用开箱即用的数据,我们将得到 **149167.61 的 MAE。**然而,通过一些数据处理,我们可以得到低至 69471.41 的平均汇率。这超过了 50%的改进。

数据可视化

让我们深入研究数据,看看在构建模型之前,我们是否能对数据有所了解。我们将使用 Python 统计可视化库 Seaborn ,它构建在 matplotlib 之上。下面是每种功能相对于价格的分布。

  • 销售年份数据是双峰数据,包含 2014 年和 2015 年的数据
  • 诸如卧室数量、浴室数量、客厅平方英尺、楼上平方英尺、地下室平方英尺、销售价格等数据是单峰的,我们已经可以看出,对于这些特征具有较高价值的房屋,该模型可能具有较高的平均误差。

让我们看看特征 w.r.t .标签栏的相关性,也就是房子的销售价格。

构建深度学习模型

我将使用 keras 2.0 库构建一个序列神经网络来学习预测房价的回归模型。

导入数据集,然后将其分为定型集、验证集和测试集。

该模型有两个隐藏的密集图层和一个最终的线性组合图层来生成回归输出。我们将使用均方误差作为损失函数。

使用现成的数据给我们提供了 149167.61 的 MAE。现在让我们看看一些数据处理技术,以及它们如何帮助提高性能。

白化数据

我们的一些特征是 0.1 的数量级,一些是 10 的数量级,一些是 100 的数量级,一些是 10000 的数量级。不同数值顺序的这种差异会导致较高顺序的值支配其他值。“白化”数据有助于规范化不同值的顺序。

白化操作采用本征基中的数据,并将每个维度除以本征值,以标准化尺度。这种变换的几何解释是,如果输入数据是多变量高斯,那么白化后的数据将是均值为零、协方差矩阵相同的高斯。假设我们的数据应该是高斯分布,我们将计算每列的 z 得分。

关于预处理,重要的一点是任何预处理统计(例如,数据平均值)必须只在训练数据上计算,然后应用于验证/测试数据。

一旦我们用标准化的数据重新运行模型,我们的 MAE 下降到 **99622.24。**这是对使用现有数据的巨大改进。

将“经度”和“纬度”转换为距离

虽然经度和纬度可以按原样使用,但我们可以通过将经度和纬度转换为房子与固定位置的距离以及表示房子相对于固定位置的方向的布尔值来获得更多的洞察力。

使用新的特征“距离”、“更长”、“更短”、“更长”和“更短”,我们在数据集上再次训练模型。训练集的结果 MAE 进一步下降到 87231.59。

处理分类数据

邮政编码是数据中的一个特征列。我们一直把它当作一个正常的数值,但是,不同的邮政编码值没有顺序关系。此外,它们编码一些更深层次的关系,例如,一些邮政编码有更昂贵的房子,因为它们更接近学校或交通等。

借助于嵌入,可以丰富地表达分类数据。你可以从 fast.ai 的这篇文章中阅读更多关于嵌入的内容。

为了在 Keras 2.0 中使用嵌入,我们必须使用函数式 API。输入之一将是邮政编码数据,我们将把它转换成一个嵌入。另一个输入将是其他特征的向量。

如果我们把模型打印出来并可视化,这个模型会更容易理解。

训练这个模型并在测试数据集上运行它,MAE 急剧下降到 69471.41。

让我们使用 TSNE 库来可视化 zipcode 嵌入,如下所示:

我们看到左侧有一组邮政编码,其中包含售价较高的房屋。

结论

因此,当我们从 MAE 为 **149167.61 开始,**在白化数据、处理数据、使用分类嵌入之后,我们将 MAE 减少到了 69471.41。

DeepMind 的游戏《用深度强化学习捕捉旗帜》

原文:towardsdatascience.com/deepminds-p…

#4 研究论文讲解

DeepMind 和其他大学发表了许多端到端强化学习论文,用于解决可以由单个代理解决的问题。端到端 RL 算法通过将像素作为输入并将控制作为输出来学习网络中的特征表示和决策制定。

Previous Work: Single player game Source

现实世界中存在一些问题,这些问题需要多个独立行动的个体共同协作来实现一个目标。从踢足球或打篮球到让火箭登陆月球,一组人按照一个策略一起工作,通过降低失败的风险来更快、更安全地完成任务。这张纸可以用来解决很多现实生活中的任务,所以让我们分解这张纸来了解它们的解决方案。

DeepMind 已经建立了一个端到端的基于群体的 RL 算法,该算法使用两层优化过程成功解决了这个问题&通过在基于团队的 3D 多智能体环境(捕捉旗帜)中训练个体,彼此独立地行动和学习,战略性地一起工作以实现单一目标。

这导致模型遭受学习问题的高度复杂性,该学习问题是由环境中其他学习代理的并发适应引起的。

游戏夺取旗帜具有上述问题的所有特征:

1。3D 第一人称视角多代理游戏。(由于 fpv 的相似性,也可以在机器人中实现)

2。在与对手或队友相同的环境中比赛时,代理不知道彼此的决定。

3。学习高级认知技能的基于策略的游戏*。*

此外,每个游戏的室内和室外主题地图都是随机生成的。由多名个人玩家组成的两个对立团队通过战略性地导航、标记和躲避对手来争夺对方的旗帜。五分钟后获得最多旗帜的队伍赢得比赛。

特设小组

为了开发能够获得通用技能的更通用的策略和学习代理,在固定地图上训练固定的代理团队减少了训练数据的多样性——相反,本文设计了一种算法和训练程序,使代理能够获得对地图、玩家数量和队友选择的可变性具有鲁棒性的策略,这是一种与特设团队 游戏密切相关的范例。

最终的赢/输是从环境接收到的延迟的偶发信号,使得在 5 分钟游戏结束时仅基于一个二进制信号来优化代理执行的 1000 个动作变得困难。

这使得我们很难从那些没有帮助的行为中辨别出哪些行为对赢得比赛是有效的。

我们可以通过增加游戏中的奖励数量来解决这个问题。通过使用更频繁的内部奖励,可以根据代理执行的操作给予奖励。

高级战略 CTF 游戏的记忆和长期时间推理要求通过引入一种代理架构来满足,该架构具有多时间尺度表示,令人想起在灵长类动物大脑皮层和外部工作记忆模块中观察到的情况,主要受人类情景记忆的启发。

这 3 项创新集成在一个可扩展的大规模分布式异步计算框架中。

在游戏中,代理在时间步长t接收来自第一人称视角的原始 RBG 像素输入**X***t*,产生控制动作**a***t* ,并接收游戏点数**ρ***t* 来训练代理的策略π

强化学习的目标是找到一个策略,使得在 T 个时间步的 CTF 博弈中期望的累积γ折扣奖励最大化。

Expected cumulative γ-discounted reward over a CTF game

π由具有外部记忆的多时间尺度递归神经网络参数化。

agent 的体系结构模型构建了一个时间层次的时间表示空间,并使用递归潜变量来促进顺序 agent 对记忆和时间连贯动作序列的使用。

(Figure S10 in paper) Network architectures of agents

获胜概率

对于****特设团队,代理人的策略πo 应该最大化其团队获胜的概率,{ π0, π1, π2, ……… , π(N-1/2) }及其队友的策略{ π1, π2, ……… , π(N-1/2) },对于游戏中总共 N 个玩家:

Ad-hoc probability of winning

其中,如果左边赢了,获胜运算符>返回 1,如果输了,返回 0,并随机打破平局。此外,ω代表游戏的特定地图。

团队中的 FTheW**——现在我们使用更频繁的内部奖励**r***t*, 我们可以通过基于可用的游戏点信号**ρ***t* 【点被注册为例如捕获旗帜的事件】指定**r***t =* w(**ρ***t*)并允许代理学习转换w来操作每个代理具有更密集的奖励函数的想法,从而内部奖励 r t 的策略优化优化 FThWin,给我们 FTW 代理

不支持用于在如此高的规模下一起训练 1000 个多智能体环境的传统方法,这使得这些方法不稳定。

可扩展性— 总人口**P** 通过在玩家中引入多样性来稳定训练,不同的代理被彼此并行地训练(54)。

配对— 为了提高代理的技能,从群体P中抽取队友&对手。由 ι 索引的代理为使用随机匹配方案mp(π) 的训练游戏,该随机匹配方案使合作玩家偏向于具有与玩家p相似的技能,增加了不确定性。

代理技能等级— 代理技能分数是根据训练游戏的输出,通过计算 Elo 分数 (15)在线估算的。

元优化— 用一种优化方法训练其他优化者的方法。本文使用群体来元优化 RL 流程本身的内部奖励&超参数。这可以看作是两层优化 RL 问题。内部优化又名JInner:内部优化由 RL 解决,它最大化 J inner,代理的预期未来贴现内部报酬。外部优化又名 J 外部 : 它是通过基于人口的训练(PBT)来解决的,并且它被最大化 w.r.t .内部奖励方案**w**p 和超参数**φ**p ,内部 优化提供元转换动态。

PBT 是一个在线进化过程,它适应内部奖励和超参数,并通过用更好的代理的变异版本替换表现不佳的代理来执行模型选择。

代理策略的这种联合优化有助于利用将学习和进化结合在一起的潜力,从而最大化:

训练期间的评估|锦标赛

为了评估训练期间代理人的综合表现,在程序生成的地图上进行一场比赛,其中包括三种类型的代理人的特别比赛。

  1. FTW 的烧蚀版本。
  2. 雷神之锤 3 竞技场脚本机器人
  3. 具有第一人称游戏经验的人类参与者。

结果

1。FTW 明显超过了人类在地图上的胜率,这是代理人和人类之前都没有见过的,即零射击一般化,两个人组成的团队平均每场比赛捕获 16 面旗帜,少于两个 FTW 代理人组成的团队。

2。 人-代理 v/s 代理-代理— 只有作为 h-a 团队的一部分,我们才观察到一个人赢了一个 a-a 团队(赢的概率为 5%)。

3。 职业游戏玩家 v/s FTW — 即使在 12 个小时的练习后,人类游戏测试员也只能在与代理团队的比赛中赢得 25%的胜利。

4。 特工 FTW 特工的标记准确率为 80%,而人类落后,只有 48%的成功率。即使他们的标记准确性被人为降低到人类的准确性,代理人还是赢得了比赛。

人类卓越的观察和控制分辨率帮助他们在成功远程标记中超过 FTW 代理 17% &代理 0.5%。

但 FTW 再次以 258 毫秒的短距离标记反应时间超过了人类,以 559 毫秒超过了人类。

点燃网络中的神经元!!!知识表示📺

研究网络是如何学习到具有如此高级丰富表征的技能的。网络询问游戏的过去、现在或未来状态。比如说—

  • 问:我有旗子吗?(目前)**
  • 问:**我最近见到我的队友了吗?(过去)
  • ****问:我会很快进入对手的基地吗?(未来)

类似地,基于游戏的特征,总共询问了 200 个二元问题,以观察网络的内部表现。

结果

根据作者的说法,如果对主体内部状态的逻辑回归准确地模拟了特征,那么主体就知道给定的特征。有趣的是,FTW 代理的表示被发现特别好地编码了与过去相关的特征:例如,FTW 代理能够以 91%的 AUCROC ( 在接收器操作特性曲线下的面积)对两个标志都偏离的状态进行分类(标志未落在基础),相比之下,自播放基线的分类率为 70%。

我鼓励你看看报纸,看看更详细的统计数据。

********

(Fig: S4 in paper) 40 Question on high-level game state feature(Columns) for different agents(Rows) for FTW agent

(英)可视化(= visualization)

论文中有更多的视觉化图像可以帮助你。我选择了几个不需要解释的:

(Fig: S7 in paper) Hilton Diagrams. At 450K the agent appears to have learned to read from near its own base and just outside the opponent base.

(Figure S6 in paper)Top two rows: Selected saliency analysis of FTW agent. Bottom: Saliency analysis of a single neuron that encodes whether an opponent is holding a flag.

(Fig:- S8 in paper) internal representations learned from playing CTF for the FTW and Self-play + RS agent

结论

在本文中,仅使用像素和游戏点数作为输入的人工智能体可以在丰富的多智能体环境中学习进行高度竞争性的游戏。这是通过将智能体训练中的许多创新(基于群体的智能体训练、内部奖励优化和时间分级 RL)与可扩展的计算架构结合起来实现的。

本文可用于解决您周围的其他问题,这些问题的解决方案中包含内存和临时扩展接口方面的困难。所以,我鼓励你们阅读这篇论文,从中获得乐趣&理解在我们关于机器学习的知识的边缘出现的方法,并通过实现这篇论文来突破边界,解决现实世界的问题,以生活在人类知识的边缘。

感谢您阅读文章。阅读更多你最喜欢的论文,并获得#PaperExplained 通知。在媒体推特上关注我。

********

你会喜欢的以前的故事:

**** [## DeepMind 惊人的混搭 RL 技术

#1 研究论文解释

hackernoon.com](hackernoon.com/deepminds-a…) [## 用 6 个神经元玩雅达利|开源代码

#2 研究论文解释

towardsdatascience.com](/playing-atari-with-6-neurons-open-source-code-b94c764452ac) [## Google X 在机器人领域使用视觉的深度强化学习

#3 研究论文解释

hackernoon.com](hackernoon.com/google-xs-d…) [## 激活函数:神经网络

Sigmoid,tanh,Softmax,ReLU,Leaky ReLU 解释!!!

towardsdatascience.com](/activation-functions-neural-networks-1cbd9f8d91d6) [## 纪元与批量大小与迭代次数

了解您的代码…

towardsdatascience.com](/epoch-vs-iterations-vs-batch-size-4dfb9c7ce9c9)****

DeepSchool.io:深度学习学习

原文:towardsdatascience.com/deepschool-…

DeepSchool.io 是一个开源的、基于社区的项目,教授深度学习(DL)的基本知识。所有的课程都是互动的,(希望)有趣,偶尔会抨击特朗普先生(查看特朗普推特上的笔记本)。这个项目来自我作为数据科学家在 Arbor Networks 工作时每周上的一节课。

就我个人而言,我是在机器学习领域获得博士学位的。然而,随着 Keras 等工具的发展,DL 对于普通社区来说变得更加容易访问。这不再仅仅是学术上的好奇。

即使有这些可用的工具,教授深度学习也可能相当困难。我上的第一课完全是一场灾难。我忘记了我从哪里开始,直接跳进了一个多层的深网。我想当然地认为人们会理解什么是损失函数,什么是回归和逻辑回归。

相反,我也不想在数学上花太多时间。我想创造一些东西,让人们能够快速解决 DL 问题,而不是过于深入理论。我花了 6 个月左右的时间在吴恩达的 DL 课程上,这个课程确实是在实践这个理论。不幸的是,这并没有让我具备以任何有意义的方式舒适地使用 DL 所必需的工具。我们的目标是着眼于您可以用 DL 做些什么。

目标

  1. 让深度学习更容易(代码最少)。
  2. 最小化所需的数学。
  3. 让它变得实用(在笔记本电脑上运行)。
  4. 开源深度学习 Learning。
  5. 围绕 DL 发展一个协作实践社区
  6. 迷因:不认真。让 DL 变得有趣和互动,这意味着更多的特朗普推文。

假设您能够用 Python 编写代码。我把所有代码都放在 Jupyter 的笔记本上,唯一的原因是你可以和它互动。在单个 python 脚本上运行会降低这种交互性。

和 fast.ai 有什么不同?

一些差异,包括较短的视频和 Jupyter 笔记本电脑基本上是自给自足的。但我希望主要的区别是社区。我真正为 deep school 设想的是,这将在世界各地建立大量的 Meetup 节点,人们将在那里学习、指导和交流人工智能知识。

看这里是我关于机器学习和深度学习的课程(使用代码 DEEPSCHOOL-MARCH 到 85 折)。

使用深度学习的违约风险

原文:towardsdatascience.com/default-ris…

由于信用记录不足或不存在,许多人很难获得贷款。不幸的是,这些人经常被不可信的贷方利用。像 Home Credit 这样的公司通过提供积极安全的借贷体验,努力扩大无银行账户人群的金融包容性。为了确保这些得不到充分服务的人群拥有积极的贷款体验,Home Credit 利用各种替代数据(例如,包括电信和交易信息)来预测其客户的还款能力。通过使用各种统计、机器学习和深度学习方法,我们释放了他们数据的全部潜力。这样做将确保有能力还款的客户不会被拒绝,并且贷款的本金、到期日和还款时间表将使他们的客户获得成功。

这个项目的目标是使用历史贷款申请数据来预测申请人是否能够偿还贷款。这是一个标准的监督分类任务:

  • **监督:**标签包含在训练数据中,目标是训练一个模型来学习根据特征预测标签
  • **分类:**标签为二元变量,0(会按时还贷),1(会有困难还贷)

在这个项目中,实现的目标是:

  • 数据探索例程被设计和实现来进行统计分析和可视化。
  • 建立分类模型朴素贝叶斯、逻辑回归、支持向量机(SVM)、决策树、随机森林、梯度推进机(GBM)深度学习来预测申请人是否能够偿还贷款。
  • 通过准确度、混淆矩阵、精确度、召回率、真阴性率(TNR)、假发现率(FDR)、增益图、提升图、K-S 图、ROC — AUC 图评估分类模型。
  • 将最终的解决方案部署为一个 Web 应用程序。

数据源

数据由 Home Credit ( Dataset )提供,这是一项致力于向没有银行账户的人群提供信贷额度(贷款)的服务。预测客户是否会偿还贷款或有困难是一项关键的业务需求,Home Credit 希望释放他们数据的全部潜力,看看可以开发什么样的机器学习/深度学习模型来帮助他们完成这项任务。

数据探索

数据探索是一个开放式的过程,在这个过程中,我们计算统计数据并制作图表,以发现数据中的趋势、异常、模式或关系。数据探索的目标是了解我们的数据能告诉我们什么。它通常从高层次的概述开始,然后缩小到特定的领域,因为我们发现了数据中有趣的领域。这些发现本身可能是有趣的,或者它们可以用于通知我们的建模选择,例如通过帮助我们决定使用哪些功能。

检查目标列的分布

目标是我们被要求预测的:要么 0 表示贷款按时偿还,要么 1 表示客户有支付困难。我们首先检查属于每个类别的贷款数量,并绘制计数百分比的饼图。

编码分类变量

我们对任何只有两个类别的分类变量使用标签编码,对任何有两个以上类别的分类变量使用一次性编码。标签编码的问题是它给了类别一个任意的顺序。分配给每个类别的值是随机的,并不反映该类别的任何固有方面。如果一个分类变量只有两个唯一值(比如男性/女性),那么标签编码就可以了,但是对于两个以上的唯一类别,一键编码是安全的选择。

最有价值图(MVP) —组合图

我们对数字和分类变量进行统计分析和可视化。我们生成描述性统计数据,总结数据分布的集中趋势、离散度和形状。

对于数值变量,我们绘制直方图,用一个 y 轴表示数值变量的分布,用于计算数值变量中的值,并用另一个 y 轴表示目标百分比=1(偿还贷款有困难)的线图。

Above Plot shows that as the count of numeric variable EXT_SOURCE_3 is increasing, the percent of Target=1 is decreasing, so with the increasing in EXT_SOURCE_3, more loans are being repaid. EXT_SOURCE_3 can be a potential feature for our predictive modeling

对于分类变量,我们绘制条形图以显示分类变量的分布,并用一个 y 轴按降序排序,y 轴表示类别值的计数,还用另一个 y 轴绘制线图,表示目标百分比=1(将难以偿还贷款)。

Above plot shows as the FLAG_OWN_REALTY is decreasing, the percent of Target=1 is increasing, so with the decrease in FLAG_REALTY, less loans are being repaid.

这个图叫做最有价值图(MVP),也叫组合图。组合图是展示预测者(X 轴)相对于目标(Y 轴)的可预测能力的最佳可视化方法。它们向我们展示了变量如何影响 Target=1 的百分比,从而证明了变量对我们预测建模的可预测性。从视觉上,我们可以说,随着变量的计数增加/减少,Target=1 的百分比根据直线的陡度而减少或增加,因此贷款的偿还或多或少分别取决于百分比的减少或增加。

数据建模

我们使用以下机器学习算法,并为我们的监督分类任务建立分类模型。

  1. 朴素贝叶斯
  2. 逻辑回归
  3. 随机森林
  4. 梯度推进机(GBM)
  5. 深度学习

在上述模型中,前三个是基线模型,后三个是改进模型。

深度学习

在我们将数据输入深度神经网络之前,我们对数据集执行特征缩放。我们把数据集做成 numpy 数组。我们使用最小最大缩放器进行预处理。我们拟合转换特征训练数据并转换特征测试数据。

4 层深度神经网络

具有 4 层的深度神经网络具有 2 个隐含层,每个隐含层具有 80 个神经元。在两个隐藏层之间以及第二个隐藏层和输出层之间添加了下降层,以防止过拟合。Binary_crossentropy用作损失函数,更新方法为ADAM. The number of Epochs is 500.

对于我们的数据,输入层具有 242 的维度,2 个隐藏层具有整流器作为其激活函数,每个层具有 80 个神经元。输出层具有 sigmoid 激活函数,因为我们正在进行二元分类。深度神经网络采用 Adam 优化器、二元交叉熵损失函数编译,评价指标为精度。

Confusion Matrix for Deep neural network with 4 layers

Summary of Deep neural network model with 4 layers summary

5 层深度神经网络

具有 5 层的深度神经网络具有 3 个隐含层,第一和第二隐含层具有 80 个神经元,第三隐含层具有 40 个神经元。在隐层之间和第三隐层与输出层之间增加了剔除层,在第三隐层与输出层之间插入了批量归一化层以防止过拟合。The number of Epochs is 400.

对于我们的数据,输入层具有 242 的维度,3 个隐藏层具有整流器作为其激活函数,第一和第二隐藏层具有 80 个神经元,第三隐藏层具有 40 个神经元。输出层具有 sigmoid 激活函数,因为我们正在进行二元分类。深度神经网络采用 Adam 优化器、二元交叉熵损失函数编译,评价指标为精度。

Confusion Matrix for Deep neural network with 5 layers

Summary of Deep neural network model with 5 layers

模型评估

通过准确度、混淆矩阵、精确度、召回率、真阴性率(TNR)、假发现率(FDR)、增益图、提升图、K-S 图、ROC-AUC 图评估分类模型。在对上述技术的性能进行比较后,的性能最好,其次是深度学习神经网络分类器,再次是随机森林。

我们使用 Python 内置的持久性模型(pickle 或 dill)将模型保存到磁盘,并使用该模型对新数据进行预测。

Python ->机器学习/深度学习模型-> pickle 模型-> flask ->在 Heroku 上部署

Flask 是 Python 的一个“微”框架。之所以称之为微框架,是因为他们希望保持核心简单但可扩展。虽然一开始会有些困惑,但使用 Jinja2 模板在 Flask 上建立一个网站还是相对容易的。

现在我们创建一个简单的 flask 应用程序。flask 应用程序由两个主要组件组成:python 应用程序(app.py)和 HTML 模板。虽然我们可以从 python 文件本身返回 HTML 代码,但是在 python 文件中将整个 HTML 编码为一个字符串会很麻烦。模板前来救援!

Heroku 是一个云平台即服务(PaaS ),支持多种编程语言。

点击查看应用的工作版本。本教程的代码可以在 Github 上找到。关于模型性能的更多信息在 GitHub 知识库的 pdf 报告中。

最后的话

我们基于 python ML 库制作了一个简单的基于 web 的预测应用程序。要查看默认风险应用程序的完整工作版本,请查看在 Heroku 云平台上部署为 Web 应用程序(Restful API)的最终解决方案,演示链接:default-risk.herokuapp.com

关于我:我热衷于通过使用数据科学和机器学习技术解释数据来推动和帮助有洞察力的商业决策。我的热情是用数据解决复杂的现实世界的问题。在 Linkedin 上与我联系。

查看我的作品集jayborkar . github . io。

领英:www.linkedin.com/in/jayborka…

Github:github.com/jayborkar

参考:

  1. AE Khan dani、AJ Kim 和 AW Lo 通过机器学习算法建立的消费者信贷风险模型研究论文
  2. Github 资源库
  3. 在生产中将机器学习模型部署为 API(使用 Flask)

数据艺术的防御:Python v/s R

原文:towardsdatascience.com/defence-aga…

场景(哈利波特参考)- 邓布利多挥舞着一根带有抽象蟒蛇芯的魔杖,格林德沃使用一根带有经典 R 芯的魔杖。两者同样熟练。权杖核心会在数据世界中产生权力差异吗???让我们找出答案。

在我们开始防御数据艺术历史上最伟大的决斗之前,让我们检查一下他们各自的魔杖…

一边是 2 时代世界魔杖冠军(2007&2010)巨蟒。根据 TIOBE 指数,它目前排名第第第四,比 2017 年上升了一位。它是由一个名叫吉多·范·罗苏姆 (1991)的著名巫师创建的,以支持使用多种编程范例的魅力、可读性和支持高层次的抽象。

对于那些对巨蟒魔杖有兴趣的人->en.wikipedia.org/wiki/Zen_of…

另一个强大的元老权杖 R 在 TIOBE 指数中上升了 3 位,并在 2018 年 4 月占据了第 12 位。它是由两位巫师罗斯·伊哈卡&罗伯特·绅士创造的,唯一的目的是赢得一场统计决斗。它为统计计算和图形提供了魅力。它的特殊魅力使它能够执行统计建模、经典统计测试、时间序列分析、分类、聚类和图形技术。

第一轮:粉丝群&科学界

你基本上是跟着人群走。

当我在本文中谈到 Python 时,并不是指作为一个整体的通用语言能力(这是不公平的),而是指包的子集(numpy、scipy 等)..)构建,以满足大数据时代日益增长的统计问题的需求。

根据 TIOBE 评级,Python 比 R 更受欢迎。

让 python 更受欢迎的是它的通用编程风格(Python 之禅)更快的学习曲线,而最重要的原因是过量的高级包和机器框架&深度学习(SK-learn、Keras、Pytorch、Tensorflow 等)。您执行数据分析的最终目标是做出决策,因此,如果决策制定(DM)工具本身是用 Python 编写的,您会更喜欢用同样的语言来完成分析部分,因为这样将来更容易与 DM 算法集成。r 也有等价的框架,但是不太为人所知。

在这两种情况下,科学界都是好的。但是,受欢迎程度再次让我们像羊群一样涌向蟒蛇那一边。Python 赢了!!!

credits:xkcd

第二轮:初学者的运气

正如我前面提到的,Python 非常直观,而 as R 的学习曲线非常陡峭。我第一次使用 python 时,我喜欢上了它。一切都很容易。我以为我可以用它征服软件世界。但是我太天真了。下学期的 C 课让我看到了自己的位置。(谁刚学完 Python 就教 C?).

即使我碰到它的时候已经有了比较好的编程知识,R 还是很麻烦。一开始,编写一段代码(检查包和不同的构造是一件痛苦的事)所花的时间是编写一段同等 Python 代码所花时间的三倍。随着你熟悉 R 编码风格,它会变得更好,但我仍然因为 R 中的非直观构造而感到痛苦。这可能是因为我对 python 上瘾了。****

Ipython notebook 让编码更干净更简单(magic cmds)。它支持 R 和 Python 内核。

尽管如此,我还是倾向于 Python。

第三轮:美女与野兽

任何使用过 ggplot2(& others)和 matplotlib.pyplot 的人可能都会同意我的说法,与前者相比,后者是一只粗糙的野兽。还有其他 Python 可视化包,比如 seaborn,它们很好,但是没有达到 R 的标准。

R 横扫本轮!!!

第四轮:数据分析能力

如果我们谈论统计计算和建模能力的话,R 显然优于 Python。它有更多经过验证的统计计算包,还没有用 Python 实现。Python 每小时都在缩小差距。

那么问题就来了——R 是不是一种即将消亡的语言?

不,这不是真的。 R 是有学问的人的语言 - 统计学家、医学研究人员&生命科学研究人员等发现 R 是比 python 更好的工具。原因可以认为是优越的统计软件包和习惯的结果。

这个问题主要出现在我们的脑海中,因为围绕深度学习和神经网络产生的蓬勃发展的宣传,其中 Python 主导了该领域,并产生了一种感觉,即 R 正在失去其在该领域的地位,因为深度学习与数据科学密切相关(&分析)。这就像一个诱饵效果。

我在脸书(AI & DL 集团)进行了一次民意调查,以验证上述推理,结果统计数据与推理一致。

因此,R 在这一回合中设法战胜了 python。

决定谁是赢家?

就像巫师们自己一样(在著名的决斗——哈利·波特引用之前),没有明确的证据表明一个比另一个优越。

像一个外交政治家一样,我会说,如果你的目标是经典的统计分析,那么用 R,如果你的目标是机器学习,那么用 Python,因为支持更好,编码更容易。

但是我相信对于一个数据科学和 ML 爱好者来说,成为两个行业的杰克是很好的。

我试图融入虚构的元素,给这篇文章带来幽默。希望你喜欢它。如果我在上课时间写这篇文章时,遗漏了什么重要的特征,请评论。

传递简单的数据

原文:towardsdatascience.com/delivering-…

Photo by Kelly Sikkema on Unsplash

这一课永远改变了我对如何交付数据的看法。

我一直喜欢信息,信息越多越好。从我十几岁开始,有了我的第一台电脑和最近的互联网接入,我总是喜欢手头有数据。这就是我从小喜欢玩模拟电脑游戏的原因,比如《席德·梅尔文明》、《模拟城市》、《主题公园》、《披萨大亨》、《帝国时代》和《命令与征服》。瞄准射击很有趣,尤其是前 2-3 个小时,但让我整晚睡不着的游戏是策略类的。在所有这些网站中,数据无处不在。例如,文明给了我关于我的城市生产的一切信息,公民有多幸福,生产能力,战争单位,技术输出能力,图表和图表,以帮助规划完美的战略和游戏。

“A man working on a computer while wearing red laser colored headphones” by Mark Cruz on Unsplash

我尽可能快地将这种思维方式引入商业智能。我想给我的客户提供过量的数据,这样他们也能体验到我玩游戏时的兴奋感。对我来说,BI 把世界变成了游戏,在游戏中我可以测量正在发生的一切。当我有信息要处理时,我的头脑总是充满了各种可能性。想法和策略来得很快,我可以将信息关联起来,看看什么可以做,什么不可以做。然而,数据过载并不适用于所有人。

随着我职业生涯的进展,很明显世界上的其他人看待数据的方式和我不一样。人们喜欢人们喜欢的东西,数据可能是有价值的,但你必须让它符合目的,以帮助它变得有意义。我发现最好的方法是简化,直到你确切知道人们真正需要什么才能前进。前进是这里的关键。向前发展意味着你提供的数据变成了同样的行动并产生了价值。

为了使我的观点更清楚,我喜欢用汽车仪表板作为例子。

“A shot of the front interior of a car against the blurred traffic in the background.” by Mark Cruz on Unsplash

如果你想一想,一辆汽车可以为司机产生大量的数据。你可以驾驶数以百万计的指标,告诉你有多好,汽车性能如何。然而,人们只关心三件事,速度,煤气表和是否有红灯闪烁。就是这样!人们想知道他们有多快,是否能到达他们想去的地方,以及是否一切运转良好。简单直接。如果其中任何一项显示有问题,就会立即采取行动/做出决定。

想想你在工作中已经提交的报告。我敢打赌,总有一两个表格/饼图吸引了 80%的注意力,而报告的其余部分只是“值得拥有”。这种事在我身上发生过太多次了。我总是喜欢做所有的事情,刚开始的时候,我会因为人们没有看到我想要了解的全貌而感到沮丧。后来,我想通了,我才是那个不了解全局的人。少即是多,简单产生行动,这是你应该争取的。

“A person holding a clapper board in a desert” by Jakob Owens on Unsplash

汽车仪表板告诉我们什么

简单来说,试着从汽车仪表板上吸取教训。专注于显示公司是否有“气”的指标,换句话说,是底线。试着理解哪些指标真正显示了公司的计划正在被执行,并且是以什么样的“速度”执行的。公司是有目标的,但是目标实现了吗?如果没有,则可能存在速度问题。最后,如果有什么不对劲,红灯就会闪烁。公司要正常运转,总有一些关键的运营方面需要顺利运作。监控这些问题,确保每个人都能看到它们是否需要修复。

当我在餐馆工作时,底线问题是老板最想知道的,也是最后一个。我试图实施一些运营指标,但大多数人关心的只是底线。

“Hand holds a plate of steak, soft boiled egg, and tomatoes” by Eduardo Roda Lopes on Unsplash

他们知道,如果他们没有达到预定的每日收入,整个运营就不会盈利。他们关注的是这个数字,所以每天第一件事就是交付它成为我们的首要任务。一旦他们拥有了,他们就快乐了。我时不时地试图提供更多的数据,但他们总是以谈论菜单上的新菜而告终。

Photo by chuttersnap on Unsplash

季度 KPI 至关重要,因为它们可以在很短的时间内显示出战略是否处于正确的位置。这种信息很容易被运营、战术团队和战略领导理解。如果做得正确,KPI 必须有一个度量标准,并且能够被不断地测量。我曾与非常关注这一点的汽车经销商合作过。他们想结交老客户,这些客户是来购买新车的。每辆行驶超过 50,000 公里的汽车都会得到一份特别的奖金。他们希望转换至少 15%的具有这种特征的客户。一旦指标清晰,我们就能显示是否达到目标,测量就变得简单了。在前两个季度,他们没有完成交易,但到了第三季度,事情开始变得可行,到那年年底,他们有了一个整合 CRM 工作的业务案例,以吸引更多的客户前来寻求服务和更积极的折扣。

“A smiling man holding a disc grinder” by David Siglin on Unsplash

货架上有些产品的缺失确实会影响一家店的经营。对于零售商来说,这是重要的一课。有些产品不仅能完成销售,也是交叉销售策略的关键。在建筑零售行业工作时,我看到了这种情况,并撰写了一份专注于库存管理的特别报告。他们有一个系统,但它侧重于管理库存,而不是销售。由于整合问题,销售和下架之间存在延迟。一旦整合到一份报告中,很明显,供应部门的人必须不断地关注销售情况,这样才不会出现中断。这成了报告中的一个小红旗,解决了一个巨大的问题。

在传递情报时,您不需要开发数百个表格、图表和报告。你只需要真正了解人们想做什么,并尝试找到简单的有用信息。

彻底实现深度计算机视觉的大众化——tensor cam

原文:towardsdatascience.com/democratizi…

TensorCam 是来改变我们的生活的!在这篇文章中,我将描述我迄今为止见过的最强大的易于使用的深度学习相机。而且它对开发者开放,有了这款相机,所有技能水平的人都可以在不到 5 分钟的时间内开始深度学习。

www.wired.com/story/your-…

是时候在计算机视觉和深度学习的世界里有一个新的发展了,这就是 Deep Cognition 的人们为我们推出的东西。

如果你想练习你的深度学习技能,这是一个很好的开始,有了这个相机,你可以在几分钟内建立自己的计算机视觉应用程序。

这是一个很棒的系统介绍视频:

www.kickstarter.com/projects/de…

最棒的部分是它完全连接了深度学习工作室(DLS),在那里你可以从一个简单而强大的 GUI 中进行选择,在那里你可以拖放神经网络并使用 AutoML 创建深度学习模型,到一个完全自主的 IDE,在那里你可以编码并与你最喜欢的库进行交互。

DLS 简化并加速了在 TensorFlow 和 MXNet 等流行框架中使用深度学习的过程。您将能够从深度学习工作室向 TensorCam 推送您的深度学习模型。而且 TensorCam 会自带全软件 SDK。

这将是您的工作流程:

如果你想更多地了解 DLS,看看这个:

[## 深度认知的视频漫游

大家好!在本文中,我将与您分享几个视频,带您浏览深度认知的平台…

towardsdatascience.com](/a-video-walkthrough-of-deep-cognition-fd0ca59d2f76)

以及 Rajat 的这篇伟大的文章:

[## 深度学习工作室让深度学习变得简单——完整指南

没有编程的深度学习可能吗?

towardsdatascience.com](/deep-learning-made-easy-with-deep-learning-studio-complete-guide-a5c5ae58a771)

特点:

  • 内置的 NLP 技术,这将允许您开发基于自定义语言的通知。这些通知将通过智能家居设备传递,如 Alexa
  • 内置最先进的深度学习芯片,这将允许你以惊人的 2.4 Terra-OPS 计算性能运行深度学习模型。
  • 它与深度学习工作室(DLS) 的紧密集成使其高度灵活和可定制,这将允许您在几个小时内运行自己的深度学习模型。

在这里你可以看到它是如何与 Alexa 一起工作的:

您可以创建一个货架库存监控模型:

当您的宝宝移动时,可以开始记录的模型(是的,您现在就可以这样做):

还有很多:)

与其他相机的比较

他们的深度学习芯片每秒 2.4 万亿次运算(TOPS),也是目前市场上最高的,如您在对比中所见:

不要误会我的意思,DeepLens 和谷歌视觉套件也很棒,我过去实际上用过谷歌视觉套件,我唯一希望它更容易的部分是编程和界面。我的意思是,你必须在 RaspberryPi 中拥有一切,然后创建一个模型,训练它,并希望它能在那里运行。另外,虽然相机非常好,但它没有移动。

这与 TensorCam 有很大的不同,因为它带有 PTZ ( 平移-倾斜-变焦),这意味着相机能够远程控制方向和变焦。这对于许多应用程序来说是非常棒和必要的。

这里有一个更深入的对比:

用 TensorCam 可以构建什么?

您可以从 TensorCam 示例项目开始,其中涵盖了一些最流行的计算机视觉用例。随着你的技能和想法的发展,你可以使用 Deep Learning Studio 的云或桌面版本来建立定制的深度学习模型。作为一名开发人员,以下是一些您可以在 TensorCam 上构建和部署的示例,只需编写最少的代码或无需编写代码:

如果你想了解更多的想法,请点击这里:

[## DIY 深度学习项目

受阿克谢·巴哈杜尔伟大工作的启发,在这篇文章中你将看到一些应用计算机视觉和…

towardsdatascience.com](/diy-deep-learning-projects-c2e0fac3274f)

在这里,您可以看到员工跟踪系统的完整视频示例(这样您就知道谁真正出现了):

哦,你还有夜视能力,如果你想知道:

KickStarter 活动

现在是最重要的部分,如果你很了不起(你应该),这些人需要我们的帮助来资助他们的项目。这是我第一次在 KickStarter 活动中看到这样的东西,所以请确保进入网页并支持该项目:

https://www . kickstarter . com/projects/deep conition/tensor cam-worlds-first-ai-camera-with-ptz-for-deve

如果你不能做到这一点,请告诉你的朋友和公司,如果你能马上作出承诺,你可以得到很大的折扣。创作者的最后一句话:

我们预计 TensorCam 将于 2019 年 3 月准时交付。我们正在结束主要功能的产品开发阶段,但我们仍然希望听到 Kickstarter 支持者的伟大想法,关于我们可以包括的一些额外功能(只要不影响交付日期)。我们已经为相机和 AI 板找到了可靠的制造合作伙伴,但即使有最好的制造流程设置,也可能会发生意想不到的问题。物流问题也正在得到解决,以确保顺利交货时,我们已经超过了我们的目标。

感谢你阅读这篇文章。我希望你在这里找到了一些有趣的东西:)如果你有问题,请在 Twitter 上关注我:

[## 法维奥·巴斯克斯(@法维奥·巴斯克斯)|推特

Favio Vázquez 的最新推文(@FavioVaz)。数据科学家。物理学家和计算工程师。我有一个…

twitter.com](twitter.com/faviovaz)

和 LinkedIn:

[## favio vázquez——science ia y Datos | LinkedIn 创始人

查看 Favio Vázquez 在世界上最大的职业社区 LinkedIn 上的个人资料。Favio 有 16 个工作列在他们的…

www.linkedin.com](www.linkedin.com/in/faviovaz…)

那里见:)

揭秘:人工智能,机器学习,深度学习

原文:towardsdatascience.com/demystified…

很多人把人工智能(AI)、机器学习(ML)、深度学习(DL)这几个词当成同义词。这实际上与事实相差甚远,今天我们来揭开这些误解的神秘面纱。

AI、ML、DL 是各种数据分析模型和算法在不同行业各种用例的实际应用。虽然这些工具还不能做出道德选择或作为有意识的机器,但它们有潜力为任何企业创造更多价值。这是通过发现以前看不见的模式和预测某些行动的可能结果来实现的。我们希望这篇文章将提供对人工智能、ML 和 DL 能力的更好理解,并将成为你迈向人工智能驱动的数据分析之旅的起点。

沿着这条路的第一步是通过专家系统完成的,这是第一次尝试将数据分析的过程编码。专家解释了一些领域专业知识的规则,这些规则后来被编入规则引擎并用于回答问题。然而,这种结构只能根据这些预定义的规则工作,并且不能随着时间的推移而改进。随着新事实的增加,保持规则引擎的更新也是一项麻烦且费时的工作。然而,专家系统在医疗保健和金融领域仍然非常普遍。

机器学习的下一步是当现代计算机 CPU 架构被引入时,随后是图形处理器单元(GPU)。GPU 的核心优势在于,由于容纳了数千个较小的内核,它们能够进行并行数据处理,而不是在几个较大的 CPU 内核中进行串行处理。这项技术的进一步发展和所有数据密集型项目向云的过渡导致了人工智能开发的巨大繁荣。

此外,使用大数据工具,如 Hadoop、Spark、Flink、Map Reduce 和 Cassandra 确保企业最大限度地利用其大数据能力。以前,数据存储在某个地方,必须上传到其他地方进行处理。这导致数据传输速度成为瓶颈,而且非常昂贵。现代的方法意味着将数据存储在云中,并直接处理数据,而不是相反。这就划算多了,更别说快多了。

什么是人工智能:伟大的东西,只是还没有工作

我们已经发表了一篇文章解释说 AI 不会以有意识机器人的形式出现。事实上,自从引入了图灵测试,人工智能就成了一个总括术语和时髦词汇。科学家们努力在机器中创造智力,但这不应该是人类智力的复制品。

AI 是一组随着时间的推移而学习和进化的算法,在处理它们的任务时变得越来越好,但却无法进行道德选择(不知道什么是好什么是坏)或理解艺术的价值,或从音乐中获得审美愉悦。

事实上,人工智能现在更多的是人类头脑中一个新领域的代号。数学理论的每一个新方面都获得了实际的实现,不再是人工智能。MapR(企业 Hadoop 供应商)的首席应用架构师 Ted Dunning 博士描述了这一现象,他说“当某些东西不起作用时——我们称之为 AI。当它开始正常工作时,我们称之为其他东西

什么是机器学习:人工智能应用于大数据分析

机器学习是 20 世纪 80 年代左右蓬勃发展的人工智能技术的子集。其主要应用是不断提升的大数据分析质量和精度。ML 算法在历史数据中发现模式,训练的 ML 模型遵循这些模式来预测新数据中有价值的见解。

最大似然学习领域有两个主要的子域:监督学习和非监督学习。

  • 监督学习使用人类创建的数据标签(收入和输出数据都提供给算法)来构建数据。这个类别中的 ML 模型包括随机决策森林、朴素贝叶斯算法、SVM 和线性或逻辑回归训练。
  • 无监督学习使用未标记的数据,ML 模型必须按照自己的速度训练自己,或者根据反馈最大化回报。

机器学习主要用于数据分类,并广泛用于金融和银行业,以打击欺诈和风险管理。我们已经描述了银行业中机器学习的用例或者各种业务如何使用机器学习来改善金融服务

深度学习:多层神经网络

深度学习算法使用多层不同权重的节点,即所谓的深度神经网络或 DNNs。有输入和输出节点,它们之间至少有 10 层。通过调整每个 DNN 节点的逻辑权重,数据科学家可以影响结果,从而训练模型以达到大规模所需的结果。由于数据大规模并行处理的发展和强大 GPU 的使用,数据科学家现在可以使用数千层的 DNNs。

逻辑权重的每次重新调整都会使模型更好地理解所需的对象特征。这个过程的优点是,在开始时可以不定义特征,并且模型将随着时间的推移学会自己识别最佳结果。

dnn 是深度学习中使用最广泛但不是唯一的 ML 算法类型。

我们已经解释了深度学习如何真正工作,以及涵盖了 2017 年在文本和语音应用机器感知和 OCR增强学习和机器人运动应用等领域取得的多项深度学习进展。这些应用扰乱并改善了医疗保健、金融和零售行业,以及生活中的许多其他领域。

人工智能技术演进展望

因此,在过去的十年里,人工智能应用的有效性有了显著的提高。尽管深蓝在 20 多年前击败了加里·卡斯帕罗夫,但下一次这种类型的胜利只是最近才发生,当时谷歌 DeepMind 的 AlphaGo 在 2016 年战胜了现役围棋冠军 Lee Sedol 。这并不意味着人工智能的发展停滞不前——恰恰相反,它蓬勃发展。

从 20 世纪 50 年代初的科幻刺激和有意识机器人的梦想,我们开始意识到人工智能最适合用于大规模自动化费力耗时的任务,而不是模仿人脑的功能。自然智能和人工智能之间的某些相似之处仍然存在,比如英特尔的自我学习芯片 Loihi。然而,最近的技术进步巩固了采用最大似然算法进行大规模数据分析的趋势。

关于人工智能、机器学习和深度学习的最终想法

深度学习是 AI 进化的方向吗?我们认为不会,因为在技术的前沿不断出现令人兴奋的新应用,以及在以前没有数字化的行业中应用 ML 和 DL 的新可能性。随着越来越多的企业完成云转型,越来越多的在大数据分析中利用人工智能算法的前景向他们展现出来。

在伦敦举行的 AWS 2018 峰会期间,亚马逊首席技术官沃纳·威格尔博士透露,AWS 将集中精力为其产品提供人工智能功能和服务,以进一步增强其客户的价值交付。这导致在最近的 AWS re:Invent 2018 周期间出现了多个 AI/ML/DL 版本、公告和功能。

微软也是如此,在 R&D 有一个 8000 人的部门,专门致力于为 Azure 开发人工智能和人工智能服务。现在人工智能肯定比以往任何时候都热,并且在未来会变得更加有利可图和有用。

您是否已经在数据分析系统中实施了 ML 模型?你愿意做吗?如果是这样的话— IT Svit 可以帮助

原载于 2018 年 12 月 20 日itsvit.com

揭开“混乱矩阵”混乱的神秘面纱

原文:towardsdatascience.com/demystifyin…

如果你对混淆矩阵感到困惑,那么我希望这篇文章可以帮助你理解它!快乐阅读。

我们将使用 UCI 钞票认证数据集来揭开混淆矩阵背后的混乱。我们将预测和评估我们的模型,并在此过程中发展我们的概念理解。也将在需要的地方提供进一步阅读的链接。

了解数据

数据集包含钞票 400x400 像素小波变换图像的属性,可以在这里找到。建议读者下载数据集并跟随学习。进一步参考,可以在这里找到 Kaggle 笔记本

*#Skipping the necessary Libraries import* **#Reading the Data File** df = pd.read_csv('../input/BankNote_Authentication.csv')
df.head(5)

Sample Data (using Head)

**#To check if the data is equally balanced between the target classes** df['class'].value_counts()

Target Class is balanced enough

建立模型

将数据分为训练集和测试集,我们将在训练集上训练我们的模型,评估将在测试集上执行,由于简单和缺乏足够的数据,我们在这里跳过验证集。总的来说数据分为三组训练、测试和验证,这里阅读更多。

**#Defining features and target variable**
y = df['class'] #target variable we want to predict 
X = df.drop(columns = ['class']) #set of required features, in this case all**#Splitting the data into train and test set** 
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=42)

接下来,我们将为我们的预测建立一个简单的逻辑回归模型。

**#Predicting using Logistic Regression for Binary classification** 
from sklearn.linear_model import LogisticRegression
LR = LogisticRegression()
LR.fit(X_train,y_train) *#fitting the model* 
y_pred = LR.predict(X_test) *#prediction*

模型评估

我们来绘制最混乱的混淆矩阵?开个玩笑,让我们有一个简单的混淆矩阵( Scikit-learn 文档用于下面的代码)。

Confusion Matrix for Binary Classification

**#Evaluation of Model - Confusion Matrix Plot**
def plot_confusion_matrix(cm, classes,
                          normalize=False,
                          title='Confusion matrix',
                          cmap=plt.cm.Blues):
    *"""*
 *This function prints and plots the confusion matrix.*
 *Normalization can be applied by setting `normalize=True`.*
 *"""*
    if normalize:
        cm = cm.astype('float') / cm.sum(axis=1)[:, np.newaxis]
        print("Normalized confusion matrix")
    else:
        print('Confusion matrix, without normalization')

    print(cm)

    plt.imshow(cm, interpolation='nearest', cmap=cmap)
    plt.title(title)
    plt.colorbar()
    tick_marks = np.arange(len(classes))
    plt.xticks(tick_marks, classes, rotation=45)
    plt.yticks(tick_marks, classes)

    fmt = '.2f' if normalize else 'd'
    thresh = cm.max() / 2.
    for i, j **in** itertools.product(range(cm.shape[0]), range(cm.shape[1])):
        plt.text(j, i, format(cm[i, j], fmt),
                 horizontalalignment="center",
                 color="white" if cm[i, j] > thresh else "black")

    plt.ylabel('True label')
    plt.xlabel('Predicted label')
    plt.tight_layout()

**# Compute confusion matrix**
cnf_matrix = confusion_matrix(y_test, y_pred)
np.set_printoptions(precision=2)

**# Plot non-normalized confusion matrix**
plt.figure()
plot_confusion_matrix(cnf_matrix, classes=['Forged','Authorized'],
                      title='Confusion matrix, without normalization')

Confusion Matrix for the Binary Classification performed

**#extracting true_positives, false_positives, true_negatives, false_negatives**
tn, fp, fn, tp = confusion_matrix(y_test, y_pred).ravel()
print("True Negatives: ",tn)
print("False Positives: ",fp)
print("False Negatives: ",fn)
print("True Positives: ",tp)

我们的模型有多精确?

**#Accuracy**
Accuracy = (tn+tp)*100/(tp+tn+fp+fn) 
print("Accuracy {:0.2f}%:",.format(Accuracy))

准确性重要吗?

不总是这样,有时这可能不是正确的衡量标准,尤其是当你的目标阶层不平衡时(数据是有偏差的)。然后,您可能会考虑其他指标,如精确度、召回率、F 分数(组合指标),但在深入讨论之前,让我们先退后一步,理解构成这些指标基础的术语。

一些基本术语

真阳性 —被预测为阳性(在我们的场景中是认证的钞票)并且实际上是阳性(即属于阳性‘授权’类)的标签。

真阴性 —被预测为阴性(在我们的场景中是伪造的钞票)而实际上是阴性(即属于阴性‘伪造’类)的标签。

假阳性 —被预测为阳性,但实际上是阴性的标签,或者简单地说,被我们的模型错误地预测为真实,但实际上是伪造的票据。在假设检验中,它也被称为 1 型错误或对零假设的不正确拒绝,参考此阅读更多关于假设检验的信息。

假阴性 —预测为阴性,但实际为阳性的标签(预测为伪造的真实票据)。这也被称为第二类错误,它导致拒绝零假设的失败。

现在让我们看看每个机器学习从业者应该知道的最常见的评估指标!

Mathematical Definitions (Formulas)

指标超出准确度

精度

它是“精确性”,即模型只返回相关实例的能力。如果您的用例/问题陈述涉及最小化误报,即在当前场景中,如果您不希望伪造的纸币被模型标记为真实的,那么精确度是您需要的。

**#Precision** 
Precision = tp/(tp+fp) 
print("Precision {:0.2f}".format(Precision))

Precision is about Repeatability & Consistency

召回

它是“完整性”,模型识别所有相关实例的能力,真正的阳性率,也称为敏感度。在目前的情况下,如果你的重点是最大限度地减少假阴性,也就是说,你不会把真钞错误地归类为伪钞,那么召回就能帮你一把。

**#Recall** 
Recall = tp/(tp+fn) 
print("Recall {:0.2f}".format(Recall))

F1 测量

精确度和召回率的调和平均值,用于表示精确度和召回率之间的平衡,提供相等的权重,范围从 0 到 1。F1 分数在 1 时达到最佳值(完美的精确度和召回率),在 0 时达到最差值,在此阅读更多。

**#F1 Score**
f1 = (2*Precision*Recall)/(Precision + Recall)
print("F1 Score {:0.2f}".format(f1))

F-beta 测量

这是 F 值的一般形式——β0.5 和 2 通常用作度量,0.5 表示倾向于精确,而 2 表示倾向于回忆,给予它两倍于精确的权重。

**#F-beta score calculation**
def fbeta(precision, recall, beta):
    return ((1+pow(beta,2))*precision*recall)/(pow(beta,2)*precision + recall)

f2 = fbeta(Precision, Recall, 2)
f0_5 = fbeta(Precision, Recall, 0.5)

print("F2 {:0.2f}".format(f2))
print("\nF0.5 {:0.2f}".format(f0_5))

特异性

它也被称为“真阴性率”(正确识别的实际阴性的比例),即数据包含的真阴性越多,其特异性就越高。

**#Specificity** 
Specificity = tn/(tn+fp)
print("Specificity {:0.2f}".format(Specificity))

ROC(受试者工作特性曲线)

不同分类阈值下“真阳性率”(灵敏度/召回率)与“假阳性率”(1-特异性)的关系图。

ROC 曲线下面积(AUC)测量曲线下的整个二维面积。这是一个衡量参数如何区分两个诊断组的指标。通常用作分类模型质量的度量。

随机分类器的曲线下面积为 0.5,而完美分类器的 AUC 等于 1。

**#ROC**
import scikitplot as skplt #to make things easy
y_pred_proba = LR.predict_proba(X_test)
skplt.metrics.plot_roc_curve(y_test, y_pred_proba)
plt.show()

结论

由于选择用来说明混淆矩阵和相关指标的使用的问题很简单,您可以找到更高水平(98%或以上)的每个值,无论是精确度、召回率还是准确度;通常情况下不会这样,您将需要关于数据的领域知识来在一个度量或另一个度量(通常是度量的组合)之间进行选择。

例如:如果是关于发现“你邮箱里的垃圾邮件”,你的模型的高精度将是非常重要的(因为你不希望这个邮件被贴上垃圾邮件的标签),它将告诉我们被我们归类为垃圾邮件的邮件中有多少是垃圾邮件。真阳性(分类为垃圾邮件的单词,实际上是垃圾邮件)与所有阳性(分类为垃圾邮件的所有单词,无论其分类是否正确)的比率。在欺诈检测中,您可能希望您的回忆更高,以便您可以正确地分类/识别欺诈,即使您没有将一些非欺诈活动分类为欺诈,也不会造成任何重大损失。

揭秘卷积神经网络

原文:towardsdatascience.com/demystifyin…

Convolutional Neural Networks

简史

在过去的十年中,计算机视觉领域取得的进步确实令人惊叹,前所未有。机器现在可以识别视频中的图像和帧,准确率(98%)超过人类(97%)。这一惊人壮举背后的机械装置是受人类大脑功能的启发。

当时,神经学家正在对猫进行实验,他们发现图像的相似部分会导致猫大脑的相似部分变得活跃。换句话说,当猫看着圆圈时,大脑中的阿尔法区被激活。当它看着正方形时,大脑中的β区被激活。他们的发现得出结论,动物的大脑包含一个对图像的特定特征做出反应的神经元区域,即它们通过大脑中神经元的分层结构来感知环境。每一幅图像在进入大脑之前都要经过某种特征提取器。

受大脑功能的启发,数学家们囤积了一个系统来模拟不同组的神经元对图像的不同方面放电,并相互交流以形成更大的图像。

特征提取器

他们将一组被激活的神经元的想法具体化,提供特定的输入,成为多维矩阵的数学概念,代表特定特征集的检测器,也称为过滤器内核。每个这样的过滤器将用于检测图像中特定的东西,例如用于检测边缘的过滤器。然后,这些学习到的特征将通过另一组设计用于检测更高级特征的过滤器,即眼睛、鼻子等

Convolution of an image with Laplacian filter to detect edges

在数学上,我们将在给定输入图像(表示为像素强度矩阵)之间执行卷积运算,并进行滤波以产生所谓的特征图。该特征图将作为另一层过滤器的输入。

为什么卷积?

卷积是一个过程,在这个过程中,网络试图通过参考它在过去学习到的内容来标记输入信号。如果输入信号看起来像它以前见过的先前的猫图像,则“猫”参考信号将与输入信号卷积或混合到输入信号中。产生的输出信号然后被传递到下一层(这里,输入信号是根据 RGB 像素强度的输入图像的 3d 表示,而“猫”参考信号是用于识别猫的核心学习信号)。

Convolution operation of image and filter. Source

卷积运算的一个很好的性质是它是跨国不变量。这意味着每个卷积滤波器代表特定的特征集,例如眼睛、耳朵等。这也是 CNN 算法擅长的工作,它可以学习哪个特征集包含了结果参考,例如 cat。输出信号强度不取决于特征的位置,而仅仅取决于特征是否存在。因此,一只猫可以坐在不同的位置,CNN 算法仍然能够识别它。

联营

通过追踪大脑生物功能的轨迹,他们能够建立提取特征所需的数学装置。然而,在了解了为了跟踪复杂的几何形状而需要分析的级别和特征的总数后,他们意识到他们的内存不足以容纳所有这些数据。甚至处理所有这些所需的计算能力也会随着功能的增加而呈指数级增长。很快,他们想出了一种被称为池的技术来解决这个问题。它的核心思想非常简单。

如果一个区域包含强烈表达的特征,我们可以避免搜索该区域的其他特征。

Demonstration of max pooling

这种池操作,除了节省额外的内存和计算能力要求,还有助于消除图像中的噪声。

全连接层

到目前为止还不错,但是如果一个网络最终只能检测图像中的一组特征,那么它有什么用呢?我们需要一种方法,让网络能够将给定的图像分类到一些类别中。这就是可以利用传统神经网络设置的地方。特别是,从早期图层检测到的要素地图到用于分类的标注数量,我们可以拥有一个完全连通的图层。最后一层将为输出类别中的每个类别分配概率。基于这些输出概率,我们可以最终将图像分类到输出类别之一。

Fully Connected Layer. Source

最终建筑

剩下的唯一事情是将所有这些学到的概念结合到一个单一的框架中,我们称之为卷积神经网络又名 CNN 。本质上,CNN 由一系列卷积层组成,这些卷积层可选地与汇集层结合以生成特征图,该特征图然后被馈送到一堆完全连接的层以产生分类概率。反向传播输出的错误,我们将能够训练这个设置来生成准确的结果。

现在,功能性的观点被恰当地奠定,让我们稍微深入 CNN 的操作方面。

卷积神经网络

Convolution layer

卷积层是 CNN 的主要组成部分。每个这样的层由一组独立的过滤器组成,每个过滤器在给定的图像中寻找不同的特征集。

Convolution operation. Source

在数学上,我们采用固定大小的过滤器,并将其滑过完整的图像,在过滤器和输入图像块之间进行点积。这种点积的结果将是一个标量,它将进入结果特征图。然后,我们向右滑动过滤器,执行相同的操作,将结果添加到特征映射中。在用滤波器卷积完整的图像之后,我们最终得到一个表示不同特征集的特征图,该特征集再次作为进一步层的输入。

大步走

滤波器移动的量是跨距。在上面的图像中,我们用因子 1 滑动过滤器。这可能不是我们一直需要的。使用大于 1 的跨距背后的直觉是相邻像素是强相关的(特别是在最低层中),因此通过应用适当的跨距来减小输出的大小是有意义的。但是,大步长可能会导致大量信息丢失。所以,我们在选择步幅的时候一定要小心。

Example with a stride of 2. Source

填充

Padding of one layer. Source

步幅的一个不良影响是,随着我们一次又一次地执行卷积,特征图的大小随之减小。这可能不是我们想要的结果,因为这里的收缩也意味着信息丢失。要了解为什么会出现这种情况,请注意过滤器应用于中间单元格和角落单元格的次数差异。显然,没有什么特别的原因,来自中间细胞的信息比来自边缘细胞的信息更重要。为了保留先前层的有用信息,我们可以用零层包围给定的矩阵。

参数共享

当我们已经有一个很好的深度神经网络设置时,为什么还要 CNN 呢?有趣的是,如果我们使用深度神经网络进行图像分类,每一层的参数数量将是 CNN 的数千倍。

Parameter sharing in CNN

请通过你的评论让我知道这篇文章可以容纳的任何修改/改进。

基于 Python 的加密货币价格预测

原文:towardsdatascience.com/demystifyin…

Photo by André François McKenzie on Unsplash

自从比特币的价格开始飙升以来,围绕加密货币市场的炒作一直在持续。备用硬币每天都在不断出现——有些是骗局,有些几个月内就登上了硬币排行榜的榜首。这个话题无处不在,无论是在电台、推特、脸书,还是在和你祖父的感恩节餐桌上。参与其中的人通常受到投机的刺激,希望从飙升的市场中获得一笔横财。我很好奇数据科学是否能揭示一些真相。这个项目使用历史价格、协整和宏观经济协变量来预测硬币的未来价格。样本外预测在前 100 小时是可以接受的。让我们深入研究一下。

当谈到经典时间序列分析时,我们认为一个观察到的时间序列是一个模式和一些随机变化的组合。使用这种方法,可以根据历史数据预测未来值。这种方法在大多数情况下都能很好地工作,但是如果我们看到的是一个比模式更随机的时间序列呢?如果一个时间序列纯粹是推测性的,并且大量基于当前事件,而不是一些节奏成分,会怎么样?你知道…类似于…密码流通价格。

那么,如果不只是一些简单的模式,是什么推动了加密货币的价格呢?投机?创新?法律问题?舆论?供给/需求?比特币普及?昨晚某个富人决定买一百万枚硬币?好了,推测够了。我就不说了,现在给你看数据。

那么是什么影响了加密价格呢?

大多数人认为比特币就是答案。区块链技术是一种去中心化的数据库系统,最早由比特币实现。随着比特币获得更多的牵引力,人们不断推出同样基于区块链技术的替代硬币。因此,几乎可以说比特币是所有加密货币之母,因为它们首先提出了这种很酷的技术。这就是为什么我认为当比特币飙升时,其他所有硬币都会飙升是有道理的。当它掉落时,其他硬币也会掉落。下图显示了比特币(绿色)和以太坊(蓝色)的缩放滚动平均值。

如你所见,这个声明看起来相当准确。但是没有统计方法,我们不会匆忙下结论。稍后,我们将更多地讨论使用格兰杰因果检验来识别“协整对”。

同样显而易见的是,法律问题或技术游戏规则改变者等时事也发挥了作用。还记得中国在 9 月禁止加密吗?价格迅速下跌,一切陷入混乱。为了捕捉像这样的重要事件,谷歌新闻搜索频率数据是从 Pytrends API 获得的。下图显示了随着 cryto 价格的下降,“加密货币”(红色)一词的搜索频率出现峰值。

有趣吧?本项目中使用的搜索词是使用谷歌关键词工具选择的。该工具不仅能让你知道一个搜索词有多受欢迎,还能给出相关关键词的列表。使用提供的列表和 Pytrend API,可以获得七个不同关键字的搜索频率数据。我将在后面的部分详细阐述这些术语。

对我来说,另一个突出的因素是公众的看法。买入越多,需求越多,价格也就越高。捕捉这些数据有点痛苦。付费的 Twitter API 是我需要的一切,但我是一名学生,所以我宁愿把钱存起来买杂货。取而代之的是,网站redditmetrics.com列出了世界上几乎所有子网站的历史订阅增长数据。所以网络抓取是!!!下图比较了 Nem subreddit 订阅增长(橙色)和 Nem 历史价格(蓝色)。

正如预期的那样,订阅增长和价格在高点和低点之间保持一致。

我希望这些图片会让你感兴趣。这只是让您开始了解一些领域知识,并向您介绍我们正在尝试解决的问题。如果介绍没有引起你的兴趣,请点击这里查看我的 GitHub 上的完整 EDA。接下来,我将直接进入用来建立一个预测硬币未来价格的模型的统计方法。

我是如何建立模型的?

在这一部分,我们将深入研究方法论。它只是每一步的总结。如果你想深入挖掘代码,请参考我的 GitHub 资源库这里。这将是技术性的,我会尽我所能让它变得有趣和容易消化。但是如果你对技术不感兴趣,可以直接跳到 TLDR 部分。

1。 识别协整对

通过 Cryptocompare API 获得了三个月内 12 种顶级硬币的历史价格。但是在我们对时间序列做任何事情之前,我们必须确保时间序列是平稳的。为了满足平稳性要求,时间序列必须具有恒定的均值、恒定的方差和恒定的自相关性。听起来要求很多,对吧?事实上,没有一个时间序列是完全静止的。但是不要担心我的朋友,迪基·富勒会支持你的!

**平稳性的增强 Dickey-Fuller 检验。**这是一个统计测试,允许您检查是否满足平稳性的预期。这是一个单位根测试,它决定了一个时间序列被趋势定义的程度。该测试使用自回归模型,并在不同的滞后值之间优化信息标准。零假设是时间序列可以用单位根来表示(意味着它不是平稳的)。一些统计学家提出了 0.05 的神奇阈值,许多人同意这个数字。所以如果你的 p 值小于 0.05,你可以拒绝零假设。但话又说回来,对于给定的问题,结果应该被解释为有意义的。结果是,假设阈值为 0.05,所有 12 种硬币的历史价格都没有通过平稳测试(惊讶吧!).在这种情况下,我们必须对时间序列进行平稳化,并重新测试它们。

**求差。**这是一种用于平稳化时间序列的流行方法。它可以用来消除趋势和季节性。取连续观测值的差值(滞后 1)用于本项目。如果时间序列有季节性成分,滞后值应该是季节性的周期。在我们的例子中,没有明显的季节因素。下面的方框图显示了以太坊每小时的平均值在一天的 24 小时中是相对恒定的。方差各不相同,但没有明显的模式。

在我们对时间序列执行滞后-1 差分后,所有 12 个时间序列都通过了 Dickey-Fuller 平稳测试!唷。

**格兰杰因果关系检验。**这是一个统计假设检验,用于确定一个时间序列在预测另一个时间序列时是否有用。如果 A 的滞后值提供了关于 B 的未来值的具有统计意义的信息,则时间序列 A 是时间序列 B 的“格兰杰原因”。在本项目中,我们使用该测试来确定一个协整对,即一对加密货币,其中一个硬币的滞后值可用于预测另一个硬币的未来值。

既然所有 12 个硬币的历史价格数据都是固定的,我们总共构建了 132 个数据框架,每个数据框架都是 12 个硬币历史价格的排列对(不要与组合对混淆)。呀,这真让人困惑。例如,假设我有联邦理工学院、BTC 和长期资本公司的历史价格数据。然后,我需要制作六个数据框架:ETH & BTC 历史价格、ETH & LTC 历史价格、BTC & ETH 历史价格、BTC & LTC 历史价格、LTC & ETH 历史价格和 LTC & ETH 历史价格。请注意,BTC 联邦理工学院和 BTC 联邦理工学院不是一回事!这只是为 StatsModels 的格兰杰因果检验准备我们的数据。测试的零假设是第二列中的时间序列不会对第一列中的时间序列产生格兰杰因果关系。我们需要测试是 ETC 导致了 BTH 还是 BTH 导致了 ETC。这就是为什么我们需要排列对而不是组合对!在进行了 132 次测试后,由于最强的相关性,DASH & BCH 对先前被选为协整对。然而,随着进一步的研究,事实证明,这种强相关性是由于韩国交易量的激增。由于这不是正常情况,我们选择 XEM 和 IOT (Nem 和 Iota)作为我们的协整对,因为它在正常情况下具有最强的相关性。就本项目而言,IOT 历史价格将被用作 XEM 未来价格预测指标之一。

2。 功能选择

**查询数据。**以下是获得的数据及其来源:

  • Cryptocompare API:以小时频率表示的 XEM 和 IOT 历史价格
  • Pytrends API:谷歌新闻搜索“加密货币”的频率
  • 抓取 redditmetrics.com: Subreddit“加密货币”、“Nem”和“Iota”订阅增长
  • Pytrends API: Google 搜索短语“Nem 钱包下载”、“Iota 钱包下载”、“Nem 价格”、“Iota 价格”、“比特币价格”、“用于挖掘的 GPU”的频率-这些关键字是使用 Google 关键字工具选择的
  • 雅虎金融 API: AMD 和 Nvidia 的股票价格——这是两大半导体公司用来挖矿的

**ElasticNet 正则化。**您可能已经注意到,查询的数据有些相关。例如,谷歌搜索“比特币价格”和“加密货币”的频率可能包含非常相似的信息。使用像这样的相关特征构建模型会产生冗余,这是不好的!就像人类因冗余而变得情绪不稳定一样,机器也会因多重共线性而变得不稳定。这时 ElasticNet 正则化就出现了。该算法线性结合了套索法和岭法的 L1 和 L2 罚函数。它将冗余预测器的系数“缩小”到零,因此它成为特征选择的行业标准方式。使用 ElasticNet 结果,将选择具有非零系数的特征。

在这个项目中,ElasticNet 是对上面获得的 13 个预测变量进行的,XEM 历史价格是因变量。运行该算法后,我们剩下三个具有非零系数的预测值。这些特征将用于构建最终模型。不管 ElasticNet 的结果如何,我还尝试使用所有 13 个预测值构建了一个模型,然后将结果与使用三个选定特征构建的模型进行了比较。结果表明,性能差异并不显著(所有 15 个特性的 MSE = 0.107,3 个特性的 MSE = 0.105)。然而,我仍然选择三个特征模型,因为我认为越精简越好。

3。 建筑模型

对于这个项目,我们将使用 ARIMAX 模型来预测 XEM 期货价格。就像 ARIMA 模型一样,ARIMAX 基于自回归(AR)和移动平均(MA)项进行预测。然而,ARIMAX 在模型中也包括外生变量。在这种情况下,这里将使用之前选择的三个预测变量。

数据预处理。由于我们在上一节已经讨论了静态测试和 Dickey-Fuller 测试,我将在此省略细节。获得的数据在 ElasticNet 之前已经标准化了,所以我们需要做的就是执行差分,然后确保它通过 Dickey-Fuller 测试。之后,数据被清理并分成测试集和训练集。

PACF 的 ACF。现在我们的数据已经准备好了,我们需要(1)确定时间序列是 AR 还是 MA 过程,以及(2)确定我们需要在模型中使用什么顺序的 AR 或 MA 过程。使用 ACF 可以回答第一个问题。对于 AR 系列,相关性逐渐下降,没有截止值。ACF 也可以用来确定 MA 系列的滞后阶数——这是截止值。然而,如果我们有一个 AR 系列,PACF 截止值将用于确定滞后阶数。下图是 XEM 历史价格的 ACF 和 PACF。

正如我们所看到的,这是一个 AR 过程,因为 ACF 没有临界值。然后,看看 PACF,它在滞后 1 处截止,这将是我们用于 ARIMAX 模型的参数。

**ARIMAX。**使用 AR 1 和 3 外生变量,下图是与实际值相比的拟合值。

利用拟合的模型,对 XEM 价格进行了预测。下图是 XEM 提前 600 步的样本外预测。

正如所料,该模型在开始时表现更好。这是因为随着时间的推移,预测误差不断复合。在大约 100 步之后,该模型表现不佳。步骤 1-100 的均方误差为 0.039,而步骤 101-600 的均方误差为 0.119。

TLDR

Iota 历史价格与其他宏观经济协变量(如“Nem 价格”一词的 Google 搜索频率和“Nem”subreddit 订阅增长数据)相结合,用于构建 ARIMAX 模型来预测 Nem 价格。前 100 小时的样本外预测性能是可以接受的。除此之外的都是垃圾。

这个项目是我的第一个数据科学项目,有很大的改进空间。获得付费 Twitter 数据或使用不同的机器学习模型可能会显著提高性能。到那个时候,我还不如想出一个交易信号算法,用它来自动化交易。但是现在,这个项目将继续作为投资组合的一部分。是的,我很失望我没有在这个项目结束时从加密交易中变得富有

我希望你和我一样喜欢这篇文章。留下你的评论,让我知道你的想法。

来自《走向数据科学》编辑的提示: 虽然我们允许独立作者根据我们的 规则和指导方针 发表文章,但我们不认可每个作者的贡献。你不应该在没有寻求专业建议的情况下依赖一个作者的作品。详见我们的 读者术语

揭秘无人机动态!

原文:towardsdatascience.com/demystifyin…

Demystifying Drone Dynamics!

  1. 虽然我们大多数人都知道四轴飞行器/无人机的样子,但上面显示的是一张无人机的普通图片(来自 bitcraze 的一架名为 Crazyflie 的无人机)。它由 4 个马达,中间的控制电路和安装在转子上的螺旋桨组成。由于下节所述的原因,2 个转子顺时针(CW)旋转,其余 2 个逆时针(CCW)旋转。顺时针和逆时针电机彼此相邻放置,以抵消它们产生的力矩(在下一节中描述)。螺旋桨有不同的配置,如顺时针或逆时针旋转,推进器或牵引机,具有不同的半径,螺距等。

2。力和力矩

Figure 2: Forces and Moments

每个旋转的螺旋桨产生两种力。当转子旋转时,它的螺旋桨产生一个向上的推力,由 F = K _ f * ω (如图 2 中的力 F1、F2、F3 和 F4 所示)给出,其中ω(ω)是转子的转速,单位为弧度/秒。常数 K_ f 取决于许多因素,如扭矩比例常数、反电动势、周围空气密度、螺旋桨扫过的面积等。K_ fK_m 的值(如下所述)通常根据经验获得。我们将电机和螺旋桨安装在称重传感器上,测量不同电机速度下的力和力矩。有关 K_ f 和 K_ m 测量的详细信息,请参考 Julian F \or ster 的“Crazyflie 2.0 Nano Quadrocopter 的系统识别”。 所有 4 个螺旋桨产生的总向上推力由产生的所有单个推力相加而得,对于 i= 1 至 4,其由 F _ I = K _ F *ω除了向上的力,旋转的螺旋桨还产生称为扭矩或力矩的反向旋转(如图 2 中的力矩 M1、M2、M3 和 M4 所示)。例如,沿顺时针方向旋转的转子将产生一个扭矩,该扭矩导致无人机的机身沿逆时针方向旋转。这种效果的演示可以在这里看到。该旋转力矩由下式给出:M=K_ m * ω 电机产生的力矩与其旋转方向相反,因此顺时针和逆时针旋转电机产生相反的力矩。这就是为什么我们有顺时针和逆时针旋转电机,以便在稳定的悬停状态下,来自 2 个顺时针和 2 个逆时针旋转转子的力矩相互抵消,无人机不会继续围绕其机身轴旋转(也称为偏航)。 力矩/扭矩 M1、M2、M3 和 M4 是由单个电机产生的力矩。围绕无人机 Z 轴(图 2 中的 Z_b)产生的总力矩是所有 4 个力矩的总和。记住顺时针和逆时针方向的力矩符号相反。 moment _ z = M1+M2+M3+M4,CW 和 CCW 力矩将再次具有相反的符号,因此在理想状态下(或者每当我们不希望任何偏航(绕 z 轴旋转)运动时) moment_z 将接近 0。 与 moment_z 相反,围绕 x 轴和 y 轴产生的总力矩/扭矩的计算略有不同。查看图 2,我们可以看到电机 1 和 3 位于无人机的 x 轴上。所以它们不会对围绕 x 轴的任何力矩/力矩有贡献。然而,我们可以看到,电机 2 和 4 产生的力的差异将导致无人机的机身围绕其 x 轴倾斜,这就是围绕 x 轴的总力矩/扭矩,由 moment _ x =(F2-F4) L*,给出,其中 L 是从转子旋转轴到四旋翼中心的距离。同样的逻辑, moment _y =(F3—f1) l .* 总结起来,绕所有 3 个轴的力矩可以用下面的向量表示 moment=【moment _ x,moment _ y,moment_z]^T (^T 转置)

3。方向和位置

Figure 3: Orientation and position

无人驾驶飞机具有位置和方向属性,这意味着它可以是任何位置(x,y,z 坐标),并且可以相对于世界/惯性坐标系成某些角度(θ,φ和ψ)。上图更清楚地显示了θ、φ和ψ。

4。在 z 和 x 方向移动& y 方向移动

Figure 4: Moving in z and x & y direction

每当无人机静止时,它都与世界坐标系对齐,这意味着它的 Z 轴与世界重力场方向相同。在这种情况下,如果无人机想要向上移动,它只需要设置合适的螺旋桨转速,就可以根据方程产生的总力——重力开始在 z 方向移动。然而,如果它想在 x 或 y 方向移动,它首先需要确定自己的方向(形成所需的θ或φ角)。当这种情况发生时,四个螺旋桨产生的总推力(F_thrust)在 z 方向和 x/y 方向都有一个分量,如上图 2D 所示。对于上述示例,使用基本三角学,我们可以通过以下等式找到 z 和 y 方向力,其中φ是无人机机身 z 轴与世界坐标系夹角。 **f _ y=f_ 推力罪恶ϕ* f _ z=f_ 推力* cos ϕ**

5。世界和身体框架

Figure 5: World and Body frame

为了测量上述θ、φ和 psi 角度,通常使用无人机的机载 IMU 传感器。这个传感器测量无人机的身体围绕其身体框架旋转的速度,并提供角速度作为其输出。在处理这种 IMU 输出时,我们需要小心,并理解它发送的角速度不是相对于世界坐标系的,而是相对于其体坐标系的。上图显示了这两个框架,以供参考。

6。旋转矩阵

Figure 6: Rotation Matrix

为了将坐标从身体坐标系转换到世界坐标系,反之亦然,我们使用一个称为旋转矩阵的 3x3 矩阵。也就是说,如果 v 是世界坐标中的一个矢量,v '是用体固定坐标表示的同一个矢量,那么下面的关系成立: V' = R * V 和 V = R^T * V '其中 r 是旋转矩阵,R^T 是它的转置。为了完全理解这种关系,让我们从理解 2D 的旋转开始。让矢量 V 旋转一个角度β,得到新的矢量 V’。设 r=|V|。然后,我们有下面的关系: vx = rcosα和 vy = rsinα v'x = rcos(α+β)和 v'y = rsin(α+β)。对此展开,我们得到 v'x = r * (cosα * cosβ — sinα * sinβ)和 V ' y = r (sinα cosβ+cosα* sinβ) V ' x = VX * cosβ—vy * sinβ和 v'y = vy * cosβ + vx * sinβ 这正是我们想要的,因为期望点 V '是用原点 V 和实际角度β来描述的。作为结论,我们可以用矩阵符号写为

在旋转矩阵的情况下,从 2D 到 3D 相对简单。事实上,我们刚刚导出的 2D 矩阵实际上可以被认为是绕 z 轴旋转的 3D 旋转矩阵。因此,对于绕 z 轴的旋转,旋转矩阵为

最后一行和最后一列中的值 0,0,1 表示旋转点的 z 坐标(v'z)与原始点的 z 坐标(vz)相同。我们将这个 Z 轴旋转矩阵称为 Rz(β)。将相同的逻辑推广到围绕 x 和 y 轴的旋转,我们可以得到 RX(β)和 RY(β)的值,如下所示

并且 3D 运动旋转矩阵的最终值将只是上述三个旋转矩阵的交叉乘积。 R = Rz(ψ) x Ry(θ) x Rx(φ) 其中 psi (ψ),phi (φ,)和 theta (θ)分别是绕 z,y,x 轴的旋转。

7。状态向量及其导数 由于我们的无人机有 6 个自由度,我们通常通过监控这 6 个参数及其导数(它们如何随时间变化)来跟踪它,以获得对无人机位置和运动速度的准确估计。我们通过维护通常所说的状态向量 X = [x,y,z,φ,θ,ψ,x_dot,y_dot,z_dot,p,q,r] 及其导数 X_dot= [x_dot,y_dot,z_dot,θ_dot,φ_dot,ψ_dot,x_doubledot,y_doubledot,z_doubledot,p_dot,q_dot,r_dot] 来做到这一点,其中 X,y 和 zφ,θ,ψ表示世界坐标系中的无人机姿态/方向,而φ_dot,θ_dot,ψ_dot 表示该(欧拉)角度的变化率。p、q、r 是主体框架中的角速度,而 p_dot、q_dot 和 r_dot 是其导数(导数=变化率),也称为主体框架中的角加速度。x_doubledot,y_doubledot,z_doubledot 表示世界坐标系中的线性加速度。

8。线性加速度 如前所述,每当螺旋桨移动时,无人机将开始在 x、y 和 z 方向上移动(加速),这取决于其 4 个螺旋桨产生的总推力(由下面等式中的 Ftotal 表示)和无人机的方向(由旋转矩阵 R 表示)。我们知道力=质量加速度。忽略旋转矩阵 R,如果我们仅考虑 Z 方向上的加速度,它将由 Z_force =(质量重力)—(质量* Z _ 加速度) 质量* Z _ 加速度=质量*重力— Z_force 给出,因此Z _ 加速度=重力— Z_force /质量 将其外推至 x 和 y 方向并包括旋转矩阵(出于第 4 和 6 节中描述的原因),描述无人机的线性加速度的方程由以下方程给出,其中 mF 中的负号表示我们认为重力在 z 轴的正方向。

Linear Acceleration

9。角加速度 除了直线运动,由于旋转螺旋桨及其方位,无人机也会有一些旋转运动。。虽然在惯性/世界坐标系中有线性运动方程很方便,但在体坐标系中旋转运动方程对我们很有用,因此我们可以表示绕四轴飞行器中心的旋转,而不是绕惯性中心的旋转。如第 4 节所述,我们将使用无人机的 IMU 来获得其角加速度。让我们考虑 IMU 的输出为 p、q 和 r,代表围绕无人机 x、y 和 z 体轴的旋转速度。 我们从刚体动力学的欧拉方程推导出旋转运动方程。用矢量形式表示,欧拉方程可写成

Euler’s equations for rigid body dynamics

其中ω = [p,q,r]^T 是角速度矢量,I 是惯性矩阵,力矩是第 2 节中开发的外部力矩/扭矩矢量。。请不要将本节中ω(作为角速度)的用法与它作为螺旋桨转速的用法混淆。在本节之后,我们将坚持使用ω作为旋转速率。我们可以将上述等式改写为

用[p,q,r]^t]代替ω,展开力矩矢量,重新排列上述等式,我们得到车身框架中的角加速度为

Angular Accelerations in Body Frame

10。欧拉角的变化率 虽然无人机的方位最初是在人体坐标系中观察到的,但是我们需要将它们转换到世界坐标系中。同样,我们根据下面的公式使用旋转矩阵来达到这个目的。这个公式的推导过程很简单,在参考文献[6]中提供了

Rate of Change of Euler Angles

11。回顾 让我们回顾一下到目前为止所学的内容 1。一架四轴飞行器有 4 个(2 个顺时针和 2 个逆时针)旋转螺旋桨 2。每个螺旋桨在垂直于其平面的方向上产生 F =K_f * ω 力和绕其垂直轴的力矩 M = K_m * ω 。 3。无人驾驶飞机可以处于任何 x、y、z 位置以及θ、φ和ψ方向。 4。当无人机想要在 z 方向(世界坐标系中)移动时,它需要在每个螺旋桨上产生适当的力(总推力除以 4)。当它想在 x 或 y 方向移动时(同样是世界坐标系),它在产生所需力的同时考虑θ/φ角 5。当跟踪无人机的运动时,我们需要处理世界和身体框架中的数据 6。为了将角度数据从身体坐标系转换到世界坐标系,使用旋转矩阵 7。为了跟踪无人机的运动,我们跟踪它的状态向量 X 及其导数 X_dot 8。旋转螺旋桨产生 x、y 和 z 方向的线性加速度,如第 8 节 9 所示。旋转螺旋桨在机身框架中产生绕 z、y 和 z 轴的角加速度,如第 9 节 10 所示。按照第 10 节中所示的等式,我们将体坐标系中的角速度转换为世界坐标系中的欧拉角速度。

12。参考文献 我不想只列出参考文献,而是想真诚地感谢个别作者的工作,没有他们的工作,这篇文章和我对无人机动力学的理解几乎是不可能的。 1。Julian Forster 对 Crazyflie 2.0 Nano Quadrocopter 的系统识别—http://Mike hamer . info/assets/papers/crazy flie % 20 modelling . pdf 2。丹尼尔·沃伦·梅林杰的四旋翼飞行器轨迹生成和控制—repository.upenn.edu/cgi/viewcon… 3。四轴飞行器动力学、模拟和控制作者 Andrew Gibiansky—http://Andrew . Gibiansky . com/downloads/pdf/quad copter % 20 Dynamics、%20Simulation、%20Control.pdf 4。绕 x 轴、y 轴或 z 轴基本旋转的简单推导—www.sunshine2k.de/articles/Ro… 5。你如何得到旋转矩阵?—Quora—https://www . Quora . com/How-do-you-derive-the-rotation-matrix 6 .詹姆斯·迪贝尔的《表现姿态:欧拉角、单位四元数和旋转矢量》——https://www . astro . rug . nl/software/kapteyn/_ downloads/Attitude . pdf

如果你喜欢这篇文章,在推特上关注、转发或者鼓掌,媒体上的赞会鼓励我继续我的博客世界之旅。

直到下一次…干杯!!

揭开生成对抗网络的神秘面纱

原文:towardsdatascience.com/demystifyin…

在本教程中(源自我的原始帖子这里),你将学习什么是生成性对抗网络(gan ),而无需深入数学细节。之后,你将学习如何编写一个简单的可以创建数字的 GAN!

类似

理解什么是 gan 的最简单方法是通过一个简单的类比:

假设有一家商店从顾客那里购买某些种类的酒,然后他们再转卖。

但是,也有穷凶极恶的客户为了捞钱,卖假酒。在这种情况下,店主必须能够区分真假葡萄酒。

你可以想象,最初,伪造者在试图出售假酒时可能会犯很多错误,店主很容易识别出这种酒不是真的。由于这些失败,伪造者将继续尝试不同的技术来模仿真正的葡萄酒,有些人最终会成功。既然伪造者知道某些技术通过了店主的检查,他就可以开始在这些技术的基础上进一步改进假酒。

与此同时,店主可能会从其他店主或葡萄酒专家那里得到一些反馈,说她拥有的一些葡萄酒不是原创的。这意味着店主将不得不改进她如何确定一种酒是假的还是真的。伪造者的目标是创造出与真品难以区分的葡萄酒,而店主的目标是准确辨别一款葡萄酒的真假。

这种来回的竞争是 GANs 背后的主要思想。

生成性对抗网络的组成部分

利用上面的例子,我们可以得出 GAN 的架构。

GANs 中有两个主要组件:生成器和鉴别器。示例中的店主被称为鉴别器网络,通常是一个卷积神经网络(因为 gan 主要用于图像任务),它分配图像是真实图像的概率。

伪造器被称为生成网络,也是典型的卷积神经网络(具有反卷积层)。该网络采用一些噪声矢量并输出图像。当训练生成网络时,它学习图像的哪些区域要改进/改变,以便鉴别器将更难区分其生成的图像和真实的图像。

生成网络不断产生在外观上更接近真实图像的图像,而辨别网络试图确定真实图像和虚假图像之间的差异。最终目标是拥有一个生成网络,能够生成与真实图像无法区分的图像。

带有 Keras 的简单生成对抗网络

既然您已经理解了什么是 gan 以及它们的主要组成部分,我们现在可以开始编写一个非常简单的代码了。你将使用Keras,如果你不熟悉这个 Python 库,你应该在继续之前阅读本教程。这个教程就是基于这个很酷很好理解的甘开发的这里

您需要做的第一件事是通过pip安装以下软件包:

- keras
- matplotlib
- tensorflow
- tqdm

您将使用matplotlib进行绘图,tensorflow作为 Keras 后端库,tqdm为每个时期(迭代)显示一个漂亮的进度条。

下一步是创建 Python 脚本。在这个脚本中,您首先需要导入您将使用的所有模块和函数。当它们被使用时,将给出每一个的解释。

您现在想要设置一些变量:

在开始构建鉴别器和生成器之前,应该首先收集和预处理数据。您将使用流行的 MNIST 数据集,该数据集包含一组从 0 到 9 的一位数的图像。

Example of MINST digits

请注意mnist.load_data()是 Keras 的一部分,允许您轻松地将 MNIST 数据集导入工作空间。

现在,您可以创建自己的生成器和鉴别器网络。您将为两个网络使用 Adam 优化器。对于发生器和鉴别器,您将创建一个具有三个隐藏层的神经网络,激活函数为 Leaky Relu 。你还应该为鉴别器添加脱落层,以提高其对不可见图像的鲁棒性。

终于到了把发生器和鉴别器合二为一的时候了!

为了完整起见,您可以创建一个函数,每隔 20 个时期保存您生成的图像。因为这不是本课的核心,所以您不需要完全理解该函数。

现在,您已经对网络的大部分进行了编码。剩下的就是训练这个网络,看看你创造的图像。

经过 400 个纪元的训练后,您可以查看生成的图像。查看第一个时期后生成的图像,您可以看到它没有任何真实的结构,查看 40 个时期后的图像,数字开始成形,最后,400 个时期后生成的图像显示清晰的数字,尽管有一对数字仍然无法识别。

Results after 1 epoch (left) | Results after 40 epochs (middle) | Results after 400 epochs (right)

这段代码在 CPU 上每个时期大约需要 2 分钟,这也是这段代码被选中的主要原因。您可以通过使用更多的历元以及向发生器和鉴别器添加更多(和不同的)层来进行试验。然而,当使用更复杂和更深入的架构时,如果只使用 CPU,运行时间也会增加。然而,不要因此而停止尝试!

结论

恭喜你,你已经完成了本教程的学习,在本教程中,你以直观的方式学习了生成性对抗网络(GANs)的基础知识!此外,您在 Keras 库的帮助下实现了第一个模型。

揭开超参数调谐的神秘面纱

原文:towardsdatascience.com/demystifyin…

它是什么,为什么是自然的

超参数结构每天都有许多过程,但很少有人意识到它们的存在。当你想买一双鞋的时候,你正在解决一个超参数优化问题。一旦你决定了要买哪种 类型 的鞋子(hyper-parameter)你就需要根据鞋子的 参数 来满足你的要求( 尺码、颜色、… )。你的可用预算也是一个超级参数,会影响你的选择。

An everyday hyper-parameter optimization problem

超参数调谐

如果你选择了一双适合你的鞋子,而且颜色也合适,你就能穿上它们。然而,如果你选择了一双红色高跟鞋,你可能会发现跑马拉松很有挑战性。超参数调整对于大多数用例来说可能并不重要,但会显著影响您的流程效率和您试图获得的结果的质量(例如,您可以穿着靴子跑步,但可能没有穿着运动鞋跑得快)。

数据科学中的超参数调整

大多数机器学习模型都有超参数。

例如,一个简单的随机森林算法会有相当多的:

Scikit-Learn implementation of a Random Forest Classifier

一旦用户指定了其超参数的值,该算法将在基础数据集上进行训练。超参数的选择将影响训练的持续时间和预测的准确性。不幸的是,选择超参数并不是直截了当的,因为可能的配置数量随着它们的数量而爆炸,并且配置的评估时间是模型复杂性和底层训练数据大小的函数。此外,这是一种有点黑暗的艺术,正如威廉·科尔森在他的媒体文章中所说:

超参数调整更多地依赖于实验结果而不是理论,因此确定最佳设置的最佳方法是尝试许多不同的组合来评估每个模型的性能。

面对如此多的不确定性,大多数数据科学家放弃超参数调整,坚持使用模型提供的默认值是可以理解的。这在大多数情况下是可行的,但是根据我的初步类比,你可能很难穿着高跟鞋跑马拉松。

在现实生活中你不会这样做(除非是为了一个好的理由),那么在数据科学领域你为什么会这样做呢?

第二种最流行的方法是通过 网格搜索 (评估每一个配置)找到最佳配置,这将最终导致一个答案。

但是你不会穿着你所有的每一双鞋跑完一场马拉松,从而得出结论说你穿着运动鞋跑得最好,那么你为什么要在数据科学领域做同样的事情呢?

第三种最流行的方法是通过 随机搜索 找到最佳配置,但这仅比网格搜索略好。我就不跟你打这个比方了,因为我希望现在你明白我的意思了。

那么如何更有效地进行超参数调优呢?

头脑铸造公司的推特粉丝似乎知道答案

贝叶斯优化

贝叶斯优化通过结合对解空间看起来像什么的“信念”,并通过从它评估的配置中“学习”,解决了网格和随机搜索的陷阱。这种信念可以由领域专家指定,但也可以在开始时是平的。如果当你尝试穿着细高跟鞋跑马拉松,你不会再穿你所有的其他高跟鞋了,因为你会知道这很痛苦。此外,如果你有先验知识,你可能从一开始就选择平底鞋!

我已经写了一篇更详细的文章(用更少的类比)来解释贝叶斯优化背后的直觉:

[## 高斯过程贝叶斯优化背后的直觉

在某些应用中,目标函数是昂贵的或难以评估的。在这些情况下,一般…

towardsdatascience.com](/the-intuitions-behind-bayesian-optimization-with-gaussian-processes-7e00fcc898a0)

可以在这里找到可下载的白皮书版本。

您可以在这里自动接收我们的贝叶斯优化器 OPTaaS 的 API 密钥!

更新:我开了一家科技公司。你可以在这里找到更多的

贝叶斯优化的扩展

如果你有可以尝试其他鞋子的朋友,你们会集体找到跑马拉松用得更快的最好的一双。同样可以在 BO 中通过智能配料实现。

如果你穿着高跟鞋跑马拉松,你应该(在理论上)很早就意识到这相当痛苦,你应该停下来换双鞋?

嗯,这在贝叶斯优化的某些实现中是可能的,在我的下一篇文章中,我将解释如何实现。

揭秘“EM 路由矩阵胶囊”

原文:towardsdatascience.com/demystifyin…

最近,深度学习之父之一的杰弗里·辛顿(Geoffrey Hinton)发表了一项革命性的计算机视觉架构,在机器学习界掀起了波澜:胶囊网络。Hinton 自 2012 年以来一直在推动使用胶囊网络,此前他首次革命性地使用卷积神经网络(CNN)进行图像检测,但直到现在他才使它们变得可行。两周前发表的最初的成功方法名为“胶囊之间的动态路由”动态路由——我们将在本文中深入探讨——允许网络更直观地理解部分-整体关系。

在这篇论文发布后的三天内,另一篇关于胶囊网络中动态路由的论文被提交给 ICLR 2018 进行审查。这篇题为“EM 路由的矩阵胶囊”的论文被广泛认为是由 Hinton 撰写的,讨论了一种革命性的动态路由新方法,甚至与他的第一篇论文相比。尽管这种方法显示出巨大的前景,但迄今为止媒体对它的关注相对较少。由于作者身份的不确定性,我在这篇文章的其余部分提到了“作者”。

在这篇博文中,我将讨论 matrix capsules 动态路由背后的直觉和动态路由的机制。第一部分将概述胶囊网络的直觉,以及它们如何利用动态路由比传统 CNN 更有效。第二部分将深入研究 EM 路由的数学和技术细节。

(注:如果你读过 Sabour et。艾尔。“胶囊之间的动态路由”,直觉上是非常相似的,但是路由机制是非常不同的。)

CNN 怎么了?

自 2012 年 Hinton 合著了一篇介绍 AlexNet 的论文以来,CNN 在 ImageNet 的图像分类方面的表现优于任何以前的方法,CNN 一直是计算机视觉的标准方法。本质上,CNN 通过检测图像中特征的存在来工作,并使用这些特征的知识来预测对象是否存在。然而,CNN 只检测特征的存在——所以即使是右边的图像,包含错位的眼睛、鼻子和耳朵,也会被认为是一张脸,因为它包含了所有必要的特征!

A CNN would classify both images as faces because they both contain the elements of faces. Source.

CNN 未能处理此类图像的原因是辛顿在过去几年中批评 CNN 的原因。问题归结为 CNN 从一层到另一层传递信息的方式:最大池。最大池检查像素网格,并在该区域进行最大激活。该程序主要检测特征是否在图像的任何区域存在,但是会丢失关于该特征的空间信息。

Max Pooling preserves existence (maximum activation) in each region, but loses spatial information. Source.

胶囊网络试图通过捕捉部分-整体关系来解决 CNN 的局限性。例如,在一张脸上,两只眼睛都是前额的一部分。为了理解这些部分-整体关系,胶囊网络需要知道的不仅仅是某个特征是否存在——它需要知道该特征在哪里,它是如何定向的,以及其他类似的信息。胶囊网络以 CNN 没有的方式取得了成功,因为它们成功地捕捉了这些信息,并将信息从一部分传递到整体。

那么,胶囊网络到底是什么?

传统的神经网络由神经元组成。胶囊网络通过将神经元分组到称为胶囊的模块中,在 CNN 上强加结构。

是一组神经元,其输出代表相同特征的不同属性。通过对神经元进行分组,胶囊的输出是 4x4 矩阵(或 16 维向量),其条目表示诸如特征的 x 和 y 坐标、对象的旋转角度以及其他特征的信息。例如,在数字识别中,一层胶囊对应数字。输出层中的一个胶囊可以对应于 6。4×4 矩阵中的不同条目将对应于 6 的不同属性。如下所示,如果您修改矩阵的一个条目,6 的比例和厚度会发生变化,如果您修改矩阵的另一个条目,6 的顶钩也会发生变化。

This image, from Hinton’s first paper, shows what happens to numbers when perturbing one dimension of the capsule output. This demonstrates spatial information about the numbers stored in each entry. Source.

当想到神经网络时,我们会想到神经元之间的连接。虽然胶囊是由神经元组成的,但更容易(也更有效)的是将网络想象成由称为胶囊的组件组成。整个胶囊网络由多层胶囊组成。每层可由任意数量的胶囊组成(通常为 8-32 个)。

将胶囊与传统神经网络中的神经元进行比较在直觉上是有帮助的。神经网络中的单个神经元从(0,1)输出一个激活,并表示一个特征的存在。另一方面,胶囊输出关于特征的存在的逻辑单元(0,1)以及表示关于特征的附加信息的 4×4 矩阵。这个 4x4 矩阵被称为姿态矩阵,因为它代表了关于特征的空间信息。上图说明了修改姿势矩阵中的条目时会发生什么。

此外,我们可以考虑神经元-神经元连接与囊-囊连接,这在典型的图中用单个箭头表示。在神经网络中,一个神经元使用标量权重连接到下一个神经元。另一方面,两个胶囊之间的连接现在是一个 4x4 变换矩阵,因为一个胶囊的输入和输出都是 4x4 矩阵!

到目前为止,胶囊网络还没有做任何革命性的事情:毕竟,胶囊往往只是卷积层。胶囊网络的有效性来自于信息从一层传递到另一层的方式——这就是所谓的路由机制。与使用最大池路由信息的 CNN 不同,胶囊网络使用一种称为动态路由的新流程来捕捉部分-整体关系。

协议动态路由:从局部到整体

在本节中,我们将考虑如何将输出从层 (l) 路由到层 (l+1 )。此过程取代了 CNN 的最大池。请记住,正如我们之前所讨论的,我们的网络学习转换矩阵(类似于权重)作为胶囊之间的连接。然而,除了使用这些变换矩阵将信息从一层路由到另一层之外,每个连接还要乘以一个动态计算的路由系数**。如果这还不清楚,不要担心;我们将首先讨论这些路由系数背后的直觉,然后再讨论数学。**

为了使我们的分析更具体,我们考虑数字识别的例子,并且只对数字 2 和 3 进行分类。我们的隐藏层 (l) 由一个有六个胶囊的胶囊层组成,对应于特性,我们的最终层 (l+1) 由 2 个胶囊组成,对应于数字 2 或 3。层 (l) 中的特征代表数字 2 和 3 的不同部分。为了说明起见,假设我们的六个胶囊节点对应于以下特征。A 3 由前四个特征组成,a 2 由第一、第五和第六个特征组成。在我们的例子中,我们的网络将获取 3 的输入图像,并将尝试对其进行分类。

Capsules are shown as nodes, but output matrices. Arrows represent transformation matrices. Red capsules are active, and black capsules are inactive. The green capsules in the output layer have not yet been predicted.

直观上,我们知道层 (l) 中的每个对象都来自层 *(l+1)中的一个更高级别的对象。*我们知道第一个胶囊在我们的网络中是活跃的,因为它不是 a 2 就是 a 3。我们的目标是计算出我们的特征因下一层的每个特征而被激活的概率。基于我们认为层 (l) 中的胶囊被激活的原因,我们可以将我们的信息从层 (l) 引导到 (l+1)。

问题变成了我们如何决定这些概率。让我们以第一个胶囊特性为例,它可能是 a 2 或 a 3 的一部分。它的数量很大程度上取决于图层中第一个要素和其他要素之间的空间关系。在我们的示例中,图层 (l) 看到第一个要素(在图像中)位于第二个要素之上,第三个要素位于第四个要素之上。(*注意:我们的姿态矩阵输出可以捕捉这些特征之间的空间关系)。*因此,层 (l) 已经看到了关于具有正确关系的 a 3 的所有信息。如果是这样,那么在层 (l) 中存在显著一致的 a 3。与此同时,2 的另外两个节点并不活跃,因此,人们对图中有一个 2 的看法相对较少。基于这种一致,我们可以很大概率地说,第一个特性实际上来自于 a 3,而不是 a 2。

这个总体概念被称为协议路由。通过这样做,来自层 (l) 中的胶囊的信息仅被提供给层 (l+1) ,如果特征看起来来自后续层中的那个胶囊。换句话说,如果有更多关于 2 的一致,2 胶囊从第一个特征接收信息。这种动态计算向哪个更高级别的胶囊发送信息的过程被称为动态路由。通过将第一个特征(顶钩)动态地仅路由到 3,我们可以对我们的预测更有信心,并将低概率分配给 2。

Transformation matrices capture the fixed relationships between part and whole

这里是动态路由最棘手的部分:这些路由系数不是网络的学习部分!接下来的三段将解释为什么。我们在胶囊网络中学习到的权重是转换矩阵——类似于神经网络中的权重。这些变换矩阵可以捕捉每个特征如何与整体相关。例如,这可以告诉我们,第一个特征是 3 的顶部或 2 的顶部,第二个特征是 3 的中右,等等。

然而,给定单个图像,我们不知道第一特征是 a 3 还是 a 2 的一部分。如果 a 3 的不同部分与整体有着密切的联系,那么我们认为第一个特征应该被路由到 a 3。然而,其他时候,我们可能会认为这是二的一部分。因此,第一特征是 2 的一部分还是 3 的一部分取决于单个图像。因此,这些路由系数不是固定的权重;他们是学会了 的每一个单向前传递 的网络,并依赖于个人形象。这就是为什么这个过程被称为动态路由——它是正向传递的一部分。

A jumbled 3. It has all the features of a 3, but is not correctly aligned.

让我们考虑一下,当特性不在正确的位置时,这是如何修复这个例子的,这给 CNN 造成了一个问题。动态路由过程有助于解决这个问题。考虑当一个 3 的四个特征被随机放置在一个输入中时,如左边。卷积网络会认为这是 a 3,因为它有 a 3 的四个组成部分。然而,在胶囊网络中,“3 胶囊”将从隐藏层接收信息,表明 3 的各部分没有正确地关联到形成 3!因此,当第一个封装决定将其输出路由到哪里时,它不会看到 2 或 3 的协议,而是平等地发送其输出。结果,胶囊网络不能有把握地预测 2 或 3。希望这说明了为什么路由必须由动态,因为它取决于胶囊网络激活的特征的姿态

如上所述,这种路由是可行的,因为每个胶囊的输出是一个 4x4 矩阵。这些矩阵捕获了 a 3 的不同部分之间的空间关系,如果它们作为整体的一部分不正确地一致,胶囊网络就不能可靠地路由信息。另一方面,对于 CNN,标量激活不能捕捉每个部分和整体之间的关系。

构建动态路由的另一种方式是投票的概念。层 (l) 中的每个胶囊可以投票选择它认为来自层 (l+1) 中的哪个胶囊。胶囊总共获得一票,并且可以在所有随后的层胶囊中分配这一票。这种投票机制确保了基于空间关系的信息的有效路由。投票/路由机制来自下面讨论的过程。

EM 路由:总体思路

我们已经模糊地概述了动态路由背后的直觉,但是没有提到如何计算它。这个主题既冗长又复杂,将在本系列的下一部分中详细讨论。在这里,我将概述一下 EM 路由背后的基本思想。

本质上,当路由时,我们假设层 (l) 中的每个胶囊被激活,因为它是下一层中某个“整体”的一部分。在这一步,我们假设有一些潜在的变量来解释我们的信息来自哪个“整体”,并试图推断每个矩阵输出来自级别 (l+1) 中的高阶特征的概率。

这归结为一个无监督的学习问题,我们用一种叫做期望最大化的算法来解决它。本质上,期望最大化试图最大化我们的数据(层 (l) 的输出)被层 (l+1) 中的胶囊解释的可能性。期望最大化是一种迭代算法,包括两个步骤:期望和最大化。通常,对于胶囊网络,每个步骤执行三次,然后终止。

The output capsules converge toward the correct classes over the three iterations of EM. Source.

作者解释的步骤如下。期望分配层 (l) 中的每个胶囊被层 (l+1) 中的胶囊解释的概率。然后,最大化步骤决定层 (l+1) 中的胶囊是否是活动的,如果它们看到对它的输入的显著聚类(一致),并且通过对路由的输入取加权平均来决定对胶囊的输入是什么。

如果这没有意义,不要担心——我用很少的话解释了很多密集的数学。如果您想了解路由机制的深层技术,请继续关注本周晚些时候的下一篇博文。

胶囊网络架构

现在我们理解了胶囊网络背后的直觉,我们可以检查作者如何在他们的论文“带有 EM 路由的矩阵胶囊”中使用矩阵胶囊

本文在 SmallNORB 数据集上评估矩阵胶囊。该数据集由从不同角度和高度拍摄的五种类型的儿童玩具组成。数据集准确捕捉同一物体的不同视点。回想一下,由于胶囊的多维输出(姿势矩阵),胶囊在理解视点方面基本上更好——这就是为什么 SmallNORB 数据集是胶囊网络目标的优秀评估指标。

Example images from the SmallNORB dataset. The second row consists of photos taken from a different elevation from the first set. Source.

该架构包括一个卷积层,接着是两个胶囊层,最后是一个分类胶囊层,有五个胶囊,每个类一个。这种架构在数据集上的表现优于之前的任何模型,并将之前的最佳错误率降低了 45%以上!

Architecture in “Matrix Capsules with EM Routing.” See the paper for more details.

胶囊网络的优势

胶囊网络相对于 CNN 有四个主要的概念优势。

  1. 观点不变性。正如整篇文章所讨论的,姿态矩阵的使用允许胶囊网络识别对象,而不管它们是从哪个视点被观看的。
  2. 参数少。因为矩阵胶囊将神经元分组,所以层之间的连接需要较少的参数。实现最佳性能的模型仅包括 300,000 个参数,相比之下,其基线 CNN 包括 4,000,000 个参数。这意味着模型可以更好地概括。
  3. 更好地概括新观点。CNN 在被训练理解旋转时,通常会记住一个物体可以从几个不同的旋转角度被相似地观察到。然而,胶囊网络也可以更好地推广到新的视点,因为姿态矩阵可以将这些特征捕捉为简单的线性变换。
  4. 抵御白盒对抗性攻击。快速梯度符号法(FGSM)是攻击细胞神经网络的典型方法。它评估每个像素相对于网络损失的梯度,并且最多改变每个像素ε以最大化损失。虽然这种方法可以将 CNN 的准确率显著降低到 20%以下,但是胶囊网络可以保持 70%以上的准确率。

在这篇文章中,我将讨论一些关于基质胶囊的细节。在 EM 路由中使用矩阵胶囊而不是在初始论文中使用矢量胶囊的细节也呈现了三个主要优点。我将在下一篇文章中解释这三个好处的技术细节。

计算机视觉的未来

胶囊网络已经推出两周了,没有人知道它们是否是另一种人们会忘记的模式,或者它们是否会彻底改变计算机视觉。在目前的状态下,它们有很多缺点——最明显的是使用 EM 从一层到另一层动态路由需要大量的时间。当在 GPU 上并行化时,这可能会特别成问题。

不管怎样,这篇论文有效地充当了胶囊网络的概念证明,而且做得相当优雅。不过,在未来,它们的有效性必须在各种各样的数据集上进行测试,包括具有许多类的更适用的数据集,如 ImageNet。随着时间的推移,可能会引入新的路由机制,其他创新可能会使胶囊网络更有效(我们已经在“带 EM 路由的矩阵胶囊”中看到了这一点,它完全改变了路由机制!).然而,如果它们可行,应用将是无穷无尽的——图像分类、物体检测、密集字幕、生成网络和少镜头学习。

致谢——非常感谢舒邦德赛、阿迪加内什、张家瑞和乔丹亚力山大在这篇文章上给了我很好的反馈。查看原文这里这里

揭开机器学习优化的神秘面纱

原文:towardsdatascience.com/demystifyin…

Gradient descent for machine learning

优化是机器学习算法配方中最重要的成分。它从定义某种损失函数/成本函数开始,以使用一个或另一个优化例程最小化 It 结束。优化算法的选择可以在几小时或几天内获得良好的精度。最优化的应用是无限的,是工业界和学术界广泛研究的课题。在本文中,我们将介绍深度学习领域中使用的几种优化算法。(可以通过 这篇文章 了解损失函数的基础知识)

随机梯度下降

随机梯度下降 (SGD)是最简单的优化算法,用于寻找最小化给定成本函数的参数。显然,对于收敛到最优最小值的梯度下降,成本函数应该是凸的。出于演示的目的,想象以下成本函数的图形表示。

Illustration of gradient descent

我们从定义一些参数的随机初始值开始。优化算法的目标是找到对应于成本函数最小值的参数值。具体来说,梯度下降从计算每个参数 w.r.t 成本函数的梯度(导数)开始。这些梯度为我们提供了需要对每个参数进行的数值调整,以便最小化成本函数。这个过程一直持续到我们达到局部/全局最小值(成本函数相对于其周围值最小)。数学上,

**for i in range(iterations_count):**          
    **param**_**gradients = evaluate_gradients(loss_function, 
                                         data, 
                                         params)** **params -= learning_rate * param_gradients**

Effect of learning rate on gradient descent

学习率定义每次迭代中参数应该改变多少。换句话说,它控制着我们应该以多快或多慢的速度收敛到最小值。一方面,小的学习率可能需要迭代才能收敛,大的学习率可能会超过最小值,如上图所示。

尽管在实践中很容易应用,但当涉及到深度神经网络时,它有相当多的缺点,因为这些网络有大量的参数要适应。为了说明梯度下降的问题,让我们假设我们有一个只有两个参数的成本函数。假设成本函数对其中一个参数的变化非常敏感,例如在垂直方向上,而对其他参数(即水平方向)不太敏感(这意味着成本函数具有高条件数)。

Zig zag motion with gradient descent

如果我们在这个函数上运行随机梯度下降,我们会得到一种锯齿形行为。实质上,SGD 正在缓慢地向不太敏感的方向发展,而更多地向高度敏感的方向发展,因此没有向最小值的方向调整。在实践中,深度神经网络可能有数百万个参数,因此有数百万个方向来适应梯度调整,从而使问题复杂化。

SGD 的另一个问题是局部最小值或鞍点的问题。鞍点是在所有方向上梯度为零的点。因此,我们的新加坡元将只停留在那里。另一方面,局部最小值是最小 w.r.t .周围的点,但总体上不是最小的。由于梯度在局部最小值处为零,所以当全局最小值在其他地方时,我们的梯度下降会将其报告为最小值。

为了纠正普通梯度下降的问题,近年来开发了几种先进的优化算法。我们将逐一查看。

带动量的随机梯度下降

为了理解高级优化背后的动力,我们首先必须掌握指数加权平均值的概念。假设我们得到了一年 365 天中任何一个特定城市每天的温度数据。绘制它,我们在左上角得到一个图表。

Demonstration of exponentially weighted average

现在,如果我们希望计算全年的当地平均温度*,我们将如下进行。*

**NOTE :-
     alpha = 0.9** is randomly chosen weight.        
     **t(i)**  is temperature at ith day.
     **v(i)**  is average temperature for ith day averaged over **1/(1 - alpha)** days.**v(0) = 0
v(1) = 0.9 * v(0) + 0.1 * t(1)
v(2) = 0.9 * v(1) + 0.1 * t(2)
...
v(i) = alpha * v(i-1) + (1 - alpha) * t(i)**

每天,我们都会计算前一天温度和当天温度的加权平均值。上述计算的曲线图显示在右上角。该图是过去 10 天的平均温度(α= 0.9)。左下角(绿线)显示的是过去 50 天的平均数据图(alpha = 0.98)。

这里需要注意的重要一点是,随着我们对更多天数进行平均,该图对温度变化的敏感度将会降低。相比之下,如果我们对更少的天数进行平均,则该图将对温度变化更加敏感,从而对蠕动行为更加敏感。

这种延迟的增加是由于我们给予前一天的温度比今天的温度更多的权重。

到目前为止一切顺利,但问题是这一切给我们带来了什么。非常类似地,通过平均过去几个值的梯度,我们倾向于减少更敏感方向的振荡,从而使其收敛更快。

实际上,基于动量的优化算法几乎总是比普通梯度下降法更快。数学上,

**moment = 0
for i in range(iterations_count):**          
    **param**_**gradients = evaluate_gradients(loss_function, 
                                         data, 
                                         params)
    moment = gamma * moment +** **param**_**gradients**
    **params** **+= learning_rate * moment
           (where *moment* is building moving average of gradients.
                 *gamma* gives kind of friction = 0.9 or 0.99).**

AdaGrad 优化

这个想法是,对于每个参数,我们存储其所有历史梯度的平方和。这个总数后来被用来衡量学习率。

注意,与之前的优化不同,这里我们对每个参数都有不同的学习率。

**squared_gradients = 0
for i in range(iterations_count):**          
    **param**_**gradients = evaluate_gradients(loss_function, 
                                         data, 
                                         params)
    squared_gradients += param**_**gradients * param**_**gradients
    params -= learning_rate * param**_**gradients/
                         (np.sqrt(squared_gradients) + 1e-8)
                           *{1e-8 is to avoid divide by zero}***

现在的问题是,当我们的损失函数有很高的条件数时,这个标度如何帮助我们?

对于具有高梯度值的参数,平方项将很大,因此除以大项将使梯度在该方向上缓慢加速。类似地,具有低梯度的参数将产生较小的平方项,因此梯度将在该方向加速更快。

但是请注意,由于梯度在每一步都是平方的,移动估计将随时间单调增长,因此我们的算法收敛到最小值所需的步长将越来越小。

从某种意义上说,这对凸问题是有利的,因为在这种情况下,我们应该向最小值减速。然而,随着陷入鞍点的机会增加,在非凸优化问题的情况下,同样的礼物变成了诅咒。

RMSProp 优化

这是 AdaGrad 的一个微小变化,在实践中效果更好,因为它解决了它遗留的问题。类似于 AdaGrad,这里我们也将保持平方梯度的估计,但是不是让平方估计在训练中累积,而是让该估计逐渐衰减。为此,我们将平方梯度的当前估计值乘以衰减率。

**squared_gradients = 0
for i in range(iterations_count):**          
    **param**_**gradients = evaluate_gradients(loss_function, 
                                         data, 
                                         params)
    squared_gradients = decay_rate * squared_gradients + (1 -  
                  decay_rate) * param**_**gradients * param**_**gradients
    params -= learning_rate * param**_**gradients/
                              (np.sqrt(squared_gradients) + 1e-8)**

圣经》和《古兰经》传统中)亚当(人类第一人的名字

这包含了 RMSProp 和带动量的梯度下降的所有优点。

具体而言,该算法计算梯度和平方梯度的指数移动平均值,而参数β_ 1β_ 2控制这些移动平均值的衰减率。

**first_moment = 0
second_moment = 0
for step in range(iterations_count):
**    **param**_**gradients = evaluate_gradients(loss_function, 
                                         data, 
                                         params)
    first_moment = beta_1 * first_moment + (1 - beta_1) *   
                                                    param**_**gradients
    second_moment = beta_2 * second_moment + (1 - beta_2) * 
                                  param**_**gradients * param**_**gradients**      **
    params -= learning_rate * first_moment/(np.sqrt(second_moment) + 
                                                              1e-8)**

请注意,我们已经将 second_moment 初始化为零。因此,一开始, second_moment 会被计算为非常接近零的某个值。因此,我们通过除以一个很小的数来更新参数,从而对参数进行大的更新。这意味着最初,算法会进行更大的步骤。为了纠正这一点,我们通过合并当前步骤来创建这些一阶和二阶矩无偏估计。然后我们基于这些无偏估计而不是一阶和二阶矩来更新参数。数学上,

**first_moment = 0
second_moment = 0
for step in range(iterations_count):
    param**_**gradients = evaluate_gradients(loss_function, 
                                         data, 
                                         params)
    first_moment = beta_1 * first_moment + (1 - beta_1) *   
                                                    param**_**gradients
    second_moment = beta_2 * second_moment + (1 - beta_2) * 
                                  param**_**gradients * param**_**gradients**      
    **first_bias_correction** = **first_moment/(1 - beta_1 ** step)
    second_bias_correction = second_moment/(1 - beta_2 ** step)
    params -= learning_rate * first_bias_correction/
                           (np.sqrt(second_bias_correction) + 1e-8)**

下图展示了每种优化算法在迭代过程中的性能。显然,增加动量有助于提高精确度。然而,在实践中,众所周知,Adam 在处理大型数据集和复杂特征时表现非常出色。

Performance measure for optimizations

资源

[## RMSprop -优化算法| Coursera

这个课程会教你让深度学习很好工作的“魔法”。而不是深度学习过程…

www.coursera.org](www.coursera.org/lecture/dee…)

更多数学背景可以找这个请通过你的评论让我知道这篇文章可以容纳的任何修改/改进。

揭开平台运营模式的神秘面纱

原文:towardsdatascience.com/demystifyin…

数据如何推动组织发展?

Photo by Israel Andrade on Unsplash

平台商业模式|是什么?

什么是平台业务?平台是一种商业模式,它通过促进两个或更多相互依赖的群体(通常是消费者和生产者)之间的交流来创造价值。平台企业的例子有优步、苹果、微软、阿里巴巴、脸书和腾讯。

传统企业遵循线性模式,拥有资产负债表中显示的库存,而平台运营模式(POM)只专注于建立和促进网络,而不拥有生产手段。

为什么传统企业如此难以改变?

虽然平台运营模式通过更好的客户体验、更快的交付速度、更短的系统停机时间以及最重要的潜在 10 倍增长,为客户提供了更大的价值,但传统企业在复制技术世界的运营模式时往往会面临一系列独特的挑战。

  • **首先,组织文化和心态可能没有改变。**在传统的直线型组织中,通常有自上而下的审批结构,记分卡分解也是如此。默认情况下,这种结构将组织按照功能&业务单元进行划分。虽然这种职能分离有利于长期规划&问责制,但也可能导致筒仓心态。例如,企业可能会将趋势上商业上可行的&产品概念化,但不一定能在短期内通过技术实现。到交货时,市场条件已经改变,导致资源浪费。
  • **其次,组织的技能&能力可能不适合平台运营环境。**在一些组织中,员工可能不具备为未来做好准备的软技能或硬技能。某些更适合平台模式的技能可能在传统组织中不容易获得。例如,虽然项目管理技能在组织中很常见,但产品管理技能远没有那么突出;产品管理需要从产品的概念化到交付的端到端所有权,这是领导平台所需的核心技能。从本质上讲,其他技能,如数据分析、跨职能协作、敏捷的工作方式,都是直线型公司可能缺乏的领域,但对平台型公司却很重要。
  • 第三,组织结构并不总是支持理想的行为类型。要使转型项目成功,流程&系统必须迎合最终状态目标。例如,如果我们需要业务单位&技术单位跨职能工作,KPI&结果必须在双方之间透明地共享。必须有共同的责任&愿景来推动长期观点&习惯的转变。本质上,如果旧的系统保持不变,它就会成为思维转变的阻碍,因为“正确的”行为不会得到奖励。

为了让飞机安全起飞和降落,生态系统中的各种组件,如机场、训练有素的飞行员、飞机控制、系统必须无缝协作。

同样,要使平台运营模式发挥作用,必须具备成功组织转型的要素,这 3 个关键领域是:

  • 人们:航空公司花费大量的时间&努力训练飞行员操作和驾驶飞机脱离危险的湍流并安全着陆 *。*同样,拥有平台领导者&团队拥有合适的能力、软硬技能来驾驭平台应对市场变化是至关重要的。然而,一个关键的阻碍因素是,在长期拥有中央集权的组织中。即使领导者愿意放弃控制和分散权力,团队也可能因为害怕承担后果而对行使额外的权力和责任感到不舒服。
  • 流程:航空公司对机场要求有国际标准&全球通用的机间通信—** *(如跑道长度要求&所有飞行员都懂的通用行话)。*同样,拥有标准化的交换模式&跨所有组织平台的互动形式,以相互汲取资源并创造价值,是可持续模式的关键。
  • 技术: 为了支持航空公司的日常运营,航空公司为机场的&飞机配备了必要的工具来降低日常风险——提高面对不利条件时的弹性***——(例如自动驾驶&天气预报工具)。*同样,包括技术堆栈在内的组织架构必须充分支持业务目标&在面临不确定性时具有足够的适应性。

从本质上来说,人员、流程和技术的到位是增加整个组织的信息流以改善业务决策的使能因素(外部)& 优化流程*(内部)。*

在本文的第二部分,我将详细阐述数据规范在实现这些目标中是如何重要的。

正确的数据工具如何推动转型?

有人可能会认为组织转型和数据之间没有直接的联系,但这种想法并不正确。**数据驱动转型如果执行得当,可以加速组织变革。**例如,通过测量敏捷指标作为团队绩效的代理,并将其嵌入到团队的 KPI 中,它迫使领导者&团队意识到他们是如何工作的,以及他们是否以有效的方式工作&敏捷。

此外,在整个公司的计划中使用数据工具标志着公司致力于数据驱动——间接来说,这有助于利用网络效应来逐渐改变心态——特别是对于 FOMO 的高管来说。

在大多数先进技术公司中,聊天机器人、网站可靠性工程、数据可视化、错误预算和网络分析等热门词汇经常被提及,产品是根据这些原则制造的。当整个公司的团队使用正确的语言时,这清楚地表明了对数据驱动的承诺。

**最后,拥有一个标准化的交换模式&跨平台交互以从彼此获取资源是极其重要的。**为了在平台世界中有效地创造价值,领导者需要对待办事项有一定的了解,以便根据平台业务目标对工作进行优先排序。透明度必须从团队级别开始,然后到平台级别,最后跨平台,以促进资源利用。有许多工具&方法有助于支持此类任务,例如(JIRA、计划者、看板板、Wonderwall)。当透明性存在时,组织就可以期待拥有正确的跨平台交互系统。

有了合适的人员、流程和技术,组织可以实现 3 个目标:

  1. 跨平台互动带来的一流产品创新&快速数据可用性。例如,亚马逊等领先的平台创新者正在通过测试车辆交付,优化向不断变化的地点的交付,将快速数据提升到一个新的水平。这涉及到高度关联的跨职能物流&分析团队的能力,以协调能够交付此类结果的流程。

  2. 管理良好的生态系统平衡供给&需求。拥有有效的流程在生态系统中构建了一个强大的反馈回路,可以自我优化&做出自动化决策。例如,优步的激增定价是一个很好的案例,通过在任何给定时间找到正确的定价模式来平衡消费者和司机。

  3. **最后,也许整个转变最重要的目标是改善客户体验。**通过干预来解决阻碍因素,it 寻求实现更高的客户满意度。例如,联邦快递使用交通数据来确定最佳递送路线,以便及时将包裹送到客户手中,从而减少延迟时间。

而平台业务模式有可能帮助传统业务实现 10 倍的增长。这需要对传统思维进行重大改造,包括打破功能孤岛,专注于产品并建立正确的架构,这对于转型团队来说绝非易事。

揭开量子门的神秘面纱——一次一个量子位

原文:towardsdatascience.com/demystifyin…

(我已经写了一篇关于量子计算的介绍,在这里可以找到。如果你是这个领域的新手,这将是一个更好的起点。)

如果你想进入量子计算领域,没有别的路可走:你必须掌握量子门的模糊概念。像量子计算中的一切一样,更不用说量子力学了,量子门被笼罩在一层不熟悉的术语和矩阵数学的迷雾中,这反映了量子的神秘。我在这篇文章中的目标是揭开这个神秘的面纱。不过我给你省点悬念:没人能完全摆脱。至少,2018 年不会。我们今天所能做的就是揭示经典门和量子门之间惊人的相似性和惊人的差异,并探索对计算的近未来和远未来的影响。

经典 vs 量子门:比较不可比?

惊人的相似

不说别的,经典逻辑门和量子逻辑门都是逻辑门。那我们就从这里开始吧。逻辑门,无论是经典的还是量子的,都是任何一种物理结构或系统,它接受一组二进制输入(无论是 0 和 1,苹果和橙子,自旋向上的电子和自旋向下的电子,随便你怎么说),并吐出一个二进制输出:1,橙色,自旋向上的电子,甚至是两个叠加态中的一个。控制输出的是一个布尔函数。这听起来很奇怪也很不祥,但相信我,不是的。你可以把一个布尔函数想象成仅仅是一个如何回答是/否问题的规则。就这么简单。然后,这些门被组合成电路,这些电路被组合成 CPU 或其他计算组件。无论我们谈论的是巴贝奇的差异引擎ENIAC 、退役国际象棋冠军深蓝,还是最新的满屋爆满、令人不寒而栗、头条新闻量子计算机,都是如此。

惊人的差异

经典门对经典位进行操作,量子门对量子位*(量子位)进行操作。这意味着量子门可以利用经典门完全无法实现的量子力学的两个关键方面:叠加纠缠*。这是你在量子计算环境中最常听到的两个概念,下面是为什么是。但是有一个不太为人所知的概念可能同样重要:可逆性。简单来说,量子门是可逆的。随着你对量子计算的深入研究,你会学到很多关于可逆性的东西,所以这是值得深入研究的。现在,你可以这样想——所有量子门都有一个撤销按钮,而许多经典门没有,至少现在还没有。这意味着,至少在原则上,量子门永远不会丢失信息。在进入量子门的过程中纠缠的量子位在出去的过程中保持纠缠,在整个转换过程中保持信息安全密封。另一方面,在传统计算机中发现的许多经典门确实丢失了信息,因此不能追溯它们的步骤。有趣的是,这些信息最终并没有消失在宇宙中,而是作为经典计算机中的热量渗透到了你的房间或膝盖上。

v 代表矢量

谈量子门不能不谈矩阵,谈矩阵不能不谈向量。所以让我们继续吧。在量子力学和计算的语言中,向量被描述在一个公认的非常奇怪的包中,称为 *ket,*它来自单词 *braket 的后半部分。他们看起来很像。这里有一个 ket 向量: **|u >,*其中 u 表示向量中的值。首先,我们将使用两个 kets, |0 >|1 > ,它们将代替处于自旋向上( |0 > )和自旋向下( |1 > )状态的电子形式的量子位。可以说,这些向量可以跨越任意数量的数字。但是在二进制状态的情况下,比如自旋向上/向下的电子量子位,它们只有两个。因此,它们看起来不像高耸的列向量,而是像两层堆叠的数字。下面是 |0 > 的样子:

*/ 1 *

\ 0 /

现在,门/矩阵所做的是这些状态、这些向量、这些数据集、这些数字列转换成全新的状态。例如,一个门可以像变魔术一样把一个上升状态( |0 > )变成下降状态( |1 > ):

*/ 1 * → */ 0 *

\ 0/\ 1/

m 代表矩阵

这种从一个向量到另一个向量的转换是通过矩阵乘法这种鲜为人知的魔法来实现的,这与我们在前量子学校学过的乘法完全不同。然而,一旦你掌握了这种数学的窍门,那将是非常有益的,因为你可以一次又一次地将它应用到无数原本难以理解的方程中,而这些方程会让门外汉们目瞪口呆。如果你需要更多的动力,只要记住海森堡是通过矩阵数学的语言解开了无所不包的测不准原理的秘密。

尽管如此,如果你不熟悉这个数学工具的喷射燃料,如果我在这里开始用大的数字方阵填充这个帖子,你的眼睛会变得呆滞。我们不能让这种情况发生。因此,让我们再等几段时间来学习矩阵数学和符号。现在可以说,我们通常用一个矩阵来代替量子门。矩阵的大小和完全的恐惧因素将取决于它所操作的量子位的数量。如果只有一个量子位需要转换,这个矩阵将会非常简单,仅仅是一个有四个元素的 2 x 2 阵列。但是矩阵的大小超过了具有两个、三个或更多量子位的。这是因为一个绝对值得记忆的指数方程决定了矩阵的大小(从而决定了量子门的复杂程度):

2^n x 2^n = the total number of matrix elements

这里, n 是量子门操作的量子位的数量。正如你所看到的,这个数字随着量子比特数(n)的增加而上升。一个量子位就是 4。加上两个,就是 16 个。加上三个,就是 64 个。有了四个,就…没希望了。所以现在,我坚持一个量子位,它上面写满了泡利

保利门

泡利门是以沃尔夫冈·泡利的名字命名的,他不仅有一个很酷的名字,而且成功地使自己在现代物理学的两个最著名的原理中永垂不朽:著名的泡利不相容原理和可怕的泡利效应

泡利门基于更广为人知的泡利矩阵(又名泡利自旋矩阵),这对于计算单个电子的自旋变化非常有用。由于在今天的量子门中,电子自旋是量子位最受欢迎的属性,泡利矩阵和门正好符合我们的胃口。在任何情况下,对于空间中的每个轴(X、Y 和 Z ),本质上都有一个泡利门/矩阵。

所以你可以想象它们中的每一个都有能力改变电子在三维空间中相对应的轴的旋转方向。当然,像量子世界中的其他一切一样,这里有一个陷阱:这是而不是我们普通的 3D 空间,因为它包括一个虚拟维度。但是我们暂时不要去想它,好吗?

幸运的是,泡利门是你见过的最简单的量子门。(至少 X 门和 Z 门是。Y 有点奇怪。)所以即使你一生中从未见过矩阵,泡利也让它们变得可管理。他的门作用于一个量子位,而且一次只能作用于一个量子位。这转化为简单的 2 x 2 矩阵,每个矩阵只有 4 个元素。

泡利 X 门

对于那些害怕矩阵数学的人来说,Pauli X-gate 是梦想成真。没有虚数。没有负号。还有一个简单的操作:*否定。*这很自然,因为泡利 X 门对应的是经典的非门。由于这个原因,X 门通常也被称为量子非门。

在实际的真实世界设置中,X-gate 通常将电子的自旋向上状态 |0 > 变为自旋向下状态 |1 > ,反之亦然。

**|0>**   -->   **|1>**   OR   **|1>** --> **|0>**

大写的“X”通常代表泡利 X 门或矩阵本身。下面是 X 的样子:

*/ 0 1 *

\ 1 0 /

就正确的符号而言,将量子门应用于量子位就是将一个 ket 向量乘以一个矩阵。在这种情况下,我们将自旋 ket 矢量 |0 > 乘以泡利 X 门或矩阵 X 。下面是 X|0 > 的样子:

*/ 0 1 \ /1*

\ 1 0 / \0/

注意你总是把矩阵放在偈的左边。你可能听说过,矩阵乘法与普通乘法不同,它没有交换、,这违背了我们在学校里所学的一切*。就好像 2 x 4 是而不是*总是等于 4 x 2。但矩阵乘法就是这样,一旦你掌握了窍门,你就知道为什么了。与此同时,记住所有重要的元素排序,将量子非门应用于我们的量子位(在这种情况下是电子的自旋状态)的完整符号如下所示:

X | 0>=/0 1 /1 \ =/0 \ = | 1>

\ 1 0 / \0/ \1/

应用于 spin- down 向量,完整的符号如下所示:

X | 1>=/0 1 /0 \ =/1 \ = | 0>

\ 1 0 / \1/ \0/

尽管所有的外来符号,在这两种情况下,这里实际发生的是,单个电子形式的量子位通过量子门,从另一侧出来,自旋完全翻转。

泡利 Y 门和 Z 门

我就不跟你讲这两个的数学了。但你至少应该顺便了解一下他们。

在三个泡利门中,泡利 Y 门是最奇特的一个。它看起来很像 X 门,但是用一个 i (是的,疯狂的-1 的平方根)代替了常规的 1,并且在右上角有一个负号。这是 Y 的样子:

*/ 0 -i *

\ i 0 /

泡利 Z 门更容易理解。它看起来有点像上面 X 门的镜像,但是混合了一个负号。下面是 Z 的样子:

*/ 1 0 *

\ 0 -1 /

Y 门和 Z 门也改变了我们量子位电子的自旋。但是我可能需要深入到布洛赫球的深奥的秘密中去真正解释如何,而且我现在有另一个门要通过…

哈达玛门

虽然泡利门在某些方面很像经典逻辑门,但哈达玛门,或称 H 门,是真正的量子怪兽。它在量子计算中无处不在,而且理由充分。阿达玛门具有典型的量子能力,可以将一个确定的量子状态,比如自旋向上,转变成一个模糊的状态,比如同时自旋向上和自旋向下的叠加。

一旦你发送一个自旋向上或自旋向下的电子通过 H 门,它将变得像一枚竖立的硬币,当被倾倒和测量时,它将以 50/50 的概率结束正面(自旋向上)或反面(自旋向下)。这种 H-gate 对于执行任何量子程序中的第一次计算都非常有用,因为它将预设或初始化的量子位转换回它们的自然流体状态,以便利用它们的全部量子能力。

其他量子门

你肯定会遇到许多其他的量子门。它们中的许多一次操作几个量子位,导致具有复数元素的 4x4 甚至 8x8 矩阵。如果你还没有掌握一些重要的黑客帝国技能,这些就相当危险了。所以我就不告诉你细节了。

您希望熟悉的主要大门是我们在下图中介绍过的大门:

你应该知道存在其他的门,所以这里有一个最广泛使用的其他量子门的快速列表,这样你就可以对术语有一个感觉:

  • 托弗利门
  • 德国之门
  • 交换门(和交换门平方根)
  • 非门平方根
  • 受控非门和其它受控门

还有很多。但是不要让数字欺骗了你。正如你可以用 NOT +或= NOR 门AND + NOT= NAND 门的组合来执行任何经典计算一样,你可以将量子门的列表简化为一组简单的通用量子门。但是我们会把契约留到下一天。

透过量子门凝视未来

正如最近量子杂志的一篇文章指出的,2018 年的量子计算机还没有准备好迎接黄金时代。在他们步入拥有数十亿倍逻辑门的经典计算机的世界之前,他们需要面对一些自己的恶魔。最致命的大概就是退相干的恶魔了。现在,量子退相干将在“几微秒”内摧毁你的量子计算。然而,你的量子门执行操作的速度越快,你的量子算法就越有可能将退相干的恶魔击败到终点线,这场比赛就越长。除了速度,另一个重要因素是量子门完成一次计算所需的运算数量。这被称为计算的深度。因此,另一个当前的任务是深化量子领域。按照这种逻辑,随着快速发展的量子计算机变得更快,它的计算更深入,退相干倒计时更长,经典计算机最终会发现自己在(很可能)不太远的将来面临一个可怕的挑战者,如果不是继任者的话。

如果你喜欢这篇文章,我会非常兴奋,如果你点击拍手按钮:)或与你好奇的朋友分享。我在我的个人博客(jasonroell.com)上有更多类似的东西,或者你可以订阅我的媒体简介,让我一写完文章就发给你!(多牛逼?!)

无论如何,再次感谢你的阅读祝你有美好的一天!

揭开统计分析 1 的神秘面纱:一份方便的备忘单

原文:towardsdatascience.com/demystifyin…

选择使用的统计分析主要取决于数据集中的变量类型、需要进行分析的变量数量以及变量中的级别/类别数量。只要我们对正在处理的数据有很好的理解,选择使用的统计分析就不应该太令人生畏。

我一直想知道,为什么大多数统计教科书没有一个表格,汇总所有不同的统计分析,它们如何相互关联,以及何时使用它们。在互联网上快速搜索发现了许多类似的小抄,但没有一个以直观的方式呈现信息。

在我创建的备忘单中,行代表不同类型的自变量(也称为预测值或协变量),而列代表不同类型的因变量(也称为标准或测量值)。然后,行和列的交叉点指示要使用的适当分析,每个分析下面的小文本显示了在 SPSS 中执行分析的快速步骤。

这篇文章是揭开统计分析神秘面纱系列文章的第一篇,我希望通过描绘不同统计分析之间的联系以及解释它们之间的差异,帮助简化对统计分析的理解。

后续帖子已经在 媒体发布

[## 揭秘统计分析 2:用线性回归表示的独立 t 检验

组比较分析,如独立 t 检验和方差分析可能看起来与线性回归很不一样,但…

medium.com](medium.com/@wyess/demy…) [## 揭秘统计分析 3:用线性回归表示的单因素方差分析

在本系列的前一部分中,我们研究了如何在线性回归中表达独立 t 检验…

medium.com](medium.com/@wyess/demy…) [## 揭秘统计分析 4:用线性回归表示的因子方差分析

本系列的前一部分介绍了单向 ANOVA,我解释了如何进行分析…

medium.com](medium.com/@wyess/demy…) [## 揭秘统计分析 5:以线性回归表示的协方差

本系列的前一部分展示了当超过……时,如何在线性回归中表达阶乘方差分析

medium.com](medium.com/@wyess/demy…)

原发布于:https://learn curily . WordPress . com/2018/08/23/statistical-analysis-cheat-sheet

揭秘统计分析 6:调节与调解

原文:towardsdatascience.com/demystifyin…

为什么它们会配对在一起?!

区分“适度”和“中介”这两个词,是很多学生学习统计学的命根子。因为这两种分析处理的是无关变量,而且它们听起来非常相似,所以人们经常把它们混淆在一起。但是如果我们揭示了每种分析的本质,它们的差异会变得如此明显,以至于你甚至会想为什么它们总是被配对在一起。在我们深入分析每种分析的作用之前,我希望下面的句子有助于形成如何以最简单的方式区分它们的基础:

  • 信不信由你, 适度测试 仅仅是检查是否存在互动效应,仅此而已。
  • 另一方面,中介 测试 至少需要一个稍微复杂一点的模型比较方法来检查因果关系。

适度

“适度分析怎么会和互动效果测试一样呢?!"你可能会问,如果它们是相同的,那么为什么要有两个不同的术语呢?这种情况在统计术语中很常见,正如我们在 ANCOVA 关于预测值与协变量的讨论中所看到的。事实上,这篇文章阐述了我试图说明的同一点,即“关于统计分析,最令人困惑的事情之一是使用不同的词汇来描述相同的或几乎相同但不完全相同的概念”。

当我们说年龄是性别的调节变量时,无论我们使用年龄作为分类预测因子(儿童对成人)还是连续变量,我们期望看到的是性别对因变量ŷi的影响因年龄值的不同而不同(示例可在 ANCOVA 帖子中找到)。为了测试这种适度性,需要在分析中引入性别和年龄之间的交互变量。如果交互作用变量的斜率是显著的,年龄被认为是性别的调节变量。因此,测试适度性所需要的只是知道如何构建交互项,以及如何进行交互分析(例如,在多元线性回归中,因子 ANOVAANCOVA )。

实质上,“相互作用”这个术语是一个更广泛的概念,它没有定义不同自变量之间的关系。它没有区分感兴趣的预测因素、预测因素和协变量、或预测因素和调节因素之间的分析。然而,术语“调节”更具体地表明调节子是一个确定的无关变量,它与感兴趣的预测因子有一个假设的相互作用效应。通过这种推理,协变量和调节变量在某种意义上是不同的,虽然两者都是不需要的变量,但都被认为是存在的,调节变量被假设为与感兴趣的预测因子相互作用,但协变量可能会也可能不会。

调解

虽然中介分析也处理外来变量,但它采用了完全不同的方法,与交互分析没有什么关系。它的目的是在无关变量存在的情况下,确定自变量对因变量的因果关系。测试中介的最简单方法是通过 3 个模型的比较。

中介分析的典型场景通常始于已建立的显著关系,如因变量ŷi(c 路径)的简单性别回归,但年龄等外部变量被假设为中介变量(见下图,考虑中介时,c '-路径代表 c-路径)。

Path relationships in the analysis of independent variable “Gender” on dependent variable Ŷi, with “Age” as a mediating variable.

我们首先需要证明性别对年龄的简单回归(a 路径)是显著的,然后证明性别(c 路径)和年龄(b 路径)对因变量ŷi的多重回归导致 c 路径变得不显著,而 b 路径仍然是显著的。这被称为调解测试的偶然步骤程序,但是其结果具有非常低的效力,因为没有考虑 a 路径对 b 路径的间接影响,并且 c’路径仅在完全调解的情况下变得不重要。因此,该程序通常由其他统计测试来补充。

最容易进行的测试之一是 Sobel-Aroian 测试,它利用了 a 路径和 b 路径的回归系数( b )和标准误差(se)(当年龄随着因变量ŷi的性别而回归时)。使用以下公式计算 a 路径对 b 路径的间接影响的Z-得分:

如果p-Z-得分的值小于. 05,则存在 a 路径对 b 路径的间接影响,并且存在中介。为了方便起见,您可以使用这个计算器进行索贝尔-阿罗里安测试。

索贝尔-阿罗里安试验是一种快速简便的方法,只适用于大样本的简单调解。对于更复杂的中介分析,通常推荐使用自举或结构方程模型(SEM)。


我希望上面的解释有助于阐明“适度”和“调解”之间的明显区别,并一劳永逸地解决混淆。但是,除了理解这些术语的真正含义之外,研究人员能够用简单的术语解释他们选择的分析类型如何能够实现他们试图找到的结果,而不是随便抛出统计术语,试图听起来复杂,这也是有帮助的。事实上,通常最简单的分析类型会产生最有趣和最容易解释的发现。

最初发布于:https://learn culily . WordPress . com/2018/09/29/moderation-and-mediation

揭秘统计分析 7:数据转换和非参数检验

原文:towardsdatascience.com/demystifyin…

在阅读这篇文章的标题时,有些人可能想知道为什么“数据转换”和“非参数测试”会在同一篇文章中同时出现。非参数测试通常与参数测试一起介绍,但是当我在本系列开始时分享了一个关于统计分析的备忘单时,我似乎把它们遗漏了。这种排除是有意的,我将在本帖中解释非参数测试实际上如何与数据转换相关联。

数据转换

进行参数测试时,通常假设:

  • 数据呈正态分布
  • 误差方差是常数
  • 误差是独立的
  • 预测值不相关
  • 数据中的关系是线性的

然而,这些假设并不总是适用于我们试图分析的数据,因此可以进行某些转换来帮助数据符合这些假设,以便使用通常的参数测试。

在之前关于单向方差分析的一篇文章中,展示了如何使用对比代码来测试有序分类预测符中潜在的多项式关系。因此,连续预测值也不一定与其因变量成线性关系也就不足为奇了。在这种情况下,可以使用电源转换。通过在回归模型中加入连续预测值的 Xi 项,b-系数将是对是否存在二次关系的检验;同样,增加的 Xi 项的b-系数将是对是否存在三次关系的检验。高阶项也可以包括在内,但它们变得越来越难以解释。

对于其他类型的场景,可以使用不同的转换:

Types of transformations with their respective formulae and type of data that they are used for.

到目前为止所描述的变换是在预测器上完成的,但是也可以变换因变量的值。从本质上讲,为数据集找到正确的转换是一个反复试验的过程。事实上,在每次转换后,重新绘制可视化数据并进行必要的统计测试以检查假设是否仍然违反,这是一个很好的实践。

非参数检验

当数据不是正态分布时,通常使用非参数检验。这些测试被认为是一种转换,因为除了数据被转换为从最低值到最高值的等级(1,2,3,…)之外,它们基本上等同于它们的参数对应项。然而,当数据经历等级变换时,诸如数据点的方差之类的重要信息会丢失。这就做了一个强有力的假设,即数据点是有意义地有序的,即使它们实际上彼此接近并且没有太大的变化。非参数检验也与均值和方差的报告不兼容,但这可以用中位数的报告来代替。

教材《数据分析:一种模型比较方法》的作者凯里·瑞安、查尔斯·m·贾德和加里·h·麦克莱兰甚至走得更远*“不推荐非参数程序”。他们认为“如果人们认识到大多数非参数程序只是应用于已进行秩变换的数据的参数程序,那么很明显,如果有更好的变换,在更可能处理非正态性和异质性方差问题的意义上更好,那么这些应该用来代替非参数统计程序”*。尽管如此,这篇博客概述了使用非参数测试的一些原因:

  1. 你的样本量很小。
  2. 您有无法移除的序数数据、等级数据或异常值。
  3. 你的研究领域最好用中位数来代表。

本质上,如果有可能通过其他类型的转换来解决假设违反,那么避免使用非参数测试可能会更好。但是由于在小样本的研究中我们无能为力,所以非参数检验常常成为唯一的选择。

为了那些仍然需要使用非参数测试的人,我创建了一个备忘单来为数据集中的每种类型的预测值选择非参数分析,在 SPSS 中执行分析的快速步骤,以及将非参数测试与它们的等效参数进行比较:


我希望这篇文章有助于解决非参数测试到底是什么,它们实际上如何与数据转换相关,以及为什么在数据不是正态分布的情况下没有必要使用它们。

有关参数测试的备忘单,请访问以下链接:

[## 揭开统计分析 1 的神秘面纱:一份方便的备忘单

统计分析方法的选择主要取决于数据集中变量的类型,变量的数量…

towardsdatascience.com](/demystifying-statistical-analysis-1-a-handy-cheat-sheet-b6229bf992cf)

最初发布于:https://learn curely . WordPress . com/2018/10/06/data-transformations-and-nonparametric-tests

登革热及如何预测

原文:towardsdatascience.com/dengue-feve…

介绍

作为我的期末项目,我决定用更先进的数据科学技能重新审视机器学习竞赛。我选择预测波多黎各圣胡安和秘鲁伊基托斯的登革热病例是因为它对全球健康的影响,部分原因是我想改进我在芝加哥的西尼罗河项目的方法。

那么,为什么是登革热呢?在全球健康范围内,登革热是一种重要但有时被忽视的疾病,估计每年影响5000-1000 万人,并在全球造成近 90 亿美元的损失。在秘鲁,2016 年报告的病例超过 27,000 例,在波多黎各,2010 年报告的病例超过 26,000 例。

使用神经网络和回归模型的组合,我能够适度地预测登革热病例,并对一些关键的预测因素有所了解。

数据

这个项目的数据是从 DrivenData.org 下载的,作为他们“邓艾:预测疾病传播”挑战的一部分。除了每个地点的病例数,数据还包括温度、降水、湿度、植被以及数据获取时间等信息(完整的特征列表可在此处找到)。在所提供的数据中,我需要仔细观察的唯一特征是卫星植被,我了解到这基本上是一个给定区域的“绿色”指数,基于对植物光辐射的卫星测量的计算。例如:

en.wikipedia.org/wiki/Normal…

这些数据还包含大量的空值。我没有删除所有的空值,而是只删除了最差的列(ndvi_ne,城市质心东北方向的植被指数像素)中的空值,总共 1450 行中的大约 200 行,并用该列同一周的平均值填充其余的缺失数据。在这里,我假设,例如,1995 年的第 36 周在天气特征方面与 1998 年的第 36 周相似。

我还尝试根据城市将数据集分成两个不同的数据集,这样信息就不会从圣胡安流向伊基托斯,并假设每个城市相似的天气条件会导致蚊子的数量明显不同。不幸的是,分割数据实际上使我的预测更糟糕,可能是因为它将每个模型的可用数据减半。因此,我的最终模型使用了一个组合数据集,尽管使用更强的模型,我仍然想尝试分离城市,因为我认为这个假设仍然有效。

建模和结果

我在建模过程中的第一直觉是建立一个神经网络,这起初看起来几乎像是一颗银弹。但在我能为我的第一个模型打分之前,我遇到了一个障碍:

Submitting is as easy as 1, 2, 3… 4… 5… 6…

可怕的提交格式!幸运的是,由于我巨大的编码能力,我能够编写一个函数来接受一个模型,并以一个漂亮的、准备好提交的 CSV 格式输出预测。

解决了这个问题,我终于可以给我的神奇神经网络打分了。不幸的是,他们并不完全符合我自己的宣传。我的第一个模型是用 Keras 制作的,表现仅仅是 ok,产生一个平均绝对误差,MAE 从现在开始是 29.6(作为参考,DrivenData 上最好的分数是 13 MAE)。幸运的是,这个特别的项目受益于无限提交!嗯,有一点点限制,准确的说是每天 3 个。正因为如此,我不得不在如何生成预测时使用一点战术。那时我偶然发现了一个叫做 Talos 的 Python 包,它是专门为优化 Keras 中的超参数而构建的,本质上像神经网络的 GridSearch 一样工作。

Various neural nets and their scores

分数方面,我所有的神经网络都归结为“30 分左右”。对于标签上的一点澄清,“poly-weather”表示使用从天气预报器设计的多项式特征,“cleaning”表示 ndvi_ne 空值是填充(1)还是丢弃(2),“tuned/early”分别表示使用 Talos 和 early stopping,“adjusted”是指当我不科学地从每个预测中减去 1 时,因为我似乎无法让我的模型预测 0。总的来说,我创建的每个模型都是过度拟合的,测试 MAE 和维持 MAE 之间通常相差 15 个点。

在感觉我已经尝试了足够数量的神经网络预测以确保下一组预测也将具有“大约 30”的分数之后,我决定研究其他方法。虽然我肯定想努力提高我的分数,但我也想尝试一些更容易理解的东西;能够预测登革热病例是一回事,但下一步将是确定哪些特征对该疾病的发病率最重要。为了解决这个双重目标,我将 pipeline 与 GridSearch 结合起来,一次尝试多个不同的模型和参数:

Thanks to my friend William “Mac” McCarthy!

在这些新模型中,random forest 表现最佳,MAE 为 26.1,提高了四个百分点!紧随其后的是 bagging 回归因子,为 26.5,其次是 K 近邻,为 30.2。我最终没有提交 AdaBoost,因为训练/测试分割分数太差了,比其他人高 15 分左右。为了看一些更有解释力的东西,我决定把重点放在套索模型(得分 34.3)。

LASSO coefficients

值得一提的是,对于这些模型,我使用神经网络将各个植被指数合并成一个单一的(拼写错误的)预测指数。一般来说,系数较大的特征(因此预测能力较强)并不令人惊讶,因为年份、一年中的周数、降水量和最低气温对模型有重大影响。植被指数也是一个强大的预测因子,因此未来的一步可能是再次将其分离出来,并研究如何解释 NDVI 本身。众所周知,TDTR 代表时域热反射率,这是你可能必须亲自调查的事情。

最后的想法

虽然我对我在这个项目过程中所创造和学到的东西非常满意,但为了追求更准确的预测和更好的分数,仍然有很多东西要尝试,而且在撰写本文时比赛还剩 7 周,时间也很充裕!我认为首先要解决的最重要的问题是我的模型中大量的过度拟合,我可以通过限制神经网络特征的数量来解决这个问题。我还认为尝试提出一些基于人口密度、医疗保健支出或治疗方法数据的全新特征是值得的,看看它们是否会比一些较弱的预测指标更有效。

期待在几周内再次访问这个项目,但现在感谢阅读!

降噪自动编码器解释

原文:towardsdatascience.com/denoising-a…

上个月,我写了关于变型自动编码器和它们的一些用例。这次,我将看看另一种类型的自动编码器:去噪自动编码器,它能够重建损坏的数据。

自动编码器是通常用于特征选择和提取的神经网络。然而,当隐藏层中的节点多于输入时,网络冒着学习所谓的“恒等函数”(也称为“空函数”)的风险,这意味着输出等于输入,标志着自动编码器无用。

去噪自动编码器通过随机将一些输入值归零来故意破坏数据,从而解决了这个问题。通常,被设置为零的输入节点的百分比约为 50%。其他资料显示,这个数字可能更低,比如 30%。这取决于您拥有的数据量和输入节点。

Architecture of a DAE. Copyright by Kirill Eremenko (Deep Learning A-Z™: Hands-On Artificial Neural Networks)

计算损失函数时,重要的是将输出值与原始输入进行比较,而不是与损坏的输入进行比较。这样,就消除了学习身份函数而不是提取特征的风险。

opendeep.org发布了一个很棒的实现,他们使用 Theano 构建了一个非常基本的去噪自动编码器,并在 MNIST 数据集上训练它。OpenDeep 文章非常基础,是为初学者编写的。因此,即使您没有太多关于神经网络的经验,这篇文章也绝对值得一读!

Original input, corrupted data and reconstructed data. Copyright by opendeep.org.

去噪自动编码器是特征选择和提取的重要和关键工具,现在你知道它是什么了吧!享受并感谢阅读!

用带交互代码的神经网络去噪 CT 扫描第 3 部分,卷积残差神经网络[带 TF 的手动反推]

原文:towardsdatascience.com/denosing-lu…

Image from Pixel Bay

因此,由于我将使用大量的图像数据,我将转移到 Tensorflow 来利用 GPU 的力量。不过,不用担心,我们将实现所有的反向传播。(也将最终结果与自动微分进行比较)。由于期中考试,我不能做太多,所以我想到了简单的卷积残差神经网络。

最后,为了好玩,让我们使用不同类型的反向传播来比较什么给我们最好的结果。我们将要使用的不同类型的反向传播是…

a.扩张反向传播

注:所有的 DICOM 图像均来自 癌症影像存档网 ,如果您打算使用这些数据,请查阅他们的数据使用年龄政策。具体来说,我将使用来自 的 DICOM 图像和【FDA】数据集。

残留块

Front and Side View of Residual Block

红圈 →输入到残差块 绿圈 →输入上的卷积运算 蓝圈 →卷积运算后应用的激活函数 黑圈 →激活层 后应用 残差函数并将值传递给下一个块。(这在输入值和计算值之间建立了直接联系。)

在深入研究网络架构之前,我将先解释一下我们网络的剩余块。我们的网络将会有剩余的块,在这些层里面将会看起来像上面一样。还有一件非常重要的事情我想在这里说明一下。

残差函数可以是 1。乘法 2。附加 3。两者的混合物。

记住这一点,让我们看看代码,下面是一个剩余块的屏幕截图,用乘法作为剩余函数。

网络架构/前馈操作

黑色方块 →带噪声的 CT 肺部扫描输入图像 粉色方块 →去噪后的 CT 肺部扫描输出图像 其他块 →不同通道数的剩余块

因此前馈操作非常简单易懂,没有什么特别之处。

剩余函数 1 2

Feed Forward Operation with Residual Function 1

Feed Forward Operation with Residual Function 2

如上所述,(也正如我提到的)我们可以使用乘法或加法或两者的结合。在这个实验中,我要么用乘法,要么用加法加乘法。

标准/扩张反向传播

Standard Back Propagation

Densely Connected Dilated Back Propagation

黄色箭头 →标准梯度流 隔色箭头 →扩张梯度流

这里我们将使用扩张反向传播,看看它如何影响整体去噪操作。并与自动微分反向传播算法进行了比较。

案例 1:手动 ADAM 反向传播残差函数 1

在这里,我使用了残差函数 1 和带有 ADAM 优化器的标准手动反向传播。网络似乎过滤掉了噪声,但是整体图像丢失了太多信息。

另外,请注意每张 GIF 都有不同数量的通道或激活功能,请点击这里进入我的 Github 页面。

情况 2:手动 ADAM 反向传播残差函数 2

在这里,我使用了残差函数 2 和 ADAM optimizer 的标准手动反向传播。我认为这是一个彻底的失败,因为图像的“去噪”版本只是一片漆黑。

另外,请注意每张 GIF 都有不同数量的通道或激活功能,请点击这里查看我的 Github 页面。

情况 3:手动扩张 ADAM 反向传播的残差函数 2

这里我使用了具有密集连接的扩张反向传播的剩余函数 2。现在最下面的 GIF 看起来效果还算不错。唯一的问题是,图像丢失了太多有用的信息。

另外,请注意每张 GIF 都有不同数量的通道或激活功能,请点击这里查看我的 Github 页面。

情况 4:具有自动差分反向传播的残差函数 2

奇怪的是,当让 Tensorflow 为我们做反向传播时。似乎这个模型什么也没做。相当奇怪的行为,或者我做错了什么。(如果你在我的代码中发现错误,请在下面评论。)

另外,请注意每张 GIF 都有不同数量的通道或激活功能,请点击这里查看我的 Github 页面。

互动码

我搬到了谷歌 Colab 寻找交互代码!所以你需要一个谷歌帐户来查看代码,你也不能在谷歌实验室运行只读脚本,所以在你的操场上做一个副本。最后,我永远不会请求允许访问你在 Google Drive 上的文件,仅供参考。编码快乐!

要访问案例 1 的代码,请点击此处。 要访问案例 2 的代码,请点击此处。(注意,我无法在 Google Colab 上分配足够的内存,所以我无法在线训练。) 要访问案例 3 的代码,请点击此处。(注意,我无法在 Google Colab 上分配足够的内存,所以我无法在线训练。) 要访问案例 4 的代码,请点击此处。(注意,我无法在 Google Colab 上分配足够的内存,所以我无法进行在线训练。)

更新:3 月 1 日→所以忘了归一化最终输出 LOL 抱歉这是个如此业余的错误。这就是为什么图像看起来这么黑。我的主管建议查一下这个。通过适当的标准化,我能够获得扩张反向传播的结果。

最后的话

在此之前,我实际上尝试了不同的模型,如香草甘,自动编码器甘和所有卷积甘,但他们实际上没有一个好结果。但我会用剩余的积木试一下。

如果发现任何错误,请发电子邮件到 jae.duk.seo@gmail.com 给我,如果你希望看到我所有写作的列表,请在这里查看我的网站

同时,在我的 twitter 上关注我这里,访问我的网站,或者我的 Youtube 频道了解更多内容。如果你感兴趣的话,我还做了解耦神经网络的比较。

参考

  1. tf.nn.conv2d 在 tensorflow 中做什么?(未注明)。检索于 2018 年 2 月 26 日,来自https://stack overflow . com/questions/34619177/what-does-TF-nn-conv2d-do-in-tensor flow
  2. 在 TensorFlow / if 中编写分段函数,然后在 TensorFlow 中编写。(未注明)。检索于 2018 年 2 月 26 日,来自https://stack overflow . com/questions/37980543/writing-piece-wise-functions-in-tensor flow-if-then-in-tensor flow
  3. 《tf.cast | TensorFlow》, TensorFlow ,2018。【在线】。可用:www.tensorflow.org/api_docs/py…【访问时间:2018 年 2 月 26 日】。
  4. tensor flow type 错误:传递给参数输入的值的数据类型 uint8 不在允许值列表中:float16,float32。(未注明)。检索于 2018 年 2 月 26 日,来自https://stack overflow . com/questions/44822999/tensor flow-type error-value-passed-to-parameter-input-has-datatype-uint 8-not-in
  5. Pylab_examples 示例代码:subplots_demo.py。(未注明)。检索于 2018 年 2 月 28 日,来自https://matplotlib . org/examples/pylab _ examples/subplots _ demo . html
  6. [3]" TF . nn . conv 2d _ back prop _ filter | tensor flow ", TensorFlow ,2018。【在线】。可用:https://www . tensor flow . org/API _ docs/python/TF/nn/conv 2d _ back prop _ filter。【访问日期:2018 年 2 月 28 日】。
  7. " TF . nn . conv 2d _ back prop _ input(input _ sizes,filter,out_backprop,strides,padding,use_cudnn_on_gpu=None,data_format=None,name=None) | TensorFlow ", TensorFlow ,2018。【在线】。可用:https://www . tensor flow . org/versions/r 1.0/API _ docs/python/TF/nn/conv2d _ back prop _ input。【访问时间:2018 年 2 月 28 日】。
  8. 如何在 tensorflow 中置换 tranposition?(未注明)。检索于 2018 年 2 月 28 日,来自https://stack overflow . com/questions/38517533/how-to-permutate-transposition-in-tensor flow

使用交互式代码的神经网络对肺部 CT 扫描进行去噪—第 4 部分,卷积 ResNet

原文:towardsdatascience.com/denosing-lu…

Gif from here

对肺部 CT 扫描进行降噪的另一种尝试,这次我们将使用更复杂的卷积 ResNet 架构。具体来说,我们将使用本文提出的架构,“深度残差学习进行图像识别 ”。同样,像往常一样,让我们做手动反向传播来比较我们的结果。

网络架构(图像形式)

Image from this paper

我不会详细讨论这个,因为这个建筑本身已经很有名了。但作为一个高层次的概述,我们将对每一层进行两次卷积运算,并将输入与输出相加。

然而,一个不同之处是,我们将添加第三个卷积操作来创建一个 瓶颈层 。下面我来解释一下。

前馈操作/瓶颈层

蓝线→ 快捷层的前馈操作 红线→ 添加过程输入(layer1_2)和快捷层(layer1_s)

这是原始建筑和我们的建筑的唯一区别。完整的网络架构请见下文。我们只有 3 个休息区。

实验设置

同样,实验设置非常简单,左边是原始图像,右边是被污染的图像。更具体地说,我添加了均匀分布噪声,我们可以通过下面的代码做到这一点。

红线 →创建一个我们将要添加到图像中的均匀噪声。

结果(自动微分)

左侧 →原始肺部 CT 扫描图像 中间 →噪声分布均匀的污染图像 右侧 →去噪图像

总的来说,网络似乎正确地对图像进行了去噪,但是产生的图像具有一些尖锐部分,使得图像位合成。

结果(扩张反向传播)

左侧 →原始肺部 CT 扫描图像 中间 →噪声分布均匀的污染图像 右侧 →去噪图像

对于手动反向传播,图像没有填充空间。

近看

左→ 原始图像 中→ 自动微分的结果图像 右→ 扩张反向传播的结果图像

当我们看到每张照片的特写时,我们可以清楚地看到大部分清晰的边缘细节都消失了。因此,传奇仍在继续……

交互代码

对于 Google Colab,你需要一个 Google 帐户来查看代码,而且你不能在 Google Colab 中运行只读脚本,所以在你的游戏场上复制一份。最后,我永远不会请求允许访问你在 Google Drive 上的文件,仅供参考。编码快乐!

要访问自动差异化模型,请点击此处。 要访问扩张后支柱型号,请点击此处

遗言

说实话,只要我能把这个帖子做成 LOL,我就想让这个传奇继续下去。我对新模型有一些想法

如果发现任何错误,请发电子邮件到 jae.duk.seo@gmail.com 给我,如果你想看我所有写作的列表,请在这里查看我的网站。

同时,在我的推特这里关注我,访问我的网站,或者我的 Youtube 频道了解更多内容。如果你感兴趣的话,我还做了解耦神经网络的比较。

参考

  1. 只有 Numpy:扩张的反向传播和谷歌大脑的梯度噪声与交互代码。(2018).黑客正午。检索于 2018 年 3 月 30 日,来自https://hacker noon . com/only-numpy-expanded-back-propagation-and-Google-brains-gradient-noise-with-interactive-code-3a 527 fc 8003 c
  2. 贺,张,谢,任,孙,(2016)。用于图像识别的深度残差学习。IEEE 计算机视觉和模式识别会议论文集*(第 770–778 页)。*

DenseNet

原文:towardsdatascience.com/densenet-28…

许多论文:

DenseNet 原纸:arxiv.org/pdf/1608.06…

DenseNet 语义分割:【arxiv.org/pdf/1611.09…

光流 DenseNet:【arxiv.org/pdf/1707.06…

DenseNet 架构是新的,它是 ResNet 的逻辑扩展。

ResNet 体系结构有一个基本的构建块(标识),您可以将以前的层合并(添加)到未来的层中。这里的推理是,通过添加加法合并,我们迫使网络学习残差(误差,即一些先前层和当前层之间的差异)。相比之下,DenseNet 论文提出连接来自先前层的输出,而不是使用求和。

DenseNet:

最近的工作表明,如果卷积网络在靠近输入的层和靠近输出的层之间包含较短的连接,则卷积网络可以训练得更深入、更准确和有效。在本文中,我们接受这种观察,并介绍了密集卷积网络(DenseNet),它以前馈方式将每一层与每一层连接起来。传统的 L 层卷积网络有 L 个连接——每层与其后续层之间有一个连接——而我们的网络有 L(L+1)/ 2 个直接连接。对于每一层,所有在前层的特征图被用作输入,并且它自己的特征图被用作所有后续层的输入。DenseNets 有几个引人注目的优点:它们缓解了消失梯度问题,加强了特征传播,鼓励特征重用,并大大减少了参数的数量。

这种密集连接模式的反直觉效果是,它比传统的卷积网络需要更少的参数,因为不需要重新学习冗余的特征映射。传统的前馈架构可以被视为具有状态的算法,该算法从一层传递到另一层。每一层从其前一层读取状态,并写入后续层。它改变了状态,但也传递了需要保存的信息。ResNets [11]通过附加的身份变换使这种信息保持显式化。ResNets [13]最近的变化表明,许多层贡献很小,实际上在训练期间可以随机丢弃。这使得 resnet 的状态类似于(展开的)递归神经网络[21],但是 resnet 的参数数量要大得多,因为每层都有自己的权重。我们提出的 DenseNet 架构明确区分了添加到网络中的信息和保留的信息。DenseNet 层非常窄(例如,每层 12 个特征图),仅将一小组特征图添加到网络的“集体知识”中,并保持其余的特征图不变,并且最终的分类器基于网络中的所有特征图做出决定。

除了更好的参数效率之外,DenseNets 的一大优势是改善了整个网络的信息流和梯度,这使得它们易于训练。每一层都可以直接访问损失函数和原始输入信号的梯度,从而实现隐含的深度监控[20]。这有助于训练更深层次的网络架构。此外,我们还观察到密集连接具有正则化效应,这减少了对较小训练集大小的任务的过度拟合。

连接由不同层学习的特征图增加了后续层输入的变化并提高了效率。这是 DenseNets 和 ResNets 的主要区别。与也连接来自不同层的特征的初始网络[35,36]相比,DenseNets 更简单和更有效。

每一层将它自己的 k 个特征地图添加到该状态。增长率决定了每一层对全局状态贡献多少新信息。全局状态一旦写入,就可以从网络内的任何地方访问,并且与传统的网络体系结构不同,不需要从一层复制到另一层

瓶颈层。虽然每个图层仅生成 k 个输出要素地图,但通常会有更多的输入。在[36,11]中已经指出,可以在每个 3×3 卷积之前引入 1×1 卷积作为瓶颈层,以减少输入特征图的数量,从而提高计算效率。我们发现这种设计对 DenseNet 特别有效,我们将具有这种瓶颈层的网络称为 DenseNet-B,即 h’的 BN-ReLU-conv(1× 1)-BN-ReLU-conv(3×3)版本。除非另有说明,否则在所有实验中,每个 1×1 卷积将输入减少到 4k 特征图。

压缩。为了进一步提高模型的紧凑性,我们可以减少过渡层的特征映射的数量。如果密集块包含 m 个特征映射,我们让下面的过渡层生成 bθmc 输出特征映射,其中 0 < θ ≤1 被称为压缩因子。当θ = 1 时,过渡层上的特征映射数保持不变。我们将θ <为 1 的 DenseNet 称为 DenseNet-C,我们在实验中设置θ = 0.5。当使用θ < 1 的瓶颈层和过渡层时,我们将我们的模型称为 DenseNet-BC。

从表面上看,DenseNets 与 resnet:Eq 非常相似。(2)不同于等式。(1)仅仅在于 h `()的输入被连接而不是求和。然而,这个看似很小的修改会导致两种网络体系结构的本质上不同的行为。

模型紧凑性。作为输入连接的直接结果,由任何 DenseNet 层学习的特征映射可以被所有后续层访问。这鼓励了整个网络中的特征重用,并导致更紧凑的模型。

隐性深度监管。对密集卷积网络精度提高的一种解释可能是,单个层通过较短的连接从损失函数接收额外的监督。人们可以将 DenseNets 解释为执行一种“深度监督”。深度监督的好处之前已经在深度监督网络(DSN[20]),其具有附加到每个隐藏层的分类器,加强中间层以学习区别特征。DenseNets 以隐含的方式执行类似的深度监督:网络顶部的单个分类器通过最多两到三个过渡层向所有层提供直接监督。然而,DenseNets 的损失函数和梯度基本上不太复杂,因为所有层之间共享相同的损失函数。

DenseNet 语义分段:

这篇论文有趣的标题是:一百层提拉米苏

语义图像分割的最新方法建立在卷积神经网络(CNN)的基础上。典型的分割架构包括(a)负责提取粗略语义特征的下采样路径,随后是(b)被训练以在模型的输出端恢复输入图像分辨率的上采样路径,以及可选的后处理模块(例如,条件随机场)以改进模型预测。最近,一种新的 CNN 架构,密集连接卷积网络(DenseNets),在图像分类任务上表现出了优异的结果。DenseNets 的想法是基于这样的观察,即如果每一层都以前馈方式直接连接到其他每一层,那么网络将更精确,更容易训练。在本文中,我们扩展 DenseNets 来处理语义分割问题

最近,在[12]中引入了一种新的 CNN 架构,称为 DenseNet。DenseNets 由密集块和池操作构建而成,其中每个密集块都是先前特征映射的迭代串联。这种架构可以看作是 ResNets [10]的扩展,它对以前的特征图进行迭代求和。然而,这个小的修改有一些有趣的含义:(1)参数效率,DenseNets 在参数使用上更有效;(2)隐式深度监督,DenseNets 由于到架构中所有特征地图的短路径而执行深度监督(类似于深度监督网络[17]);以及(3)特征重用,所有层可以容易地访问它们的前一层,使得重用来自先前计算的特征地图的信息变得容易。DenseNets 的特性使它们非常适合语义分割,因为它们自然地导致跳过连接和多尺度监督

在本文中,我们通过添加上采样路径来恢复完整的输入分辨率,从而将 DenseNets 扩展为 fcn。天真地构建上采样路径将导致在 softmax 层之前具有非常高分辨率的大量计算上难以处理的特征地图。这是因为人们会将高分辨率特征图与大量输入过滤器(来自下面的所有层)相乘,导致非常大的计算量和参数数量。为了减轻这种影响,我们仅对由前面的密集块创建的特征地图进行上采样。这样做允许在上采样路径的每个分辨率下具有多个密集块,而与汇集层的数量无关。此外,在给定网络架构的情况下,上采样的密集块组合了相同分辨率的其他密集块中包含的信息。借助于下采样和上采样路径之间的标准跳跃连接来传递更高分辨率的信息。

因此,本文的贡献可以概括如下:

  1. 我们小心地将 DenseNet 架构[12]扩展到全卷积网络进行语义分割,同时减轻了特征图爆炸。
  2. 我们强调,从密集块构建的建议上采样路径比具有更多标准操作的上采样路径执行得更好,例如[26]中的操作。
  3. 我们表明,这种网络可以在不使用预训练参数或任何进一步后处理的情况下,在城市场景理解的标准基准上胜过当前最先进的结果

fcn 由下采样路径、上采样路径和跳过连接构成。通过重用要素地图,跳过连接有助于上采样路径从下采样路径恢复空间详细信息。我们模型的目标是通过扩展更复杂的 DenseNet 架构来进一步利用特征重用,同时避免网络上采样路径的特征爆炸

全卷积密度网络

fcn 由下采样路径、上采样路径和跳过连接构成。通过重用要素地图,跳过连接有助于上采样路径从下采样路径恢复空间详细信息。我们的模型的目标是通过扩展更复杂的 DenseNet 架构来进一步利用功能重用,同时避免网络的上采样路径中的功能爆炸。

在我们的全卷积 DenseNet (FC-DenseNet)的下采样路径中。合并操作后,每个要素地图空间分辨率的降低会补偿要素数量的线性增长。下采样路径的最后一层被称为瓶颈。

为了恢复输入空间分辨率,FCNs 引入了由卷积、上采样操作(转置卷积或非卷积操作)和跳过连接组成的上采样路径。在 FC-DenseNets 中,我们用密集块和称为向上过渡的向上采样操作来代替卷积操作。向上过渡模块由转置卷积组成,该卷积对先前的特征图进行向上采样。然后,上采样的特征映射被连接到来自跳过连接的特征映射,以形成新的密集块的输入。由于上采样路径提高了特征地图的空间分辨率,因此特征数量的线性增长会对内存要求过高,尤其是对于 softmax 之前图层中的全分辨率特征。为了克服这个限制,密集块的输入不与其输出连接。因此,转置卷积仅应用于由最后一个密集块获得的特征图,而不是到目前为止连接的所有特征图。最后一个密集块以相同的分辨率总结了所有先前密集块中包含的信息。请注意,在向下转换时,由于池化操作,来自早期密集块的一些信息会丢失。然而,该信息在网络的下采样路径中是可用的,并且可以通过跳跃连接来传递。因此,使用给定分辨率下的所有可用特征图来计算上采样路径的密集块

语义分割架构

首先,在表 1 中,我们定义了该架构的密集块层、向下转换和向上转换。密集块层由 BN 组成,后面是 ReLU,一个 3 × 3 相同的卷积(无分辨率损失)和概率 p = 0.2 的 dropout。该层的生长率被设置为 k = 16。Transition down 由 BN、ReLU(1×1 卷积)、p = 0.2 的 dropout 和大小为 2 × 2 的非重叠最大池组成。向上转换由步长为 2 的 3 × 3 转置卷积组成,以补偿合并操作。

其次,在表 2 中,我们总结了所有 Dense103 层。这种架构由 103 个卷积层构成:第一层在输入端,38 层在下采样路径中,15 层在瓶颈处,38 层在上采样路径中。我们使用 5 个向下转换(TD ),每个包含一个额外卷积,以及 5 个向上转换(TU ),每个包含一个转置卷积。网络的最后一层是 1 × 1 卷积,之后是 softmax 非线性,以提供每个像素的每类分布。值得注意的是,如第 3.2 小节所述,所提出的上采样路径适当地缓解了 DenseNet 特征地图爆炸,导致合理的前 softmax 特征地图数量为 256。最后,通过最小化逐像素交叉熵损失来训练模型。

在本文中,我们扩展了 DenseNets 并使其完全卷积,以解决语义图像分割问题。DenseNets 背后的主要思想是在执行特征映射的迭代连接的密集块中捕获的。我们设计了一个上采样路径来缓解 DenseNets 的简单扩展中出现的特征图的线性增长。最终的网络非常深(从 56 层到 103 层),参数非常少,大约是最先进模型的 10 倍。此外,它提高了具有挑战性的城市场景理解数据集(CamVid 和 Gatech)的最新性能,既没有额外的后处理、预训练,也没有包括时态信息。

用于光流的 DenseNet:

FlowNetS 是一种传统的 CNN 架构,由收缩部分和扩展部分组成。给定相邻帧作为输入,收缩部分使用一系列卷积层来提取高级语义特征,而扩展部分试图通过连续的去卷积来预测原始图像分辨率下的光流。在这两者之间,它使用跳过连接[8]来提供来自较低层特征地图的精细图像细节。这种通用的管道、收缩、扩展、跳过连接被广泛用于每像素预测问题,例如语义分割[9]、深度估计[10]、视频着色[11]等。

然而,跳过连接是组合粗糙语义特征和精细图像细节的简单策略;他们不参与学习过程。我们所期望的是保持高频图像细节直到网络的末端,以便提供隐含的深度监督。简而言之,我们希望确保网络中各层之间的最大信息流。

DenseNet [12]是最近提出的 CNN 架构,它有一个有趣的连接模式:在一个密集的块中,每一层都与所有其他层相连。在这种情况下,所有图层都可以从其之前的图层访问要素地图,这有助于大量的要素重用。直接的结果是,模型更加紧凑,不容易过度拟合。此外,每个单独的层通过捷径路径接收来自损失函数的直接监督,这提供了隐含的深度监督。所有这些良好的特性使得 DenseNet 非常适合每像素预测问题。有一项并行工作使用 DenseNet 进行语义分割[9],它无需预训练或额外的后处理即可实现最先进的性能。然而,估计光流不同于语义分割。我们将在第 3 节说明不同之处。在本文中,我们提出使用 DenseNet 进行光流预测。我们的贡献是双重的。首先,我们将当前的 DenseNet 扩展到完全卷积网络。我们的模型是完全无监督的,并且实现了接近监督方法的性能。第二,我们根据经验表明,在扩展部分用密集块替换卷积会产生更好的性能。

**无监督运动估计:**监督方法采用 CNN 的合成数据集来学习光流预测。然而,合成的运动/场景与真实世界的运动/场景非常不同,因此限制了学习模型的可推广性。此外,即使构建合成数据集也需要大量的人工工作[3]。因此,无监督学习是自然病态运动估计问题的理想选择。回想一下,无监督方法[6]将光流估计视为图像重建问题。直觉是,如果我们可以使用预测的流量和下一帧来重建前一帧,我们的网络正在学习关于潜在运动的有用表示。具体来说,我们将重构的前一帧表示为 I 0 1。

目标是最小化前一帧 I1 和反向扭曲的下一帧 I 0 1 之间的光度误差: