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

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

AlexNet、VGGNet、ResNet、Inception、DenseNet 的架构比较

原文:https://towardsdatascience.com/architecture-comparison-of-alexnet-vggnet-resnet-inception-densenet-beb8b116866d?source=collection_archive---------8-----------------------

内部人工智能

ILSVRC 挑战结果中具有超参数和准确性的图层描述

你好,读者,如果你正在寻找一个完美的指南来获得关于 AlexNet,VGGNet,ResNet,Inception 和 DenseNet 的所有信息,那么你在正确的地方。仔细阅读博客,你会得到关于所有架构的详细信息。尽情享受吧!!!

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

来源:https://www . tech leer . com/articles/259-concepts-of-advanced-deep-learning-architectures/

AlexNet

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

AlexNet 架构[1]

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

AlexNet 图层详细信息[2]

AlexNet 是第一个大规模卷积神经网络架构,在图像网络分类上表现良好。AlexNet 参加了比赛,并能够以显著的优势超越所有之前的非深度学习模型。

AlexNet 架构是一个 conv 层,然后是池层、标准化、conv 池规范,然后是几个 conv 层、一个池层,然后是几个完全连接的层。实际上看起来很像 LeNet 网络。总共只是多了几层而已。共有五个 conv 层,在最终的全连接层到达输出类之前,还有两个全连接层。

AlexNet 在 ImageNet 上接受训练,输入大小为 227 x 227 x 3 的图像。如果我们看看第一层,这是 AlexNet 的 conv 层,它是 11 x 11 个过滤器,其中 96 个应用于 stride 4。我在输出中有 55 x 55 x 96,在第一层中有 35K 参数。第二层是池层,在这种情况下,我们在步长 2 处应用了 3 个 3 x 3 的过滤器。汇集层的输出体积为 27 x 27 x 96,要学习的参数为 0。池层不学习任何东西,因为参数是试图学习的权重。卷积层具有我们学习的权重,但汇集我们所做的只是有一个规则,我们查看汇集区域,并取最大值。因此没有学习到的参数。

开始有 11×11 个过滤器,然后是 5×5 和一些 3×3 个过滤器。最后,我们有两个大小为 4096 的完全连接的层,最后一层是 FC8,它连接到 softmax,soft max 连接到 1000 个 ImageNet 类。这种结构是 ReLu 非线性的首次应用。

超参数:

这种结构是 ReLU 非线性的首次应用。AlexNet 也使用了一层标准化。在数据扩充中,ALexNet 使用了翻转、抖动、裁剪、颜色标准化等等。其他参数是 0.5 的辍学、0.9 的 SGD +动量、1e-2 的初始学习率,并且当验证准确度变得平坦时再次减少 10。该网络中使用的正则化是权重衰减为 5e-4 的 L2。它是在包含 3GB 内存的 GTX580 GPU 上训练的。

它在 ImageNet 大规模视觉识别挑战(ILSVRC)中的错误率为 16.4。

AlexNet 是 2012 年 ImageNet 大规模视觉识别挑战(ILSVRC)基准分类的获胜者。

VGGNet

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

VGG16 架构[3]

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

VGG 16 层和 VGG 19 层细节[2]

在 2014 年,有几个架构有了显著的不同,在性能上又有了一次飞跃,这些网络与更深层网络的主要区别是。

VGG 16 是 16 层体系结构,具有一对卷积层、池化层和最后的全连接层。VGG 网络是更深层次的网络和更小的过滤器。VGGNet 从 AlexNet 的八层增加了层数。现在它有 16 到 19 层的 VGGNet 版本。一个关键的事情是,这些模型始终保持非常小的 3 x 3 conv 过滤器,这基本上是最小的 conv 过滤器大小,查看一点点相邻像素。他们只是保持了这种非常简单的 3 x 3 convs 结构,并通过网络定期进行池化。

VGG 使用小过滤器,因为参数更少,并堆叠更多的过滤器,而不是更大的过滤器。VGG 有更小更深的过滤器,而不是大过滤器。它最终具有相同的有效感受野,就好像只有一个 7 x 7 卷积层一样。

VGGNet 有 conv 层和一个池层,还有几个 conv 层,池层,几个 conv 层等等。VGG 架构总共有 16 个卷积和全连接层。在这种情况下,VGG 16 有 16 层,VGG 19 有 19 层,这只是一个非常相似的架构,但其中多了几个 conv 层。

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

VGG16 参数[2]

因此,这是相当昂贵的计算,总共有 138M 参数,每个图像有 96MB 的内存,这比常规图像大得多。它在 ILSVRC 挑战中只有 7.3 的错误率。

VGGNet 是 2014 年 ImageNet 大规模视觉识别挑战(ILSVRC)分类基准的亚军。

雷斯内特

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

ResNet 架构和层细节[2]

ResNet 的主要基本元素是剩余块。随着我们深入到具有大量层的网络中,计算变得更加复杂。这些层放在彼此之上,每一层都试图学习所需函数的一些底层映射,而不是拥有这些块,我们试图拟合一个残差映射。

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

普通层与残余块[2]

在右边,这些模块的输入只是进来的输入,而在另一边,我们将使用我们的层来尝试拟合 H(X) - X 的一些残差,而不是直接拟合所需的函数 H(X)。基本上,在这个模块的末尾,它会跳过这里的连接,在这里,它只接受输入,并将其作为一个身份传递,因此,如果中间没有权重层,它就只是一个身份。这和输出是一样的,但是现在我们使用额外的权重层来学习一些 delta,一些来自 x 的残差。

简而言之,随着我们深入网络,学习 H(X)是如此困难,因为我们有大量的层。所以这里我们用了跳过连接和学习 F(x)直接输入 x 作为最终输出。所以 F(x)被称为残差。

在 ResNet 中,将所有这些块非常深入地堆叠在一起。这种非常深的架构的另一个特点是,它支持高达 150 层的深度,然后我们定期堆叠所有这些层。我们还将滤波器数量增加一倍,并使用步长 2 进行空间下采样。最后,只有完全连接的第 1000 层才能输出类。

超参数:

在 ResNet 中,它在每个 conv 图层后使用批量归一化。它还使用 SGD + Momentum 的 Xavier 初始化。学习率为 0.1,当验证误差变为常数时,学习率除以 10。此外,批量大小为 256,重量衰减为 1e-5。重要的是,在 ResNet 中没有使用辍学。

ResNet 以 3.6%的错误率在 ILSVRC 和 COCO 2015 比赛中获得第一名。(比人类的表现还要好!!!)

开始

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

Inception v3 是一种广泛使用的图像识别模型,已被证明在 ImageNet 数据集上获得了超过 78.1%的准确率。该模型是多年来由多名研究人员开发的许多想法的结合。

模型本身由对称和非对称构建块组成,包括卷积、平均池、最大池、漏失和完全连接层。Batchnorm 在整个模型中广泛使用,并应用于激活输入。损耗通过 Softmax 计算。

初始阶段的工作是分解卷积。分解卷积用于减少要学习的连接和参数的数量。这将提高速度并提供良好的性能。

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

GoogleNet 使用 5x5 卷积层,而在 inception 中使用两个 3x3 层来减少学习参数的数量。在 5×5 中共有 25 个参数,3×3+3×3 中共有 18 个参数要学习。因此,无学习参数显著减少了 28%。

分解成非对称卷积也用于初始阶段,这也有助于减少学习参数。

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

一个 3×1 卷积后跟一个 1×3 卷积代替一个 3×3 卷积。在一个 3×3 中总共有 9 个参数,而 3×1+1×3 总共有 6 个参数,所以它将减少 33%。这种方法不太可能在您深入训练时过度拟合模型。[4]

在 42 层深度的情况下,计算成本仅比 GoogleNet 高 2.5 倍左右,比 VGGNet 效率高得多。

Inception-v3 用 144 个作物和 4 个模型集合,得到 3.58% 的前 5 名错误率,最终在 ILSVRC 2015 获得亚军(影像分类)。

DenseNet

DenseNet 由如下所示的密集块组成。在这些块中,图层紧密地连接在一起:每一层都从以前的图层获得输入输出要素地图。残差的这种极端重用创建了深度监督,因为每一层都从前一层接收更多的监督,因此损失函数将做出相应的反应,并且由于这种方法,它使其成为更强大的网络。

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

DenseNet 框图

DenseNet 由两个模块组成:

  1. 致密块体:单个块体由这些层组成:
  • 批量标准化
  • ReLU 激活
  • 3x3 卷积

2.过渡层:在 ResNet 中将执行残差求和,而不是将残差求和 Densenet 连接所有的特征映射。这一层是由

  • 批量标准化
  • 1x1 卷积
  • 平均池

基本上,Densenet 的卷积生成较少数量的特征图。DenseNet 对宽层的需求较低,因为层是紧密连接的,所以在学习的特征中几乎没有冗余。多层密集的块共享一块集体知识。层的输出特征地图的数量被定义为增长率。最终,增长率控制着每一层向全球贡献多少新信息。

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

DenseNet 建筑

简而言之,DenseNet 架构最大限度地利用剩余机制,使每一层都与其后续层紧密相连。模型的紧凑性使得学习到的特征不冗余,因为它们都通过集体知识共享。以训练由于隐式深度监督而紧密连接的深度网络,其中梯度由于短连接而更容易回流。

参考资料:

[1]https://mc.ai/alexnet-review-and-implementation/

[2]http://cs 231n . Stanford . edu/slides/2019/cs 231n _ 2019 _ lecture 09 . pdf

[3]https://www . pyimagesearch . com/2017/03/20/imagenet-vggnet-resnet-inception-xception-keras/

[4]https://medium . com/@ sh . tsang/review-inception-v3-第一名-亚军-图片-分类-in-ils vrc-2015-17915421 f77c

架构—第 1 部分

原文:https://towardsdatascience.com/architectures-part-1-62c686f500c3?source=collection_archive---------48-----------------------

FAU 讲座笔记关于深度学习

从 LeNet 到 GoogLeNet

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

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

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

航行

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

欢迎回到深度学习,你可以在视频中看到,我有几个升级。我们现在有了更好的录音质量,我希望你也能看到我最终解决了声音问题。你现在应该能听得更清楚了。我们回来参加新的会议,我们想谈谈几个令人兴奋的话题。让我们看看我为你准备了什么。所以今天我想开始讨论不同的架构。特别是,在前几个视频中,我想谈谈早期的架构。我们在深度学习的早期看到的东西。接下来,我们将在后面的视频中探讨更深入的模型,最后我们想谈谈学习架构。

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

为了更快地测试架构,可以使用更小的数据集。 CC 下的图片来自深度学习讲座的 4.0 。

我们将在接下来的几张幻灯片和视频中看到的许多内容当然是为图像识别和物体检测任务开发的。特别是两个数据集对这类任务非常重要。这是你在[11]中找到的 ImageNet 数据集。它有大约 1000 个类和超过 1400 万张图片。子集已用于 ImageNet 大规模视觉识别挑战。它包含不同大小的自然图像。所以,很多这样的图片实际上是从网上下载的。如果你不想马上用几百万张图片进行训练,也有更小的数据集。所以,它们也很重要。CIFAR 10 和 CIFAR 100 分别有 10 个和 100 个类。在这两种情况下,我们只有 50k 训练和 10k 测试映像。为了能够快速探索不同的架构,图像缩小到 32 x 32。如果你有这些更小的数据集,那么训练也不需要这么长时间。所以如果你想评估你的架构,这也是一个很常见的数据集。

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

Yann LeCun 的 LeNet 是深度学习短暂历史中的一个里程碑式的架构。来自深度学习讲座CC BY 4.0 下的图片。

基于这些不同的数据集,我们接下来想继续研究早期的架构。我认为其中最重要的是 LeNet,它于 1998 年在[9]中发表。你可以看到这本质上是我们迄今为止一直在讨论的卷积神经网络(CNN)。例如,它已经被用于字母识别。我们有具有可训练内核和池化的卷积层、另一组卷积层和另一个池化操作,最后,我们将进入完全连接的层。因此,我们逐渐减少维度,最后,我们有对应于类的数量的输出层。这是一个非常典型的 CNN 类型的架构,这种方法已经在许多论文中使用。这激发了很多工作。我们为这里的每个体系结构都提供了关键功能,您可以看到,这里的大部分项目符号都是灰色的。这意味着这些特征中的大部分没有保留下来。当然,这里保留下来的是空间特征的卷积。这是仍然流行的主要观点。所有其他的事情,比如使用平均池的二次抽样,都没有经过时间的考验。它仍然用双曲正切作为非线性。这是一个不太深入的模型,对吗?然后,它在 S2 层和 C3 层之间有稀疏的连接,如图所示。因此,多层感知器作为最终分类器也不再常见。我们不再看到这种情况,因为它已经被完全卷积网络所取代。这是一种更加灵活的方法,卷积池和非线性的顺序也是固定的。今天,我们将以一种更好的方式做到这一点,当然,这种架构是许多进一步发展的基础。所以,我认为把它列在这里真的很重要。

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

AlexNet 引发了深度学习的大趋势。 CC 下的图片来自深度学习讲座的 4.0 。

我想在这个视频中谈论的下一个里程碑是 AlexNet。你可以在这里找到典型的图像。顺便说一句,您会在原始出版物中找到完全相同的图像。因此,Alex net 由这两个分支组成,你可以看到,即使在最初的出版物中,顶部的分支也被切成了两半。所以,当提到这个图形时,你会在 AlexNet 的许多表示中发现一种人工制品。所以,这个图形被分割成几部分,但并没有那么严重,因为这两部分本质上是相同的。你可以说,它被分成两个子网络的原因之一是因为 AlexNet 已经在图形处理单元(GPU)上实现。这是在 GPU 上实现的,实际上已经是多 GPU 了。所以,你在顶部看到的两个分支,已经在两个不同的图形处理单元上实现,它们也可以被训练,然后使用软件同步。所以,GPU 当然是一个仍然非常普遍的功能。你知道今天深度学习的每个人都非常依赖图形处理单元。正如我们在这节课中多次看到的,它基本上有八层。所以不是那么深的关系网。它有重叠的最大池,步幅为 2,大小为 3。它引入了 ReLU 非线性,这也是当今非常常用的方法。所以这也是一个很重要的特点。当然,它是 2012 年 ImageNet 挑战赛的获胜者,该挑战赛将错误率降低了一半。所以这真的是 CNN 突破的里程碑之一。我们还有什么?为了对抗这种架构中的过拟合,已经在前两个完全连接的层中使用了概率为 0.5 的丢失。此外,还包括数据扩充。所以有随机的变换和随机的强度变化。另一个关键特征是,它一直采用动量为 0.9 的小批量随机梯度下降和 L2 重量衰减,参数设置为 5 倍 10⁻⁵.它使用了一个相当简单的权重初始化。只是用一个正态分布和一个小的标准差。在之前的讲座中,我们已经看到了更好的方法。还有什么重要的?好吧,我们已经看到 GPU 分离是有历史原因的。当时的 GPU 太小,无法托管整个网络,所以它被分成两个 GPU。

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

网络中的网络论文介绍了 1x1 卷积。来自深度学习讲座CC BY 4.0 下的图片。

另一篇重要论文是“网络中的网络”论文,其中介绍了 1x1 滤波器。这最初被描述为网络中的网络,但实际上我们今天称之为 1x1 卷积,因为它们实际上在通道上引入了完全连接的层。如果你想压缩通道,我们现在经常使用这个方法,因为我们在通道维度上完全连接。这非常好,因为我们已经看到这相当于一个完全连接的层。我们现在可以根据 1x1 卷积来集成完全连接的层,这使我们能够实现完全卷积网络的这一非常好的概念。因此,在所有激活中共享的参数非常少。使用全局空间平均池作为最后一层,这实质上是完全卷积神经网络的诞生。

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

VGG 是一个受欢迎的建筑,因为它可以预先训练。 CC 下的图片来自深度学习讲座的 4.0 。

另一个非常重要的架构是牛津大学视觉几何小组(VGG)的 VGG 网络。他们在每个卷积中引入了小的内核大小。这个网络也很常见,因为它可以下载。因此,有一些预先训练好的模型可供使用,您可以看到,它们在这个网络中的关键特征是,它们在逐步增加通道维度的同时,基本上减少了空间维度。这是一个从空间域到分类器重要解释域的逐步转换。因此,我们可以看到空间维度下降,同时通道维度上升。这让我们逐渐从彩色图像向意义转化。所以,我认为小内核是仍然被使用的关键特性。它通常用于 16 层和 19 层,在某些层之间有最大池。学习过程与 AlexNet 非常相似,但结果证明很难训练。在实践中,你需要用较浅的网络进行预训练来构建这个。因此,该网络在性能方面不是很好,并且有很多参数,但它是预先训练好的,并且是可用的。因此这也导致了社区相当广泛地采用它。所以,你也可以看到,当你使用开源和可访问的软件时,这也是一个关键的特性,对其他人来说很重要,以便开发进一步的概念。参数可以共享。训练好的模型可以共享。源代码可以共享。这就是为什么我认为这是深度学习领域中一个非常重要的实例。

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

GoogLeNet 引入了几个新概念。 CC 下的图片来自深度学习讲座的 4.0 。

另一个重要的网络,我们已经在这个讲座的很多场合看到过,是 GoogleNet。这里,我们有你在[14]中找到的盗梦空间 V1 版本。我想我想在这里强调的要点是,他们有非常好的想法,通过使用一些技巧来节省计算。因此,他们开发这些网络时考虑到了嵌入式硬件,并且它还在推理时间内进行了 15 亿次乘加运算(MAD)。这很酷,但我发现更酷的是这些初始块。因此,总共有 22 层,全球平均池作为最后一层。这些初始模块真的很好,我们将在下一张幻灯片中更详细地讨论它们,因为它们本质上允许您让网络决定它是想要共享还是想要卷积。这太酷了。另一个非常好的技巧是使用这些辅助分类器,它们应用于早期的层,以稳定梯度。所以,这个想法是你把你的损失插入到一些更早期的层中,在那里你已经试图找出一个初步的分类。这有助于建立更深层次的模型,因为你可以在相当早的阶段引入损失。你知道,你进入网络越深,你越是去更早的层,你越有可能得到一个消失的梯度。有了这些辅助分类器,可以在一定程度上预防。例如,如果你想弄清楚你真正需要多少个 inceptions 模块,这也是非常有用的。然后,您可以使用那些腋窝分类器。这真是一个非常有趣的概念。

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

初始模块概述。来自深度学习讲座CC BY 4.0 下的图片。

因此,让我们谈一谈那些初始模块。顺便说一下,inception 模块当然是已经存在了相当长一段时间的东西,它仍然在许多最先进的深度学习模型中使用。所以通过这些网络有不同的分支。就像只有一个 1x1 卷积,一个 1x1 卷积后一个 3x3 卷积,或 1x1 卷积后一个 5x5 卷积,或最大池后一个 1x1 卷积。因此,所有这些分支并行进行,然后将分支的输出连接起来,提供给下一层。因此,本质上这允许网络决定在下一层信任哪个分支。这样,它可以以某种方式确定它是否想要池或是否想要卷积。所以,你可以把它看作是在训练过程中确定的自动路径。

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

1x1 卷积能够压缩信道并节省计算时间。 CC 下的图片来自深度学习讲座的 4.0 。

同样有趣的是,1x1 滤波器充当了一种瓶颈层。因此,您可以使用它来压缩先前层的通道。然后,你可以压缩,然后卷积。尽管如此,如果你完全按照这种方式实现,还是有很多计算。因此,他们的想法是使用这个瓶颈层来压缩不同特征图之间的相关性。想法是你有这些 1x1 滤波器。你所做的是省略额外的计算。假设您通过一个 3×3 卷积路由 256 个输入特征地图和 256 个输出特征地图,这将意味着您已经有大约 600,000 个乘加操作。所以相反,你用这些瓶颈想法。通过 1x1 卷积将通道从 256 压缩到 64。然后对 64 个通道进行 3×3 卷积。接下来,您基本上再次从 64 通道解压缩到 256 通道。这节省了大量计算。总的来说,你需要大约 70.000 次乘加运算。如果你看看最初的 600,000 次乘加运算,那么你可以看到我们已经节省了大量的计算运算。

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

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

好的,这些本质上是经典的深度学习架构。我们想在第二部分讨论更复杂的问题,在那里我想向你展示如何更深入,以及你如何有效地做到这一点,例如用其他版本的 inception 模块。非常感谢大家的收听,希望在下一段视频中再见!

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

参考

