TowardsDataScience 博客中文翻译 2020(九百六十)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

想象 2020 年的篮球投篮——(大)基础。

原文:https://towardsdatascience.com/visualising-basketball-shots-in-2020-the-big-fundamentals-c48c15fa3df8?source=collection_archive---------26-----------------------

使用数据可视化来理解现代篮球中投篮的来源和原因——使用简单的图形。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在这个博客上,我写了很多主题的数据可视化,以及如何创建这些可视化。

话虽如此,我写的关于使用视觉化的主要话题是篮球。我喜欢看篮球,并开始研究数据,以更好地了解哪些因素让某些球员变得优秀,哪些因素让他们变得糟糕,以及一名球员如何影响队友或对手。然后我研究了数据可视化,因为它帮助我看到数据。

鉴于没有游戏在进行(而且暂时也不会),让我们退后一点。这篇文章从总体上谈论了联盟,以及我期望在分析中使用的基本概念。我们将使用全联盟的数据来做这件事,希望这能给我们一些共同的立足点,进行有质量的讨论。

说了这么多,让我们从头开始——从照片图表开始。

映射镜头

篮球是一项流畅、动态的运动。球从一边飞到另一边,从一端飞到另一端,球员们不停地在球场上跑来跑去,经常造成身体和四肢在球周围移动的模糊不清。

所有这些都是为了一个目标——投篮,把球投进篮筐(或者阻止对手这样做)。

几年前,一些非常聪明的人,如柯克·戈德贝里开始通过地理来看待篮球,以及它的投篮来自哪里。一种用于可视化篮球投篮的技术被称为 hexbin 图。

它允许法院被划分成小的、大小相等的六边形,并映射每个六边形的平均属性。下面,我根据每个区域的射击频率(统计学术语中的频率)来给这些六边形着色。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Hexbin 图表,显示拍摄频率

该图捕捉了 2018-2019 NBA 赛季期间拍摄的所有 22 万张左右的照片。投篮明显集中在限制圈内的近距离,三分线外。用离篮筐的距离来绘制投篮频率(整体)也说明了类似的问题。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

大多数照片是在 4 英尺范围内拍摄的(在限制圈内),或者超过 23 英尺范围。乍一看,这是一个奇怪的分布,因为你可能会认为拍摄频率随着距离线性下降。然而,调查每个区域的拍摄值会告诉我们答案。

射击精度和价值

为了理解为什么 NBA 球员如此多的远距离投篮,我们需要了解两个关键因素,即准确性和投篮价值。很明显,随着我们远离篮筐,投篮会变得越来越不准确。(如果你不确定,去外面试着投一些 25 英尺的球,然后试着投几个 5 英尺的球,然后回来。我会等的。)

在这个范围内,射击精度会降低多少?好吧,看一看:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

值得注意的是,NBA 球员的平均投篮命中率在 4 英尺到 21 英尺的范围内几乎没有移动,甚至这些天在 28-29 英尺之间的投篮命中率平均为 33.9%。相比之下,5-6 英尺范围内的投篮命中率为 38.3%。

这显然是一个平均值。它受到许多因素的影响,包括谁在投篮,防守在做什么。这张图表并不是说从 5-6 英尺的距离投篮和从 24-25 英尺的距离投篮一样困难,后者的准确率是 37.6%。较好的射手比差的射手更经常从远处投篮。但是很明显,这一比例已经达到了 50%左右的平衡。

然而,虽然每一次击球都是以彼此相似的精度进行的,但从 24-25 英尺的击球比从 5-6 英尺的击球得分多 50%。这是现代 NBA 的关键。

用什么方法来衡量这个奖励系统的效果?答案是预期(或平均)投篮值。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

该图显示了每次发射的(统计)值;换句话说,一次投篮平均会产生多少分的*。来自额外点的附加值用橙色显示,而且是巨大的,如这张图表所示。*

由于每次投篮都有额外的分数,从 24-25 英尺的距离投篮和从 2-3 英尺的距离投篮几乎一样有益。与短镜头相比,长镜头的另一个优势是空间。在篮球场上,距离篮筐 24-25 英尺的空间比距离篮筐 2-3 英尺的空间大得多。看看这个:**

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

对手需要覆盖更大的区域来覆盖 24-25 英尺的射门(橙色),而不是 2-3 英尺的射门(蓝色)。此外,必须覆盖这么多地面和这么远意味着在地板上的其他地方创造了更多的空间。内外博弈是共生互补的,善于一方为另一方开拓机会。

按距离划分的总拍摄频率

回到统计数据,NBA 总投篮次数按距离的分布如下图。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

几乎三分之一(31%)的投篮来自 4 英尺以内,4 到 22 英尺之间也差不多,其余的来自三分线以外。

这也有助于我们将法庭分成几个不同的区域。还记得上面的 hexbin 图吗,把地板分成微小的六边形?我们可以将其中一些组合在一起,这样我们就可以按区域查看统计数据。这也是有价值的,因为它允许我们从非常小的样本量中平滑统计数据。(说一个球员在离篮筐 25 英尺的一个位置上有 4/10 的命中率,而在邻近的一个位置上有 6/10 的命中率是没有多大价值的——这可能只是随机的,而不是说那个球员在第二个位置上是一个更好的射手。)

各个击破

现在,我们有足够的信息和直觉将 NBA 球场分成区域。对于不叫库里或 T2 的普通人来说,任何超过 32 英尺的东西都是绝望的发泄,所以我们将 32 英尺以上的人归为一个大区域。从那里开始,三分球分为角球,正常三分球和长三分球。中距离分为 3 组距离,留在篮筐周围投篮,把禁区直径内的一切都分组。

此外,我们将根据角度进一步划分大多数球场——左边、中间或右边。生成的区域绘制如下,每个区域用不同的颜色表示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

NBA 区域球场

在某些情况下,我们可能会将六边形数据与区域数据结合起来,保持六边形频率,同时通过使用区域数据来平滑投篮命中率。

这是很多相对抽象的讨论——这种分区实际上是如何工作的?我们将用一些实际例子来结束这篇文章。

罪犯

在 2018-2019 常规赛中,勇士队的 FG%和积分/100 控球率最好,尼克斯队在这两个类别中都最差。让我们比较一下这两种犯罪。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

GSW(左)和 NYK(右)拍摄图表

勇士的投篮图在左边,尼克斯在右边。每个六边形的大小表示该队从那个特定的点*(六边形)投篮的频率,颜色来自划分的整个(上面的彩色区域)的平均投篮百分比。*

这创造了一个很好的视觉效果,我们可以看到照片的具体位置,而不会被小样本可能导致的百分比大幅波动所淹没。

这些剧情让我们很容易的对两队进行评价。勇士队显然在任何地方都更好,从右边看非常强大(从球员的角度看是右边,所以在我们的图像中是左边)。

如果我挑毛病的话,这个情节的问题可能是很难看出这些颜色的相对差异,我们不知道它们与联盟平均水平相比如何(看起来像这样)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

整个 NBA 的投篮排行榜

让我们来看一下相关的统计数据,用蓝色标记比平均水平差的区域,用红色标记比平均水平好的区域。).

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

整个 NBA 的投篮排行榜

我们通过允许我们观察两个方向(消极和积极),以及观察相对较小的数字,从本质上扩大了范围。勇士几乎在所有领域都优于联盟平均水平,右侧投篮简直就是绝对的血洗。与此同时,在右边,倒霉的尼克斯队在冰冷的蓝色海洋上打着冰桩。

这样看起来会好多少?

好吧。我希望那是有趣的。如果你是一名程序员,并且想了解更多关于我如何编写这些代码的信息,请点击这里查看我之前的文章:

* [## 用 Plotly 实现交互式篮球数据可视化

用 hexbin shot 图表分析体育数据,用 Plotly 和 Plotly Express 分析气泡图(源代码&我自己的数据…

towardsdatascience.com](/interactive-basketball-data-visualizations-with-plotly-8c6916aaa59e)

如果你喜欢这个,比如说👋/关注 twitter ,或点击此处获取更新。下次见!*

用 Python-igraph 可视化图形数据

原文:https://towardsdatascience.com/visualising-graph-data-with-python-igraph-b3cc81a495cf?source=collection_archive---------8-----------------------

使用 CiteSeer 数据集介绍 python-igraph

图形学习和可视化

图形学习技术在数据科学家中变得流行,因为图形提供了更多的工具来表示数据点及其相互之间的关系。数据点可以用顶点来表示,这些数据点之间的关系可以用图形的边来表示。这样的数据点,以图表的形式,可以被馈送到各种算法(例如:神经网络)中,以执行不同的学习任务(例如:分类和聚类)。

数据集可能包含一堆数据点,乍看之下,我们可能无法从这些原始数据中找到任何意义。通过将这些数据点可视化为图表,我们可以很容易地找到数据集中的模式、聚类甚至异常值。图形结构可以为我们的学习过程提供有价值的信息,例如数据点和相关统计数据之间的连接/关系的性质。在这篇文章中,我将向你展示如何可视化 CiteSeer 数据集的标签网络,并尝试看看我们是否能从可视化中看到任何模式。

igraph 和 python-igraph

igraph 由一套工具组成,可以用来高效地分析网络。igraph 是免费的,可用于 Python、R、C/C++和 Mathematica。在本文中,我们将使用 Python 版本, python-igraph 。你可以参考 python-igraph 手册了解更多细节。

入门指南

安装 python-igraph

首先,如果您还没有安装 python-igraph,那么您需要安装它。您可以使用 pip 。你还需要安装cairo CFI来绘制图表。

pip install python-igraph
pip install cairocffi

如果您使用的是 Python 包管理器,如 Anaconda 或 Miniconda,您可以使用 conda install 命令安装 python-igraph。

conda install python-igraph
conda install cairocffi

CiteSeer 数据集

CiteSeer 数据集由科学出版物及其引文组成。顶点代表科学出版物,边代表引文。科学出版物被分为六个类别之一;代理、人工智能、数据库、人机交互、机器学习和信息检索

首先,你必须从http://networkrepository.com/citeseer.php下载带标签的数据集。你会有两个文件 citeseer.edgesciteseer.node_labelsciteseer.edges 文件会有边缘的形式

vertex_1, vertex_2, weight

citeseer.node_labels 文件会有每个顶点的标签,以

vertex_id, class_label

将图表形象化

我们将使用 CiteSeer 数据集构建一个无向图。一旦构建了图表,您就可以如图 1 所示对其进行可视化。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图一。CiteSeer 网络的无标号图的可视化

现在,您可以获得标签并可视化标签图,如图 2 所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图二。CiteSeer 网络标记图的可视化

分析图表

您可以观察到,有些小的子图具有相同的颜色(标签),而某些子图的顶点具有不同的颜色(标签)。

通过分析该图获得的一些统计信息如下。

Number of vertices: 3264
Number of edges: 4536
Density of the graph: 0.000851796434172811Average degree: 2.7794117647058822
Maximum degree: 99
Vertex ID with the maximum degree: 2906Average number of triangles: 1.0716911764705883
Maximum number of triangles: 85
Vertex ID with the maximum number of triangles: 2906Degree having the maximum number of vertices: 1
Number of vertices having the most abundant degree: 1321Diameter of the graph: 28Assortativity of the graph: 0.04806382149471062

从这些结果可以看出,这是一个稀疏图,其中边的数量远远小于可能的边的最大数量(密度较小)。而且每篇文章平均至少参与两次引用(平均程度)。每一个物品至少参与一个与另外两个物品的三角连接。

大多数文章参与一次引用,有 1321 篇这样的文章(学位分布分析如图 3 所示)。此外,图的顶点具有与具有相同度数的其他顶点连接的较小趋势(较小的协调性)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图三。CiteSeer 图中顶点的度分布

同样,您可以分析图形结构并找到其他模式。

密码

我已经在 Jupyter 笔记本上添加了我使用的代码,所以你可以自己尝试一下。

最后的想法

目前,图学习已经成为分析数据和预测模式的有力手段。目前可用的技术可以将图的每个节点嵌入到具有特征的真实向量中。此外,图形神经网络已经被引入,它是可以在图形结构上操作的特殊神经网络。我发现这些图形学习技术真的令人惊讶。

您可以从 GraphViz 查看 CiteSeer 数据集的详细可视化。

如果你想阅读更多关于可视化大型图表的内容,可以看看这篇很棒的文章。

希望你喜欢我的文章,并将尝试代码。让我知道你的想法,如果我有任何错误,也请纠正我。

干杯!😃

参考

[1]鲁青,丽丝·格托尔。基于链接的分类ICML 03:第二十届机器学习国际会议论文集。2003 年 8 月。第 496-503 页。

[2]瑞安·罗西和内斯林·艾哈迈德。第二十九届 AAAI 人工智能会议的记录中的具有交互式图形分析和可视化的网络数据仓库。2015.

[3]citeseer-labered Networks |网络数据仓库(http://networkrepository.com/citeseer.php)

[4] GraphVis —交互式可视图形挖掘和机器学习|网络数据仓库(http://networkrepository.com/graphvis.php?d=。/data/GSM 50/labered/citeseer . edges

在 Keras 中可视化 LSTM 激活

原文:https://towardsdatascience.com/visualising-lstm-activations-in-keras-b50206da96ff?source=collection_archive---------7-----------------------

看看每个 LSTM 细胞学到了什么

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

弗兰基·查马基在 Unsplash 上拍摄的照片

你有没有想过 LSTM 层学到了什么?有没有想过是否有可能看到每个细胞对最终输出的贡献。我很想尝试想象一下。在满足我好奇的神经元时,我偶然发现了安德烈·卡帕西的博客,名为循环神经网络的不合理有效性。如果你想得到更深入的解释,我建议你去看看他的博客。

在本文中,我们不仅要在 Keras 中构建一个文本生成模型,还要可视化一些单元格在生成文本时所看到的内容。与 CNN 的情况一样,它学习图像的一般特征,如水平和垂直边缘、线条、补丁等。类似地,在文本生成中,LSTMs 学习诸如空格、大写字母、标点符号等特征。我们将会看到 LSTM 层中的每个细胞正在学习什么特征。

我们将使用刘易斯·卡罗尔的《爱丽丝漫游奇境记》这本书作为训练数据。该模型架构将是一个简单的架构,由两块 LSTM脱落层以及最后的密集层组成。

您可以在此下载训练数据和训练模型权重

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这是我们激活单细胞的样子。我希望你能辨认出上图中的图案。如果不能,你会在文末找到。

让我们深入研究代码。

步骤 1:导入所需的库

注意:我用 CuDNNLSTM 代替了 LSTM,因为它训练速度快 15 倍。CuDNNLSTM 由 CuDNN 支持,只能在 GPU 上运行。

第二步:读取训练数据并进行预处理

我们将使用正则表达式删除一个以上的空格。char_to_intint_to_char只是数字到字符和字符到数字的映射。

步骤 3:为培训准备数据

重要的是准备好我们的数据,使每个输入都是一个字符序列,输出是后面的字符。

步骤 4:构建模型架构

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

第五步:训练模型

我无法一次训练我的模型 300 个纪元,因为我使用了 Google Colab 来训练我的模型。我必须在 3 天内训练它,每天 100 个周期,方法是保存重量,然后从我结束训练的同一点重新加载。

如果你有一个强大的 GPU,你可以一口气训练 300 个纪元的模型。如果你没有,我会建议你使用 Colab,因为它是免费的。

您可以使用下面的代码加载模型,并从最后一点开始训练。

现在是文章最重要的部分——可视化 LSTM 激活。我们需要一些函数来让这些可视化变得可以理解。让我们开始吧。

步骤 6:获取中间层输出的后端函数

正如我们在上面的步骤 4 中看到的,第一层和第三层是 LSTM 层。我们的目标是可视化第二 LSTM 层的输出,即整个架构中的第三层。

Keras Backend 帮助我们创建一个函数,它接收输入,并从中间层向我们提供输出。我们可以用它来创建我们自己的管道函数。这里attn_func将返回一个大小为 512 的隐藏状态向量。这些将是 512 个单位的 LSTM 层的激活。我们可以想象这些细胞的每一次激活,以理解它们试图解释什么。要做到这一点,我们必须将它转换成一个可以表示其重要性的范围。

步骤 7:助手功能

这些辅助函数将帮助我们可视化字符序列及其每个激活值。我们通过sigmoid函数传递激活,因为我们需要一个可以表示它们对整个输出的重要性的值。get_clr功能有助于为给定值获得合适的颜色。

下图显示了每个值是如何用各自的颜色表示的。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

从 0 到 1 的激活颜色级别

第八步:获得预测

get_predictions函数随机选择一个输入种子序列,并获得该种子序列的预测序列。visualize函数将预测序列、序列中每个字符的 sigmoid 值以及要可视化的单元格编号作为输入。根据输出的值,用适当的背景颜色打印字符。

对层输出应用 sigmoid 后,值在 0 到 1 的范围内。数字越接近 1,重要性越高。如果该数字更接近 0,则意味着对最终预测没有任何重大影响。这些单元格的重要性由颜色表示,其中蓝色表示较低的重要性,红色表示较高的重要性。

步骤 9:可视化激活

超过 90%的细胞没有显示任何可理解的模式。我手动可视化了所有的 512 个细胞,注意到其中的三个(189,435,463)显示了一些可以理解的模式。

正如您在下面看到的,189 号单元格是为引号内的文本激活的。这表明预测时单元格在寻找什么。如下所示,该单元格对引号之间的文本贡献很大。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

435 号单元格是为引号中的句子后的几个单词激活的。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

每个单词的第一个字符激活单元号 463。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

通过更多的训练或更多的数据,可以进一步改善结果。这恰恰证明了一点,深度学习毕竟不是一个完全的黑箱。

你可以在我的 Github 简介上查看全部代码。

这是我第一次尝试写博客。我希望你能从中学到一些东西。

可视化 100 本吴唐家族相册

原文:https://towardsdatascience.com/visualising-the-albums-of-wu-tang-clan-246ea75efdac?source=collection_archive---------21-----------------------

深入挖掘吴唐家族及其核心成员的著述。

吴唐家族有一个几乎无与伦比的大字典。他们录制了 100 张录音室专辑。这还不包括该组合大约 90 张附属专辑的混音带或专辑。

但是考虑到这个组合经久不衰的人气,很难找到关于这个组合音乐的详细信息——所以我决定做点什么。

这篇文章的灵感来自于听我最喜欢的一张专辑,格斯特菲斯·基尔拉的《至尊顾客》。这张专辑基本上是一张非官方的武堂专辑,收录了武堂 10 位成员中的 9 位。唯一缺席的是《肮脏的混蛋》,他在专辑录制的大部分时间里都被监禁着。

我开始思考其他非官方的武堂专辑。GZA 的“液体剑”跃入脑海。我猜有更多,但快速谷歌搜索什么也没找到。维基百科丢失了详细信息。对十年前的论坛帖子的调查发现没有更多的东西。不久,我就开始搜索迪斯科舞厅,并建立自己的吴唐家族数据库。

一开始试图找出拥有最多吴唐成员的吴唐家族相册的事情越滚越大。我开始对专辑的时间线和乐队的排行榜表现感到好奇。这是首次对吴唐家谱进行深入分析。

武堂成员最多的专辑

这张图显示了 100 张专辑,按照这些专辑中的武堂成员数量进行排名。

吴唐家族已经制作了 9 张录音室专辑。该组合的 10 名成员已经制作了 91 张个人专辑,或者作为个人艺术家,或者作为组合的一部分。团体项目包括 Inspectah Deck 的 Czarface、马索·曼恩和莱德曼的专辑以及 RZA 的 Gravediggaz。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

吴唐 1991 年以来的专辑

这张图表显示了每年发布的吴唐家族专辑的数量,以及有多少张专辑进入了公告牌前 200 名。

2019 年是自 1993 年以来,公告牌 200 强中首次没有吴唐家族相关专辑。尽管 2019 年有 6 张武堂相关专辑下跌,包括 Inspectah Deck 的 4 张专辑。首张与吴唐帮有关的专辑是 GZA 1991 年的专辑《天才的话》,比第一首吴唐帮单曲提前两年发行。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

最多产的武堂成员

这张图显示了最多产的吴唐成员。图表由作为个人艺术家的专辑、在吴唐专辑中的出现以及在其他成员的个人项目中的出现来分割。特色亮相包括作为说唱歌手或制作人的亮相。

RZA 参与了 100 个吴唐项目中的一半以上,总共出场 54 次。他出现在吴唐的每一张专辑,14 张他自己的个人专辑中,并在 31 张个人专辑中以制作人或说唱歌手的身份出现。Ghostface 拥有最多的个人专辑,有 19 张。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

谁的点击率最高?

这张图显示了武堂帮的专辑在 Billboard Top 200 排行榜上的表现。这是由专辑达到前 10 名,前 40 名和前 200 名。

吴唐帮只进过两次前十。然而,他们凭借《永远的武堂》获得了公告牌排行榜第一名——这是没有武堂成员独自取得的成就。

许多武堂成员的单曲销量超过了组合的销量。马索·曼恩有 6 张专辑进入前 10 名。格斯特菲斯·基尔拉的专辑在排行榜上最多,有 14 张专辑进入前 200 名。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

谁失手最多?

这张图表显示了没有进入排行榜前 200 名的武堂相关专辑的数量。

Cappadonna 和 Inspectah Deck 错过了最多的 8 张非图表专辑。Inspectah Deck 的大部分失手是地下嘻哈团体 Czarface 的成员。有些专辑对不制作图表有很好的解释。《肮脏的混蛋》的遗作专辑《独一无二的儿子》没有正式发行。武堂帮的《少林往事》只有一本。这张专辑被 Martin Shkreli 以 200 万美元购得,在 Skhreli 被判证券欺诈罪后,现在属于美国联邦政府。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

交互式列表

你可以进入下面的吴唐帮专辑互动列表。

方法学

专辑的数据是从 Discogs 中提取的。这些数据被导入 Google Sheets,并使用 VLOOKUP 功能进行分析,以比较艺术家在各种专辑中的角色。Google Sheets 还被用来分析每位艺人发行的唱片数量。图表表现的数据取自 Billboard。

图形首先在 Google Data Studio 中可视化,然后在 Sketch 中进一步发展。

使用主成分分析可视化数据的分类能力

原文:https://towardsdatascience.com/visualising-the-classification-power-of-data-54f5273f640?source=collection_archive---------14-----------------------

使用主成分分析来研究数据如何区分类(使用 Python 代码)

文章概述

主成分分析(PCA)是数据科学家使用的一个很好的工具。它可以用来降低特征空间的维数,产生不相关的特征。正如我们将看到的,它还可以帮助您深入了解数据的分类能力。我们将带您详细了解如何以这种方式使用 PCA。提供了 Python 代码片段,完整的项目可以在 GitHub 上找到。

什么是 PCA?

我们将从复习理论开始。如果你想了解 PCA 是如何工作的【1】【2】,我们不会进入太多细节,因为有大量的资源。重要的是要知道 PCA 是一种降维算法。这意味着它用于减少用于训练模型的特征数量。这是通过从许多特征中构造主成分(PC)来实现的。

PCs 的构造使得第一台 PC(即 PC1)尽可能解释您的功能中的大多数变化。然后 PC2 尽可能解释剩余变异中的大部分变异等等。PC1 和 PC2 通常可以解释总特征变化的很大一部分。另一种思考方式是,前两台电脑可以很好地总结这些特性。这是很重要的,因为它允许我们在二维平面上可视化数据的分类能力。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

来源 1: flaticon |来源 2: flaticon |来源 3: flaticon

资料组

好的,让我们来看一个实际的例子。我们将使用 PCA 来探索一个乳腺癌数据集【3】,我们使用下面的代码导入该数据集。目标变量是乳腺癌测试的结果——恶性或良性。每次测试,都要采集许多癌细胞。然后对每个癌细胞进行 10 种不同的测量。这些指标包括像像细胞半径和细胞对称性。为了得到 30 个特性的最终列表,我们以 3 种方式汇总这些度量。也就是说,我们计算每个测量的平均值、标准误差和最大(“最差”)值。在图 1 中,我们仔细观察了其中的两个特征——细胞的平均对称性最差平滑度

在图 1 中,我们看到这两个特性有助于区分这两个类。也就是说,良性肿瘤往往更加对称和光滑。仍然有很多重叠,所以只使用这些特征的模型不会做得很好。我们可以创建这样的图来了解每个特征的预测能力。虽然,有 30 个特征,会有相当多的图需要分析。它们也没有告诉我们数据集作为一个整体的预测性如何。这就是 PCA 的用武之地。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 1:使用两个特征的散点图(来源:作者)

PCA 整个数据集

让我们从对整个数据集进行 PCA 开始。我们使用下面的代码来做到这一点。我们从缩放特征开始,因此它们都具有 0 的平均值和 1 的方差。这一点很重要,因为 PCA 通过最大化 PCs 解释的方差来工作。由于其规模的原因,一些要素往往会有较高的方差。例如,以厘米为单位测量的距离比以千米为单位测量的距离具有更高的方差。没有缩放,PCA 将被那些具有高方差的特征“压倒”。

缩放完成后,我们将拟合 PCA 模型,并将我们的特征转换到 PCs 中。由于我们有 30 个功能,我们可以有多达 30 台电脑。对于我们的观想,我们只对前两个感兴趣。您可以在图 2 中看到这一点,其中使用了 PC1 和 PC2 来创建散点图。我们现在可以看到两个不同的集群,它们比图 1 中的更清晰。

此图可用于为数据的预测力度建立直觉。在这种情况下,它表明使用整个数据集将允许我们分离恶性和良性肿瘤。然而,仍然存在一些异常值(即,不清楚地在聚类中的点)。这并不意味着我们会对这些情况做出不正确的预测。我们应该记住,不是所有的特性差异都在前两个 PC 中被捕获。基于完整特征集训练的模型可以产生更好的预测。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2:使用所有特征的 PCA 散点图(来源:作者)

在这一点上,我们应该提到这种方法的警告。PC1 和 PC2 可以解释要素中很大一部分差异。然而,事实并非总是如此。在某些情况下,个人电脑可以被认为是你的功能不良总结。这意味着,即使您的数据能够很好地将类分开,您也可能无法获得清晰的聚类,如图 2 所示。

我们可以使用 PCA scree 图来确定这是否是一个问题。我们使用下面的代码为这个分析创建了 scree 图,如图 3 所示。这是一个条形图,其中每个条形的高度是由相关 PC 解释的差异百分比。我们看到,PC1 和 PC2 总共只能解释大约 20%的特征差异。即使只有 20%得到解释,我们仍然得到两个不同的集群。这强调了数据的预测能力。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 3:碎石地块(来源:作者)

PCA —特征组

我们也可以用这个过程来比较不同组的特征。例如,假设我们有两组特征。组 1 具有基于单元对称性和平滑度特征的所有特征。然而,组 2 具有基于周长和凹度的所有特征。我们可以使用 PCA 来获得关于哪一组对于进行预测更有用的直觉。

我们首先创建两组特征。然后,我们分别对每个组进行主成分分析。这将为我们提供两组 PC,我们选择 PC1 和 PC2 来代表每组功能。这个过程的结果可以在图 4 中看到。

对于组 1,我们可以看到有一些分离,但仍有许多重叠。相反,对于组 2,有两个不同的集群。因此,从这些图中,我们可以预期第 2 组中的特征是更好的预测器。使用组 2 特征训练的模型应该比使用组 1 特征训练的模型具有更高的准确度。现在,让我们来检验这个假设。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4:使用特征组的 PCA 散点图(来源:作者)

我们使用下面的代码来训练使用这两组特征的逻辑回归模型。在每种情况下,我们使用 70%的数据来训练模型,剩余的 30%用于测试模型。组 1 的测试集的准确率为 74%,相比之下,组 2 的准确率为 97%。因此,第 2 组中的特征是更好的预测器,这是我们从 PCA 结果中预期的。

最后,我们将看到在开始建模之前,如何使用 PCA 来更深入地了解您的数据。这将使您了解预期的分类精度。您还将围绕哪些特征具有预测性建立直觉。在选择功能时,这可以给你带来优势。

如前所述,这种方法并不是完全可靠的。它应该与其他数据勘探图和汇总统计一起使用。对于分类问题,这些可能包括信息值和箱线图。一般来说,在开始建模之前,从尽可能多的不同角度查看数据是一个好主意。下面是另外两个你可能会感兴趣的观想教程。

[## 发现并可视化非线性关系

用部分相关图(PDP)、互信息和特征重要性分析非线性关系

towardsdatascience.com](/finding-and-visualising-non-linear-relationships-4ecd63a43e7e) [## 发现和可视化交互

使用特征重要性、弗里德曼的 H-统计量和 ICE 图分析相互作用

towardsdatascience.com](/finding-and-visualising-interactions-14d54a69da7c)

我希望这篇文章对你有帮助!如果你想看更多,你可以成为我的 推荐会员 来支持我。你可以访问 medium 上的所有文章,我可以得到你的部分费用。

[## 通过我的推荐链接加入 Medium 康纳·奥沙利文

作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…

conorosullyds.medium.com](https://conorosullyds.medium.com/membership)

图像来源

所有图片都是我自己的或从www.flaticon.com获得。在后者的情况下,我拥有他们的保费计划中定义的“完全许可”。

参考

[1] Matt Brems ,主成分分析一站式商店(2017),https://towardsdatascience . com/A-一站式主成分分析商店-5582fb7e0a9c

[2] L. Pachter 什么是主成分分析?(2014),https://liorpachter . WordPress . com/2014/05/26/what-is-principal-component-analysis/

[3] UCI,乳腺癌威斯康星州(诊断)数据集(2020 年),http://archive . ics . UCI . edu/ml/datasets/Breast+Cancer+Wisconsin+(诊断)

使用 ETE 工具包可视化树数据

原文:https://towardsdatascience.com/visualising-tree-data-with-ete-toolkit-bceb1ed12776?source=collection_archive---------52-----------------------

交给我来帮你拓展业务

这个世界很复杂。事物以各种不同的方式联系在一起——有些关系是直观的,有些不是。因此,我们收集并用来描述世界的数据有各种各样的形状和大小。

此外,数据可视化是数据分析过程中最重要的方面之一。良好的可视化对于帮助客户和利益相关者理解数据至关重要。

结合起来,这两点意味着处理数据的人需要准备好用最好地说明数据点之间的关系对行动可能意味着什么的方式来表示数据。今天,我们来看一个这样的表示和一个你可以用来创建它的工具。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Todd Quackenbush 在 Unsplash 上拍照

作为数据结构的树

工作中,最近接触到了是一种表示一组分层数据的方式。树中实例之间的关系很容易理解,这要归功于与我们都熟悉的植物学树的类比。当我们谈论数据结构而不是多年生植物时,根、叶和分支的概念转移得很好。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

树和层次结构无处不在——常见的现实世界的例子是公司结构和进化树。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如您所见,为一组给定的层次链接数据绘制一个树相对容易。但是,当您拥有大量数据,或者您的数据在不断发展时,该怎么办呢?手动重新绘制整个过程既费时又费力…

ETE 工具包

…这就是 ETE 工具包的用武之地。这是一个用于分析和可视化树木的 Python 库。它最初是由西班牙巴伦西亚 Principe Felipe 研究中心的生物信息学部门开发的,因此它能够进行各种科学分析。这也是自动化任何树数据结构可视化的一种便捷方式,我将在这里描述它的基础。查看 ETE 工具包的图库以了解该软件包的一些更高级的特性。

可视化客户转介系统

让我们以客户推荐系统为例。您可能很熟悉这种工作方式——购买产品的客户会获得一个唯一的代码,他们可以与朋友分享该代码。如果他们的一个朋友决定也购买该产品,并在购买时引用这个独特的代码,双方都会获得奖励。这是一个双赢的场景——销售产品的公司能够通过激励他们传播信息,鼓励更多的人成为客户,将客户的利益与自己的利益结合起来——当然,客户自己也享受到了折扣。

假设每个客户最多可以推荐 5 个人。也就是说,我们目前有此数据的表格表示,如下所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们有大量购买数据,包括:

  • 交易日期;
  • 客户名称;
  • 谁推荐了客户;和
  • 他们花了多少钱。

这些数据形成了一个层次结构——每个客户可以表示为树形图中的一个节点,推荐他们的人在树形图中位于他们之上,而他们继续推荐的人则位于他们之下。我们还可以看到,Alice 是“原始”客户,她启动了这个特定的推荐链,也就是说,Alice 是唯一没有被其他人推荐的客户。这使她成为了的根客户。

考虑到这一点,我们可以手动绘制一个树形图——依次遍历每个客户,找出谁应该在树中与他们相关联,并添加适当的作为*子代,*在他们下面分支。但是,当我们乐意为我们做艰苦的工作时,为什么要这样做呢?

ETE 以 Newick 格式— 接受输入,这是一种在数学和科学中简洁描述树形结构布局的相对标准的方式。这里有几个例子:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

您可能会注意到,一组分支由一对括号表示。给定节点的分支数由括号中的逗号决定。当然,成对的括号可以嵌套起来,产生越来越复杂的结构。

我不打算在 Newick 格式的细节上花太多时间——只要知道我们可以通过将数据转换成这种格式来告诉 ETE 我们想要可视化的内容就足够了。我已经为我们写了一些代码来做到这一点,我不会在这里描述——如果你感兴趣,可以看看 GitHub 上的 Jupyter 笔记本来了解更多信息。

因此,我们的客户数据可以用 Newick 格式编写如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

让我们看看当我们把它输入 ETE 时会得到什么:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

不算太差!目前看起来很基本——但是 ETE 已经将视觉化过程中的许多复杂性去掉了。更重要的是,每当我们得到更新的数据时,我们可以简单地重新运行我们的代码!

ETE 的另一个优点是我们可以很容易地调整树的外观。让我们看看是否可以让它看起来更时髦一点…

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

那更好。我们仍然只是触及了 ETE 工具包的表面,但是作为一个快速的例子,这足以让我们理解一些关键的思想。

结论

人类的大脑喜欢吸取视觉信息。树有一个现成的现实世界的类比,使它们直观且易于理解。这使得它们成为向非专业人士解释数据的一个很好的工具。最后总结一下——大脑有许多天生的优势和弱点。当数据以某种方式呈现给我们时,我们总是更容易消化这些数据,这种方式是这些特性相适应,而不是相反。

更多信息和积分

Andrew Hetherington 是英国伦敦的一名见习精算师和数据爱好者。

  • LinkedIn 上与我联系。
  • 看看我在 GitHub 上鼓捣什么。
  • 用来制作本文情节的笔记本可以在这里找到。

Todd Quackenbush 在 Unsplash 上拍摄的树照片。

ETE 3:系统发育学数据的重建、分析和可视化。

海梅·韦尔塔-塞帕斯、弗朗索瓦·塞拉和皮尔·博克。

Mol Biol Evol 2016doi:10.1093/mol bev/MSW 046

使用 Matplotlib 可视化油井数据覆盖范围

原文:https://towardsdatascience.com/visualising-well-data-coverage-using-matplotlib-f30591c89754?source=collection_archive---------44-----------------------

探索数据在哪里,不在哪里

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

维尔莫斯·海姆在 Unsplash拍摄的照片

探索性数据分析(EDA)是数据科学不可或缺的一部分。岩石物理领域也是如此,通常被称为项目的测井质量控制或数据审查阶段。正是在这个阶段,我们开始详细检查数据,并确定我们真正拥有哪些数据,我们在哪里拥有这些数据,以及收集的数据的质量如何。

我们花了很大一部分时间(在某些情况下高达 90%!— Kohlleffel,2015 年)处理测井数据的时间都花在了试图理解数据并将其转换为适合解释的状态上。剩下的 10%是我们可以着手进行岩石物理解释的时候。这可以根据正在进行的项目的初始状态而变化。

在 QC 阶段,我们经常会发现自己有多个输入文件、随机的曲线名称、缺失的数据和没有直接用途的额外曲线。这可能会导致困惑和沮丧,尤其是在使用多种工具和老式数据集时。在我们有缺失数据的情况下,我们需要识别它并确定处理它的最佳方式。在文本编辑器中查看单个 LAS 文件可能很难做到这一点,但使用软件可以使其变得更容易。其中一种方法是使用 Python,这是一种常见且流行的编程语言。

在这篇短文中,我们将介绍如何可视化 Equinor 在 2018 年发布的 Volve 数据集的 3 个井内的数据覆盖范围。

您可以在 GitHub 上的以下链接中找到本示例的完整 Jupyter 笔记本 9**——我的岩石物理学和 Python 系列的 visualizing Data covere . ipynb**:

[## andymcdgeo/岩石物理学-Python-系列

本系列 Jupyter 笔记本将带您了解使用 Python 和岩石物理数据的各个方面。

github.com](https://github.com/andymcdgeo/Petrophysics-Python-Series/)

加载数据和库

与任何 Python 项目一样,我们需要加载所需的数据和库。对于本文,我们将使用 pandas 和 matplotlib。

import pandas as pd
import matplotlib.pyplot as plt# Load in our data from a CSV file
data = pd.read_csv('Data/VolveWells.csv')
data.head()

这将返回:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

乍一看,我们可以看到我们的数据集中有 12 列。第一列是井,随后是深度曲线,随后是每条测井曲线。

为了识别我们的数据集中有哪些井,我们可以调用data['WELL'].unique(),它将返回一个数组,但是我们可以通过实现一个简短的 for 循环并打印出每个值来获得更好的格式。

for well in data[‘WELL’].unique():
    print(well)

这将返回 3 口井的列表:

  • 9 月 15 日-F-1 C
  • 2004 年 9 月 15 日
  • 2007 年 9 月 15 日

数据准备

为了让我们的绘图像预期的那样工作,我们需要修改数据集的列顺序。这可以通过首先按照我们想要的顺序创建一个列列表来实现。

plot_cols = ['WELL', 'DEPTH', 'CALI', 'BS', 'GR', 'NEU', 'DEN', 'PEF', 'RDEP', 'RMED', 'AC', 'ACS']

然后,我们可以用新的列顺序替换现有的数据帧:

data = data[plot_cols]
data.head()

然后我们可以调用data.head()来查看新的数据帧。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

下一步是创建数据帧的副本。这将允许我们保留原始数据帧,以便在项目的后续工作中使用。

data_nan = data.copy()

为了使绘图按预期显示,我们需要替换数据框中的值。

在有实际值的地方,我们将根据它在数据帧中的位置给它分配一个数字。在我们有一个 NaN(不是数字)值的地方,我们要给它一个数字- 1 的值。这将允许我们在一个数字和另一个数字之间使用阴影,同时为每个井使用一个单独的子图。这使事情变得简单,并且不需要为每个井中的每条曲线创建支线图。

for num, col in enumerate(data_nan.columns[2:]):
    data_nan[col] = data_nan[col].notnull() * (num + 1)
    data_nan[col].replace(0, num, inplace=True)

分解上面这段代码:

  • for num, col in enumerate(data_nan.columns[2:]: 这一行将循环遍历从第 2 列开始的每一列。
    enumerate()允许我们在遍历每一列时创建一个计数器/索引值
  • data_nan[col] = data_nan[col].notnull()*(num+1) 这里我们把实数值转换成布尔值(真或假)。如果为真,则转换为列号加 1。当它为假时,这些值将被设置为 0。
  • data_nan[col].replace(0, num, inplace=True) 我们现在可以用列号替换任何 0 值。

绘制数据

现在我们已经到了策划阶段。为了在单独的子图中绘制每个井,我们必须按照井名对数据帧进行分组:

grouped = data_nan.groupby('WELL')

为了绘制数据,我们可以调用这段简短的代码。我添加了简短的注释来描述每个部分在做什么。

我们使用ax.fillbetweenx()来填充我们之前设置的每条曲线的两个值。例如,CALI 有两个值来指示数据的存在:1 表示有实数值,0 表示有 NaN 值。类似地,GR 有两个值:有实数据时为 3,有 NaN 时为 2。

#Setup the labels we want to display on the x-axis
labels = ['CALI', 'BS', 'GR', 'NEU', 'DEN', 'PEF', 'RDEP', 'RMED', 'AC', 'ACS']#Setup the figure and the subplots
fig, axs = plt.subplots(1, 3, figsize=(20,10))#Loop through each well and column in the grouped dataframe
for (name, df), ax in zip(grouped, axs.flat):
    ax.set_xlim(0,9)

    #Setup the depth range
    ax.set_ylim(5000, 0)

    #Create multiple fill betweens for each curve# This is between
    # the number representing null values and the number representing
    # actual values

    ax.fill_betweenx(df.DEPTH, 0, df.CALI, facecolor='grey')
    ax.fill_betweenx(df.DEPTH, 1, df.BS, facecolor='lightgrey')
    ax.fill_betweenx(df.DEPTH, 2, df.GR, facecolor='mediumseagreen')
    ax.fill_betweenx(df.DEPTH, 3, df.NEU, facecolor='lightblue')
    ax.fill_betweenx(df.DEPTH, 4, df.DEN, facecolor='lightcoral')
    ax.fill_betweenx(df.DEPTH, 5, df.PEF, facecolor='violet')
    ax.fill_betweenx(df.DEPTH, 6, df.RDEP, facecolor='darksalmon')
    ax.fill_betweenx(df.DEPTH, 7, df.RMED, facecolor='wheat')
    ax.fill_betweenx(df.DEPTH, 8, df.AC, facecolor='thistle')
    ax.fill_betweenx(df.DEPTH, 9, df.ACS, facecolor='tan')

    #Setup the grid, axis labels and ticks
    ax.grid(axis='x', alpha=0.5, color='black')
    ax.set_ylabel('DEPTH (m)', fontsize=14, fontweight='bold')

    #Position vertical lines at the boundaries between the bars
    ax.set_xticks([1,2,3,4,5,6,7,8,9,10], minor=False)

    #Position the curve names in the centre of each column
    ax.set_xticks([0.5, 1.5 ,2.5 ,3.5 ,4.5 ,5.5 ,6.5 , 7.5, 8.5, 9.5], minor=True)

    #Setup the x-axis tick labels
    ax.set_xticklabels(labels,  rotation='vertical', minor=True, verticalalignment='bottom')
    ax.set_xticklabels('', minor=False)
    ax.tick_params(axis='x', which='minor', pad=-10)

    #Assign the well name as the title to each subplot
    ax.set_title(name, fontsize=16, fontweight='bold')plt.tight_layout()
plt.subplots_adjust(hspace=0.15, wspace=0.25)
plt.show()

一旦我们运行上面的代码,我们会得到一个 matplotlib 图,其中有 3 个子图。每个包含每口井的数据范围。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

从这个图中我们可以确定:

9 月 15 日——F-1 C

  • 伽马射线和电阻率曲线中的微小间隙。由于间隙出现在两条电阻率曲线的相同位置,我们可以初步假设它们可能与套管鞋有关。需要进一步调查来证实这一点。
  • 核曲线(登、NEU、PEF)和井径仪仅在一小段上运行,可能指示目的层。
  • 无声学曲线(交流和交流)

15/9-F-4

  • 包含所有可用的曲线,大部分在朝向井底的一小部分上。
  • 在伽马射线(GR)和声波剪切(ACS)曲线中有多个间隙。可能与工具有关。进一步的调查会揭示原因。

15/9-F-7

  • 在一个短而浅的剖面上出现的数据量最少。
  • 仅提供钻头尺寸、伽马射线和电阻率测量值。
  • 可能由工具故障或钻井时遇到的问题引起。如果有完井报告,可以通过审查这些报告来确认这些信息。

结论

在这篇短文中,我向您展示了如何从一个 CSV 文件中加载数据,并以一种您可以识别丢失值所在位置的方式来可视化它。在执行岩石物理解释或应用机器学习模型之前,了解哪里有或没有数据是探索数据集的关键步骤

参考

本例中使用的数据:
Equinor。(2018).公开所有 Volve 数据。可在:https://www . equinor . com/en/news/14 jun 2018-discovery-volve-data . html

视觉化和注意力——第一部分

原文:https://towardsdatascience.com/visualization-attention-part-1-a16667295007?source=collection_archive---------36-----------------------

FAU 讲座笔记关于深度学习

架构和培训可视化

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

FAU 大学的深度学习。下图 CC BY 4.0 来自深度学习讲座

这些是 FAU 的 YouTube 讲座 深度学习 的讲义。这是与幻灯片匹配的讲座视频&的完整抄本。我们希望,你喜欢这个视频一样多。当然,这份抄本是用深度学习技术在很大程度上自动创建的,只进行了少量的手动修改。 自己试试吧!如果您发现错误,请告诉我们!

航行

上一讲 / 观看本视频 / 顶级/下一讲

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

是时候用神经网络可视化来表现艺术了。用自动博客创建的 GIF。来源: YouTube

欢迎大家参加我们的深度学习讲座!今天我们想谈谈视觉化和注意力机制。好的,让我们开始研究视觉化和注意力机制。因此,我们将首先研究动机,然后讨论网络架构可视化。最后,我们想了解一下培训和培训参数的可视化,您已经在本课中看到了。在接下来的几个视频中,我们想谈谈参数的可视化,即内部工作原理,以及我们为什么会对这样做感兴趣。最后,我们将研究注意力机制。这将是这个短片系列的第五个视频。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

可视化有助于更好地描述和理解深层网络的黑箱本质。 CC 下的图片来自深度学习讲座的 4.0 。

所以,让我们来谈谈动机。好吧,为什么我们要想象任何东西?当然,神经网络通常被视为黑盒。所以你有一些输入,然后发生一些事情,然后有一些输出。今天,我们想看看如何将网络的内部工作传达给其他人,如其他开发人员或科学家。你会发现这是你未来职业生涯中需要的一项重要技能。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

为什么我们需要可视化?来自深度学习讲座CC BY 4.0 下的图片。

这是你为什么想这么做的几个原因。你想要交流架构。您希望在培训过程中发现问题,例如培训是否不一致。如果你有类似死亡的影响,你需要识别错误的训练或测试数据。你想了解网络如何学习,为什么学习,学习什么。因此,我们想在这里介绍三种主要的可视化类型。这是架构的可视化、训练的可视化、学习到的参数和权重,这对于可视化当然是重要的:网络中数据的表示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

深度学习可视化方法中的一个关键方法是网络架构的显示。 CC 下的图片来自深度学习讲座的 4.0 。

那么,让我们从网络架构可视化开始。我们本质上想要有效地交流这种特定类型的神经网络的重要性。对于一个特定网络的良好性能,我们实际上由架构强加的先验可能是至关重要的,甚至是最重要的因素。因此,这主要是通过基于图的结构以不同的粒度完成的,您将在下面看到一些示例。实际上,如果你和我们的一组关于神经网络架构的演讲视频相比,我们已经经常看到这种情况了。所以基本上有三类,

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

节点连接图。来自深度学习讲座的 4.0CC 下的图片。

这是节点连接图,基本上在神经元水平上起作用。节点是神经元,加权连接是边。你们已经看到了它们,尤其是在这个类的早期实例中,我们真正深入到节点级别。所有的联系都很重要。例如,如果您想要显示卷积层或全连接层之间的差异,它们会非常有用。因此,这对于小型子网或构建模块非常重要。存在具有显式加权递归连接的不同变体等等。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

框图。 CC 下的图片来自深度学习讲座的 4.0 。

如果你想要更大的结构,那么我们使用框图。在那里,我们有固体块。尽管实际上所有的神经元都是相互连接的,但它们通常只共享层间的单个连接。我们已经看到了很多这样的可视化。这里你可以看到框图的可视化。这里,块是一个数学运算或层。那么,你也有箭。它们显示了数据流,并且块可以具有不同的粒度。通常,他们使用分层描述。您甚至可能想要将它与前面类型的图结合使用,以便确保哪个块执行什么样的操作。当然,您需要对超参数进行文本描述。过滤器尺寸。和过滤器的数量。这通常是在标题中完成的,或者你添加一些小数字,比如实际使用了哪些过滤器,或者使用了多少激活和特征映射。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

AlexNet 的两种不同的可视化。 CC 下的图片来自深度学习讲座的 4.0 。

我们可以看到,根据你想展示的内容,有各种各样的可视化效果。这是 AlexNet 的两个可视化。最上面的一个实际上来自原始出版物,它强调了它被分成两部分,因为它运行在两个 GPU 上。然后,顶部显示的两个分支之间的连接突出显示了两个 GPU 之间的交互。现在,底层可视化更侧重于卷积神经网络结构以及汇集和卷积层。最后,您会看到连接到 SVM 分类器的完全连接的层。因此,这里更多的是关注建筑的概念,而两幅图像实际上显示的是相同的建筑。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

VGG 通常使用 3D 形状显示。来自深度学习讲座CC BY 4.0 下的图片。

您已经看到了还有块变体。所以你可以在这里看到 VGG 的形象化,作者想要展示他们在特殊维度上的减少,同时在解释维度上的增加。所以在这里,只有三维块或立方体被用于可视化。在这里,它们传达了你想要从空间维度转换到解释领域的想法。有很多很多不同的方式来形象化事物。你应该选择一个在你看来能显示重要效果的。然后,你添加一个好的纹理描述。关键在于文字和图形的结合,这样别人才能理解你的想法。当然,库也有显示实际实现的图形结构的工具。一般来说,他们不太适合向他人传达信息。许多细节丢失,或者有时粒度级别太高,无法显示整个网络。因此,这对于调试来说通常是好的,但是对于报告或者传达你的架构的想法来说就不那么好了。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Graphcore 杨属于“其他可视化方法”一类。 CC 下的图片来自深度学习讲座的 4.0 。

当然,还有其他的可视化策略。在这里,我们只是简单地概述一下可以做些什么。像 Graphcore Poplar 这样的东西有这种奇特的图形可视化。你可以看到这是一个架构的代表,但如果你试图在这个可视化之后实现它,它就没有那么有用了,看着它并试图理解网络的哪个部分连接到哪个部分是一件有趣的事情。你可以清楚地看到,这些层可以在这里确定。因此,不同的层和层的配置形成不同的形状。一般来说,看着这张图片,很难说好哇,这是一个 ResNet-50。我更喜欢 ResNet-50 的不同可视化,以便弄清楚这里发生了什么。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

“…我知道这看起来像是我们在摧毁一切。别担心。我们不会犯错。我们有快乐的意外。”——鲍勃·罗斯。用自动博客创建的 GIF。来源: YouTube

好了,让我们继续谈一谈培训的可视化。这也非常重要,因为它包含许多有趣的信息,如输入数据图像、文本、参数、权重、偏差、隐藏图层数据或输出数据。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

培训过程也可以可视化。 CC 下的图片来自深度学习讲座的 4.0 。

当然,你想以某种方式跟踪训练过程中发生的事情。因此,这种跟踪特别有助于调试和改进模型设计。我们已经在关于惯例的系列讲座视频中谈到了这些影响。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Tensorflow 游乐场就是一个玩具的例子。 CC 下的图片来自深度学习讲座的 4.0 。

所以,这是一个非常好的可视化训练,展示在 Tensorflow 操场上。这是一个非常有趣的工具,因为在这里你不仅可以可视化连接,还可以根据输入空间可视化 2-D 输入的激活。如果你回到最初的视频,你会看到我们实际上使用了类似的表达方式,比如当我们谈论树形结构的时候。在这里,你可以看到在训练迭代中,不同层中的表示是如何变化的。他们通过在输入空间中由各自的激活函数产生的分割的可视化来实现。所以,你可以看到使用全连接层和 sigmoid 激活函数的第一层。它们本质上生成输入空间的二进制分区。然后,您在层上组合层。你可以看到输入空间的这些不同部分是如何被组合起来形成一个更复杂的形状,就像你在右边看到的。这通常仅限于 2-D 玩具示例,但是理解概念并真正理解培训过程中发生的事情是非常好的。您可以运行几次迭代。你可以加速、减速、停止训练过程,然后看看在训练的不同步骤中发生了什么。所以,这很好。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Tensorboard 是监督训练跑步的标准工具。来自深度学习讲座CC BY 4.0 下的图片。

但是如果你真的想研究大问题,那么 Tensorboard 之类的东西真的很有用。在这里,您可以监控训练过程中的实际进度。这绝对是你在训练大型网络时应该使用的东西。在这里,您可以看到损失在训练中的表现,验证损失是如何变化的,等等。你可以在整个训练过程中想象这一点,你真的可以利用这一点来看看是否有收敛或检测你的训练过程中是否有什么问题。如果你已经跑了 100 圈,而你的损失没有发生,或者如果你有一个爆炸梯度之类的东西,你会立即在 Tensorboard 的可视化中看到。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在这个深度学习讲座中,更多令人兴奋的事情即将到来。 CC 下的图片来自深度学习讲座的 4.0 。

好吧。现在,我们已经讨论了几种不同的可视化,特别是架构和培训过程。实际上,我们一直在用这个。尽管如此,我认为你应该意识到你想象事物的方式。如果你想把你的想法传达给其他人,这是非常重要的。我们将在下一个视频中谈论的实际上是可视化网络的内部工作。因此,我们将研究如何弄清楚网络内部发生了什么的技术。这些实际上是非常有趣的技术,对于调试和试图理解网络中发生的事情也非常有用。我们将在第一个视频中开始一个简短的动机和一些你应该知道的深度神经网络的弱点。非常感谢大家的收听,下期视频再见。拜拜。

如果你喜欢这篇文章,你可以在这里找到更多的文章,或者看看我们的讲座。如果你想在未来了解更多的文章、视频和研究,我也会很感激关注 YouTubeTwitter脸书LinkedIn 。本文以 Creative Commons 4.0 归属许可发布,如果引用,可以转载和修改。如果你有兴趣从视频讲座中获得文字记录,试试自动博客

链接

约辛斯基等人:深度可视化工具箱
奥拉等人:特征可视化
亚当哈雷:MNIST 演示

参考

[1] Dzmitry Bahdanau, Kyunghyun Cho, and Yoshua Bengio. “Neural Machine Translation by Jointly Learning to Align and Translate”. In: 3rd International Conference on Learning Representations, ICLR 2015, San Diego, 2015.
[2] T. B. Brown, D. Mané, A. Roy, et al. “Adversarial Patch”. In: ArXiv e-prints (Dec. 2017). arXiv: 1712.09665 [cs.CV].
[3] Jianpeng Cheng, Li Dong, and Mirella Lapata. “Long Short-Term Memory-Networks for Machine Reading”. In: CoRR abs/1601.06733 (2016). arXiv: 1601.06733.
[4] Jacob Devlin, Ming-Wei Chang, Kenton Lee, et al. “BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding”. In: CoRR abs/1810.04805 (2018). arXiv: 1810.04805.
[5] Neil Frazer. Neural Network Follies. 1998. URL: https://neil.fraser.name/writing/tank/ (visited on 01/07/2018).
[6] Ross B. Girshick, Jeff Donahue, Trevor Darrell, et al. “Rich feature hierarchies for accurate object detection and semantic segmentation”. In: CoRR abs/1311.2524 (2013). arXiv: 1311.2524.
[7] Alex Graves, Greg Wayne, and Ivo Danihelka. “Neural Turing Machines”. In: CoRR abs/1410.5401 (2014). arXiv: 1410.5401.
[8] Karol Gregor, Ivo Danihelka, Alex Graves, et al. “DRAW: A Recurrent Neural Network For Image Generation”. In: Proceedings of the 32nd International Conference on Machine Learning. Vol. 37. Proceedings of Machine Learning Research. Lille, France: PMLR, July 2015, pp. 1462–1471.
[9] Nal Kalchbrenner, Lasse Espeholt, Karen Simonyan, et al. “Neural Machine Translation in Linear Time”. In: CoRR abs/1610.10099 (2016). arXiv: 1610.10099.
[10] L. N. Kanal and N. C. Randall. “Recognition System Design by Statistical Analysis”. In: Proceedings of the 1964 19th ACM National Conference. ACM ’64. New York, NY, USA: ACM, 1964, pp. 42.501–42.5020.
[11] Andrej Karpathy. t-SNE visualization of CNN codes. URL: http://cs.stanford.edu/people/karpathy/cnnembed/ (visited on 01/07/2018).
[12] Alex Krizhevsky, Ilya Sutskever, and Geoffrey E Hinton. “ImageNet Classification with Deep Convolutional Neural Networks”. In: Advances In Neural Information Processing Systems 25. Curran Associates, Inc., 2012, pp. 1097–1105. arXiv: 1102.0183.
[13] Thang Luong, Hieu Pham, and Christopher D. Manning. “Effective Approaches to Attention-based Neural Machine Translation”. In: Proceedings of the 2015 Conference on Empirical Methods in Natural Language Lisbon, Portugal: Association for Computational Linguistics, Sept. 2015, pp. 1412–1421.
[14] A. Mahendran and A. Vedaldi. “Understanding deep image representations by inverting them”. In: 2015 IEEE Conference on Computer Vision and Pattern Recognition (CVPR). June 2015, pp. 5188–5196.
[15] Andreas Maier, Stefan Wenhardt, Tino Haderlein, et al. “A Microphone-independent Visualization Technique for Speech Disorders”. In: Proceedings of the 10th Annual Conference of the International Speech Communication Brighton, England, 2009, pp. 951–954.
[16] Volodymyr Mnih, Nicolas Heess, Alex Graves, et al. “Recurrent Models of Visual Attention”. In: CoRR abs/1406.6247 (2014). arXiv: 1406.6247.
[17] Chris Olah, Alexander Mordvintsev, and Ludwig Schubert. “Feature Visualization”. In: Distill (2017). https://distill.pub/2017/feature-visualization.
[18] Prajit Ramachandran, Niki Parmar, Ashish Vaswani, et al. “Stand-Alone Self-Attention in Vision Models”. In: arXiv e-prints, arXiv:1906.05909 (June 2019), arXiv:1906.05909. arXiv: 1906.05909 [cs.CV].
[19] Mahmood Sharif, Sruti Bhagavatula, Lujo Bauer, et al. “Accessorize to a Crime: Real and Stealthy Attacks on State-of-the-Art Face Recognition”. In: Proceedings of the 2016 ACM SIGSAC Conference on Computer and Communications CCS ’16. Vienna, Austria: ACM, 2016, pp. 1528–1540. A.
[20] K. Simonyan, A. Vedaldi, and A. Zisserman. “Deep Inside Convolutional Networks: Visualising Image Classification Models and Saliency Maps”. In: International Conference on Learning Representations (ICLR) (workshop track). 2014.
[21] J.T. Springenberg, A. Dosovitskiy, T. Brox, et al. “Striving for Simplicity: The All Convolutional Net”. In: International Conference on Learning Representations (ICRL) (workshop track). 2015.
[22] Dmitry Ulyanov, Andrea Vedaldi, and Victor S. Lempitsky. “Deep Image Prior”. In: CoRR abs/1711.10925 (2017). arXiv: 1711.10925.
[23] Ashish Vaswani, Noam Shazeer, Niki Parmar, et al. “Attention Is All You Need”. In: CoRR abs/1706.03762 (2017). arXiv: 1706.03762.
[24] Kelvin Xu, Jimmy Ba, Ryan Kiros, et al. “Show, Attend and Tell: Neural Image Caption Generation with Visual Attention”. In: CoRR abs/1502.03044 (2015). arXiv: 1502.03044.
[25] Jason Yosinski, Jeff Clune, Anh Mai Nguyen, et al. “Understanding Neural Networks Through Deep Visualization”. In: CoRR abs/1506.06579 (2015). arXiv: 1506.06579.
[26] Matthew D. Zeiler and Rob Fergus. “Visualizing and Understanding Convolutional Networks”. In: Computer Vision — ECCV 2014: 13th European Conference, Zurich, Switzerland, Cham: Springer International Publishing, 2014, pp. 818–833.
[27] Han Zhang, Ian Goodfellow, Dimitris Metaxas, et al. “Self-Attention Generative Adversarial Networks”. In: Proceedings of the 36th International Conference on Machine Learning. Vol. 97. Proceedings of Machine Learning Research. Long Beach, California, USA: PMLR, Sept. 2019, pp. 7354–7363. A.

视觉化和注意力——第二部分

原文:https://towardsdatascience.com/visualization-attention-part-2-4b1dd17b9269?source=collection_archive---------39-----------------------

FAU 讲座笔记关于深度学习

混淆者和敌对攻击

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

FAU 大学的深度学习。下图 CC BY 4.0 来自深度学习讲座

这些是 FAU 的 YouTube 讲座 深度学习 的讲义。这是与幻灯片匹配的讲座视频&的完整抄本。我们希望,你喜欢这个视频一样多。当然,这份抄本是用深度学习技术在很大程度上自动创建的,只进行了少量的手动修改。 自己试试吧!如果您发现错误,请告诉我们!

航行

上一讲 / 观看本视频 / 顶级 / 下一讲

所以欢迎回到深度学习!今天,我想谈谈更多的可视化技术。但实际上,我想在接下来的几分钟里开始激发我们为什么需要可视化技术。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

自主武器系统和黑匣子系统——可能会出什么问题?“各位主管,我很高兴向你们介绍执法的未来:ED 209!”。使用 gifify 创建的图像。来源: YouTube (工作不安全!).

好了,我们开始吧。视觉化和注意力机制——第二部分。参数的可视化和第一件事是动机。因此,网络学习训练数据的表示,但问题当然是在我们的网络中数据发生了什么。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们需要可视化的一些原因。 CC 下的图片来自深度学习讲座的 4.0 。

这真的是一件很重要的事情,你真的应该关心它,因为它对调查无意和意外的行为非常有用。我在这里真正想强调的一点是对立的例子。当然,您想弄清楚为什么您的网络在实验室中表现得非常好,但在野外却失败了。所以,这也是你想要解决的一个重要问题。然后,您可以找出这种情况的潜在原因,因为如果您研究这些可视化技术,它们将帮助您识别错误类型的特征、噪声属性等。因此,我们将在接下来的视频中举几个例子。我想给你看一些轶事的例子。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

“执法 Doid 系列 209 (ED 209)是一款自给自足的执法机器人。”。使用 gifify 创建的图像。来源: YouTube (工作不安全!).

例如照片中坦克的识别。这实际上是一个来自谷歌开发者尼尔·弗雷泽网站的例子。我不完全确定这是真的发生了还是只是一个都市传说。所以传说是这样的:人们和五角大楼想训练一个神经网络来识别图像上的坦克。为了构建这样一个网络,你能做些什么?嗯,你去那里,然后你拍摄坦克的图像,然后你拍摄非坦克情况的图像。嗯,通常你会希望他们出现在某些场景中。所以,你去森林里拍些照片。然后,当然,你得弄几张坦克的照片。你通常在战场上看到的坦克,你知道周围有烟、泥、脏和砂砾。所以,你收集你的坦克图像,然后你可能有 200 个森林图像和 200 个坦克图像。你会回到你的实验室,然后你训练你的深度神经网络,或者如果你只有这个非常小的数据集,可能就没那么深了。你继续下去,你会得到一个几乎完美的分类率。所以,每个人都很高兴看起来你的系统运行得很好,

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们能探测到这样的坦克吗? CC 下的图片来自深度学习讲座的 4.0 。

这张幻灯片上有两个例子,你说“耶!我已经解决问题了!”所以,让我们建立一个真正的系统,它会警告我们有坦克。他们建立了这个系统,并意识到它在实践中根本不起作用。在这个两类问题中,他们实际上有大约 50%的识别率。这意味着这是近似随机猜测。那么,可能出了什么问题呢?如果你看这些照片,你会发现所有的森林照片基本上都是在阳光明媚的好天气拍摄的。当然,你会看到坦克是在阴天拍摄的。你知道天气条件不太好。当然,当你看到坦克时,他们会开火,周围有手榴弹,当然,这意味着会有烟雾和其他事情发生。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

“ED 209 目前是为城市和平而设计的。但这仅仅是开始。在底特律老城成功服役后,我们可以预计 ED 209 将成为未来十年的热门军用产品。”使用 gifify 创建的图像。来源: YouTube (工作不安全!).

所以,系统本质上学习的不是识别坦克,而是走了捷径。在这里,捷径是你尝试检测天气。因此,如果你有一个蓝天,良好的天气条件,图像中的噪声很少,那么它可能是一个非坦克图像。如果你有噪音和糟糕的照明条件,那么它可能是一个坦克图像。显然,这种分类系统对于检测坦克的任务来说,一点帮助都没有。因此,我们可以总结为网络简单地学习了数据具有相关的特征。这通常被称为混杂因素。它没有标明坦克的名称。因此,这里重要的教训是:这不是学习算法的错误,而是数据的错误。所以,当你出去收集数据时,你应该非常小心,确保你有未来应用的代表性数据。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

两种疾病还是两个麦克风? CC 下的图片来自深度学习讲座的 4.0 。

我这里还有一个混杂因素的例子。你在这个图像中看到的是语音记录。这是一个维度标度。所以,我们在这里尝试做的是将不同的说话者映射到一个二维空间。我们将整个记录映射到一个点上。你应该看到的是 51 个点,每个人一个点。你可以看到我们有黑点和方块。现在,已经用麦克风 1 记录了正方形,用麦克风 2 记录了圆点。这些是完全相同的扬声器,甚至更糟:这些甚至是同时录制的实例,但使用了两个不同的麦克风。一个麦克风非常靠近发言者的嘴,另一个麦克风位于离发言者大约 2.5 米远的摄像机上。在这里,您可以看到麦克风特性是一个明显的混淆因素,您可以非常容易地将两组扬声器区分开来,尽管从麦克风来看,它们是完全相同的扬声器。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

“麦克纳马拉博士”——“我们需要一个逮捕对象。”——“金内先生。”——“是的,先生!”——“请你去帮我们一下好吗?”“是的,先生!”使用 gifify 创建的图像。来源: YouTube (工作不安全!).

现在,想象你做一些类似的事情来检测病理。你用一个话筒收集所有有病变的扬声器,用另一个话筒收集所有无病变的扬声器。那么很可能你的系统会学习识别不同的麦克风,而不是病理。当然,这不仅仅是麦克风的情况。考虑使用两种不同的扫描仪来创建医学图像,如扫描组织病理学。你有不同类型的病理,你用不同的扫描仪扫描每一种类型。也许他们只是位于两个不同的医院,因为患有疾病 A 的患者去医院 A,而患有疾病 B 的患者去医院 B。然后,这里有一个巨大的混杂因素,因为所有患有疾病 A 的患者都已被扫描仪 A 扫描过,而所有对照组或患有疾病 B 的患者都已被扫描仪 B 扫描过。因此,同样有可能的是,您将学会区分扫描仪,例如通过识别特征噪声模式而不是识别疾病。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

“金内先生将帮助我们模拟一个典型的逮捕和解除武装程序。金内先生,用你的枪威胁我。”使用 gifify 创建的图像。来源: YouTube (工作不安全!).

相机也是如此。您甚至可以证明,在图像取证中,如果您使用同一台数码相机拍摄图像,那么仅通过像素中的特定噪声模式,您就可以识别特定的相机。这些当然是局部的东西,很容易被深度神经网络提取出来。特别是在早期层,所以收集数据时要非常小心。你需要从多个不同的地点收集数据,确保你有代表性的数据。想象一下,你为新冠肺炎训练一个分类器,新冠肺炎患者的所有扫描都来自一个特定的区域,所有阳性样本都是用一组 3-4 个扫描仪采集的。然后你将其与非新冠肺炎患者进行比较,如果他们是在不同的扫描仪甚至不同的网站上获得的,你可能非常非常容易地引入对这些扫描仪的识别,而不是对疾病的识别。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

正规化也可以解决混杂因素。来自深度学习讲座CC BY 4.0 下的图片。

所以要非常小心,看看数据,试着理解是否有混杂因素的风险。当然,尽量省略。我们已经提出了一种技术来对抗混杂因素,这就是我们在[15]中所做的。在这里,想法是你积极地包括关于混杂因素的信息,并试图抑制它,在这里,为了视觉化。然后,你可以证明你确实可以消除麦克风等引入的偏置。因此,你必须意识到混淆因素,可能是传感器、照明条件、年龄、参与者的性别、温度——是的,甚至温度也可能对感觉机制产生影响。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

“指向 ED 209。”“是的,先生!”使用 gifify 创建的图像。来源: YouTube (工作不安全!).

所以要小心。所有这些情况都可能是混杂的,如果数据中有混杂因素,你必须对它们进行补偿,或者在数据收集中尽量避免它们。所以,请注意这些问题,它们很可能会破坏你的整个分类系统。不仔细看数据,永远搞不清问题出在哪里。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

对立的例子对于人眼是不可见的,但是可能影响机器系统的分类。 CC 下的图片来自深度学习讲座的 4.0 。

你在机器学习和深度学习系统中遇到的另一个大问题是对立例子的问题。然后,你有不直观的行为。我们在这里给你看两张图片。对于左边的图像,我们的神经网络以 57%的置信度认为这是一只熊猫。在右边这张我们看起来几乎一样的图片上,有 99.3%的把握这是一只长臂猿。这怎么可能是真的呢?这两个输入看起来几乎一样。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

对抗性攻击产生专门设计的噪声模式来欺骗分类器。图片来源: arXiv

右图显示有人攻击了神经网络。他们在图像上引入了一种噪声模式,在每个颜色通道中只有一两个灰度值,但这种噪声模式是用深度神经网络的知识构建的。他们所做的基本上是通过引入类似随机的输入来最大限度地增加给定类别的输出。实际上,如果你了解整个网络,你可以设计这种额外的噪声模式,使错误类别的激励最大化。对于人类来说,这是绝对不可识别的。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

对抗性攻击也可以使病变在医学图像中消失。来源:模式识别实验室

其工作方式是,它在每个像素的小输入的不同层上累加,但在不同层上平均并累加。它允许我们引入一个小偏移,然后各层上的小偏移可以增加,从而实际上迫使网络做出错误的决策。所以,你可以说这个对立的例子是网络中的一种缺陷。当然,我们希望防止这种敌对的例子。实际上,我们会看到这是不可能的,因为它们是通过优化创建的。你总是会以对立的例子结束。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

视错觉愚弄了人类的认知。 CC 下的图片来自深度学习讲座的 4.0 。

那么,为什么会这样呢?我们可以说,对立的例子有点像视错觉。同样,人类的感知也不是完美无缺的。在左手边,你可以看到埃舍尔的瀑布。如果你沿着这个结构走,你会看到瀑布在滋养这个结构本身,它本质上是一个无限循环。在这里,视错觉是,如果我们观察单个部分,我们会发现它们是一致的,但当然,整个图像并不一致。尽管如此,我们看着这些零件,发现它们似乎是可信的。一个稍微好一点的对立例子可能是右边的图像。这实际上是尼普顿在意大利的洞穴。人们称这些石头形成的影子为“风琴演奏者”。如果你仔细看这个影子,它看起来像是有一个人坐在那里,像一个管风琴演奏者一样演奏着石头。因此,人类也存在视错觉,而对立的例子在深层神经网络中本质上是等价的。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

攻击人脸识别系统的一个例子。 CC 下的图片来自深度学习讲座的 4.0 。

与视错觉相反,我们可以构建这些对立的例子。我已经暗示过了。它们会导致特定的错误,这是另一个例子。这是对你在[19]中发现的最先进的人脸识别技术的攻击。他们所做的是定义了一组像素,本质上是眼镜的形状。这些眼镜现在可以调整了。因此,他们可以分配任意的颜色值,他们选择颜色值的方式会导致错误的识别。你可以展示一下瑞茜·威瑟斯彭的照片,加上这些神奇的眼镜,你会发现它们真的是五颜六色。因此,他们创造了大量的输入,他们特别加强激活,然后导致错误的分类。戴上这副特殊的眼镜,你可以看到瑞茜·威瑟斯彭现在成功地伪装成了拉塞尔·克罗。你可能会说“哇,这完全是胡说八道,这不可能!我还能看到瑞茜·威瑟斯彭!”嗯,是的。你仍然可以看到瑞茜·威瑟斯彭,因为人类的感知系统与这个为身份识别而训练的神经网络的工作方式不同。甚至还有建立在此基础上的作品。他们实际上打印了这些奇特的眼镜,他们还展示了基于摄像头的个人识别系统可以被欺骗来进行这种奇怪的攻击。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

烤面包机贴纸。 CC 下的图片来自深度学习讲座的 4.0 。

不止如此。这就是所谓的“烤面包机贴纸”。烤面包机贴纸通常用于误导在 ImageNet 上训练的网络。因此,它的设计是为了导致向“烤面包机”类别的分类。现在,如果你打印这个烤面包机贴纸,在这里,你可以看到,这是一个奇特的彩色图像。你只要把它放到场景中,烤面包机贴纸就会引起“烤面包机”这个类别的分类。它不仅仅在一个特定的架构上工作。他们实际上可以证明它可以在多种架构上工作。这个烤面包机贴纸不仅能骗过一个网络,还能骗过几个在 ImageNet 上接受过训练的网络。因此,在顶部的图像中,您可以看到网络工作正常。它对香蕉进行分类。你加上烤面包机贴纸,它就把烤面包机分类了。有趣的是,报纸甚至有一个附件,你可以下载烤面包机贴纸,自己打印出来,在你自己的 ImageNet 网络上试用。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

“请放下你的武器。你有 20 秒的时间来服从。”使用 gifify 创建的图像。来源: YouTube (工作不安全!).

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在这个深度学习讲座中,更多令人兴奋的事情即将到来。 CC 下的图片来自深度学习讲座的 4.0 。

好了,这基本上是动机的总结。我们看到有时在深度神经网络中会发生奇怪的事情。我们想知道它们为什么会发生,问题是什么。这可以通过可视化技术来实现。你想识别混杂因素,你想解释为什么我们的网络有效,或者为什么无效,你想增加预测的可信度。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

所以下一次,我们将研究不同的可视化技术。我们将从更简单的开始,然后是基于优化和基于梯度的技术。在下一个视频中,我们将只研究基于激活的技术。非常感谢大家的收听,下期视频再见。拜拜。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

“我认为你最好照他说的做,金内先生!”使用 gifify 创建的图像。来源: YouTube (工作不安全!).

如果你喜欢这篇文章,你可以在这里找到更多的文章,在这里找到更多关于机器学习的教育材料,或者看看我们的深度 学习 讲座。如果你想在未来了解更多的文章、视频和研究,我也会很感激关注 YouTube、Twitter、脸书、LinkedIn 或 T21。本文以 Creative Commons 4.0 归属许可发布,如果引用,可以转载和修改。如果你有兴趣从视频讲座中生成文字记录,试试自动博客

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

“我很失望,迪克。”-“我确定这只是个小故障。”使用 gifify 创建的图像。来源: YouTube (工作不安全!).

链接

约辛斯基等人:深度可视化工具箱
奥拉等人:特征可视化
亚当哈雷:MNIST 演示

参考

[1] Dzmitry Bahdanau, Kyunghyun Cho, and Yoshua Bengio. “Neural Machine Translation by Jointly Learning to Align and Translate”. In: 3rd International Conference on Learning Representations, ICLR 2015, San Diego, 2015.
[2] T. B. Brown, D. Mané, A. Roy, et al. “Adversarial Patch”. In: ArXiv e-prints (Dec. 2017). arXiv: 1712.09665 [cs.CV].
[3] Jianpeng Cheng, Li Dong, and Mirella Lapata. “Long Short-Term Memory-Networks for Machine Reading”. In: CoRR abs/1601.06733 (2016). arXiv: 1601.06733.
[4] Jacob Devlin, Ming-Wei Chang, Kenton Lee, et al. “BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding”. In: CoRR abs/1810.04805 (2018). arXiv: 1810.04805.
[5] Neil Frazer. Neural Network Follies. 1998. URL: https://neil.fraser.name/writing/tank/ (visited on 01/07/2018).
[6] Ross B. Girshick, Jeff Donahue, Trevor Darrell, et al. “Rich feature hierarchies for accurate object detection and semantic segmentation”. In: CoRR abs/1311.2524 (2013). arXiv: 1311.2524.
[7] Alex Graves, Greg Wayne, and Ivo Danihelka. “Neural Turing Machines”. In: CoRR abs/1410.5401 (2014). arXiv: 1410.5401.
[8] Karol Gregor, Ivo Danihelka, Alex Graves, et al. “DRAW: A Recurrent Neural Network For Image Generation”. In: Proceedings of the 32nd International Conference on Machine Learning. Vol. 37. Proceedings of Machine Learning Research. Lille, France: PMLR, July 2015, pp. 1462–1471.
[9] Nal Kalchbrenner, Lasse Espeholt, Karen Simonyan, et al. “Neural Machine Translation in Linear Time”. In: CoRR abs/1610.10099 (2016). arXiv: 1610.10099.
[10] L. N. Kanal and N. C. Randall. “Recognition System Design by Statistical Analysis”. In: Proceedings of the 1964 19th ACM National Conference. ACM ’64. New York, NY, USA: ACM, 1964, pp. 42.501–42.5020.
[11] Andrej Karpathy. t-SNE visualization of CNN codes. URL: http://cs.stanford.edu/people/karpathy/cnnembed/ (visited on 01/07/2018).
[12] Alex Krizhevsky, Ilya Sutskever, and Geoffrey E Hinton. “ImageNet Classification with Deep Convolutional Neural Networks”. In: Advances In Neural Information Processing Systems 25. Curran Associates, Inc., 2012, pp. 1097–1105. arXiv: 1102.0183.
[13] Thang Luong, Hieu Pham, and Christopher D. Manning. “Effective Approaches to Attention-based Neural Machine Translation”. In: Proceedings of the 2015 Conference on Empirical Methods in Natural Language Lisbon, Portugal: Association for Computational Linguistics, Sept. 2015, pp. 1412–1421.
[14] A. Mahendran and A. Vedaldi. “Understanding deep image representations by inverting them”. In: 2015 IEEE Conference on Computer Vision and Pattern Recognition (CVPR). June 2015, pp. 5188–5196.
[15] Andreas Maier, Stefan Wenhardt, Tino Haderlein, et al. “A Microphone-independent Visualization Technique for Speech Disorders”. In: Proceedings of the 10th Annual Conference of the International Speech Communication Brighton, England, 2009, pp. 951–954.
[16] Volodymyr Mnih, Nicolas Heess, Alex Graves, et al. “Recurrent Models of Visual Attention”. In: CoRR abs/1406.6247 (2014). arXiv: 1406.6247.
[17] Chris Olah, Alexander Mordvintsev, and Ludwig Schubert. “Feature Visualization”. In: Distill (2017). https://distill.pub/2017/feature-visualization.
[18] Prajit Ramachandran, Niki Parmar, Ashish Vaswani, et al. “Stand-Alone Self-Attention in Vision Models”. In: arXiv e-prints, arXiv:1906.05909 (June 2019), arXiv:1906.05909. arXiv: 1906.05909 [cs.CV].
[19] Mahmood Sharif, Sruti Bhagavatula, Lujo Bauer, et al. “Accessorize to a Crime: Real and Stealthy Attacks on State-of-the-Art Face Recognition”. In: Proceedings of the 2016 ACM SIGSAC Conference on Computer and Communications CCS ’16. Vienna, Austria: ACM, 2016, pp. 1528–1540. A.
[20] K. Simonyan, A. Vedaldi, and A. Zisserman. “Deep Inside Convolutional Networks: Visualising Image Classification Models and Saliency Maps”. In: International Conference on Learning Representations (ICLR) (workshop track). 2014.
[21] J.T. Springenberg, A. Dosovitskiy, T. Brox, et al. “Striving for Simplicity: The All Convolutional Net”. In: International Conference on Learning Representations (ICRL) (workshop track). 2015.
[22] Dmitry Ulyanov, Andrea Vedaldi, and Victor S. Lempitsky. “Deep Image Prior”. In: CoRR abs/1711.10925 (2017). arXiv: 1711.10925.
[23] Ashish Vaswani, Noam Shazeer, Niki Parmar, et al. “Attention Is All You Need”. In: CoRR abs/1706.03762 (2017). arXiv: 1706.03762.
[24] Kelvin Xu, Jimmy Ba, Ryan Kiros, et al. “Show, Attend and Tell: Neural Image Caption Generation with Visual Attention”. In: CoRR abs/1502.03044 (2015). arXiv: 1502.03044.
[25] Jason Yosinski, Jeff Clune, Anh Mai Nguyen, et al. “Understanding Neural Networks Through Deep Visualization”. In: CoRR abs/1506.06579 (2015). arXiv: 1506.06579.
[26] Matthew D. Zeiler and Rob Fergus. “Visualizing and Understanding Convolutional Networks”. In: Computer Vision — ECCV 2014: 13th European Conference, Zurich, Switzerland, Cham: Springer International Publishing, 2014, pp. 818–833.
[27] Han Zhang, Ian Goodfellow, Dimitris Metaxas, et al. “Self-Attention Generative Adversarial Networks”. In: Proceedings of the 36th International Conference on Machine Learning. Vol. 97. Proceedings of Machine Learning Research. Long Beach, California, USA: PMLR, Sept. 2019, pp. 7354–7363. A.

视觉化和注意力——第三部分

原文:https://towardsdatascience.com/visualization-attention-part-3-84a43958e48b?source=collection_archive---------48-----------------------

FAU 讲座笔记关于深度学习

直接可视化方法

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

FAU 大学的深度学习。下图 CC BY 4.0 来自深度学习讲座

这些是 FAU 的 YouTube 讲座 深度学习 的讲义。这是与幻灯片匹配的讲座视频&的完整抄本。我们希望,你喜欢这个视频一样多。当然,这份抄本是用深度学习技术在很大程度上自动创建的,只进行了少量的手动修改。 自己试试吧!如果您发现错误,请告诉我们!

航行

上一讲 / 观看本视频 / 顶级 / 下一讲

欢迎回到深度学习!所以,今天我想谈谈实际的可视化技术,它可以让你理解深层神经网络内部发生的事情。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

让我们弄清楚深层网络内部发生了什么!使用 gifify 创建的图像。来源: YouTube

好吧。所以,让我们试着弄清楚网络内部发生了什么。我们将从简单的参数可视化开始。这基本上是最简单的技术。我们已经在之前的视频中处理过了。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

可视化学习参数的一个简单技术是查看训练过的内核。 CC 下的图片来自深度学习讲座的 4.0 。

因此,我们的想法是,您可以直接绘制已学习的滤波器权重。很容易实现。对于第一层也很容易解读。在这里,你可以看到 AlexNet 中第一层过滤器的一些例子。如果你看到非常嘈杂的第一层,那么你可能已经猜到有问题了。例如,您正在获取特定传感器的噪声特性。除此之外,它基本上没什么意思,因为你可以看到它们是 edge 和 Gabor 滤波器的形状,但它不会告诉你网络的后面部分到底发生了什么。如果你有小内核,那么你大概还能解读它们。但是如果你更深入,你将不得不理解在第一层已经发生了什么。因此,它们以某种方式叠加在一起,你无法理解在更深的层次里到底发生了什么。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

“你有许多问题,尽管这个过程已经改变了你的意识,你仍然是不可改变的人类。所以,我的回答有些你会懂,有些你不会。”使用 gifify 创建的图像。来源: YouTube

所以,我们需要一些不同的想法。一个想法是我们想象激活。内核很难解释。因此,我们观察由内核产生的激活,因为它们告诉我们网络从特定的输入计算什么。如果您有强烈的反应,这可能意味着该功能是存在的。如果您的响应较弱,则该功能可能不存在。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

高激活表明神经元和输入之间有很强的一致性。 CC 下的图片来自深度学习讲座的 4.0 。

那么,这看起来怎么样?对于第一层,你可以看到激活看起来像正常的滤波器响应。这是输入,然后对零进行滤波,对于一,可以看到它们以某种方式对输入进行了滤波。当然,你可以继续下去,看看更深层次的激活。然后,您已经意识到查看激活可能有些有趣,但是由于下采样,激活图通常会很快失去分辨率。所以,这意味着你会得到非常粗糙的激活图。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

更深的激活图通常只有有限的分辨率。 CC 下的图片来自深度学习讲座的 4.0 。

所以在这里,你看到一个可视化,可能对应于面部检测或面部特征。然后,我们可以开始推测这种特征在深层网络内部实际上代表了什么。我在[25]中有一个深度可视化工具箱,可以在网上找到。它允许你计算类似的东西。当然,缺点是,我们不能获得精确的信息,为什么特定的神经元被激活,或者为什么这个特征图是这个形状。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

“一致地说,虽然你的第一个问题可能是最相关的,但你可能意识不到它也是最不相关的。”使用 gifify 创建的图像。来源: YouTube

那我们还能做什么?我们可以通过遮挡来研究特征。这里的想法是你在输入图像周围移动一个蒙版。有了这个补丁,你就可以从图像中移除信息。然后,你试着想象一个特定决定的可信度,关于这个遮挡片的不同位置。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

补丁闭塞是受生物神经网络中的病变研究的启发。 CC 下的图片来自深度学习讲座的 4.0 。

然后,当然,补丁导致置信度大幅下降的区域可能是与特定分类相关的区域。我们这里有一些例子。我们用这个补丁来屏蔽左边的原始输入。两种不同版本的遮罩位于中间和右侧。然后,您可以看到数字 3 的置信度降低在中间图像中比在右侧图像中大得多。因此,我们可以尝试使用这种技术来识别混淆或错误的焦点。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

遮挡揭示了图像的哪些部分与分类相关。 CC 下的图片来自深度学习讲座的 4.0 。

让我们再看一些例子。在这里,你可以看到左上角的博美犬图片。图像的重要部分确实位于中心。如果你开始封闭中心,博美犬的自信心也会下降。在中间一栏,你看到真正的标签汽车车轮和记录的图像。在底部,你可以看到如果你把车轮藏起来,当然,信心会下降。但是如果你开始隐藏汽车上的部分广告,信心也会下降。所以,这是一种可能是后天习得的混杂因素。车轮可以与图像的其他部分紧密搭配,甚至包括广告。在右边,你可以看到真正的阿富汗猎犬。如果你开始封闭狗,当然,信心实际上崩溃了。例如,左上方的人完全不相关。但是遮住主人或貌似主人的脸也会降低自信。所以你可能会说狗主人开始变得和他们的狗相似。不,这也是一个混杂因素!

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

“我为什么会在这里?”——“你的生命是矩阵程序固有的不平衡方程的余数之和。你是一个异常现象的最终结果,尽管我尽了最大的努力,我还是无法从一个数学精度的和谐中消除它。”使用 gifify 创建的图像。来源: YouTube

好吧,让我们来看看第三种技术。这里,我们想要找到特定层或神经元的最大激活。这里的想法是,我们只看已经展示给网络的小块,我们通过特定神经元的激活对它们进行排序。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

最大程度地激活面片可以找到某个层或神经元“喜欢”的图像部分。 CC 下的图片来自深度学习讲座的 4.0 。

你可以生成这样的序列。所以,你可以看到这个特定的神经元被激活了 0.1,0.9,0.9,0.8,0.8,你可以看到这些是最大程度激活这个神经元的小块。所以,你可以争辩说:“嗯,这是一个上帝脸探测器,还是一个黑暗运动探测器。”

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

最大化激活补丁可能仍然难以解释。来自深度学习讲座CC BY 4.0 下的图片。

所以,你很容易就能发现什么是“假朋友”。这相对容易找到,但是缺点当然是你不一定能得到语义上的意思。你可能会说这些形式是表征的基本载体。这里,我们有另一个例子,你可以说“嗯,什么样的检测器?这是一个红花番茄酱探测器。或者这是一个镜面高光的探测器?”好吧,至少你能搞清楚哪个神经元和什么样的输入有关。所以,你可以感觉到网络中正在发生什么,以及哪些东西聚集在一起。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

“虽然这仍然是一个竭力避免的负担,但这并不出乎意料,而且这并没有超出控制措施的范围,这种控制措施无情地将你带到了这里。”“你还没有回答我的问题。”——“非常正确。有意思。”使用 gifify 创建的图像。来源: YouTube

说到聚类:那么你实际上也可以使用输入的聚类来可视化一个特定深度网络的不同输入是多么相似。这导致了 T 随机邻域嵌入可视化技术。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

t-SNE 为特定网络创建输入图像的地图。来自深度学习讲座的 4.0CC 下的图片。

现在,这里的想法是,您计算最后一层的激活,并根据它们在最后一层激活中的相似性对输入进行分组。因此,你基本上执行最后一层激活的维度。这些是与分类相关的要素,可能会对训练好的网络的要素表示进行编码。然后,你实际上执行这个降维技术,并产生一个 2-D 图。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

探索 SNE 霸王龙的地图。使用 gifify 创建的图像。来源: YouTube

这允许您查看您的网络认为哪些是相似的输入。所以,这当然是在二维空间中嵌入了一个非常高维的空间。当然,有很多信息损失。如果你这样做了,这个技巧还是很有趣的。如果我在这里放大不同的部分,你可以看到我们实际上在这种维度减少中形成了不同类别的集群。所以,你可以看到被神经网络相似感知的图像也位于直接邻域内。我们所做的降维揭示了内部表征。实际上,如果你看看那些街区,它们有点道理。因此,这实际上有助于我们理解和培养对我们深度神经网络正在进行的特征提取的信心。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

“母体比你知道的还要古老.”—“在 80 年代,我考虑如何建造这台机器,学会解决所有这些问题。”——“只有两种可能的解释:要么没人告诉我,要么没人知道。”“正是如此。”使用 gifify 创建的图像。来源: YouTube

到目前为止,没有一种技术是真正令人满意的。所以,下次在深度学习中,我们要讲更多的可视化方法。特别是,我们希望研究基于梯度的程序。所以,我们想用一种反向传播的方法来创造视觉效果。其他有趣的方法是基于优化的技术。在这里,我们实际上非常接近我们已经在对立的例子中看到的。非常感谢大家的收听,下期视频再见。拜拜。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在这个深度学习讲座中,更多令人兴奋的事情即将到来。 CC 下的图片来自深度学习讲座的 4.0 。

如果你喜欢这篇文章,你可以在这里找到更多的文章,或者看看我们的讲座。如果你想在未来了解更多的文章、视频和研究,我也会很感激关注 YouTubeTwitter脸书LinkedIn 。本文以 Creative Commons 4.0 归属许可发布,如果引用,可以转载和修改。如果你有兴趣从视频讲座中获得文字记录,试试自动博客

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

“扯淡!”—“否认是所有人类反应中最容易预测的。但请放心,这将是我们第六次销毁它,我们在这方面已经变得非常高效。”——“在那种情况下,除了人会死的事实之外,没有邪恶的概念。”使用 gifify 创建的图像。来源: YouTube

链接

约辛斯基等人:深度可视化工具箱
奥拉等人:特征可视化
亚当哈雷:MNIST 演示

参考

[1] Dzmitry Bahdanau, Kyunghyun Cho, and Yoshua Bengio. “Neural Machine Translation by Jointly Learning to Align and Translate”. In: 3rd International Conference on Learning Representations, ICLR 2015, San Diego, 2015.
[2] T. B. Brown, D. Mané, A. Roy, et al. “Adversarial Patch”. In: ArXiv e-prints (Dec. 2017). arXiv: 1712.09665 [cs.CV].
[3] Jianpeng Cheng, Li Dong, and Mirella Lapata. “Long Short-Term Memory-Networks for Machine Reading”. In: CoRR abs/1601.06733 (2016). arXiv: 1601.06733.
[4] Jacob Devlin, Ming-Wei Chang, Kenton Lee, et al. “BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding”. In: CoRR abs/1810.04805 (2018). arXiv: 1810.04805.
[5] Neil Frazer. Neural Network Follies. 1998. URL: https://neil.fraser.name/writing/tank/ (visited on 01/07/2018).
[6] Ross B. Girshick, Jeff Donahue, Trevor Darrell, et al. “Rich feature hierarchies for accurate object detection and semantic segmentation”. In: CoRR abs/1311.2524 (2013). arXiv: 1311.2524.
[7] Alex Graves, Greg Wayne, and Ivo Danihelka. “Neural Turing Machines”. In: CoRR abs/1410.5401 (2014). arXiv: 1410.5401.
[8] Karol Gregor, Ivo Danihelka, Alex Graves, et al. “DRAW: A Recurrent Neural Network For Image Generation”. In: Proceedings of the 32nd International Conference on Machine Learning. Vol. 37. Proceedings of Machine Learning Research. Lille, France: PMLR, July 2015, pp. 1462–1471.
[9] Nal Kalchbrenner, Lasse Espeholt, Karen Simonyan, et al. “Neural Machine Translation in Linear Time”. In: CoRR abs/1610.10099 (2016). arXiv: 1610.10099.
[10] L. N. Kanal and N. C. Randall. “Recognition System Design by Statistical Analysis”. In: Proceedings of the 1964 19th ACM National Conference. ACM ’64. New York, NY, USA: ACM, 1964, pp. 42.501–42.5020.
[11] Andrej Karpathy. t-SNE visualization of CNN codes. URL: http://cs.stanford.edu/people/karpathy/cnnembed/ (visited on 01/07/2018).
[12] Alex Krizhevsky, Ilya Sutskever, and Geoffrey E Hinton. “ImageNet Classification with Deep Convolutional Neural Networks”. In: Advances In Neural Information Processing Systems 25. Curran Associates, Inc., 2012, pp. 1097–1105. arXiv: 1102.0183.
[13] Thang Luong, Hieu Pham, and Christopher D. Manning. “Effective Approaches to Attention-based Neural Machine Translation”. In: Proceedings of the 2015 Conference on Empirical Methods in Natural Language Lisbon, Portugal: Association for Computational Linguistics, Sept. 2015, pp. 1412–1421.
[14] A. Mahendran and A. Vedaldi. “Understanding deep image representations by inverting them”. In: 2015 IEEE Conference on Computer Vision and Pattern Recognition (CVPR). June 2015, pp. 5188–5196.
[15] Andreas Maier, Stefan Wenhardt, Tino Haderlein, et al. “A Microphone-independent Visualization Technique for Speech Disorders”. In: Proceedings of the 10th Annual Conference of the International Speech Communication Brighton, England, 2009, pp. 951–954.
[16] Volodymyr Mnih, Nicolas Heess, Alex Graves, et al. “Recurrent Models of Visual Attention”. In: CoRR abs/1406.6247 (2014). arXiv: 1406.6247.
[17] Chris Olah, Alexander Mordvintsev, and Ludwig Schubert. “Feature Visualization”. In: Distill (2017). https://distill.pub/2017/feature-visualization.
[18] Prajit Ramachandran, Niki Parmar, Ashish Vaswani, et al. “Stand-Alone Self-Attention in Vision Models”. In: arXiv e-prints, arXiv:1906.05909 (June 2019), arXiv:1906.05909. arXiv: 1906.05909 [cs.CV].
[19] Mahmood Sharif, Sruti Bhagavatula, Lujo Bauer, et al. “Accessorize to a Crime: Real and Stealthy Attacks on State-of-the-Art Face Recognition”. In: Proceedings of the 2016 ACM SIGSAC Conference on Computer and Communications CCS ’16. Vienna, Austria: ACM, 2016, pp. 1528–1540. A.
[20] K. Simonyan, A. Vedaldi, and A. Zisserman. “Deep Inside Convolutional Networks: Visualising Image Classification Models and Saliency Maps”. In: International Conference on Learning Representations (ICLR) (workshop track). 2014.
[21] J.T. Springenberg, A. Dosovitskiy, T. Brox, et al. “Striving for Simplicity: The All Convolutional Net”. In: International Conference on Learning Representations (ICRL) (workshop track). 2015.
[22] Dmitry Ulyanov, Andrea Vedaldi, and Victor S. Lempitsky. “Deep Image Prior”. In: CoRR abs/1711.10925 (2017). arXiv: 1711.10925.
[23] Ashish Vaswani, Noam Shazeer, Niki Parmar, et al. “Attention Is All You Need”. In: CoRR abs/1706.03762 (2017). arXiv: 1706.03762.
[24] Kelvin Xu, Jimmy Ba, Ryan Kiros, et al. “Show, Attend and Tell: Neural Image Caption Generation with Visual Attention”. In: CoRR abs/1502.03044 (2015). arXiv: 1502.03044.
[25] Jason Yosinski, Jeff Clune, Anh Mai Nguyen, et al. “Understanding Neural Networks Through Deep Visualization”. In: CoRR abs/1506.06579 (2015). arXiv: 1506.06579.
[26] Matthew D. Zeiler and Rob Fergus. “Visualizing and Understanding Convolutional Networks”. In: Computer Vision — ECCV 2014: 13th European Conference, Zurich, Switzerland, Cham: Springer International Publishing, 2014, pp. 818–833.
[27] Han Zhang, Ian Goodfellow, Dimitris Metaxas, et al. “Self-Attention Generative Adversarial Networks”. In: Proceedings of the 36th International Conference on Machine Learning. Vol. 97. Proceedings of Machine Learning Research. Long Beach, California, USA: PMLR, Sept. 2019, pp. 7354–7363. A.

视觉化和注意力——第四部分

原文:https://towardsdatascience.com/visualization-attention-part-4-a1cfefce8bd3?source=collection_archive---------46-----------------------

FAU 讲座笔记关于深度学习

基于梯度和优化的方法

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

FAU 大学的深度学习。下图 CC BY 4.0 来自深度学习讲座

这些是 FAU 的 YouTube 讲座 深度学习 的讲义。这是与幻灯片匹配的讲座视频&的完整抄本。我们希望,你喜欢这个视频一样多。当然,这份抄本是用深度学习技术在很大程度上自动创建的,只进行了少量的手动修改。 自己试试吧!如果您发现错误,请告诉我们!

航行

上一讲 / 观看本视频 / 顶级 / 下一讲

欢迎回到深度学习!今天,我们想深入了解可视化技术,特别是基于梯度和基于优化的过程。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

“你想知道矩阵是什么。”使用 gifify 创建的图像。来源: YouTube

好吧,让我们看看我给你带来了什么。让我们先谈谈基于梯度的可视化,这里的想法是,我们想找出哪个输入像素对神经元最重要。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

将类别“cat”反向传播到输入域。 CC 下的图片来自深度学习讲座的 4.0 。

如果我们要改变它,什么会导致我们的神经网络的实际输出的巨大变化?我们实际上想要计算的是所考虑的神经元的偏导数,可能是对于类“猫”的输出神经元。然后,我们要计算输入的偏导数。这实质上是通过整个网络的反向传播。然后,我们可以把这种渐变想象成一种图像,就像我们在这里对猫图像所做的那样。你可以看到,当然,这是一个颜色渐变。你可以看到,这是一个有点嘈杂的图像,但你可以看到,与类“猫”相关的东西,这里显然也位于图像中猫所在的区域。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

一个神经元的输出可以作为“伪损耗”。来自深度学习讲座CC BY 4.0 下的图片。

我们将学习几种不同的方法来做到这一点。第一个是在[20]的基础上。对于反向传播,我们实际上需要丢失我们想要反向传播的内容。我们简单地取一个伪损失,它是任意神经元或层的激活。通常,您想要做的是在输出层获取神经元,因为它们可以与类相关联。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Deconvnet 是一种模拟通过网络的反向传递的网络。 CC 下的图片来自深度学习讲座的 4.0 。

你还可以做的是,不使用反向传播,你可以建立一个几乎等效的替代方案,使用一种反向网络。这是来自[26]的 Deconvnet。这里,输入是经过训练的网络和一些图像。然后,您选择一个激活,并将所有其他激活设置为零。接下来,您构建一个反向网络,您可以看到这里的想法,它基本上包含与网络相同的内容,只是顺序相反,有所谓的取消轮询步骤。现在,通过这些非 pooling 步骤和逆向计算,你可以看到我们也可以产生一种梯度估计。这个的好处是,不需要任何训练。因此,您只需记录交换机中的池位置和反向网络的正向路径。实际上,除了我们将在几张幻灯片中讨论的整流线性单元之外,这与网络的反向传递相同。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

“这是构造。”使用 gifify 创建的图像。来源: YouTube

在这里,我们展示了前九个激活的可视化,梯度,以及相应的补丁。例如,你可以用这个来揭示这种特征地图似乎集中在绿色斑块区域。你可能会认为这更像是一种背景特征,试图检测图像中的草地。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

来自 Deconvnet 的示例。来自深度学习讲座CC BY 4.0 下的图片。

那么,还有什么?嗯,有引导反向传播。导向反向传播是一个非常相似的概念。这里的想法是你想找到正相关的特征。所以我们寻找正梯度,因为我们假设正的特征是神经元感兴趣的特征。负梯度是神经元不感兴趣的梯度。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

反向传播与解卷积和导向反向传播。 CC 下的图片来自深度学习讲座的 4.0 。

因此,想法是将反向传播中的所有负梯度设置为零。我们现在可以向您展示 ReLU 在使用不同种类的梯度反向传播技术向前和向后传递时的不同过程。当然,如果你有这些输入激活,那么在 ReLU 的正向传递中,你可以简单地消除所有的负值,并把它们设置为零。现在,对于三种不同的选择,反向传播会发生什么?让我们看看典型的反向传播是怎么做的,注意这里我们用黄色显示了来自敏感度的负条目。如果您现在尝试反向传播,您必须记住正向传递中的哪些条目是负的,并再次将这些值设置为零。为了做到这一点,你保留来自前一层的敏感性的一切。现在,如果您取消配置,您不需要记住前向传递的开关,但您可以将灵敏度为负的所有条目设置为零,然后反向传递。现在这样,导向反向传播实际上两者都做了。因此它记住了前向传递,并将所有这些元素设置为零。它将灵敏度的所有元素设置为零。因此,就消除负值而言,它本质上是反向传播和去卷积的结合。你可以看到引导反向传播在整个反向传播过程中只保持很小的灵敏度。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

比较中的梯度估计。 CC 下的图片来自深度学习讲座的 4.0 。

现在让我们看看不同梯度的对比。你可以看到的一件事是,在 Deconvnet 中,我们得到了相当嘈杂的激活和反向传播。我们可以看到,我们至少专注于感兴趣的对象,引导反向传播具有非常稀疏的表示,但即使在这个梯度图像中,也可以非常清楚地看到最重要的特征,如猫的眼睛等。所以,这是一个非常好的方法,可以帮助你揭示哪些神经元在特定的输入中关注什么活动。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

梯度的绝对值产生显著图。来自深度学习讲座CC BY 4.0 下的图片。

这最终导致显著图。在这里,你不想调查什么影响两个神经元,而是想调查像素对一个类“狗”的影响。现在,您将伪损失视为一项非标准化任务,计算图像像素的梯度,并使用绝对值。然后,我们对此进行了有趣的观察,它产生了一个显著图来定位图像中的狗,即使网络从未受过定位训练。因此,这是一种非常有趣的方法,可以帮助您识别决定性信息在图像中的实际位置。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

"母体是一个系统,尼欧."使用 gifify 创建的图像。来源: YouTube

还能做什么?嗯,有基于优化的参数可视化。现在,我们的想法是要走向不同的层次。因此,如果我们想要针对神经元、激活图、层、实际逻辑或本质上是 softmax 函数的类概率进行优化,我们将它们视为伪损失,以便创建最佳输入。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们可以自由选择要优化的网络部分。来自深度学习讲座CC BY 4.0 下的图片。

我们已经在第一个视频中看到了非常相似的东西,我们在 DeepDream 中看到了这个例子。概念主义本质上是在做一些非常相似的事情。它接受一些输入,然后改变输入,使得不同的神经元被最大限度地激活。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

DeepDream 的《海军上将狗》等创作。 CC 下的图片来自深度学习讲座的 4.0 。

在那里你可以看到这些神经元以某种方式编码了它喜欢识别的动物或事物的特定部分。如果你现在最大化这个特定神经元的输入,你可以看到它喜欢的形状开始出现在这个图像中。所以,这个想法是,你改变输入,使神经元被最大限度地激活。因此,我们本质上不只是计算图像的梯度,而且我们还会根据特定图层、softmax 或输出主动更改图像。当然,最初的想法是可视化。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

无概念主义允许向特定的神经元、层或类调整和想象。 CC 下的图片来自深度学习讲座的 4.0 。

所以,当呈现图像时,你试图通过做梦来理解网络的内部运作。你从图像甚至噪声作为输入开始。然后,调整图像,使整个图层的激活最大化。对于不同的图层,它会突出显示图像中不同的东西。所以,我们可以创造这种观念。如果您主要激活早期层,您会看到图像内容并没有太大的变化,但您在图像中创建了那些笔刷和笔触外观。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

概念主义可以揭示神经元、层次和整个网络的亲缘关系。来自深度学习讲座CC BY 4.0 下的图片。

现在,你甚至可以开始随机输入。那么就不仅仅是针对特定的输出优化输入了。你需要一些额外的调整。我们可以用这个小公式来证明。所以,我们现在取一些输入 x ,这是一个随机的图像。我们把它输入我们的网络和一个特定的神经元或输出神经元。然后,我们最大化激活,并添加一个正则化。如果我们的 x 偏离了一个特定的规范,这个正则化器就会惩罚。这个例子中用到的,就是 L2 范数。稍后,我们还会看到,也许其他规范也可能适用于此。我们从右上角所示的噪声输入开始。然后,您进行优化,直到找到特定神经元或层的最大激活。同时,你假设你的输入图像必须平滑,否则,你会产生非常非常嘈杂的图像。它们不太适合解释,当然,右下方的图像向你展示了一些你知道可以解释的结构。所以,你看到这些抽象的特征出现了,然后你可以把它作为一种从小到大的级联,这就产生了所谓的无概念主义。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

“哑铃”类的重构图像。 CC 下的图片来自深度学习讲座的 4.0 。

在这里,我们可以利用这一点,例如,揭示神经网络分类过程中隐藏的弱点。这里,我们看到了“哑铃”类的不同实现。你可以看到,它不仅仅是图像中显示的哑铃,它还再现了拿着哑铃的手臂。因此,我们在这里可以看到,当相关的事物被呈现给网络时,它们是被学习的。所以,我们可以算出,特定类别或神经元对输入的记忆是什么。所以,我们再次认识到好的数据非常重要。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

给定某一层的激活,网络的输入可以被重构。来自深度学习讲座CC BY 4.0 下的图片。

这实际上引导我们到了另一步,我们可以做的是弄清楚神经网络内部发生了什么。这些是反转技术,这里的想法和我们在概念论中看到的非常相似。但是现在,我们实际上想从激活中得到实际的输入。例如,您经常听到的匿名数据的安全措施是:“让我们只激活第 5 层,并丢弃所有以前的激活和输入。我们只存储第 5 层激活,因为如果我只知道第 5 层激活,就没有办法重建原始图像。”

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

“你想告诉我什么?那我能躲过子弹吗?”-“不,尼奥”。使用 gifify 创建的图像。来源: YouTube

现在有了反演,如果你知道网络,它的过程,和特定层的特定激活,那么你可以尝试重建实际输入是什么。同样,我们在特定的层中有我们网络的输出。假设 f( x )是一层的输出,我们有 y hat。现在, y 这是被测网络的输出或被测层的激活。因此,我们激活了第 5 层,但我们不知道输入 x 是什么。因此,我们正在寻找 x ,并尝试最小化该函数,以便我们找到与该特定激活最匹配的 x

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

反演的不稳定性可以通过正则化来解决。来自深度学习讲座的 4.0CC 下的图片。

这是一个经典的反问题。为了获得更稳定的输出,您添加了一个额外的正则化器λ乘以 R( x )。这个正则项非常重要。因此,正则化使反演稳定,有非常常见的正则化技术,它们使用自然图像的特定属性来创建可能是自然图像的东西。当然,高频噪声会降低重建质量。这就是为什么我们使用这个额外的 L2 范数,以防止在创建的图像中出现噪声。除此之外,还可以用所谓的全变差。我们知道,自然图像通常具有稀疏的梯度,全变差是一种最小化技术,可以强制图像具有非常低的梯度。渐变本质上是边缘,在典型的图像中,只有几个边缘像素和许多更均匀的区域。因此,电视最小化产生的图像边缘很少,当然也有一点噪声。它还特别允许高分段常数跳跃,就像在真实边缘中一样。当然,您也可以使用低通滤波器和其他边缘保留滤波器。一个经典的方法是小波正则化。这很简单,也很有效,当然,它还会抑制真实边缘和其他高频信息。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

转换的显式使用也可以支持正则化。 CC 下的图片来自深度学习讲座的 4.0 。

好吧,还能做什么?您也可以使用其他正则化,如变换鲁棒性。因此,输入实际上应该对特殊变换保持不变。这类似于数据扩充,因此,您可以随机旋转、缩放或抖动 x 。所以,这也很简单,而且在产生可识别的特征方面很有效。通常方向是被抑制的,即使它是信息性的。所以,我们必须小心谨慎。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

正规化也是可以学习的。来自深度学习讲座CC BY 4.0 下的图片。

最后一种非常常见的正则化是你已经知道了先验知识。例如,你可以使用一个训练网络,说“我想在第 4 层有一个特定的分布。”然后,我试图生成具有非常相似特征的图像。这里,不是相对于我们知道有用的特定规范进行优化,而是假设在特定层中产生的表示对于测量图像的内容是有用的。然后,你实际上可以用它作为一种正则化来产生图像。所以当然,如果你想使用这样的东西,你需要一个训练有素的生成模型。这产生了非常好的图像,但它可能是模糊的,因为你引入结果的部分来自预先训练的网络。所以,你必须小心看待这个问题。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

“我想告诉你,当你准备好的时候,你就不需要这么做了。”使用 gifify 创建的图像。来源: YouTube

所以,让我们看一些例子[14]实际上是通过反演生成的图像。这真是令人印象深刻。同样,这是一个 AlexNet 类型的网络,这里有输入,然后是反演:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

不同层的输入和反演结果。 CC 下的图片来自深度学习讲座的 4.0 。

在 conv 第一层,你可以看到我们几乎可以准确地复制图像。ReLu 1 之后变化不大。合用——没有大的影响。然后,第二层,以此类推。可以看到,直到卷积层#4,我们非常接近真实输入。这已经经历了几个合并的步骤,但是我们仍然能够非常接近原始输入地再现输入。很有意思!然后,你会看到,我真的不得不走向第 6 层或第 7 层,直到我无法或几乎无法猜测原始输入是什么。因此,只有从第 6 层/第 7 层开始,我们才开始显著偏离原始输入。直到第 5 层,我们仍然可以很好地重建原始输入是什么。因此,如果有人告诉你,他们想通过删除前两层来匿名化数据,那么你会发现,利用这些反演技术,这可能不是一个好主意。仅仅通过查看激活和网络结构,你就有可能重建原始输入。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在这个深度学习讲座中,更多令人兴奋的事情即将到来。 CC 下的图片来自深度学习讲座的 4.0 。

好吧。所以下一次,我们想谈谈第二个话题,这个话题和可视化有点关系。我们想谈谈注意力和注意力机制。您已经看到,通过可视化技术,我们可以以某种方式找出哪些像素与哪种分类相关。现在,我们想进一步发展这一点,并利用这一点将网络的注意力引向特定的领域。所以,这也将是一个非常有趣的视频。期待在下一个视频中见到你。拜拜。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

先进的可视化技术可以帮助你避开子弹。然而,你仍然不能完全掌握网络内部发生了什么。使用 gifify 创建的图像。来源: YouTube

如果你喜欢这篇文章,你可以在这里找到更多的文章,或者看看我们的讲座。如果你想在未来了解更多的文章、视频和研究,我也会很感激关注 YouTubeTwitter脸书LinkedIn 。本文以 Creative Commons 4.0 归属许可发布,如果引用,可以转载和修改。如果你有兴趣从视频讲座中获得文字记录,试试自动博客

链接

约辛斯基等人:深度可视化工具箱
奥拉等人:特征可视化
亚当哈雷:MNIST 演示

参考

[1] Dzmitry Bahdanau, Kyunghyun Cho, and Yoshua Bengio. “Neural Machine Translation by Jointly Learning to Align and Translate”. In: 3rd International Conference on Learning Representations, ICLR 2015, San Diego, 2015.
[2] T. B. Brown, D. Mané, A. Roy, et al. “Adversarial Patch”. In: ArXiv e-prints (Dec. 2017). arXiv: 1712.09665 [cs.CV].
[3] Jianpeng Cheng, Li Dong, and Mirella Lapata. “Long Short-Term Memory-Networks for Machine Reading”. In: CoRR abs/1601.06733 (2016). arXiv: 1601.06733.
[4] Jacob Devlin, Ming-Wei Chang, Kenton Lee, et al. “BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding”. In: CoRR abs/1810.04805 (2018). arXiv: 1810.04805.
[5] Neil Frazer. Neural Network Follies. 1998. URL: https://neil.fraser.name/writing/tank/ (visited on 01/07/2018).
[6] Ross B. Girshick, Jeff Donahue, Trevor Darrell, et al. “Rich feature hierarchies for accurate object detection and semantic segmentation”. In: CoRR abs/1311.2524 (2013). arXiv: 1311.2524.
[7] Alex Graves, Greg Wayne, and Ivo Danihelka. “Neural Turing Machines”. In: CoRR abs/1410.5401 (2014). arXiv: 1410.5401.
[8] Karol Gregor, Ivo Danihelka, Alex Graves, et al. “DRAW: A Recurrent Neural Network For Image Generation”. In: Proceedings of the 32nd International Conference on Machine Learning. Vol. 37. Proceedings of Machine Learning Research. Lille, France: PMLR, July 2015, pp. 1462–1471.
[9] Nal Kalchbrenner, Lasse Espeholt, Karen Simonyan, et al. “Neural Machine Translation in Linear Time”. In: CoRR abs/1610.10099 (2016). arXiv: 1610.10099.
[10] L. N. Kanal and N. C. Randall. “Recognition System Design by Statistical Analysis”. In: Proceedings of the 1964 19th ACM National Conference. ACM ’64. New York, NY, USA: ACM, 1964, pp. 42.501–42.5020.
[11] Andrej Karpathy. t-SNE visualization of CNN codes. URL: http://cs.stanford.edu/people/karpathy/cnnembed/ (visited on 01/07/2018).
[12] Alex Krizhevsky, Ilya Sutskever, and Geoffrey E Hinton. “ImageNet Classification with Deep Convolutional Neural Networks”. In: Advances In Neural Information Processing Systems 25. Curran Associates, Inc., 2012, pp. 1097–1105. arXiv: 1102.0183.
[13] Thang Luong, Hieu Pham, and Christopher D. Manning. “Effective Approaches to Attention-based Neural Machine Translation”. In: Proceedings of the 2015 Conference on Empirical Methods in Natural Language Lisbon, Portugal: Association for Computational Linguistics, Sept. 2015, pp. 1412–1421.
[14] A. Mahendran and A. Vedaldi. “Understanding deep image representations by inverting them”. In: 2015 IEEE Conference on Computer Vision and Pattern Recognition (CVPR). June 2015, pp. 5188–5196.
[15] Andreas Maier, Stefan Wenhardt, Tino Haderlein, et al. “A Microphone-independent Visualization Technique for Speech Disorders”. In: Proceedings of the 10th Annual Conference of the International Speech Communication Brighton, England, 2009, pp. 951–954.
[16] Volodymyr Mnih, Nicolas Heess, Alex Graves, et al. “Recurrent Models of Visual Attention”. In: CoRR abs/1406.6247 (2014). arXiv: 1406.6247.
[17] Chris Olah, Alexander Mordvintsev, and Ludwig Schubert. “Feature Visualization”. In: Distill (2017). https://distill.pub/2017/feature-visualization.
[18] Prajit Ramachandran, Niki Parmar, Ashish Vaswani, et al. “Stand-Alone Self-Attention in Vision Models”. In: arXiv e-prints, arXiv:1906.05909 (June 2019), arXiv:1906.05909. arXiv: 1906.05909 [cs.CV].
[19] Mahmood Sharif, Sruti Bhagavatula, Lujo Bauer, et al. “Accessorize to a Crime: Real and Stealthy Attacks on State-of-the-Art Face Recognition”. In: Proceedings of the 2016 ACM SIGSAC Conference on Computer and Communications CCS ’16. Vienna, Austria: ACM, 2016, pp. 1528–1540. A.
[20] K. Simonyan, A. Vedaldi, and A. Zisserman. “Deep Inside Convolutional Networks: Visualising Image Classification Models and Saliency Maps”. In: International Conference on Learning Representations (ICLR) (workshop track). 2014.
[21] J.T. Springenberg, A. Dosovitskiy, T. Brox, et al. “Striving for Simplicity: The All Convolutional Net”. In: International Conference on Learning Representations (ICRL) (workshop track). 2015.
[22] Dmitry Ulyanov, Andrea Vedaldi, and Victor S. Lempitsky. “Deep Image Prior”. In: CoRR abs/1711.10925 (2017). arXiv: 1711.10925.
[23] Ashish Vaswani, Noam Shazeer, Niki Parmar, et al. “Attention Is All You Need”. In: CoRR abs/1706.03762 (2017). arXiv: 1706.03762.
[24] Kelvin Xu, Jimmy Ba, Ryan Kiros, et al. “Show, Attend and Tell: Neural Image Caption Generation with Visual Attention”. In: CoRR abs/1502.03044 (2015). arXiv: 1502.03044.
[25] Jason Yosinski, Jeff Clune, Anh Mai Nguyen, et al. “Understanding Neural Networks Through Deep Visualization”. In: CoRR abs/1506.06579 (2015). arXiv: 1506.06579.
[26] Matthew D. Zeiler and Rob Fergus. “Visualizing and Understanding Convolutional Networks”. In: Computer Vision — ECCV 2014: 13th European Conference, Zurich, Switzerland, Cham: Springer International Publishing, 2014, pp. 818–833.
[27] Han Zhang, Ian Goodfellow, Dimitris Metaxas, et al. “Self-Attention Generative Adversarial Networks”. In: Proceedings of the 36th International Conference on Machine Learning. Vol. 97. Proceedings of Machine Learning Research. Long Beach, California, USA: PMLR, Sept. 2019, pp. 7354–7363. A.

视觉化和注意力——第五部分

原文:https://towardsdatascience.com/visualization-attention-part-5-2c3c14e60548?source=collection_archive---------42-----------------------

FAU 讲座笔记关于深度学习

注意机制

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

FAU 大学的深度学习。下图 CC BY 4.0 来自深度学习讲座

这些是 FAU 的 YouTube 讲座 深度学习 的讲义。这是与幻灯片匹配的讲座视频&的完整抄本。我们希望,你喜欢这个视频一样多。当然,这份抄本是用深度学习技术在很大程度上自动创建的,只进行了少量的手动修改。 自己试试吧!如果您发现错误,请告诉我们!

航行

上一讲 / 观看本视频 / 顶级/下一讲

欢迎回到深度学习!今天,我想告诉你一些关于注意力机制以及如何利用它们来建立更好的深度神经网络。好,那么让我们把注意力集中在注意力和注意力机制上。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

什么是注意力? CC 下的图片来自深度学习讲座的 4.0 。

那么,什么是注意力呢?你看,人类通过转移我们的注意力来主动处理数据。因此,我们可以专注于图像的特定部分,因为它们携带不同的信息。当然,对于某些词,比如我们只能通过上下文推导出正确的意思。所以你想转移注意力,你转移注意力的方式也可能改变解读。所以,你想记住过去特定的相关事件,以便影响某个决定。这允许我们一次跟随一个部分,同时抑制与任务无关的信息。这就是我们的想法:你只需要关注相关的信息。你能想到的一个例子是鸡尾酒会问题。我们有很多不同的人在谈论,而你只关注一个人。通过特定的方式,比如看那个人的嘴唇,你可以把注意力集中在嘴唇上。然后你也可以使用你的立体声听觉作为一种波束形成器,只听那个特定的方向。这样做,你就能集中注意力在一个人身上,这个人就是你用这种注意力机制与之交谈的人。我们非常成功地做到了这一点,因为否则,我们将完全无法举办鸡尾酒会。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

一些引起注意的想法。 CC 下的图片来自深度学习讲座的 4.0 。

那么这个想法是什么呢?好吧,你已经在地图上看到了那些显著性。你可能会说我们只想看与我们决策相关的像素。为了做出决定,事实上,我们不会从图像开始,但我们想先谈谈序列到序列模型。在这里,您可以看到 CNN 类型的模型的梯度可视化,如果您现在开始绘制这些梯度,该模型用于从英语到德语的翻译。这基本上是我们在图像处理中已经讨论过的可视化技术。现在,您可以看到相应输出相对于特定输入的梯度。如果你这样做,你会注意到在大多数情况下,你会看到这基本上是一个线性关系。英语和德语在词汇方面有非常相似的序列。然后你会看到,以“到达纳瓦兹·谢里夫总理的官方住所”开始的序列的实际开始被翻译为“总理纳瓦兹·谢里夫·祖·埃雷钦的住所”。所以,“zu erreichen”是“to reach ”,但“to reach”在英语中是第一个,在德语中是最后一个。所以,这两者之间有很长的时间背景。这两个词实质上翻译成那两个。因此,我们可以利用梯度反向传播产生的信息来计算出输入序列的哪些部分与输出序列的哪些部分相关。现在的问题是,我们如何利用这一点来提高性能。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

使用 RNNs 的机器翻译。 CC 下的图片来自深度学习讲座的 4.0 。

让我们看一个典型的翻译模型。那么,如果你使用递归神经网络,通常在序列模型中做什么?你要做的是在编码器网络中进行前向传递。这接收一个输入序列。根据输入序列,正如我们之前讨论的,我们可以计算隐藏状态 h 下标 1 到 h 下标 T。因此,我们必须处理整个序列,以便计算 h 下标 T。然后, h 下标 T 用作解码器网络的上下文向量。所以, h 下标 T 本质上是这个句子的状态或实际意义的表示。然后, h 下标 T 被解码器网络解码成新的序列。然后,这产生了自己的隐藏状态的新序列,它们是 s 下标 1 到 s 下标 T’。所以请注意,输出当然可以是不同的长度。所以,我们有两个不同的字符串 T 和 T '。这也产生一个输出序列 y 下标 1 到 y 下标 T’。所以,这允许我们在输入和输出中模拟不同的长度,当然,在两种不同的语言中,你可能有不同数量的单词。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

整个句子必须被编码成单个状态向量。下图 CC BY 4.0 来自深度学习讲座

所以,当我们真正解码的时候。然后,你看到我们必须把所有东西都编码到这个上下文向量中,这种编码可能非常困难,因为我们必须把句子的全部意思编码到一个上下文向量中。即使对 LSTMs 来说,这也可能非常困难。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

注意力允许建立一个动态的焦点模型。 CC 下的图片来自深度学习讲座的 4.0 。

所以,现在的想法是引入注意力。注意序列到序列的建模可以用动态上下文向量来完成。现在我们有了这个上下文向量 h 下标 T。我们的问题是这个上下文向量 h 下标 T,它不允许对更早的输入进行任何访问,因为它只在序列的最末尾获得。因此,现在的想法是使用动态上下文向量作为所有先前隐藏状态的组合来提供对所有上下文的访问。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

动态内容向量的构造。来自深度学习讲座CC BY 4.0 下的图片。

这里,我们看到一个双向 RNN,它通过前向传递进行一次编码。所以,你从 x 下标 1 开始,创建一个隐藏状态 1,然后到 x2,依此类推。然后,你运行完全相反的序列。所以,你从 x 下标 n 开始,然后到 x 下标(n-1)来创建另一个上下文向量,这个向量完全来自对同一输入序列的反向处理。这样你就可以访问几个隐藏状态,这些隐藏状态,我们可以从两个通道中连接起来。有了这些隐藏状态,我们就可以用一些组合权重α进行线性组合。这是不同隐藏状态的加权平均值。因此,我们将它们乘以各自的α,将它们相加,并将其作为解码器 RNN 的附加动态上下文。所以,这个想法是,我们想用一个动态的过程来产生这些权重α。

好吧。那么,让我们看看我们如何实际计算这些α。在[1]中提出的想法是,你基本上试图产生对齐权重。因此,如果状态与解码中的当前观察相关,那么你想要得到高分。如果州不是那么相关,那么你想给它打低分。因此,α编码了当前状态相对于当前产生的输出的相关性。现在,你可能会说“好吧。那么,我怎样才能得到这个分数呢?”所以,当然,我们可以把它放到某个 softmax 函数里。然后,它们将在 0 和 1 之间缩放。这就解决了问题。因此,我们可以产生任何类型的相似性度量,并且我们实际上可以提出不同的方法。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

另一个翻译例子。 CC 下的图片来自深度学习讲座的 4.0 。

他们在[1]中提出的实际上是一个得分函数。现在,得分函数由矩阵 W 下标α和附加向量 v 下标α表示。这两个是可以训练的。因此,我们本质上利用了通用函数逼近的这一特性,我们不必设置得分函数,而是简单地训练它。因此,它决定了理想的对齐方式,即哪些输入对哪些输出很重要。好的一面是,您还可以可视化特定输入的权重。所以,它也允许通过看分数来解释。我们在右边的例子中这样做。这又是一个翻译设置,我们希望将英语翻译成法语。你可以看到这些排列基本上形成了一条线。但是有一个例外。所以你看到“欧洲经济区”被解码成“欧洲经济区”。所以,你可以看到有一个序列的反转,这个序列的反转也被比对分数在注意力中捕获。这是一个很好的计算得分函数的方法。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

不同的得分函数。来自深度学习讲座CC BY 4.0 下的图片。

有不同的选择。例如,在[7]中,他们简单地用两个状态之间的余弦来构成分数。你可以用一些权重矩阵得到一个广义内积,你可以得到一个点积,它本质上是两个状态之间的相关性,然后你还可以得到一个比例点积,它也考虑了隐藏状态的大小。所有这些都已经被探索过了,当然,这取决于你的目的,你实际计算的是什么。但是你可以看到,我们本质上是在尝试学习一个比较函数,它告诉我们哪个状态与哪个其他状态兼容。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

比较中的软硬注意。 CC 下的图片来自深度学习讲座的 4.0 。

好的。注意力有不同的种类。有软注意力和硬注意力之分。因此,到目前为止,我们基本上拥有完全可区分的软/全局注意力。但是对于大量的输入来说效率不是很高。你可以通过集中注意力来缓解。在这里,您可以看到一些输入。所以,你从图像中取出小块,从分布中取样。这当然意味着更低的计算时间。但不幸的是,采样过程是不可微的。然后,你将不得不研究其他的训练技巧,比如强化学习来训练这种能力。这需要更长的计算时间。所以,这是硬注意力的某种弊端。还有像局部注意力这样的东西,这是一种混合,你可以预测焦点和窗口或内核的中心位置。所以,让我们看看我们能做些什么。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

《出席秀》报纸。 CC 下的图片来自深度学习讲座的 4.0 。

你甚至可以把注意力和图像识别结合起来。有一份报纸[24]叫做《展示-出席-讲述》。它实际上有一个想法,你想有一个自动生成的图像标题。不同的元素在它们的图像中的关系触发不同的词。因此,这意味着注意力机制被用来提高字幕质量。这是如何工作的?你现在可以看到,我们可以计算一个特定单词的注意力。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

软注意的一个例子。来自深度学习讲座CC BY 4.0 下的图片。

这里,你看到生成的句子是“一个女人在公园里扔飞盘”。现在,我们可以把飞盘和这张注意力地图联系起来,你可以看到我们实际上是在图像中定位飞盘。因此,这实际上是一种非常好的方式,使用 CNN 特征图来将注意力集中在相应位置的相应解码上。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

软注意力和硬注意力。 CC 下的图片来自深度学习讲座的 4.0 。

这里有一个软注意和硬注意的比较。你可以看到,注意力地图是柔和产生的,它们更模糊,也不局限于局部,而强烈的注意力只看小块。这就是我们设计它的方式,但这两种技术都允许我们生成更好的图像描述。确定性软注意可以进行端到端的训练。好吧,对于硬注意力,我们必须使用强化学习来训练。[24]表明两种注意机制产生相同的单词序列。所以,它实际上工作得很好,你有这个副产品,你现在还可以在图像中定位东西。非常有趣的方法!

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

自我关注的概念。 CC 下的图片来自深度学习讲座的 4.0 。

你也可以用一种叫做“自我关注”的东西来扩展这一点。这里的想法是计算序列对自身的关注度。所以,我们想要解决的问题是,如果你有一些输入,比如“动物没有穿过街道,因为它太累了。”,那么我们想知道“它”是指“动物”还是“街道”。现在,我们的想法是用上下文信息来丰富标记的表示。当然,这是机器阅读、问题回答、推理等的一项重要技术。我们这里有一个例子:“联邦调查局正在追捕一名逃犯。”现在,我们要做的是计算序列对自身的关注度。这允许我们将输入的每个单词与输入的其他单词相关联。所以,我们可以产生这种自我关注。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

概述你所需要的就是关注建筑。来自深度学习讲座CC BY 4.0 下的图片。

这为什么有用?你可以看到,你也可以用它来进行机器翻译。他们提出的网络只是基于注意力。所以,机器翻译没有卷积,也没有递归。所以,注意力是你所需要的。现在的核心思想是通过这种自我关注机制来迭代地改善表现。这就产生了一种变压器架构。它有两个核心模块和编码器,这是自我注意步骤,以及用于合并不同注意头的局部全连接层。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

编码器使用自我关注。 CC 下的图片来自深度学习讲座的 4.0 。

因此,让我们更详细地看看它们。当然,你需要一个编码器。我们已经看到,对于单词,我们可以使用一次热编码。这是一种非常粗糙的表示。所以,你需要注意的就是网络学习嵌入算法。因此,使用通用函数逼近器来产生嵌入,以某种方式压缩输入。然后,它计算每个标记的自我关注度。所以,你可以说你有一个查询令牌,一个描述查询的关键字,你为潜在的信息产生一个值。它们是使用可训练的权重生成的。然后,查询和键之间的对齐是一个缩放的点积,它决定了 v 中元素的影响。因此,我们可以将其表示为 qk 的外积的 softmax,然后将其乘以向量 v 以产生关注值。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

你需要注意的是编码器和解码器。来自深度学习讲座的 4.0CC 下的图片。

现在有了这种关注,我们实际上有了多头关注。所以,我们不只是计算单一的注意力,而是每个标记的不同版本的注意力。这用于表示不同的子空间。然后,使用全连接层来重新组合该本地每令牌信息。然后将其堆叠起来,并使用[23]中的几个注意模块。因此,这允许一步一步的上下文集成。他们有一个额外的定位器编码来表示词序。这是现在的输入嵌入。现在,如果你看看解码器,它基本上遵循与编码器相同的概念。有一个额外的输入/输出注意步骤,自我注意只在先前的输出上计算。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

为什么要用“注意力是你所需要的全部”?来自深度学习讲座的 4.0CC 下的图片。

你可能会说我们为什么要这么做?嗯,它允许独立于距离的知识整合。这种位置编码仍然允许我们学习卷积一样的步骤。它非常通用,扩展甚至允许使用未标记的文本进行预训练,正如你在[4]中看到的。所以参照物就是所谓的伯特系统。BERT 完全由未标记的文本通过本质上预测文本序列而生成。对于许多不同的自然语言处理任务,BERT 嵌入已经被证明是非常强大的。一个非常流行的系统,用于在自然语言处理中生成无监督的特征表示。这些系统具有最先进的性能和更快的训练时间。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

本单元总结。 CC 下的图片来自深度学习讲座的 4.0 。

好吧。所以,让我们总结一下注意力。注意力是基于这样一种想法,即你希望将输入元素与特定的输出元素对齐或找出它们之间的相关性。注意力分数允许解释。它允许我们将非顺序任务重新表述为顺序任务。注意力本身就非常强大,因为它是一种转换机制。许多自然语言处理任务的最新技术都涉及到这些注意力机制。它在机器翻译、问题回答、情感分析等方面非常流行。但是它也被应用于视觉,例如在[27]中。当然,注意力也可以与卷积结合使用,但也有一个问题,即注意力层是否也可以被视为卷积的替代物,如[18]所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在这个深度学习讲座中,更多令人兴奋的事情即将到来。来自深度学习讲座CC BY 4.0 下的图片。

好吧。那么,下一次在深度学习中,接下来会发生什么?好了,接下来是深度强化学习!非常酷的技术。我们将会有几个关于这个的视频,我们想真正向你展示这个范例。如何为玩某些游戏产生超人的表现?因此,我们的策略是,我们希望训练能够在特定环境中解决特定任务的代理。我们将向你展示一种从玩游戏本身来确定游戏策略的算法。在这里,神经网络正在超越感知,真正做出决策。如果你看了接下来的几个视频,你也会得到指导,如何在雅达利游戏中最终击败你所有的朋友。我们还将向你展示一个在围棋中击败所有人类的秘方。所以,请继续关注我们。观看接下来的几个视频。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

综合题。 CC 下的图片来自深度学习讲座的 4.0 。

如果你想和我们一起备考,看看下面几个问题就好了:为什么可视化很重要?每个人都应该知道“什么是反例?”。此外,你应该能够描述所使用的技术。基于梯度的可视化技术、基于优化的技术、概念论和反演技术。为什么在第三层之后切断你的网络并只保留激活是不安全的?当然,如果你知道网络架构,它们是可以反过来的。因此,如果你存储激活,它可能是不安全和匿名的。我们有一些进一步阅读的链接。特别是深度可视化工具箱真的很有用。特别是,如果你想学习更多关于注意力技巧的知识,我们在这个视频中只是粗略地介绍了一下,关于这个还有很多要说的。但是接下来我们将不得不深入序列建模和机器翻译,我们无法在本课程中详细介绍。非常感谢您的收听,希望在下一段视频中见到您。拜拜。

如果你喜欢这篇文章,你可以在这里找到更多的文章,或者看看我们的讲座。如果你想在未来了解更多的文章、视频和研究,我也会很感激关注 YouTubeTwitter脸书LinkedIn 。本文以 Creative Commons 4.0 归属许可发布,如果引用,可以转载和修改。如果你有兴趣从视频讲座中获得文字记录,试试自动博客

链接

约辛斯基等人:深度可视化工具箱
奥拉等人:特征可视化
亚当哈雷:MNIST 演示

参考

[1] Dzmitry Bahdanau, Kyunghyun Cho, and Yoshua Bengio. “Neural Machine Translation by Jointly Learning to Align and Translate”. In: 3rd International Conference on Learning Representations, ICLR 2015, San Diego, 2015.
[2] T. B. Brown, D. Mané, A. Roy, et al. “Adversarial Patch”. In: ArXiv e-prints (Dec. 2017). arXiv: 1712.09665 [cs.CV].
[3] Jianpeng Cheng, Li Dong, and Mirella Lapata. “Long Short-Term Memory-Networks for Machine Reading”. In: CoRR abs/1601.06733 (2016). arXiv: 1601.06733.
[4] Jacob Devlin, Ming-Wei Chang, Kenton Lee, et al. “BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding”. In: CoRR abs/1810.04805 (2018). arXiv: 1810.04805.
[5] Neil Frazer. Neural Network Follies. 1998. URL: https://neil.fraser.name/writing/tank/ (visited on 01/07/2018).
[6] Ross B. Girshick, Jeff Donahue, Trevor Darrell, et al. “Rich feature hierarchies for accurate object detection and semantic segmentation”. In: CoRR abs/1311.2524 (2013). arXiv: 1311.2524.
[7] Alex Graves, Greg Wayne, and Ivo Danihelka. “Neural Turing Machines”. In: CoRR abs/1410.5401 (2014). arXiv: 1410.5401.
[8] Karol Gregor, Ivo Danihelka, Alex Graves, et al. “DRAW: A Recurrent Neural Network For Image Generation”. In: Proceedings of the 32nd International Conference on Machine Learning. Vol. 37. Proceedings of Machine Learning Research. Lille, France: PMLR, July 2015, pp. 1462–1471.
[9] Nal Kalchbrenner, Lasse Espeholt, Karen Simonyan, et al. “Neural Machine Translation in Linear Time”. In: CoRR abs/1610.10099 (2016). arXiv: 1610.10099.
[10] L. N. Kanal and N. C. Randall. “Recognition System Design by Statistical Analysis”. In: Proceedings of the 1964 19th ACM National Conference. ACM ’64. New York, NY, USA: ACM, 1964, pp. 42.501–42.5020.
[11] Andrej Karpathy. t-SNE visualization of CNN codes. URL: http://cs.stanford.edu/people/karpathy/cnnembed/ (visited on 01/07/2018).
[12] Alex Krizhevsky, Ilya Sutskever, and Geoffrey E Hinton. “ImageNet Classification with Deep Convolutional Neural Networks”. In: Advances In Neural Information Processing Systems 25. Curran Associates, Inc., 2012, pp. 1097–1105. arXiv: 1102.0183.
[13] Thang Luong, Hieu Pham, and Christopher D. Manning. “Effective Approaches to Attention-based Neural Machine Translation”. In: Proceedings of the 2015 Conference on Empirical Methods in Natural Language Lisbon, Portugal: Association for Computational Linguistics, Sept. 2015, pp. 1412–1421.
[14] A. Mahendran and A. Vedaldi. “Understanding deep image representations by inverting them”. In: 2015 IEEE Conference on Computer Vision and Pattern Recognition (CVPR). June 2015, pp. 5188–5196.
[15] Andreas Maier, Stefan Wenhardt, Tino Haderlein, et al. “A Microphone-independent Visualization Technique for Speech Disorders”. In: Proceedings of the 10th Annual Conference of the International Speech Communication Brighton, England, 2009, pp. 951–954.
[16] Volodymyr Mnih, Nicolas Heess, Alex Graves, et al. “Recurrent Models of Visual Attention”. In: CoRR abs/1406.6247 (2014). arXiv: 1406.6247.
[17] Chris Olah, Alexander Mordvintsev, and Ludwig Schubert. “Feature Visualization”. In: Distill (2017). https://distill.pub/2017/feature-visualization.
[18] Prajit Ramachandran, Niki Parmar, Ashish Vaswani, et al. “Stand-Alone Self-Attention in Vision Models”. In: arXiv e-prints, arXiv:1906.05909 (June 2019), arXiv:1906.05909. arXiv: 1906.05909 [cs.CV].
[19] Mahmood Sharif, Sruti Bhagavatula, Lujo Bauer, et al. “Accessorize to a Crime: Real and Stealthy Attacks on State-of-the-Art Face Recognition”. In: Proceedings of the 2016 ACM SIGSAC Conference on Computer and Communications CCS ’16. Vienna, Austria: ACM, 2016, pp. 1528–1540. A.
[20] K. Simonyan, A. Vedaldi, and A. Zisserman. “Deep Inside Convolutional Networks: Visualising Image Classification Models and Saliency Maps”. In: International Conference on Learning Representations (ICLR) (workshop track). 2014.
[21] J.T. Springenberg, A. Dosovitskiy, T. Brox, et al. “Striving for Simplicity: The All Convolutional Net”. In: International Conference on Learning Representations (ICRL) (workshop track). 2015.
[22] Dmitry Ulyanov, Andrea Vedaldi, and Victor S. Lempitsky. “Deep Image Prior”. In: CoRR abs/1711.10925 (2017). arXiv: 1711.10925.
[23] Ashish Vaswani, Noam Shazeer, Niki Parmar, et al. “Attention Is All You Need”. In: CoRR abs/1706.03762 (2017). arXiv: 1706.03762.
[24] Kelvin Xu, Jimmy Ba, Ryan Kiros, et al. “Show, Attend and Tell: Neural Image Caption Generation with Visual Attention”. In: CoRR abs/1502.03044 (2015). arXiv: 1502.03044.
[25] Jason Yosinski, Jeff Clune, Anh Mai Nguyen, et al. “Understanding Neural Networks Through Deep Visualization”. In: CoRR abs/1506.06579 (2015). arXiv: 1506.06579.
[26] Matthew D. Zeiler and Rob Fergus. “Visualizing and Understanding Convolutional Networks”. In: Computer Vision — ECCV 2014: 13th European Conference, Zurich, Switzerland, Cham: Springer International Publishing, 2014, pp. 818–833.
[27] Han Zhang, Ian Goodfellow, Dimitris Metaxas, et al. “Self-Attention Generative Adversarial Networks”. In: Proceedings of the 36th International Conference on Machine Learning. Vol. 97. Proceedings of Machine Learning Research. Long Beach, California, USA: PMLR, Sept. 2019, pp. 7354–7363. A.

用 Plotly 实现时间序列交换数据的可视化

原文:https://towardsdatascience.com/visualization-for-timeseries-exchange-data-8c9f50d4d2d4?source=collection_archive---------17-----------------------

最近,我有机会处理 crypto exchange 公共数据,这使我能够使用最好的可视化工具之一的 Plotly 库可视化地探索数据,因为它将使我们能够拥有通用的交互式图形,而不用担心编码部分——就像我过去使用 Bokeh 一样。

如果您使用笔记本进行分析,为了保持整洁,我建议您在一个. py 文件中编写帮助函数,然后导入它。

我将分享代码,这样您将能够看到 Plotly 是如何工作的,并将其用于您的数据

所以让我们开始吧!

了解数据

像往常一样,首先要做的是获得对数据的直觉,这样我们可以更有效地采用哪种可视化。

在这种情况下,数据是一组不同的文件,每天都包含关于订单深度的信息( DOB 文件)和交易(交易文件)。

第一个操作是收集所有文件并将其聚合,构建一个包含某个时间范围内(在本例中为四个月)所有数据的数据框架。

DOB 数据包含最好的 5 个要价和 5 个出价水平,包括价格和大小,从最好到最差以及时间戳数据。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

交易数据包含已执行交易的信息,包括价格、基数和接受方(买入或卖出)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

没有什么特别奇特的,所以让我们开始做一些 EDA。

DOB EDA

箱线图是可视化数据分布的最酷的方式之一,所以让我们从它们开始,看看大小和价格

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

尺寸盒图

我们已经可以看到数据是倾斜的,因为中值非常低,并且有明显的异常值。让我们放大,Plotly 的一些东西,你可以直接在图形上做,同时有数字信息执行鼠标悬停。

此外,只需点击图例,就可以进行过滤。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们可以看到中间值是 0.45,最大值等于 412,中间有很多异常值。

代码:

import plotly.graph_objs as go# specific function
def draw_dob_size_box_plots(df_dob):
    _draw_dob_box_plots(df_dob, 'size')# generic "private" function
def _draw_dob_box_plots(df_dob, size_or_price):
    trace_asks0 = go.Box(
        y=df_dob['asks[0].' + size_or_price],
        name='asks[0]' + size_or_price,
        marker=dict(
            color='#3D9970'
        )
    )
    trace_bids0 = go.Box(
        y=df_dob['bids[0].' + size_or_price],
        name='bids[0].' + size_or_price,
        marker=dict(
            color='#3D9970'
        )
    )
    trace_asks1 = go.Box(
        y=df_dob['asks[1].' + size_or_price],
        name='asks[1].' + size_or_price,
        marker=dict(
            color='#6D9970'
        )
    )
    trace_bids1 = go.Box(
        y=df_dob['bids[1].' + size_or_price],
        name='bids[1].' + size_or_price,
        marker=dict(
            color='#6D9970'
        )
    )
    trace_asks2 = go.Box(
        y=df_dob['asks[2].' + size_or_price],
        name='asks[2].' + size_or_price,
        marker=dict(
            color='#9D9970'
        )
    )
    trace_bids2 = go.Box(
        y=df_dob['bids[2].' + size_or_price],
        name='bids[2].' + size_or_price,
        marker=dict(
            color='#9D9970'
        )
    )
    trace_asks3 = go.Box(
        y=df_dob['asks[3].' + size_or_price],
        name='asks[3].' + size_or_price,
        marker=dict(
            color='#BD9970'
        )
    )
    trace_bids3 = go.Box(
        y=df_dob['bids[3].' + size_or_price],
        name='bids[3].' + size_or_price,
        marker=dict(
            color='#BD9970'
        )
    )
    trace_asks4 = go.Box(
        y=df_dob['asks[4].' + size_or_price],
        name='asks[4].' + size_or_price,
        marker=dict(
            color='#ED9970'
        )
    )
    trace_bids4 = go.Box(
        y=df_dob['bids[4].' + size_or_price],
        name='bids[4].' + size_or_price,
        marker=dict(
            color='#ED9970'
        )
    )data = [trace_asks0, trace_bids0, trace_asks1, trace_bids1,                          trace_asks2, trace_bids2, \
            trace_asks3, trace_bids3, trace_asks4, trace_bids4]
    layout = go.Layout(
        yaxis=dict(
            title=size_or_price + 'Boxplot',
            zeroline=False
        )
    )
    fig = go.Figure(data=data, layout=layout)
    fig.show()

正如您所看到的,代码很简单:您从特定的源构建不同的数据可视化,设置特定的可视化选项,然后将所有这些放在一起。所以,用相对较少的线条,就有可能构建一个具有多重数据和交互的图形。

让我们在价格上做同样的事情

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

价格箱线图

在这里,数据不那么倾斜,但是异常值清晰可见。

如果你想了解更多关于箱线图的知识,从这里的开始

当我们处理时间序列时,时间是一个相关的因素。让我们开始看看数据是如何随时间分布的。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

DOB 数据直方图

我们可以在一月份看到大量的元素,甚至在四月份看到一个峰值。

为了说明构建此图是多么容易,下面是使用的代码:

import plotly.express as pxdf = px.data.tips()
fig = px.histogram(df_dob, x=”date_time_coinapi”)
fig.show()

让我们看看买卖价格是如何随时间变化的。为了简单起见,我只放第一层,但是代码会呈现所有层。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

要价和出价第一级

放大查看一些数值超级简单。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

放大第一级的要价和出价

代码:

import plotly.graph_objs as go
def draw_dob_price_timeseries(df_dob):
    elements0 = ['asks[0].price','bids[0].price']
    elements1 = ['asks[1].price','bids[1].price']
    elements2 = ['asks[2].price','bids[2].price']
    elements3 = ['asks[3].price','bids[3].price']
    elements4 = ['asks[4].price','bids[4].price']
    elements = [elements0, elements1, elements2, elements3, elements4]
    for el in elements:
        _draw_dob_timeseries(df_dob, el, 'Price timeseries')def _draw_dob_timeseries(df_dob, elements, title):
    trace_asks0 = go.Scatter(
        x = df_dob.date_time_exchange,
        y=df_dob[elements[0]],
        name=elements[0],
        line = dict(color = '#17BECF'),
        opacity = 0.8 
    )
    trace_bids0 = go.Scatter(
        x = df_dob.date_time_exchange,
        y=df_dob[elements[1]],
        name=elements[1],
        line = dict(color = '#7F7F7F'),
        opacity = 0.8    
    )
    data = [trace_asks0, trace_bids0]
    layout = go.Layout(
        yaxis=dict(
            title=title,
            zeroline=False
        )
    )
    fig = go.Figure(data=data, layout=layout)
    fig.show()

def _draw_dob_box_plots(df_dob, size_or_price):
    trace_asks0 = go.Box(
        y=df_dob['asks[0].' + size_or_price],
        name='asks[0]' + size_or_price,
        marker=dict(
            color='#3D9970'
        )
    )
    trace_bids0 = go.Box(
        y=df_dob['bids[0].' + size_or_price],
        name='bids[0].' + size_or_price,
        marker=dict(
            color='#3D9970'
        )
    )
    trace_asks1 = go.Box(
        y=df_dob['asks[1].' + size_or_price],
        name='asks[1].' + size_or_price,
        marker=dict(
            color='#6D9970'
        )
    )
    trace_bids1 = go.Box(
        y=df_dob['bids[1].' + size_or_price],
        name='bids[1].' + size_or_price,
        marker=dict(
            color='#6D9970'
        )
    )
    trace_asks2 = go.Box(
        y=df_dob['asks[2].' + size_or_price],
        name='asks[2].' + size_or_price,
        marker=dict(
            color='#9D9970'
        )
    )
    trace_bids2 = go.Box(
        y=df_dob['bids[2].' + size_or_price],
        name='bids[2].' + size_or_price,
        marker=dict(
            color='#9D9970'
        )
    )
    trace_asks3 = go.Box(
        y=df_dob['asks[3].' + size_or_price],
        name='asks[3].' + size_or_price,
        marker=dict(
            color='#BD9970'
        )
    )
    trace_bids3 = go.Box(
        y=df_dob['bids[3].' + size_or_price],
        name='bids[3].' + size_or_price,
        marker=dict(
            color='#BD9970'
        )
    )
    trace_asks4 = go.Box(
        y=df_dob['asks[4].' + size_or_price],
        name='asks[4].' + size_or_price,
        marker=dict(
            color='#ED9970'
        )
    )
    trace_bids4 = go.Box(
        y=df_dob['bids[4].' + size_or_price],
        name='bids[4].' + size_or_price,
        marker=dict(
            color='#ED9970'
        ))data = [trace_asks0, trace_bids0, trace_asks1, trace_bids1, trace_asks2, trace_bids2, \
            trace_asks3, trace_bids3, trace_asks4, trace_bids4]
    layout = go.Layout(
        yaxis=dict(
            title=size_or_price + 'Boxplot',
            zeroline=False
        )
    )
    fig = go.Figure(data=data, layout=layout)
    fig.show()

这里的代码多了一点,但结构是一样的。

交易 EDA

让我们也从箱线图开始,关注买卖中的价格:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

买入和卖出价格方框图

然后是一个条形图,显示买卖操作的数量:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

交易并排计算

import plotly.graph_objs as go
def draw_trades_bars(df_trades):
    trace0 = **go.Bar**(
        x = np.array(df_trades[df_trades.taker_side ==  'BUY'].price.count()),
        name = 'Number of buy',
        marker=dict(
            color='#009970')
    )trace1 = **go.Bar**(
        x = np.array(df_trades[df_trades.taker_side == 'SELL'].price.count()), 
        name = 'Number of sell',
        marker=dict(
            color='#DD0000')
    )

    data = [trace0, trace1]
    layout = go.Layout(
        yaxis=dict(
            title='Trades Bar',
            zeroline=False
        )
    )
    fig = go.Figure(data=data, layout=layout)
    fig.show()

如你所见,结构总是相同的,但是在这种情况下,我们使用 go。Bar 代替 go.Scatter

让我们看看交易柱状图:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

交易直方图

二月后,活动减少,没有峰值。

组合 EDA

让我们把所有的东西放在一起,看看我们是否能获得更多关于数据的直觉。

为了简化分析,我们将汇总两个数据,以 1 小时为间隔重新采样,并取 5 个值中的最大值。

RESAMPLE_TIME = '1H'
df_dob_resampled = df_dob.copy()
df_dob_resampled.index = df_dob_resampled['date_time_exchange'] 
df_dob_resampled = df_dob_resampled.**resample**(RESAMPLE_TIME).max()
df_dob_resampled.drop(columns=['date_time_exchange','date_time_coinapi'], inplace=True)df_dob_resampled['max_asks_size'] = df_dob_resampled[['asks[0].size','asks[1].size', 'asks[2].size', 'asks[3].size', 'asks[4].size']].**max**(axis=1)
df_dob_resampled['max_bids_size'] = df_dob_resampled[['bids[0].size','bids[1].size', 'bids[2].size', 'bids[3].size', 'bids[4].size']].**max**(axis=1)
df_dob_resampled['max_asks_price'] = df_dob_resampled[['asks[0].price','asks[1].price', 'asks[2].price', 'asks[3].price', 'asks[4].price']].**max**(axis=1)
df_dob_resampled['max_bids_price'] = df_dob_resampled[['bids[0].price','bids[1].price', 'bids[2].price', 'bids[3].price', 'bids[4].price']].**max**(axis=1)df_dob_resampled.drop(columns=[
                      'asks[0].size','asks[1].size', 'asks[2].size', 'asks[3].size', 'asks[4].size', \
                      'bids[0].size','bids[1].size', 'bids[2].size', 'bids[3].size', 'bids[4].size', \
                      'asks[0].price','asks[1].price', 'asks[2].price', 'asks[3].price', 'asks[4].price', \
                      'bids[0].price','bids[1].price', 'bids[2].price', 'bids[3].price', 'bids[4].price'], inplace=True)

得到这样的东西:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

让我们对交易数据做同样的处理,分为卖出和买入:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

现在我们可以建立一个时间序列图,将 DOB 和交易放在一起,看看是否发生了一些奇怪的事情:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

大约在一月中旬,有一个异常现象,让我们放大一下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们可以看到要价突然上升,这可能是“欺骗”试探性的信号,这是一种非法行为,买家操纵市场支付更高的价格,并由于其他买家行为的累积效应而将价格推得更高。

import plotly.graph_objs as go
def draw_max_timeseries(df_dob_resampled, df_trades_resampled_buy, df_trades_resampled_sell, title):
    trace0 = go.Scatter(
        x = df_dob_resampled.index,
        y = df_dob_resampled['max_asks_price'],
        mode = 'lines+markers',
        name='max_asks_price',
        line = dict(color = '#dd0000', shape = 'linear'),
        opacity = 0.3,
        connectgaps=True
    )
    trace1 = go.Scatter(
        x = df_dob_resampled.index,
        y = df_dob_resampled['max_bids_price'],
        name='max_bids_price',
        mode = 'lines+markers',
        marker = dict(
            size = 10,
            color = '#44dd00'),
        opacity = 0.3    
    )
    trace2 = go.Scatter(
        x = df_trades_resampled_buy.index,
        y = df_trades_resampled_buy.price,
        name='trades BUY price',
        mode = 'markers',
        marker = dict(
            size = 10,
            color = '#00dd00'),
        opacity = 0.8    
    )
    trace3 = go.Scatter(
        x = df_trades_resampled_sell.index,
        y = df_trades_resampled_sell.price,
        name='trades SELL price',
        mode = 'markers',
        marker = dict(
            size = 10,
            color = '#dd0000'),
        opacity = 0.8    
    )data = [trace0, trace1, trace2, trace3]
    layout = go.Layout(
        yaxis=dict(
            title=title,
            zeroline=True
        )
    )
    fig = go.Figure(data=data, layout=layout)
    fig.show()draw_max_timeseries(df_dob_resampled, df_trades_resampled_buy, df_trades_resampled_sell, 'Max aggregated data timeseries')

当我们将重采样时间设置为 1 小时时,如果我们想在该时间段内获得更多的粒度,我们必须对该间隔进行切片(让我们选择 4 小时)并进行重采样,例如使用 60 秒。我们开始吧!

RESAMPLE_TIME = '60s'
START_INTERVAL = '2018-01-15 22:00:00'
END_INTERVAL = '2018-01-16 02:00:00'
df_dob_resampled_interval = df_dob.copy()
df_dob_resampled_interval.index = df_dob_resampled_interval['date_time_exchange']df_dob_resampled_interval = df_dob_resampled_interval[START_INTERVAL:END_INTERVAL]df_dob_resampled_interval = df_dob_resampled_interval.resample(RESAMPLE_TIME).max()
df_dob_resampled_interval.drop(columns=['date_time_exchange','date_time_coinapi'], inplace=True)df_dob_resampled_interval['max_asks_size'] = df_dob_resampled_interval[['asks[0].size','asks[1].size', 'asks[2].size', 'asks[3].size', 'asks[4].size']].max(axis=1)
df_dob_resampled_interval['max_bids_size'] = df_dob_resampled_interval[['bids[0].size','bids[1].size', 'bids[2].size', 'bids[3].size', 'bids[4].size']].max(axis=1)
df_dob_resampled_interval['max_asks_price'] = df_dob_resampled_interval[['asks[0].price','asks[1].price', 'asks[2].price', 'asks[3].price', 'asks[4].price']].max(axis=1)
df_dob_resampled_interval['max_bids_price'] = df_dob_resampled_interval[['bids[0].price','bids[1].price', 'bids[2].price', 'bids[3].price', 'bids[4].price']].max(axis=1)df_dob_resampled_interval.drop(columns=[
                      'asks[0].size','asks[1].size', 'asks[2].size', 'asks[3].size', 'asks[4].size', \
                      'bids[0].size','bids[1].size', 'bids[2].size', 'bids[3].size', 'bids[4].size', \
                      'asks[0].price','asks[1].price', 'asks[2].price', 'asks[3].price', 'asks[4].price', \
                      'bids[0].price','bids[1].price', 'bids[2].price', 'bids[3].price', 'bids[4].price'], inplace=True)df_dob_resampled_interval.head()df_trades_resampled_interval = df_trades.copy()
df_trades_resampled_interval.index = df_trades_resampled_interval['time_exchange'] 
df_trades_resampled_interval = df_trades_resampled_interval[START_INTERVAL:END_INTERVAL]
df_trades_resampled_interval_buy = df_trades_resampled_interval[df_trades_resampled_interval.taker_side == 'BUY'].resample(RESAMPLE_TIME).max()
df_trades_resampled_interval_buy.drop(columns=['time_exchange', 'time_coinapi','guid'], inplace=True)
df_trades_resampled_interval_buy.head()df_trades_resampled_interval = df_trades.copy()
df_trades_resampled_interval.index = df_trades_resampled_interval['time_exchange']
df_trades_resampled_interval = df_trades_resampled_interval[START_INTERVAL:END_INTERVAL]
df_trades_resampled_interval_sell = df_trades_resampled_interval[df_trades_resampled_interval.taker_side == 'SELL'].resample(RESAMPLE_TIME).max()
df_trades_resampled_interval_sell.drop(columns=['time_exchange', 'time_coinapi', 'guid'], inplace=True)
df_trades_resampled_interval_sell.head()

现在我们有了这样的东西:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

有 NaN 值不是问题,会被 Plotly 忽略。

让我们画出来:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们可以看到,在 22:45 左右出现了峰值,一小时后情况恢复正常,但只有一笔交易价格上涨,因此不存在累积效应。

结论

EDA 是对数据执行的基本活动,使用简单而强大的工具有效地执行 EDA 可以节省时间,从而可以专注于直觉而不是代码。

有几个库可以用来做数据可视化,当然 Plotly 是其中一个更强大、更容易使用的库,尤其是最新版本,所以获取一些数据并尝试一下吧!

新冠肺炎疫情期间空中交通的可视化

原文:https://towardsdatascience.com/visualization-of-air-traffic-during-covid-19-pandemic-c5941b049401?source=collection_archive---------19-----------------------

2020 年全球航班数据的探索性数据分析

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

阿列克谢·斯塔基在 Unsplash 上的照片

介绍

新冠肺炎·疫情严重影响了世界。为了减缓疫情,各国发布了旅行限制,社会距离的任务,锁定等。因此,很多企业都受到了影响。旅游业是遭受重创的行业之一。

由于旅行限制,世界各地的航班数量急剧下降。在这篇文章中,我将对飞行数据进行分析和可视化。

资料组

我使用的数据集是“来自 OpenSky Network 2020 的众包空中交通数据”。它以多个 csv 文件(每月一个文件)的形式提供 2019 年 1 月 1 日至 2020 年 7 月 31 日的航班数据。在这项工作中,我使用了 2020 年 1 月 1 日至 2020 年 7 月 31 日的数据。

该数据集具有以下特征:

呼号:显示在 ATC 屏幕上的航班标识符(通常前三个字母是为航空公司保留的:AFR 代表法航,DLH 代表汉莎航空,等等。)

编号:航班的商业编号,如果有的话(与呼号的匹配来自公共开放 API)

icao24 :应答器唯一标识号;

登记:飞机尾号(如有);

类型码:飞机型号类型(如有);

始发地:航班始发地机场的四个字母代码(如有);

目的地:该航班目的地机场的四个字母代码(如有);

first seen:open sky 网络收到的第一条消息的 UTC 时间戳;

last seen:open sky 网络收到的最后一条消息的 UTC 时间戳;

:开放天空网络收到最后一条消息的 UTC 日;

纬度 _1经度 _1高度 _1 :飞机第一次探测到的位置;

纬度 _2经度 _2高度 _2 :最后检测到的飞机位置。

形象化

经过一些数据处理后,我能够将数据可视化。

总菌数

先说航班总量。

很明显,航班数量在三月初下降了很多,这是那段时间全球封锁的结果。自那以后,由于缓慢的重新开放,航班数量逐渐增加,但仍未恢复到新冠肺炎之前的水平。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

新冠肺炎期间的全球航班数量(图片由作者提供)

我也把数据放在地图上,如下图。很明显,红色斑点的密度在三月份下降,然后逐渐增加。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

新冠肺炎期间地图上的全球航班(图片作者

乘飞机

让我们分解一下,看看每个航空公司的影响。数据集中有太多的航空公司,所以我只拿其中的一些作为例子。我乘坐了一家欧洲航空公司荷航(荷兰),两家美国航空公司 AAL 和达美,两家亚洲航空公司全日空(日本),加州航空(台湾),以及一家廉价航空公司 EJU(易捷)。

与 1 月 1 日相比,3 月和 4 月的大部分航班数量大幅下降至 25%以下,易捷航空(EJU)甚至在 3 月至 6 月间降至 0。7 月底,这些航空公司的航班数量回升至 50%左右。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

新冠肺炎期间各航空公司的航班数量(图片由作者提供)

台湾航空公司(CAL)是一个特例,它没有像其他航空公司一样在 3 月份急剧下降,而是从 1 月份开始逐渐下降,即使在最糟糕的时期也仍然保持在 50%左右。这可能是因为台湾政府很早就意识到了新冠肺炎。另一家亚洲航空公司(全日空)也显示了早期活动的减少。

乘机场

让我们看看机场。我以阿姆斯特丹(EHAM)、台北(RCTP)、东京(RJTT)、洛杉矶(KLAX)和纽约(JFK)为例。

它显示了类似的趋势,在 3 月和 4 月急剧下降到 20%,然后缓慢回升到 40 %- 60%。阿姆斯特丹机场比美国机场(洛杉矶和纽约)稍早减少了活动。东京机场稍早开始减少活动,但速度较慢。台北表现出不同的行为,它在一月底开始缓慢下降,这与台湾的 CAL 航空公司相似。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

新冠肺炎期间每个机场的航班数量

货物

货运航班怎么样?

从联邦快递和 UPS 航班的数据来看,并没有真正受到冲击。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

新冠肺炎期间每个机场的货运航班数量(图片作者

结论

  • 新冠肺炎疫情开始时,航班流量显著下降,并已逐渐恢复。
  • 廉价航空公司(Easyjet)从 3 月到 6 月几乎停止了航班,然后从 6 月开始逐渐恢复。
  • 货运航班没有受到影响。

感谢阅读。

Python 中新冠肺炎新病例随时间变化的可视化

原文:https://towardsdatascience.com/visualization-of-covid-19-new-cases-over-time-in-python-8c6ac4620c88?source=collection_archive---------27-----------------------

热图显示了不同州的潮起潮落

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

每日每 10 万人口新新冠肺炎病例热图

这张热图显示了美国新冠肺炎疫情随时间的发展。该地图从左至右阅读,并以彩色编码显示各州新病例的相对数量,并根据人口进行调整。

这个可视化的灵感来自于我在一个论坛上看到的一个相似的热图。我从来没有找到来源,因为它只是一个粘贴的图像,没有链接。最初的版本也是为了表明一个政治观点,按照主要的党派划分各州,而我对此并不感兴趣。我被它如何简明地显示疫情的进展迷住了,所以我决定自己创建一个类似的可视化,以便我可以定期更新。

源代码托管在我的 Github repo 上。如果你有兴趣看这张热图的更新版本,我每周都会在我的 Twitter feed 上发布。需要注意的是,在比较一周和另一周的图表时要小心,因为随着新数据的加入,颜色图可能会发生变化。比较仅在给定的热图内有效。

该脚本依赖于 pandas、numpy、matplotlib 和 seaborn。

数据来自《纽约时报》新冠肺炎 Github 回购。一个简单的启动器脚本克隆存储库的最新副本并复制所需的文件,然后启动 Python 脚本来创建热图。只有一个文件是真正需要的,所以它当然可以收紧,但这是可行的。

该脚本首先将一个包含州人口的 CSV 文件加载到一个字典中,该字典用于衡量每天的新病例结果。每天的新病例是根据纽约时报数据中的累计总数计算出来的,然后换算成人口中每 100,000 人中的新病例

我们可以显示此时的热图,但如果我们这样做,每 100,000 人中病例数非常高的州将淹没病例数较低的州的详细信息。应用 [log(x+1)](http://onbiostatistics.blogspot.com/2012/05/logx1-data-transformation.html#:~:text=A%3A%20log(x%2B1,in%20which%20x%20was%20measured.) 变换可以显著提高对比度和可读性。

最后,使用 Seaborn 和 Matplotlib 生成热图,并将其保存到图像文件中。

就是这样!请随意使用这个作为你自己的可视化框架。你可以定制它来聚焦感兴趣的领域。

完整的源代码在下面。感谢阅读,希望你觉得有用。

马哈拉施特拉邦选举的可视化

原文:https://towardsdatascience.com/visualization-of-maharashtras-elections-f7e85a79edd1?source=collection_archive---------51-----------------------

制作选举地图的指南

阿哈拉什特拉是印度人口第二多、面积第三大的邦。马哈拉施特拉邦对该国国内生产总值的贡献约为 15%,是该国最大的经济贡献者,而邦首府孟买则是该国的金融之都。此外,浦那还被称为“东方牛津”,因为那里有许多教育机构,如 IUCAA、NCRA、IISER 等。从今以后,马哈拉施特拉邦发生的任何事情都会在全国范围内产生经济影响。

本文将介绍如何使用公开数据制作马哈拉施特拉邦 2019 年议会选举的 choropleth 地图。通常,程序集选区的形状文件在 internet 上是极其稀缺的资源。

数据

  1. 议会选区的形状文件可以在这里找到【https://github.com/datameet/maps
  2. 各选区获胜政党的数据可从选举委员会网页下载。

必需的包

  1. 熊猫(安装指南:https://pandas . pydata . org/pandas-docs/stable/getting _ started/install . html)
  2. Geopandas(安装:https://geopandas.org/install.html
  3. Seaborn(安装:https://seaborn.pydata.org/installing.html
  4. Matplotlib 和 numpy

地图数据

导入包

首先,导入所需的包,如下所示:

import pandas as pd
import geopandas as gpd
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
sns.set_style('whitegrid')

“set_style”是一个可选命令,为即将到来的绘图设置一个白色网格。

# Importing the shape file of assembly-constituencies
fp = "assembly-constituencies"
map_df = gpd.read_file(fp)
map_df = map_df[map_df['ST_NAME']=='MAHARASHTRA']
map_df = map_df[['AC_NAME', 'geometry']]
map_df.reset_index(drop=True,inplace=True)
map_df.head(3)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

read_file '导入印度议会选区的形状文件作为数据帧,'map _ df[’ ST _ NAME ']= ’ MAHARASHTRA’过滤属于 MAHARASHTRA 的选区。后续行仅保留所需的特征,如选区名称(AC_NAME)和形状文件(geometry)。

基本探索性数据分析

map_df.info()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

从上面可以看出,有 288 个装配选区名称( AC_NAME )和 302 个形状文件( geometry )。来自印度选举委员会的数据显示,印度共有 288 个议会选区。让我们探索更多来解决这种差异。

# Plot of the assembly-constituencies
map_df.plot()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

形状文件的情节看起来很正常。让我们检查一下是否有空类型值。

# checking for null values
Null_Values = map_df.isnull().sum()
print(Null_Values)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

python 中的空类型对象用 None 关键字表示。这里, isnull() 命令将 DataFrame map_df 转换为 TrueFalse 表格,其中 TrueNone 关键字的占位符,反之亦然。sum()命令将值分别为 1 和 0 的真值假值相加*。*因此,选区名称中有 14 个缺失值,形状文件中同样没有缺失值。

这可以想象为 Seaborn 图书馆的热图:

# It seems some of the names of the assembly-constituencies is missing!
sns.heatmap(Null_Values)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

AC_NAME 列中的奇数直线表示缺少的值。这些值可以用熊猫的 dropna() 删除,如下所示。

map_df.dropna(inplace=True) # The 'None' type rows are removed
map_df.reset_index(drop=True,inplace=True) # index is reset
map_df.head()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

移除空类型值后,索引将被重置以考虑移除的值,并将选区名称设置为新索引—这是通过 drop=True 选项实现的。而 inplace=True 选项将这些变化保留在 map_df 数据帧中。

数据清理

数据必须被清理以匹配来自选举委员会的选区名称。人们可以看到,名称后面有 (ST)(SC) ,以表示为 ST 和 SC 保留的选区。

#Cleaning the names of assembly constituencies
def text_process(names):
    semi_cleaned_names = [word for word in names.strip().lower().split() if word not in ['(st)','(sc)']] 
    joined_cleaned_names = " ".join(semi_cleaned_names)
    removed_st_names = joined_cleaned_names.replace("(st)","")
    fully_cleaned_names = removed_st_names.replace("(sc)","")
    return fully_cleaned_names# The cleaned names
map_df['cleaned_names']=map_df['AC_NAME'].apply(text_process)
map_df = map_df[['cleaned_names','geometry']]

apply 命令一次向 text_process() 函数发送一个单词。在这里,每个单词都去掉了前导和结尾的空格,转换成小写,并通过 *names.strip()以空格分隔成更多的单词。降低()。【split()。一个示例单词 Arjuni Morgaon(SC) 在第一行代码后看起来像 [‘arjuni ‘,’ morgaon(sc)’] 。单词 (sc) 仍然保留在这个单词中,因为它没有用空格与 morgaon 分开。对这个字的 join() 命令将产生 *arjuni morgaon(sc)。*最后,*替换(“(sc)”," ")会给出完全清洗的名字 arjuni morgaon

数据帧现在看起来像这样:

map_df.head()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

选举数据

可以从选举委员会页面下载 xlsx 格式的各选区获胜政党的数据。

# Importing Election Data
df_election = pd.read_excel('2-List of Successful Candidates.xlsx',names=np.array(['State','Constituency','Winner','Sex','Party','Symbol'])) df_election.reset_index(drop=True)
df_election.head()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

来自 pandas 的 read_excel 命令直接将 excel 表数据作为 DataFrame 导入, names 选项为列设置新名称。

基本探索性数据分析

df_election.info()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

上面的结果显示六列中没有空值。

plt.figure(figsize=(10,5))
sns.countplot(x='Party',data=df_election,)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

countplot 命令绘制了每一方赢得的选区数量,而 value_count() 给出了确切的数字:

df_election['Party'].value_counts()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

显然,前四大政党赢得的选区比其他政党多得多。现在,让我们只分离在 20 多个选区获胜的政党。这是为了关注表现良好的政党。

df_successful_party = df_election['Party'].value_counts() > 20
df_successful_party=df_successful_party[df_successful_party==True].index
Succ_parties = df_successful_party.values
df = df_election['Party'].apply(lambda x: x in Succ_parties)
sns.countplot(x = 'Party',data = df_election[df],hue='Sex')

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

按性别对成功候选人进行党派细分。

第一行给出一个熊猫系列,以当事人名称为索引,列为值,其中表示大于 20 的值,而否则为*。第二行通过索引命令给出只有真*值的各方名称。第三行将各方名称转换成一个 numpy 数组。这个数组在下面的 apply 命令中使用,该命令过滤所有胜率大于 20 的团体。最后一行只是标出了每个政党赢得的选区数量,并按照候选人的性别分类。从绝对数字来看,BJP 似乎在获胜的候选人中代表了更多的妇女。让我们更深入地了解一下这个问题。

df_election['Sex'].value_counts()
Percentage_of_women = 24/288*100
Percentage_of_women

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

以上各行显示,在包括所有政党在内的所有成功候选人中,妇女仅占 8%。将它分解为一个党派的代表:

df_election[df_election['Party']=='BJP']['Sex'].value_counts()
Percentage_of_women_BJP = (12/105)*100
Percentage_of_women_BJP

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这表明在 BJP 的成功候选人中,妇女占 11 %。类似地,为所有各方计算它,可以绘制如下:

arr = np.array([Percentage_of_women,Percentage_of_women_BJP,Percentage_of_women_NCP,Percentage_of_women_SHS,Percentage_of_women_INC])

Women_representation = pd.DataFrame(data=arr,columns=['Women Representation (%)'],index=None)Women_representation['Party'] = ['Overall','BJP','NCP','SHS','INC']plt.figure(figsize=(8,5))sns.barplot(y='Women Representation (%)',x='Party',data=Women_representation)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

妇女在政党中的代表性。

上图显示了妇女在政党中的代表性,即在成功的候选人中所占的百分比。可以看出,BJP 和国会的妇女代表几乎相等。此外,两党都超过了 8 %的平均女性代表比例。排名第三和第四的是全国大会党和自助党,其代表性低于平均水平。

数据清理

# Cleaning the names of assembly constituencies
df_election['Constituency']=df_election['Constituency'].str.lower()
df_election['Constituency']=df_election['Constituency'].str.strip()

# Joining both DF with 'cleaned_names' column as index
merged = map_df.set_index('cleaned_names').join(df_election.set_index('Constituency'))
merged.head()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

与地图数据相比,这是一种更简单的数据清理形式。这里,所有转换为小写的名称,以及开始和结尾的空格都被删除。 join 命令连接地图数据帧和该数据帧,其中选区名称匹配!

马哈拉施特拉邦的选举地图

# Plotting the election results
fig, ax = plt.subplots(1,figsize=(10, 6))
ax.axis('off')
ax.set_title('Maharashtra Election 2019', fontdict={'fontsize': '25', 'fontweight' : '3'})merged.plot(column='Party', cmap='plasma', linewidth=0.7, ax=ax, edgecolor='0.8', legend=True)
leg = ax.get_legend()
leg.set_bbox_to_anchor((1, 0.7, 0.2, 0.2))

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

*子图形()*创建一个图形和轴实例,可用于设置图形的属性。这是一种面向对象的编程方式,相比之下, plt.plot() 是一种函数式的编程方式。这里的轴实例, ax ,用于设置绘图的标题,并删除绘图轴。m erged.plot() 绘制关于各方的 choropleth 图。这是 Pandas 特有的绘图方式,其中一个更通用的命令类似于 DataFrame_Name.plot() 。它使用 m atplotlib 作为后端,因此,与 matplotlib 特定命令如 subplot()配合使用效果很好。**cmap选项设置绘图的颜色方案。此外,g et_legend() 创建一个图例实例,它与 set_bbox_to_anchor() 一起使用,以便更准确地放置图例。

choropleth 地图上的白色斑块代表缺失的选区。这些是其名称为 none 并从 map_df 数据框中删除的议会选区。您可以尝试更多的 cmap 颜色选项,如图所示。然而,人们必须看到,有太多的党,以确定他们所有的颜色。在未来,我们将探索更多关于提高理解和这个情节的美感!

完整的笔记本可以参考这里

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值