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

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

感知器:人工神经元(麦卡洛克-皮茨神经元的本质升级)

原文:https://towardsdatascience.com/perceptron-the-artificial-neuron-4d8c70d5cc8d?source=collection_archive---------0-----------------------

深度神经网络的最基本单元被称为人工神经元,它接受输入,对其进行处理,将其传递给类似 Sigmoid 的激活函数,并返回激活的输出。在这篇文章中,我们将只讨论在“激活”部分出现之前提出的感知机模型。

美国心理学家弗兰克·罗森布拉特(Frank Rosenblatt)在 1958 年提出了经典感知机模型。由明斯基和 Papert (1969)进一步提炼和仔细分析——他们的模型被称为感知器模型。这是我上一篇关于麦卡洛克-皮茨神经元的文章的后续,我建议你至少快速浏览一下,以便更好地欣赏明斯基-帕佩特的贡献。

引用注:本文的概念、内容和结构灵感来自于 米特什·m·卡普拉 教授关于NPTEL 深度学习 课程的精彩讲座和材料。看看吧!

感知器

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

Minsky-Papert 提出的感知器模型是一个比麦卡洛克-皮茨神经元更通用的计算模型。它通过引入输入的数字权重(重要性的度量)的概念和学习这些权重的机制,克服了 M-P 神经元的一些限制。输入不再像 M-P 神经元那样局限于布尔值,它还支持实输入,这使它更加有用和通用。

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

现在,这非常类似于 M-P 神经元,但是我们取输入的加权和,并且仅当和大于任意阈值( 、θ)时将输出设置为 1。然而,根据惯例,我们没有手动编码阈值参数 thetha ,而是将其添加为输入之一,权重为- theta ,如下所示,这使得它可以学习(在我的下一篇文章中会详细介绍这一点— 感知器学习算法)。

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

考虑使用可用的行为数据预测我是否会在电视上观看随机的足球比赛的任务(与我的 M-P neuron 帖子中的例子相同)。让我们假设我的决定完全依赖于 3 个二进制输入(为简单起见是二进制)。

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

在这里, w_0 之所以被称为偏见,是因为它代表了先验(preference)。一个足球狂可能有一个非常低的门槛,可以观看任何足球比赛,而不考虑联赛、俱乐部或比赛的重要性[ theta = 0 ]。另一方面,像我这样的选择性观众可能只观看英超联赛的足球比赛,以曼联比赛为特色,并且不友好。重点是,权重偏差将取决于数据(在这种情况下是我的观看历史)。

根据数据,如果需要,模型可能必须赋予 isManUnitedPlaying 输入很大的重要性(高权重),并惩罚其他输入的权重。

感知器 vs 麦卡洛克-皮茨神经元

使用感知器可以实现什么样的功能?它与麦卡洛克-皮茨神经元有多大不同?

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

从等式中可以清楚地看出,即使是一个感知器也会将输入空间分成两半,正的和负的。产生输出 1 的所有输入位于一侧(正半空间),产生输出 0 的所有输入位于另一侧(负半空间)。

换句话说,单个感知器只能用来实现线性可分功能,就像 M-P 神经元一样。那有什么区别呢?为什么我们声称感知器是 M-P 神经元的升级版?这里,包括阈值的权重可以是学习的和输入可以是真实的值。****

使用感知器的布尔函数

还是功能——能做!

只是重温过去的美好时光,或者用感知机的方式发挥作用。

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

Try solving the equations on your own.

上面的‘可能解’是通过解左边的线性方程组得到的。很明显,解决方案将输入空间分成两个空间,负半空间和正半空间。我鼓励您尝试使用 AND 和其他布尔函数。

现在,如果你真的试着解上面的线性方程,你会发现可能有多个解。但是哪种解决方案是最好的呢?为了更正式地定义“最佳”解决方案,我们需要理解错误和错误表面,这将在我的下一篇关于感知器学习算法的文章中进行。

XOR 函数—做不到!

现在让我们来看一个非线性布尔函数,也就是说,你不能画一条线来区分正输入和负输入。

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

请注意,第四个等式与第二个和第三个等式相矛盾。关键是,对于非线性分离的数据,没有感知器解决方案。因此,关键是一个单个** 感知器无法学会分离本质上是非线性的数据。**

异或事件

在 Minsky 和 Papert 于 1969 年出版的书中,作者暗示,由于单个人工神经元无法实现某些功能,如逻辑功能的 XOR,因此更大的网络也有类似的局限性,因此应该放弃。后来对三层感知器的研究显示了如何实现这样的功能,从而避免了这项技术被抹杀。

维基百科

(可选)乙状结肠神经元的动机

正如我前面提到的,我们今天使用的人工神经元与我们看到的感知器略有不同,区别在于激活功能。给你。有些人可能会说一个感知器使用的阈值逻辑非常苛刻。例如,如果你看一个决定我是否要看电影的问题,只基于一个实值输入( x_1 = 评论),如果我们设置的阈值是 0.5(w _ 0=-0.5)和*【w _ 1***= 1,那么我们的设置将是这样的:**

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

对于一部= 0.51 的电影,会有什么样的决定?是的! 对于一部= 0.49 的电影,会有什么决定?不!有些人可能会说,我们会看一部评分为 0.51 的电影,而不是一部评分为 0.49 的电影,这太苛刻了,这就是西格蒙德出现的原因。现在说服你自己,这个苛刻的阈值并不仅仅归因于我们在这里选择的一个特定问题,它可能发生在我们处理的任何或每一个问题上。这是感知器*功能本身的一个特征,其行为类似于阶跃函数。*****

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

z 值越过阈值(- w_0 )时会有这种决策的突变(从 0 到 1)。对于大多数真实世界的应用,我们期望一个从 0 到 1 逐渐变化的更平滑的决策函数。

引入输出函数比阶跃函数平滑得多的 sigmoid 神经元似乎是一件合乎逻辑且显而易见的事情。请注意,sigmoid 函数是一个具有典型“S”形曲线的数学函数,也称为 sigmoid 曲线。有许多功能可以帮您完成这项工作,下面列出了一些:

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

- Wikipedia

最简单的一个例子是逻辑函数。

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

Quick Question: What happens to y when z is infinite? Or when it is -infinite?

我们不再看到围绕 w_0 的急剧转变。此外,输出不再是二进制的,而是介于 0 和 1 之间的真实值,可以解释为概率。因此,我们得到的不是“是/否”的决定,而是“是”的概率。这里的输出是平滑*、连续可微,这是任何学习算法都喜欢的。要自己验证这一点,请翻翻深度学习中的反向传播概念。***

结论

在这篇文章中,我们看了一个感知器,深度神经网络的基本单元。我们还通过例子展示了感知器与麦卡洛克-皮茨神经元相比,如何更加一般化,并克服了当时的一些相关限制。我们也简单地建立了乙状结肠神经元的动机。**

在我的下一篇文章中,我们将仔细观察著名的 感知器学习算法 ,并尝试获得它为什么工作的直觉,而不进入任何复杂的证明,以及从头开始用 Python 实现该算法。

感谢您阅读文章。自己活也让别人活!

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

Photo by Clint Adair on Unsplash

感知器、逻辑函数和异或问题

原文:https://towardsdatascience.com/perceptrons-logical-functions-and-the-xor-problem-37ca5025790a?source=collection_archive---------1-----------------------

深度学习药丸#2

今天我们将探索感知器能做什么,它有什么限制,我们将为超越这些限制做准备!图形和代码支持的一切。

来自深度学习药丸#1 的元素

在本系列的第 1 部分中,我们引入了感知器作为实现以下功能的模型:

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

对于参数 wb 的特定选择,输出ŷ仅取决于输入向量 x 。我用ŷ(“y 帽”)来表示这个数字是由模型产生/预测的。很快,你就会体会到这种符号的简易性。

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

计算图形

为了可视化一个模型的架构,我们使用了所谓的计算图:一个用来表示数学函数的有向图。变量和操作都是节点;变量被输入到操作中,操作产生变量。

我们感知机的计算图是:

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

σ符号通过权重w 和偏差 b 表示输入x 的线性组合。由于这种符号非常复杂,从现在开始,我将按照以下方式简化计算图形:

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

感知器能做什么?

我正在介绍一些感知器可以用它的能力实现什么的例子(我将在本系列的后续部分讨论这个术语!).逻辑函数是一个很好的起点,因为它们将把我们带到感知器背后的理论的自然发展,因此也是神经网络

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

非逻辑函数

让我们从一个非常简单的问题开始:

感知器能实现非逻辑功能吗?

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

NOT(x)是一个 1 变量函数,这意味着我们一次只有一个输入:N=1。此外,它是一个逻辑函数,因此输入和输出都只有两种可能的状态:0 和 1(即假和真):Heaviside 阶跃函数似乎符合我们的情况,因为它产生一个二进制输出。

考虑到这些因素,我们可以说,如果存在一个可以实现 NOT(x)函数的感知器,它就像左边显示的那样。
给定两个参数 wb ,它将执行以下计算:
ŷ=θ(wx+b)

最基本的问题是:是否存在两个值,如果作为参数选取,允许感知器实现非逻辑功能?当我说*感知器实现一个函数时,*我的意思是,对于函数域中的每个输入,感知器返回相同的数字(或向量),函数将返回相同的输入。
回到我们的问题:这些值之所以存在,是因为我们可以很容易地找到它们:让我们选择 w = -1b = 0.5。

我们得到了:

NOT(0) = 1
NOT(1) = 0

我们得出结论,初始问题的答案是:是的,一个感知器可以实现 NOT 逻辑功能;我们只需要正确设置它的参数。请注意,我的解决方案不是唯一的;事实上,对于这个特殊的问题,作为(w,b)点的解是无限的!可以用自己喜欢的;)

和逻辑功能

下一个问题是:

感知器能实现 AND 逻辑功能吗?

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

AND 逻辑函数是一个二元函数,和(x1,x2) ,具有二进制输入和输出。

该图与以下计算相关:
ŷ=θ(w1 * x1+w2 * x2+b

这次我们有三个参数: w1 、 *w2、*和 b 。你能猜出这些参数的哪三个值能让感知机解决和问题吗?

解:
w1 = 1,w2 = 1,b = -1.5

它会打印:

AND(1, 1) = 1
AND(1, 0) = 0
AND(0, 1) = 0
AND(0, 0) = 0

或逻辑函数

或(x1,x2) 也是一个二元函数,它的输出是一维的(即一个数),有两种可能的状态(0 或 1)。因此,我们将使用一个与之前相同架构的感知器。解决 OR 问题的三个参数是什么?

解:
w1 = 1,w2 = 1,b = -0.5

OR(1, 1) = 1
OR(1, 0) = 1
OR(0, 1) = 1
OR(0, 0) = 0

XOR —所有(感知器)对一(逻辑功能)

我们的结论是,一个单一的感知器与亥维赛激活功能可以实现每一个基本的逻辑功能:非,与和或。它们被称为基本的,因为任何逻辑函数,无论多么复杂,都可以通过这三者的组合来获得。我们可以推断,如果把我们刚刚搭建的三个感知器适当的连接起来,就可以实现任何逻辑功能!让我们来看看如何:

我们如何建立一个由基本逻辑感知器组成的网络,使其实现异或功能?

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

解决方案:

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

输出是:

XOR(1, 1) = 0
XOR(1, 0) = 1
XOR(0, 1) = 1
XOR(0, 0) = 0

这些就是我们一直在寻找的预测!我们只是把上面的三个感知器组合起来,得到一个更复杂的逻辑函数。

有些人可能想知道,就像我们对前面的函数所做的那样,是否有可能找到单个感知器的参数值,这样它就可以自己解决 XOR 问题。

我不会让你为寻找这三个数字而大费周章,因为那是没有用的:答案是它们不存在。为什么?答案是异或问题不是线性 可分,我们在本系列下一章深入讨论!

我将在几天后发表它,我们将讨论我刚才提到的线性可分性。我将从几何的角度重塑我今天介绍的主题。这样,我们今天得到的每一个结果都会得到它自然直观的解释。

如果你喜欢这篇文章,我希望你能考虑给它一些掌声!每一次鼓掌都是对我极大的鼓励:)还有,随时在Linkedin上联系我!

很快再见,
弗兰克

实时风格转换和超分辨率的感知损失

原文:https://towardsdatascience.com/perceptual-losses-for-real-time-style-transfer-and-super-resolution-637b5d93fa6d?source=collection_archive---------5-----------------------

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

[Fig. 1] Two toons discussing Neural Style Transfer at the beach.

这是一篇论文的论文摘要: 实时风格传递和超分辨率的感知损失 作者:贾斯廷·约翰逊,亚历山大阿拉希,李菲菲。
论文:

概观

本文提出使用 感知损失函数 来训练用于图像变换任务的前馈网络,而不是使用* 逐像素损失函数 。*

每像素损失函数?
根据两幅图像各自的像素值进行比较。
因此,如果两个图像在感知上相同,但是基于甚至一个像素彼此不同,那么基于每像素损失函数,它们将彼此非常不同。

感知损失函数?
基于来自预训练卷积神经网络(在图像分类任务上训练,比如说 ImageNet 数据集)的高级表示,比较两幅图像
。**

他们在两个图像转换任务上评估他们的方法:
(i)风格转换
(ii)单幅图像超分辨率

对于风格转移,他们训练前馈网络,试图解决 Gatys et al. 2015 提出的优化问题。

对于超分辨率,他们尝试使用感知损失,并表明它比使用每像素损失函数获得更好的结果。

方法

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

[Fig. 2] Model Architecture

所提出的模型架构由两个组件组成:
(i)图像变换网络(f_{w} )
(ii)损失网络(φ)

图像变换网络

图像变换网络是一个深度残差卷积神经网络,它被训练来解决 Gatys 提出的优化问题。

给定一个输入图像(x ),该网络将其转换成输出图像(ŷ).

使用使用输出图像(ŷ)计算的损失并将其与以下各项进行比较来学习该网络的权重(w):风格转移情况下的风格图像(y_{s})和内容图像(y_{c})的表示
-超分辨率情况下的内容图像y_{c}

使用随机梯度下降来训练图像变换网络,以获得最小化所有损失函数的加权和的权重(W)。

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

[Fig. 3] Weight update equation Explained.

损耗网络

损耗网络(φ)是 ImageNet 数据集上预先训练的 VGG16。

损失网络用于从内容和样式图像中获得内容和样式表示:
(i)内容表示取自层*relu3_3*。【图 2
(二)样式表示取自图层*relu1_2**relu2_2**relu3_3**relu4_3*。【图 2

这些表示用于定义两种类型的损失:

特征重建损失
用输出图像(ŷ)和来自层` relu3_3 '的内容表示并在图像中使用以下损失函数

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

[Fig. 4] Feature Reconstruction Loss Explained.

风格重建损失 利用输出图像(ŷ)和来自层 *relu1_2* 、 relu2_2 *relu3_3* 和 relu4_3 的风格表示,并使用来自图像的以下损失函数

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

[Fig. 5] Style Reconstruction Loss Explained.

在风格转移的情况下,总损失通常是特征重建损失和风格重建损失的加权和。和超分辨率的特征重建损失的加权乘积。

这些损失用于学习图像变换网络的权重。

结果

风格转移

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

[Fig. 6] Results of Style Transfer (from the paper)

  • 在 COCO 数据集上训练的网络(用于内容图像)。
  • 80k 训练图像调整为 256x256 补丁。
  • 批量:4 个
  • 40k 次迭代(大约 2 个时期)
  • 使用的优化器:Adam
  • 学习率:1e-3
  • 在 Titan X GPU 上进行培训大约需要 4 个小时
  • 对比 Gatys 等人提出的方法【1】

单幅图像超分辨率

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

[Fig. 7] Results of Super-Resolution (x4) (from paper)

  • 使用来自 MS-COCO 的 10k 图像的 288x288 补丁进行训练
  • 通过使用宽度σ=1.0 的高斯内核进行模糊处理和使用双三次插值进行下采样,准备好低分辨率输入。
  • 批量:4 个
  • 迭代次数:20 万次
  • 优化器:亚当
  • 学习率:1e-3
  • 对比 Sr CNN【3】**

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

[Fig. 8] Table showing the speed in seconds of the approach in this paper against Gatys’ paper (from the paper)

正如我们所看到的,我们使用本文的方法得到了相似的结果,并且在推理过程中比 Gatys 的方法几乎快3 个数量级。**

这种方法的最大缺点是,我们必须针对每种风格或每种分辨率训练 一个网络, 即不能仅使用一个网络来执行 任意 风格转换。

使用 Gatys,我们能够仅使用一个网络来执行 任意 风格的传输,这是我们使用本文提出的方法无法做到的。

参考

*****【1】*贾斯廷·约翰逊、阿拉希、李菲菲。:实时风格转换和超分辨率的感知损失。arXiv:1603.08155(2016 年 3 月)

*****【2】*Gatys,L.A .,Ecker,A.S .,Bethge,m .:艺术风格的神经算法。arXiv 预印本 arXiv:1508.06576 (2015)

*****【3】*董,c,洛伊,C.C .,何,k,唐,x .:学习一种用于图像超分辨率的深度卷积网络。参加:计算机视觉-ECCV 2014。施普林格(2014 年)

所以,简而言之,这就是论文的全部内容! 如果我发现一些有趣的见解需要补充,我会更新这个故事! 一定要走纸!

喜欢什么你请 read❓
👏 👏 👏 👏 👏

喜欢我的作品❓
跟着我❗️

** [## 阿鲁纳瓦查克拉博蒂| LinkedIn

查看 Arunava Chakraborty 在 LinkedIn 上的职业简介。LinkedIn 是世界上最大的商业网络,帮助…

www.linkedin.com](https://www.linkedin.com/in/iarunava/) [## 阿鲁纳瓦(@amArunava) |推特

阿鲁纳瓦(@amArunava)的最新推文:“从@fastdotai 上的#DeepLearning 课程 1 开始,已完成第 1 周…

twitter.com](https://twitter.com/amArunava) [## 阿鲁纳瓦

订阅深入了解 Python 里的所有东西。

www.youtube.com](https://www.youtube.com/channel/UC2ZFGaNzZt-sUy2qZT6L7Zw)

给我发消息!
我们连线吧!**

性能爆炸!TigerGraph 开发者版简介

原文:https://towardsdatascience.com/performance-exploding-introduction-to-tigergraph-developer-edition-486d6e6a409?source=collection_archive---------24-----------------------

This document is translated from: 性能炸裂!图数据库 TigerGraph 开发者版本入门 — 知乎

介绍

图数据库是随着大数据的普及而增长的一种数据库类型。

在多年专注于商业市场后,TigerGraph 发布了其免费开发者版。TigerGraph 本身自称是 Graph Database 3.0,具有处理海量数据的能力,支持实时更新和查询,它还定义了一种新的语言,称为 GSQL。这对于图形数据库爱好者来说无疑是一个好消息。

开发者版可在https://www.tigergraph.com/download/获得填写表格后,下载链接和相关文件将发送到您的电子邮件地址。

接下来,我们将逐步安装 TigerGraph,并尝试加载一个 31G 的社交网络数据集。TigerGraph 在测试结果中展现了他惊人的力量,在业界遥遥领先。

装置

目前,TigerGraph 支持包括 Ubuntu 和 CentOS 在内的主要 Linux 平台。

首先,我们需要解压缩下载的文件:

ubuntu@ip-172-31-6-254:~$ tar -xzvf tigergraph-developer-latest.tar.gz
tigergraph-2.1.2-developer/
tigergraph-2.1.2-developer/tsar.tar.gz
tigergraph-2.1.2-developer/LICENSE.txt
...

然后,以 root 权限运行install.sh

ubuntu@ip-172-31-6-254:~/tigergraph-2.1.2-developer$ sudo ./install.sh -n
   _______                 ______                 __
  /_  __(_)___ ____  _____/ ____/________ _____  / /_
   / / / / __ `/ _ \/ ___/ / __/ ___/ __ `/ __ \/ __ \
  / / / / /_/ /  __/ /  / /_/ / /  / /_/ / /_/ / / / /
 /_/ /_/\__, /\___/_/   \____/_/   \__,_/ .___/_/ /_/
       /____/                          /_/Welcome to the TigerGraph platform installer![PROGRESS]: Checking operation system (OS) version ...
[NOTE    ]: OS obtained: UBUNTU 16.04
[NOTE    ]: OS check passed [OK]
...
---------------------------------------------------------------
Congratulations! Installation Finished!
---------------------------------------------------------------Thank you for using TigerGraph platform!
[PROGRESS]: Cleaning up ...
DONE
[NOTE    ] The TigerGraph user: tigergraph
ubuntu@ip-172-31-6-254:~$

现在,/home/tigergraph/tigergraph/下已经安装了 tigergraph。有两点需要注意:

  1. 安装过程中会创建一个操作系统用户tigergraph。由于我们使用了-n选项(默认配置),所以密码也是tigergraph
  2. 所有后续操作都应该在用户tigergraph下完成,而不是拥有root权限的原用户。

服务管理

TigerGraph 使用命令gadmin来管理系统,该命令应该在 OS 用户tigergraph下运行。

开始和停止

默认情况下,TigerGraph 将在安装后启动。

gadmin startgamin stop可用于启动和停止服务。

系统状况

命令gadmin status可用于检查各部件的状态。

tigergraph@ip-172-31-6-254:~/$ gadmin status
Welcome to TigerGraph Developer Edition, for non-commercial use only.
=== zk ===
[SUMMARY][ZK] process is up
[SUMMARY][ZK] /home/tigergraph/tigergraph/zk is ready
=== kafka ===
[SUMMARY][KAFKA] process is up
[SUMMARY][KAFKA] queue is ready
=== gse ===
[SUMMARY][GSE] process is up
[SUMMARY][GSE] id service has NOT been initialized (online)
...
=== Visualization ===
[SUMMARY][VIS] process is up (VIS server PID: 37708)
[SUMMARY][VIS] gui server is up

应用

接下来,我们将创建一个最简单的图形,加载数据并运行一些简单的查询来查看 TigerGraph 的性能。

硬件和数据集

TigerGraph 的要求比较低,最低 8G 内存,20G 磁盘空间,这样就可以在虚拟机中运行。当然,加载大型图形需要更多的磁盘空间和内存。

可以在亚马逊共购网数据集上做简单测试,解压缩后只有 12.6M。

为了让它更有趣,这里我们使用 Friendster 社交网络数据集,它与亚马逊共同购买网络具有相同的格式,但是具有更多的顶点和边:650 万个顶点和大约 20 亿条边。测试在 AWS EC2 c4.8xlarge 上进行,带 GP2 磁盘,操作系统为 Ubuntu 16.04。

首先我们需要解压数据文件:gunzip com-friendster.ungraph.txt.gz

未压缩的数据文件大小为 31G。在开始测试之前,我们先检查一下磁盘使用情况,加载后可以对比一下。

tigergraph@ip-172-31-6-254:~/data$ ll com-friendster.ungraph.txt  --block-size=G
-rw-rw-r-- 1 tigergraph tigergraph 31G Nov 13  2012 com-friendster.ungraph.txt
tigergraph@ip-172-31-6-254:~/data$ df -h
Filesystem      Size  Used Avail Use% Mounted on
udev             30G     0   30G   0% /dev
tmpfs           5.9G  8.5M  5.9G   1% /run
/dev/xvda1      194G   67G  127G  35% /
tmpfs            30G     0   30G   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs            30G     0   30G   0% /sys/fs/cgroup
tmpfs           5.9G     0  5.9G   0% /run/user/1000

为了感受这个数据集有多大,我们可以运行time wc -l com-friendster.ungraph.no.header.txt:

tigergraph@ip-172-31-6-254:~/data$ time wc -l com-friendster.ungraph.no.header.txt
1806067135 com-friendster.ungraph.no.header.txtreal    3m8.286s
user    0m31.372s
sys     0m18.412s
tigergraph@ip-172-31-6-254:~/data$ ls -al --block-size=G com-friendster.ungraph.no.header.txt
-rw-rw-r-- 2 tigergraph tigergraph 31G Jun 12 05:36 com-friendster.ungraph.no.header.txt

从结果中我们可以看到,这个文件有 18 亿行,在 SSD 上运行wc -l差不多要 4 分钟!

创建图表

创建图表有两种方法,要么通过 cmd 工具gsql,要么通过 GUI 工具GraphStudio

这里我们使用 GraphStudio。要访问 GraphStudio,在浏览器上键入http://localhost:14240。如果是远程服务器,只需将localhost更改为远程 IP,主页将显示:

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

TigerGraph Home Page

切换到左侧面板中的Design Schema,添加一个顶点,设置属性、颜色和图标,点击箭头指向的按钮:

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

Add Vertex

要添加边,点击下一步按钮,然后选择源顶点和目标顶点,会弹出一个对话框:

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

Add edge

然后,只需点击publish按钮,图表将被创建。

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

Publish

添加数据源

切换到左侧面板上的Map Data To Graph。点击如图所示的按钮上传文件:

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

Add source

考虑到本次测试的数据文件太大,并且已经在服务器上,我们可以直接将其移动到/home/tigergraph/tigergraph/loadingData/或者使用ln命令创建一个硬链接,而不是上传。

在选择了正确的文件类型和分隔符后,我们可以将数据源添加到操作面板中。在这里,我们可以点击如图所示的按钮,然后选择名为friend的文件和边,我们可以很容易地指定数据到属性的映射。

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

File Mapping

加载数据

切换到Load Data,点击start按钮,加载开始。点击loading log按钮可以看到加载日志。

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

Load Data

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

Loading log

以下是加载日志的一部分:

filename = .gsql.loader.progress.2018.6.12-5.57.54, progress size = 309
...
906761 lines/second|------------------- |99 %
899769 lines/second|------------------- |99 %
907965 lines/second|--------------------|100%
352247 lines/seconddestroy worker06:41:54.181621 gcleanup.cpp:38] System_GCleanUp|Finished

我们可以看到,31G 的原始数据,从 5:57 开始到 6:41,总共需要 44 分钟。其实我们创建的是无向图,所以实际加载的数据量要翻倍,相当于 62G 的有向图。这只是开发者版,太神奇了!

这是磁盘使用情况

tigergraph@ip-172-31-6-254:~$ df -h
Filesystem      Size  Used Avail Use% Mounted on
udev             30G     0   30G   0% /dev
tmpfs           5.9G  8.5M  5.9G   1% /run
/dev/xvda1      194G  110G   85G  57% /
tmpfs            30G     0   30G   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs            30G     0   30G   0% /sys/fs/cgroup
tmpfs           5.9G     0  5.9G   0% /run/user/1000

当前磁盘使用量为 110G,加载前为 67G,与原始数据相当于 62G 有向图相比,磁盘使用量只增加了 43G!

让我们看看记忆,

tigergraph@ip-172-31-6-254:~/data$ free -m
              total        used        free      shared  buff/cache   available
Mem:          60382       24114       19564          16       16703       35686
Swap:             0           0           0

加载后,磁盘使用量只有 24G。

询问

数据加载后,我们可以切换到Explore Graph进行一些基本的查询。因为 TigerGraph 是一个实时数据库,数据加载过程是在线的。因此,实际上我们不需要在运行查询之前等待加载完成。

下图显示了拾取顶点、1 步邻居和 6 步连通子图的结果。

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

Query Neighbors

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

K-step Subgraph

发动机反应如此之快,没有明显的延迟。

Write Queries面板中,使用查询语言 GSQL,可以完成更多的定制查询。GSQL 的风格类似于一些常用的编程语言,很容易上手。IDE 非常强大,有漂亮高亮显示和实时的语法和语义检查。

给定一个顶点,下面是一个简单的 k 步邻居查询。

CREATE QUERY k_step_neighbor(VERTEX<person> p, int k) FOR GRAPH MyGraph { 
  initial_set = {p};
  result = initial_set;
  FOREACH i in RANGE[1, k] DO
    result = SELECT dest_vertex 
      FROM result:start_vertex-(friend)->person:dest_vertex
    ;
  END;
  PRINT result;
}

保存并安装查询后,我们就可以运行它了

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

此外,更多的条件和过滤器可以添加到查询中,例如,顶点和边属性上的过滤器。这里我们不赘述。

在附录中提到的 TigerGraph 的 testdrive 中还有更复杂的用例可用,比如反欺诈、供应链、社交网络、公司信息知识图、

结论

TigerGraph 开发者版性能惊人。UI 工具 GraphStudio 提供了流畅的入门体验,查询语言也很容易学习。

TigerGraph 开发版的推出可能会开启图形数据库的新时代。

附录

蒙特卡洛树搜索在梦幻足球选秀中的表现

原文:https://towardsdatascience.com/performance-of-monte-carlo-tree-search-for-fantasy-football-drafts-269075d08088?source=collection_archive---------10-----------------------

本帖中的代码也可作为 Jupyter 笔记本

在我之前的帖子中,我们看到了使用蒙特卡洛树搜索法为你的梦幻足球选秀。这篇文章将分析我们的 MCTS 算法的性能。

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

Photo by Tajuana Delamora on Pixy

设置迭代次数

在我们开始研究性能之前,您可能记得 MCTS 的一个参数涉及到要运行的迭代次数。上次我们将其设置为 1000 次迭代(相当随意),但这可能值得研究一下。一个简单的分析方法是让 MCTS 和另一个迭代次数更多的 MCTS 竞争。如果后者优于前者,那么至少有更高的迭代次数是有意义的,并且测试更高的迭代次数是否仍然优于后者。在某些时候,我们期望迭代次数达到一个平衡,在这种情况下,我们可以停止增加迭代次数。

下面我们看到了这个练习的结果。事实证明,对于可接受的性能来说,1000 次迭代似乎就足够了。

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

随机策略下的绩效

作为一个基本的基准,现在让我们来看看 MCTS 是如何对付一个随意选秀的对手的。这个策略的实现非常简单。

def random_draft(state):
    return np.random.choice(state.GetMoves())

下面是两种策略在不同蛇顺序位置的结果。正如所料,MCTS 胜过随机策略。

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

针对贪婪策略的性能

接下来,让我们看看 MCTS 对一个采用贪婪策略选秀的对手的表现。贪婪的意思是你在你的花名册上选择现在最有价值的位置,而不考虑未来选择的后果。例如,首先选择四分卫可能会增加很多价值,但以后可能会错过优秀的跑卫,因为他们很快就会变得稀缺。该策略的实现如下所示。

def greedy_draft(state):
    def result(move):
        st = state.Clone()
        st.DoMove(move)
        return st.GetResult(st.playerJustMoved)

    res, move = max((result(m), m) for m in state.GetMoves())
    return move

我们很高兴地看到,下面的结果表明,我们的 MCTS 算法仍然优于这种贪婪策略——但请注意,贪婪策略似乎比随机更差!

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

蛇订单位置的值

最后,让我们看看你的蛇顺序位置有多重要。很多人都在讨论第一次选人的价值——以及等待下一次选人的漫长时间——与随后的选人相比。我们可以在多个草稿上运行我们的 MCTS 算法,然后查看每个草稿位置的平均结果。

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

而且,是的,这似乎证实了拥有第一选择的确很重要…在一个糟糕的赛季后的另一个借口;-)

起草愉快!

Tableau 的性能优化思想

原文:https://towardsdatascience.com/performance-optimization-ideas-for-tableau-e222fe3b9320?source=collection_archive---------13-----------------------

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

数据无处不在,它本身正在成为一种货币。像脸书这样的公司将信息作为他们的主要收入来源。为了有用,数据需要被处理、理解,甚至转换成可爱的图形表示。Tableau 可以成功地做到所有这些,并且让用户继续在本地系统中工作,如电子表格、关系数据库、云环境或 OLAP。通过一个简单的连接,所有这些都成功地导入到 Tableau 中,并准备接受分析。然而,当出现明显的延迟和明显的性能下降时,您能做些什么呢?

这是谁的错?

每次发现性能下降时,您都需要确定原因。是硬件还是软件?是本地机器造成的还是服务器造成的?你能实施快速解决方案吗,或者你需要重新评估你的工作模式吗?

过时的硬件

要解决的最直接的问题,尽管不是最便宜的,是升级本地设备。要了解这是否有必要,请在您怀疑速度太慢的计算机和一台好得多的计算机上测试同一工作簿。如果有显著差异,请升级。

服务器问题

如果工作簿位于服务器上的共享数据连接上,可能是您过度使用了可用资源。例如,如果计算是在共享源中定义的,您可能希望使用本地源进行故障排除,以避免服务器过载。

直播的麻烦

想想保持 Tableau 直播的必要性。除非项目必须有实时提要,否则通过创建定期更新的摘录来节省资源。

当实时流是一个基本条件时,考虑定制 SQL 的必要性。这些是一些最低效的连接,应该尽可能地加以限制。为了提高速度,直接在 Tableau 中定义连接,而不是 SQL。看看那些需要加倍努力的不必要的条款。这样的例子是“ORDER BY ”,因为 Tableau 在加载后会对数据进行重新排序。

更好的数据管理

数据对性能有直接影响。始终只处理各自任务所需的数据。空闲列只会降低 Tableau 环境的速度。只提取一个样本或完全删除不必要的列。这将转化为更短的刷新时间和更高的速度。

摘录是你最好的朋友。把它们想象成一个“手提箱”,你把当前任务需要的数据放在里面,就像你度假时只带你需要的东西,而不是家里的所有东西。甚至有一个案例研究描述了使用这种方法后,报告的计算时间减少了 99%。

过滤微调

快速滤镜是你的画面表现的无声杀手之一。这些缺省值看似无害,但实际上,对于仪表板中出现的每个缺省值,都有一个在后台执行的连接查询。当然,保留那些你需要的,但是也考虑用“动作”过滤器替换,因为这些过滤器不会触发查询。

减少不必要的服务器资源负担的另一种方法是在通过上下文过滤器需要连接之前计算连接。这是一种创建非规范化表的方法,速度可节省 90%。事实上,这可以作为良好的实践。

关于计算的决定

逻辑条件会对分配的资源造成真正的损失。一些最贪婪的子句是 IF-ELSE 结构。如果不是太多,只要有与值的比较,这些都可以被布尔条件成功替代。

数据的类型对计算速度有很大的影响。要知道字符串是最容易使用的资源,其次是日期、布尔值,最后是数字。

另一个技巧是去掉使用组,用“格”来代替。当添加满足底层条件的新成员时,这甚至更有用。在分组的情况下,这应该是手工完成的,因此对于输入来说也是节省时间的操作。

如果您在本地进行计算,这会降低工作簿的速度。尽量利用服务器方法的优势。此外,无论如何都要避免在行级别使用参数进行计算。

标志和图像

每个数据点被称为一个标记,显示它会降低系统速度。想想每一列或每一行的必要性,不要因为你太懒就把它们摆在那里。

将图片的使用限制在绝对必要的范围内。尝试使用透明背景的 png,既能达到设计目的,又能占用更少的空间。

布局提示和技巧

每个布局都需要自己的资源,超过四个会大大降低仪表板的性能。尽量在你的小组中包含练习册,并确保你最大限度地使用你选择的练习册。

这听起来可能令人惊讶,但是为你的仪表板设置一个尺寸可以提高性能。原因在于,将它设为“自动”,这是默认设置,将迫使工作簿根据每个不同用户的屏幕大小来适应他们的偏好。对于环境来说,这类似于为每个用户打开不同的仪表板,即使信息是相同的。

优化 Tableau 有意义吗?

Tableau 是 BI 最强大的工具之一。这是因为它主要是一个具有计算能力的数据可视化工具,对技术技能的要求很低,而且非常直观。它还可以处理大量数据,同时连接到实时源或与其他电子表格环境通信。

由于这种多功能性,使用这个工具并使其尽可能快速高效是有意义的。当然,它并不完美,但通过首先解决硬件问题,然后更加关注数据管理和计算逻辑,只需稍加调整,它就可以变得快如闪电。

也许是有史以来最简单的对立例子介绍

原文:https://towardsdatascience.com/perhaps-the-simplest-introduction-of-adversarial-examples-ever-c0839a759b8d?source=collection_archive---------3-----------------------

在本文中,我们将理解对立例子的直觉,以及如何用 Python 创建它们。

在撰写本文的时候,我只是深入研究了这个公式,并试图根据我为上一篇文章创建的逻辑回归示例(链接)对它进行编码。

所以,我可以向你保证我的介绍很简单,非常基础。然而,这里的直觉可以扩展到更高维度和更复杂的模型,如深度学习。

一切从最简单的数据开始

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

回到我在第一篇文章中提出的简单问题,如果我们想要区分红色和蓝色类,我们可以立即知道决策边界应该在两个集群的中间,如下所示。在这种情况下,位于右上角区域的任何新数据将被分类为蓝色,位于左下角区域的数据将被分类为红色。

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

反面例子是精心设计的样本,意图让机器学习出错。如果我们不能移动紫色线,我们怎么能让紫色线出错**?**

事实证明,这一点也不难,我们只需要将样本移动到对面区域,使蓝点落在红点区域,红点落在蓝点区域。一点也不意外。

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

Epsilon 是一个控制对抗性攻击大小的小数字,为了有效但又不太明显,需要选择它。

随着ε的增加,我们可以预见到决策边界无法算出。当ε变为 0.2 时,逻辑回归模型误差从 2.9%增长到 7.6%,当ε变为 0.5 时,增长到 22.6%。

快速梯度符号法

上面图形显示的实际上是使用 FGSM。

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

本质上,FGSM 是添加方向与代价函数相对于数据的梯度相同的噪声(非随机噪声)。噪声按ε缩放,ε通常通过最大范数限制为一个小数值。在这个公式中,梯度的大小并不重要,重要的是方向(+/-)。

翻译成 Python 代码

FGSM 可以在 Python 中用几行代码实现。

在梯度下降中,成本相对于权重的梯度为(Y _ Prediction-Y _ True)X

在对立的例子中,成本相对于数据的梯度是(Y _ Prediction-Y _ True)W

这个小小的改变意味着我们可以通过用权重替换数据来回收梯度计算的代码。

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

直觉和外卖

以下是我在试图理解这个公式时问自己的问题。

直觉 1:为什么公式与成本函数的梯度有关?

增加模型误差意味着增加成本函数。

直觉二:看起来像梯度下降优化。不是吗?

梯度下降是通过获得相对于权重的梯度来更新模型的权重,从而最小化成本函数。在这种情况下,由于我们无法改变权重,为了增加成本,唯一的办法就是改变数据。

从某种意义上说,我们是在做成本函数相对于数据的梯度上升来增加成本,从而增加模型误差。

直觉 3:对立的例子有助于提高逻辑回归的质量吗?逻辑回归如何防御这种攻击?

从我的直觉来看,使用逻辑回归无法避免这种攻击。如图所示,无论你把紫色线放在哪里,误差仍然会很高,因为对立的例子使两个集群变得模糊。然而,对抗例子对于帮助非线性模型建立对这些攻击的防御是非常有用的。

完整的 python 代码可以在这个链接找到。

PS:我不是这方面的专家,但绝对是发烧友。这篇文章不是技术性的,但是我希望从最简单的案例中得到的直觉可以扩展到所有的案例。如果这个介绍有帮助,请鼓掌!

强人工智能的 24 种已知成分

原文:https://towardsdatascience.com/periodic-table-of-ai-at-the-edge-of-chaos-6666598c7d3c?source=collection_archive---------0-----------------------

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

本文汇集了有益于人工智能开发的观点和见解。

这些理论是用来构建整个智力理论的候选理论。有 24 分。结合任何 2 或 3 点,你会得到一个 AGI 发展的新方法。祝你好运。

列表里除了我混乱的视野,没有任何系统。好消息是有一个理论,一些有趣的东西只能出现在混沌的边缘

  • 艾在近。我的意思是,我们到处都有智能,能够进行必要数量的实验,以获得关于这一现象的所有信息。
  • 人工模拟环境。(例如来自 OpenAI 或任何其他模拟的宇宙。)这些世界应该使得在现实世界中引入 AI 成为可能。但是智能和所有需要进一步改进的过程的出现在那里是可能的。这里重要的部分是代理从周围的世界获取信息,这个世界必须充满不同的动态。
  • 定义。至少是最初的近似值。M. Hutter 已经做了相关的研究。累积的定义是— 智能衡量一个代理在广泛的环境中实现目标的能力
  • 图灵机就是一切,一切都是 TM 。我们的世界有史以来最大。没有一个系统在某种程度上是孤立存在的。
  • TM 的简化与转化。我认为无论是我的知识还是总体的计算机科学都存在巨大的差距。假设我们有模拟月球绕地球飞行的程序。我们如何重写它使它变得更简单?如果我们有一个程序来模拟癫痫轨道中一个点是如何围绕另一个点运动的呢?我们如何用关于物体大小的附加信息来扩展它呢?关键是我们(人类)很容易做到。
  • 概括能力。接近 TM 的简化。这个世界如此复杂,如果不进行归纳,我们就无法处理所有的数据。重用它的能力很重要。
  • 系统以这样的方式运行,某个量变成它的最小(小于:最大)可能值。热力学第二定律就是这个原理的一个基本例子。关于神经网络,反向传播代表了最小化错误率的能力。从神经网络的内部来看,反向传播看起来像基本定律。槽 vs 进化
  • solomonff 感应 。算法概率。信息距离。
  • AIXI 模型 和其实现。尽管有各种限制,我认为在某种意义上这是最接近真正的 AGI 技术的想法。
  • 优化。我们知道多少种优化?计算能力优化,即使用更有效的算法。降低内存消耗的内存优化。电源优化。更一般的优化——比如创建更好的编程语言来优化开发时间。还有很多。优化使少花钱多办事成为可能。这就是我们希望人工智能做的——用最少的干预为我们处理很多事情。
  • A 哥德尔机 采用了 Jürgen Schmidhuber 提出的递归自我改进架构。
  • 机器理解错误。这是机器的一种问题。
  • 自组织。混乱的边缘。Prigogine 的耗散系统理论解释了“从某种事物中可以产生某种完全不同的事物”。思想和法律如何从无到有?
  • 创新的演变和潜在规律。从基因编程玩具到生物进化,甚至进一步到进化的元理论。
  • 使用人类最强大的工具——类比。类比思维或同构思维同构的类比可以用于科学假说的归纳。这个想法有双重好处;在研究中使用它的能力对发明来说是至关重要的。它如何工作的理论可能对重建机器的智能至关重要。
  • 翻译。这一点值得大量的研究,但接下来的想法是:翻译的过程在所有情况下都非常相似。要么把英文文本翻译成中文,要么把一个程序的要求翻译成源代码,要么把房子的蓝图翻译成房子。另外,翻译必须是对称的。点击此处阅读更多内容:

[## 是什么让翻译成为智能的本质

你们中有多少人认识上图中的图案?是的,是斐波那契数列:

medium.com](https://medium.com/@mikecorp/what-makes-translation-the-essence-of-intelligence-4f67302bbc35)

  • 种子 AI 概念渐进学习。从我们探索和研究的第一步开始,进化就给了我们适应周围世界的能力。
  • 迁移学习是存储在解决一个问题时获得的知识,并将其应用于另一个相关问题。学而不忘与泛化思想密切相关。
  • 能够处理不完整信息。好消息, AI 已经会玩扑克了
  • 递归和自引用可能性。
  • 正式系统。人们赋予系统意义的方式。数学作为一个正式的系统,在人类的意义上有很多意义。FS 应该相对于 哥德尔的不完全性定理 来考虑。
  • AGI 出现的风险。风险考量是 AI 不可分割的一部分。
  • 深度学习作为****最有前途和最广泛发展的技术。关于它已经写了太多,但还不足以将一个强大的人工智能带到现实中。
  • ****ML 算法。他们每一个都是通用人工智能的特例。

那么,你觉得错过了什么?列表中是否提到了关键成分?

如果你觉得这篇文章有趣按下心脏分享这篇文章。****

另外,目前我正在寻找人工智能或人工智能领域的工作**。**

你可以在这里找到我:脸书页面Linkedin 页面

AB 检验样本量不够大时的排列检验

原文:https://towardsdatascience.com/permutation-tests-when-ab-testing-sample-size-is-not-big-enough-f1a7967ce729?source=collection_archive---------9-----------------------

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

在开始排列测试的本质之前,让我们回顾一下经常出现的情况。你想分析一个实验,但是你意识到你没有足够的数据来应用它。您已经开始分析,但现在意识到,就目前的结果而言,没有足够的统计功效来确定统计显著性。这是一个典型的场景,通常源于用于实现统计功效的有限样本量。

选项

  • 根据收到的数据执行计算,这不是一个好主意,因为此类数据可能会严重失真
  • 应用 bootstrap 解决问题。然而,在应用 bootstrap 来接受或否定零假设(H0)之后,唯一的选择是使用置信区间

然而,如果我们想用多个预测值来描述指标,或者从某个标准中提取统计数据,该怎么办呢?在这种情况下,引导程序不会非常有用。现在你已经准备好解释排列测试以及何时需要它们。

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

让我们假设您决定使用学生的 t-test 来计算您的 a/b 测试。你假设你的数据是正态分布的,并且方差相等(例如,你用 Bartlett 的测试证实了这一点)。接下来,您将计算 t 统计量并将其与理论分布进行比较,以此类推,从而剔除 H0。

置换测试可以使用稍微不同的方法

  1. 按照通常的方法计算 t 统计量;我们就叫它 t0 吧
  2. 例如,将所有 10 个值放在一个组中
  3. 随机将 5 个值放入 A 组,另外 5 个放入 B 组
  4. 计算新的 t 统计量
  5. 重复步骤 3 和 4 2n 次
  6. 将从 t 统计中提取的值按升序排列
  7. 如果 t0 不包括在经验分布的中间 95%的值中,那么您应该拒绝关于两个样本的平均值相等的零假设,概率为 95%

这种方法可能会让你想起贝叶斯。在 R 中,这种方法的实现是在 Coin 包中实现的,但是您也可以使用标准函数或 boot 包来实现。

排列测试是处理样本大小不足以获得足够的统计能力来确定结果的显著性的情况的一种方法。但是,你需要记住,没有任何“小技巧”可以取代样本量来实现实验的最佳功效。只有在理解了这种方法的适用性和数据的性质后,才应该应用这种方法。

最初发表于【awsmd.com】

困惑直觉(及其衍生)

原文:https://towardsdatascience.com/perplexity-intuition-and-derivation-105dd481c8f3?source=collection_archive---------1-----------------------

永远不要再被困惑所困扰。

您可能在 NLP 类中看到过类似这样的内容:

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

A slide from Dr. Luke Zettlemoyer’s NLP class

或者

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

A slide of CS 124 at Stanford (Dr. Dan Jurafsky)

在课堂上,我们真的没有花时间去推导困惑。也许困惑是一个你可能已经知道的基本概念?这篇文章是为那些不知道的人写的。

一般来说,困惑是一个概率模型如何预测样本的度量。在自然语言处理的背景下,困惑是评估语言模型的一种方式。

但是为什么 NLP 中的困惑是这样定义的呢?

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

如果你在维基百科上查找离散概率分布的困惑:

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

from https://en.wikipedia.org/wiki/Perplexity

其中 H§是分布 p(x) 的熵,而 x 是所有可能事件的随机变量。

在之前的帖子中,我们从零开始推导了 并直观地展示了**为什么熵是我们对信息进行编码所需的平均位数。**如果你不明白 ,请先阅读此⇩ 再进一步阅读。

[## 香农熵背后的直觉

【警告:太容易了!]](https://medium.com/@aerinykim/the-intuition-behind-shannons-entropy-e74820fe9800)

现在我们同意 H§=-σp(x)log p(x)。

那么,困惑只是熵的一个幂运算**!**

是的。熵是对随机变量中包含的信息进行编码的平均位数,因此熵的幂应该是所有可能信息的总量,或者更准确地说,是随机变量具有的选择的加权平均数

例如,如果测试集中的平均句子可以用 100 比特编码,则模型困惑度是每个句子 2 ⁰⁰。

让我们确认维基百科中的定义与幻灯片中的定义相匹配。

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

在哪里

p :我们要建模的概率分布*。*从 p 中抽取一个训练样本,其分布未知。

q :提出的概率模型。我们的预测。

我们可以通过测试从 p. 抽取的样本来评估我们的预测 q ,然后基本上就是计算交叉熵。在上面的推导中,我们假设所有单词在 p 中具有相同的概率(1 /单词数)。

评论

  • q(x) = 0 时,困惑度将为 。事实上,这也是 NLP 中引入平滑概念的原因之一。
  • 如果我们对 q (简单来说就是所有单词的 1/N)使用统一的概率模型,那么困惑度就等于词汇量。
  • 以上推导仅用于说明目的,以便得出 UW/斯坦福幻灯片中的公式。在这两张幻灯片中,它假设我们正在使用一个 unigram 模型计算整个语料库的困惑度,并且没有重复的单词。(它假设总单词数(N)与唯一单词数相同。)此外,它假设所有单词具有相同的概率 1/N。这些都不是现实的假设。

外卖

  • 较小的熵(或较少无序的系统)比较大的熵更有利。因为可预测的结果优于随机性。这就是为什么人们说低困惑是好的,高困惑是坏的,因为困惑是熵的幂(你可以放心地认为困惑的概念是熵)。
  • 语言模型是句子的概率分布。最好的语言模型是能够最好地预测一个未知测试集的语言模型。
  • 为什么我们要用困惑度而不是熵? 如果我们把困惑想象成一个分支因子(一个随机变量拥有的选择的加权平均数),那么这个数字比熵更容易理解。我觉得这很令人惊讶,因为我以为会有更深刻的原因。我问 Zettlemoyer 博士,除了容易理解之外,是否还有其他原因。他的回答是“我想就是这样!这在很大程度上是历史性的,因为许多其他指标也可以合理使用!”

docker 和云的持久数据

原文:https://towardsdatascience.com/persistent-data-for-docker-and-the-cloud-a395dc42f2d7?source=collection_archive---------1-----------------------

当我们谈论计算时,有两种类型的数据,非持久或临时数据,以及持久数据。

非持久性

临时数据也具有滑动标度,

  • 在线游戏中用于决策的随机数;需要,但持续时间不到一秒,
  • 用于跟踪您在网站上的登录详细信息的会话 ID;通常持续整个疗程,大约 30-45 分钟,
  • 在线商店购物篮的内容;亚马逊会保存几天,甚至几年。

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

如果丢失了其中的任何一个,也不是什么难事,新的数据可以很快被重新创建。

坚持的

持久数据旨在具有更长的生命周期,并且通常难以再生

  • 银行交易,
  • 客户关系系统(CRM)中的客户记录,
  • 你的照片上传到云存储。

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

数据存储在哪里?

这对不可变的服务器模式有明显的影响,在这种模式下,服务器的生命周期很短,部署一个服务器,当不需要它或者发生一些配置或软件更新时,部署一个新的,旧的被销毁(蓝/绿部署)。当我描述这种模式时,通常会被问及的第一个问题是,数据呢?它去哪里或从哪里来?当我使用 9–5 台服务器时,这一点尤其重要。他们在工作时间之外根本不存在。这也适用于运行在 Docker 容器中的应用程序。有三个地方可以存储这些数据。

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

  • 备份设备或存储上,如自动气象站 S3。
    这个访问速度很慢,但是非常便携和可靠。存储在这里的数据通常会被复制到可以访问的地方。当构建 web 服务器前端时,它将保存 web 应用程序的配置和静态文件。
  • 在共享数据服务器上,可由“计算”服务器在运行时访问。他们通过网络访问数据。
    这个快一点,便携,可靠。这里的问题归结为哪个服务器托管数据。你可以有一个网络文件系统(NFS)服务器,但是,你可能最终会得到一个“宠物”。我在关于宠物和牛的帖子里讨论过宠物服务器。
  • 在服务器本身,这是从备份位置恢复的,然后在服务器或群集上进行管理。
    有了这一选择,您可以快速、可靠地挑选,但不便于携带。有些应用程序会支持可移植性,但这主要是在应用程序设计层面。如果它不支持,我们必须使用第三方工具来完成。

为了说明我的意思,我们举三个例子。

wordpress 软件

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

目前部署最多的开源网站管理系统是。
这个软件作为一个单独的安装程序运行良好,但是扩展它会是一件非常痛苦的事情。最大的问题是 wordpress 将网站的数据存储在本地服务器上。如果您有多个 web 前端,它们将很快变得不同步。你为你的博客上传了一个文件,它只存储在其中一个服务器上。
Wordpress 确实有一些插件,我们可以告诉它使用 S3 作为共享数据位置,但是配置文件仍然保存在每个服务器的本地。对于这些数据,NFS 可以作为一个在线共享数据源,但是你最终可能会得到一个宠物服务器。这可以通过使用另一个 AWS 服务器弹性文件系统(EFS) 来避免。

数据库

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

数据库管理员最头疼的是输入/输出操作(IOPS)。为了从数据库获得快速响应,它读取的数据需要尽可能接近。这排除了上面详述的共享网络选项。几个数据库系统将在一个集群中工作,在节点间共享和分发数据。MySQL、MongoDB 和 CouchDB 等软件支持分布式节点之间的同步,以扩展部署,CouchDB 将此作为核心设计目标。这些系统支持添加和删除节点(支持故障和替换),同时保持数据安全和一致。然而,你会发现一些数据滞后,最终一致性。

码头工人

docker 容器之间的数据同步对于这项发展中的技术来说仍然是一个很大的问题。一些解决方案正在开发中,包括 ClusterHQ with Flocker、Portworx、Hedvig 和 StorageOS。我将在整理客户的整个应用程序堆栈时检查这些内容。我已经成功地使用了 BTSync ,它将数据保存在容器中,而不是托管卷上。这样就把数据和 Docker 主机分开了(避开另一个宠物)。

你见过哪些解决方案?有你想要我尝试的吗?请在下面的评论中告诉我。

本文原帖 在我自己的网站

性格:是机器学习模型的重要变量吗?

原文:https://towardsdatascience.com/personality-an-important-variable-for-machine-learning-models-e834e429c8b7?source=collection_archive---------17-----------------------

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

在这个机器学习的世界里,每家公司都在试图实现不同的预测模型,以了解他们的客户未来的行为。在本文中,让我们尝试关注几乎每个金融机构都面临的一个典型问题,即对违约和非违约客户进行分类,以及是否可以通过在评估程序中添加与个性相关的问题来提高准确性(是否在这里很重要)。

典型的金融机构在向客户提供贷款之前首先评估他们的客户,大多数评估问题是关于客户的主要收入和活动、他们的家庭信息、支出等。根据这些变量,这些机构建立一个模型来对他们的客户进行分类。客户分类可以通过多种方式完成,使用监督学习方法,如逻辑回归、线性判别分类、支持向量机和神经网络,或者通过 K-means 聚类,这是最常用的非监督学习技术。今天这里的主要目的不是建立一个模型,但首先重要的是要理解:为什么客户会违约?仅仅在评估过程中增加几个与性格特征相关的问题就能改变什么吗?

从机构选错客户,缺乏金融素养到不愿意还款,客户不还款,违约的原因有很多。在我看来,至少它可以提高预测能力,但最棘手的部分是应该添加什么样的问题?对于经理来说,这一部分一直是一个黑匣子,他们中的大多数人都不认为它有任何重要性。要理解这种相关性,首先应该理解理性和非理性的思维方式,一个聪明的人(理性的)永远不会把手头的现金花在不太重要的事情上,除非同一个人(完全非理性的)很容易受情绪的影响或操纵。

是的,我们都有两面性。

性格告诉我们一个人的思想、情感反应和行为,这些在不同的情况下显然是不同的,但可以用来预测一个人的诚实和正直,这在以后可能有助于改善。关键是要问正确的问题。

你的聊天机器人的个性与循环神经网络

原文:https://towardsdatascience.com/personality-for-your-chatbot-with-recurrent-neural-networks-2038f7f34636?source=collection_archive---------0-----------------------

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

Hello, how can I help you today?

之前的一篇短文中,我介绍了聊天机器人:它们目前的高人气,一些平台选项和基本的设计建议。

在这篇文章中,我将阐述我认为更有趣的场景:****基于深度学习的解决方案,用于构建聊天机器人的跑题行为和“个性”。换句话说,当遇到离题的问题时,机器人会试图仅基于预先训练的 RNN 模型,从头开始自动生成可能相关的答案。

接下来是四个自成一体的部分,所以你应该能够跳来跳去,只关注你感兴趣的部分,没有问题。

聊天机器人

聊天机器人(或对话代理)可以分解为两个独立但相互依赖的任务:理解和回答。

理解是对用户输入的语义和语用意义的解释和分配。回答是根据理解阶段获得的信息和聊天机器人的任务/目标,提供最合适的回答。

这篇文章很好地概述了回答任务的两种不同模型,并深入探讨了深度学习在聊天机器人中的应用。

对于基于检索的模型,回答过程主要包括从一组预定义的答案中进行某种查找(具有不同的复杂程度)。当前在生产环境中使用的、向客户和顾客展示或处理的聊天机器人很可能属于此类。

另一方面,基于生成的模型被期望,嗯…生成!它们通常基于基本的概率模型或机器学习模型。他们不依赖于一套固定的答案,但他们仍然需要接受训练,以产生新的内容。马尔可夫链最初用于文本生成的任务,但最近,递归神经网络(RNN)获得了更多的流行,在许多有前途的实际例子和展示之后(卡帕西的文章 )
聊天机器人的生成模型仍然属于研究部门,或者属于那些只是喜欢构建和演示他们自己的模型的测试应用的人的游戏领域。
我认为,对于大多数业务用例来说,它们仍然不适合生产环境。我无法想象如果提出一个生成模型选项,客户不会提出 Tay

RNN 模型

递归神经网络是专门用于处理序列的深度学习模型。这里,内部状态负责考虑并正确处理连续输入之间存在的依赖性(RNN速成班)。
除了相对优雅的模型之外,仅仅从展示其生成能力的许多在线演示和示例中,就不可能不被它捕获和迷住。从手写电影剧本生成

鉴于其特性,该模型确实非常适合各种 NLP 任务,并且正好在文本生成上下文中,我开始探索它,使用 TheanoTensorflow 玩基本概念,然后转移到 Keras 进行最终的模型训练。Keras 是一个高级神经网络库,可以运行在 Theano 或 Tensorflow 之上,但如果你愿意学习和玩 RNN 和机器学习模型的更基本的机制,我建议尝试一下提到的其他库,特别是如果再次遵循 Denny Britz 的伟大教程

在我的任务中,我训练了一个单词级的序列对序列模型:我向网络输入一个单词列表,并期望得到相同的输出。我没有使用普通的 RNN,而是使用了长期/短期记忆(LSTM)层,这保证了对网络记忆机制的更好控制(理解 LSTM )。最终的架构只包括两个 LSTM 层,每一层后面都有一个 dropout。
至于现在我还是依靠每个单词的一键编码,往往限制了词汇量的大小(< 10000)。强烈建议下一步是探索使用单词嵌入的选项。

我在不同的语料库上训练模型:个人对话、书籍、歌曲、随机数据集和电影字幕。最初的主要目标是纯文本生成:从零开始,生成任意长的单词序列,就像 Karpathy 的文章一样。通过我的适度设置,我仍然获得了相当好的结果,但是您可以看到这种方法在聊天机器人文本生成的相同假设下是如何不起作用的,聊天机器人最终是一个问答场景。

聊天机器人训练

问答是 NLP 研究的另一个大问题,它有自己的复杂和组件异构管道生态系统。即使只关注深度学习,也存在不同复杂程度的不同解决方案。我在这里想做的是首先用我的基线方法进行实验,看看离题问题处理的结果。

我使用了康奈尔电影对话语料库,并基于类似问答情景的两个连续互动的串联建立了一个训练数据集。每个这样的问答对最终构成了最终训练集的一个句子。在训练期间,模型获得从最后一个元素截断的句子作为输入,而期望的输出是从第一个单词截断的相同的输出。

在这样的前提下,模型并不是真的学习什么是答案,什么是问题,而是应该建立一个能够连贯地生成文本的内部表示。这或者通过从随机元素开始从头生成句子,或者简单地通过一次一个单词地继续完成种子句子(潜在问题),直到满足预定义的标准(例如,产生标点符号)。所有新生成的文本都会被保留并作为候选答案提供。

你可以在我的 Github 库中找到更多的细节和 WIP 实现。我们非常欢迎所有的批评和评论。

体系结构

与聊天机器人交互就像在脸书·梅桑格上发送消息一样简单,但完整的解决方案涉及不同的异构组件。这是当前架构的最小视图

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

Chatbot Solution Architecture

数据处理和 RNN 模型训练已经在 IBM 数据科学平台的 Spark 实例上运行。我通过 Jupyter 笔记本直接与它交互,简直太棒了!使用 Keras callbacks 系统,我在训练期间自动跟踪模特的表现,并在适当的时候备份重量。在每次训练结束时,最佳快照(模型权重)以及 Keras 模型架构和与训练语料库相关的附加数据(例如词汇索引)被持久地移动到与 Spark 实例连接的对象存储中。

第二部分是模型即服务组件;一个基本的 Flask RESTful API,通过 REST 调用公开文本生成的训练模型。每个模型是一个不同的端点,接受不同的参数用于生成任务。参数的示例有

  • 种子:用于生成任务的种子文本
  • 温度:一个方差指数,或者在预测过程中你想给模型多少“自由”
  • 句子最小长度:生成的句子可接受的最小长度

在内部,该应用程序负责从远程对象存储中检索模型并将其加载到内存中,以便当调用相应的端点时,它们准备好生成文本。

最后一个组件是一个 Java Liberty web 应用程序,它充当脸书 Messanger 平台的代理。它负责处理脸书网页挂钩和订阅,存储用户聊天记录,并实现应答任务逻辑。一方面,它依赖于我在上一篇文章中描述的系统,使用 IBM Watson 服务,如语言识别和对话,另一方面,当满足特定要求或没有提供有效答案时,它可以依赖于文本生成位,并在最方便的端点调用 Flask API。

Java 和 Python 应用程序都托管在 Bluemix 上,关于前者,我目前正在覆盖其他消息平台,如 Slack、Whatsapp 和 Telegram。

给我看看机器人!

你可以简单地通过脸书·梅桑格与聊天机器人互动,但要让你的机器人公开(任何进入其页面的人都可以使用)需要一些工作、演示视频和脸书连续的官方批准。至于现在,我必须手动添加人作为我的应用程序的测试人员,以允许他们使用它,所以如果你有兴趣,就给我留言。

尽管如此,我不得不承认,已经看到少数当前测试者的互动是一个相当有趣的经历,一个很好的娱乐、羞耻、恐惧、骄傲的情绪过山车…

让我们从一些混合的结果开始(右边是机器人的回复,左边是一些朋友的输入,很好地匿名化了)。

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

请注意,这里有混合行为:“嫁给我”响应是基于自然语言分类的,而其余的都是生成的。已经有语法错误的句子了,但与此同时,第二个答案给我留下了很好的印象,我被愚弄了,从中读出了一种有意识的无所不能的感觉。

有时回复看起来完全是随机的,但仍然建立了一个很好的互动,一个害羞、困惑和羞愧人格的模拟,也许还有点浪漫。

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

给定训练数据,它还学习了正确的标点符号,因此如果之前的输入不以标点符号结尾,它可能会以一个以标点符号开头的句子来回复。
它也能想出一些看似深奥的东西,但最终惨败,尤其是考虑到短暂的新的高预期。

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

请注意,答案之间绝不存在上下文保留,它只是没有建立在模型或系统中,只是产生这种错觉的交互流,有时会巧合地给人留下非常好的印象:

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

我知道这一切都没有突破,结果可能会让我“失望”,但毕竟,很多人对他们的“婴儿的第一句话”感到疯狂兴奋,据我所知,这远远低于我在这里设定的标准…

在观察它说话的同时,我对其背后的机制有了相当好的理解,这让一切变得更加迷人。它所能表达的一切令人感到不合理的惊讶,没有关于它被告知什么和它回复什么的实际语义知识,只有统计信号和模式……我想知道,毕竟,有多少人可能实际上以几乎相同的方式工作,只是他们的大脑中有一个更强大的借来的计算实例,他们的肩膀上有一个更长更丰富的跑步训练。

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

皮尤研究中心对人工智能和人类未来的回答

原文:https://towardsdatascience.com/pew-study-answers-on-artificial-intelligence-and-the-future-of-humans-a0f9f71bdccb?source=collection_archive---------15-----------------------

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

The AI future is uncertain, but generally, I think it will improve life.

我是皮尤研究中心昨天发布的研究报告“人工智能和人类的未来”采访的 900 多名未来学家之一这项研究是与埃隆大学合作进行的,围绕着人工智能和互联网 50 周年。

该报告提出了三个问题,以了解如果新兴的算法驱动的人工智能(AI)继续传播,人们的生活会比现在更好吗?以下是被问到的确切问题,以及我的完整回答。你还可以在报告第 92 页看到我引用的话。

皮尤/埃隆: 请勾勒出 2030 年人机/AI 协作将如何运作的愿景。请举例说明典型的人机交互在特定领域的外观和感觉,例如在工作场所、家庭生活、医疗保健环境或学习环境中。

为什么?你的希望或恐惧是什么?可以采取什么行动来确保最好的未来?

我:AI 这个词误导人。我们应该称之为趋势机器学习或算法。所谓的“弱”人工智能——今天的人工智能——减少了大多数人认为平淡无奇的重复任务。这反过来又产生了一个逃离无产阶级陷阱的机会,他们被迫从事单调的劳动来谋生。

我们不应该去想“终结者”,而应该将当前的趋势视为一个机会,去寻找和拥抱我们真正热爱的任务,包括更多的创造性追求。如果我们接受不可避免的技术进化来取代多余的任务,我们就可以鼓励今天的年轻人追求更具创造性和战略性的追求。此外,今天的工人可以学习如何管理机器学习或接受培训,以追求他们可能更喜欢的新职业。

我担心的是,许多人会简单地拒绝改变,指责技术,就像他们经常做的那样。有人可能会说,今天我们在全球经历的许多民粹主义起义都是在当前以智能制造为代表的机器学习导致的取代中找到根源的。如果是这样的话,前进的道路将会充满麻烦,充满黑暗的弯路和转弯,作为文化和国家,我们可能会后悔。

***皮尤/埃隆:***2019 年将是第一个主机对主机互联网连接 50 周年。请思考下一个 50 年。半个世纪后,互联网和数字生活将会怎样?请告诉我们您认为互联技术、平台和应用将如何融入人们的生活。你可以解决这个问题中对你重要的任何方面。

你可以考虑关注这样的问题:你希望在数字世界的平台公司中看到什么变化?你认为互联网上的应用和功能会有什么变化?数字工具将如何融入日常生活?什么将是全新的?从今天的互联网来看,什么将会发展并被认可?在这几年间,互联网工程中的哪些新规则、法律或创新会改变当今互联网的特征?

**我:**技术将成为大多数人的无缝体验。只有那些买不起技术的穷人和那些可以选择脱离技术的富人才能摆脱连接。

当我考虑当前的人工智能对话时,我经常认为有意识生物的真正进化将是人类和机器之间的混合连接。我们的存在和日常体验将通过一种增强的体验来实现,这种体验以更快的思维和更空灵的快乐为特征。

这就带来了一个问题,什么是人?由于我们大多数人将生活在一个机器增强的世界里,人类现实的前景将永远受到质疑。大多数人将只是简单地通过他们的存在而没有思考,能够用新的软件包和算法改变它,接受他们的现实作为新常态。的确,感知会变成现实。

会有一些人谴责这种向前发展的运动,并希望回到过去那种不插电的状态。2070 年的反互联网运动意义重大,但就像今天的勒德分子一样,它会发现自己是极少数。因为尽管文化影响将是巨大的,但 2070 年的互联网给世界带来了更加繁荣和便捷的生活。大多数人会选择舒适而不是独立于设备。

我们在网上经历的不和谐,比如 Twitter 上的争吵和标签之争,也会变得不那么明显。我想关掉噪音会容易得多。当然,这意味着越来越多孤立的人群,反过来,他们可能会对生活产生奇怪的、有时甚至是有害的看法和态度。这可能是新互联网的最大危险,发展暴力和破坏性生活方式的微型邪教的能力。

那些完全拥护这场运动的人将继续在技术上进步,也许是盲目的。他们将带领我们走向新的维度。人类的灵魂何时能够超越肉体,进入机器或真正的虚拟体验?对我来说,这是未来互联网的真正问题。

PEW/ELON: 解释你对上一个问题的回答,并描述你所看到的未来 50 年数字生活的变化影响个人的方式。

我:总的来说,我认为人们在生活中会更快乐。他们会不那么讨厌自己的工作,因为他们会做自己喜欢的事情。他们会因为没有工作而更能追求真正的兴趣。饥饿和住所将更容易解决,因为我们将利用技术更好地解决这些挑战。

相反,疼痛将成为一个存在的问题,而不是马斯洛对生理需求和安全的追求。这并不是说贫困和冲突将不复存在,但我确实相信气候变化代表着世界文化将面临的最大的物理危险。

战争将会因为谁能以庇护所和食物的形式获得安全而爆发。那些输掉战争的人将不会拥有技术。我最大的希望是[富人]会明白,如果少一些痛苦,对每个人都更好。也许会提供一个基本的技术水平和生理安全水平的等级支持。

从长远来看,由银行账户决定输赢的零和游戏对全球没有帮助。在未来,贪婪是最大的危险。因为贪婪只能在科技力量中表现出来。强迫他人陷入技术贫困将成为一种残忍的行为。

精选图片由作者本人原创。

天气数据、绘图和代码

原文:https://towardsdatascience.com/pgh-weather-data-plot-and-code-19d8e8b670f?source=collection_archive---------3-----------------------

改编自 Austin Wehrwein 的博客文章和 Claus O. Wilke 的 Cran page 。地下气象站的数据。

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

生成如上图的 R 代码可以在 Austin Wehrwein 的博客和这个 Cran page 上找到,但是我也把它包含在下面,做了一些小的修改和如何从 Weather Underground 检索你自己的数据的细节。

数据:

在这个 Weather Underground 页面上选择地区和自定义时间段。将表格数据复制/粘贴到 Excel 中(可能需要删除额外的列标题)。按照格式“%d-%b-%y”或“2016 年 1 月 1 日”重新标记日期。重新标记列标题。另存为 CSV。

注:你可以尝试用这个教程直接从 R 抓取,但是吴最近改了他们的 URL 方案,所以这个技术可能不行。

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

Your data should look something like this. Mean Temp (Col C) is what I plotted, but pretty much any numeric variable can be used.

图书馆:

library(viridis)     ## color palette
library(ggjoy)       ## ridges
library(hrbrthemes)  ## plot theme

导入和次要数据清理:

pgh_weather <- read.csv("weather_data.csv") ## setwd() to your own
months <- c("December","November","October","September","August","July","June","May","April","March","February","January") ## need this string vector for sorting laterpgh_weather$months <- as.Date(pgh_weather$CST, format = "%d-%b-%y") %>%
  months() %>%
  as.factor() %>%
  factor(., levels = months)#scales
mins <- min(pgh_weather$Min.TemperatureF)
maxs <- max(pgh_weather$Max.TemperatureF)

情节:

## black and white
ggplot(pgh_weather,aes(x = Mean.TemperatureF,y=months,height=..density..))+
  geom_joy(scale=3) +
  scale_x_continuous(limits = c(mins,maxs))+
  theme_ipsum(grid=F)+
  theme(axis.title.y=element_blank(),
        axis.ticks.y=element_blank(),
        strip.text.y = element_text(angle = 180, hjust = 1))+
  labs(title='Temperatures in Pittsburgh',
       subtitle='Median temperatures (Fahrenheit) by month for 2016\nData: Original CSV from the Weather Underground', x = "Mean Tempterature [ºF]")## in color
ggplot(pgh_weather, aes(x = `Mean.TemperatureF`, y = `months`, fill = ..x..)) +
  geom_density_ridges_gradient(scale = 3, rel_min_height = 0.01, gradient_lwd = 1.) +
  scale_x_continuous(expand = c(0.01, 0)) +
  scale_y_discrete(expand = c(0.01, 0)) +
  scale_fill_viridis(name = "Temp. [ºF]", option = "C") +
  labs(title = 'Temperatures in Pittsburgh',
       subtitle = 'Mean temperatures (Fahrenheit) by month for 2016\nData: Original CSV from the Weather Underground', 
       x = "Mean Temperature") +
  theme_ridges(font_size = 13, grid = TRUE) + theme(axis.title.y = element_blank())

后续步骤:

下载年度数据,用 GIF 或褪色的脊线追踪上升的温度。

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

使用 ML 检测网络钓鱼 URL

原文:https://towardsdatascience.com/phishing-domain-detection-with-ml-5be9c99293e5?source=collection_archive---------0-----------------------

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

网络钓鱼是一种欺诈形式,在这种形式中,攻击者试图通过在电子邮件或其他通信渠道中以信誉良好的实体或个人的身份发送来获取登录凭据或帐户信息等敏感信息。

通常,受害者会收到一封看似由已知联系人或组织发送的邮件。该邮件包含针对用户计算机的恶意软件,或者具有将受害者引向恶意网站的链接,以欺骗他们泄露个人和财务信息,如密码、帐户 id 或信用卡详细信息。

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

网络钓鱼在攻击者中很流行,因为欺骗某人点击看似合法的恶意链接比试图突破计算机的防御系统更容易。邮件正文中的恶意链接旨在使邮件看起来像是发送到了使用该组织徽标和其他合法内容的欺骗组织。

在这篇文章中,我解释了:网络钓鱼域(或欺诈性域)的特征,区分它们与合法域的特征,为什么检测这些域很重要,以及如何使用机器学习和自然语言处理技术来检测它们。

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

许多用户每天每小时都在不知不觉中点击钓鱼域名。攻击者的目标是用户和公司。根据 2014 年 2 月发布的第三份 Microsoft Computing Safer Index 报告,网络钓鱼每年在全球造成的影响可能高达 50 亿美元。

这个成本的原因是什么?

主要原因是用户的认知度不够。但安全卫士必须采取预防措施,防止用户面对这些有害的网站。要防止这些巨大的成本,除了建立强大的安全机制,能够检测和防止网络钓鱼域到达用户之外,还可以从提高人们的意识开始。

网络钓鱼域的特征

让我们检查 URL 结构,以便清楚地了解攻击者在创建网络钓鱼域时是如何思考的。

统一资源定位符(URL)是为处理网页而创建的。下图显示了典型 URL 结构中的相关部分。

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

它从用于访问页面的协议开始。完全限定的域名标识托管网页的服务器。它由一个注册域名(二级域名)和我们称之为顶级域名(TLD)的后缀组成。域名部分受到限制,因为它必须向域名注册机构注册。主机名由子域名和域名组成。网络钓鱼者可以完全控制子域部分,并可以设置任何值。URL 还可能包含路径和文件组成部分,这些内容也可能被网络钓鱼者随意更改。域名和路径完全可以被网络钓鱼者控制。在本文的其余部分,我们使用术语 FreeURL 来指代 URL 的这些部分。

攻击者可以注册任何以前没有注册过的域名。URL 的这一部分只能设置一次。网络钓鱼者可以随时更改 FreeURL 来创建新的 URL。安全卫士努力检测钓鱼域名的原因是因为网站域名的独特部分(免费网址)。当一个域被检测为欺诈性时,很容易在用户访问它之前阻止该域。

一些威胁情报公司检测并发布欺诈性网页或 IP 作为黑名单,从而防止其他人获得这些有害资产变得越来越容易。( cymonfireho l)

攻击者必须明智地选择域名,因为目标应该是说服用户,然后设置 FreeURL 使检测变得困难。让我们分析下面给出的一个例子。

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

虽然真正的域名是 active-userid.com,但攻击者试图通过添加 FreeURL 使该域名看起来像 paypal.com。当用户在 URL 的开头看到 paypal.com 时,他们可以信任该网站并连接它,然后可以将他们的敏感信息分享给这个欺诈网站。这是攻击者经常使用的方法。

攻击者经常使用的其他方法是域名抢注和域名抢注。

域名抢注(也称为域名抢注)是指恶意注册、买卖或使用域名,意图从属于他人的商标商誉中获利。域名抢注者可能会以高价向拥有域名中所含商标的个人或公司出售该域名,或将其用于欺诈目的,如网络钓鱼。例如,你的公司名称是“ABC 公司”,你注册为 abcompany.com。然后,网络钓鱼者可以注册 abcompany.biz,abcompany.biz,abcompany.biz,他们可以使用它进行欺诈。

域名抢注,也称为 URL 劫持,是域名抢注的一种形式,它依赖于互联网用户在网络浏览器中输入网站地址时出现的打字错误或快速阅读时很难注意到的打字错误。用域名仿冒创建的 URL 看起来像一个受信任的域。用户可能会意外输入错误的网站地址或单击看似可信域的链接,这样,他们可能会访问网络钓鱼者拥有的替代网站。

域名仿冒的一个著名例子是goggle.com,一个极其危险的网站。另一个类似的东西是 yutube.com 的**,它类似于 goggle.com,除了它的目标是 Youtube 用户。类似地,被错别字为将用户引向一个兜售打折旅游的网站。其他一些例子;paywpal.commicroroft.comapplle.comappie.com**

用于网络钓鱼域检测的功能

在学术文献和商业产品中,有许多用于网络钓鱼检测的算法和各种各样的数据类型。网络钓鱼 URL 和相应的页面有几个可以与恶意 URL 区分开来的特征。比如说;攻击者可以注册长而混乱的域名来隐藏实际的域名 ( 域名抢注,域名抢注)。在某些情况下,攻击者可以使用直接 IP 地址,而不是使用域名。这种类型的事件超出了我们的范围,但是它可以用于相同的目的。攻击者还可以使用与合法品牌名称无关的短域名,并且没有任何免费网址。但是这些类型的网站也不在我们的讨论范围之内,因为它们与欺诈性域而不是网络钓鱼域更相关。

除了基于 URL 的特征之外,还使用了在学术研究的检测过程中的机器学习算法中使用的不同种类的特征。从学术研究中收集的使用机器学习技术进行网络钓鱼域检测的特征分组如下。

  1. 基于 URL 的功能
  2. 基于领域的功能
  3. 基于页面的功能
  4. 基于内容的功能

基于 URL 的功能

URL 是分析一个网站以确定它是否是网络钓鱼的第一件事。正如我们之前提到的,钓鱼网站的网址有一些独特之处。当处理 URL 时,获得与这些点相关的特征。下面给出了一些基于 URL 的功能。

  • URL 中的位数
  • URL 的总长度
  • 正在检查 URL 是否被仿冒。(google.com→goggle.com)
  • 检查它是否包括一个合法的品牌名称(apple-icloud-login.com)
  • URL 中的子域数量
  • 顶级域名(TLD)是常用的域名之一吗?

基于领域的功能

网络钓鱼域名检测的目的是检测网络钓鱼域名。因此,与域名相关的被动查询,我们希望将其归类为网络钓鱼或不钓鱼,为我们提供了有用的信息。下面给出了一些有用的基于域的特性。

  • 其域名或其 IP 地址在知名信誉服务黑名单中?
  • 自域名注册以来已经过去了多少天?
  • 注册人姓名是否隐藏?

基于页面的功能

基于页面的特征使用关于计算的信誉等级服务的页面的信息。这些特征中的一些给出了关于一个网站有多可靠的信息。下面给出了一些基于页面的特性。

  • 全球页面排名
  • 国家网页排名
  • 在 Alexa 前 100 万网站的位置

一些基于页面的功能为我们提供了目标网站上用户活动的信息。下面给出了其中的一些特征。获得这些类型的特征并不容易。有一些付费服务可以获得这些类型的功能。

  • 估计每天、每周或每月访问该域的次数
  • 每次访问的平均浏览量
  • 平均就诊时间
  • 每个国家的网络流量份额
  • 从社交网络到给定域的引用计数
  • 领域的类别
  • 类似的网站等。

基于内容的功能

获取这些类型的特征需要主动扫描目标域。我们会对页面内容进行处理,以检测目标域是否用于网络钓鱼。下面给出了一些关于页面的已处理信息。

  • 页面标题
  • 元标签
  • 隐藏文本
  • 正文中的文本
  • 图像等。

通过分析这些信息,我们可以收集如下信息:

  • 需要登录网站吗
  • 网站类别
  • 关于观众简介等信息。

上面解释的所有特征对于网络钓鱼域检测都是有用的。在某些情况下,使用其中一些功能可能没有用,因此使用这些功能有一些限制。例如,将某些功能(如基于内容的功能)用于正在开发的快速检测机制可能是不合理的,该机制能够分析 100,000 到 200,000 之间的域名数量。另一个例子是,如果我们要分析新注册的域名,基于网页的功能不是很有用。因此,检测机制将使用的特征取决于检测机制的目的。应该仔细选择在检测机制中使用哪些特征。

检波过程

检测网络钓鱼域是一个分类问题,因此这意味着我们需要在训练阶段将样本作为网络钓鱼域和合法域的标记数据。将在训练阶段使用的数据集是建立成功的检测机制的非常重要的点。我们必须使用类别确切已知的样本。因此,这意味着,被标记为网络钓鱼的样本必须绝对被检测为网络钓鱼。同样,被标记为合法的样本必须被绝对检测为合法。否则,如果我们使用不确定的样本,系统将无法正常工作。

为此,一些公共数据集被创建用于网络钓鱼。其中比较知名的是 PhishTank 。这些数据源通常用于学术研究。

收集合法域名是另一个问题。为此,通常使用站点信誉服务。这些服务对现有网站进行分析和排名。这种排名可以是全球性的,也可以是基于国家的。排名机制取决于各种各样的功能。排名分数高的网站是经常使用的合法网站。其中一个知名的信誉排名服务是 Alexa 。研究人员正在使用合法网站 Alexa 的顶级列表。

当我们有网络钓鱼和合法网站的原始数据时,下一步应该是处理这些数据并从中提取有意义的信息,以检测欺诈性的域。用于机器学习的数据集实际上必须包含这些特征。因此,我们必须处理从 Alexa、Phishtank 或其他数据资源收集的原始数据,并创建一个新的数据集来用机器学习算法训练我们的系统。特征值应该根据我们的需要和目的来选择,并且应该为每一个特征值进行计算。

机器学习算法有很多,每种算法都有自己的工作机制。在本文中,我们解释了 决策树算法 ,因为我认为,这个算法是一个简单而强大的算法。

最初,正如我们上面提到的,钓鱼域名是分类问题之一。因此,这意味着我们需要标记实例来建立检测机制。在这个问题中,我们有两个类别: (1) 网络钓鱼和 (2) 合法。

当我们计算选择了我们的需求和目的的特征时,我们的数据集如下图所示。在我们的例子中,我们选择了 12 个特征,并对它们进行了计算。因此,我们生成了一个数据集,该数据集将用于机器学习算法的训练阶段。

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

决策树可以被认为是一种改进的嵌套式 if-else 结构。每个特征将被逐一检查。下面给出了一个示例树模型。

生成树是检测机制的主要结构。黄色和椭圆形代表特征,这些被称为节点。绿色和有角的代表类,这些被称为叶子。当一个示例到达时,检查长度,然后根据结果检查其他特征。当样品的旅程完成时,样品所属的类别将变得清楚。

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

**现在,关于决策树最重要的问题还没有答案。问题是,**将作为根定位哪个特性?哪些必须跟在根后面?智能选择特征直接影响算法的效率和成功率。

那么,决策树算法是如何选择特征的呢?

决策树使用信息增益度量,该度量指示给定特征根据训练样本的目标分类来分离训练样本的程度。方法的名字叫信息增益**。下面给出了信息增益方法的数学方程。**

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

高增益分数意味着该特征具有高区分能力。因此,具有最大增益分数的特征被选为根。是信息论中的一种统计度量,它描述了任意样本集合的(不)纯度。熵的数学方程如下所示。

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

原始熵是一个常数,相对熵是可变的。低相对熵值意味着高纯度,同样高相对熵值意味着低纯度。当我们沿着树向下移动时,我们希望增加纯度,因为叶子上的高纯度意味着高成功率。

在训练阶段,通过比较特征值将数据集分成两部分。在我们的例子中,我们有 14 个样本。“+”符号代表网络钓鱼类别,而“-”符号代表合法类别。我们根据长度特征将这些样本分成两部分。其中七个在右边,另外七个在左边。如下图所示,树的右边部分具有高纯度,因此它意味着低熵值(E),同样树的左边部分具有低纯度和高熵值(E)。所有的计算都是根据上面给出的方程进行的。关于长度特征的信息增益得分为 0,151。

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

决策树算法为每个特征计算该信息,并选择具有最大增益分数的特征。为了增长树,叶子被改变为代表特征的节点。随着树往下长,所有的叶子都会有很高的纯度。当树足够大时,训练过程就完成了。

通过选择最显著的特征而创建的树代表了我们的检测机制的模型结构。创建成功率高的机制依赖于训练数据集。为了系统成功的一般化,训练集必须由取自各种数据源的各种各样的样本组成。否则,我们的系统可能在我们的数据集上以高成功率工作,但是它不能在真实世界的数据上成功工作。

Photoshop 2.0

原文:https://towardsdatascience.com/photoshop-2-0-a49990e483?source=collection_archive---------5-----------------------

如果说软件 2.0 是深度学习,Photoshop 2.0 就是 GAN

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

Photoshop 1.0 是什么?

我们可以使用 Photoshop 来“改变”图像,比如照片、下载的图标或扫描的艺术品。改变图像包括做一些事情,比如改变图像内的颜色修改图像的尺寸比例,或者将一张图片“放入”另一张图片。

需要多少时间?那**完美呢?**你还是设法做到了。那很好。

甘家擅长什么?甘是如何有所作为的?

生成性对抗网络擅长将图像从一个领域翻译到另一个领域。

比如:从用户草图生成猫。

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

我们所有人都不擅长编辑照片。但有时我们必须自己去做。假设你想改变头发的颜色或者尝试不同的发型,该怎么做呢?如果你不熟悉这些工具,就很难把图像转换成你想要的样子。

GANs 可以将你的草图转换成逼真的图像。

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

Semantic label Map

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

Real Image

生成器可以将语义标签图翻译成逼真的图像,而鉴别器 D 旨在将真实图像与翻译后的图像区分开来。

pix2pix 架构

pix2pix 方法是一个条件 GAN 框架,用于在给定输入语义标签图的情况下对真实图像的条件分布进行建模。

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

Conditional GANs

条件 GAN是 GAN 框架的扩展。这里我们有条件信息 Y,它描述了数据的某些方面。例如,如果我们在处理人脸,Y 可以描述头发颜色或性别等属性。

当生成高分辨率图像时,结果不令人满意。所以为了提高的真实感的分辨率,开发了一种新的架构。

开发了一个粗到精生成器、一个多尺度鉴别器架构和一个鲁棒的对抗学习目标函数

粗到精发生器

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

Network architecture of the generator.

生成器由全局生成器网络(G1)局部增强器网络(G2)组成。

全局生成器(G1) 从语义图中提取降采样输入,并生成低分辨率输出。局部增强器(G2) 组合来自生成器和原始标签图的特征图,以产生最终输出。

为了以更高的分辨率合成图像,可以使用附加的局部增强器网络

生成器 G={G1,G2},输出图像分辨率 =2048×1024

生成器 G={G1,G2,G3},输出图像分辨率 =4096×2048

在训练过程中,我们首先训练全局生成器,然后按照分辨率的顺序训练局部增强器。然后我们一起微调所有的网络。

多刻度鉴别器

多尺度鉴别器由 3 个鉴别器(D1,D2,D3) 组成,它们具有相同的网络结构,但在不同的图像尺度下工作。

他们接受过训练,能够以 3 种不同的比例区分真实图像和合成图像。

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

在最粗尺度下工作的鉴别器具有最大的感受野。另一方面,以最精细的尺度操作的那个引导生成器产生更精细的细节。

对抗性学习目标函数

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

基于鉴别器的特征匹配损失是不可行的。从鉴别器的多个层提取特征,并学习匹配来自真实和合成图像的这些中间表示。

学习实例级特征嵌入

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

添加低维特征通道作为生成器的输入,可以产生多样的图像,并允许实例级控制

训练一个编码器网络来为地面真实图像中的每个对象实例找到低维特征向量。然后,我们将这些特征与标签图连接起来,生成最终的图像。我们可以通过操作不同的特征来产生不同的输出。

结果

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

Semantic labels → Cityscapes street views

参考

https://tcwang0509.github.io/pix2pixHD/

使用 Jupyter 笔记本进行物理计算

原文:https://towardsdatascience.com/physical-computing-using-jupyter-notebook-fb9e83e16760?source=collection_archive---------5-----------------------

了解如何在树莓 Pi 上安装 Jupyter Notebook,并直接在上面读取传感器并对执行器进行操作。

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

我们都知道 Jupyter Notebook 是一个非常棒的工具,或者更好,是一个开源的 web 应用程序,它允许您创建和共享包含实时代码、等式、可视化和叙述性文本的文档。

Jupyter 笔记本很大程度上用于数据科学,清理和转换数据,做数值模拟,统计建模,数据可视化,机器学习,等等!

但是,用 Jupyter 笔记本控制树莓 Pi GPIOs 怎么样?

这就是我们在本教程中要做的。我们将学习如何在树莓 Pi 上安装 Jupyter Notebook,并直接在其上读取传感器并对执行器进行操作。

1.介绍

这张图表给我们提供了该项目的概况:

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

这部电影可以给你一个提示,当 Pi 遇到 Jupyter 时可能会得到什么!

2.硬件

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

材料清单

  • 树莓 Pi V3
  • DHT22 温度和相对湿度传感器
  • DS18B20 防水温度传感器
  • BMP180 气压、温度和海拔传感器
  • LEDS (3x)
  • 按钮(1x)
  • 电阻器 4K7 欧姆(2x)
  • 电阻器 1K 欧姆(1x)
  • 电阻器 330 欧姆(3x)
  • 原型板和电缆

电气图

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

让我们按照上面的电路图,将所有 3 个传感器、按钮和 led 连接到 Raspberry Pi。

本项目中使用的传感器与我的教程中使用的传感器相同:

带 RPi 和 ESP8266 的物联网气象站

我建议您看一下那个教程,在那里我一个一个地解释了如何安装传感器和它们的库,在运行完整的程序之前单独测试它们。

3.安装 Jupyter

要在您的 Raspberry 上安装 Jupyter(将与 Python 3 一起运行),请打开终端并输入以下命令:

sudo pip3 install jupytersudo ipython3 kernelspec install-self

现在,在您的终端上,运行命令:

jupyter notebook

就是这样!!!!太神奇了!非常简单容易。Jupyter 笔记本将作为服务器运行在:

http:localhost:8888

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

但是,这对你来说并不重要,因为,你的默认浏览器会自动在那个地址打开,运行一个“主页”。

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

要停止服务器并关闭“内核”(Jupyter 笔记本),您必须使用键盘上的[Ctrl] + [C]。

从现在开始,任何时候你启动你的 Pi 并想使用 Jupyter 笔记本,只需在你的终端上键入命令“Jupyter 笔记本”并让**让它一直运行。**这很重要!如果您需要使用终端执行其他任务,例如运行程序,请打开一个新的终端窗口。

4.在 Jupyter 笔记本上运行 Python 脚本

我们假设你熟悉 Jupyter 笔记本。它将在您的 Pi 上工作,就像在您的桌面上工作一样。

网上有“大量”好的 Jupyter 笔记本教程,只要浏览一下,你肯定会找到一个更适合你的。

让我们玩一个我已经为本教程创建的笔记本。

从我的 GitHub 下载:气象站传感器—执行器

将笔记本保存在您的树莓 Pi 上。在我的情况下,我把它保存在我的主目录中(见上面的主页打印屏幕)。观察我主目录中现有的 4 个笔记本(笔记本有一个“小笔记本”图标)。只要点击它。笔记本将被加载,显示如上图所示。如果你再次看到主页,你会意识到“笔记本图标”现在是“绿色”,这意味着它正在运行。

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

此外,请注意,在我的笔记本电脑的第一个单元有一张硬件的图片。为了让图片正确显示,你必须将它放在同一个目录中(这是我的情况),或者如果你使用另一个目录来存储图片,则改变它在笔记本上的路径。

您可以在笔记本电脑上直接输入 Unix 命令,就像在终端上一样

例如,该命令:

ls

将列出笔记本运行的当前目录中的所有文件,如下所示:

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

5.初始化(1):在 Jupyter 笔记本上创建 Python 脚本并导入库

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

因此,我们的想法是以您习惯使用 Python IDE 的相同方式(和顺序)开始编写脚本。

我将把我的笔记本分成 3 个阶段,我们将这样做:

  1. 初始化
  • 导入库
  • 定义 GPIOs
  • 初始化 GPIOs
  • 创建重要功能

2.读数传感器

3.读取和操作 GPIOs(按钮和 led)

请注意,通常情况下,您只需运行一次初始化阶段。之后,您可以使用您的传感器和 GPIOs,只运行为阶段 2 和 3 创建的相关单元,如本例所示。

为了更好地理解第一阶段,您可以跟随介绍电影。

6.初始化(2):定义和初始化 GPIOs

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

7.初始化(3):显示数据的函数

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

8.初始化(4):处理传感器的功能

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

9.初始化(5):用于处理 GPIOs 的函数

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

10.获取传感器数据并使用 GPIOs 进行处理

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

运行单元[11]您将获得所有传感器数据:

Widgets

在这里,重要的是要引起对“小部件”的注意。

小部件是多事件的 python 对象,在浏览器中有一个表示,通常是像滑块、文本框等控件。您可以使用小部件为您的笔记本构建交互式 GUI。您还可以使用小部件在 Python 和 JavaScript 之间同步有状态和无状态信息。

在本例中,我们使用小工具(“滑块”)来控制单元[12],实时控制致动器的状态,在本例中,打开或关闭 led。小工具可以为 Jupyter 笔记本电脑添加更多动态行为。

正如你所看到的,在代码中,我们必须在任何时候运行单元[11]来更新传感器的值,但是当然,这里也可以实现一个小部件来自动完成,或者通过按下一个按钮来完成。我会把它作为对你的挑战!;-)

安装

为了使用小部件,您必须安装 Ipywidgets 库。对于以下命令使用:

sudo pip3 install ipywidgets
jupyter nbextension enable --py widgetsnbextension

安装后,只调用 Jupyter 笔记本上的库。

请注意,我们已经在初始化阶段完成了这项工作:

# widget library
from ipywidgets import interactive
import ipywidgets as widgets
from IPython.display import display

这个小部件“交互式”易于实现,而且功能非常强大。点击此链接可以了解更多关于互动的内容:互动小工具

11.数据科学、机器学习、物理计算、计算机视觉、物联网和……未来!

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

我正在这个迷人的技术世界开始新的旅程。我们今天看到的一切都与数据相关,更好地了解这些数据是帮助人们的相关项目的关键。你会在这里和我的博客 MJRoBot.org上看到越来越多的教程,其中数据科学与物理计算、计算机视觉、机器学习和物联网相结合。

作为一个例子,我使用了以前的物联网项目的数据,ArduFarmBot:

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

使用在物联网平台上记录的数据,ThingSpeak 和 appliyng 机器学习这些数据,可以预测(事实上确认)灯和泵应该何时打开。

结果很惊人!!!!!!

可以在我的 GitHub 上看到 Jupyter 笔记本和最终报告:ArduFarmBot _ Data _ Analysis

就这些了,伙计们!;-)

12.结论

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

一如既往,我希望这个项目可以帮助其他人找到进入令人兴奋的电子世界的方法!

详情和最终代码请访问我的 GitHub 仓库: Pyhon4DS/RaspberryPi

更多项目,请访问我的博客:MJRoBot.org

敬请期待!下一个教程我们将基于 Raspberry Pi Flask Web 服务器将数据从远程气象站发送到中心气象站:

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

来自世界南部的 Saludos!

下节课再见!

谢谢你,

马塞洛

物理引导的神经网络

原文:https://towardsdatascience.com/physics-guided-neural-networks-pgnns-8fe9dbad9414?source=collection_archive---------5-----------------------

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

Talking some sense into gradient descent.

基于物理的模型是当今科技的核心。近年来,数据驱动模型开始提供一种替代方法,并在许多任务中胜过物理驱动模型。即便如此,他们也渴望数据,他们的推论可能很难解释,归纳仍然是一个挑战。结合数据和物理可以揭示两个世界的精华。

当机器学习算法在学习时,它们实际上是在你选择的算法、架构和配置所定义的假设空间中搜索解决方案。即使对于相当简单的算法,假设空间也可能相当大。数据是我们在这个巨大的空间中寻找解决方案的唯一指南。如果我们可以利用我们对世界的了解——例如,物理学——以及数据来指导这种搜索,会怎么样呢?

这就是 Karpatne 等人在他们的论文中解释的物理引导神经网络(PGNN):在湖泊温度建模 *中的应用。*在这篇文章中,我将解释为什么这个想法至关重要,我还将通过总结这篇文章来描述他们是如何做到的。

想象一下你把你的外星人👽朋友(优化算法)到一家超市(假设空间)去买你喜欢的奶酪(解)。她唯一的线索就是你给她的奶酪的照片(数据)。由于她缺乏我们对超市的先入之见,她将很难找到奶酪。她可能会在到达食品区之前逛逛化妆品和清洁用品。

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

Finally reached the food section (courtesy of Dominic L. Garcia).

这类似于梯度下降等机器学习优化算法寻找假设的方式。数据是唯一的指南。理想情况下,这应该工作得很好,但大多数时候数据是嘈杂的或不够的。将我们的知识整合到优化算法中——在食品区搜索奶酪,甚至不要看化妆品——可以缓解这些挑战。接下来让我们看看,我们实际上是如何做到这一点的。

如何用物理学指导一个 ML 算法

现在,让我总结一下作者如何利用物理学来指导机器学习模型。他们为此提出了两种方法:(1)使用物理理论,他们计算额外的特征(特征工程)以与测量值一起输入到模型中,以及(2)他们将物理不一致项添加到损失函数中,以便惩罚物理不一致的预测。

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

(1) Feature engineering using a physics-based model

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

(2) Data + Physics driven loss function

第一种方法是特征工程,广泛用于机器学习。然而,第二种方法令人信服。非常类似于添加一个正则项来惩罚过度拟合,他们在损失函数中添加了一个物理不一致性项。因此,有了这个新术语,优化算法还应该注意最小化物理上不一致的结果。

在论文中,Karpatne 等人将这两种方法与神经网络相结合,并展示了一种他们称为物理导向神经网络(PGNN)的算法。PGNNs 可以提供两个主要优势:

  • 实现泛化 是机器学习中的一个根本性挑战。由于物理模型大多不依赖于数据,它们可能在看不见的数据上表现良好,即使来自不同的分布。
  • 机器学习模型有时被称为黑盒模型,因为并不总是清楚模型如何达成特定决策。有相当多的工作进入 可解释的 AI (XAI) 来提高模型的可解释性。PGNNs 可以为 XAI 提供一个基础,因为它们提供了物理上一致和可解释的结果。

应用示例:湖泊温度建模

文中以湖泊温度建模为例,验证了 PGNN 的有效性。水温控制着湖中生物物种的生长、存活和繁殖。因此,对温度的准确观察和预测对于理解社区中发生的变化是至关重要的。任务是开发一个模型,可以预测给定湖泊的水温,作为深度和时间的函数。现在让我们看看他们是如何应用(1)特征工程和(2)损失函数修正来解决这个问题的。

(1)对于特征工程,他们使用了一种称为 通用湖模型(GLM) 的模型来生成新的特征并将它们输入到神经网络中。这是一个基于物理学的模型,它捕捉了湖泊温度动态的控制过程(太阳加热、蒸发等。).

(2)现在让我们看看他们是如何定义这个物理不一致性术语的。众所周知,密度较大的水下沉。水温与其密度之间的关系也是已知的。因此,预测应该遵循这样的事实:点越深,预测的密度越高。如果对于一对点,模型预测离表面越近的点密度越高,这是物理上不一致的预测。

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

现在有可能将这一想法纳入损失函数。如果ρA> ρB,我们就惩罚它,否则什么也不做。而且,对于较大的不一致,处罚力度应该更高。这可以很容易地通过将函数 max( ρA- ρB,0) 的值加到损失函数上来实现。如果ρA > ρB(即不一致),该函数将给出一个正值,该正值将增加损失函数(我们试图最小化的函数)的值,否则将给出零,保持损失函数不变。

此时,为了正确使用该函数,需要对其进行两处修改。重要的是所有对的平均不一致性,而不是一个对。因此,可以对所有点的 max( ρA- ρB,0) 求和,然后除以点数。此外,控制最小化物理不一致性的相对重要性也很关键。这可以通过将平均物理不一致性乘以超参数(类似于正则化参数)来实现。

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

Physical inconsistency term of the loss function

结果

以下是 4 个模型的结果。它们是:

  • PHY: 将军湖模型(GLM)。
  • NN: 一个神经网络。
  • PGNN0: 具有特征工程的神经网络。GLM 的结果作为附加特征输入到神经网络中。
  • PGNN: 具有特征工程和修改的损失函数的 NN。

和两个评估指标:

  • RMSE: 均方根误差。
  • **物理不一致:**模型做出物理不一致预测的时间步长的分数。

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

Results on Lake Mille Lacs

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

Results on Lake Mendota

将神经网络与 PHY 进行比较,我们可以得出结论,神经网络以物理上不一致的结果为代价给出了更精确的预测。比较 PGNN0 和 PGNN,我们可以看到,由于修改的损失函数,物理不一致性被消除。精度的提高主要是由于特征工程以及损失函数的一些贡献。

总而言之,这些初步结果向我们表明,这种新型算法 PGNN 非常有希望提供准确且物理上一致的结果。此外,将我们对世界的知识结合到损失函数中提供了一种改善机器学习模型的泛化性能的优雅方式。这个看似简单的想法有可能从根本上改善我们进行机器学习和科学研究的方式。

你可以在推特上找到我 @malicannoyan

延伸阅读
理论指导下的数据科学:从数据中进行科学发现的新范式

物理学通知深度学习(上):非线性偏微分方程的数据驱动解

物理、脚趾和机器学习

原文:https://towardsdatascience.com/physics-toes-and-machine-learning-ad3ba2d5d7d8?source=collection_archive---------3-----------------------

我很早就对机器学习、物理和生命(生物学)之间的联系感兴趣。例如,我一直想知道一个人是否可以把进化理解为一个学习过程(把它想象成"超个体学习适应"),或者像莱斯利·瓦里安在他的可进化性理论中建议的那样:【自然进化可以被理解为 PAC 可学习性的一个受限情况。

同样,我经常思考,我们对物理学中“优雅”理论的追求(包括一个脚趾)是否应该受到我们在理论模型选择中研究的同样强烈的适应性-简单性张力的影响,例如在贝叶斯机器学习中,正如我的问题希望说明的那样。

关于这个话题,我最近在通勤途中阅读了马克斯·泰格马克的《我们的数学世界》。这引发了我对数学宇宙假说的兴趣。一句话,这个假设很大程度上说明了所有可计算的数学结构都是存在的。这是一个强有力的断言,但我真的很喜欢这本书,并强烈推荐给任何对计算机科学和物理有广泛兴趣的人。

今天,我看到了下面的摘录。这是相信 Max 所说的终极系综 的一个很好的理由,也就是他提出的囊括我们所有物理现实的多节层级的最后一层。任何对为什么我们的宇宙似乎如此微调以及奥卡姆剃刀在 ML 和物理学中扮演的角色感兴趣的人可能会发现这很有启发性,如果不是令人信服的话(重点在我下面):

整个合奏往往比其中一个成员简单得多。使用算法信息内容的概念可以更正式地陈述这个原理。粗略地说,一个数字中的算法信息内容是将产生该数字作为输出的最短计算机程序的长度。

例如,考虑所有整数的集合。哪一个更简单,整套还是只有一个数字?你可能会天真地认为单个数字更简单,但整个集合可以由一个非常简单的计算机程序生成,而单个数字可能非常长。所以,整套其实更简单

(同理),更高层的多元宇宙更简单。从我们的宇宙到第一层多重宇宙消除了指定初始条件的需要,升级到第二层消除了指定物理常数的需要,第四层多重宇宙消除了指定任何东西的需要。

所有四个多重宇宙层次的一个共同特征是,最简单也可以说是最优雅的理论默认涉及平行宇宙。要否认这些宇宙的存在,我们需要加入实验上无法支持的过程和特别的假设,让理论变得复杂:有限空间、波函数坍缩和本体不对称。因此,我们的判断归结为我们发现哪个更浪费和不优雅:许多世界或许多单词。也许我们会逐渐习惯我们宇宙的怪异方式,并发现它的奇特是其魅力的一部分。

PiExa–> Raspberry Pi+Amazon Alexa:使用 Raspberry Pi 构建自己的免提 Alexa 的分步指南

原文:https://towardsdatascience.com/piexa-raspberry-pi-amazon-alexa-a-step-by-step-guide-to-build-your-own-hands-free-alexa-with-285c4bc73705?source=collection_archive---------3-----------------------

M otivation M onk:读日常没人读的东西,想日常没人想的东西。思想总是一致的一部分是不好的。

PiExa??我知道你们一定想知道这个作者在做什么,PiExa 是什么,为什么这个术语会和亚马逊 Alexa 和树莓 Pi 有关系。好了,我的读者朋友们,你们所有明确的问题、疑惑都将通过这篇文章的结尾得到解答。

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

目标:这篇文章是一步一步的全面指导,使用 Alexa 语音服务(AVS),用 Raspberry Pi 3 构建你自己的免提亚马逊 Alexa。通过这篇文章,我将演示如何使用 Java 示例应用程序(运行在 Raspberry Pi 上)、Node.js 服务器和第三方 wake word 引擎来访问和测试 AVS。所以,到这篇文章结束时,如果你跟着我,你可能会有你自己的手免费 Alexa 起来和你说话。

命名:我特意创造了“**PiExa”**这个术语,清楚地反映了树莓 Pi 与亚马逊 Alexa 的融合。

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

倒叙:几周前,当我为 Raspberry Pi 构建了自己的基于开源自然语言处理的语音助手Mycroft——Picroft时,我开始思考是否有可能使用 Raspberry Pi 制作自己的 Alexa,使用廉价的扬声器和通用串行总线(USB)麦克风,就像我构建 Picroft 一样。

我好奇的头脑和少量的谷歌搜索把我带到了 Alexa 知识库,它让我把我简单的想法变成了现实。

因此,没有任何进一步的欺骗,让我们开始一步一步地用 Raspberry Pi 3 构建自己的 Alexa。

硬件需求:

  1. 树莓 Pi 3 (推荐)或 Pi 2 Model B (支持)。
  2. 树莓派的微型 USB 电源线。
  3. 微型 SD 卡(最低 8 GB) —您需要一个操作系统才能开始使用。NOOBS(新的开箱即用软件)是一个易于使用的树莓 Pi 操作系统安装管理器。你可以很容易地下载并安装在你的 SD 卡上(查看这里)。
  4. USB 2.0 迷你麦克风 —树莓 Pi 没有内置麦克风;要与 Alexa 互动,你需要一个外部插件。
  5. 带 3.5 毫米音频线的外置扬声器。
  6. 一个 USB 键盘和鼠标,以及一个外部 HDMI 显示器。
  7. 互联网连接(以太网或 WiFi)

在你为这个项目收集所有的成分(硬件)之后,开始按照下面提到的步骤。

步骤 1:设置您的 Pi

N 注:除非您已经在 Pi 上安装了 Raspbian Stretch 或 Jessie,否则请遵循指南— 设置 Raspberry Pi ,该指南将引导您完成下载和安装 Raspberry Pi 以及连接硬件的过程(如果您不熟悉 Raspberry Pi,我强烈建议您遵循上面的指南,在继续下一步操作之前设置好 Pi 并做好准备)。

如果您已经在您的 Pi 上安装了 Raspbian Stretch Lite,那么您将需要安装 Java 以便启动并运行 Java 示例应用程序。只要您有互联网连接,就可以使用以下命令来实现:

sudo apt-get update
sudo apt-get install oracle-java8-jdk

第二步:注册一个亚马逊开发者账户

除非你已经有了一个,否则就去 developer.amazon.com创建一个免费的开发者账户。请务必在此处查看 AVS 条款和协议

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

步骤 3:创建设备和安全配置文件

按照这里的步骤注册您的产品并创建安全配置文件。

请注意以下参数。在下面的步骤 5 中,您将需要这些。

  • ProductID
  • ClientID,以及
  • ClientSecret

重要提示:确保在安全配置文件> Web 下设置了允许的来源和允许的返回 URL(参见创建设备和安全配置文件):

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

步骤 4:克隆示例应用程序

打开终端,并键入以下内容:

cd Desktop
# (Information: Currently the GitHub link is down due to some maintenance issue)git clone [https://github.com/alexa/alexa-avs-sample-app.git](https://github.com/alexa/alexa-avs-sample-app.git)

步骤 5:用您的凭据更新安装脚本

在运行安装脚本之前,您需要使用您在步骤 3 中获得的凭证来更新脚本— ProductIDClientIDClientSecret。在终端中键入以下内容:

cd ~/Desktop/alexa-avs-sample-app
nano automated_install.sh

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

粘贴从上面第 3 步中获得的ProductIDClientIDClientSecret的值。

更改应该如下所示:

  • ProductID="RaspberryPi3"
  • ClientID="amzn.xxxxx.xxxxxxxxx"
  • ClientSecret="4e8cb14xxxxxxxxxxxxxxxxxxxxxxxxxxxxx6b4f9"

键入 ctrl-X 和 Y,然后按 Enter 保存对文件的更改。

步骤 6:运行安装脚本

您现在可以运行安装脚本了。这将安装所有依赖项,包括 Sensory 和 KITT.AI 的两个唤醒词引擎。

注意:安装脚本将在运行脚本的文件夹中安装所有项目文件。

若要运行该脚本,请打开“终端”并导航到克隆项目的文件夹。然后运行以下命令:

cd ~/Desktop/alexa-avs-sample-app
. automated_install.sh

在继续之前,系统会提示您回答几个简单的问题,回答这些问题并完成所有必要的先决条件。

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

当向导启动时,完成整个过程需要 25-30 分钟,所以在此期间,你可以去喝杯茶或咖啡来打发时间。

第 7 步:运行你的网络服务,样本应用程序和唤醒词引擎

现在安装已经完成,您需要在三个独立的终端窗口中运行三个命令:

  1. 终端窗口 1:运行 web 服务进行授权
  2. 终端窗口 2:运行示例应用程序与 AVS 通信
  3. 终端窗口 3:运行唤醒词引擎,允许您使用短语“Alexa”开始互动。

注意:这些命令必须按顺序运行。

终端窗口 1

打开一个新的终端窗口,键入以下命令以打开用于授权 AVS 示例应用程序的 web 服务:

cd ~/Desktop/alexa-avs-sample-app/samples
cd companionService && npm start

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

服务器现在运行在端口 3000 上,您已经准备好启动客户端。

参见 API 概述>授权了解更多关于授权的信息。

让我们来看一下与窗口 2 相关的下几个步骤。

  1. 当你运行客户端时,会弹出一个窗口,显示一条消息

请在网络浏览器中访问以下 URL 并按照说明注册您的设备:https://localhost:3000/provision/d 340 f 629 BD 685 deeff 28 a 917。是否要在默认浏览器中自动打开该 URL?

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

单击“是”在默认浏览器中打开该 URL。

2.如果你用 Pixel desktop(和 Chromium 浏览器)运行 Raspbian,你可能会从浏览器得到一个警告。你可以通过点击高级->进入本地主机(不安全)来避开它。

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

3.你将被带到一个登录亚马逊网页。输入您的亚马逊凭证。

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

4.您将进入开发人员授权页面,确认您希望您的设备访问之前创建的安全配置文件。

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

单击确定。

5.您现在将被重定向到一个以https://localhost:3000/authresponse开头的 URL,后跟一个查询字符串。网页正文将显示设备令牌就绪。

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

6.返回到 Java 应用程序并单击 OK 按钮。客户端现在可以接受 Alexa 的请求了。

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

终端窗口 3

注意:跳过这一步,在没有唤醒词引擎的情况下运行相同的应用

这个项目支持两个第三方唤醒词引擎:Sensory 的 truly 免提和 KITT。艾的雪娃娃。-e参数用于选择代理,支持{engine}}的两个值:kitt_aisensory

打开一个新的终端窗口,使用以下命令从 Sensory 或 KITT.AI 调出唤醒词引擎。唤醒词引擎将允许您使用短语“Alexa”启动交互。

要使用感官唤醒词引擎,请键入-

cd ~/Desktop/alexa-avs-sample-app/samples
cd wakeWordAgent/src && ./wakeWordAgent -e sensory

或者,键入这个来使用 KITT。AI 的唤醒词引擎-

cd ~/Desktop/alexa-avs-sample-app/samples
cd wakeWordAgent/src && ./wakeWordAgent -e kitt_ai

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

现在你有一个工作免提 AVS 原型!

使用以下资源了解有关可用唤醒词引擎的更多信息:

第八步:和 Alexa 谈谈

你现在可以通过简单地使用唤醒词“Alexa”来与 Alexa 交谈。尝试以下方法-

说“Alexa”,然后等哔声。现在说“几点了?”

如果你愿意,你也可以点击“听”按钮,而不是使用唤醒词。在“听”按钮上点击一次,在释放点击之后,在开始讲话之前等待音频提示。可能需要一两秒钟才能听到音频提示。

步骤 9:如何注销示例应用程序

按照以下说明退出 AVS java 示例应用程序:

  1. 退出 AVS java 示例应用程序(CTRL + C)。
  2. 打开/samples/javaclient/config.json并清除您的sessionId。它应该是这样的:

"sessionId": ""

3.删除samples/companionService中的refresh_tokens文件。

下次登录时,系统会提示您进行身份验证。

演示时间

下面是有和没有唤醒词“Alexa”的视频,所以只要坐下来享受:

第 1 部分:没有唤醒词“Alexa”

https://www.youtube.com/watch?v=T1uyG9YNWbk(视频 1)

第 2 部分:用唤醒词“Alexa”

https://www.youtube.com/watch?v=a2XvL1L65tM(视频 2)

因为,现在你们都知道从上到下用 Raspberry pi 3 构建自己的免提亚马逊 Alexa 的每一步,使用 Alexa 语音服务(AVS)。因此,我想鼓励我所有的读者朋友、深度学习/机器学习实践者、爱好者和爱好者拿出你自己的带 Raspberry pi 3 的免提亚马逊 Alexa,并在上面发布 LinkedIn 或 twitter 帖子(** 但不要忘记给我加标签:)。我将急切地等待你的帖子。

参考资料:

  1. 要了解更多关于 Alexa 语音服务的信息,请点击这里
  2. 要了解更多关于语音助手的信息,请点击这里
  3. 我用来实现这个项目的库可以在这里找到。(信息:目前 GitHub 链接由于一些维护问题而关闭)

感谢您的关注

你利用你的时间阅读 T21,我的工作对我来说意味着一切。我完全是这个意思。

如果你喜欢这个故事,疯狂鼓掌吧👏 ) 按钮!这将有助于其他人找到我的工作。

还有,跟我上 LinkedinTwitter如果你想!我很乐意。****

改变您的硬件以在您的 PC 上实现更快的深度学习

原文:https://towardsdatascience.com/pimp-up-your-pc-for-machine-learning-d11f68c2815?source=collection_archive---------5-----------------------

为深度学习系列提升您的电脑——第 1 部分

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

诸如 TensorflowPytorchTheano认知工具包(CNTK) 等框架(以及与其一起工作的任何深度学习库,例如 Keras )允许在使用 GPU(图形处理单元)支持时进行比使用 CPU 快得多的深度学习训练。然而,对于那些框架可用的 GPU 支持,GPU 本身必须与 CUDA 工具包和任何额外需要的 GPU 加速库兼容,例如 cuDNN

目前 CUDA 兼容性仅限于Nvidia GPU。*因此,如果你有其他的 GPU 硬件(例如 AMD),你将不得不把它从你的电脑中换出来,并安装新的驱动软件。*这是我不得不为我的旧电脑做的事情,这篇文章将一步一步地指导你完成这个过程。

:因为我的 PC 安装了 64 位 Windows 10(至少目前如此),所以下面关于使用软件和卸载安装 GPU 驱动的说明都会参考 Windows 10。然而,由于我计划将这台电脑用于机器学习和其他编程项目,我将擦拭 Windows 并在其位置上安装 Linux Ubuntu 18.04 LTS(长期支持)——请关注此空间的未来帖子。

第一步:通过操作系统检查电脑上现有的显卡和驱动软件

升级电脑的第一步是检查你已经有的电脑。我的电脑是一台 Chillblast Fusion Inferno 2 游戏电脑,我最初是在 2016 年 1 月购买的。Chillblast Fusion 在主板上有一个 AMD 镭龙 R7 图形驱动程序(6595 MB 内存,VRAM 991 MB 和 5604 MB 共享内存)。

您可以使用 windows 上的“DirectX”诊断工具来检查这一点。你可以进入 Windows 开始菜单,输入“运行”,图 1 所示的窗口就会弹出。

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

Fig 1: Checking the onboard graphics card via DirectX diagnostic tool on Windows

如图 1 所示,键入“dxdiag ”, DirectX 诊断工具打开(图 2)。从这个工具中,我可以看到我有一个 AMD 镭龙 R7 图形处理器,它与 CUDA 不兼容。这证实了 GPU 升级的必要性。

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

Fig 2: DirectX Diagnostic Tool for checking system and display hardware

除了通过 Windows 进行检查,我认为在选择或订购新的 GPU 之前检查 PC 内部也很重要。这是为了确认,首先,什么插槽将可用于 GPU,其次,任何可用的电源。许多 GPU 需要自己的冷却系统,因此需要使用电源设备。这在步骤 2 中执行。

第二步:在选择新的 GPU 之前,先看看你的电脑内部

上面已经提到,一个新的 GPU 安装需要你的主板上有一个可用的插槽;这是一个 PCI express (PCIe)插槽。打开电脑,确认有一个插槽可用于安装 GPU。图 3 显示了我的电脑。

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

Fig 3: Motherboard with empty PCI Express slot and clip available for the new GPU

除了主板上的插槽要求之外,大多数 Nvidia GPUs 都需要专用电源来冷却。打开电脑外壳有助于检查已有的电源(如果没有电源,可订购一个额外的电源)。

我的电脑中可用的电源是 500 W(见图 4)。它还有一根备用电缆,其中一根有一个 6 针连接器。电缆未被使用,被塞在 PC 机箱的角落里,6 路引脚可以连接到 GPU 插座,为 it 提供冷却所需的电力。

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

Fig 4: Inside the Chillblast PC — showing 500 W power supply and spare 6-way pin which will be able to provide power to the GPU when installed

第三步:选择一个新的 Nvidia 兼容的 GPU

GTX 1000 系列中的大多数卡需要一个单独的电源单元(PSU),尽管 GTX 1050 Ti 具有不需要来自 PSU 的额外电源连接器的优势,因此如果您不想购买额外的硬件,这是一个不错的入门级选择。我选择了 EVGA Geforce GTX 1060 6GB,这被认为是一个具有成本效益的入门解决方案。这里有一个关于各种 Nvidia GPU 选项的很好的讨论。

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

Fig 5: My new Nvidia compatible GTX 1060 graphics card by EVGA

查看 Geforce GTX 1060 GPU 的硬件要求:

  • 显卡所需功率为 120 W
  • 推荐的 PSU(电源装置)最低为 400W
  • GPU 的电源连接是来自 PSU 的 6 针连接器

之前在步骤 2 中对我的电脑内部进行的检查表明,我已经拥有的 500 W 电源足够了,由于电源也有一个可用的 6 针连接器,我拥有连接 Geforce GTX 1060 GPU 所需的一切。

步骤 4:卸载旧 GPU 的驱动程序

为了删除下载的软件,最好使用显示驱动卸载程序(“DDU”)。我用的是Wagnardsoft;这是免费软件,但是开发者会感谢捐赠。DDU 软件建议您在删除驱动程序时将电脑重启至安全模式。一旦你在安全模式下重启(在 Windows 10 上有很多方法可以做到这一点),转到你下载 DDU 软件的文件夹,右击显示驱动卸载程序(它有文件类型:应用程序),图 4 中的窗口就会出现。

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

Fig 4: Display Driver Uninstaller (DDU) software detecting and uninstalling the AMD graphics driver on my PC

在图 4 所示的 DDU 选项中,最好的选择是“清理并重启(强烈推荐)”——这样在删除驱动程序时,您至少可以检查您的机器是否再次启动。图 4 所示的“清理并关闭(用于安装新显卡)”选项可能听起来更适用于这种情况,但它并不像您在重启时无法检查 PC 那样有用。

步骤 5:安装新的 GPU 硬件

我不得不移除机箱后面的两个面板,以便 GPU 可以放进去;这在图 5 中示出。一旦安装了 GPU,就可以从电脑机箱的背面直接接触到它的连接插槽。

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

Fig 5: GPU installation — removal of 2 slots from the side of the PC case at the back to enable the GPU to fit. The GPU’s socket (HDMI and DVI) connections are then accessible from the back of the computer via those slots

当 GTX 1060 GPU 作为新品到达时,它在要插入 PCIe 插槽的引脚上有一个保护性的黑色橡胶盖。首先从引脚上取下保护盖。握住 GPU 的风扇一侧(即印刷电路板的另一侧),小心避免静电放电,在触摸 GPU 之前,触摸大型金属物体(如计算机机箱)可能会损坏 GPU。将 GPU 推到 PCIe 插槽上;您应该会感觉到 PCIe 插槽夹卡嗒一声卡住了 GPU。图 6 显示了我的电脑的最终设置。

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

Fig 6: Nvidia GPU pushed and clipped into the PCIe slot; the GPU power socket are shown (top) and the screw hole where the GPU can be attached securely to the PC housing is also shown (bottom)

一旦 GPU 已经安全地插入到 PCIe 插槽中,将 500 W 电源的 6 针电源插入到 GPU 单元的顶部。GPU 上的电源插座如图 6(顶部)所示,插上电源的 GPU 如图 7(底部)所示。

此外,它有一个 GPU 的螺丝附件;这可用于将其牢固地拧到电脑机箱上,如图 7(顶部)所示。

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

Fig 7: Installed GPU screwed to case and with the 500 W power supply now plugged in

既然 GPU 已经固定到位,请在外壳一侧关闭的情况下启动计算机,以确保 GPU 上的风扇正在旋转。当你很高兴你的 GPU 布线整齐存放,风扇正在运行,你可以关闭你的电脑外壳。

连接电脑显示器的注意事项

在安装 GPU 之前,我的显卡通过插入主板的 HDMI 电缆连接到我的 PC 显示器上;参见图 8 中的 HDMI 插座(主板)标签)。安装 GPU 时,它带有几个连接,包括自己的 HDMI 和 DVI 插座(在图 8 中分别标记为“HDMI 插座(GPU)”和“DVI 插座(GPU)”。当电脑仍然关闭时,我从主板上拔下 HDMI 电缆,并将其插入 GPU。然后我打开电脑,它重新启动进入 windows。如果在打开和启动之前没有将显示器连接器(HDMI 或 DVI)从主板插座切换到 GPU 插座,尽管您的计算机启动了,但您的显示器仍会出现黑屏。您的电脑现在可以在启动时识别 GPU,默认显示输出从主板切换到新的 GPU。

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

Fig 8: The back of the computer case showing existing (motherboard) and new (GPU) DVI and HDMI sockets respectively

终于把你的电脑组装好了,是时候为你的新 GPU 安装驱动程序了。

第六步:为你的新 GPU 获取驱动软件

如果你购买了新的 Nvidia GPU 驱动程序,会附带一张驱动程序光盘,但是,当你得到它时,它可能已经过时了。另一种选择(也可能是更好的选择)是直接从 Nvidia 网站这里下载驱动软件。Geforce GTX 1060 驱动程序软件被列为 Geforce 10 系列的一部分,如图 9 所示。

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

Fig. 9: Downloading the Geforce GTX 1060 driver software from the Nvidia site

选择图 9 中的选项并点击“搜索”会将您带到图 10 所示的下载页面。

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

Fig 10: Driver download for the GTX 1060

下载并运行软件后,您将看到图 11 中的消息,提示您提取并安装 Nvidia 软件。

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

Fig 11: Downloading and installing Nvidia display driver software

故障排除说明

一旦我按照上面的安装过程,包括 Nvidia 显示驱动程序软件,我发现我的电脑没有立即检测到我的新 Nvidia GPU。我试图解决这个问题的一个方法是“关机再开机”——简单的重启。这对我很有效。但是,如果您发现您的系统无法检测到您的新 GPU,我发现下面的链接是一个有用的资源,可以帮助您诊断为什么会出现这种情况。

[## 完全修复:在 Windows 10、8.1 和 7 上检测不到 Nvidia 显卡

您的图形卡是电脑上最重要的组件之一。然而,许多用户反映英伟达…

windowsreport.com](https://windowsreport.com/nvidia-graphics-card-windows-10/)

步骤 7:在 Windows 中检查 GPU 安装

当你的 GPU 安装最终被识别时,它应该会以一些形式出现在 Windows 上。首先,您应该能够在“设备管理器”中看到它(如图 12 所示)。

请注意,我禁用了微软基本显示适配器(也列在图 12 中),因为它显示了一个错误,从我删除旧的 AMD 驱动程序时开始;在任何情况下,我都不需要 microsoft basic 显示适配器。

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

Fig 12: Windows 10 device manager showing display adapters (including new NVIDA GeForce card); I have disabled the Microsoft Basic Display Adapter

在 Windows 任务管理器中,您的新 GPU 也应该作为附加 GPU 列出。从图 13 可以看出,我的原始 GPU——“GPU 0”被列为 AMD 镭龙™ R7 图形,而新的 GPU——“GPU 1”现在是 Nvidia GeForce GTX 1060 6GB。

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

Fig 13: Windows task manager showing the new GPU 1 Nvidia GeForce GTX 1060 6GB

结论

本文介绍了如何检查当前计算机是否适合 GPU 升级,以及如何在计算机中安装新的 GPU 和驱动程序。该系列的下一步将是 CUDA 和 CUDnn 的安装,因为在将深度学习框架与 GPU 支持(如 Tensorflow、Pytorch 等)放在一起之前需要这些。

这篇文章也发表在这里https://schoolforengineering.com上。

Pinterest 的视觉镜头:计算机视觉如何探索你的品味

原文:https://towardsdatascience.com/pinterests-visual-lens-how-computer-vision-explores-your-taste-5470f87502ad?source=collection_archive---------7-----------------------

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

个性化视觉推荐背后的科学

当谈到寻找你想尝试的东西时——一个新的沙拉食谱,一件新的优雅服装,一把客厅的新椅子——你真的需要先看看它。人类是视觉动物。我们用眼睛来决定某样东西是否好看,或者是否符合我们的风格。

我是 Pinterest 的超级粉丝,尤其是它的视觉镜头。为什么?它让我发现让我感兴趣的事物,并让我深入其中。当我在世界上发现一些看起来有趣的东西,但当我稍后试图在网上搜索它时,我说不出话来。我脑海中有这个丰富多彩的画面,但我无法翻译成我需要找到它的文字。Pinterest 的视觉镜头是一种发现想法的方式,而不必先找到合适的词来描述它们。

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

只需将镜头对准一双鞋,然后点击查看相关的风格,甚至是搭配什么的想法。或者在桌子上试一试,寻找相似的设计,甚至是同一时代的其他家具。也可以用镜头配食物。只要把它指向花椰菜或土豆,看看会出现什么食谱。图案和颜色也可以引导你走向有趣的方向,甚至是怪异的新方向。

那么 Pinterest 是如何通过视觉搜索并为用户提供个性化视觉推荐的呢?经过两周对该公司的工程博客和媒体曝光的挖掘,我很感激终于得以一窥幕后。事实证明,该产品是 Pinterest 的机器学习应用程序的一个实例,这些应用程序广泛应用于各种商业领域。让我们缩小一下,看看机器学习在 Pinterest 是如何使用的。

Pinterest 使用机器学习的概述

作为一个视觉发现引擎,Pinterest 有许多具有挑战性的问题,这些问题可以使用机器学习技术来解决:

  • 我们应该向新用户推荐什么样的兴趣?
  • 如何产生引人入胜的主页反馈?
  • 引脚之间是如何关联的?
  • 一根针属于什么利益?

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

关键时刻发生在 2015 年 1 月,Pinterest 收购了Kosei——一家擅长推荐系统的机器学习初创公司。从那时起,机器学习已经在多个领域跨 Pinterest 使用:从提供推荐、相关内容和预测一个人将内容锁定的可能性的发现团队;成长团队使用智能模型来确定发送哪些电子邮件,并防止流失;来自做广告表现和相关性预测的货币化团队;给用 Spark 构建实时分布式机器学习系统的数据团队。

让我们更深入地了解一下 Pinterest 的工程师们是如何利用机器学习来保持该网站 1.75 亿多用户的锁定和共享的:

  • **识别视觉相似性:**机器学习不仅可以确定图像的主体,它还可以识别视觉模式,并将其与其他照片进行匹配。Pinterest 使用这项技术每月处理 1.5 亿次图像搜索,帮助用户找到看起来像他们已经上传的图片的内容。
  • **分类和管理:**如果用户锁定了一张上世纪中期的餐桌,该平台现在可以提供同一时代其他物品的建议。钥匙?元数据,如发布图片的公告板和网站的名称,有助于平台理解照片代表了什么。
  • **预测参与度:**虽然许多平台优先考虑用户朋友和联系人的内容,但 Pinterest 更关注个人的品味和习惯——他们在什么时候发布了什么——这使得该网站能够提供更多个性化的推荐。
  • 优先考虑本地口味: Pinterest 是一个日益全球化的平台,超过一半的用户位于美国以外。它的推荐引擎已经学会用用户的母语推荐他们当地的热门内容。
  • 超越图片:分析照片中的内容是网站推荐的一个重要因素,但它并不能提供全部信息。Pinterest 还会查看以前固定内容的标题,以及哪些项目被固定在同一个虚拟板上。举例来说,这使得 Pinterest 可以将一件特定的衣服与经常钉在旁边的一双鞋子联系起来,即使它们看起来一点也不像。

Pinterest Lens 是识别视觉相似性的努力的一部分,还有许多其他工程作品。它们都在一个不断发展的领域中利用机器学习算法和技术,这个领域称为计算机视觉,我将在下面深入解释。

Pinterest 的计算机视觉简史

计算机视觉是计算机科学的一个领域,也是机器学习的一个子领域,致力于使计算机能够像人类视觉一样看到、识别和处理图像,然后提供适当的输出。这就像把人类的智慧和本能传授给计算机。Pinterest 大量使用计算机视觉来支持他们的视觉发现产品。

Pinterest 在 2014 年将目光投向了视觉搜索。那一年,该公司收购了一家图像识别初创公司 VisualGraph ,并与一小群工程师一起建立了其计算机视觉团队,并开始展示其工作。

2015 年,它推出了 视觉搜索 **,**一种无需文字查询的搜索创意的方式。第一次,视觉搜索给了人们一种方法来获得结果,即使他们找不到合适的词来描述他们正在寻找的东西。

2016 年夏天,随着 Pinterest 推出 对象检测 ,视觉搜索得到了发展,它可以实时找到一个大头针图像中的所有对象,并提供相关结果。此后,视觉搜索成为其最常用的功能之一,每月有数亿次视觉搜索,检测到数十亿个物体。

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

2017 年初,它在视觉发现基础架构上推出了 3 款新产品:

  • Pinterest Lens 是一种通过手机摄像头发现创意的方式,其灵感来自用户看到的周围世界。
  • 购物外观是一种购物和购买用户在胸针内看到的产品的方式。
  • 即时创意是一种只需轻轻一点,就可以用类似的创意改变用户主页内容的方式。

最近大约 2 个月前,它宣布了为用户寻找产品和想法的更多方法:

  • Lens Your Look 是从你的衣柜和 Pinterest Lens 的下一个重大步骤中获得灵感的一种新方法。
  • 响应式视觉搜索是一种通过放大大头针对象来搜索图像的无缝沉浸式方法。
  • Pinterest Pincodes ,你只需拿出 Pinterest 相机,扫描任何 Pincode,就能看到 Pinterest 上的策划创意,灵感来自你在现实世界中看到的东西。

让我们更深入地挖掘 Pinterest 工程师在 Pinterest Lens 背后用于视觉发现工作的计算机视觉模型。

Pinterest 镜头如何工作

1 —镜头架构:

Lens 将 Pinterest 对图像和对象的理解与其发现技术相结合,为 Pinners 提供了一系列不同的结果。例如,如果你拍了一张蓝莓的照片,Lens 不只是返回蓝莓:它还会给你更多的结果,如蓝莓烤饼和冰沙的食谱,排毒磨砂等美容想法或种植自己的蓝莓灌木的技巧。

为此,Lens 的整体架构分为两个逻辑组件。

  1. 第一个组件是一个查询理解层,在这里 Pinterest 导出关于给定输入图像的信息。在这里,Pinterest 计算视觉特征,如检测物体,计算突出的颜色,检测照明和图像质量条件。使用视觉特征,它还计算语义特征,例如注释和类别。
  2. 第二个组件是 Pinterest 的混合器,因为 Lens 返回的结果来自多个来源。Pinterest 使用视觉搜索技术返回视觉上相似的结果,使用对象搜索技术返回具有视觉上相似的对象的场景或项目,使用图像搜索返回与输入图像语义上(非视觉上)相关的个性化文本搜索结果。混合器的工作是根据查询理解层中获得的信息动态地改变混合比率和结果源。

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

如上所示,镜头结果在视觉上并不严格相似,它们来自多个来源,其中一些仅在语义上与输入图像相关。通过为 Pinners 提供视觉相似之外的结果,Lens 是一种新型的视觉发现工具,它将现实世界的相机图像与 Pinterest 味觉图联系起来。

让我们继续分析 Lens 混合组件,包括图像、对象和视觉搜索。

2 —图像搜索:

Pinterest 的图像搜索技术可以追溯到 2015 年,当时该公司分享了一份白皮书,详细介绍了其系统架构和从实验中获得的见解,以建立一个可扩展的机器视觉管道。Pinterest 使用基准数据集和 A/B 测试的组合对两个 Pinterest 应用程序、相关 pin 和一个具有相似外观的实验进行了一系列全面的实验。

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

特别是,相似外观的实验允许 Pinterest 根据大头针图像中的特定对象显示视觉上相似的大头针推荐。它尝试了不同的方法来使用表面对象识别,这将使 Pinner 点击到对象。然后,它使用对象识别从大头针的图像中检测出包、鞋和裙子等产品。从这些检测到的对象中,它提取视觉特征来生成产品推荐(“相似的外观”)。在最初的实验中,如果针中的物体上有一个红点,Pinner 就会发现建议。点击红点会载入一系列视觉上相似的物品。

3 —视觉搜索:

当 Pinterest 在 2016 年为 Pinterest 上最受欢迎的类别引入自动对象检测时,视觉搜索得到了显著改善,因此人们可以在一个大头针的图像内视觉搜索产品。

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

由于一张图片可以包含几十个对象,Pinterest 的动机是尽可能简单地从其中任何一个开始发现体验。与自动完成改善文本搜索体验的方式相同,自动对象检测使视觉搜索体验更加无缝。视觉搜索中的对象检测也启用了新功能,如对象对对象匹配。例如,假设你在 Pinterest 或朋友家里发现了一张你喜欢的咖啡桌,很快你就能看到它在许多不同的家居环境中会是什么样子。

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

Pinterest 在构建自动对象检测方面的第一个挑战是收集图像中感兴趣区域的标记边界框作为我们的训练数据。自推出以来,它已经处理了近 10 亿个图像作物(视觉搜索)。通过在数百万张参与度最高的图片中聚合这种活动,它可以了解 Pinners 对哪些对象感兴趣。它将视觉上相似的结果的注释聚合到每个裁剪中,并在数百个对象类别中分配一个弱标签。下面的热图显示了这种情况的一个示例,其中形成了两个用户裁剪聚类,一个围绕“围巾”标注,另一个围绕“包”标注。

由于 Pinterest 的视觉搜索引擎可以使用任何图像作为查询——包括网络上看不见的内容,甚至是你的相机——检测必须实时进行,在几分之一秒内。Pinterest 广泛试验的最广泛使用的检测模型之一是 更快的 R-CNN ,它使用深度网络在两个主要步骤中检测图像中的对象。

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

首先,它通过在输入图像上运行完全卷积网络来产生特征图,从而识别图像中可能包含感兴趣对象的区域。对于特征图上的每个位置,网络考虑一组固定的区域,这些区域的大小和长宽比不同,并使用二进制 softmax 分类器来确定每个区域包含感兴趣对象的可能性。如果找到一个有希望的区域,网络还输出对该区域的调整,以便它更好地框住对象。

一旦网络发现了感兴趣的区域,它就检查最有希望的区域,并试图将每个区域识别为特定类别的对象,或者如果没有发现对象,就丢弃它。对于每个候选区域,网络在卷积特征图的相应部分上执行空间汇集,从而产生具有固定大小的特征向量,而与区域的大小无关。该汇集的特征然后被用作检测网络的输入,该检测网络使用 softmax 分类器来将每个区域识别为背景或我们的对象类别之一。如果检测到对象,网络再次输出对区域边界的调整,以进一步改进检测质量。最后,对检测执行一轮非最大值抑制(NMS ),以过滤掉任何重复的检测,并将结果呈现给用户。

4 —对象搜索:

传统上,视觉搜索系统将整个图像视为一个单元。这些系统索引全局图像表示以返回与给定输入图像整体相似的图像。随着深度学习的进步带来了更好的图像表示,视觉搜索系统达到了前所未有的精确度。然而,Pinterest 希望推动视觉搜索技术的界限,超越以整个图像为单位的界限。通过利用其数十亿对象的语料库,结合其实时对象检测器,Pinterest 可以在更细粒度的水平上理解图像。现在,它知道其图像语料库中数十亿个对象的位置和语义。

物体搜索是以物体为单位的视觉搜索系统。给定一张输入图像,Pinterest 在几分之一秒内从数十亿张图像中找到视觉上最相似的对象,将这些对象映射到原始图像,并返回包含相似对象的场景。

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

Pinterest 视觉发现的未来

在一个每个人口袋里都有相机的世界里,许多专家认为,视觉搜索——拍照而不是通过文本查询进行搜索——将成为我们查找信息的事实方式。

Pinterest 坐拥可能是世界上最干净、最大的数据集来训练计算机看图像——这相当于一个隐藏着核军备的小国。这是数十亿张家具、食物和服装的照片,多年来一直由 Pinterest 的用户手工标注。

在 Pinterest,用户可以随意浏览“美好生活”,从非常不具体的查询开始,比如“晚餐创意”或“时尚”,他们可能会一周又一周地反复搜索。由于这种行为和网站照片大头针的网格布局,Pinterest 可以在其平台中建立视觉搜索,而不是提供一个完美的答案,而是一个不完美的灵感集合。

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

据 Pinterest 的首席执行官本·希伯尔曼称,该公司正在用计算机视觉做三件事。他们试图了解产品或服务的美学品质,这样他们就能提供更好的建议。他们希望能够看到包含多个项目的图像内部,放大其中的一部分,然后通过计算说,“嘿,就是这种类型的对象。你可以在这里找到类似的东西。”然后,最终,他们想让相机工具,你可以查询你周围的世界。计算机视觉是驱动这三者的基础技术。

最后一次外卖

Pinterest 有一个指导他们计算机视觉工作的基本原则:帮助人们发现和做他们喜欢的事情。视觉是一个罕见的、未被封闭的空间。文字分享?这个象限属于脸书和推特。视觉分享?脸书、Instagram 和 Snapchat。搜索文本?那就是谷歌和必应。但是通过视觉搜索呢?Pinterest 似乎在引领潮流。

我希望这是有益的,并像它一样激起你的好奇心。目前,我将通过我自己的 Pinterest 镜头工作,发现我新喜欢的对象,了解并欣赏所有在幕后进行的计算机视觉。

— —

如果你喜欢这首曲子,我希望你能按下鼓掌按钮👏这样别人可能会偶然发现它。你可以在 GitHub 上找到我自己的代码,在【https://jameskle.com/】上找到更多我的写作和项目。也可以在 推特 上关注我直接发邮件给我 或者 在 LinkedIn 上找我。

其他来源:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值