[1] Klaus Greff、Rupesh K. Srivastava 和 Jürgen Schmidhuber。“高速公路和残差网络学习展开的迭代估计”。年:学习代表国际会议(ICLR)。土伦,2017 年 4 月。arXiv: 1612.07771。
[2]何,,,任,等.“深度残差学习用于图像识别”。In: 2016 年 IEEE 计算机视觉与模式识别大会(CVPR)。拉斯维加斯,2016 年 6 月,第 770–778 页。arXiv: 1512.03385。
[3]何,,,,任等.“深剩余网络中的身份映射”。载于:计算机视觉— ECCV 2016:第 14 届欧洲会议,荷兰阿姆斯特丹,2016 年,第 630–645 页。arXiv: 1603.05027。
[4]胡经昌、沈立群、孙广昌。“挤压和激励网络”。载于:ArXiv 电子版(2017 年 9 月)。arXiv: 1709.01507 [cs。简历】。
[5]黄高,孙玉,刘庄等,“具有随机深度的深度网络”。载于:计算机视觉-ECCV 2016,会议录,第四部分。湛:施普林格国际出版公司,2016 年,第 646–661 页。
[6]黄高、刘庄和基利安·q·温伯格。“密集连接的卷积网络”。In: 2017 年 IEEE 计算机视觉与模式识别大会(CVPR)。檀香山,2017 年 7 月。arXiv: 1608.06993。亚历克斯·克里热夫斯基、伊利亚·苏茨基弗和杰弗里·E·辛顿。“使用深度卷积神经网络的 ImageNet 分类”。神经信息处理系统进展 25。柯伦咨询公司,2012 年,第 1097-1105 页。arXiv: 1102.0183。
[8] Yann A LeCun,Léon Bottou,Genevieve B Orr 等著《有效反向推进》。神经网络:交易技巧:第二版。第 75 卷。柏林,海德堡:施普林格柏林海德堡,2012 年,第 9-48 页。
【9】Y le Cun,L Bottou,Y Bengio 等,“基于梯度的学习应用于文档识别”。摘自:IEEE 86.11 会议录(1998 年 11 月),第 2278-2324 页。arXiv: 1102.0183。
【10】、,与水城颜。“网络中的网络”。国际学习代表会议。加拿大班夫,2014 年 4 月。arXiv: 1102.0183。
[11] Olga Russakovsky,贾登,苏浩等,“ImageNet 大规模视觉识别挑战赛”。摘自:《国际计算机视觉杂志》115.3(2015 年 12 月),第 211–252 页。
[12]卡伦·西蒙扬和安德鲁·齐塞曼。“用于大规模图像识别的非常深的卷积网络”。年:学习代表国际会议(ICLR)。2015 年 5 月,圣地亚哥。arXiv: 1409.1556。
[13]鲁佩什·库马尔·斯里瓦斯塔瓦,克劳斯·格雷夫,乌尔根·施密德胡伯等,《训练非常深的网络》。神经信息处理系统进展 28。柯伦咨询公司,2015 年,第 2377-2385 页。arXiv: 1507.06228。
[14]塞格迪、、、贾等著《用回旋深化》。In: 2015 年 IEEE 计算机视觉与模式识别会议(CVPR)。2015 年 6 月,第 1–9 页。
[15] C. Szegedy,V. Vanhoucke,S. Ioffe 等,“重新思考计算机视觉的初始架构”。In: 2016 年 IEEE 计算机视觉与模式识别大会(CVPR)。2016 年 6 月,第 2818–2826 页。
[16]克里斯蒂安·塞格迪、谢尔盖·约菲和文森特·万霍克。“Inception-v4,Inception-ResNet 和剩余连接对学习的影响”。In:第三十一届 AAAI 人工智能会议(AAAI-17) Inception-v4,三藩市,2017 年 2 月。arXiv: 1602.07261。
[17]安德烈亚斯·韦特、迈克尔·J·威尔伯和塞尔日·贝隆吉。“残差网络的行为类似于相对较浅的网络的集合”。神经信息处理系统进展 29。柯伦联合公司,2016 年,第 550–558 页。
【18】谢地、蒋雄、石梁浦。“你所需要的只是一个好的 Init:探索更好的解决方案来训练具有正交性和调制的极深度卷积神经网络”。In: 2017 年 IEEE 计算机视觉与模式识别大会(CVPR)。檀香山,2017 年 7 月。arXiv: 1703.01827。
[19]谢灵犀与。遗传 CNN。技术。众议员 2017。arXiv: 1703.01513。
[20]谢尔盖·扎戈鲁伊科和尼科斯·科莫达基斯。“广残网”。英国机器视觉会议(BMVC)会议录。BMVA 出版社,2016 年 9 月,第 87.1–87.12 页。
【21】K .张,M .孙,X .韩等《残差网络的残差网络:多级残差网络》。载于:IEEE 视频技术电路与系统汇刊第 99 页(2017),第 1 页。
[22]巴雷特·佐夫,维贾伊·瓦苏德万,黄邦贤·施伦斯等人,《学习可扩展的可转移架构》

架构—第 2 部分

原文:https://towardsdatascience.com/architectures-part-2-2d2ac8f7458e?source=collection_archive---------51-----------------------

FAU 讲座笔记关于深度学习

更深层的架构

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

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

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

航行

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

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

更深的结构产生更好的性能。 CC 下的图片来自深度学习讲座的 4.0 。

欢迎回到深度学习!今天我想谈谈架构的第二部分。现在,我们想在第二部分更深入一点:更深入的模型。因此,我们看到更深入的研究确实对错误率非常有益。所以,你可以在 ImageNet 上看到结果。在 2011 年,使用浅层支持向量机,您可以看到错误率非常高,达到 25%。AlexNet 在 2012 年已经几乎将它削减了一半。2013 年,泽勒再次以八层赢得冠军。2014 年 VGG:19 层。2014 年的 Google net:22 层,性能也差不多。因此,你可以看到,我们增加的深度越多,性能似乎就越好。我们可以看到只剩下一点点的差距来击败人类的表现。

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

深度网络允许指数级特征重用。 CC 下的图片来自深度学习讲座的 4.0 。

深度似乎在构建良好的网络中扮演着关键角色。为什么会这样呢?这些更深层次的网络可能非常有效的一个原因是我们称之为指数特征重用的东西。这里你可以看到我们是否只有两个特征。如果我们把神经元堆在上面,你可以看到可能的路径数量呈指数增长。有了两个神经元,我就有了两条路。有了另一层神经元,我就有了路径。有三层路径,⁴路径等等。因此,更深层次的网络似乎能够重用以前各层的信息。我们也可以看到,如果我们看看他们在做什么。如果我们生成 get 这些可视化,我们会看到它们越来越多地构建更抽象的表示。所以,我们不知何故看到了某种模块化的发生。我们认为深度学习之所以有效,是因为我们能够在不同的位置拥有不同的功能部分。因此,我们正在以某种方式将处理过程分解为更简单的步骤,然后我们本质上训练一个具有多个步骤的程序,它能够描述越来越多的抽象表示。这里我们看到了第一层,它们可能有边缘和斑点。比方说,第三层检测到这些纹理。第五层感知对象部分,第八层已经是对象类。这些图片是从 AlexNet 的可视化中创建的。所以你可以看到,这似乎真的在网络中发生了。这大概也是深度学习奏效的一个关键原因。当我们试图在不同的位置计算不同的东西时,我们能够解开这个函数。

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

堆积回旋允许接近更大的内核。 CC 下的图片来自深度学习讲座的 4.0 。

嗯,我们想更深入一些,这里已经实现的一项技术是初始模块。改进的初始模块现在基本上用 5x5 卷积和 3x3 卷积取代了我们看到的那些过滤器,变成了这些结论的倍数。不是做 5x5 的卷积,而是连续做两个 3x3 的卷积。这已经节省了一些计算,然后您可以通过在顶部堆叠过滤器来替换 5x5 过滤器。我们可以看到,这实际上适用于各种各样的内核,您实际上可以将它们分成几个步骤。所以,你可以把它们串联起来。这种滤波器级联也是典型的计算机视觉课程中会讨论的内容。

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

可分离卷积允许从一维滤波器创建二维卷积。来自深度学习讲座CC BY 4.0 下的图片。

所以《盗梦空间 V2》已经有 42 层了。他们从本质上的 3x3 卷积和三个修改的初始模块开始,就像我们刚刚看到的。然后在下一层中,引入了一种有效的网格尺寸缩减方法,即使用步长卷积。因此,通道压缩有 1x1 卷积,步长为 1 的 3x3 卷积,后跟步长为 2 的 3x3 卷积。这实际上有效地取代了不同的池操作。下一个想法是引入五次平坦卷积模块。这里的想法是不再用二维卷积来表示卷积,而是把它们分成 x 和 y 方向的卷积。你交替产生这两个卷积。这里可以看到,我们从左侧分支的 1x1 卷积开始。然后我们进行 1x n 卷积,接着进行 n x1 卷积,接着进行 1x n 卷积,依此类推。这允许我们将内核分解成两个方向。所以,你知道,因为你交替地改变卷积的方向,你实际上是通过强制可分计算来分解二维卷积。我们还可以看到,卷积滤波器的分离适用于多种滤波器。当然,这是一个限制,因为它不允许所有可能的计算。但是请记住,我们在前面的层中有完整的 3x3 卷积。所以他们已经可以学习如何为后面的层采用。结果,它们可以被可分离卷积处理。

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

Inception V3 的特性。来自深度学习讲座的 4.0CC 下的图片。

这就导致了 Inception V3。对于 Inception 的第三个版本,他们基本上使用了 Inception V2,并为训练过程引入了 RMSprop,还在辅助分类器的完全连接层中引入了批量归一化,以及标签平滑正则化。

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

标注平滑有助于消除标注噪点。 CC 下的图片来自深度学习讲座的 4.0 。

标签平滑正则化是一个非常酷的技巧。所以让我们再花几分钟来研究一下这个想法。现在,如果你想想我们的标签向量通常是什么样子,我们有一个热编码向量。这意味着我们的标签本质上是狄拉克分布。这实质上是说,一个元素是正确的,所有其他元素都是错误的。我们通常使用 softmax。所以这意味着我们的激活趋向于无穷大。这并不太好,因为我们继续学习越来越大的权重,使它们变得越来越极端。所以,我们可以通过重量衰减来防止这种情况。这将防止我们的体重急剧增加。此外,我们还可以使用标签平滑。标签平滑的想法是,我们不是只使用狄拉克脉冲,而是将概率质量涂抹到其他类上。这是非常有用的,特别是在像 ImageNet 这样的地方,你有相当嘈杂的标签。你还记得那些不完全清楚的案例。在这些嘈杂的标签情况下,您可以看到这种标签平滑真的很有帮助。这个想法是,你把你的狄拉克分布乘以 1 减去一些小的ϵ.然后,将从正确类中扣除的ϵ平均分配给所有其他类。你可以看到这就是 1/K,其中 K 是类的数量。这种标签平滑的好处在于,你基本上不鼓励做出非常艰难的决定。这在有噪声标签的情况下非常有用。所以这是一个非常好的技巧,可以帮助你建立更深层次的模型。

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

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

下一次,我们想看看如何构建那些真正深度的模型。就我们目前所见,我们会问:为什么不在顶部堆叠更多层呢?如果你尝试这样做,会出现一些问题,我们将在下一个视频中探究原因。我们也将提出一些真正深入的解决方案。非常感谢大家的收听,下期视频再见。

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

参考

[1] Klaus Greff、Rupesh K. Srivastava 和 Jürgen Schmidhuber。“高速公路和残差网络学习展开的迭代估计”。年:学习代表国际会议(ICLR)。土伦,2017 年 4 月。arXiv: 1612.07771。
[2]何,,,任,等.“深度残差学习用于图像识别”。In: 2016 年 IEEE 计算机视觉与模式识别大会(CVPR)。拉斯维加斯,2016 年 6 月,第 770–778 页。arXiv: 1512.03385。
[3]何,,,,任等.“深剩余网络中的身份映射”。载于:计算机视觉— ECCV 2016:第 14 届欧洲会议,荷兰阿姆斯特丹,2016 年,第 630–645 页。arXiv: 1603.05027。
[4]胡经昌、沈立群、孙广昌。“挤压和激励网络”。载于:ArXiv 电子版(2017 年 9 月)。arXiv: 1709.01507 [cs。简历】。
[5]黄高,孙玉,刘庄等,“具有随机深度的深度网络”。载于:计算机视觉-ECCV 2016,会议录,第四部分。湛:施普林格国际出版公司,2016 年,第 646–661 页。
[6]黄高、刘庄和基利安·q·温伯格。“密集连接的卷积网络”。In: 2017 年 IEEE 计算机视觉与模式识别大会(CVPR)。檀香山,2017 年 7 月。arXiv: 1608.06993。亚历克斯·克里热夫斯基、伊利亚·苏茨基弗和杰弗里·E·辛顿。“使用深度卷积神经网络的 ImageNet 分类”。神经信息处理系统进展 25。柯伦咨询公司,2012 年,第 1097-1105 页。arXiv: 1102.0183。
[8] Yann A LeCun,Léon Bottou,Genevieve B Orr 等著《有效反向推进》。神经网络:交易技巧:第二版。第 75 卷。柏林,海德堡:施普林格柏林海德堡,2012 年,第 9-48 页。
【9】Y le Cun,L Bottou,Y Bengio 等,“基于梯度的学习应用于文档识别”。摘自:IEEE 86.11 会议录(1998 年 11 月),第 2278-2324 页。arXiv: 1102.0183。
【10】、,与水城颜。“网络中的网络”。国际学习代表会议。加拿大班夫,2014 年 4 月。arXiv: 1102.0183。
[11] Olga Russakovsky,贾登,苏浩等,“ImageNet 大规模视觉识别挑战赛”。摘自:《国际计算机视觉杂志》115.3(2015 年 12 月),第 211–252 页。
[12]卡伦·西蒙扬和安德鲁·齐塞曼。“用于大规模图像识别的非常深的卷积网络”。年:学习代表国际会议(ICLR)。2015 年 5 月,圣地亚哥。arXiv: 1409.1556。
[13]鲁佩什·库马尔·斯里瓦斯塔瓦,克劳斯·格雷夫,乌尔根·施密德胡伯等,《训练非常深的网络》。神经信息处理系统进展 28。柯伦咨询公司,2015 年,第 2377-2385 页。arXiv: 1507.06228。
[14]塞格迪、、、贾等著《用回旋深化》。In: 2015 年 IEEE 计算机视觉与模式识别会议(CVPR)。2015 年 6 月,第 1–9 页。
[15] C. Szegedy,V. Vanhoucke,S. Ioffe 等,“重新思考计算机视觉的初始架构”。In: 2016 年 IEEE 计算机视觉与模式识别大会(CVPR)。2016 年 6 月,第 2818–2826 页。
[16]克里斯蒂安·塞格迪、谢尔盖·约菲和文森特·万霍克。“Inception-v4,Inception-ResNet 和剩余连接对学习的影响”。In:第三十一届 AAAI 人工智能会议(AAAI-17) Inception-v4,三藩市,2017 年 2 月。arXiv: 1602.07261。
[17]安德烈亚斯·韦特、迈克尔·J·威尔伯和塞尔日·贝隆吉。“残差网络的行为类似于相对较浅的网络的集合”。神经信息处理系统进展 29。柯伦联合公司,2016 年,第 550–558 页。
【18】谢地、蒋雄、石梁浦。“你所需要的只是一个好的 Init:探索更好的解决方案来训练具有正交性和调制的极深度卷积神经网络”。In: 2017 年 IEEE 计算机视觉与模式识别大会(CVPR)。檀香山,2017 年 7 月。arXiv: 1703.01827。
[19]谢灵犀与。遗传 CNN。技术。众议员 2017。arXiv: 1703.01513。
[20]谢尔盖·扎戈鲁伊科和尼科斯·科莫达基斯。“广残网”。英国机器视觉会议(BMVC)会议录。BMVA 出版社,2016 年 9 月,第 87.1–87.12 页。
【21】K .张,M .孙,X .韩等《残差网络的残差网络:多级残差网络》。载于:IEEE 视频技术电路与系统汇刊第 99 页(2017),第 1 页。
[22]巴雷特·佐夫,维贾伊·瓦苏德万,黄邦贤·施伦斯等人,《学习可扩展的可转移架构》

架构—第 3 部分

原文:https://towardsdatascience.com/architectures-part-3-34dcfd979344?source=collection_archive---------45-----------------------

FAU 讲座笔记关于深度学习

剩余网络

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

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

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

航行

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

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

更深的模型在某个点饱和,甚至可能产生更差的结果。 CC 下的图片来自深度学习讲座的 4.0 。

欢迎回到深度学习!今天我们想讨论更多的架构,尤其是真正深层的架构。所以,我们真的在走向深度学习。如果你想用我们到目前为止看到的所有东西来训练更深入的模型,你会看到我们进入了某种饱和状态。如果你想更深入,那么你只需在顶部添加层,你会希望训练误差会下降。但是如果你仔细观察,你会发现一个 20 层的网络比一个 56 层的模型有更低的训练误差和测试集误差。因此,我们不能只是增加一层又一层,然后希望事情会变得更好。这种影响不仅仅是过度拟合造成的。我们在顶部构建层。所以,肯定有其他原因,这些原因很可能与消失梯度问题有关。其他原因可能是 ReLU、初始化或内部协变量移位的问题,我们尝试了批量标准化、eLU 和 SELU,但我们仍然有激活和梯度传播不良的问题。我们看到,如果你试图建立那些非常深的模型,我们会遇到渐变消失的问题,我们无法训练早期的层,这甚至会导致训练集的更严重的损失。

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

剩余网络将学习部分移动到侧支。 CC 下的图片来自深度学习讲座的 4.0 。

所以,我有一个解决方案,这些是剩余单位。这是一个非常酷的想法。所以,他们建议做的不是学习直接映射 F(x ),而是学习剩余映射。所以,我们想知道 H(x)和 H(x)是 F(x)和 x 的差,所以,我们也可以用不同的方式来表达,这实际上是如何实现的。你把你的网络 F(x)计算成某个层 H(x) + x,所以,可训练部分现在基本上在一个侧支中,侧支是 H(x),这是可训练的。在主分支上,我们只有一些 x 加上侧分支,它们将给出我们估计的 y。

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

残差块的第一版本在主路径上仍然具有非线性。来自深度学习讲座CC BY 4.0 下的图片。

在残差块的原始实现中,仍然存在差异。这与我们在上一张幻灯片中看到的并不完全一样。我们有一个侧分支,其中有一个加权层、批次归一化、ReLU、加权、另一个批次归一化,然后是加法和另一个非线性,即一个残差块的 ReLU。后来,这被改变为使用批次标准、ReLU、重量、批次标准、ReLU 和剩余块的重量。原来这种配置更稳定。我们基本上有了在正分支上反向传播的恒等式。这非常好,因为我们可以将梯度传播回早期层,这样我们可以获得更稳定的反向传播。

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

VGG、18 层网络和 18 层剩余网络的比较。 CC 下的图片来自深度学习讲座的 4.0 。

这就给我们带来了一个完整的剩余网络。所以,我们在底部切开它,在右手边显示底部。这是 VGG、43 层平面网络和 43 层剩余网络之间的比较。你可以看到本质上有这些被引入的跳跃连接。它们允许我们跳过这一步,然后在相应的早期层中反向传播。还涉及到缩减采样,当然,跳过连接也必须缩减采样。这就是为什么我们在这些位置有虚线连接。我们可以看到,VGG 有大约 196 亿次浮点运算,而我们的普通和剩余网络只有 36 亿次浮点运算。所以,它也更有效率。

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

有了剩余连接,我们现在可以更深入。来自深度学习讲座CC BY 4.0 下的图片。

现在让我们来测试一下。我们现在可以看到,在 34 层的情况下,我们没有得到错误率,因为我们希望有非常深的网络。因此,与仅使用 18 层网络相比,误差更高。但是如果您引入剩余连接,我们可以看到我们得到了好处,并且降低了错误率。因此,剩余连接帮助我们获得更稳定的梯度,并且我们现在可以随着深入而降低训练和验证误差。

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

剩余块还允许瓶颈结构的集成。 CC 下的图片来自深度学习讲座的 4.0 。

残差块网络有不同的变体。这是标准构建模块,在右侧,您可以看到我们也可以利用瓶颈思想,对通道进行下采样,然后进行卷积,再进行上采样。这就是那种瓶颈版的残块。

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

ResNets 再次将 ImageNet 的错误率减半。来自深度学习讲座CC BY 4.0 下的图片。

所以,我们可以把这个和我们到目前为止学过的其他食谱结合起来。如果我们这样做,我们可以看到我们甚至可以训练 152 层的网络。这在 2015 年产生了第一个真正击败人类表现的网络之一。记住我们说过的关于人类行为的所有事情,特别是如果你只有一个标签的话。所以,实际上你必须有更多的标签来理解问题的不确定性。无论如何,我们可以看到,我们真的进入了人类表现的范围,这是一个非常好的结果。

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

结果网可以被解释为分类器的集合。 CC 下的图片来自深度学习讲座的 4.0 。

人们一直在问“为什么这些残余网络表现得这么好?”。一个非常有趣的解释是这种所谓的 ResNets 系综观点。在这里,你可以看到,如果我们在彼此之上构建残差层或残差块,我们会看到我们可以将其分解为一种递归。所以,如果我们有 x₃等于 x₂加 H₃(x₂),我们可以代入,看到这等于 x₁加 H₂(x₁)加 H₃(x₁ + H₂(x₁)).我们可以再次代入,看到我们实际计算的是 x₀ + H₁(x₀)加上 H₂(x₀ + H₁(x₀))加上 H₃(x₀ + H₁(x₀) + H₂(x₀ + H₁(x₀))).哇,很酷的把戏。如果有人出于任何未知的原因要测试你的深度学习知识,你可能要记住这一点。所以,我真的建议仔细看看这条线。因此,我们在解释中看到,我们本质上是在构建我们更浅的残差分类器的集合。因此,我们可以说,我们从 ResNets 训练的分类器本质上是在构建一个非常强大的集成。

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

ResNets 与前馈网络。 CC 下的图片来自深度学习讲座的 4.0 。

这很好,我们看到,在经典前馈网络中,我们可以改变每个单层区域的表示,因为这里有矩阵乘法。矩阵乘法具有可以转换到完全不同的域的特性。因此,本质上在经典的前馈网络中,我们有一个单一的路径,在神经元水平上我们有许多不同的路径。在剩余网络中,我们得到 2ⁿ路径。在神经元水平,我们得到许多不同长度的路径,通过不同的层子集,这是一个非常强的集合,以这种方式构建。

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

表示视图将结果解释为表示的逐渐变化。来自深度学习讲座CC BY 4.0 下的图片。

我们也可以改变我们的观点,想想我们之前看到的剩余网络和全连接网络。在完全连接的层中,您基本上可以更改完整的表示。因此,我们试图在 a)、b)和 c)中展示这一点。所以 a)只是从一个域到另一个域的转换。如果我们现在展开它,我们可以看到残差网络在不同层上的表现基本上是逐渐变化的。因此,我们看到我们有一个轻微的变化,然后颜色逐渐向蓝色变化,我们必须在最后决定表示。如果我们将其与 c)中的完全连接的层进行比较,我们可以在第一层中有一个完全不同的表示,然后在第二层中有一个完全不同的表示,最后,我们最终映射到最后一层中所需的表示。所以在经典的全连通网络中,我们可以在每一层产生一个全新的表示。这意味着它们也变得非常依赖,因为为了做进一步的处理,表示需要匹配。

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

如果删除层,ResNets 只会逐渐失去性能。 CC 下的图片来自深度学习讲座的 4.0 。

所以,我们可以做一个非常有趣的实验,比如损伤研究,就像你在生物神经网络中做的一样。以下是随机深度的一些结果。所以,现在的想法是我们关闭整个层。我们可以关闭完整的层,它不会破坏由 ResNet 完成的分类,这很酷。因此,如果您只关闭大约 10%的层,那么您可以看到我们的性能有所下降,但不会崩溃。我减少的层数越多,性能就越差,但是因为我们在表示上有了细微的变化,我们可以去掉一些单独的步骤,而不会完全破坏这个网络。所以,这当然是我们对合奏的期望。好了,有了这些简单的表示和这种逐渐的变化,我们将在这堂课的后面展示,ResNets 也可以被解释为一种梯度下降过程。这当然是因为与观察有关,如果你遵循梯度下降,那么我们从每个位置都有相同的渐变。因此,我们正在用 ResNet 构建本质上类似的东西。我们实际上可以证明,如果你试图优化一个未知的损失函数,ResNet 配置也可以达到。你想训练这个梯度,你会准确地提出一个 ResNet 作为解决方案。但是这需要一点时间,我们会在这节课快结束的时候讨论这个问题。到目前为止,这些网络已经建得非常非常深了。甚至在 CIFAR-10 上也可能有 1200 层。这是一个非常有趣的结果。我们看到我们真的在向非常深的网络发展。

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

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

那么我们还能谈些什么呢?好吧,下一次在深度学习中,我们想谈谈剩余连接的兴起,以及一些帮助你建立真正有效的深度网络的技巧。所以,我希望你喜欢这个视频,并期待下一个!

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

参考

[1] Klaus Greff、Rupesh K. Srivastava 和 Jürgen Schmidhuber。“高速公路和残差网络学习展开的迭代估计”。年:学习代表国际会议(ICLR)。土伦,2017 年 4 月。arXiv: 1612.07771。
[2]何,,,任,等.“深度残差学习用于图像识别”。In: 2016 年 IEEE 计算机视觉与模式识别大会(CVPR)。拉斯维加斯,2016 年 6 月,第 770–778 页。arXiv: 1512.03385。
[3]何,,,,任等.“深剩余网络中的身份映射”。载于:计算机视觉— ECCV 2016:第 14 届欧洲会议,荷兰阿姆斯特丹,2016 年,第 630–645 页。arXiv: 1603.05027。
[4]胡经昌、沈立群、孙广昌。“挤压和激励网络”。载于:ArXiv 电子版(2017 年 9 月)。arXiv: 1709.01507 [cs。简历】。
[5]黄高,孙玉,刘庄等,“具有随机深度的深度网络”。载于:计算机视觉-ECCV 2016,会议录,第四部分。湛:施普林格国际出版公司,2016 年,第 646–661 页。
[6]黄高、刘庄和基利安·q·温伯格。“密集连接的卷积网络”。In: 2017 年 IEEE 计算机视觉与模式识别大会(CVPR)。檀香山,2017 年 7 月。arXiv: 1608.06993。亚历克斯·克里热夫斯基、伊利亚·苏茨基弗和杰弗里·E·辛顿。“使用深度卷积神经网络的 ImageNet 分类”。神经信息处理系统进展 25。柯伦咨询公司,2012 年,第 1097-1105 页。arXiv: 1102.0183。
[8] Yann A LeCun,Léon Bottou,Genevieve B Orr 等著《有效反向推进》。神经网络:交易技巧:第二版。第 75 卷。柏林,海德堡:施普林格柏林海德堡,2012 年,第 9-48 页。
【9】Y le Cun,L Bottou,Y Bengio 等,“基于梯度的学习应用于文档识别”。摘自:IEEE 86.11 会议录(1998 年 11 月),第 2278-2324 页。arXiv: 1102.0183。
【10】、,与水城颜。“网络中的网络”。国际学习代表会议。加拿大班夫,2014 年 4 月。arXiv: 1102.0183。
[11] Olga Russakovsky,贾登,苏浩等,“ImageNet 大规模视觉识别挑战赛”。摘自:《国际计算机视觉杂志》115.3(2015 年 12 月),第 211–252 页。
[12]卡伦·西蒙扬和安德鲁·齐塞曼。“用于大规模图像识别的非常深的卷积网络”。年:学习代表国际会议(ICLR)。2015 年 5 月,圣地亚哥。arXiv: 1409.1556。
[13]鲁佩什·库马尔·斯里瓦斯塔瓦,克劳斯·格雷夫,乌尔根·施密德胡伯等,《训练非常深的网络》。神经信息处理系统进展 28。柯伦咨询公司,2015 年,第 2377-2385 页。arXiv: 1507.06228。
[14]塞格迪、、、贾等著《用回旋深化》。In: 2015 年 IEEE 计算机视觉与模式识别会议(CVPR)。2015 年 6 月,第 1–9 页。
[15] C. Szegedy,V. Vanhoucke,S. Ioffe 等,“重新思考计算机视觉的初始架构”。In: 2016 年 IEEE 计算机视觉与模式识别大会(CVPR)。2016 年 6 月,第 2818–2826 页。
[16]克里斯蒂安·塞格迪、谢尔盖·约菲和文森特·万霍克。“Inception-v4,Inception-ResNet 和剩余连接对学习的影响”。In:第三十一届 AAAI 人工智能会议(AAAI-17) Inception-v4,三藩市,2017 年 2 月。arXiv: 1602.07261。
[17]安德烈亚斯·韦特、迈克尔·J·威尔伯和塞尔日·贝隆吉。“残差网络的行为类似于相对较浅的网络的集合”。神经信息处理系统进展 29。柯伦联合公司,2016 年,第 550–558 页。
【18】谢地、蒋雄、石梁浦。“你所需要的只是一个好的 Init:探索更好的解决方案来训练具有正交性和调制的极深度卷积神经网络”。In: 2017 年 IEEE 计算机视觉与模式识别大会(CVPR)。檀香山,2017 年 7 月。arXiv: 1703.01827。
[19]谢灵犀与。遗传 CNN。技术。众议员 2017。arXiv: 1703.01513。
[20]谢尔盖·扎戈鲁伊科和尼科斯·科莫达基斯。“广残网”。英国机器视觉会议(BMVC)会议录。BMVA 出版社,2016 年 9 月,第 87.1–87.12 页。
【21】K .张,M .孙,X .韩等《残差网络的残差网络:多级残差网络》。载于:IEEE 视频技术电路与系统汇刊第 99 页(2017),第 1 页。
[22]巴雷特·佐夫,维贾伊·瓦苏德万,黄邦贤·施伦斯等人,《学习可扩展的可转移架构》

架构—第 4 部分

原文:https://towardsdatascience.com/architectures-part-4-a56f1b70f12f?source=collection_archive---------40-----------------------

FAU 讲座笔记关于深度学习

剩余连接的兴起

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

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

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

航行

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

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

剩余连接与 inception 块的组合导致了 Inception-ResNet。 CC 下的图片来自深度学习讲座的 4.0 。

欢迎回到深度学习!正如上一个视频中所承诺的,我们想继续讨论比之前视频中看到的残余网络更复杂的架构。好吧,我有什么给你?当然,我们也可以将这个剩余连接的配方用于我们的盗梦空间网络,然后这导致了盗梦空间网络。您可以看到,剩余连接的概念非常简单,您可以很容易地将其合并到许多其他体系结构中。这也是我们在这里展示这两种架构的原因。它们是构建真正深度网络的重要基石。

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

不同架构在精度、参数和触发器方面的比较。 CC 下的图片来自深度学习讲座的 4.0 。

您可以在这里看到,inception 和 ResNet 架构确实也有助于您构建非常强大的网络。我很喜欢这个情节,因为你可以从中学到很多东西。y 轴表示最高精度的性能。你可以在 x 轴上看到手术次数。这是以千兆次浮点运算为单位的。此外,您还可以看到由圆的直径表示的模型参数的数量。在这里,你可以看到 VGG-16 和 VGG-19,它们在最右边。因此,它们的计算量很大,性能也不错,但不如我们在课堂上看到的其他模型。你也看到 AlexNet 在左下方。所以它没有太多的计算。此外,就参数而言,它相当大,但性能并不太好。现在,你看,如果你做批量标准化和网络中的网络,你会变得更好。此外,GoogleNet 和 ResNet-18 的顶级精确度也有所提高。我们看到,我们现在可以继续构建更深入的模型,但不会获得太多的新参数。这有助于我们建立更有效、更高效的网络。当然,一段时间后,我们也开始增加参数空间,您可以看到,最佳性能是通过 inception V3 或 inception V4 网络或 Resnet-100 获得的。

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

宽残余块与窄残余块。来自深度学习讲座CC BY 4.0 下的图片。

那么,还有哪些方法可以帮助你建立更好的模型呢?我们已经成功看到的一件事是增加剩余网络的宽度。因此,存在广泛的剩余网络。它们减少了深度,但是增加了剩余块的宽度。然后,您还可以在这些残差块中使用 dropout,您可以表明,具有类似参数数量的 16 层深度网络可以优于一千层深度网络。所以在这里,力量不是来自深度,而是来自剩余连接和引入的宽度。

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

ResNeXt 结合了我们到目前为止看到的许多方法。 CC 下的图片来自深度学习讲座的 4.0 。

还有像 ResNeXt 这样的东西,所有以前的配方都是在这里一起构建的。它允许聚合残差变换。所以,你可以看到这实际上相当于早期的串联。所以,我们可以用早期的级联来代替它,然后一般的想法是你做群卷积。因此,您将输入和输出链分成组,然后在每个组中分别执行卷积。现在,这与 ResNet 瓶颈模块具有相似的 flops 和参数数量,但它更宽,是一个稀疏连接的模块。所以这个挺受欢迎的。

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

ResNet 中的 ResNet。来自深度学习讲座CC BY 4.0 下的图片。

然后,当然你可以把这个和其他想法结合起来。在 ResNet-of-ResNet 中,您甚至可以在网络中建立更多的剩余连接。

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

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

有了 DenseNets,你可以尝试将几乎所有的东西与所有的东西连接起来。你有密集连接的卷积神经网络。它具有特征传播和特征重用。它还极大地缓解了消失梯度问题,由于过渡层使用 1x1 卷积,因此在多达 264 层的情况下,与 ResNet 相比,实际上需要的参数减少了三分之一。

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

挤压和激励网络。来自深度学习讲座的 4.0CC 下的图片。

此外,我想向大家展示的一个非常有趣的想法是挤压和激励网络,这是 2017 年 ImageNet 挑战赛的获胜者,它有 2.3%的前 5 名错误。这个想法是显式地建模渠道的相互依赖性,这基本上意味着你有一些更相关的渠道取决于内容。如果你有狗的特征,当你试图观察汽车时,它们不会很有趣。

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

挤压和激励网络的关键思想是:将上下文信息压缩到一个通道,并使用它来缩放不同的特征图。 CC 下的图片来自深度学习讲座的 4.0 。

那么,这是如何实现的呢?嗯,我们添加了一个可训练的模块,允许根据输入重新调整通道。所以,我们有这里显示的特征地图。然后,我们有一个仅向下映射到一个维度的分支。然后将该一维乘以不同的特征图,允许根据输入抑制一些特征图,并根据输入放大其他特征图。我们本质上是挤压,即通过全局平均池将每个通道压缩为一个值。这就是我们如何构建特征重要性,然后在需要的地方激发。我们在 sigmoid 函数中使用完全连接的层,以便只激发重要的层。顺便说一下,这与我们在长短期记忆细胞中所做的事情非常相似,我们可能会在下周的视频中谈到。然后我们缩放,因此我们用输出来缩放输入映射。

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

我们在这里讨论了大部分关键概念,现在不得不停止列举更多的架构。来自深度学习讲座的 4.0CC 下的图片。

当然,我们可以将它与大多数其他架构相结合:与初始模块、与 ResNet、与 ResNeXt 等等。所以,我们有很多不同的选择。说实话,我不想在这里展示另一种架构。

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

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

下一次我们将讨论学习网络架构。所以,有一些方法可以自动确定。那不是效率更高吗?好了,请继续关注,我将在下一个视频中告诉你!

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

参考

[1] Klaus Greff、Rupesh K. Srivastava 和 Jürgen Schmidhuber。“高速公路和残差网络学习展开的迭代估计”。年:学习代表国际会议(ICLR)。土伦,2017 年 4 月。arXiv: 1612.07771。
[2]何,,,任,等.“深度残差学习用于图像识别”。In: 2016 年 IEEE 计算机视觉与模式识别大会(CVPR)。拉斯维加斯,2016 年 6 月,第 770–778 页。arXiv: 1512.03385。
[3]何,,,,任等.“深剩余网络中的身份映射”。载于:计算机视觉— ECCV 2016:第 14 届欧洲会议,荷兰阿姆斯特丹,2016 年,第 630–645 页。arXiv: 1603.05027。
[4]胡经昌、沈立群、孙广昌。“挤压和激励网络”。载于:ArXiv 电子版(2017 年 9 月)。arXiv: 1709.01507 [cs。简历】。
[5]黄高,孙玉,刘庄等,“具有随机深度的深度网络”。载于:计算机视觉-ECCV 2016,会议录,第四部分。湛:施普林格国际出版公司,2016 年,第 646–661 页。
[6]黄高、刘庄和基利安·q·温伯格。“密集连接的卷积网络”。In: 2017 年 IEEE 计算机视觉与模式识别大会(CVPR)。檀香山,2017 年 7 月。arXiv: 1608.06993。亚历克斯·克里热夫斯基、伊利亚·苏茨基弗和杰弗里·E·辛顿。“使用深度卷积神经网络的 ImageNet 分类”。神经信息处理系统进展 25。柯伦咨询公司,2012 年,第 1097-1105 页。arXiv: 1102.0183。
[8] Yann A LeCun,Léon Bottou,Genevieve B Orr 等著《有效反向推进》。神经网络:交易技巧:第二版。第 75 卷。柏林,海德堡:施普林格柏林海德堡,2012 年,第 9-48 页。
【9】Y le Cun,L Bottou,Y Bengio 等,“基于梯度的学习应用于文档识别”。摘自:IEEE 86.11 会议录(1998 年 11 月),第 2278-2324 页。arXiv: 1102.0183。
【10】、,与水城颜。“网络中的网络”。国际学习代表会议。加拿大班夫,2014 年 4 月。arXiv: 1102.0183。
[11] Olga Russakovsky,贾登,苏浩等,“ImageNet 大规模视觉识别挑战赛”。摘自:《国际计算机视觉杂志》115.3(2015 年 12 月),第 211–252 页。
[12]卡伦·西蒙扬和安德鲁·齐塞曼。“用于大规模图像识别的非常深的卷积网络”。年:学习代表国际会议(ICLR)。2015 年 5 月,圣地亚哥。arXiv: 1409.1556。
[13]鲁佩什·库马尔·斯里瓦斯塔瓦,克劳斯·格雷夫,乌尔根·施密德胡伯等,《训练非常深的网络》。神经信息处理系统进展 28。柯伦咨询公司,2015 年,第 2377-2385 页。arXiv: 1507.06228。
[14]塞格迪、、、贾等著《用回旋深化》。In: 2015 年 IEEE 计算机视觉与模式识别会议(CVPR)。2015 年 6 月,第 1–9 页。
[15] C. Szegedy,V. Vanhoucke,S. Ioffe 等,“重新思考计算机视觉的初始架构”。In: 2016 年 IEEE 计算机视觉与模式识别大会(CVPR)。2016 年 6 月,第 2818–2826 页。
[16]克里斯蒂安·塞格迪、谢尔盖·约菲和文森特·万霍克。“Inception-v4,Inception-ResNet 和剩余连接对学习的影响”。In:第三十一届 AAAI 人工智能会议(AAAI-17) Inception-v4,三藩市,2017 年 2 月。arXiv: 1602.07261。
[17]安德烈亚斯·韦特、迈克尔·J·威尔伯和塞尔日·贝隆吉。“残差网络的行为类似于相对较浅的网络的集合”。神经信息处理系统进展 29。柯伦联合公司,2016 年,第 550–558 页。
【18】谢地、蒋雄、石梁浦。“你所需要的只是一个好的 Init:探索更好的解决方案来训练具有正交性和调制的极深度卷积神经网络”。In: 2017 年 IEEE 计算机视觉与模式识别大会(CVPR)。檀香山,2017 年 7 月。arXiv: 1703.01827。
[19]谢灵犀与。遗传 CNN。技术。众议员 2017。arXiv: 1703.01513。
[20]谢尔盖·扎戈鲁伊科和尼科斯·科莫达基斯。“广残网”。英国机器视觉会议(BMVC)会议录。BMVA 出版社,2016 年 9 月,第 87.1–87.12 页。
【21】K .张,M .孙,X .韩等《残差网络的残差网络:多级残差网络》。载于:IEEE 视频技术电路与系统汇刊第 99 页(2017),第 1 页。
[22]巴雷特·佐夫,维贾伊·瓦苏德万,黄邦贤·施伦斯等人,《学习可扩展的可转移架构》

架构—第 5 部分

原文:https://towardsdatascience.com/architectures-part-5-7224dd8fcf39?source=collection_archive---------57-----------------------

FAU 讲座笔记关于深度学习

学习架构

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

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

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

航行

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

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

优化架构的可能标准。 CC 下的图片来自深度学习讲座的 4.0 。

欢迎回到深度学习,今天我们想谈谈架构的最后一部分。特别是,我们想要研究学习架构。第 5 部分:学习架构。这里的想法是,我们希望拥有自我开发的网络结构,它们可以在精度或浮点运算方面进行优化。当然,你可以简单地用网格搜索来做。但是这通常太费时间了。

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

学习建筑的不同策略。 CC 下的图片来自深度学习讲座的 4.0 。

因此,有几种方法可以做到这一点。[22]中的一个想法是使用强化学习。因此,你训练一个递归神经网络(RNN)来生成网络的模型描述,你用强化学习来训练这个 RNN,以最大化预期的准确性。当然,也有很多其他的选择。你可以对小积木进行强化学习,转移到大的细胞神经网络和遗传算法,基于能量的,实际上有很多想法你可以遵循。就培训时间而言,它们都非常昂贵,如果您想要研究这些方法,您真的必须拥有一个大型集群。否则,你就不能真正进行实验。所以,实际上现在世界上没有太多的团体能够做这样的研究。

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

两个建筑学习中出现的积木的例子。来自深度学习讲座CC BY 4.0 下的图片。

因此,您可以看到,这里也出现了许多我们之前看到的元素。左手边有可分离的卷积和许多其他的方块。你可以看到这个正常的细胞看起来有点像启始块。如果你看右边,它看起来有点像早期版本的模块,在那里你有这些分离。它们以某种方式连接在一起,并使用剩余连接。这是由建筑搜索决定的。ImageNet 的性能与计算成本较低的挤压和激励网络相当。当然,也有可能针对不同的尺寸进行优化,例如针对移动平台。

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

ImageNet 似乎已经达到了极限。 CC 下的图片来自深度学习讲座的 4.0 。

ImageNet —我们在哪里?嗯,我们看到,在大多数提交的内容中,ImageNet 分类现在已经下降到 5%以下。实质性的重大改进越来越难以在这个数据集上显示出来。上一次官方挑战是在 2017 年的 CVPR。它现在继续在卡格尔。有新的数据集正在产生和需要。例如,3d 场景、人类水平的理解以及那些数据集目前正在生成。例如,MS COCO 数据集或视觉基因组数据集已经取代 ImageNet 成为最先进的数据集。当然,也有不同的研究方向,如移动应用的速度和网络规模。在这些情况下,ImageNet 可能仍然是一个合适的挑战。

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

建筑讲座综述。 CC 下的图片来自深度学习讲座的 4.0 。

所以,我们来得出一些结论。我们看到 1x1 滤波器减少了参数并增加了正则化。这是一种非常常见的技术。初始模块真的很好,因为它们允许你在卷积和池化之间找到正确的平衡。剩余连接是一种被反复使用的方法。我们还看到,一些新的架构实际上是可以学习的。因此,我们看到更深层次的模型从五层增加到一千层以上。然而,通常较小的网就足够了。当然,这取决于训练数据量。如果你有足够的数据,你只能训练那些真正大的网络。我们已经看到,有时构建更宽的层而不是更深的层也是有意义的。你记得,我们已经在普遍逼近定理中看到过。如果我们有无限宽的层,那么也许我们可以把所有的东西放进一层。

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

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

好了,这让我们对接下来的几个视频有了展望。我们要讨论的是递归神经网络。我们将研究长短期记忆细胞,通过时间进行截短的反向传播,这是一个关键因素,以便能够训练这些循环网络,最后我们来看看长短期记忆细胞。Schmidthuber 和 Hochreiter 提出的一个重要观点是。Cho 提出的另一个想法是门控循环单位,它可以在某种程度上成为传统循环细胞和长短期记忆细胞之间的桥梁。

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

综合题可以帮助备考。 CC 下的图片来自深度学习讲座的 4.0 。

好吧,我们来看一些综合问题:那么深度模型相比浅层网络有什么优势?为什么可以说残差网络学习的是浅层网络的系综?你记得,我在那张幻灯片上暗示过,如果你想准备考试,这是一个非常重要的概念。当然,你应该能够描述瓶颈层,或者标准的 inception 模块是什么,如何改进?我有很多进一步的阅读双路径网络。所以你也可以看看关于压缩和激发网络的论文。还有更多有趣的作品可以在这里找到在介质上当然还有移动网和其他无残留连接的深网。这已经把我们带到了这节课的结尾,我希望你们玩得开心。期待在下一个视频中见到你,我们将在视频中讨论递归神经网络。我听说它们可以用五行代码写下来。所以下次见!

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

参考

[1] Klaus Greff、Rupesh K. Srivastava 和 Jürgen Schmidhuber。“高速公路和残差网络学习展开的迭代估计”。年:学习代表国际会议(ICLR)。土伦,2017 年 4 月。arXiv: 1612.07771。
[2]何,,,任,等.“深度残差学习用于图像识别”。In: 2016 年 IEEE 计算机视觉与模式识别大会(CVPR)。拉斯维加斯,2016 年 6 月,第 770–778 页。arXiv: 1512.03385。
[3]何,,,,任等.“深剩余网络中的身份映射”。载于:计算机视觉— ECCV 2016:第 14 届欧洲会议,荷兰阿姆斯特丹,2016 年,第 630–645 页。arXiv: 1603.05027。
[4]胡经昌、沈立群、孙广昌。“挤压和激励网络”。载于:ArXiv 电子版(2017 年 9 月)。arXiv: 1709.01507 [cs。简历】。
[5]黄高,孙玉,刘庄等,“具有随机深度的深度网络”。载于:计算机视觉-ECCV 2016,会议录,第四部分。湛:施普林格国际出版公司,2016 年,第 646–661 页。
[6]黄高、刘庄和基利安·q·温伯格。“密集连接的卷积网络”。In: 2017 年 IEEE 计算机视觉与模式识别大会(CVPR)。檀香山,2017 年 7 月。arXiv: 1608.06993。亚历克斯·克里热夫斯基、伊利亚·苏茨基弗和杰弗里·E·辛顿。“使用深度卷积神经网络的 ImageNet 分类”。神经信息处理系统进展 25。柯伦咨询公司,2012 年,第 1097-1105 页。arXiv: 1102.0183。
[8] Yann A LeCun,Léon Bottou,Genevieve B Orr 等著《有效反向推进》。神经网络:交易技巧:第二版。第 75 卷。柏林,海德堡:施普林格柏林海德堡,2012 年,第 9-48 页。
【9】Y le Cun,L Bottou,Y Bengio 等,“基于梯度的学习应用于文档识别”。摘自:IEEE 86.11 会议录(1998 年 11 月),第 2278-2324 页。arXiv: 1102.0183。
【10】、,与水城颜。“网络中的网络”。国际学习代表会议。加拿大班夫,2014 年 4 月。arXiv: 1102.0183。
[11] Olga Russakovsky,贾登,苏浩等,“ImageNet 大规模视觉识别挑战赛”。摘自:《国际计算机视觉杂志》115.3(2015 年 12 月),第 211–252 页。
[12]卡伦·西蒙扬和安德鲁·齐塞曼。“用于大规模图像识别的非常深的卷积网络”。年:学习代表国际会议(ICLR)。2015 年 5 月,圣地亚哥。arXiv: 1409.1556。
[13]鲁佩什·库马尔·斯里瓦斯塔瓦,克劳斯·格雷夫,乌尔根·施密德胡伯等,《训练非常深的网络》。神经信息处理系统进展 28。柯伦咨询公司,2015 年,第 2377-2385 页。arXiv: 1507.06228。
[14]塞格迪、、、贾等著《用回旋深化》。In: 2015 年 IEEE 计算机视觉与模式识别会议(CVPR)。2015 年 6 月,第 1–9 页。
[15] C. Szegedy,V. Vanhoucke,S. Ioffe 等,“重新思考计算机视觉的初始架构”。In: 2016 年 IEEE 计算机视觉与模式识别大会(CVPR)。2016 年 6 月,第 2818–2826 页。
[16]克里斯蒂安·塞格迪、谢尔盖·约菲和文森特·万霍克。“Inception-v4,Inception-ResNet 和剩余连接对学习的影响”。In:第三十一届 AAAI 人工智能会议(AAAI-17) Inception-v4,三藩市,2017 年 2 月。arXiv: 1602.07261。
[17]安德烈亚斯·韦特、迈克尔·J·威尔伯和塞尔日·贝隆吉。“残差网络的行为类似于相对较浅的网络的集合”。神经信息处理系统进展 29。柯伦联合公司,2016 年,第 550–558 页。
【18】谢地、蒋雄、石梁浦。“你所需要的只是一个好的 Init:探索更好的解决方案来训练具有正交性和调制的极深度卷积神经网络”。In: 2017 年 IEEE 计算机视觉与模式识别大会(CVPR)。檀香山,2017 年 7 月。arXiv: 1703.01827。
[19]谢灵犀与。遗传 CNN。技术。众议员 2017。arXiv: 1703.01513。
[20]谢尔盖·扎戈鲁伊科和尼科斯·科莫达基斯。“广残网”。英国机器视觉会议(BMVC)会议录。BMVA 出版社,2016 年 9 月,第 87.1–87.12 页。
【21】K .张,M .孙,X .韩等《残差网络的残差网络:多级残差网络》。载于:IEEE 视频技术电路与系统汇刊第 99 页(2017),第 1 页。
[22]巴雷特·佐夫,维贾伊·瓦苏德万,黄邦贤·施伦斯等人,《学习可扩展的可转移架构》

归档和记录您对公共数据的使用

原文:https://towardsdatascience.com/archiving-and-logging-your-use-of-public-data-5c19a7ac360?source=collection_archive---------64-----------------------

处理公共数据集的不确定性

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

信用:乌拉 Kuźma

当我从网上下载数据集时,我总是担心它们的不稳定性。链接死了,数据变了,灰归灰,尘归尘。

这就是为什么我将返程机引入我的工作流程。但即使这样,也很难确定我是从一个存档网站还是从一个实时网站下载数据,也很难理解我过去做了什么。

我在消费者金融调查 (SCF)的工作中所做的是实现一个同时归档和记录我使用的数据的系统。下面是我所做工作的总结,但是如果你只是想看代码,请滚动到这篇文章的底部,查看我在 SCF 方面实现的功能的要点。

WaybackPy 的建筑

我想在这个项目中完成的最重要的事情是确保我在下载数据时尽可能多地使用最近的 Wayback 档案。另外,对于没有存档的任何数据,我希望确保它在 Wayback 上存档以供将来使用。

我找到的最好的包是 WaybackPy ,尽管我需要做一些修改来让它为我的目的工作。

首先,我需要实现允许我查看最新归档的年龄的属性。通过这种方式,我可以查看给定的archive_age_limit是否需要新的归档。

举例来说,如果你得到一个通过[www.google.com](http://www.google.com)的 WaybackPy Url 对象的len(),你会得到 0,或者是自上次存档以来的天数。

import waybackpyurl = “https://www.google.com/"waybackpy_url_obj = waybackpy.Url(url)print(len(waybackpy_url_obj))

考虑到几乎每天都会生成一个新的归档,这是有意义的。

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

Google.com 档案馆(作者截图)

归档和记录数据集

有了 WaybackPy,归档就变得简单了。只要确保为超过一定年龄的档案调用save()方法,存储一些关键数据,就可以开始了。

更难的部分是将关键数据添加到 CSV 中以供进一步检查。对于不能从 Wayback 机器上直接访问的新档案,尤其如此。

下面是一个实现的函数,它将您想要的数据所在的 URL 和数据本地保存的目标目录作为参数。它返回的是一个字典,包含最新存档的 URL 和时间戳。为了检查它的行为,让我们看看它是如何与 SCF 一起使用的。

使用 SCF 实现

在这篇文章的底部是一个完整的要点,展示了如何存档,记录和下载 SCF 数据。这个过程相对简单:

  1. 提供您想要的 SCF 数据的年份、您想要的变量以及您想要存储数据的目标目录。
  2. 使用最新的归档文件,或者如果最新的归档文件比您的限制旧,则创建新的归档文件。同时,记录正在使用的最新归档或新归档。
  3. 尝试使用存档 URL 来检索您的数据,否则使用实时 URL。
  4. 将您的数据转换为熊猫数据框。

日志本身的行为方式如下:

  1. 如果最新存档在您的年龄限制内,它将记录其详细信息,如果您在年龄限制内再次尝试重新下载该数据,日志将不会重复记录。
  2. 如果最新的存档超过了年龄限制,它将记录您保存的详细信息,如果您重新下载它。因为 Wayback 可能不会立即显示您的记录,所以您可能会在日志中有多个保存和记录,这比在 Wayback 不起作用时丢失保存的数据要好。

因此,如果您今天要下载 2019 年、2016 年和 2013 年的 SCF 数据,最后一个被下载两次,您会期望日志显示 4 个带有archive_age_limit = 30的记录,因为 2019 年的数据集是唯一一个在过去 30 天内存档的数据集。下面是一个例子,你会看到什么。

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

示例日志(作者截图)

最后的想法

我实现的日志对我的目的肯定是有用的,但是我还没有完全探索这段代码是如何被破坏的。很难找出如何最好地处理最近存档但没有立即更新的网站,但上面描述的“过度记录”行为总比没有好。

其他潜在的问题可能是不同的文件类型,但基本的归档行为应该保持不变。如果你想看的话,至少这段代码可以用于 SCF 的 zip 文件。

北极猴子歌词生成器|重访

原文:https://towardsdatascience.com/arctic-monkeys-lyrics-generator-revisited-914bce61e013?source=collection_archive---------61-----------------------

我的模特认为我有一种虚构的幽默感

我必须给大家讲一个我一年前做的项目当时我在大三,为实习做准备,并且必须遵循这个面试前的日程表。在那之前,我是自然语言处理(NLP)的新手,至少对日历的结尾有所了解。当时有一个我认为极其令人畏惧的任务,“就你喜欢学习的任何话题写一篇博客?”

这让人望而生畏,因为这完全取决于我,当你真正拥有自主权时,它就没那么有趣了。我最后糊了两样我喜欢的东西,北极猴子和文本生成。它接受一个艺术家的名字,收集所有的歌词,输入到一个语言模型中,这个语言模型善于预测序列中的下一个单词,并按照你的艺术家的风格创作歌词。我用 lyricsgenius 刮歌词。 nlpaug 通过扩充来增加数据集。GPT-2 作为使用 gpt2-simple 包训练的语言模型。

你可以在这里看到演讲,如果你想看幻灯片/笔记本,你可以在这里看到。鉴于 NLP 中的所有东西都有几个月的有效期,并且我所有的代码都已经过时了,所以我不得不对笔记本做了很多修改。

以下是已经改变的事情,或者我应该说,是相同的事情,但我在一年后了解/发现

— -

  • GPT-2 代表生成式预训练变压器;是的,我以前不知道。
  • 很多 Python 包都不擅长向后兼容。
  • 不管你有多困,都不要忘记检查你的模特。
  • GPT-2 Simple 现在提供四种型号,小型(124 米),中型(355 米),大型(774 米),超大型(774 米)。
  • Transformer 基于自我关注的概念(关注句子的不同部分以创建一个表示),这使得并行估计成为可能,因为您不是一次一个单词地处理句子。
  • 检查你的模型。
  • nlpaug 从 BERT aug 迁移到 ContextualWordEmbs,以合并所有更新的 BERT。
  • 不要忘记检查你的模型。

想自己试试吗?

  1. 通过更改本笔记本中的 API 键和艺术家姓名来获取您的数据。
  2. 通过改变文本文件的名称来训练你的模型,以反映你的文件名这里
  3. 测试你的模型

我最喜欢的一些生成的歌词是:

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

最初发表于https://meghana.substack.com

在 NBA,三分球比两分球更重要吗?

原文:https://towardsdatascience.com/are-3-pointers-more-important-than-2-pointers-in-the-nba-1fa8e1422c60?source=collection_archive---------17-----------------------

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

TJ·德拉戈塔在 Unsplash 上的照片

如果你是 NBA 的粉丝(或者稍微熟悉联盟),你可能知道三分球正在上升。三分线在 1979-80 赛季首次引入 NBA,除了从 1994 年开始三分线缩短了 3 个赛季之外,它的使用逐年稳步增长。这种情况一直持续到 2000 年代末的几年,然后在 2011-12 赛季开始时急剧转向比以往任何时候都更陡峭的斜坡,并迅速增加到今天的水平。

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

虽然三分球的崛起是明确而明显的,但对我来说,它回避了一个问题:这种趋势是正确的吗?三分球比两分球更能代表成功吗?

幸运的是,篮球和大多数其他运动一样,有丰富的数据收集,所以这些问题可以得到理想的答案!为了用 Python 完成这项任务,我设定了一个目标,即使用线性回归模型来预测球队在一个赛季中的胜利,使用逻辑回归分类模型来预测球队是否能进入季后赛。有了这些模型,我就能确定是 2 分投篮还是 3 分投篮对成功更重要,是线性模型赢的更多还是逻辑模型更有可能进入季后赛。

数据采集

使用三种不同的方法收集数据:

  1. 球员统计数据——图书馆basketball_reference_web_scraper被用来从网站https://www.basketball-reference.com/收集数据,该网站收藏了自 20 世纪 40 年代以来的 NBA 统计数据。
  2. 球员工资 —库selenium用于从https://hoopshype.com/salaries/players/中按年份抓取球员姓名和工资数据。(我有一篇关于如何使用selenium的分步文章,在这里使用这个确切的例子:https://medium . com/@ Bryan . pfalzgraf/how-to-use-selenium-to-web-scrape-with-example-80 F9 b 23 a 843 a)
  3. 球队统计 —库nba_api用于从 NBA 官方网站https://stats.nba.com/中抓取数据。

我最终决定使用 1983-84 赛季以来的数据,因为那是第一个有 16 支球队进入季后赛的赛季。关于收集的数据,注意一些事情也很重要。

  1. 我积累的所有数据都是赛季总数。我需要在每场比赛的基础上得到所有的东西,以使所有的东西都一样。一些球员因为受伤或休息等原因打了更少的比赛。至于球队总数,我的数据集中有两个赛季因为劳资纠纷导致停摆而缩短了。1998 赛季有 50 场常规赛,2011 赛季有 66 场常规赛。
  2. 考虑到通货膨胀和 NBA 工资帽随时间的变化,我不得不通过使每个球员的工资占当年联盟总工资的百分比来标准化。这使得每个球员的正常工资可以逐年比较。

建模

Wins 预测的线性回归

1-第一次尝试是尝试看看仅仅使用进攻投篮统计数据是否能让一切都有条理。我建模使用:FG2_PCTFG3_PCTFT_PCTFG2A_PER_GPFG3A_PER_GPFG3A/FG2A

  • 列车 R : 0.4028
  • 测试 R : 0.2947
  • 这些值似乎不够高,模型过度适合训练数据,所以我不想从中得出任何结论,因为我可以添加其他非拍摄统计数据的更多特征。

2 —第二次尝试包括:FG2_PCTFG3_PCTFT_PCTFG2M_PER_GPFG2A_PER_GPFG3M_PER_GPFG3A_PER_GPFTM_PER_GPFTA_PER_GPOREB_PER_GPDREB_PER_GPAST_PER_GPPF_PER_GPSTL_PER_GPTOV_PER_GPBLK_PER_GP

  • 列车 R : 0.8049
  • 测试 R : 0.8293
  • 这些值要高得多,代表一个强模型。
  • 下图显示了此模型中每个要素的缩放系数,其 P 值也低于 0.05,表示要素的重要性。

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

3 — 第三次尝试包括:FG2A_PER_GPFG3A_PER_GPFTA_PER_GPOREB_PER_GPDREB_PER_GPAST_PER_GPPF_PER_GPSTL_PER_GPTOV_PER_GPBLK_PER_GP

  • 列车 R : 0.6248
  • 测试 R : 0.6649
  • 这些值低于之前的尝试,但更容易区分一个团队的 3 分投篮和 2 分投篮,并使特征重要性更容易解释,同时仍然是一个相对较强的模型。
  • 下图显示了此模型中每个要素的缩放系数,其 P 值也低于 0.05,表示要素的重要性。

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

季后赛分类的逻辑回归

1 —第一次尝试是尝试对球队是否进入季后赛进行分类。特征包括:FG2_PCTFG3_PCTFT_PCTFG2M_PER_GPFG2A_PER_GPFG3M_PER_GPFG3A_PER_GPFTM_PER_GPFTA_PER_GPOREB_PER_GPDREB_PER_GPAST_PER_GPPF_PER_GPSTL_PER_GPTOV_PER_GPBLK_PER_GP

  • 训练精度:0.8459
  • 测试精度:0.8307
  • 良好的准确性,而且由于季后赛类别相对均匀(每个赛季 30 支球队中有 16 支进入季后赛),准确性是一个很好的衡量标准。
  • 下图显示了此模型中每个特征的缩放系数,其 P 值也低于 0.05,以表示特征选择。

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

2 —第二次尝试试图对球队是否赢得了 NBA 总决赛进行分类,是否获得了当年最佳球队的桂冠。使用了与第一次尝试相同的功能。训练精度为 0.9657,这看起来不错,但在这种情况下不是一个成功模型的良好衡量标准,因为没有进入 NBA 总决赛的球队和进入总决赛的球队之间存在显著差异。

  • 训练敏感度:0.0741
  • 测试灵敏度:0.1111
  • 灵敏度低,因此不是用于任何澄清的好模型。

3 —第三次尝试试图对球队是否进入 NBA 总决赛进行分类,这意味着他们赢得了各自的分区,并必须与其他分区的获胜者比赛才能赢得 NBA 总冠军。使用了与第一次尝试相同的功能。训练精度为 0.9315,这看起来不错,但在这种情况下不是一个成功模型的良好衡量标准,因为没有进入 NBA 总决赛的球队和进入总决赛的球队之间存在显著差异。

  • 训练敏感度:0.0741
  • 测试灵敏度:0.1111
  • 不是一个用于任何澄清的好模型

4 —第四次尝试包括:FG2A_PER_GPFG3A_PER_GPFTA_PER_GPOREB_PER_GPDREB_PER_GPAST_PER_GPPF_PER_GPSTL_PER_GPTOV_PER_GPBLK_PER_GP

  • 训练精度:0.8142
  • 测试精度:0.7717
  • 这比第一次尝试的准确性低,但仍然准确,同时更容易解释,因为只有一个 3 点投篮变量和一个 2 点投篮变量。
  • 下图显示了该模型中每个要素的缩放系数,其 P 值也低于 0.05

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

数据趋势

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

三分球与两分球的比例逐年稳步上升。NBA 球队正在以 2 分投篮为代价,寻找更多 3 分投篮的价值。注意季后赛球队几乎总是投更多的 3 分球,而不是 2 分球。

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

休斯顿火箭队的加速比联盟中的其他球队要快得多。他们是第一支在一个赛季中三分球比 2 分球更多的球队,他们在 2017-18 和 2018-19 赛季都完成了 2 分球。使用这种三点策略,他们获得了成功。

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

这显示了在那个赛季排名前十的球队是如何比联盟其他球队取得更多成功的。自 2010 年以来,随着联盟转向更多的 3 分投篮,这一点表现得更加明显。

结论和进一步的观点

解释每个成功模型的特征重要性是决定 3 点射击是否比 2 点射击更能代表成功的主要因素。查看包含线性回归和逻辑回归的大多数特征的最强模型,两个模型的两个最强的正面影响是FG2M_PER_GPFG3M_PER_GP,而两个模型也共享两个最强的负面影响FG2A_PER_GPFG3A_PER_GP,所有这些都是相同的顺序。仅从逻辑模型来看,FG2M_PER_GP似乎具有显著的优势。虽然这可能被解释为代表 2 分投篮更重要,但我相信这被FG2A_PER_GP的负面影响抵消了。这使得人们很难从观看它们中获得任何东西。

具有最好的准确性和可解释性组合的模型是逻辑回归尝试 4,尽管其结果也反映在其具有相同特征的线性回归对应物中。这些模型表明FG2A_PER_GPFG3A_PER_GP对每个模型的负面影响更强。这让我相信三分球对成功更重要,因为更多的尝试不会像更多的 2 分尝试那样产生负面影响。我可以同意 NBA 实施更注重 3 分投篮的举措。从概念上讲,我会建议团队进一步推动他们的FG3A/FG2A,因为增加每个镜头之间的关系应该会有所帮助。这与上面数据趋势部分的图表是一致的。

在这种情况下,如果擅长三分球的人会更频繁地出现在 NBA,这将是有意义的,如下图所示。

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

但是除了他们更频繁地出现,如果 NBA 球队更重视这些球员并给他们更高的薪水也是有意义的。下面的图表显示了两种不同的方式来划分 NBA 三分球射手,那些超过 35%的命中率和那些三分球前 20 的命中率。这两个人的工资似乎都没有大幅增长。随着时间的推移,我想这些球员的价值会更高。

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

如果你想查看整个项目的代码,可以在我的 GitHub 上找到这个链接:https://github.com/bgp09002/NBA

所有的 CNN 都是平等的吗?

原文:https://towardsdatascience.com/are-all-cnns-created-equal-d13a33b0caf7?source=collection_archive---------40-----------------------

不考虑建筑,CNN 用相似的策略识别物体:但是人类使用一种非常不同的策略。

我们对卷积神经网络(CNN)知之甚多,却知之甚少。我们可以访问每一个模型参数,我们可以检查他们训练数据的每一个像素,并准确地知道架构是如何形成的——然而,理解他们识别物体的策略被证明是令人惊讶的挑战。

理解策略是至关重要的:如果我们理解 CNN 如何决策——也就是说,他们使用哪种策略,我们只能相信 CNN 从 X 射线扫描中识别癌症或驾驶自动驾驶汽车。

我们在这里引入误差一致性,一个简单的分析来衡量两个系统——例如两个 CNN,或者一个 CNN 和一个人——是否执行不同的策略。通过这种分析,我们研究了以下问题:

  • 所有的 CNN 都是“平等的”(实施相似的策略)吗?
  • 循环 CNN 的策略不同于前馈 CNN 吗?
  • 人类使用和 CNN 一样的策略吗?

动机:犯错就是告诉别人

所以你想训练一个神经网络来区分小狗和人。也许你想训练一个系统,当你的小狗到来时打开门,但不让陌生人进入,或者你是一个动物农场的主人,你想确保只有人可以进入房子。

在任何情况下,你都可以用你最喜欢的 CNN(比如,ResNet-152 代表性能,AlexNet 代表美好的旧时光),用从网上搜集的小狗与人的数据集来训练它们。看到它们每个都达到了大约 96-98%的准确率,你就放心了。很可爱。但是相似的准确性是否意味着相似的策略呢?

嗯,不一定:即使非常不同的策略也可能导致非常相似的准确性。然而,网络出错的那 2 %- 4%携带了关于它们各自策略的大量信息。假设 AlexNet 和 ResNet 都在下面的图像上犯了一个错误,预测了“人”而不是“小狗”:

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

查尔斯·德鲁维奥在 Unsplash 上拍摄的照片

现在犯这个错误就像这只狗看起来一样令人难过,特别是因为许多其他小狗都被很好地认出来了,就像这里的这些:

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

你大概知道小狗长什么样,但是它们不可爱吗?!照片由巴拉蒂·坎南Unsplash 上拍摄。

再看一些网络无法识别的图像,你开始产生怀疑:有没有可能两个网络都实施了分类策略“穿衣服的就是人”?你一直怀疑 AlexNet 有点像骗子——但你呢,ResNet?对一个有 152 层的人要求更多一点的人物深度是不是太多了?

更仔细的观察证实:相反,网络也错误地将一些人分类为“小狗”——如果模特的决策策略依赖于衣服的程度,我们让读者想象这些图像可能会是什么样子。

**出错很说明问题,**我们可以利用这一特性:如果两个系统(例如,两个不同的 CNN)实施相似的策略,它们应该在相同的单个输入图像上出错——不仅是相似数量的错误(通过准确度来衡量),而且是相同输入上的错误:相似的策略会产生相似的错误。这正是我们可以使用误差一致性来衡量的。

在我们最近的论文中介绍的,逐个试验的错误一致性评估两个系统是否在相同的输入(或试验,在心理学实验中称为试验)上系统地出错。如果你愿意,可以称之为基于试错的分析。

抛开假设的玩具数据集(小狗对人),在一个大数据集(ImageNet)上训练的不同 CNN 的策略有多相似?它们与相同数据上的人为错误相似吗?我们只是去了动物,原谅,模型农场并评估了所有 ImageNet 训练的 PyTorch 模型,以获得它们在数据集上的分类决策(正确答案与错误),我们也有人类决策进行比较。这是我们的发现。

所有 CNN 都是平等的

当我们看下面的图时,可以看到 16 种不同的 CNN 具有大范围的 ImageNet 精度,范围从大约 78% (AlexNet,棕色,在左边)到大约 94% (ResNet-152,深蓝色,在右边)。如果两个系统犯的相同错误和我们偶然预料的一样多,我们会看到误差一致性为 0.0;较高的误差一致性表明策略相似(相同策略高达 1.0)。

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

CNN 与其他 CNN 相似,但不像人类:更高的误差一致性(高达 k=1.0)是对相似策略的指导。图片作者。

有趣的是,CNN 和人类之间的误差一致性(黑色虚线)非常接近于零:人类和 CNN 很可能实施不同的策略,并且这种差距不会随着更高的模型性能而缩小。另一方面,人类对人类(红色)是相当一致的:大多数人类会犯和其他人类相似的错误。然而,也许最令人惊讶的是,CNN 与其他 CNN(金色)的对比显示出异常高的一致性:CNN 与其他 CNN 犯了非常相似的错误。

所有的 CNN 都是平等的吗?自从 AlexNet 在 2012 年推出以来,我们已经看到了非常先进的神经网络架构。我们现在有了跳过连接、数百层、批量标准化等等:但是错误一致性分析表明我们所取得的是准确性的提高,而不是策略的改变。

在我们的分析中,记录的最高误差一致性甚至出现在两个非常不同的网络中:ResNet-18 与 DenseNet-121,这两个模型来自不同的模型系列,具有不同的深度(18 层与 121 层)和不同的连接性。在很大程度上不考虑架构,被调查的 CNN 似乎都执行非常相似的策略——不同于人类的策略。

…但是有些 CNN 比其他的更平等吗?

你可能会指出,我们只测试了前馈网络,这似乎是不正确的,因为众所周知,人脑有丰富的循环计算。当然,我们不能将这些发现推广到所有 CNN,包括复发的 CNN。

这当然是真的,我们只能对我们测试的 CNN 做出明确的声明。为了找出一个循环网络是否不同(“比其他网络更平等”),我们也分析了一个循环 CNN。而且不只是任何一个循环网络:CORnet-S,根据大脑评分网站的说法,这是世界上最像大脑的神经网络模型,CORnet-S 在 NeurIPS 2019 上发表了口头贡献,CORnet-S,“目前灵长类腹侧视觉流的最佳模型”,根据其作者的说法,执行“类脑物体识别”

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

CORnet-S 有四层,分别以大脑区域 V1、V2、V4 和 IT 命名。图鸣谢:https://papers . nips . cc/paper/9441-brain-like-object-recognition-with-high-performance-shallow-recurrent-ANNs . pdf(裁剪自https://github . com/dicarlolab/neur IPS 2019/blob/master/figures/fig 1 . pdf

CORnet-S 有四层,分别称为“V1”、“V2”、“V4”和“它”,分别对应于灵长类动物(包括人类)中负责物体识别的腹侧流脑区。当将 CORnet-S 与基线模型前馈 ResNet-50 进行比较时,我们发现:

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

递归 CORnet-S(橙色)会产生与前馈 ResNet-50(蓝色)类似的错误,但不会产生类似人类的错误(红色)。许多橙色和蓝色数据点甚至完全重叠。选择 x 轴是为了让我们可以看到灰色区域,如果模型只是因为偶然而表现出一致性,那么我们会期望模型出现在这个灰色区域。

这很奇怪。人类会犯与人类类似的错误(红色),但递归 CORnet-S(橙色)会犯与前馈 ResNet-50(蓝色)几乎完全相同的错误:这两个网络似乎实施了非常相似的策略,但根据错误一致性分析,肯定不是“类似人类”的策略。(然而,请注意,它实际上取决于数据集和指标:例如,CORnet-S 在捕捉生物物体识别的循环动态方面显示了有希望的结果。)似乎循环计算——在 挑战 任务中显得尤为重要的——并不是什么灵丹妙药。虽然递归是通常 认为 之一 关键为了更好地解释生物视觉,递归网络不一定导致与纯前馈 CNN 不同的行为策略。

摘要

  • 所有的 CNN 都是生来平等的:不管架构如何,所有 16 个被调查的 CNN 都会犯非常相似的错误。
  • 没有 CNN 比其他 CNN 更平等:根据误差一致性分析,即使是被称为“灵长类腹侧视觉流的当前最佳模型”的递归 CORnet-S,其行为也像标准的前馈 ResNet-50(但两个网络都未能犯类似人类的错误)。
  • 人类是不同的。人类和机器视觉使用的策略还是很不一样的。

量化行为差异可能最终会成为缩小人类和机器策略之间差距的有用指南,这样,在某个时间,某天我们可能会到达这样一个点,用乔治·奥威尔的话来说,以下内容已经成为现实:

他们从模型看向人,从人看向模型,再从模型看向人;但是很难说哪个是哪个…

参考

上述分析可在以下文件中找到:

R.Geirhos*、K. Meding*和 Felix A. Wichmann,超越准确性:通过测量误差一致性量化 CNN 和人类的逐个试验行为 (2020),arXiv:2006.16736

密码

[## wich Mann-lab/误差一致性

误差一致性是衡量两个决策系统是否系统地做出决策的定量分析

github.com](https://github.com/wichmann-lab/error-consistency)

所有的翻牌都是一样的吗?

原文:https://towardsdatascience.com/are-all-flops-created-equal-a-comparison-of-flops-vs-run-time-3cebb2dcb3da?source=collection_archive---------50-----------------------

FLOPs 与运行时间的比较

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

最初发布于https://deci . ai/are-all-flops-created-equal-a-comparison-of-flops-vs-run-time/

在深度学习时代的初期,我们的主要目标是达到新的准确性水平。事实上,深度学习的早期工作在各种任务和数据集上显示了显著的结果。然而,近年来,重点已经转移到最大限度地提高效率。如今,深度学习社区正在寻求推理效率提高的更准确的模型。深度学习推理中的效率概念取决于上下文。它可能指的是能耗、内存效率或运行时效率——这是本文的重点。

对近年来开始出现的高效模型的分析通常假设浮点运算(FLOPs)可以作为任何类型的效率(包括运行时间)的准确代理。在串行与并行计算的环境中,这种假设显然是错误的;当 N 个工人可用时,挖壕沟(一个完全并行的任务)比挖井(一个固有的串行任务)快 1/N。类似地,由于 GPU 的高并行化能力,可并行化的操作将比不可并行化的操作运行得更快。但是并行化考虑并不是一切,在这篇文章中,我们来看一个重要的例子,它表明 FLOPS 不足以衡量 GPU 计算环境中的运行时间。

在我们的数值示例中,我们使用标准的 CuPy 和 PyTorch 库在 GPU 和 CPU 上执行矩阵乘法。我们证明了相同数量的 FLOPs 会导致不同的运行时间。我们的示例模拟了网络一层中的操作,其中我们研究了两个矩阵乘法。第一个乘积是一个 NxN 矩阵乘以一个 Nx1 向量。第二个是两个向量的外积,即一个 Nx1 矩阵与一个 1xN 矩阵的积,结果得到一个 NxN 矩阵。然后,为了在两种情况下获得相同数量的触发器,在执行外积之后,我们对每列使用 N-1 次加法来对矩阵的每列求和。图 1 中的图表示意性地描述了这两个操作。

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

图 1:两个矩阵/矢量产品消耗相同的 FLOPs。左:矩阵矢量积。右图:向量向量外积,在外积之后,我们对每一列求和。

这些操作中的每一个都消耗 2 NxN-N 个触发器,这些触发器被分解成 NxN 个浮点(FP)乘法和 NxN-N 个 FP 加法。

我们现在考虑使用 GPU 加速这些计算(参见下面的 Python 代码)。图 2 中的图表描述了两种操作的运行时间与测得的触发器的关系。这些图是通过应用每种 N 值递增的产品,并在多次运行中求平均值而生成的。

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

图 2:运行时间(单位为秒)与矩阵乘法的 N(FLOPS = 2 nxn-N)和向量乘法及求和的函数关系。蓝色:矩阵矢量;橙色:向量向量(外积)。X 轴(N)是矢量/矩阵的大小。从左到右:GPU 上的 CuPy,GPU 上的 PyTorch,CPU 上的 PyTorch。

尽管每个场景中的 FLOPs 数量是相同的,但是它们的运行时间却有很大的不同。此外,随着 N(矩阵中条目的数量)的增加,差异变得更大。例如,在 CuPy 曲线中很明显,当向量/矩阵大小为 N=20,000 时,外积大约比矩阵乘法长 1.5 倍。使用 PyTorch,当 N=20,000 时,差异变得超过 2 倍长。

对于观察到的操作运行时间的巨大差异,以下是一些常见的解释。

GPU 计算的底层视图

为了理解什么可以区分 FLOPs 和运行时,我们需要首先理解 GPU 如何执行计算。在幕后,当计算深度神经网络中的层的值时,有两种操作:

乘法和累加(MAC) —此操作需要三个输入:内核(或关于内核的信息)、输入数据和从上一次迭代计算的部分和。这三个输入通过算术逻辑单元(ALU)传输,该单元执行乘法和加法的逐位运算。运算的输出是存储在单独的存储器单元中的部分和。

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

内存访问—此操作获取为每个 MAC 操作计算的部分和,并根据其大小将其存储在指定的内存单元中。粗略地说,有四种(有时更多)类型的存储单元:寄存器文件(RF)存储器,存储少量数据(最多 1Kb);处理引擎(PE ),存储更多的数据;缓冲单元;还有那杯酒。随着存储单元大小的增加,该单元的时间消耗也增加。在最糟糕的情况下,读取和写入 DRAM 的成本非常高,运行时间是存储在 RF 上的 200 多倍。

当我们计算失败次数时,我们实际上并不区分 MAC 和内存访问操作。然而,这些可能与运行时间有很大不同。一系列需要大量 DRAM 存储的 MAC 比同样数量的完全不使用 DRAM 的 MAC 花费的时间要多得多。

并行操作的能力是影响最终运行时间的另一个因素。与由几个为顺序串行处理而优化的内核组成的 CPU 相比,GPU 由包含数千个较小内核的大规模并行架构组成。这为可以并行运行的网络结构提供了优势。例如,GPU 的结构要求在一定的规模下,较宽较浅的网络在 GPU 上的运行速度要快于较深较细的网络。这是因为如果更广泛的网络的操作占用更多的 GPU 核心,则可以以并行方式进行计算,而更深入的网络的计算需要以更顺序的方式进行。操作的并行化取决于所使用的特定硬件和算法操作。

回到我们的数字示例,可以将运行时间的差异归因于两个因素:并行性和内存访问。也就是说,自定义实现可以减少运行时间的差异;因此,这种差异很大程度上取决于所用框架的具体实现。我们能够使用名为 Nsight system 的 NVIDIA 工具来识别特定的内存访问和并行性瓶颈。我们将在以后的文章中讨论这个话题。

注重记忆的编程可以加快计算速度

尽管我们在图 2 中观察到明显的差距,我们还是想举例说明该框架对结果的影响。使用高级框架时(例如 CuPy、PyTorch、TensorFlow 等。),我们实际上是在使用一个预定义的算法。在不同的用例中,不同的算法表现出不同的性能。例如,2D 数组的 CuPy 实现是通过重新索引 1D 数组的条目来实现的。这意味着当试图从 2D 数组中弹出元素时,一行中的相邻元素将比一列中的相邻元素更快地被检索到。由于这个原因,我们可以期待一个通用算法在行上比在列上更快地执行求和。回想一下,在图 2 的结果中,我们用 CuPy 对列进行了求和。我们现在表明,通过改变求和的维数,我们可以(几乎)使两个操作的运行时间相等。这可以从图 3 中看出:

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

图 3:矩阵乘法与向量乘法和求和的运行时间(秒)与触发器。蓝色:矩阵矢量;橙色:向量向量(外积)。X 轴对应于矩阵中条目的数量。这个实现使用了 CuPy,其中对行执行外积后的求和。

尽管在这个具体的例子中,我们能够通过改变一行代码来改善结果,但是当使用更高级别的框架时,这并不总是可能的。例如,如果我们用 PyTorch 尝试同样的技巧,结果不会有明显的改善。此外,当涉及到真正的深度网络时,减少运行时间需要非常高的专业知识。

结论

通过一个矩阵/向量乘积的具体例子,我们证明了在运行时,FLOPs 不能作为效率的通用代理。这一事实经常被忽视,甚至在某些学术论文中也是如此。我们使用 CuPy 和 PyTorch 演示了两个矩阵/向量乘法,它们消耗完全相同的触发器数量,却可以有完全不同的运行时间。我们还简要讨论了这些差异的原因。

CuPy 代码

import cupy as cp
import time
import os
import numpy as np
import matplotlib.pyplot as plt
from cupy import cuda
import pickle

def cp_Matmul(x, y, iterations):
    for i in range(iterations): 
      q = cp.matmul(x, y, out=None)   
    return q

def cp_Vecmul(x,y,iterations):
    for i in range(iterations):
        q = cp.matmul(x,y,out=None)
        q = cp.sum(q,axis=1)      
    return q

xmin = 1000
xmax = 20000
jump = 500
lim = range(xmin,xmax,jump)

Matrix_result = []
Vector_result = []
iterations = 1000

for k in lim:
    N = k

    vec_outer_1 = cp.random.rand(N,1)
    vec_outer_2 = cp.random.rand(1,N)

    matrix = cp.random.rand(N,N)
    vec_matrix = cp.random.rand(N,1)

    start_event = cp.cuda.stream.Event()
    stop_event = cp.cuda.stream.Event()
    start_event.record()
    q = cp_Vecmul(vec_outer_1,vec_outer_2,iterations)
    stop_event.record()
    stop_event.synchronize()
    Vector_time = cp.cuda.get_elapsed_time(start_event, stop_event)/1000
Matrix_result.append(Matrix_time)
print('Total run time matrices', Matrix_time)

PyTorch 代码

import os
import numpy as np
import matplotlib.pyplot as plt
import torch
import pickle

def tr_Matmul(a, b, iterations):
    for i in range(iterations):
        q = torch.mm(a, b, out=None).to(device=cuda0)
    return q

def tr_Vecmul(a,b,iterations):
    for i in range(iterations):
        q = torch.mm(a,b,out=None).to(device=cuda0)
        q = torch.sum(q,dim=0).to(device=cuda0)
    return q

xmin = 1000
xmax = 20000
jump = 500
lim = range(xmin,xmax,jump)

Matrix_result = []
Vector_result = []
iterations = 1000

for k in lim:
    N = k
    cuda0 = torch.device(device='cuda')

    vec_outer_1 = torch.rand(N,1).to(device=cuda0)
    vec_outer_2 = torch.rand(1,N).to(device=cuda0)

    matrix = torch.rand(N,N).to(device=cuda0)
    vec_matrix = torch.rand(N,1).to(device=cuda0)

    start_event = torch.cuda.Event(enable_timing=True)
    stop_event = torch.cuda.Event(enable_timing=True)
    start_event.record()

    q = tr_Vecmul(vec_outer_1,vec_outer_2,iterations)
    stop_event.record()
    torch.cuda.synchronize()
    Vector_time = start_event.elapsed_time( stop_event)/1000
    Vector_result.append(Vector_time)
    print('Total run time vectors',Vector_time)

    start_event = torch.cuda.Event(enable_timing=True)
    stop_event = torch.cuda.Event(enable_timing=True)
    start_event.record()

    q = tr_Matmul(matrix, vec_matrix, iterations)
    stop_event.record()
    torch.cuda.synchronize()
    Matrix_time =  start_event.elapsed_time( stop_event)/1000
    Matrix_result.append(Matrix_time)
    print('Total run time matrices', Matrix_time)

计算生物学家失业了吗?

原文:https://towardsdatascience.com/are-computational-biologists-losing-their-jobs-a8d974cb607c?source=collection_archive---------42-----------------------

人工智能

研究人员一直专注于开发人工智能(AI)驱动的生物医学数据分析平台。DrBioRight 做了一个很好的初步尝试。

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

UnsplashNeONBRAND 拍摄的照片

R 最近,为生物医学研究开发了一个人工智能驱动的分析平台DrBioRight ,发表在顶级科学期刊之一的 癌细胞 上。

该工具的主要功能是利用自然语言处理( NLP )技术,使没有 生物信息学或编程专业知识的 生物医学研究人员能够对大型 组学 数据集进行计算分析。

具体来说,DrBioRight 允许用户用自然语言而不是编程脚本对其进行*【对话】。然后,它将 【翻译】 通过应用预先训练好的神经网络,将自然语言翻译成特定的生物信息任务。在与用户确认预测的请求分析后,DrBioRight 将在云上执行分析并报告最终结果。*

人们可以在他们的官方网站上查看下面的一些具体例子:

*[## 演示和教程

简介数据汇总生存分析相关分析差异分析突变棒棒糖可视化…

drbioright.org](https://drbioright.org/landing/demo/)*

这个想法太酷了,因为整个过程是自动化的,只需要用户在一个简单的问题中提供几个关键词,例如“在 基因 X存活率 之间的 关系乳腺癌 中是什么?”

传统上,组学数据集的分析非常复杂,需要生物信息学和生物统计学专家参与该项目。然而,DrBioRight 似乎打破了这一规则,给纯生物学家配备了大量的自动化分析管道。

像 DrBioRight 这样的工具正在试图定义生物医学科学中的新一代分析方法,这必将使研究进展更加直观和高效。

那么,计算生物学家会失业吗?

不,近期不会。

我列出了一些主要的挑战,这些挑战使得这些平台无法自动完成项目中所有必要的计算工作。

对完全“自动化”的挑战

1.生物信息学中没有“黄金标准”

随着近几十年来组学技术的爆炸式发展,分析工具和管道的开发速度呈指数级增长。太常见了,针对 同一个任务 设计的几十种不同的分析方法突然一起出来了。

从可用的方法中选择一种作为特定任务的“标准”方法几乎是不可能的,尤其是当大多数工具在相同的测试数据集上执行类似的操作时。

例如,任何审稿人都不能仅仅因为作者在 差异表达基因分析 中使用 DESeq 而不是 EdgeR 就拒绝提交的稿件。

所以,下面这幅漫画中的情况一直在发生。

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

图片网址:https://imgs.xkcd.com/comics/standards.png

如果你是一个生物信息学初学者,你必须明白当你需要从ENSEMBLref seqgen code中选择一个注释源时的痛苦。 无论你选哪一个,老板总会说你错了。

还要记住,像 DrBioRight 这样的自动化平台通过将用户的反馈作为额外的训练数据点来保持学习。假设对于 DrBioRight 的同一个预测(基于输入自然语言的预测任务),不同的用户由于自己心目中想要的“标准”分析而给出不同的反馈。这会成为训练过程的灾难。

2.没有办法概括特定的生物学驱动的分析

可以在流水线中推广和实现的分析通常作为项目中计算工作的第一步**。然后,生物学家需要检查计算结果,根据结果生成生物学假设,并要求生物信息学家进一步执行一些特定的分析。诸如此类…****

根据我自己的经验,我 80%以上的计算工作都是基于生物学家的请求来解决特定的生物学相关问题,这是如此具体,如此依赖于上下文,以至于人工智能平台很难通过自然语言准确地学习它。

3.生物信息学家自己仍然在努力与纯粹的生物学家沟通

生物信息学家和生物学家接受的训练如此不同,以至于他们很难相互理解。

生物信息学家希望 从生物学家那里复制更多的

生物学家想从生物信息学家那里得到 p 值

我不相信任何一个 AI 平台能回答这样的问题,“你能给我一个这些免疫细胞的 p 值吗?”因为,没有语境,这个问题可以有千百种解读。

双方之间的硬通信充当了系统随机标记的训练数据点,这将使人们在未来更难有效地使用它。

利用这些人工智能驱动的生物信息工具的最佳方式

尽管人工智能驱动的平台在为生物学家执行完整的自动化分析方面存在局限性,但让研究社区能够访问它们仍然很重要。以下是一些原因。

快速初步分析

如前所述,计算分析的第一步,或预处理,总是可以通过广义流水线来实现。

在这一步,平台的性能和研究人员的期望比在下游分析中更容易保持一致。因此,来自用户的反馈可以促进人工智能平台的训练。

在输入大量训练点后,该平台可以比传统方式更有效、更透明、更可重复地执行初始分析,传统方式涉及生物学家和生物信息学家之间的大量通信。

已发布数据中的证据检查

生物学研究中最耗时的部分之一是从公共数据集中找到某种机制的证据。与搜索文献并重新分析他们的数据相比,直接向人工智能平台提问以进行自动分析似乎更有效。

人工智能迅速改变了我们的生活,也改变了我们进行研究的方式。

它会取代我们人类研究者吗?

也许会,但肯定不会在不久的将来。

所以,放轻松。

您可以返回去调试您的管道。生物学家在等你。

免责声明:

作者与开发 DrBioRight 的研究团队没有任何个人或专业关系。整篇帖子仅代表作者本人对相关研究领域的观点,不应视为确凿的科学陈述。

参考资料:

李等,下一代组学数据分析,肿瘤细胞(2020),【https://doi.org/10.1016/j.ccell.2020.09.002】

* [## 组学

非正式地称为组学的科学分支是生物学中名称以后缀…

en.wikipedia.org](https://en.wikipedia.org/wiki/Omics)

【https://drbioright.org/landing *

仪表板是给我的吗?

原文:https://towardsdatascience.com/are-dashboards-for-me-7f66502986b1?source=collection_archive---------26-----------------------

了解您的 Jupyter 笔记本作为交互式仪表盘是否更有用

作为一名数据科学家或分析师,您经常在 Jupyter 笔记本上为自己创建数据可视化,将图表复制到电子邮件和演示文稿中。你的朋友谈论他们为同事制作的最新“交互式仪表板”,但这听起来工作量很大,可能会让你的客户感到困惑。

本文不是一个深入教授您如何构建仪表板的教程。它将带您构建和部署基于 Jupyter 笔记本的最简单的仪表板,但只是向您展示这个概念。到本文结束时,您将知道您的仪表板朋友在谈论什么,并且您将处于一个更好的位置来决定交互式仪表板是否是您想要进一步追求的东西。

我将讨论托管仪表板的选择,并概述流行的仪表板框架。

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

卢克·切瑟在 Unsplash 上的照片

开源可视化的兴起

长期以来,商业智能工具一直用于根据公司内部数据创建图表。想想谷歌分析报告,也许被营销部门用来了解他们活动的有效性和指导他们未来的努力。

这些仪表板被植入到整体的 BI 软件套件中,通常使用拖放界面组装在一起。

作为一名数据科学家或定量开发人员,您在 Jupyter 中分析一组不同的数据,并且您没有任何类似的工具来围绕您的数据构建仪表板。听起来你需要构建一个完整的 web 应用程序,包括前端 Javascript 来引入类似的东西。

在过去的几年中,出现了一些优秀的开源框架。它们允许您轻松地将 Python(或 R etc)分析转换成交互式 web 应用程序,而完全不必考虑前端。你所选择的语言就是你所需要的,来指导框架为你处理用户界面。

这些框架将为最终用户引入小部件(滑块、复选框、下拉框等)来输入参数,它们还可能提供交互式图形或表格功能——能够放大图表,或者选择数据范围来更新相关图表组件中的图形。

稍后我将更多地讨论可用的框架,但是首先我将描述已经让您想到一定有更好的方法的那种 dataviz 场景。

你就是那个小部件

当你在 Jupyter 笔记本上工作时,在你尝试的时候自己更新参数是有意义的。

这是你对图表的第一次尝试:

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

t = 1.0 的图形

在第二个单元格中,您已经手动输入了 t=1.0。你把图表复制到电子邮件中,然后你的客户回来问如果你把 t 改成 2.0 会发生什么。

所以你换了牢房又跑了一次。

很多时候这没什么大不了的,如果客户和你在一起,这就很容易了。但是在某些时候,后退一步,看看是否可以自动化这个过程可能是有意义的。我们假设您不会要求您的非技术客户自己在笔记本上按 shift+enter 键。

在朱庇特的家里

我保证这不会是一个可视化框架的深入教程,所以我将选择最简单的方法来把我们的笔记本变成交互式的东西。

在第一个实例中,我们将向笔记本本身添加一个小部件,这样您就可以在 Jupyter 中滑动滑块(而不是更新代码单元格中的 t 参数)。

尽管对于我们的非技术客户来说,这仍然不够用户友好,他们不想看到代码单元。因此,下一步将是在所谓的“瞧”服务器上运行笔记本电脑,而不是在 Jupyter 服务器上。它非常类似于 Jupyter 服务器,但是它没有让用户在代码单元格中按 shift+enter 键,而是隐藏代码单元格,从上到下运行所有内容——只显示输出组件,包括我们的 slider 小部件。

互动

Jupyter 有一个重要的扩展包叫做 ipywidgets 。您可能需要先安装它(在 Jupyter 单元中运行!pip install ipywidgets,然后重启并重新加载笔记本)。

然后,我们需要做的就是将我们的图形绘制代码单元重构为一个函数,并应用“interact”装饰器:

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

使用 ipywidgets 中的 interact

“interact”函数自动检测到我们的函数有一个浮点参数(t ),并自动提供一个滑块。您可以滑动滑块,立即看到基于新输入 t 的不同图表。

太好了!接下来,我们将使它完全用户友好。

在 Voilà中查看

使用与 Conda 类似的pip install voila安装 Voila python 包。你需要重启你的 Jupyter 服务器来处理这个问题。当您重新加载笔记本页面时,您现在会在工具栏中看到一个按钮:

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

Jupyter 工具栏中的 Voila 预览按钮

点击它,你将跳转到一个新的页面,显示 Voila 预览:

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

瞧,笔记本的预览

正如承诺的那样,代码单元是隐藏的,所以我们只剩下交互组件了。添加一些 markdown 单元格作为介绍——也许改变默认的模板——然后你就有了一个功能完整的 web 应用程序!

到目前为止,我们看到的 Voila 预览是一个有用的扩展,可以直接进入我们的新仪表板,但它是在 Jupyter 服务器上附带的,任何可以访问 Voila 预览的人都可以更改 URL 并返回到笔记本视图。

因此,为了安全运行我们的笔记本电脑,我们可以直接使用 voila 服务器,而以前我们使用 Jupyter 服务器。

之前运行jupyter notebook来运行 Jupyter 的地方,用 Ctrl+C 停止,改为运行voila ./Dashboard.ipynb(或者提供笔记本文件的正确路径)。

这一次,您可以看到我们的仪表板位于该 voila-only 服务器的根(也是唯一的)URL:

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

瞧,仪表板

共享您的仪表板

激动人心!你已经可以想象你的客户和同事相信你一夜之间变成了一个全栈的 web 开发人员。那么,你如何与你的非技术观众分享你的 web 应用呢?

不幸的是,这可能是你面临的一个障碍。明确地说,托管 Voila(或类似的)仪表板在技术上没有什么特别复杂的。但是不管怎样,你(或者你亲近的人)将不得不维持或者购买某种形式的托管服务。

在一些服务中,有一些免费选项,用于可以是公共的仪表板,或者用于低使用率层。

如果您的组织已经在运行一个 JupyterHub(或者想要运行),那么我自己的 ContainDS Dashboards 项目将允许您在您的 JupyterHub 中自动托管您的仪表板,安全地供经过身份验证的用户使用。

一般来说,有两个重要方面需要考虑:

  • 托管将在哪里存在
  • 如何认证用户

让我们假设我们仍然使用 Voila 来运行我们的仪表板——但是大多数关于托管的建议适用于任何开源框架。

自己做

当然,您可以在任何虚拟机或物理服务器上运行 voila 服务器。

这可能是在云服务上,如 AWS、Google Cloud、Heroku 或 Azure。通常,大型云提供商会要求您配置自己的服务器,当然,当您添加了 HTTPS 证书时,您将需要在 nginx 或 apache 等标准 web 服务器后面运行您的 dashboard 服务器,即 web 流量到达 nginx,然后反向代理到 voila 服务器。

Heroku 和 Google App Engine 让事情变得简单一些,因为一切都是基于配置的,HTTPS 通常是默认的。

然而,认证是一个巨大的问题。您如何确保只有您的目标用户可以访问仪表板?您的 web 服务器可以配置一个密码,甚至可能是一个允许的用户名/密码列表,但是更新起来很麻烦。

同样,这在技术上并不困难,但是它需要您可能希望 it 部门长期管理的细节,尤其是对于任何敏感的东西。

同样,在“自己动手”类别中,只是在你自己的计算机上运行 voila 服务器,就像你在自己的试验中所做的那样,为你的用户打开一个“隧道”。同样,没有身份验证,您需要打开笔记本电脑!对于非敏感数据的快速共享,这仍然很有用——参见 Voila 文档的 ngrok 部分

JupyterHub 和 Binder

在你的仪表板可以公开的地方,有一个名为 MyBinder.org的免费服务,它将基于 Git 回购的内容推出一个 Jupyter 笔记本(加上通过其自己的 URL 访问 Voila)。当然,这需要您更新 Git repo,并且在新的提交后第一次启动时,需要一段时间来构建环境。你可以给你的客户发送一个直接链接,启动程序,然后直接跳转到 Voila URL——但是 Jupyter 服务器也会运行在一个不同的 URL 上,如果他们知道如何输入的话,就像我们之前尝试 Voila 预览一样。MyBinder 本质上是开源的 JupyterHub 项目(一个为多个用户提供 Jupyter 笔记本环境的网站)的一个公共开放部署。

尤其是如果你的组织已经在运行自己的 JupyterHub,我自己的包含仪表板扩展非常适合。因为 JupyterHub 已经在运行了(对于常规的 Jupyter 笔记本服务器),所以根本不需要额外的基础设施。JupyterHub 具有高度可配置的认证模块,因此,例如,您可以要求通过您的公司电子邮件单点登录来登录。

ContainDS Dashboards 为 JupyterHub 增加了一个额外的“Dashboards”菜单。您只需指定笔记本或脚本的路径,并选择您正在使用的框架(如“瞧”、“streamlit”等,稍后将讨论)。任何通过 JupyterHub 认证的用户都可以直接访问您的仪表板。

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

包含仪表板

如果您的组织目前没有运行 JupyterHub,那么创建一个就足够容易了,而且它非常受欢迎,可以为一系列不同的安装场景提供帮助。

托管服务

部署仪表板的最简单方法是通过托管服务,而不需要您自己的任何基础架构。这些通常与特定的框架相关联。

如果你的仪表盘使用 R Shiny 框架(稍后描述),那么对于一次性部署来说, shinyapps.io 云服务是一个简单的选择。一旦你在 R 环境中配置了一个访问令牌,你只需要运行deployApp()来自动上传你的应用。

在免费和基本计划中,仪表板是公开的。对于标准计划及以上(每月 99 美元或更高),包括认证。在 shinyapps.io 网站上,您可以输入电子邮件地址以邀请加入您的应用程序。他们可以使用 GitHub 或 Google 单点登录登录,或者只需基于该电子邮件地址设置一个 shinyapps 帐户。

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

shinyapps.io

类似的服务存在于 Plotly Dash 框架(R 或 Python)中。Dash Enterprise 允许您连接一个 Git repo,这样提交就会自动部署到这个云服务。他们有更广泛的认证方法,同样包括基本的电子邮件登录。

Streamlit(一个 Python 框架)也在开发一个团队产品。

这些托管服务中的大多数都是“部落式”的——只适合于它们所围绕的框架。但是他们肯定会负责托管和认证!

一个名为 Datapane 的新服务试图与框架无关,尽管需要你直接在脚本中添加一些额外的部署 Python 代码。发布的报告出现在 Datapane 自己风格的 web 界面中,通常最终用户需要理解他们必须运行报告。他们看起来不像对 Voila 那样直接进入它。团队内部的定期分享值得一看。

离线部署

我自己的 ContainDS 套件的另一个组件是桌面产品。这是一个桌面应用程序,您和您的客户端都可以在本地安装。然后,您可以将您的整个 Jupyter 环境导出为一个单一的平面文件,发送到您的客户端,客户端可以导入该文件并看到它按照预期运行。

这对于非常敏感的情况,或者您根本不想涉及服务器的情况非常有用。但是,双方都需要运行 Docker 或 VirtualBox,所以入门会有一些开销…

原则是,这比试图让您的客户机安装 Conda 和 Python 环境要可靠得多!

框架概述

你可能已经注意到,“分享你的仪表板”部分并不完全是结论性的。部署仍然是一个棘手的问题——再说一次,在技术上并非不可克服,但它总是需要基础设施到位。

如果这破坏了您最初对构建自己的仪表板的兴趣,我深表歉意!但是我认为告诉你真相是很重要的…

如果您仍然相信仪表板可以改变您的数据讲述能力,这里有一些流行的开源仪表板框架的简要概述。

我认为它们可以大致分为:支持的语言;可视化特征;和易用性与 UI 控制。

细流

Streamlit 是一个有趣的新框架,基于简单的 Python 声明式脚本。使用 Python 脚本中的窗口小部件(例如滑块和下拉菜单)很容易创建漂亮的 web 应用程序,这对于开发人员来说有直观的意义,而不必担心“事件”——当某个东西被点击时代码应该如何反应。

其他框架可能要求您自己考虑用户流并连接事件,而 Streamlit 默认会为您处理这个逻辑。只要您已经声明了 UI 组件,当用户与它交互时,Streamlit 将负责重新运行脚本的适当部分。

当然,这种简单的范式会使一些事情变得更加复杂——例如,如果太多的代码过于频繁地运行,就必须添加缓存装饰器。

Streamlit 脚本必须通过streamlit run命令运行。

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

克里斯蒂安·沃纳开发的 Streamlit 中的数据浏览器

阴谋破折号

Plotly Dash 是一个“全栈”框架,通过它,你不仅可以使用 Python、R 或 Julia 来控制后端数据处理,还可以控制前端 UI。与 Streamlit 相比,您更经常需要考虑用户界面流的工作方式,连接事件。这并不一定是一件坏事,最终会让你在早期获得更多的控制权。

同样,对于如何将 Plotly Dash 应用程序作为子应用程序集成到更大的应用程序中,您有更多的选择。底层服务器机制更加清晰地暴露出来。

散景和面板

Bokeh 由 Anaconda Inc(虚拟环境公司)发展而来,并由 NumFOCUS 非营利组织支持,该组织还支持 Jupyter 和许多其他科学计算包,如 NumPy。

这是一个 Python 框架,它的优势在于对交互式图形的详细控制。

作为直接比较,大多数人说他们发现 Plotly Dash 更容易上手,并最终提供了类似的控制水平。但是散景可以更深入地进行更复杂的可视化。

在 Bokeh 上有非常广泛的开源组件。

Panel 有时被视为一个独立的可视化框架,但至少最初它扩展了散景。它提供了一个更加灵活的窗口小部件系统,而不仅仅是关注图形。它的设计目标是能够在 Jupyter 笔记本上运行,就像作为一个独立的应用程序一样。

Panel 允许您轻松地将其他开源可视化组件集成到您的应用程序中。它本身是简化 Python 中数据可视化的更广泛的 HoloViz 努力的一部分。

将 Panel 和 HoloViz 区分开来的是将多个图形连接在一起的能力,以便与其中一个图形交互(例如选择一系列点)以相应的方式更新其他图形。

有些学术领域围绕全息视图建立了专门的生态系统,例如地理;以及用于处理大型数据集可视化的工具集。

我的感觉是,如果你有一个不寻常的或详细的可视化类型,使用 Bokeh / HoloViz 堆栈比其他框架更有可能实现。

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

HoloViz 网站

r 闪亮服务器

如果你是一个 R 语言的爱好者,你应该已经知道用于交互式应用的闪亮框架…如果你是一个坚定的 python 主义者,你现在不会改变!

闪亮的用户界面可以完全使用 R 语言构建,也可以直接用 HTML、CSS 和 JavaScript 编写,以获得更大的灵活性。

如果你只是构建一个仪表板,而 R 非常适合你的分析,那么 Shiny 也应该非常适合你的 UI。但值得记住的是,如果您的代码将来要开发成一个更大的 web 应用程序,您可能最终会错过像 Python 这样更通用的语言所带来的数据库和通用软件工程能力。

Shiny 是 RStudio 为您带来的强大的数据科学家工具套件的一部分。

注意,Voila 当然支持 R 笔记本。如果你有一个用 R 写的简单的 Jupyter 笔记本,那么瞧,这可能是使它具有交互性的最快方法。

我们之前已经演示过了。它的优势在于“Jupyter native”。Jupyter 支持的任何语言也可以使用 Voilà。本机提供的交互式小部件是基本的,但这是一种从笔记本到 web 应用程序的简单方法。

你也不需要局限于 Jupyter 的小部件。使用面板组件来构建笔记本是完全可能的,并且这可以通过 Voilà(以及直接使用 Bokeh/Panel)来部署。

要了解 ipywidgets 是如何工作的,这里有一个优秀教程

摘要

也许你的客户只想要 PDF。把你的分析变成一个交互式的仪表板并不总是有意义的,但是希望我已经给了你一些想法来帮助你认识到什么时候与你的客户来回的电子邮件交流可以上升一个层次。

对于数据科学家或分析师来说,有趣的部分无疑是使用框架来构建令人满意的用户界面。我希望对开源框架的概述能帮助你找到一个合适的框架来尝试。

然而,托管和认证通常是一个症结。我已经向您概述了那里的挑战,以节省您在学习仪表板框架方面的投资时间,但却意识到您没有资源或授权将您的仪表板送到您的客户或同事手中。

数据科学家更像猫…还是狗?

原文:https://towardsdatascience.com/are-data-scientists-more-like-cats-or-dogs-cec7bf9d8a65?source=collection_archive---------68-----------------------

数据科学家更像猫…还是狗?这里有一个假设。

还是我们找错了对象?

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

昂普拉什:艾姆拉·阿特坎

我们的世界可能正处于全球疫情之中,但他们说笑是最好的良药。如果你可以在适当的地方躲避和在家工作时使用一点轻浮,请继续阅读,找出为什么我认为狗会比猫成为更好的数据科学家。

嗯,秘密已经泄露了。

数据出来了,现在比以往任何时候都清楚:如果动物可以成为数据科学家,那么狗会比猫更适合做数据科学家。

好吧,也许我的假设更多的是主观的而不是客观的,数据更多的是观察的而不是科学的,然而,当你探索科学家需要超越的四个基本技能数据时,你会看到我们的狗伙伴在黑桃中体现了这些品质。

好奇害死猫

数据科学家就像我们的犬类朋友一样,非常好奇,有时甚至是无止境的好奇。我们在不断修补和探索以找到更好的问题解决方案的数据科学家身上看到了这一点,他们总是问“为什么”、“如果”和“如何”,也在嗅着眼前一切的狗身上看到了这一点。狗有超过 3 亿个嗅觉感受器,相比之下,人类只有 600 万个,狗利用气味来感知周围的世界并获取信息。狗就像数据科学家一样,是不停的探索者,这就是为什么一个简单的街区散步可能需要 10 分钟以上。狗和数据科学家都非常好奇,这导致它们以各自的方式寻找(或嗅出)信息。

虽然我们不能否认猫科动物是好奇的动物,尤其是像“好奇害死猫”这样朗朗上口的短语,但这里有一个事实值得咀嚼——狗的大脑皮层神经元数量(5 亿)是猫的两倍(2.5 亿),这表明它们可能几乎是猫的两倍聪明。补充一些观点,数据科学家(或一般人类)大约有 10 亿个神经元。

你能教老狗新把戏吗?

无论是数据科学家知道的编程语言的数量,还是他们已经建立的专业知识的广泛领域,最好的可以学习新的东西。像最伟大的数据科学家一样,狗有能力获得广泛的技能。狗可以被训练成搜寻和营救、狩猎、放羊、保护财产、探测爆炸物、拯救溺水的人,信不信由你,甚至跳伞。无论是数据科学家还是狗,学习新事物的能力和意愿是区分优秀和优秀的关键。

猫可以被训练,但似乎更难做到这一点。这可能是由于他们的血统。猫是独居猎人的后代,而狗是成群狩猎的狼的后代。通过完成任务成为群体中的一员是狗的天性,而猫则更加独立。

不是狗咬狗的世界

比起同类相残,狗更喜欢和群体一起奔跑。数据科学是一项社会运动,最优秀的数据科学家可以将想法和人联系起来。这是一个令人难以置信的协作领域,多个团队需要共同努力找到解决方案。就像数据科学家一样,狗也受益于网络。数据科学家与领域专家、营销和销售团队以及其他数据科学家一起工作,以取得最佳成果。同样,狗总是为了安全和生存与它们的族群合作。

另一方面,猫与群体的联系并不紧密,极其自立。事实上,它们的祖先,野猫,视其他猫科动物为对手。猫似乎缺乏形成大型友好团体或联盟的合作技能,这种技能可以帮助数据科学家取得成功。

像一只叼着骨头的狗

数据科学家研究的问题极具挑战性。他们需要坚韧和耐力来寻找解决方案,这一壮举可能涉及到非常平凡的任务,如查找、清理和转换数据。像数据科学家一样,狗已经证明了它们能够忍受艰难困苦。想想领头的雪橇犬多哥和巴尔托,它们在 1925 年冬天帮助拯救了阿拉斯加小镇诺姆免于白喉。

多哥和巴尔托是 100 多只狗中的两只,它们在漫长、危险和艰苦的跋涉中接力,穿越 600 多英里的艾迪塔罗德小道,运送拯救了数千人生命的药物。船只和飞机无法穿越寒冷的冬天,但是狗拉雪橇队可以。数据科学家就像狗一样,需要精神和坚韧来保持前进,即使面对最艰难的挑战。

找错人了?

现在不要误解我,我喜欢猫,但我的假设是狗比猫更像数据科学家。

那么,你的最终结论是什么?谁最像数据科学家——狗、猫,甚至是另一种动物?

ALAN JACOBSON,ALTERYX 首席数据和分析官

此处原创发布:https://www.alteryx.com/input/dogs-cats-data-scientists

决策者是否被现代数据堆栈削弱了权力?

原文:https://towardsdatascience.com/are-decision-makers-disempowered-by-the-modern-data-stack-19721c088578?source=collection_archive---------54-----------------------

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

凯文·霍尔瓦特在 Unsplash 上的照片

不断变化的技术环境如何将权力从决策者手中转移

未来数据 2020

本周早些时候,我(虚拟地)参加了未来数据 2020,这是一个关于下一代数据系统的会议。在会议期间,我观看了 Fishtown Analytics 的创始人兼首席执行官 Tristan Handy 的有趣演讲,名为《现代数据堆栈:过去、现在和未来》。在演讲中,特里斯坦讨论了 2012 年至 2016 年间建立在数据仓库基础上的所谓寒武纪数据产品爆炸,如亚马逊红移,以及他认为我们正处于类似范式转变的边缘,他称之为“第二次寒武纪爆炸”。

Tristan 对现代数据堆栈的观点提供了许多思考的素材;然而,我想在这里探讨的主题源于一个关于数据驱动决策中自助服务未来的简短评论:那些不一定处于数据科学前沿的人如何最好地利用他们的数据做出明智的决策。

办公空间

为了开始这一探索,我将首先给出一个过去的简化版本,在此期间我不在工作年龄,因此我没有直接的经验:在前面提到的(第一次)寒武纪大爆发之前,数据分析主要是使用电子表格进行的,例如(当然)Microsoft Excel。在 20 世纪 90 年代和 21 世纪初的许多理论办公室里,无数无名无姓的理论分析师/决策者从周一到周五在成千上万的 Excel 电子表格中跳来跳去,在两个字母的列中添加计算字段,并引入没有记录的错误;这是一场笑声骚乱,分析师/决策者为他们所花的时间赚取了体面的理论工资,每个人都在晚上观看《老友记》,而没有义务讨论它有多成问题。

最近,随着现代数据仓库的出现,数据存储能够更好地从数据分析中分离出来,许多 SaaS 公司在人类不易理解的规模上从这种分离中获利。因此,许多新的商业智能平台开始进入办公室,给每个人的游行浇上雨水,而不是无忧无虑的朋友的时代范式,用一个漂亮的小细胞将数据制成表格,并能够由分析师/决策者在同一个程序中进行分析,只是因为这个新人参加了“得梅因”关于“未来”的“会议”

现代数据诈骗

让我后退一步:在他的讲话中或讲话前后(来源,特里斯坦做了如下评论:

“如何让自助服务民主化?有争议,但我认为现代数据堆栈削弱了许多决策者的权力。那些舒适的 w/ Excel 感觉切断了真理的来源。如果电子表格界面实际上是正确的方式呢?”

特里斯坦在他声称现代数据堆栈削弱了决策者的权力之前警告说,他的观点可能会有争议,但我认为他的说法毫无争议,主要是因为它是无可争议的事实。随着数据存储和分析从灵活易用的电子表格转向数据湖、数据河、数据深渊和数据沙盘等生态系统,最终用户(即过去的分析师/决策者)很可能已经迷失了方向,他们中的许多人主要将数据工具作为达到目的的手段。

简而言之,浏览现代数据堆栈不像浏览大量电子表格那么简单。尽管电子表格有很多缺点,但几乎没有学习曲线:如果你能打开电脑并打开文件,你就能浏览电子表格。此外,从一开始,您只需几次点击、击键和神经连接,就能掌握公式、数据透视表和可视化。我讨厌电子表格!—但它们是可用性和灵活性的近乎完美的平衡。

相比之下,虽然现代商业智能工具可能是为具有不同技术专业知识水平的最终用户构建的,但它们往往具有更陡峭的学习曲线。例如,虽然今天的决策者,现在被剥夺了他或她的“分析师”身份,可能会浏览仪表板并根据提供的信息做出决定,但他或她已经失去了亲手筛选数据的几乎触觉体验。

第二定律

我知道你在想什么——字面上的大量决策是根据一个长达一小时的演示中的饼状图做出的,而这个饼状图不是由在决策过程中拥有最终发言权的人整理出来的——但请允许我使用上述概括来支持我的下一个观点:每一项新的数据技术都使决策者远离数据源。

如今,决策者所需的数据可能位于设计简洁的仪表板上、物理服务器上、云中的某个地方和/或餐巾纸的背面,它们可能经历了各种转换,并以不同准确性和透明度的几种略有不同的形式存在,最有可能的是,决策者不知道这些来源中的哪一个包含他或她做出最佳决策所需的数据,也不知道这些数据经历了哪些处理;这完全是一片混乱,不是那种欢乐喜庆的巴奇亚式的混乱(我甚至没有提到数据固有的模糊性)。

**一家公司在其数据堆栈中实施的技术越多,潜在的误解就越多,个人决策者就必须接受越多的培训,才能熟练掌握他们所依赖的数据堆栈。**换句话说,决策者正被日益复杂的现代数据堆栈所削弱。

那么…现在怎么办?

我认为有三种可能的方法来解决权力丧失的问题:

  • 不要试图重新发明轮子,长期保存电子表格;
  • 雇用准备使用并跟上现代数据堆栈的决策者;或者
  • 促进数据专家和决策者之间的密切合作,以支持决策。

这三种选择各有利弊,但我个人更喜欢第三种。在过去十年左右的时间里,我们存储和处理数据的能力有了快速的增长,仅仅依靠电子表格是不能满足所有现代数据需求的。同样,在许多行业,不能指望决策者独自站在数据科学的前沿。因此,在现代办公室中,数据专家和决策者之间的密切合作变得越来越必要。

或者,也许随着时间的推移,一个易于使用的工具将会出现,它可以用来存储和分析数据…哦…等等…那是电子表格。

网络越深越好吗?案例研究

原文:https://towardsdatascience.com/are-deeper-networks-better-a-case-study-6ee9bcb0725b?source=collection_archive---------41-----------------------

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

约书亚·牛顿在 Unsplash 上拍摄的照片

介绍

你有没有想过建立更深层次的关系网会有什么影响,会带来什么变化?

我知道我有。

我说的是在你的模型中增加额外的层,并仔细检查下游发生了什么变化。

其他条件不变:

  1. 额外的层对你的训练/验证损失曲线有什么影响(如果有的话)?
  2. 一个额外的层在多大程度上影响你的下游预测结果?
  3. 输入要素的数量与模型的复杂性之间有什么关系?
  4. 这里面有什么取舍吗?

在这篇文章中,我将分享一系列实验和它们各自的结果来回答这些问题。

我们言归正传吧!

实验设置

在我们开始之前,我需要解释一下所涉及的实验装置。

该设置由 3 部分组成:

  1. 使用的训练数据集
  2. 为实验构建的模型架构
  3. 实验方法

训练数据

实验所用的数据集来自一场卡格尔竞赛;推文情感提取

目标?

提取出支持特定观点的短语。

以下是训练数据的一瞥:

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

推特情感提取训练数据(来源)

我不会深入研究数据准备方法,因为我将在另一篇文章中讲述 Kaggle 的经历。

本质上,我们按照高音手套方法清理了文本,并为下游命名实体识别(NER)任务创建了自己的标签。

一旦我们有了建模就绪的数据集,我就开始构建一个基线 seq2seq 模型。

模型架构

模型架构由 3 个主要部分组成:

  1. 预先注意双 LSTM
  2. 多头自关注编码器堆栈
  3. 关注 LSTM

该模型从前置注意双 LSTM 开始,其输出被馈入编码器堆栈。

来自这些编码器堆栈的输出然后被馈送到后注意 LSTM,以生成手头的 NER 任务的顺序预测。

为什么选择编码器堆栈?

使用编码器堆栈的灵感来自 Vaswani 等人的论文“注意力是你所需要的全部”。艾尔。

本文详细介绍了变压器模型的外观。

简而言之,变压器模型由 6 个编码器堆栈和 6 个解码器堆栈组成。我不会深入这篇论文的细节,但如果你想知道《变形金刚》 (BERT)中著名的双向编码器表示背后的架构。我推荐阅读。

总之,编码器堆栈是这样的:

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

Vaswani 等人的编码器堆栈示例。艾尔(来源

如您所见,每个编码器堆栈由两个子层组成。

第一个是多头自关注机制,第二个是完全连接的前馈网络。

在每个子层周围,使用残差连接,然后进行层归一化。这是有意义的,因为剩余连接将预先注意双 LSTM 输出与多头自我注意层学习的上下文相加。

那么我们得到的模型架构看起来是什么样的呢?

如果我把它画出来,它会是这样的:

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

用于实验的模型架构

作为一个基线,该架构仅从一个单编码器堆栈开始。

以下是实验中使用的保持不变的层参数:

**Pre-attention Bi-LSTM:** preatn_forward={type="recurrent", n=64, act='tanh', init='xavier', rnnType='LSTM',outputType='samelength', reversed=False, dropout=0.3}preatn_backward={type="recurrent", n=64, act='tanh', init='xavier', rnnType='LSTM',outputType='samelength', reversed=True, dropout=0.3}concatenation_layer={type="concat"}
**Encoder Stack:**
attention_layer={type="mhattention", n=128, act='gelu', init='xavier', nAttnHeads=16}residual_layer1={type="residual"}
norm_layer1=layer={type="layernorm"}fully_connected_layer={type="fc", n=128, act='relu', init='xavier', dropout=0.3}residual_layer2={type="residual"}
norm_layer2=layer={type="layernorm"}
**Post-attention LSTM:**
postatn_forward={type="recurrent", n=128, act='tanh', init='xavier', rnnType='LSTM',reversed=False, dropout=0.3};

实验方法

使用的方法如下。在实验案例中,我需要一种方法来:

  1. 模拟深层网络的模型复杂性
  2. 模拟不同的输入要素
  3. 使用标准评估指标来衡量预测结果

模拟模型复杂度

为了系统地增加模型的复杂性,我在模型架构中添加了一个编码器堆栈,同时保持每个实验的所有其他超参数不变。

例如,高音扬声器手套 25d 的单个实验组将具有 4 种不同的架构。

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

实验中使用的不同布局配置

请注意每次实验中编码器堆栈的数量是如何系统地增加的。

使用的超参数也始终保持不变:

**Optimizer hyper-parameters:**
miniBatchSize=32
stagnation = 10
algorithm = {method = ‘adam’, gamma = 0.9, beta1 = 0.9, beta2 = 0.999, learningRate = 0.001, clipGradMax = 100, clipGradMin = -100, lrPolicy = ‘step’, stepSize=10}
regL2 = 0.0007
maxEpochs = 10
dropout=0.3

模拟输入特性

为了测试功能丰富的输入数据是否对结果有任何影响,我通过高音手套 25d、50d、100d 和 200d 运行了该模型。

这意味着对于每个手套尺寸,我将运行 4 组实验并分别记录它们的结果。

  • 基线模型
  • 实验 1:基线+ 1 个附加编码器堆栈
  • 实验 2:基线+ 2 个附加编码器堆栈
  • 实验 3:基线+ 3 个附加编码器堆栈

因此,总共运行了 16 种(4 种架构* 4 种不同的手套尺寸组)不同的模型配置。

标准化评估指标

最后,我决定使用 F1 分数作为比较的标准,因为它是精确度和召回率之间的调和平均值。

如果你需要复习精确度,回忆一下 F1 分数。我在上面找到了一个很好的视频。

解释精度、召回和 F1 的 Youtube 视频

实验结果

对于这一部分,我将首先分享在每个高音手套尺寸范围内的实验结果**。然后,我将分享每个实验高音手套尺寸上的结果。**

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

维度内和跨维度的结果示例

从现在开始,我将以图像的形式显示一系列结果输出,并添加我认为合适的注释。

对于每个结果输出,记下精确度、召回率、F1 分数以及损失曲线的样子。

记住,实验中唯一的变化是增加了一个编码器堆栈。

在你进行的过程中,一定要花些时间自己解释这些结果。😃

高音扬声器手套 25D 的结果(在范围内)

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

对于这个结果集,在实验中很难看到更深层次网络的影响。

我确实对正在发生的事情有一个想法和感觉,但在模式变得更清晰之前,我不会发表评论。

注意:在下一个结果集中会变得更清楚:)

话虽如此,在正标签§的 F1-分数中有一个有趣的模式。

随着模型变得越来越复杂,阳性标记§的 F1 分数似乎在每次实验中都在缓慢增加。

我怀疑这与更深层次的网络学习和更复杂的关系有关。

例如共同引用、长期依赖等。

现在让我们将特征的数量从 25D 增加到 50D,以便更好地了解随着模型的深入会发生什么。

使用高音手套 50D 的结果(在范围内)

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

与上一个结果集相比,这无疑是一个更好的结果集。

首先,注意随着模型的深入,验证损失是如何开始偏离训练损失曲线的?

你觉得为什么会这样?

和前面的结果集类似(虽然微妙),但是这和机器学习中的 偏差-方差权衡 有关系。

总之,随着模型复杂性的增加,模型开始更好地学习训练数据,导致偏差减少。

这从实验中训练损失(蓝线)略微下降的结果中可以明显看出。

注意:训练更大的网络是降低偏差的标准缓解措施。这个结果清楚地显示了更大的网络是如何减少偏差的。

然而…

随着模型开始过度拟合训练数据,它变得不可概括,导致方差增加。

注意验证损失曲线在不同实验中的变化。

为了得到一个更具体的例子,只需看看实验 2 和实验 3。

请注意,当验证误差开始出现峰值时,训练损失如何从 0.1618 下降到 0.1595。即偏差减少,方差增加

现在开始下一个发现!

下一个发现来自于所有实验的 F1 分数。

与之前的结果集相比,F1 的所有分数都有所提高。

f1-阳性标记§的平均分数约为 32%,而阴性标记(N)的平均分数约为 27%。

与之前的结果相比,阳性标签§的最大 F1 分数约为 28%,而阴性标签(N)仅为 18%。

记住,这里唯一的变化是使用了更丰富的输入集。即高音手套 25D 换成了 50D。

其他一切都保持不变。

这说明了输入特征的数量与预测结果之间的关系。

在这种情况下,使用更丰富的功能集提高了模型的整体性能。

那么,将功能从 50D 增加到 100D,我们会看到什么呢?

使用高音手套 100D 的结果(在范围内)

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

该结果集实际上验证了我们之前关于输入要素和预测结果之间关系的观点。

但是…不是你想的那样。

在这种情况下,该模型在预测阳性标记§ 方面略胜一筹;f1-实验得分比之前的结果高**。**

然而,看起来这个模型在预测负标签(N)** 方面做得不是很好;与之前的结果相比,f1-实验得分下降。**

可能的是,添加的特征 50D 至 100D 可能允许模型更好地学习正面标签(P ),但是在学习负面标签(N)时却添加了噪声。

这可能是我认为与之前的结果相比,我们在实验中看到 F1 分数下降的原因之一。

另一个原因(可能更有道理)是,由于模型失去了普遍性,F1 分数在波动。

注意验证损失曲线是多么不稳定。

为了获得更好的结果,我们可能需要在再次查看 F1 分数之前调整其他超参数。

然而,这个实验的目的只是通过增加更多的层来改变模型架构,并注意下游的变化,因此我不会在这里做任何超参数调整。

下一个发现很明显。

提示:这与验证损失曲线有关。

请注意,验证损失通常低于实验中的训练损失。

这是一种不常见的模式,但确实会发生。

关于这个点,下一个逻辑问题是……

为什么?

为什么验证损失低于培训损失?

几个原因:

  1. 这可能与培训过程中如何计算验证损失有关。对于每个时期,在训练损失之后计算验证损失。即,在模型更新了权重之后,计算验证损失。****
  2. 我在训练集中使用了辍学层。缺失图层具有正则化效果。这意味着它对权重进行了惩罚,以使预测更具普遍性。在验证计算期间,禁用辍学。

现在我们完成了 100D,让我们看看 200D 会发生什么!

精神食粮。

功能太多会是个问题吗?

让我们找出答案,好吗?

使用高音手套 200D 的结果(在范围内)

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

显然可以!

看起来 200D 导致模型在实验中过度拟合。

让我们退一步想一想。

这里发生了什么?

唯一的变化是使用了功能更加丰富的输入集。即 100D 到 200D 的特征。

拥有更多功能不应该给我们带来更好的结果吗?

不完全是。

拥有一组扩展的特性可能会不可避免地给模型带来更多的噪声**。**

这从我们看到的过度拟合中可以明显看出。

这是我认为正在发生的事情。

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

单词嵌入示例

每个输入特征都可以映射到其他概念,如“男人”、“女人”、“皇冠”、“皇家”等。

每个特征(那些数字)的学习嵌入反映了输入术语是否满足那些特征的标准。这通常在[-1,1]的范围内。

例如,对于输入术语“国王”。

国王是男人吗?

是的。因此,所学习的嵌入对于特征“人”具有 0.98 的分数。

国王是女人吗?

没有。因此,对于特征“女人”,学习嵌入的得分为 0.01。

如此等等。

我认为在 200D,有太多的功能导致太多的噪音。

例如,像“红色”或“绿色”这样的特征可能只是模型的噪声。

那么我们能从中学到什么呢?

添加更多输入要素并不能保证更好的模型或更好的结果。有时,拥有更多功能意味着你的模型开始学习噪音。

我还注意到,在所有 16 个实验中,该模型在负标签(N)上总是表现不佳。

看看 25D、50D、100D 和 200D 的 F1 分数。

负标签(N)的 F1 值总是低于正标签§的 F1 值。

为什么会这样呢?

我认为正标签§训练示例可能比负标签(N)训练示例更容易学习。

也许学习否定或某些否定短语对这个模型来说很难。这就解释了为什么(N)看起来没有得到太多的性能提升。

好吧!我们已经到达每个输入维度内的结果的末尾。****

在这篇文章的最后一部分,我想让你看一看个实验的结果。

这会让你对结果有不同的看法。

只要注意曲线是如何随着输入特征的增加而变化的。

记住,其他一切都是不变的。这里唯一的变化是输入特性。

我会让你自己查看结果,没有任何评论。

跨输入要素的基线结果

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

不同输入维度的基线结果

实验 1 跨输入特征的结果

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

实验 1 不同输入维度的结果

实验 2 跨输入特征的结果

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

实验 2 不同输入维度的结果

实验 3 跨输入特征的结果

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

实验 3 不同输入维度的结果

摘要

在我结束这篇文章之前,我想我应该总结一下这个实验的一些收获。

  1. 深度学习中仍然存在偏差-方差权衡。如果你积极地通过应用链接帖子中提到的缓解措施来减少偏差和差异,它是可以被缓解的。
  2. 一般来说,更深的网络会减少偏差,但如果其他因素保持不变,差异就会增加。随着网络构建得越深入,最好是迭代并应用正则化/添加更多的训练数据。
  3. 有时,验证损失可能低于培训损失。不要被这个结果吓到。
  4. 添加更多输入要素并不能保证模型或结果会更好。与 100D 的结果相比,200D 在训练集中引入了更多的噪声,导致了更差的结果。

所以在回顾了这个实验的结果之后…

网络越深越好吗?

看情况。

似乎有一个最佳深度**,它与你必须开始的训练数据量相关联。**

在这个具有 27,481 行的 tweeter 数据集的情况下,看起来具有 100D 输入特征的实验 1 的模型架构是最佳的。****

为了便于参考,实验 1 的架构看起来像这样,有 2 个编码器堆栈。

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

实验 1 模型架构

结尾注释

嗯,那就这样吧!

写这篇文章确实花了一些时间来运行所有的实验。

希望你觉得这篇文章很有见地!

如果是的话,让我知道,这样我就知道该继续写什么类型的文章了。😃

直到下一个帖子…

再见了。

LinkedIn 简介:蒂莫西·谭

开发者是商品还是摇滚明星?

原文:https://towardsdatascience.com/are-developers-commodities-or-rockstars-41b22dffcc5?source=collection_archive---------21-----------------------

意见

关于开发商市场的真实故事

听到很多商人跟我说:“软件?只是工具。开发商?只是一种商品”。与此同时,大多数公司像摇滚明星一样支付开发人员。真相是什么?在本文中,我将用数据解释和评论开发人员就业市场的演变。在 IT 领域有 15 年的经验,最初是作为一名开发人员,后来是作为一名经理,我将尝试讲述这个故事的两个方面。我们将学习如何用 5 个简单的要点来理解这一演变。

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

ZanUnsplash 上的照片

商品是什么意思?

在我过去接近客户的过程中,我听到了太多类似“我不介意你怎么做,只管去做”或“我不是技术人员,我不想理解”的句子。我不确定商界人士何时会对如何花钱失去兴趣。这就像你在建一栋房子,去找建筑师并告诉他,“我不介意你在里面放多少个房间,只管建就是了。”我知道对于一个非技术人员来说,与技术人员交流是不容易的(尤其是如果技术人员是开发人员),但是每个人都应该知道最基本的知识水平才能使事情正常进行。

相信工程师,我们可以忽略哪种水泥混合物将用于我们的房屋支柱,但我们需要知道我们的房子将有多少个房间或楼层。

这个故事告诉我们有商品和商品,那么,商品的意义是什么?很可能,很好地理解开发者做什么,我们可以回答。汽车和牙膏是不同的商品。当我可以毫不费力地改变某样东西或供应商时,我认为它是一种商品。

试着在一个项目运行中改变开发者,你会发现这是认为人只是商品的代价。

为什么市场需要更多的开发商?

生产软件的公司需要开发人员,因为他们是完成产品的主要资源。在其他行业,他们需要对企业进行创新,因此他们运行 IT 项目,而开发人员在这些项目中起着核心作用。根据 Chuck Alexander 的研究,一个 IT 项目可以持续 30 到 60 个月。这意味着大约 2.5-5.0 年。每个公司每年都会启动许多项目。所以,这是一个很大的需求。然后大多数公司都同意生产软件不是他们的核心业务,所以他们在外包中委托部分项目,从咨询公司或自由职业者那里雇人。嗯,很容易理解为什么在有限的工资供应下需求如此之大,而且找到合适的专家比过去更难了。

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

美国劳工统计局对网络开发者的调查

加薪

根据这项研究,初级开发人员预计 2017 年他们的工资将增长 4.3%,熟练开发人员将增长 4.5%。如果我们每年都有这样的增长,大约 15 年后,我们的工资会翻倍。

这就引出了一些大问题:

  • 对于已经录用的人来说是什么? 他们不傻,所以会要求加薪,也可能跳槽去别的公司。这将转化为更多的人员流动成本(人们将会流动)或更高的公司成本。
  • 开发人员的生产力是和工资相应增长的? 如果不是这样,工资的上涨会对公司的利润产生影响。雇主生产的比他们从公司得到的少的商业模式是不可持续的。
  • 开发人员是否能够在新技术退役之前保持更新?换句话说,他们会领工资吗?他们工作的价值将低于我们平衡结果所需的价值。

关于开发人员薪酬的关键因素

开发人员是最具挑战性的工作之一,需要高技能、不断的学习和经验。这解释了为什么在大多数国家它的报酬很高。在 2020 年的调查中,GitHub 采访的 74%的专业人士透露他们有学位。与其他技术工作相比,这是一个很大的比例。根据美国劳工统计局的数据,2019 年 5 月,美国的平均工资为 7.3 万美元。从这个优点出发,我们还有一些额外的关键因素,可以为这些专业人员定义一些额外的收入:

  • 地理。根据 Indeed 的报告,不同国家的薪酬差异很大,但仅关注美国市场,我们就有 5 万美元的差距(旧金山薪酬最高,每年 15 万美元)。
  • 体验。你知道的越多,你在市场上的价值就越大。
  • 技术。并非 dev 采用的所有技术都具有相同的价值。在这个领域中,供求关系决定一切,所以我们有古老的、非生产性的技术(比如 COBOL)或者新的、未知的框架,在这种情况下,我们几乎没有可用的程序员,而价格却在上涨。在过去的几年里,我们已经看到了招聘专家前端和 DevOps 专业人员的热潮。

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

stack overflow 开发者调查 2020 年的开发者教育https://insights.stackoverflow.com/survey/2020#education(仅限专业开发者)

涨薪潮的风险

在 IT 市场增长之前,我们仍然会认为专业开发人员在我们的创新计划中很重要。在市场上寻找最佳开发人员的热潮创造了新的就业机会和高薪。我们喜欢这个成长阶段,但是需要考虑一些隐藏的风险(作为一个商人和一个开发者):

  • 薪水不可能永远增长。到那时,我们将会有比我们需要的更多的开发人员,而失业的开发人员将会接受更低的薪水。在得到这一点之前,先想想开发者作品的最终价格。他们的成本反映了产品的最终价格,在某些情况下,比如销售一个网站,这可能是一个很大的百分比。总有一天,商人将不得不停止提高价格(或减少利润以保持价格不变),这将迫使开发商停止支付工资。
  • **你不可能永远学习。**技术将永远改变;一个人永远需要学习。这说起来容易,但在现实世界中很难做到。对于一个 8/5 的员工来说,可能每天有 1 或 2 个小时的换股时间,很难找到时间进行培训。
  • **技术是不稳定的。**你投入大量时间和大部分工作时间的一些技术可能会寿终正寝,或者被全新的技术所取代。例如,当 web 开发消灭了桌面开发时,就发生了这种情况。
  • 创新可以是颠覆性的。在过去的几年里,我们已经看到了人工智能的进步。嗯,我们将会看到类似于上个世纪在机械方面发生的事情。机器做工人的工作;新技术将加速软件构建市场,使它们更少的人密集。我不是在谈论明天或明年。但是技术正在无情地发展,所以总有一天会出现这种情况。到那时,只有非常熟练的开发人员才能坚持下去。

带什么回家

IT 项目的增长正在刺激开发人员市场,以一种长期不可持续的趋势增加工资。我们需要找到一种方法,通过增加产出的价值来保持工资增长的可能性。这可以通过优先考虑产品开发,甚至是可以重复使用的半成品,技术创新和改善组织以避免时间浪费来实现。

开发人员不能停止学习,需要从一种技术跳到下一种技术,直到退休或晋升到另一个角色。每个做生意的人都需要给他们留足够的时间进行培训和学习。

否则,在不久的将来,我们将会有很多无利可图的专家员工。

资源

多元线性回归分析资本主义与环境

原文:https://towardsdatascience.com/are-free-markets-wrecking-the-environment-f88fbdc88bf1?source=collection_archive---------42-----------------------

分析哪些经济变量最有帮助

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

照片由 Nextvoyage 发自 Pexels

关于大多数资本主义国家的所作所为以及他们如何保护环境,有很多批评和争议。其中一些想法是被误导的,或者带有固有的偏见。其他一些人则专注于特定问题,如二氧化碳排放或以中央为基础的政策如何有助于实现更大的成功因素,而忽略了大局。

但是,要考虑到财产权。每个污染空气的人都有权利生活在更清洁的环境中,在某些情况下,这是我们的共同财产。应该注意的是,总是有一些利益相关者保护他们居住的地方,从他们的私人空间和他们的财产开始。即使已经简要评论过,“公地的悲剧”也超出了本文的范围。

另一方面,对于我们人类来说,寻求每天过得更好的方式,提高我们的标准和发展因素是很自然的。这个简单的事实表明了与环境的交换,发展总是与生态保护相冲突。只有富裕的国家(和个人)倾向于消费对自然影响较小的商品,因为根据这个标准,他们可以很容易地多花一些钱……或者他们试图节省每一分钱?让我们找出它。

将环境与自由市场经济联系起来

耶鲁大学每年都会发布环境绩效指数 (EPI),它提供了一份基于数据的全球可持续发展状况总结。EPI 使用 11 个问题类别的 32 个绩效指标,对 180 个国家的环境健康和生态系统活力进行了排名。这些指标在国家范围内提供了一个衡量标准,用以衡量各国与既定环境政策目标的接近程度。

与此同时,传统基金会提供了一份经济自由度排名,基于 186 个国家的 12 项自由——从财产权到财务自由。推动人类进步的经济自由原则在经济自由指数中得到衡量,旨在提供有益的见解,以促进发展进程并在全球范围内保持这一进程。

让我们来看看这两个指数是如何相互关联的。

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

自由市场与环境绩效正相关|作者图片

经济自由对环境的积极影响是显而易见的。在散射分布中可以观察到 J 或(复选标记)形状。通常情况下,极低的开发速度会带来相对较高的环境性能。然而,一旦这种强度加大,表现就会下降:优先考虑的是经济增长率,而不是环境。最后,当国家(和个人)达到一定的发展水平时,他们试图寻求更好的环境质量,为更健康的生活环境付出更多。在这些条件下,环境表现为一种奢侈品,结果是随着个人收入的增加,环境受益超过比例。

下表描述了先前关联的技术因素。即使曲线的斜率为正,相关性也不够强。

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

相关性能因素|作者图片

这个结果可能是反直觉的,但为了有更深入的理解,我们应该讨论一些特定的因素,并深入了解哪些方面在经济自由指数(EFI)中的权重更大。

哪些 EFI 因素最相关?

为了有一个更清晰的图像,最好是找到构成 EFI 的变量,它与环境性能指数最相关。不幸的是,这是一幅相当大的画面,它涉及到许多因素,不可能一目了然。深蓝色代表较高的正相关性,而黄色代表负相关性。较浅的蓝色代表中间没有相关性的所有值。你可以在这里看到全分辨率图片

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

每个经济自由度指标和 EPI |图像的相关矩阵(按作者)

从所有这些,我们感兴趣的是它们如何与 EPI 相关联。总体电喷性能将被用作一个阈值,一些因素,这是在附近也选择了。因此,影响更大的变量是:

  • 财产权
  • 政府诚信
  • 贸易自由
  • 财务自由
  • 税负占国内生产总值的百分比
  • 人均国内生产总值

所有这些变量都与 EPI 正相关,因此,它们增加得越多,环境指数就越高。下一个大问题是:如果我们考虑一个只包含这些变量的模型,那么每个变量的权重是多少才能达到最佳拟合?

包含最相关因素的模型

为了首先比较变量,我们必须将它们标准化。通过这种方式,我们可以并排对比人均国内生产总值和贸易自由度,它们的范围在显著不同的区间内,例如,标准化过程均衡样本偏差并消除偏差,将值集中到平均值。变量之间的相互依赖超出了本文的范围。

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

每个重要预测因子的权重|按作者分类的图像

应用多变量线性回归来收集每个系数的权重。具有较高系数的变量或预测值是对 EPI 增加更多的变量或预测值。左侧的条形图描述了系数结果。

下表比较了仅使用整体 EFI 性能的第一个模型的结果和仅考虑与 EPI 最相关的因素的结果。我们的新模型与选定的变量,显示了显着的性能提高,在环境指数预测。

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

一元线性回归与多元线性回归|作者图片

讨论

单位国内生产总值的相对税收负担似乎是最重要的因素。这让我们认为,更高的政府存在有助于我们实现一个更健康的环境。然而,如果我们分析用于构建税收负担 EFI 指标的方法,我们将看到与 EPI 呈-0.4 的轻微负相关。完整的税负指标考虑了以下同等权重的预测因素:

  • 个人收入的最高边际税率。
  • 公司收入的最高边际税率。
  • 总税收负担占 GDP 的百分比。

考虑不同政府如何征税和花费这些资源来帮助保护环境将是有益的。这就是,哪些政策对拯救地球帮助最大,比如那些与二氧化碳排放相关的政策。

如前所述,人均国内生产总值给了我们一个很好的估计,每个人都愿意多花一些钱来帮助保护环境。通过这种方式,他们的偏好转向了那些拥有更环保政策、减少其活动影响的公司,代价是付出更多。

[## 10 家环保公司采取了惊人的环保举措

世界各地的公司比以往任何时候都更加重视可持续发展。从试图减少垃圾填埋垃圾…

blueandgreentomorrow.com](https://blueandgreentomorrow.com/magazines/10-green-companies-with-amazing-environmental-initiatives/)

腐败通过在产权中引入不安全和胁迫来侵蚀环境指标。最令人担忧的是政府机构和决策的系统性腐败,如贿赂、勒索、裙带关系、任人唯亲、赞助、贪污和受贿。这种做法造成的政府诚信缺失降低了公众信任和环境活力。政府诚信得分同等重视以下因素:

  • 违规支付和贿赂。
  • 政府决策的透明度。
  • 没有腐败。
  • 对腐败的看法。
  • 政府和公务员的透明度。

另一个重要因素是贸易和金融自由。一个实施许多贸易壁垒并阻止其居民以有竞争力的价格获得环境友好型商品的政府,不仅在经济上伤害了其公民,同时也侵蚀了他们的栖息地。另一方面,如果金融部门受到政府干预,这可能导致效率低下或高度集中的部门,这可能会对绿色倡议产生负面影响,我们可以从结果中观察到这一点。

尽管产权在等式中不占太大比重,但它们的定义至关重要:它们必须是可衡量的,以便日后进行交易。法治应该由一个与腐败高度隔离的政府来实施。它还应建立法律框架来限制或允许上述权利。它还必须惩罚对环境的破坏,保证合同得到遵守和实施。这样,对栖息地的照顾将被认为是一种可交易的资产,而不是被动的。

结论

自由市场可以更好地保护环境,事实证明,发达国家并没有破坏环境。事实上,他们拥有更多的资源:他们的公民、公司和政府考虑在更环保的解决方案上投入更多的资金。有几个因素是非常重要的,如税收负担、政府诚信和产权,这些因素促进了一个国家的环境绩效。除了税收负担之外,检查税收是如何用于居家护理也很重要。这是另一篇文章的良好开端。

如果你对帖子中的图片和更多细节感兴趣,请访问 github

编程中的函数真的是函数吗?

原文:https://towardsdatascience.com/are-functions-from-programming-really-functions-e306fc2d509d?source=collection_archive---------42-----------------------

…以及它们为什么应该如此

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

背景图片由像素箱上设计

如果你正在读这篇文章,那么很可能你已经非常了解编程中的函数。函数是一种非常常见和广泛的编程结构,几乎出现在所有的编程语言中。

通常,函数是一段代码,它从外部获取一些参数,执行一些可能会用到这些参数的操作,然后返回一个输出值。实际上,在许多编程语言中,函数可以不返回某个值,或者返回多个值,而不仅仅是一个值。但是为了一般性,这些情况也可以表示为只有一个值。对于“不返回”的情况,我们可以使用一个特殊值来表示(在 Python 中,这个特殊值是 None 每当你没有从一个函数中返回一些东西,它就返回 None)。对于更多值的情况,我们可以使用多个值的向量作为单个对象。

例如,在 Python 中,函数定义如下:

def **func_name**(param1, param2, ...): *# do some stuff with input parameters* return output_value

现在,我想问的问题是:这些来自编程的函数是真正的数学函数吗?

嗯……,我们先回忆一下什么是数学函数。

在数学中,函数只是从集合 A 到集合 B 的映射,其中来自 A 的任何元素在 B 中只有一个关联元素。

以下是 math 中的一个函数示例,它有 2 个整数作为输入,并输出一个有理数:

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

数学函数的一个关键属性是,每个给定的输入值对只产生一个特定的输出,或者换句话说,不可能用相同的参数对同一个函数求值两次并得到两个不同的输出。

如果我们考虑这个属性,就不难意识到这对于编程中的函数并不成立。

在编程中,我们可以有这样的函数,即使输入参数是相同的,它也会为不同的函数调用返回不同的结果。

例如,考虑以下 Python 代码:

i = 0def **f**(x): global i i += 1 return x+i

如果我们调用 f(10)我们将得到 11 作为输出值;我是说第一次我们称之为。如果我们第二次调用 f(10),我们将得到 12,然后是 13,以此类推。变量 I 在每次函数调用时递增。

所以,我们上面写的不是一个数学意义上的函数(或者一个纯函数,就像他们经常被称为的那样)。

这里的问题是,我们的函数 f 不仅仅依赖于它的输入值;它也依赖于一个全局变量并改变它。这种行为是该“函数”在其输出值中不一致的原因。

到目前为止,我们确定了“功能”行为不一致的原因:依赖于外部世界

这是唯一的问题吗?

让我们稍微想象一下,我们定义了另一个 Python 函数,这次它只依赖于它的输入参数,没有全局变量。在继续阅读之前想一想这个问题。这次是不是数学函数?

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

图片由 Carlos AlvarengaPixabay 上拍摄

答案是否定的。那么,还有什么可能出错呢?

另一个问题是会导致副作用。也就是说,除了从输入获得输出的过程之外,仍然有可能做影响程序其他部分的事情,因此可以确定函数具有不一致的输出。

例如,假设我们有两个函数 f 和 g,它们都接受一个整数列表作为输入。函数 f 给列表中的第一个整数加 1 并返回,g 给第一个整数加 2 也返回。但是在许多编程语言(包括 Python)中,列表是通过引用传递给函数的。这意味着如果我们在一个函数中改变列表,这个改变会自动在其他地方生效。在我们的例子中,如果我们用输入列表[1,2,3]同时调用 f 和 g,f 中的加法可能会在 g 中的加法之前执行,它们可能会分别返回 2 和 4,而不是我们预期的 2 和 3。所以,f 中发生的事情可能会改变 g 的输出或者相反。因此,f 和 g 不仅仅依赖于它们的输入,它们也不是一个纯函数。

好吧。所以,我们看到了编程中的函数不一定是纯函数,我们也看到了这一事实的原因是什么:依赖于变量而不是输入参数,并导致副作用。但是,这有什么问题呢?我们为什么要担心这些编程结构不是纯函数呢?

原来非纯函数,由于它们的副作用,会产生很多问题。引起大量副作用会使程序的流程变得更加难以预测。它们会产生一些意想不到的结果。

不出所料,数学函数在数学中得到了广泛的研究,与具有副作用的函数相比,我们对它们以及它们的性质了解得更多,而具有副作用的函数更难用数学建模和预测它们的行为。

这就是一种新的编程范式诞生的一些主要原因:函数式编程。

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

图片来自 Flickr 上的 juicy salif

这种函数式编程的范例旨在使用最纯粹的函数,并使那些函数成为它的主要特征。通过只使用纯函数,程序应该有更少的错误,更容易调试、测试和证明它们的正确性。

许多现代编程语言提供了程序员能够编写功能代码所需的东西。举几个例子:Python,C++,Java,JavaScript。这些语言被称为不纯函数语言。它们不纯,因为它们不“强迫”程序员写功能代码,它们只是提供所需的工具;由程序员决定是只使用纯函数,还是使用副作用。

也有所谓的纯函数式语言,如 Haskell、Lean 或 PureScript。与不纯的语言相反,这些语言确实迫使程序员只使用纯函数来编写整个程序。纯函数式语言不是很受欢迎,可能是因为许多人不喜欢数学,并且由于这样一个事实,即尽管理论上有好处,但只使用纯函数创建复杂的程序在实践中可能很麻烦。

纯函数在效率方面也有一些缺点。假设我们有一个很大的数字列表(比如 100 万),我们想把它作为一个参数传递给一个纯函数,这个函数只需要对一个特定的项做一点点改变,然后返回结果列表。这样的功能不允许直接在现有的数字列表中进行更改,因为这将是一个副作用。因此,这个函数应该首先将原始数据(这 100 万个数字)复制到另一个内存位置,在该副本中进行所需的更改,然后返回这个新列表作为结果,并保持原始列表不变。与非纯函数相比,这是非常低效的。

因此,在我看来,如果一个人想要利用函数式编程范式及其好处,最好的方法是使用不纯的函数式语言,这允许程序员可以采用更自由的风格,并且只要合理就尽量使用纯函数。如果在某种程度上,你认为为了更有效或更容易实现而牺牲一个纯粹的函数是值得的,我认为这没问题。

我希望这些信息对您有用,感谢您的阅读!

这篇文章也贴在我自己的网站这里。随便看看吧!

游戏玩家在隔离期间会断网吗?

原文:https://towardsdatascience.com/are-gamers-breaking-the-internet-during-quarantine-176fed9fa83d?source=collection_archive---------18-----------------------

视频游戏使用的带宽比你想象的要多

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

安德烈·谭在 Unsplash 上的照片

这是我今天看到的:

…许多游戏玩家对此感到愤怒。我同意他们中的大多数人。这种说法的问题是建议“在合理的时间玩”。

在不同的时间玩不会有什么帮助,为了证明这一点,我们要看看为什么在线玩只是游戏所需带宽的一小部分。

该推文的大多数回复都引用了这张图表来为游戏辩护:

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

来源:https://www . ABC . net . au/news/2018-06-06/online-gamers-nbn-bandwidth/9836186

这个问题是这个图表比较了苹果和橘子。流视频时,您使用的唯一带宽是加载网页和流视频内容。不像视频游戏,你可以下载:

  • 游戏客户端(如 Steam、Origin 或独立的启动器)
  • 游戏客户端的更新
  • 游戏
  • 游戏的更新

然后,为了玩游戏,你有时会完全离线(完全不使用带宽),或者在其他时候你可能会:

  • 流式传输你的游戏(这比在网飞上流式传输使用更多的带宽)
  • 在游戏中或通过其他应用程序使用语音和文本聊天
  • 使用带宽与服务器或其他在线玩家同步进行在线游戏

上图显示了视频游戏在互联网消费中可能是最小的部分。

堡垒之夜 vs 网飞,估算消费

我们将使用堡垒之夜作为我们的游戏示例,因为数据很容易在其周围找到,但由于其受欢迎程度,它的消耗比大多数游戏大得多。

我们必须考虑的另一件事是,这些因素中的大多数不会每小时发生一次,因此我将把指标累计到每月一次,使它们与网飞更具可比性。

这两种写法都会降低数据的准确性,所以请记住,我的观点纯粹是粗略的概括。

新用户消费

在撰写本文时(2020 年 3 月 22 日),史诗游戏客户端下载量为 41.8MB,全新安装的堡垒之夜下载量为 35.3GB。这些只供新玩家下载,现有玩家只需不断下载最新更新。

那么有多少新玩家呢?根据 Statista 的数据,仅 2019 年 3 月就有约 5000 万新堡垒之夜玩家加入。

一旦开始玩,上面贴的原始图表说堡垒之夜在线玩的时候每小时消耗 70MB,玩家平均每周 6-10 小时。为了简单起见,我们将把它四舍五入到每月 30 小时。

为了比较:

在 2019 年的最后一个季度,网飞在全球范围内拥有超过 1.67 亿付费流媒体用户,以及超过 460 万免费试用客户。— 统计局

因此,堡垒之夜在 2019 年 3 月获得的月度新用户数量是网飞在 2019 年第四季度获得的近 11 倍(460 万对 5000 万)。

网飞用户平均每月 47 小时每天 2 小时。许多消息来源不同意这一指标,但我们知道,它在 2019 年底下降,现在很可能飙升(由于新冠肺炎检疫)。

在网飞上,每小时的视频流消耗大约 3GB 的高清数据,或者 7GB 的 4K 数据。

以下是我们对新用户每月互联网消费的估计:

  • 网飞每月新增用户:47 小时 x3gb = 141 GB/月 x460 万新增用户=6.486 亿 GB
  • 堡垒之夜每月新增用户:(30 小时 x 70MB/小时)+ 35GB 下载量=每用户 37GB x 5000 万新增用户=18.5 亿 GB

现有用户消费

最近一次堡垒之夜更新大约是 3GB ,根据游戏百科,这些更新通常发生在每周二。所以大约每周更新 3GB。

这些估计与上面的非常相似,用户基数在变化,堡垒之夜的初始下载被删除。

  • **网飞月刊:**47 小时 x 3GB = 141 GB/月 x 167M 亿现有用户=235 亿 GB
  • **堡垒之夜月刊:**30 小时 x 70MB/小时=每个用户 2GB x 2 亿现有用户= 4 亿 GB

谁赢了?

尽管在游戏的其他领域也发现了大量的数据消耗,但网飞仍然以 10 倍于堡垒之夜的数据消耗量独占鳌头。

网飞 : 648.6M + 23.5B = 每月 241 亿 GB

堡垒之夜 : 1.85B + 400M = 每月 22.5 亿 GB

免责声明:这些都是难以置信的粗略计算,几乎所有的数据都是从可靠或不可靠的新闻来源收集的。请半信半疑地接受这一切!

如果你包括游戏流(在观看和广播方面),语音/文本聊天,和多种其他视频游戏,那么你可能会看到一个更激烈的竞争。大多数游戏玩家拥有并玩多种游戏。

我倾向于认为堡垒之夜的巨大规模弥补了很多这些无法计算的因素。大多数其他游戏的月用户数只有堡垒之夜的一小部分,而且修补的频率也更低。

我想说的是,游戏占用的带宽比我们意识到的要多得多,网飞也是如此。

这对您的互联网有何影响

如果网飞是这里的罪魁祸首,是他们在损害你的网速吗?

不尽然,以下是本尼迪克特·埃文斯本周最新新闻简报的一段话:

欧盟要求网飞降低流质量以避免网络过载:它照办了,但大多数实际的电信公司表示,虽然流量上升了,但这并不是一个真正的问题,因为实际发生的是晚上的高峰现在延伸到了白天,而不是高峰更高。

他引用了这个来源说了下面的话,我自己强调了一下。

自本周二以来,随着人们开始更广泛地在家工作,我们已经看到工作日白天的流量与固定网络上类似的日子相比增加了 35–60%,峰值为 7.5Tb/s。

这仍然只是平均晚高峰的一半左右,远未达到我们已经证明网络可以处理的 17.5 Tb/s。

总而言之,白天交通流量的增加也减少了夜间交通高峰。我们仍然在这些网络的建设范围之内。

这不仅仅是在英国,如果你感兴趣,这里有更多的网络报道: Cloudflare诺基亚威瑞森西班牙

如果你真的在家里看到了较慢的速度,很可能是你家里的路由器无法处理新增加的使用量。你可能要考虑升级。

国际体育运动会导致全球不快乐吗?

原文:https://towardsdatascience.com/are-international-sports-contributing-to-global-unhappiness-1ca44b188ea3?source=collection_archive---------45-----------------------

深入探究体育对一个国家幸福的影响。

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

Unsplash 上由 Fachry Zella Devandra 拍摄的照片

介绍

对于世界上被隔离的观众来说,体育从未如此重要。毕竟,这只是新闻频道报道疫情统计数据的单调乏味中的一个喘息。

世界经济论坛最近在发表的一篇文章展示了一些研究,声称**一场国际体育比赛的失败所带来的不快乐是一场胜利所带来的快乐的两倍。**例如,根据这项研究,克罗地亚在 2018 年世界杯上以 2 比 4 惨败给法国,这将极大地降低克罗地亚的幸福感——尽管他们在此之前赢了很多场比赛。

即使是联赛中最好的运动队赢的也不到输的两倍。例如,2018-2019 赛季休斯顿火箭队赢了 53 场比赛,输了 29 场。这是一个惊人的记录,但是如果失败带来的不快乐是胜利带来的快乐的两倍,那么这意味着火箭球迷在赛季结束时很大程度上是不快乐的。

文章声称,“运动让我们悲伤。”在国际层面上真的是这样吗?

运动真的和不快乐有关联吗?那些有很多运动队的国家(无论输球与否)会不开心吗?

方法学

为了验证这一说法,我用一个国家在世界幸福指数上的排名来量化一个国家到底有多幸福(排名越低越好)。这个数据集中有 139 个国家。我使用了以下国际体育联盟的数据:

  • 男子 T20 板球(ESPN),女子 T20 板球(维基百科)
  • 男子和女子足球(国际足联)
  • 男子橄榄球(世界橄榄球)、女子橄榄球(Scrum Queens)
  • 男子和女子篮球(国际篮联)
  • 男子和女子曲棍球(FIH)
  • 男子和女子水球(FINA)
  • 男子和女子排球(FIVB)

注意:如果两个国家的幸福等级分别为 1 和 5,数字越小越好,因为该国排名第一,而后者排名第五。

发现 1:有国家运动队的国家比没有国家运动队的国家更幸福。

我使用的数据给了我 0.36 的相关系数,这表明一个国家的运动队数量与其幸福感之间存在适度的正相关。

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

更多的运动队意味着幸福指数排名更低(即更接近第一)。

更令人信服的是,数据显示至少有一支国家运动队的国家平均幸福指数为 75.72(第 76 位),而没有国家运动队的国家平均幸福指数为 115.09(第 115 位)!

发现#2:有女队和男队的国家比只有男队的国家更幸福。

让我们建立一个叫做平等比率的快速指标,它是一个国家的男队数量除以女队数量。

平等比例为 3.0 的国家的中位数位置是 71,而比例更高的国家(即男队是女队的三倍以上)的中位数位置大约是 120。从本质上讲,一个运动队性别平等的国家一定会更幸福。真的,这很容易。

发现 3:运动队表现较好的国家比运动队表现较差的国家更幸福。

这一点令人惊讶,因为它似乎证实了这篇文章的主张,即更多的国民损失与更差的国民幸福相关。这似乎是显而易见的,但有人可能会说,一支球队在锦标赛的每个阶段获得的累计快乐超过了他们输掉最后一场比赛时的失望。

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

拥有表现更好的国家运动队(并且有很多)的国家往往比那些表现更差的国家更幸福。

此外,这些国家在所有运动项目上的综合表现都名列前茅。在该表中,联赛排名越低越好(即,如果一个国家在国际篮球赛中排名第四,但在国际水球赛中排名第二,则他们的平均联赛排名将为第三)。

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

澳大利亚在男子国际体育联盟中平均排名第 13,在女子国际体育联盟中平均排名第 8。

结论

一个快乐的国家是一个投资于体育运动的团结和振奋精神的能力的国家,而且不分性别,一视同仁。事实上,我认为世界幸福指数应该把体育运动作为全国幸福指数的代表。

为了反驳世界经济论坛文章中的研究,体育运动确实能让人快乐。无论是玩家还是观众。

如果你想看我做这个项目用的代码或者数据,可以在这里 找到我的 GitHub 。你也可以在 Medium 上关注我,了解更多类似的内容。感谢阅读!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值