TowardsDataScience 博客中文翻译 2019(五百二十一)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

了解卷积神经网络中的输入输出形状| Keras

原文:https://towardsdatascience.com/understanding-input-and-output-shapes-in-convolution-network-keras-f143923d56ca?source=collection_archive---------0-----------------------

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

即使我们从理论上理解了卷积神经网络,但在将数据拟合到网络时,我们中的很多人仍然会对其输入输出的形状感到困惑。本指南将帮助您理解卷积神经网络的输入和输出形状。

让我们看看输入形状是什么样的。输入到 CNN 的数据将如下图所示。我们假设我们的数据是图像的集合。

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

ConvNet Input Shape

输入形状

你总是需要给 CNN 一个 4D 数组作为输入。因此输入数据的形状为 (batch_size,height,width,depth) ,其中第一维表示图像的批量大小,其他三维表示图像的维度,即高度、宽度和深度。对于那些想知道图像深度是什么的人来说,它只不过是颜色通道的数量。例如, RGB 图像的深度为 3,而灰度图像的深度为 1。

输出形状

CNN 的输出也是一个 4D 阵列。其中批次大小将与输入批次大小相同,但是图像的其他 3 个维度可能会根据过滤器**、**内核大小和我们使用的填充的值而改变。

让我们看看下面的代码片段。

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

Snippet-1

不要被这里的 input_shape 论点所欺骗。虽然它看起来像我们的输入形状是三维的,但你必须在拟合数据时通过一个 4D 数组,应该像 (batch_size,10,10,3) 。因为在 input_shape 参数中没有批量值,所以我们可以在拟合数据时使用任何批量值。

你可以注意到输出的形状是*(无,10,10,64)* 。第一维表示批量大小,目前为。因为网络事先不知道批量大小。一旦您拟合了数据, None 将会被您在拟合数据时给出的批量所取代。

让我们看看另一个代码片段。

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

Snippet-2

这里我用批处理输入形状替换了输入形状参数。顾名思义,该参数会提前询问您批次大小,在拟合数据时您可以不提供任何其他批次大小。例如,您必须使 16 个批次中的数据仅适合网络。

现在,您可以看到输出形状的批量大小也是 16,而不是 None

在卷积层上附加密集层

我们可以简单地在另一个卷积层的顶部添加一个卷积层,因为卷积的输出维度与其输入维度相同。

我们通常在卷积层的顶部加上密集层,对图像进行分类。然而输入数据到密集层 2D 数组的形状 (batch_size,units) 。卷积层的输出是 4D 阵列。因此,我们必须将从卷积层接收的输出的维度改变为 2D 阵列。

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

Snippet-3

我们可以在卷积层的顶部插入一个展平层。展平图层将图像的三维压缩为一维。现在我们只有一个形状为 *(batch_size,squaded _ size)*的 2D 数组,对于密集层来说是可以接受的。

摘要

  • 你总是需要将一个形状为 (batch_size,height,width,depth) 的 4D 数组输入到 CNN 中。
  • 来自 CNN 的输出数据也是一个形状为 (batch_size,height,width,depth)的 4D 数组。
  • 要在 CNN 图层上添加密集图层,我们必须使用展平图层将 CNN 的 4D 输出更改为 2D。

阅读我的下一篇文章,了解 LSTM 中的输入输出形状。

[## 了解 LSTM | Keras 中的输入和输出形状

当我开始研究 LSTM 网络时,我对输入和输出的形状感到非常困惑。这篇文章将…

medium.com](https://medium.com/@shivajbd/understanding-input-and-output-shape-in-lstm-keras-c501ee95c65e)

理解语言建模(NLP)和使用 ULMFIT

原文:https://towardsdatascience.com/understanding-language-modelling-nlp-part-1-ulmfit-b557a63a672b?source=collection_archive---------9-----------------------

使用带代码的 ULMFIT 进行文本分类

语言模型是单词序列的概率分布。这种语言模型被用作各种自然语言处理任务的基础模型,包括文本分类、摘要、文本生成等等。

建议先对深度学习和迁移学习有一个基本的认识,再继续这个博客。

LMs 使得映射上下文更加容易。男人对女人的映射相当于叔叔对阿姨,国王对女王。这种映射被转换成词汇间的联合概率分布。这被称为统计 LM。

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

给定这样一个序列,比如长度为 m ,LM 给整个序列分配一个概率 P{w1,w2,…,wm }。

由于词汇表的长度,统计 LMs 面临数据稀疏的问题。而神经语言模型(NLM)仅将单词序列作为输入,这解决了数据稀疏的问题。

在不深入语言模型数学的情况下,让我们理解 ULMFIT 是如何工作的,这将给出一个关于神经语言模型的想法。

通用语言模型微调(ULMFIT)是一种迁移学习技术,可以帮助完成各种 NLP 任务。很长一段时间以来,它一直是最先进的 NLP 技术,但后来它被 BERT(最近在文本分类方面被 XLNet 取代)取代了。我们将在博客的下一部分详细研究 BERT。

乌尔菲特的优点

深度学习需要大量数据集。具体来说,在进行迁移学习时,我们有一个大型数据集,我们的基础模型就是在这个数据集上构建的,我们将学习神经网络的参数迁移到我们的领域特定数据集。当我们有一个更小的特定领域数据集时,模型会过拟合。为了解决这个问题,杰瑞米·霍华德和塞巴斯蒂安·鲁德在他们的论文《关于文本分类的通用语言模型微调的中提出了 3 种不同的技术,用于针对 NLP 特定任务的迁移学习 LMs 中的微调

  • 区别微调
  • 倾斜三角形学习率
  • 逐步解冻

让我们了解使用 ULMFiT 创建文本分类器的各个阶段,通过它我们将了解作者建议的 3 种新技术。

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

ULMFiT 包括 3 个主要阶段:LM 预训练、LM 微调和分类器微调。

该方法是通用的,因为它满足这些实用标准:

  1. 它适用于不同文档大小、数量和标签类型的任务。
  2. 它使用单一的架构和培训流程。
  3. 它不需要定制的特征工程或预处理。
  4. 它不需要额外的域内文档或标签。

AWD-LSTM 是一个 最先进的 语言模型,一个常规的 LSTM(没有关注、快捷连接或其他复杂的添加),具有各种调整过的丢失超参数。作者使用 AWD-LSTM 作为他们建筑中的 LM。

(a)法律硕士职前培训

LM 在一个通用领域语料库上接受训练,以捕获不同层次语言的一般特征

我们在大型通用领域语料库上预先训练 LM,并使用新技术在目标任务上对其进行微调。因此,作者们使用了 Wikitext-103,这是一个由 2.8 万篇预处理文章组成的数据集,包含 1.03 亿个单词。一般来说,数据集应该非常大,以至于 LM 可以学习语言的所有属性。就计算资源和时间而言,这也是最昂贵的。因此我们只做一次。

(b) LM 微调

在几乎所有情况下,目标任务数据集相对于一般领域语料库将具有不同的分布。在这个阶段,我们通过使用 判别微调和倾斜三角形学习率,在目标任务数据集上微调模型以学习其分布。

由于不同的层次掌握不同的信息,作者建议对每一层进行不同程度的微调。

在随机梯度下降中,我们在每个时间步长 t 更新θ。

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

Regular SGD

在区别微调中,我们使用θ1、θ2、… θL,而不是各个 L 层的单个θ值。

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

Discriminative Learning rate

U 在整个培训过程中保持相同的学习率(LR)或一个稳定的学习率并不是实现这种行为的最佳方式。相反,我们提出倾斜的三角学习率(STLR)

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

The slanted triangular learning rate schedule used for ULMFiT as a function of the number of training iterations.

在 STLR,作者建议线性增加学习速率,并以下列方式衰减它。

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

在哪里,

  • T 是训练迭代次数
  • cut_frac 是迭代的分数
  • cut 是我们从增加 LR 切换到减少 LR 时的迭代
  • p 是我们分别增加或减少 LR 的迭代次数的分数
  • ****比率指定最低 LR 比最大 LR ηmax 小多少
  • ηt 是迭代 t 时的学习率

STLR 曾经用 达到最先进的 成绩 CV

©选粉机微调

微调是迁移学习的最重要的状态,需要尽最大的努力。因为过于激进的微调会使我们的模型过拟合,反之也会使我们的模型欠拟合。作者建议采用逐步解冻的方法来解决这一重大问题。

我们从解冻最后一层开始,因为它包含了最基本的知识。在微调一个时期的未冻结层之后,我们继续下一个较低层,并重复直到我们完成所有层,直到在最后一次迭代中收敛。

用于文本分类的**(BPT3C)语言模型通过时间反向传播(BPTT)来训练,以实现大输入序列的梯度传播。为了使针对大文档的分类器的微调变得可行,作者提出了用于文本分类的BPTT(BPT3C):将文档分成大小为 b 的固定长度的批次,在每个批次开始时,用前一批次的最终状态来初始化模型;跟踪平均池和最大池的隐藏状态;梯度被反向传播到其隐藏状态对最终预测有贡献的批次。在实践中,作者建议使用可变长度反向传播序列。**

所以,现在我们完成了压倒性的理论。让我们深入研究代码!!

我们将在 quora 的问题文本上实现文本分类,找出不真诚的问题。数据集在 kaggle 可用。

代码即将发布。在此之前,请亲自尝试。

理解线性回归和梯度下降的必要性

原文:https://towardsdatascience.com/understanding-linear-regression-and-the-need-for-gradient-descent-2cc0f25763d5?source=collection_archive---------21-----------------------

从头开始实现线性回归

在这里,我将从头开始用 python 实现一元线性回归,以更好地理解算法和梯度下降的需要。在我们开始之前,这里有一个线性回归算法的快速概述。

线性回归:概述

假设我们有所有朋友的身高和体重。假设一个人的体重只是身高的函数,没有其他因素,如果我们知道一个新人的身高,我们如何预测他的体重呢?这就是我们使用一元线性回归的地方。当要预测的值或目标变量是连续的时,我们采用线性回归。线性回归是一种机器学习算法,它试图将给定的一组点拟合到一条直线上,y = ax + b。

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

在我们的示例中,因变量 y 将是身高,自变量 x 将是体重,线性回归算法的工作是找到 ab 的值,这样 ax + b 将绘制一条符合所有(体重、身高)坐标的直线,即给出相应的体重。现在我们来谈谈它是如何做到这一点的。

该算法

线性回归算法通过最小化预测点和实际点之间距离的均方误差(MSE)来找到 ab 的正确值。

这本质上是一个优化问题,其中需要确定 ab 的值,这是通过找到某个损失函数的最小值来确定的。该算法从 ab 的一些初始值开始,并计算 y。然后找到实际点(y_actual)和由预测 y 值(y_pred)给出的点之间的距离。该算法计算距离的平方和及其平均值。这个平均值或 MSE 是需要通过优化问题最小化的损失函数。

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

Finding the distance between the predicted points and the actual points

Python 实现

现在我们知道了算法是如何工作的,让我们试着用 python 来实现它。

让我们导入一些我们需要的库,matplotlib 来绘制我们的线,numpy 来处理我们的数据。

import matplotlib.pyplot as plt
import numpy as np

现在让我们为 x 和 y 取一些值,

x = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) 
y = np.array([1, 3, 2, 5, 7, 8, 8, 9, 10, 12])

x 和 y 都具有(10)的形状,绘制时看起来如下图所示,

plt.scatter(x, y)

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

让我们初始化 a 和 b,并定义计算 y_pred 和 mse 的方程。

a = b = 0y_ = a * x + bmse = np.mean((y — y_)**2)print(mse)>>54.1

对于给定的 x 和 y 值,mse 的初始值为 54.1。我们现在的目标是使其尽可能接近零。

让我们选择一个方向来遍历并更新 a 和 b 的值,直到我们的 mse 为零。我要把 a 和 b 都增加随机值,每一步 0.01,看看会得到什么。

while mse > 0:

  a = a+0.01
  b = b+0.01
  y_ = a * x + b

  if np.mean((y — y_)**2) < mse :
   mse = np.mean((y — y_)**2)

  else :
   print (a,b,mse)
   break>>>1.1900000000000008 1.1900000000000008 0.5634000000000003

当我们的 a 和 b 都是 1.19 时,我们的 mse 值下降到 0.563。

让我们画出结果线,看看它与我们的实际点是如何吻合的。

y_pred = a * x + bplt.figure(figsize = (12, 10))plt.plot(x, y_pred, label = ‘Predicted’)
plt.scatter(x, y, label = ‘Actual’)plt.show()

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

我们的路线似乎符合要点,但并不那么好。让我们将这个结果与成熟的线性回归模型(如 sklearn 模型)产生的结果进行比较。

x = x.reshape(-1,1)
y = y.reshape(-1,1)from sklearn.linear_model import LinearRegressionreg_model = LinearRegression().fit(x, y)y_pred = reg_model.predict(x)plt.figure(figsize = (12, 10))plt.plot(x, y_pred, label = ‘Predicted’)
plt.scatter(x, y, label = ‘Actual’)plt.show()

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

sklearn 回归器生成的直线似乎完全符合这些点。让我们看看 a 和 b 的值是多少。

reg_model.intercept_>> array([1.23636364])reg_model.coef_>> array([[1.16969697]])

接近但不相同。显然,他们采取了不同的路线来最小化他们的 mse,并以不同的值结束。

让我们用一组不同的 x 和 y 再试一次。

x = np.linspace(-1, 1, 101)
y = 4 * x + np.random.randn(101) * 0.44
print (x.shape , y.shape)>> (101,) (101,)

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

我们现在的初始 mse 是 5.79788117428826。让我们再运行一次同样的代码,看看我们得到的 a 和 b 的值是多少,在我们的探索中得到这个 5.7 到 0。

while mse > 0:

  a = a+0.01
  b = b+0.01
  y_ = a * x + b

  if np.mean((y — y_)**2) < mse :
   mse = np.mean((y — y_)**2)

  else :
   print (a,b,mse)
   break>>>1.0300000000000007 1.0300000000000007 4.4175244648874

很明显,我们选择的路线是条死胡同。当我们尝试将 a 和 b 都增加 0.01 时,我们的 mse 停留在 4.4,离 0 很远。没关系,让我们试试不同的路线。

while mse > 0:

 a=a+0.1
 b=b-0.01
 y_ = a * x + b

 if np.mean((y — y_)**2) < mse :
 mse = np.mean((y — y_)**2)

 else :
 print (a,b,mse)
 break>> 4.000000000000002 -0.4000000000000002 0.34416766289398254

那似乎更好。让我们试着画出来,看看这条线有多吻合。

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

再次,接近,但可以更好。很明显,需要改变的是我们上下遍历数轴寻找 a 和 b 的正确值的方式,但是我们如何知道是减少还是增加,如果是,增加多少?有一百万条不同的路径可供我们选择,但没有一条路径适用于每一个数据集。

这个问题的答案是梯度下降。我们通过在损失负梯度的最陡下降方向上迭代行进来最小化损失。

称为学习率的模型超参数决定步长。学习率 x 梯度给出了我们更新 a 和 b 的值。我们将在以后的帖子中更深入地研究梯度下降算法。

了解逻辑回归系数

原文:https://towardsdatascience.com/understanding-logistic-regression-coefficients-7a719ebebd35?source=collection_archive---------1-----------------------

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

Photo by Franki Chamaki on Unsplash

或者更好地从证据的角度思考概率

逻辑回归有一个共同的缺点:系数很难解释。如果你符合逻辑回归模型,你可能会说“如果变量 X 增加 1,那么因变量发生的概率增加???"但是“???"有点难以填写。

诀窍在于将“概率”一词改为“证据”在这篇文章中,我们将了解如何量化证据。利用这一点,我们将讨论如何解释逻辑回归系数

最后,我们将在此背景下简要讨论多类逻辑回归,并将其与信息论联系起来。

这篇文章假设你有解释线性回归系数的经验,并且之前至少看过一次逻辑回归

第 1 部分:思考概率的另外两种方式

几率和证据

我们习惯于把概率想成 0 到 1 之间的数字(或者等价地,0 到 100%)。但这只是“似是而非程度”的一种特殊数学表示

还有你所熟悉的第二种“似是而非程度”的表示法:优势比。比如我告诉你“一个观测被正确分类的几率是 2:1”,你可以查一下正确分类的概率是三分之二。同样,“偶数”的意思是 50%。

我的目标是说服你采用第三种方法:对数赔率,或赔率的对数。为了解释,我们将把对数几率称为证据。这是继 E.T. 杰恩斯2003 年的巨著概率论:科学的逻辑之后。

一般来说,使用数学表示法时有两个考虑因素。首先,它应该是可解释的。第二,数学性质要方便。

解释证据:哈特利的测量

为了让你相信证据是可以解释的,我会给你一些数字来校准你的直觉。

首先,证据可以用许多不同的单位来衡量。我们先从一个开始,哈特利号。哈特利有很多名字:艾伦·图灵称它为“ban ”,是以 T2 布莱切利公园附近的一个城镇的名字命名的,二战期间,英国人在这里破译了纳粹的通讯。它也被称为“dit”,是“十进制数字”的缩写

寻找哈特利事件中概率为 p 的证据的公式非常简单:

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

Computing the evidence, in Hartleys

其中几率为 p/(1-p)。这一点用下面的表格来解释要容易得多。请注意,为了使概率看起来更好,已经明智地使用了舍入。通过这种仔细的舍入,很明显 1 哈特利大约是“19

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

Table of Evidence, Odds, and Probability

请注意,1 哈特利是一个事件相当多的证据。一个更有用的度量单位可能是十分之一哈特利。一个“德西-哈特利”听起来很可怕,所以更常见的名字是“德西班”或分贝。这是另一个表格,这样你就可以了解一个决策的信息量。希望你能看到这是一个衡量证据的合适尺度:不太大也不太小。

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

使用证据:贝叶斯法则

我也说过证据应该有方便的数学性质。事实证明,证据自然出现在贝叶斯统计中。

假设我们希望将一个观察结果分为真或假。我们可以写:

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

Bayes’ Law for Binary Classification

在贝叶斯统计中,每个等式的左侧被称为“后验概率”,是在看到数据后分配的概率**。右手边的 P(真)和 P(假)分别是我们在看到数据之前的“先验概率”。我们认为这些概率是信念的状态,贝叶斯法则告诉我们如何从信念的前一状态进入后一状态。如果你不喜欢花哨的拉丁词,你也可以称之为“信念”。**

更多关于我们先前的信仰状态。这里的标准方法是计算每个概率。这可能是你曾经被迫做的一件苦差事。巧妙的方法是从考虑几率开始。如果我们把前面的两个等式分开,我们得到一个“后验概率”的等式

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

The Posterior Odds

然后我们将考虑证据,我们将把它记为 Ev。因此 Ev(True)是真实分类的先验(“之前”)证据。而 Ev(True|Data)是后验(“after”)。我们以哈特利为单位,取 10 为基数的对数:

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

The Data Science process, quantified

在二元分类的背景下,这告诉我们,我们可以将数据科学过程解释为:收集数据,然后对你已经拥有的假设证据进行加减。通过量化证据,我们可以使这相当字面:你增加或减少数量!

其他单位系统

衡量证据有三种常见的单位约定。我们见过一个,它使用 Hartley/bans/dits(或 decibans 等。).当我们取以 10 为底的对数时,就出现了这种单位的选择。

下一个单元是“ nat ”,有时也被称为“nit”简单的取以 e. 为底的对数就可以算出来,回想一下 e ≈2.718 就是欧拉数

最后一个常见单位是“位”,通过以 2 为底的对数来计算。它有时也被称为香农,以信息论的传奇贡献者克劳德·香农命名。

在计算机发明之前,哈特利是最常用的证据和信息单位,因为它比其他两个更容易计算。(注意,信息与证据略有不同;更多见下文。)

随着计算机的出现,转向比特是有意义的,因为信息理论通常涉及在使用物理比特的计算机上传输和存储信息。

最后,根据数学家的说法,自然对数是最“自然”的。因此,这是许多软件包的默认选择。在物理学中也很常见。

我相信,我也鼓励你相信:

  • Hartley 或 deciban(基数为 10)是最容易解释的,应该由对量化证据感兴趣的数据科学家使用。
  • 对量化信息感兴趣的计算机科学家应该使用这种比特。
  • 物理学家应该使用 nat,例如计算物理系统的熵。

请注意,对于数据科学家来说,这涉及到从默认选项(nat)转换模型输出。

最后,这里有一个单位换算表。我凭经验发现,许多人知道他们头顶上的第一行。0.69 是 72 的法则的基础,常见于金融学。3.01 ≈ 3.0 是很多电气工程师都熟知的(“3 分贝是功率的两倍”)。

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

Unit Conversion Table for Evidence

将证据转化为赔率和概率

刚刚说了我们应该用 decibans 代替 nats,我将在 nats 中做这一部分,这样如果你以前见过它们,你就能认出它们。让我们将证据(在 nats 中)表示为 S 。公式是:

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

Formula for the Evidence S in nats

假设真的证据是 s,那么几率和概率可以计算如下:

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

Converting evidence S to odds or a probability

如果最后两个公式看起来令人困惑,只要计算出你的马赢的概率,如果赔率是 2:3。首先将 2 和 3 相加,然后将 2 除以它们的和。

第 2 部分:理解逻辑回归

如果你相信我,证据是思考问题的好方法,那么希望你开始看到一个解释逻辑回归的非常清晰的方法。首先,记住逻辑 s 形函数:

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

希望你看到的不是复杂混乱的符号,而是将信息转化为概率的函数。和上面的一模一样!

让我们把因变量看作一个 0/1 值的指标。所以在上面的语言中 0 =假,1 =真。逻辑回归模型是

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

其中 X 是观测值的向量(包括常数),β是系数的向量,σ是上面的 sigmoid 函数。

这直接告诉我们,我们可以将一个系数解释为相关预测因子的每次变化所提供的证据量。

例如,假设我们正在为在线视频分类“会不会火起来”,我们的预测指标之一是视频中有一只猫(“猫”)的时长。

  • 如果这个“猫”变量的系数达到 3.7,这告诉我们,猫的存在每增加一分钟,我们就有 3.7 个国家(16.1 分位数)的证据证明视频会像病毒一样传播。
  • 将来自所有预测者的所有证据(以及先前的证据——见下文)相加,你会得到一个总分。
  • 如果总证据为正,则分类为“真”或 1,如果总证据为负,则分类为“假”或 0。但更关键的是,看看你有多少证据就知道了!

混合物

我选择了几个不深入探讨的要点。

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

The logit function is the inverse of the logistic function

  1. 逻辑 sigmoid 函数的逆函数是上面给出的 logit,。许多作者用 logit 来定义逻辑回归。逻辑函数将证据转换为概率,它的逆函数将概率转换为证据。
    此外,像往常一样,数学是以纳特为单位的,但是如果你想要不同的单位,你当然可以自由地使用不同的对数基数。
  2. 没什么可怕的。默认情况下,您选择了“无论如何都没有证据”的优先选项,换句话说,0 个证据。希望这看起来合理。改变你的先验就相当于改变了分类的门槛。这是一个思考如何构建 ROC 曲线的好方法。
  3. 你可以检查一下交叉熵损失(也称为对数损失或偏差)可以描述如下。让模型给出支持错误预测的证据。然后,在限制为 S 较大时,损失为 S 。反之,如果 S 是给出的有利于正确预测的证据,那么,在 S 较大的限度内,交叉熵损失为 exp(-S)

第 3 部分:多类逻辑回归

考虑到上面的讨论,在多类的情况下,直观的做法是量化有利于每个类的信息,然后(a) 分类到具有最多有利信息的类;和/或(b) 预测每个类别的概率,使得任意两个类别之间的对数优势比是它们之间的证据差异。

我们可以通过 softmax 函数来实现(b)。在总共 n 个类别中观察到类别 k 的概率是:

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

Softmax: Probability of observing class k out of n possibilities given the information in favor of each

将其中的任意两个(比如 k 和ℓ)相除,可以得到合适的对数概率。

我们如何估计有利于每一类的信息?有两种明显的选择:

  1. (多项式)注意,从数学上来说,将整个信息列表向有利于每一类的方向移动一定数量的哈特利不会改变概率分布。这是因为我们只关心类之间的信息差异。因此,我们不妨选择一个类,比如⭑类,并将其信息设置为 0。然后估计每个其他类相对于⭑.类的证据
  2. (一对其余)对于每个类别,比如类别 k,运行简单的逻辑回归(二元分类)以确定“是否是观察类别 k。”

在 n = 2 的情况下,方法 1 最明显地再现了上面的逻辑 sigmoid 函数。方法 2 也证明是等价的。

警告:对于 n > 2,这些方法是 不一样的 。(好消息是,在选项 1 中选择⭑类别不会改变回归的结果。)

我不打算在这里深入讨论这个问题,因为我没有太多好的参考资料。如果你想阅读更多,可以考虑从 scikit-learn 文档开始(其中也谈到了 1v1 多类分类)。如果你有/找到一个好的推荐人,请告诉我!这里的重点更多的是看证据视角如何延伸到多类案件。

第四部分:信息论

这将是非常简短的,但我想指出这是如何符合经典信息论的。信息论开始于研究写下一条信息需要多少位以及发送信息的特性。1948 年,Claude Shannon 能够推导出发生概率为 p 的事件的信息(或熵或惊奇)是:

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

给定概率分布,我们可以计算每个样本的预期信息量,并获得熵 S:

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

这里我选择了省略对数的底数,它设置了单位(以位、NAT 或 ban 为单位)。物理上,信息是这样实现的,即不可能无损压缩低于其信息内容的消息。

这种联系对我们来说有些松散,但是在二进制的情况下,真的证据是

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

负号是非常必要的,因为在信号分析中,总是发生的事情没有惊奇或信息内容;对我们来说,总是发生的事情有相当多的证据。

结论

信息是不确定性的解决方案 ——克劳德·香农

概率是大多数人类共有的共同语言,也是最容易交流的语言。但是它并不是对每种情况都是最好的。在这篇文章中:

  • 我们看到计算证据很简单:你只需添加它;
  • 我们校准了你对“大量”证据(10-20+分贝)、“一些”证据(3-9 分贝)或“不多”证据(0-3 分贝)的感觉;
  • 我们看到了在解释逻辑回归系数和贝叶斯语境中证据是如何自然产生的;和
  • 我们看到了它是如何引导我们正确考虑多类情况的

我希望你能养成习惯,把你的系数转换成分贝/分位数,并根据证据而不是概率来思考。

拉维

参考/建议

我强烈推荐上面提到的 E.T. Jaynes 的

就背景而言,E.T. Jaynes 就是你所谓的激进贝叶斯理论。

  • 我在这里提出的“证据”的观点可归因于他,正如所讨论的,在贝叶斯语境中自然产生。
  • 这本书的另一大特点是它派生了(!!)概率法则来自于对“似真程度”的定性考虑我发现这在哲学上很有趣。

还有:如果你不想要硬拷贝,谷歌上似乎有很多这本书的 pdf 文件。

逐步理解逻辑回归

原文:https://towardsdatascience.com/understanding-logistic-regression-step-by-step-704a78be7e0a?source=collection_archive---------4-----------------------

训练逻辑回归分类器,根据人们的体重和身高预测他们的性别。

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

逻辑回归是一种流行的用于二元分类的统计模型,即用于类型这个或那个是或否A 或 B 等的预测。然而,逻辑回归可用于多类分类,但这里我们将集中讨论其最简单的应用。

作为一个例子,考虑根据某人的体重身高预测其性别(男/女)的任务。

为此,我们将从一万个人的体重和身高样本的数据集训练一个机器学习模型。数据集取自Conway&Myles Machine Learning for Hackers 一书第二章,可以直接下载这里

这是数据的预览:

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

每个样本包含三列:身高体重男性

  • 高度英寸
  • 以磅为单位的重量
  • 男性: 1 表示测量对应男性,0 表示测量对应女性。

有 5000 个来自男性的样本,5000 个来自女性的样本,因此数据集是平衡的,我们可以继续进行训练。

Python 的 scikit-learn 代码训练逻辑回归分类器并做出预测非常简单:

一般的工作流程是:

  1. 获取数据集
  2. 训练分类器
  3. 使用这种分类器进行预测

逻辑回归假设

逻辑回归分类器可以通过类比 线性回归假设 得出,即:

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

Linear regression hypothesis.

然而,逻辑回归假设从线性回归假设中概括出,因为它使用了 逻辑函数 :

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

结果是逻辑回归假设:

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

Logistic regression hypothesis.

函数 g(z)逻辑函数,也称为s 形函数

逻辑函数在 0 和 1 处有渐近线,它在 0.5 处穿过 y 轴。

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

Logistic function.

逻辑回归决策边界

由于我们的数据集有两个特征:身高和体重,逻辑回归假设如下:

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

逻辑回归分类器将预测“男性”,如果:

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

这是因为逻辑回归“阈值”被设置为 g(z)=0.5,请参见上面的逻辑回归函数图进行验证。

对于我们的数据集,θ值为:

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

要获得 scikit-learn 计算的θ参数,可以:

**# For theta_0:**print( fitted_model.intercept_ )**# For theta_1 and theta_2:**print( fitted_model.coef_ )

有了这些系数,一个手动预测(也就是说,不使用函数 clf.predict() )将只需要计算向量积

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

并检查结果标量是否大于或等于零(预测男性),否则(预测女性)。

为例,假设我们想要预测某个身高***= 70 英寸***体重= 180 磅 的人的性别,就像上面脚本 LogisticRegression.py 的第 14 行一样,我们可以简单地做:

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

Making a prediction using the Logistic Regression parameter θ.

由于乘积的结果大于零,分类器将预测男性。

这里可以看到 决策边界 和完整数据集的可视化:

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

正如你所看到的,在决策边界的上方是大多数对应于男性类别的蓝色点,在它的下方是所有对应于女性类别粉色点。

此外,只看数据你就能知道预测不会完美。这可以通过包括更多的特征(除了体重和身高)以及潜在地使用不同的判定边界来改进。

逻辑回归决策边界也可以是非线性函数,例如高次多项式。

计算逻辑回归参数

scikit-learn 库在抽象逻辑回归参数θ的计算方面做得很好,它是通过解决一个优化问题来完成的。

我们先来定义两个兴趣点的逻辑回归代价函数:y=1,y=0,也就是假设函数预测男性或女性的时候。

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

然后,我们在这两项的 y 中取一个凸组合,得出逻辑回归成本函数:

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

Logistic regression cost function.

逻辑回归成本函数是凸的。因此,为了计算θ,需要解决以下(无约束)优化问题:

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

有多种方法可用于解决这种无约束优化问题,例如一阶方法 梯度下降 需要逻辑回归成本函数的梯度,或者二阶方法例如 牛顿法 需要逻辑回归成本函数的梯度和 Hessian 这是上述 scikit-learn 脚本中规定的方法。

对于梯度下降的情况,搜索方向是逻辑回归成本函数相对于参数θ的负偏导数:

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

Partial derivative of the logistic regression cost function.

在其最基本的形式中,梯度下降将沿着θ的负梯度方向迭代(称为最小化序列),直到达到收敛。

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

Prototype of gradient descent.

注意,常数α通常被称为学习速率搜索步骤,它必须被仔细调整以达到收敛。算法如 回溯线搜索 辅助确定α。

总之,这是您下次使用或实现逻辑回归分类器时应该记住的三个基本概念:

1.逻辑回归假设

2.逻辑回归决策边界

3.逻辑回归成本函数

对于应用于具有更多特征的数据集的逻辑回归分类器的讨论(也使用 Python ),我推荐 Susan Li 的这篇中期文章

参考资料和进一步阅读:

我是劳伦斯·伯克利国家实验室的博士后研究员,我在机器学习和高性能计算的交叉领域工作。

如果你觉得这篇文章很有意思,可以随意在LinkedIn打个招呼,我总是很乐意与该领域的其他专业人士联系。

一如既往:欢迎评论、提问和分享!❤️

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

No Spam, ever.

理解逻辑回归

原文:https://towardsdatascience.com/understanding-logistic-regression-using-a-simple-example-163de52ea900?source=collection_archive---------2-----------------------

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

通过简单的端到端示例建立直觉

如果你有兴趣运行我在这个分析中使用的代码,请查看我的 GitHub

逻辑回归是进行分类的基本工具之一。作为一名未来的数据科学家,我希望做大量的分类工作。所以我想我更好地理解了逻辑回归在更深层次上的作用(不仅仅是来自 sklearn . linear _ model import logistic regression)。

下面的例子从头到尾介绍了一个非常基本的逻辑回归,这样我(希望你,读者)可以对它的工作原理有更多的直觉。

投篮篮

比方说,我想检查我的篮球投篮准确性和我投篮距离之间的关系。更确切地说,我想要一个模型,它以英尺为单位计算“离篮筐的距离”,并计算出我投篮的概率。

首先我需要一些数据。所以我出去从各种距离投篮,同时记录每个结果(1 表示成功,0 表示失败)。在散点图上绘制时,结果如下所示:

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

一般来说,我离篮筐越远,投篮就越不准。因此,我们已经可以看到我们的模型的大致轮廓:当给定一个小距离时,它应该预测高概率,当给定一个大距离时,它应该预测低概率。

在高层次上,逻辑回归的工作方式很像传统的线性回归。因此,让我们从熟悉的线性回归方程开始:

Y = B0 + B1X*

在线性回归中,输出 Y 与目标变量(您试图预测的事物)的单位相同。然而,在逻辑回归中,输出 Y 是对数概率。除非你花很多时间在体育博彩或赌场上,否则你可能对赔率不太熟悉。赔率只是事件发生概率的另一种表达方式, P(事件)

赔率= P(事件)/【1-P(事件)】

继续我们的篮球主题,假设我投了 100 个罚球,投进了 70 个。基于这个样本,我罚球的概率是 70%。我罚球的几率可以计算为:

赔率= 0.70/(1–0.70)= 2.333

因此,如果他们基本上告诉我们同样的事情,为什么麻烦呢?概率被限制在 0 和 1 之间,这成为回归分析中的一个问题。如下图所示,赔率范围从 0 到无穷大。

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

如果我们取概率的自然对数,那么我们得到的对数概率是无界的(范围从负到正无穷大),并且在大多数概率上大致是线性的!由于我们可以通过逻辑回归估计对数概率,我们也可以估计概率,因为对数概率只是概率的另一种表述方式。

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

Notice that the middle section of the plot is linear

我们可以写出我们的逻辑回归方程:

z = B0+B1 *距离篮子

其中 Z = log(投篮命中率)

为了从对数赔率中的 Z、 得到概率,我们应用了 sigmoid 函数。应用 sigmoid 函数是描述以下转换的一种奇特方式:

投篮命中率= 1/[1+e^(-z]

既然我们已经了解了如何从对数赔率的线性估计到概率,那么让我们检查一下系数 B0B1 在我们用来计算 Z 的逻辑回归方程中是如何实际估计的。这里有一些在幕后进行的数学计算,但是我将尽我所能用简单的英语解释它,这样你(和我)都可以对这个模型有一个直观的理解。

成本函数

像大多数统计模型一样,逻辑回归寻求最小化成本函数。所以我们先来思考一下什么是成本函数。成本函数试图衡量你的错误程度。因此,如果我的预测是正确的,那么应该没有成本,如果我只是有一点点错误,应该有一个小成本,如果我是严重错误,应该有一个高成本。这在线性回归世界中很容易想象,因为我们有一个连续的目标变量(我们可以简单地将实际结果和我们的预测之间的差平方,以计算每个预测对成本的贡献)。但是这里我们处理的是一个只包含 0 和 1 的目标变量。不要绝望,我们可以做一些非常类似的事情。

在我的篮球例子中,我从篮筐的正下方第一次投篮——也就是 【投篮结果= 1 |距离篮筐= 0】。耶,我篮球打得并不差。我们如何将此转化为成本?

  • 首先我的模型需要给出一个概率。假设它估计值为 0.95,这意味着它预计我 95%的投篮都是从 0 英尺外命中的。
  • 在实际数据中,我只从 0 英尺处拍摄了一次,所以我从 0 英尺处拍摄的实际(采样)精度是 100%。带上那个愚蠢的模特!
  • 所以这个模型是错误的,因为根据我们的数据,答案是 100%,但它预测的是 95%。但是这只是一个小小的错误,所以我们只想罚一点点。这种情况下的惩罚是 0.0513(见下面的计算)。请注意,它与实际概率和预测的差值有多接近。还有,我要强调的是,这个误差不同于分类误差。假设默认截止值为 50%,该模型将正确预测 1(因为其预测值为 95% > 50%)。但是这个模型不能 100%确定我会成功,所以我们对它的不确定性进行了一点惩罚。

-log(0.95) = 0.0513

  • 现在让我们假设我们建立了一个蹩脚的模型,它吐出的概率是 0.05。在这种情况下,我们大错特错,我们的代价是:

-log(0.05) = 2.996

  • 这个成本要高很多。模型非常确定我会错过,这是错误的,所以我们要强烈惩罚它;我们之所以能够做到这一点,要感谢我们采用了天然原木。

下面的曲线图显示了成本与我们的预测之间的关系(第一个曲线图描绘了当 实际结果=1 时,成本相对于我们的预测如何变化,第二个曲线图显示了当 A 实际结果= 0 时,成本如何变化)。

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

因此,对于给定的观察,我们可以将成本计算为:

  • 如果 实际结果= 1 ,那么 成本= -log(pred_prob)
  • 否则如果 实际结果= 0 ,那么 成本= -log(1-pred_prob)
  • 其中 pred_prob 是跳出我们模型的预测概率。

对于我们的整个数据集,我们可以通过下式计算出 总成本 :

  1. 使用上述程序计算每个观察的个体成本。
  2. 将所有单项成本相加得到 总成本

这个 总成本 是我们想要最小化的数字,我们可以通过梯度下降优化来实现。换句话说,我们可以运行优化来找到最小化总成本B0B1 的值。一旦我们搞清楚了这一点,我们就有了我们的模型。激动人心!

把这一切联系在一起

综上所述,首先我们用最优化来搜索使我们的代价函数最小的 B0B1 的值。这给了我们一个模型:

Z = B0 + B1X*

其中 B0 = 2.5,B1 = -0.2(通过优化确定)

我们可以看一下我们的斜率, B1 ,它衡量的是距离对我射击精度的影响。我们估计B1T7 为-0.2。这意味着距离每增加 1 英尺,我投篮的几率就会减少 0.2。 B0 ,y 轴截距,值为 2.5。这是我从 0 英尺(就在篮筐旁边)投篮时,模型的对数赔率预测。通过 sigmoid 函数我们得到了 92.4%的预测概率。在下面的图中,绿点描绘了 Z ,我们预测的对数几率。

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

Almost there!

我们快完成了!由于 Z 是对数赔率,我们需要使用 sigmoid 函数将其转换成概率:

投篮命中率= 1/[1+e^(-z]

投中概率, 我们所追求的最终输出在下图中用橙色的点来描绘。注意曲率。这意味着我的特征(距离)和我的目标之间的关系不是线性的。在概率空间中(不像对数赔率或线性回归),我们不能说我投篮的距离和我投篮的概率之间有恒定的关系。相反,距离对概率的影响(连接橙色点的线的斜率)本身就是我目前站在离篮子多远的函数。

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

Nice! We have our probabilities now

希望这有助于你更好地理解逻辑回归(写它肯定帮助了我)。

如果你总体上喜欢这篇文章和我的写作,请考虑通过我的推荐链接注册 Medium 来支持我的写作。谢谢!

通过 PointNet++理解点云上的机器学习

原文:https://towardsdatascience.com/understanding-machine-learning-on-point-clouds-through-pointnet-f8f3f2d53cc3?source=collection_archive---------3-----------------------

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

介绍

数据可以采用多种形式。对于处理视觉信息,图像是非常常见的。图像存储二维像素网格,通常代表我们的三维世界。机器学习中一些最成功的进步来自涉及图像的问题。然而,对于直接在 3D 中捕获数据,具有表示整个体积的三维像素阵列是不常见的。

在 3D 中检索空间数据的最简单且最具成本效益的方法之一是通过点云。令人惊讶的是,针对点云的机器学习工作做得并不多,大多数人对这个概念并不熟悉。

在本文中,我将:

  1. 定义点云及其所在的空间。
  2. 了解机器学习中涉及点云的问题。
  3. 打开一篇关于点云机器学习的开创性研究论文——point net++。

什么是点云?

顾名思义,点云是空间中数据点的集合。收集 3D 数据的一种流行方式是通过扫描仪,扫描仪通过一系列坐标检测物体的表面。将信息存储为空间坐标的集合可以节省空间,因为许多对象不会占据很多环境。

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

An image and a 3D point cloud representation detected by a scanner.

然而,点云并不局限于 3D。任何高维物体的集合都可以被认为是点云。即使信息本质上不是可视的,将数据解释为点云也有助于理解多个变量之间的关系。

本质上,点云只是一个数学集合的花哨名称,它是一个无序的对象集合。通常,我们认为这些物体是空间中一堆孤立的点,松散地描述了一些固体结构或表面,但这只是直觉。只要我们有计算两点间距离的方法,这就够了。带有距离概念的空间被称为度量空间,这是点云最通用的设置之一。

点云上的机器学习

动机

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

The types of problems we’d like to solve on point clouds.

首先,我们想在点云上执行哪些任务?在点云上做机器学习常见的有两大类问题:分类分割

分类提问:*这是什么类型的物体?*目标是用一个标签对整个点云进行分类。可以有两个标签(即这是猫的数据还是狗的数据?)或多个(即,这是汽车、飞机、船还是自行车的数据?).

分割提问:*你能把这个物体分割成可分辨的部分吗?*如果我们有一个描述自行车的点云,也许我们想分离车轮、把手和座位(零件分割)。分割还用于处理描述整个环境而不是单个对象的复杂点云。例如,我们可能有一个描述交通路口的点云,并希望区分每辆车、人和交通灯(语义分段)。

如何解决它们?

与其他视觉问题不同,我们不能只是在这个问题上扔一个像卷积神经网络这样的东西。记住:点云没有固定的结构,所以我们不能简单地应用典型的工具来处理图像。

基本思想是这样的:我们有一个度量,它告诉我们点与点之间的距离。这使得我们可以将彼此靠近的点组合在一起,放入小口袋中,然后压缩成一个点。我们可以重复应用这一原理来总结几何信息,并最终标记整个点云。

PointNet++:点云上的深度学习

PointNet++是在点云上应用机器学习的开创性工作。该架构由多个组件组成,这些组件聚合本地信息并将其传递给下一步。

由于点云是无序的,聚合步骤不能依赖于输入的顺序。机器学习算法怎么可能不依赖于其输入的顺序?

这里有一个原则,不管数据类型或问题类型如何,都有帮助:机器学习的本质问题是函数逼近。寻找一个输入不变的函数听起来令人生畏,所以你能想到任何简单的吗,即使是一个只接受三个数字的函数 f(x,y,z) ?这样的函数叫做对称函数。

以下是一些常见的对称函数:

f(x,y,z)= XYZ f(x,y,z) = x + y + z
f(x,y,z) = max (x,y,z)

PointNet++中的组件实际上利用了最后一个函数!对于每一小组点,经过几次初始变换后,会有一个组合所有内容的最大值运算。

PointNet++的架构

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

The architecture for PointNet++, broken up into multiple stages.

PointNet++的架构有许多阶段,但是每个部分都有明确的目标。从整个点云开始,点被分组为一些簇,并浓缩为携带新信息的单个点。除了它的 d 空间坐标,每个点还携带 C 条信息。

这个过程继续进行,获取新的点并将它们分组到更多的簇中。根据问题的不同,这个过程会反向进行,并尝试重建原始结构。特别是当我们想要对每个原始点进行分类时,网络有一系列从一个点到一组的插值步骤。这些步骤都依赖于利用距离函数。插值步骤使用反距离加权平均值,定义如下。

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

Inverse distance weighted average for interpolation (quite a mouthful).

这里 f(x) 是坐标 x 处的插值, C 是类的数量, k 是使用的邻居数量(如k-最近邻居)。

结果:PointNet++做的怎么样?

PointNet++构建了同一个组的前一个迭代,称为 PointNet。对于语义分割的任务,显示了扫描厨房的结果。

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

PointNet is the original model, and PointNet++ is the new one (“Ours”).

除了房间布局之外,还标识了椅子、门和桌子等单独的对象。对于空间识别的任务,PointNet++是一个很好的基线。

结论

点云可以有效地描述各种情况下的空间数据集。其中一篇开创性的论文 PointNet++演示了复杂环境下的点云可以解决语义分割问题。许多较新的论文旨在将这些原则应用于更具体的问题,例如为医学成像分割血管中的分支。

如果你想了解更多关于这篇文章的内容,在下一节中有描述这项工作的网站链接。

感谢阅读!我很有兴趣听到其他关于机器学习的点云论文,这是一个相对未探索的话题。随时添加任何问题或评论,我真的很喜欢阅读你的想法!

参考

[1] Qi,Charles R 和 Su,Hao 和 Mo,Kaichun 和 Guibas,Leonidas J. PointNet:用于 3D 分类和分割的点集的深度学习。arXiv 预印本 arXiv:1612.00593,2016。

http://stanford.edu/~rqi/pointnet/

[2]齐,易,李,苏,郝,吉巴斯,J. PointNet++:度量空间点集的深度层次特征学习.arXiv 预印本 arXiv:1706.02413,2017。

http://stanford.edu/~rqi/pointnet2/

理解马尔可夫决策过程

原文:https://towardsdatascience.com/understanding-markov-decision-processes-b5862c192ddb?source=collection_archive---------11-----------------------

从高层次的直觉来看,马尔可夫决策过程(MDP)是一种数学模型,对于机器学习,特别是强化学习非常有用。该模型允许机器和代理确定特定环境内的理想行为,以便最大化模型在环境中实现某个状态甚至多个状态的能力,这取决于您想要实现什么。这个目标是由我们称之为策略的东西决定的,这个策略根据环境应用于代理的行为,MDP 试图优化实现这样一个解决方案所采取的步骤。这种优化是通过奖励反馈系统来完成的,其中不同的行为根据这些行为将导致的预测状态来加权。

分解它

为了理解 MDP,我们应该首先看看这个过程的独特组成部分。它包含:

  • 存在于我们指定环境中的一组状态:S
  • 在我们指定的环境中,一个或多个代理可以执行的一组可能的操作
  • 每个动作对当前状态的影响的描述
  • 给定期望的状态和动作,给出回报的函数:R(s,a)。
  • 寻求解决 MDP 问题的政策。你可以把它看作是从状态到我们行为的映射。用更简单的术语来说,它表示在状态 s 时要采取的最佳行动 a。

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

Image overview of MDP

了解模型:

从上图可以看出,我们有 T(S,a,S’) ~ P(S’|S,a)。

该模型通常被称为过渡模型。如果你把事情分解开来,理解起来就变得简单了。t 代表了我们行为的概念化。我们从某个状态 S 开始,我们采取行动 a,我们的代理发现自己处于一个新的状态 S’。(这里不要让我的措辞把你搞糊涂了。我们采取的行动完全有可能会让代理处于同样的状态。)

接下来,我们定义 P,或者我们在先前状态下采取行动达到新状态的概率。

让我们看看数学:马尔可夫性质

p[St+1**|a, S0 ,……、S*t=P[St+1****| a、* S** t

上面的公式是马尔可夫属性状态的定义。还是那句话,我们来分解一下。

St+1 可以解释为未来的状态,或者我们打算走向的状态和[ S 1 ,……,St]表示状态历史中存在的所有相关信息的历史。当然,a 仍然代表正在采取的行动。但是,新状态仅依赖于以前的状态。它不依赖于各国过去的历史。

给定马尔可夫状态,定义转移概率。

假设我们的代理处于某个状态 s,有一个概率进入第一个状态,另一个概率进入第二个状态,以此类推,对于每个现有的状态。这是我们的转移概率。

我们可以把这些概率输入一个状态矩阵!让我们定义一个三态天气问题的例子。这是规则

  1. 你住在桑尼镇,但可悲的是,桑尼从来没有连续两天的好天气。永远不会。
  2. 如果你有一个好天气,第二天很可能会下雪或下雨。
  3. 如果下雪或下雨,第二天有 50%的可能会有同样的天气。
  4. 如果天气由下雪或下雨转变,也只会有一半时间转变为晴天。

使用这个假的环境信息,我们可以构建一个状态矩阵,如下所示:

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

其中矩阵的第一行表示给定雨天的下几天天气的概率。第二行代表正常天气的概率,第三行,正如你可能已经理解的,代表下雪天的概率。这个转移概率矩阵被称为转移矩阵。

现在,让我们从我们的矩阵中尝试一个真实问题的模型,其中 p (ij)。
设 I 代表当前状态,j 代表未来状态。

我们想知道今天下雨的可能性有多大,两天后下雪的可能性有多大?假设正在下雨,我们可能的状态是什么?

唯一的限制是不能连续两天天气都很好。从现在到那时的所有其他状态都是可能的。所以可能明天下雨,第二天下雪,可能明天天气好,第二天下雪,也可能明天下雪,第二天下雪。

用方程式表示:

P (Rain⁰Snow ) = P(下雨)*P(下雨+下雪)+ P(正常下雨)*P(正常下雪)+ P(下雨+下雪)*P(下雪)

现在我意识到这看起来很伤人,但是你可能已经意识到这本质上是向量和矩阵数学。我们取第 1 行和第 3 行的点积。

视觉化让生活更简单

假设我们希望预测给定 6 天时间周期或 6 个状态转换的 P。我们没有一开始就定义一个单一的状态,我们只是希望在给定初始概率的情况下,找到我们的状态在一个过渡时期的概率。这就是所谓的正规马尔可夫链。如你所见,我们继续使用矢量数学,通过点积来计算每个州的概率。

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

好的,但是我们如何确定初始状态呢?它将如何影响我们对概率的计算,或者我如何创建马尔可夫链:

我很高兴你问了!我们可以这样定义:u^(n) = uP^(n)

其中 u 是表示初始状态分布的向量,P 是马尔可夫链的转移矩阵。

我们知道我们有三个状态,所以让我们把它代入。u =向上

让我们求解第三天的概率。我们制作一个 1×3 的向量来表示初始分布,并取点积来找出给定一个随机起始状态的第三天每个状态的可能性。

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

太好了。对于一个期望的结果,我如何找到这么多状态的最优解?这就是我想在这里使用强化学习的原因。

为了理解如何计算我们的状态和动作的最优化,我们需要给它们赋值。为了理解价值,我们需要定义一个政策,为了定义一个政策,我们需要理解回报和回报。

奖励和回报值

强化代理寻求最大化未来报酬的总和。他们想预测能获得最大回报的行动。这被称为 返回 ,我们可以这样建模,R 代表奖励,R 代表返回,下标 t 代表时间步长,在我们的例子中是状态转换。

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

现在,正如你所看到的,这个等式允许你趋向于无穷大,但是对于处理很多问题来说,它没有意义。我们希望奖励的总和结束。我们把结束的任务称为情节性的。想一个大富翁棋盘游戏。这一集是垄断游戏,从给所有人分配相同的值开始,给定一系列可能的状态和行为,这一集最终以赢家结束。新的一集可以通过创建游戏的新实例开始。我承认垄断游戏有时会让人觉得它们会变得无穷无尽…

比较常见的处理返回值的方法是一种叫做未来累计 贴现 奖励的方法

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

其中奖励前面的折扣表示 0 到 1 之间的值。这种方法的好处是,回报现在可以更好地模拟无限奖励,并且它给予更直接的奖励更大的权重。该模型现在关心的是更快到来的回报,而不是未来的回报。这个我们可以自己掂量。我们选择的折扣越小,我们就越重视早期奖励。正如您可能想象的那样,折扣 1 成为我们最初的奖励等式,折扣 0 创建一个只关心第一个奖励的模型。这在某种意义上是有用的,因为代理人会知道在那个确切的时刻做什么是绝对最好的,但它对自己的未来缺乏任何洞察力。有点像婴儿对成人。嗯,有些成年人。婴儿只知道在那一刻他需要一件特定的东西,一个成年人可以计划并试图预测他的未来。

更多关于政策

π(s,a)是我们的策略函数。它描述了一种行为方式。它获取当前状态和代理动作,并返回在该状态下采取该动作的概率。有点像我们上面演示的,不是吗?

如果你想一想这意味着什么,所有状态的集合,给定所有动作,等于概率 1,这一定是真的。

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

我们的政策应该描述在每个州如何行动。

想想乔希·格里夫斯创造的这个政策

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

大家可以看到,我们吃饱了有奖励,饿了吃了有奖励,吃饱了不吃也有奖励。如果饥饿,我们会受到极其严重的惩罚;如果吃饱了,我们会受到惩罚;如果吃饱了,我们会受到惩罚;如果饿了,我们也会受到惩罚。很容易看出,在这个非常简单的例子中,最优策略是总是在饥饿时进食。

价值函数:

强化学习中的两类价值函数是状态价值函数 V(s)和动作价值函数 Q(s,a)。

状态值函数解释给定特定策略的状态值。当我们从初始状态 s 开始并在我们的政策规则范围内行动时,它是对回报的计算。

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

当遵循我们指定的策略时,action value 函数返回在给定状态下采取某个操作的值。

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

现在,假设当选择一个动作时,环境是返回下一个状态的东西,我们必须记住,如果我们的策略改变,那么价值函数也会改变。我们期望看到这些函数的一个给定的返回值,然而,在到达一个特定的状态时会有很大的随机性,转移函数也会影响我们的状态。我们可能没有 100%的概率!

给定环境,我们如何解释返回状态的随机性?

好吧,我们将在下一篇博文中讨论这个话题,但简而言之,我们可以使用贝尔曼方程。这些方程允许我们将状态的值表示为其他状态的值。意思是如果我们知道某个状态的值,我们可以用它来计算其他状态的值。

我们可以用这些方程,推导出状态值和动作值的贝尔曼方程,我保证我们下次会这么做,等我再研究一些:D 之后

直到那时!

来源:

达特茅斯概率正文:http://www . Dartmouth . edu/~ chance/teaching _ AIDS/books _ articles/probability _ book/book . html

麻省理工学院发表论文:【http://www.mit.edu/~jnt/Papers/J083-01-mar-MDP.pdf

理解最大似然估计

原文:https://towardsdatascience.com/understanding-maximum-likelihood-estimation-fa495a03017a?source=collection_archive---------12-----------------------

[## 想在数据科学方面变得更好吗?

当我在我发布独家帖子的媒体和个人网站上发布新内容时,请单击此处获得通知。](https://bobbywlindsey.ck.page/5dca5d4310)

假设您从某个发行版收集了一些数据。正如你可能知道的,每个分布只是一个有一些输入的函数。如果您改变这些输入的值,输出也会改变(如果您用不同的输入集绘制分布图,您可以清楚地看到这一点)。

碰巧您收集的数据是具有一组特定输入的分布的输出。最大似然估计(MLE)的目标是估计产生数据的输入值。有点像逆向工程你的数据是从哪里来的。

实际上,你并不真的对数据进行采样来估计参数,而是从理论上求解;分布的每个参数都有自己的函数,该函数是参数的估计值。

这是怎么做到的

首先,假设数据的分布。例如,如果您正在观看 YouTube 并跟踪哪些视频有 clickbaity 标题,哪些没有,您可能会假设二项分布。

接下来,来自这个分布的“样本”数据,你仍然不知道它的输入。请记住,您是在理论上解决这个问题,所以不需要实际获取数据,因为样本数据的值在下面的推导中并不重要。

现在问,得到你得到的样本的可能性有多大?这个可能性就是得到你的样本的概率。假设每个样本彼此独立,我们可以将似然函数定义为:

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

Likelihood function

现在您已经有了可能性函数,您希望找到使可能性最大化的分布参数值。这样思考这个问题可能会有帮助:

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

What you’re trying to do with MLE

如果你熟悉微积分,找到一个函数的最大值需要对它求微分,并使它等于零。如果你真的对函数的 log 求导,这会使求导更容易,你会得到相同的最大值。

一旦你区分了对数似然,就可以求解参数了。如果您正在查看伯努利、二项式或泊松分布,您将只有一个参数需要求解。高斯分布将有两个,等等…

YouTube 视图建模

假设你一年前创办了一个 YouTube 频道。到目前为止,你做得很好,并且收集了一些数据。你想知道在给定的一段时间内,至少有 x 个访问者访问你的频道的概率。分布中最明显的选择是泊松分布,它只依赖于一个参数λ,λ是每个区间出现的平均次数。我们想用最大似然估计来估计这个参数。

我们从泊松分布的似然函数开始:

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

Likelihood function for Poisson distribution

现在看看它的日志:

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

Log likelihood for Poisson distribution

然后求微分,把整件事设为 0:

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

Finding the maximum of the log likelihood for Poisson distribution

现在你有了一个λ的函数,只要插入你的数据,你就会得到一个实际值。然后,您可以将此λ值用作泊松分布的输入,以便对一段时间内的收视率进行建模。很酷吧。

最大化积极因素和最小化消极因素是一样的

现在从数学上来说,最大化对数似然和最小化负对数似然是一样的。我们可以通过类似上面的推导来说明这一点:

取负对数可能性:

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

Negative log likelihood for Poisson distribution

然后求微分,把整件事设为 0:

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

Finding the maximum of the negative log likelihood for Poisson distribution

现在,是最大化对数似然还是最小化负对数似然取决于你。但是通常你会发现对数似然的最大化更常见。

结论

现在你知道如何使用最大似然估计了!概括地说,您只需要:

  1. 求对数可能性
  2. 区分它
  3. 将结果设置为零
  4. 然后求解你的参数

原载于 2019 年 11 月 6 日【https://www.bobbywlindsey.com】

了解蒙特卡罗模拟

原文:https://towardsdatascience.com/understanding-monte-carlo-simulation-eceb4c9cad4?source=collection_archive---------5-----------------------

从头开始实施强大的统计工具

蒙特卡洛模拟是一种强有力的工具,可以在很难获得精确分布的情况下近似计算。当对随机变量(RV)应用复杂的变换时,可能会出现这种情况,因为我们知道它的分布。它有多种应用;从期权定价缩小海岸警卫队搜救工作的地理焦点。但是它是如何工作的呢?

概率分布

每个 RV 都有其独特的分布特征。对于连续 RV,概率密度函数(PDF)显示了给定值下连续 RV 的密度。任何给定值出现的概率为零,因此必须对一系列值进行积分,以找到 RV 落在指定范围内的概率。对于离散 RVs,该函数称为概率质量函数(PMF ),它返回特定值出现的概率。它们描述了我们观察随机变量的模式和频率。

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

CDF 就是 PDF 或 PMF 的累积值。它是随机变量取值小于或等于曲线/阶跃函数正下方值的概率。概率必须介于 0 和 1 之间,因此 CDF 的范围介于 0 和 1 之间。用T5 FT7 表示。

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

逆变换采样

除了是概率论的基础知识之外,这些与蒙特卡罗模拟有什么关系?通过下面的命题(注意:大写字母表示 RVs,小写字母表示 RV 的实现)。

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

这意味着我们可以将最小值为 0、最大值为 1 的均匀分布中的随机变量输入到 X 的逆 CDF 中,以生成 X 的随机值。

让我们取一个指数分布的 CDF。它在下面。

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

CDF of an Exponential(lambda) Distribution

通过定义 UF(X)s 求解 X ,我们可以找到 CDF 的逆。

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

Inverse CDF of an Exponential(lambda) Distribution

我们现在可以将 U~Uniform(0,1) RVs 输入到这个逆 CDF 中,从指数分布中生成随机抽取。我选择 1 作为我的 lambda 参数。我使用的代码如下。(注意:这是低效的,可以通过矢量化来加速,或者使用 scipy.stats 模块来加速。我这样做是为了清楚地演示逆变换采样是如何工作的)。

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

The code used to generate Exponential(lambda) RVs

在 10,000 个模拟随机变量时,模拟与理论分布非常接近。

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

现在让我们尝试一个转换。

近似 RV 的变换

现在让我们生成标准正态随机变量的平方。这实际上是一个卡方(1) RV,它允许我们通过检查精确分布来轻松检查我们的近似有多好。

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

The code used to generate Chi-Square(1) RVs by squaring standard normal RVs

如你所见,这个近似值相当不错。

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

在绘制了这些 RVs 之后,我计算了低于 1 的比例(近似概率)为 0.6857。然后,我通过使用评估为 1 的卡方(1) CDF,将这与确切的概率进行比较。准确的概率是 0.6826894921370859。这种近似在 10,000 次模拟中表现得非常好

现在让我们用这个来近似 RV 的分布,它的精确分布需要一点求解。

逼近我的任意 RV

我定义了一些任意的 RV。姑且称之为 A ,定义如下。

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

找到一个精确的分布需要一些工作,我不喜欢工作。幸运的是,我可以写一个函数来逼近 A 的分布。

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

现在我们有了一个 A 分布的近似值,并且可以找到用于推断目的的近似概率。

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

既然我们已经完成了对我的任意 RV 的近似,让我们来看一个假设的用例。

正回报的概率

假设我们知道一些证券的收益分布为𝐿𝑎𝑝𝑙𝑎𝑐𝑒 (0.05,0.07) ,下一期的收益不依赖于本期的收益(这是一个随机游走的例子)。我们在第 5 期的投资回报率为正的概率是多少?

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

The code I used to generate simulated returns and the spaghetti plot (make sure to load in stats from scipy)

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

5000 Random Walks of our hypothetical security and the distribution of final returns

通过计算最终收益大于 0 的比例并除以模拟次数,我们发现该证券在 5 期结束时增值的概率约为 0.85。在构建投资组合时,这是有用的信息(尽管我们在现实生活中从未遇到过这样干净的案例)。

奖金申请:蒙特卡罗积分

除了近似分布之外,蒙特卡罗模拟可以用于数值近似难以或不可能解析求解的定积分。这被称为蒙特卡罗积分。它是通过在从 𝑈𝑛𝑖𝑓𝑜𝑟𝑚 ( 𝑎𝑏 )产生的随机变量的实现上评估函数来执行的,其中 a 是定积分的下限,b 是上限。这些结果然后被平均并乘以𝑏𝑎,以获得从 𝑎𝑏 的积分近似值。

取下面的函数:

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

它的积分不能解析地导出,所以让我们在 0 到 1 的区间上近似它。

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

运行 10,000 次模拟后,我得到了大约 0.244 的近似值,这与 Wolfram 给出的大约 0.244 的近似值非常接近,因此该函数按预期工作。

结论

如果你逗留了这么久,感谢你的阅读。我希望你了解了一些蒙特卡洛模拟的工作原理。希望这些知识能帮助你继续学习蒙特卡罗模拟的应用,比如马尔可夫链蒙特卡罗。只是另一个提醒使用优化的**。来自 scipy.stats 的 rvs()** 方法,适用于您感兴趣的任何分布。这比重复追加到列表中要快一个数量级。

更好地理解负对数损失

原文:https://towardsdatascience.com/understanding-negative-log-loss-8c3e77fafb79?source=collection_archive---------6-----------------------

在学习 fast.ai 的时候,我决定在一些数据集上测试“3 行代码”,而不是在课程中使用的数据集。 fast.ai维基页面有一些推荐,我决定尽可能多地尝试。

简单类别下的第一个推荐数据集是狗对猫 Redux: Kernels Edition 。虽然这个和课程里的很像,但我觉得不妨试试。

该数据集包含 25000 幅训练图像和 12500 幅测试图像。使用的评估指标是 LogLoss,描述如下:

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

这个实验的参考是 github 中的 lesson-1 笔记本

下载文件,启动 Jupiter 笔记本,导入依赖项,设置路径,我们就可以开始了…嗯,不完全是。在我们开始我们的 3 行深度学习之前,我们还需要几行代码。这场比赛提供数据的方式与在 fast.ai 服务器上提供的数据略有不同。有多种方法可以处理这个问题,我发现最简单的方法是使用函数;

*图像分类器数据。*来自 _ 名称 _ 和 _ 数组(…)

而不是;

image classifierdata . from _ paths(…)

在我们这样做之前,我们需要 2 行额外的代码;

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

现在我们可以开始我们的 3 行代码了。

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

这导致验证损失 0.029175 。禁用预计算、解冻层、添加丢失并再训练 7 个历元会使损失降至 0.024749

我在测试集上运行了预测,该模型给了我一个公共排行榜分数 0.06614 。我的验证分数严重下降,但对(几乎)标准化代码来说还不算太坏。现在,我必须缩小我的分数与排名 1 的持有者的分数 0.03302 之间的差距。

震惊

在这一点上,我决定表现得厚脸皮一点。如果图像是猫,实际值为 0,如果图像是狗,实际值为 1。softmax 函数的输出只能是接近 0 或 1 的值,它永远不会是 0 或 1。我想,如果我把预测值推近 0 或 1,那么它可能会帮助我摆脱一些误差。我期待着第三位小数的变化,如果我真的很幸运,也许是第二位小数的变化。

所以我编写了简单的代码来检查我的预测中的每个值。如果该值大于 0.9,则设为 1,如果该值小于 0.1,则设为 0,否则保持不变。生成并上传了一个新的提交文件,并急切地等待着看我的鬼把戏为我赢得了多少位置。令我惊讶的是,我的分数恶化到了 0.19683

我的第一个想法是,我一定是在代码中出错了。但是代码非常简单,只有两行,如下所示。

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

pred_list_cor 包含原始预测值,即 12500 个测试图像中每一个的 softmax 的输出。嗯,卡格尔不可能错,所以我必须错。但是我相信我的逻辑是正确的。所以我试着在纸上算出来。

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

两项的结果都是 0。第一个是因为实际值,第二个是因为对数函数。这给出了 0 的理想损耗。当图像是狗的图像时,该逻辑也是有效的。

我现在怀疑的是术语 log(0) ,当然,它是未定义的。值不能为 0 或 1,因为这将导致两个术语中的一个变得不确定。对此,显而易见的解决方案是用’ epsilon’ ‘替换’ 0 ‘,用’ 1- eplison’ ‘替换’ 1 '。这将误差略微改善至 0.14109 。进展,但我仍然不知道发生了什么解释。

如果你把预测值和实际值相匹配,损失应该会下降!但是我看到了相反的效果。我下一次试图理解观察到的行为是使用一个足够高和足够低的值,但不要像 epsilon 那样剧烈。我选择了0.99999&0.00001。使用这些,我的损失下降到 0.12065 。有所改善,但仍比我未改变的预测高很多。

敬畏

很明显,我的修改恶化了错误,而不是改善了错误,但我还不明白为什么。从数学上来说,它应该有所改善。

我觉得,获得更多清晰的唯一方法是检查我的预测到底发生了什么。因为我使用的是 Kaggle 数据集,所以我没有测试集的标签。我煞费苦心地手工标记了前 500 张图片。然后根据我的预测计算损失。损失为 0.00960 ,成绩优秀。然后我用我修改后的预测计算了损失,它是 0.01531 。显著增加,但这一次,我有数据来确定问题的根源。

在仔细检查我的预测和实际标签后,我注意到我的模型在预测中有一个错误。它给一只狗贴上了猫的标签,通过对 0.03824 的预测,它很有把握这张图片确实是一只猫。我的提升逻辑已经将这个值推至接近 0。这就是问题的根源。

测井损失误差会严重影响不正确的预测

我 1 次不正确的预测已经让我损失惨重,但我对预测的修改加剧了误差,导致误差增加了 0.0057。关于这一点的一个很好的解释在这个博客中,我在下面提到了其中的摘录。

比方说,实际值是 1。

如果你的模型是不确定的,预测值为 0.5,那么损失就是;

损失=-(1 * log(0.5)) = 0.69314

如果你的模型被正确地置信和预测为 0.9,损失将是;

损失=-(1 * log(0.9)) = 0.10536

当预测值更接近实际值时,损耗下降

如果你的模型是不正确的,但也有信心和预测 0.1,损失将是;

损失= -(1 * log(0.1)) =2.30258

损失变得更加严重

在处理对数损失函数时,与其自信地错了,不如怀疑自己的预测。这是我对我的模型的疏忽。我假设当我的模型自信地预测时,它总是正确的。如果它得到了一些错误的图像,它必须预测在 0.5 左右。我完全忽略了我的模型自信地错误预测的情况。

理解神经机器翻译:编码器-解码器架构

原文:https://towardsdatascience.com/understanding-neural-machine-translation-encoder-decoder-architecture-80f205643ba4?source=collection_archive---------13-----------------------

机器翻译的技术水平已经利用了使用编码器-注意力-解码器模型的递归神经网络(RNNs)。在这里,我将尝试从一个高层次的角度来介绍它是如何工作的。

语言翻译:组件

我们可以把翻译分成两个部分:单个单位和语法:

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

为了在神经网络中进行计算,我们需要将单词序列编码到向量空间中。因为单词也具有有意义的序列,所以递归神经网络适合于这项任务:

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

问题是

然而,这种编码器-解码器架构在大约 20 个以上单词的句子之后就崩溃了:

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

为什么?较长的句子说明了单向编码器-解码器结构的局限性。

因为语言由记号和语法组成,这个模型的问题是它没有完全解决语法的复杂性。

具体来说,当翻译源语言中的第 n 个单词时,RNN 只考虑源句子中的第一个 n 个单词,但从语法上来说,一个单词的含义取决于句子中之前和之后的单词的顺序:

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

一个解决方案:双向 LSTM 模型

如果我们使用双向模型,它允许我们输入过去和未来单词的的上下文,以创建准确的编码器输出向量:

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

但是,接下来的挑战就变成了,在一个序列中,我们需要关注哪个单词?

2016 年,巴赫达瑙等人。艾尔。发表了一篇论文,表明我们可以通过存储 LSTM 细胞以前的输出,然后根据每个输出的相关性对它们进行排序,并选择得分最高的单词,来学习要关注源语言中的哪些单词:

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

下面,您可以在图表中看到这种情况:最终的架构将这种注意力机制嵌入编码器和解码器之间:

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

可以看到,与之前的编码器-解码器架构相比,性能有所提升:

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

简而言之就是这样,这也是谷歌翻译的 NMT 的工作方式,尽管编码器 LSTMs 的层数更多。

简单来说,就是这样:

  1. 编码器获取源语言中的每个单词,并将其编码到向量空间中
  2. 然后,单词的这些矢量表示被传递到注意机制,该机制确定在为期望的语言生成一些输出的同时关注哪些源单词。
  3. 这个输出通过一个解码器,将向量表示转换成目标语言

来自 CS 道场社区的插图

理解神经网络

原文:https://towardsdatascience.com/understanding-neural-networks-19020b758230?source=collection_archive---------1-----------------------

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

我们探索神经网络如何运作,以建立对深度学习的直观理解

深度学习是目前的热门话题。但到底是什么让它与众不同,让它有别于机器学习的其他方面呢?这是一个深奥的问题(原谅我的双关语)。为了开始回答这个问题,我们需要学习神经网络的基础知识。

神经网络是深度学习的主力。虽然它们可能看起来像黑匣子,但在内心深处(对不起,我将停止可怕的双关语),它们正试图完成与任何其他模型相同的事情——做出正确的预测。

在这篇文章中,我们将探索一个简单的神经网络的来龙去脉。到最后,希望你(和我)会对神经网络如何工作有更深更直观的理解。

30,000 英尺的视野

让我们从一个非常高层次的概述开始,这样我们就知道我们在做什么。神经网络是神经元的多层网络(下图中的蓝色和洋红色节点),我们用它来对事物进行分类、做出预测等。下面是一个简单的神经网络图,它有五个输入、五个输出和两个隐藏的神经元层。

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

Neural network with two hidden layers

从左边开始,我们有:

  1. 橙色的是我们模型的输入层。
  2. 我们第一个隐藏的蓝色神经元层。
  3. 我们第二层隐藏的洋红色神经元。
  4. 模型的输出层(也叫预测层)是绿色的。

连接这些点的箭头显示了所有神经元是如何相互连接的,以及数据是如何从输入层一直传输到输出层的。

稍后我们将逐步计算每个输出值。我们还将观察神经网络如何使用反向传播过程从错误中学习。

找到我们的方向

但首先让我们找到方向。神经网络到底想做什么?像任何其他模型一样,它试图做出一个好的预测。我们有一组输入和一组目标值,我们正试图获得尽可能与这些目标值匹配的预测。

暂时忘记我在上面画的看起来更复杂的神经网络图,把注意力放在下面这张更简单的图上。

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

Logistic regression (with only one feature) implemented via a neural network

这是一个通过神经网络表达的单特征逻辑回归(我们只给模型一个 X 变量)(如果你需要逻辑回归的复习,我在这里写了这个)。为了了解它们之间的联系,我们可以用神经网络颜色代码重写逻辑回归方程。

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

Logistic regression equation

让我们检查每个元素:

  1. x(橙色)是我们的输入,这是我们为了计算预测而赋予模型的唯一特征。
  2. B1(以蓝绿色表示,也称为蓝绿色)是我们的逻辑回归的估计斜率参数,B1 告诉我们 Log_Odds 随着 X 的变化而变化的程度。注意 B1 位于蓝绿色线上,该线将输入 X 连接到隐藏层 1 中的蓝色神经元。
  3. B0(蓝色)是偏差,非常类似于回归中的截距项。关键区别在于,在神经网络中,每个神经元都有自己的偏差项(而在回归中,模型有一个奇异的截距项)。
  4. 蓝色神经元还包括一个乙状结肠激活功能(由蓝色圆圈内的曲线表示)。记住,sigmoid 函数是我们使用从对数几率到概率的函数(在我之前的帖子中搜索“sigmoid”)
  5. 最后,我们通过将 sigmoid 函数应用于量(B1*X + B0)来获得我们的预测概率。

不算太糟吧?让我们回顾一下。一个超级简单的神经网络仅由以下组件组成:

  • 一个连接(虽然在实践中,通常会有多个连接,每个连接都有自己的权重,进入一个特定的神经元),权重“生活在它里面”,它转换你的输入(使用 B1)并将其提供给神经元。
  • 一种神经元,包括一个偏置项(B0)和一个激活函数(本例中为 sigmoid)。

这两个对象是神经网络的基本构建模块。更复杂的神经网络只是具有更多隐藏层的模型,这意味着更多的神经元和神经元之间更多的连接。这种更复杂的连接网络(以及权重和偏差)允许神经网络“学习”隐藏在我们数据中的复杂关系。

现在让我们增加一点复杂性

现在我们有了基本框架,让我们回到稍微复杂一点的神经网络,看看它是如何从输入到输出的。这里再次供参考:

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

Our slightly more complicated neural network

第一个隐藏层由两个神经元组成。因此,为了将所有五个输入连接到隐藏层 1 中的神经元,我们需要十个连接。下图显示了输入 1 和隐藏层 1 之间的连接。

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

The connections between Input 1 and Hidden Layer 1

请注意我们对存在于连接中的权重的标注——W1,1 表示存在于输入 1 和神经元 1 之间的连接中的权重,w1,2 表示输入 1 和神经元 2 之间的连接中的权重。所以我将遵循的一般符号是 W a,b 表示输入 a (或神经元 a )和神经元 b 之间连接的权重。

现在让我们计算隐藏层 1 中每个神经元的输出(称为激活)。我们使用下面的公式( W 表示重量,中的表示输入)。

Z1 = W1 * In1+W2 * In2+W3 * In3+W4 * In4+W5 * In5+Bias _ neuro n1

神经元 1 激活=(Z1)

我们可以使用矩阵数学来总结这种计算(记住我们的符号规则,例如,W4,2 表示输入 4 和神经元 2 之间的连接中的权重):

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

Matrix math makes our life easier

对于神经网络的任何层,其中前一层为 m 元素深,当前层为 n 元素深,这概括为:

[W] @ [X] + [Bias] = [Z]

其中[W]是您的 n 乘 m 权重矩阵(前一层和当前层之间的连接),[X]是您的 m 乘 1 前一层的开始输入或激活矩阵,[Bias]是您的 n 乘 1 神经元偏差矩阵,[Z]是您的 n 乘 1 中间输出矩阵。在前面的等式中,我遵循 Python 符号,用@表示矩阵乘法。一旦我们有了[Z],我们可以将激活函数(在我们的例子中是 sigmoid)应用于[Z]的每个元素,这就给出了当前层的神经元输出(激活)。

最后,在我们继续之前,让我们直观地将这些元素映射回我们的神经网络图,以便将它们联系起来([Bias]嵌入在蓝色神经元中)。

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

Visualizing [W], [X], and [Z]

通过重复计算[Z]并对每个连续层应用激活函数,我们可以从输入移动到输出。这个过程被称为正向传播。现在我们知道了输出是如何计算的,是时候开始评估输出的质量并训练我们的神经网络了。

神经网络学习的时间到了

这将是一个很长的帖子,所以现在请随意休息一下。还和我在一起吗?厉害!现在我们知道了神经网络的输出值是如何计算的,是时候训练它了。

神经网络的训练过程,在高层次上,就像许多其他数据科学模型一样— 定义一个成本函数,并使用 梯度下降优化 将其最小化

首先让我们考虑一下我们可以使用什么杠杆来最小化成本函数。在传统的线性或逻辑回归中,我们寻找β系数(B0,B1,B2 等。)最小化成本函数。对于神经网络来说,我们正在做同样的事情,但是规模更大,更复杂。

在传统回归中,我们可以孤立地改变任何特定的贝塔系数,而不会影响其他贝塔系数。因此,通过对每个β系数施加小的孤立冲击,并测量其对成本函数的影响,可以相对简单地计算出我们需要向哪个方向移动,以降低并最终最小化成本函数。

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

Five feature logistic regression implemented via a neural network

在神经网络中,改变任何一个连接的权重(或一个神经元的偏差)都会对所有其他神经元及其在后续层中的激活产生回响效应

这是因为神经网络中的每个神经元都像它自己的小模型。例如,如果我们想要一个五特征逻辑回归,我们可以通过一个神经网络来表达它,就像左边的那个,只用一个单一的神经元!

因此,神经网络的每一个隐藏层基本上都是一堆模型**(该层中的每一个单独的神经元就像它自己的模型一样),其输出馈入更下游的更多模型(神经网络的每一个连续的隐藏层包含更多的神经元)。**

成本函数

考虑到所有这些复杂性,我们能做什么呢?其实也没那么差。让我们一步一步来。首先,让我清楚地说明我们的目标。给定一组训练输入(我们的特征)和结果(我们试图预测的目标):

我们希望找到一组权重(请记住,神经网络中任何两个元素之间的每条连接线都包含一个权重)和偏差(每个神经元都包含一个偏差),以最小化我们的成本函数,其中成本函数是我们的预测相对于目标结果有多错误的近似值。

为了训练我们的神经网络,我们将使用均方误差(MSE) 作为成本函数:

MSE = Sum [(预测-实际)] * (1 /数量 _ 观察值)

一个模型的 MSE 告诉我们平均起来我们错了多少,但是有一个转折——通过在平均之前平方我们预测的误差,我们对远远偏离的预测的惩罚比那些稍微偏离的预测更严重。线性回归和逻辑回归的成本函数以非常相似的方式运作。

好的,我们有一个成本函数来最小化。是时候点火了梯度下降对吗?

没那么快—要使用梯度下降,我们需要知道我们的成本函数的梯度,即指向最大陡度方向的向量(我们希望在梯度的相反方向上重复采取步骤,以最终达到最小值)。

除了在神经网络中,我们有如此多的可变权重和相互关联的偏差。我们如何计算所有这些的梯度呢?在下一节中,我们将看到反向传播如何帮助我们处理这个问题。

梯度下降快速回顾

函数的梯度是向量,其元素是它对每个参数的偏导数。例如,如果我们试图最小化一个成本函数 C(B0,B1),只有两个可变参数 B0 和 B1,则梯度为:

C(B0,B1) = [ [dC/dB0],[dC/dB1] ] 的梯度

因此,梯度的每个元素都告诉我们,如果我们对特定的参数进行微小的改变,成本函数会如何改变——这样我们就知道要调整什么以及调整多少。总而言之,我们可以通过以下步骤向最小值迈进:

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

Illustration of Gradient Descent

  1. 计算我们“当前位置”的梯度(使用我们当前的参数值计算梯度)。
  2. 按照与其渐变元素成比例且与其渐变元素方向相反的量来修改每个参数。例如,如果我们的成本函数相对于 B0 的偏导数为正但很小,相对于 B1 的偏导数为负且很大,那么我们希望将 B0 减少很小的量,将 B1 增加很大的量,以降低我们的成本函数。
  3. 重新计算梯度使用我们新的调整参数值,并重复前面的步骤,直到我们达到最小值。

反向传播

我会遵从这本伟大的教科书(在线免费!)对于详细的数学(如果你想更深入的了解神经网络,一定要去查一下)。相反,我们将尽最大努力建立对反向传播如何以及为什么工作的直观理解。

请记住,前向传播是通过神经网络向前移动的过程(从输入到最终输出或预测)。反向传播是相反的。除了代替信号,我们通过我们的模型向后移动误差。

当我试图理解反向传播过程时,一些简单的可视化帮助很大。下面是我脑海中一个简单的神经网络从输入到输出的图片。该过程可以总结为以下步骤:

  • 输入被输入到神经元的蓝色层,并通过每个神经元中的权重、偏置和 sigmoid 进行修改,以获得激活。例如:Activation _ 1 = Sigmoid(Bias _ 1+W1 * Input _ 1)
  • 来自蓝色层的激活 1 和激活 2 被馈入品红色神经元,品红色神经元使用它们来产生最终的输出激活。

前向传播的目的是计算每个连续隐藏层的每个神经元的激活,直到我们得到输出。

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

Forward propagation in a neural network

现在让我们把它反过来。如果你沿着红色的箭头(在下面的图片中),你会注意到我们现在从洋红色神经元的输出开始。这是我们的输出激活,我们用它来做预测,也是我们模型中误差的最终来源。然后,我们通过我们用于前向传播信号的相同权重和连接,在我们的模型中向后移动该误差(因此,代替激活 1,现在我们有误差 1——归因于顶部蓝色神经元的误差)。

还记得我们说过正向传播的目标是一层一层地计算神经元激活,直到我们得到输出吗?我们现在可以用类似的方式陈述反向传播的目的:

我们想要计算归因于每个神经元的误差(我将把这个误差量称为神经元的误差,因为一遍又一遍地说“归因”是没有意思的),从最接近输出的层开始,一直回到我们的模型的起始层。

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

Backpropagation in a neural network

那么,我们为什么要关心每个神经元的误差呢?请记住,神经网络的两个构建模块是将信号传递到特定神经元的连接(每个连接中都有一个权重)和神经元本身(有一个偏差)。整个网络中的这些权重和偏差也是我们调整以改变模型所做预测的刻度盘。

这一部分非常重要:

特定神经元的误差大小(相对于所有其他神经元的误差)与该神经元的输出(又名激活)对我们的成本函数的影响成正比。

因此,每个神经元的误差代表了成本函数相对于该神经元输入的偏导数。这具有直观的意义——如果一个特定的神经元比所有其他神经元有更大的误差,那么调整我们违规神经元的权重和偏差将比摆弄任何其他神经元对我们模型的总误差产生更大的影响。

并且关于每个权重和偏差的偏导数是组成我们的成本函数的梯度向量的单独元素。因此,基本上反向传播允许我们计算归因于每个神经元的误差,进而允许我们计算偏导数并最终计算梯度,以便我们可以利用梯度下降。万岁!

一个有帮助的类比——责备游戏

有很多东西需要消化,所以希望这个类比会有所帮助。几乎每个人在生活中的某个时候都有一个糟糕的同事——当事情出错时,他总是玩推卸责任的游戏,把同事或下属扔到公共汽车底下。

神经元,通过反向传播,是责备游戏的大师。当错误被反向传播到特定的神经元时,该神经元将迅速有效地将矛头指向上游同事(或同事),他们是造成错误的最大原因(即,第 4 层神经元将矛头指向第 3 层神经元,第 3 层神经元指向第 2 层神经元,等等)。

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

Neurons blame the most active upstream neurons

当神经元不能直接观察到其他神经元的错误时,每个神经元如何知道该责备谁?他们只是根据最高和最频繁的激活来看谁给他们发送了最多的信号。就像在现实生活中一样,那些安全行事的懒人(低激活率和不频繁激活率)会逃避责任,而那些工作最多的神经元会受到指责,并修改其权重和偏好。玩世不恭是的,但也非常有效地让我们得到一套最佳的权重和偏见,使我们的成本函数最小化。左边是神经元如何把彼此扔到巴士下面的图像。

简而言之,这就是反向传播过程背后的直觉。在我看来,这是反向传播的三个关键点:

  1. 它是将误差一层一层向后移位,并将正确的误差量归属于神经网络中的每个神经元的过程。
  2. 归因于特定神经元的误差是改变该神经元的权重(来自通向神经元的连接)和偏差将如何影响成本函数的良好近似。
  3. 当向后看时,更活跃的神经元(非懒惰的)是那些被反向传播过程指责和调整的神经元。

把这一切联系在一起

如果你一路读到这里,那么我对你表示感谢和钦佩(对你的坚持)。

我们从一个问题开始,“是什么让深度学习变得特别?”我现在将尝试回答这个问题(主要从基本神经网络的角度,而不是像 CNN、RNNs 等更高级的表亲的角度)。).依我拙见,以下几个方面使神经网络变得特别:

  • 每个神经元都是自己的微型模型,有自己的偏好和一组输入特征和权重。
  • 每个单独的模型/神经元通过模型的所有隐藏层馈入许多其他单独的神经元。因此,我们最终将模型插入到其他模型中,其总和大于其组成部分。这使得神经网络能够拟合我们数据的所有角落和缝隙,包括非线性部分(但要小心过度拟合——并且一定要考虑正则化,以保护你的模型在面对新的和超出样本的数据时不会表现不佳)。
  • 许多互连模型方法的多功能性以及反向传播过程高效且最优地设置每个模型的权重和偏差的能力,使得神经网络能够以许多其他算法无法实现的方式从数据中稳健地“学习”。

作者注 :神经网络和深度学习是极其复杂的学科。我仍然处于了解它们的早期阶段。写这篇博客是为了发展我自己的理解,也是为了帮助你,读者。我期待您所有的评论、建议和反馈。干杯!

如果你总体上喜欢这篇文章和我的写作,请考虑通过我的推荐链接注册 Medium 来支持我的写作。谢谢!

来源:

神经网络和深度学习作者迈克尔·a·尼尔森

维基百科:反向传播

理解神经网络

原文:https://towardsdatascience.com/understanding-neural-networks-677a1b01e371?source=collection_archive---------21-----------------------

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

Image of neurons inside our brains

神经网络我们这里要考虑的是人工神经网络( ANN )。顾名思义,人工神经网络是受人脑功能和结构启发的计算系统。

在本文中,我们将讨论什么是神经网络以及神经网络是如何工作的。

什么是神经网络?

在了解什么是人工神经网络之前,我们必须首先了解神经元如何在大脑中相互通信。所以让我们开始吧…

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

Image of communication between neurons

人脑由数十亿个被称为神经元的细胞组成。信息在神经元内部以电信号的形式传递。任何需要传达给大脑任何其他部分的信息都由神经元中的树突收集,然后在神经元细胞体中进行处理,并通过轴突传递给其他神经元。下一个神经元可以根据其强度接受或拒绝传播的电信号。

现在让我们试着理解什么是人工神经网络:

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

Image of ANN-1

人工神经网络是试图模仿大脑内部生物神经元功能的人工神经元的集合。每个连接都可以将信号从一个节点传输到另一个节点,在那里可以进一步处理并传输到下一个连接的人工神经元。人工神经网络可以学习和区分非常复杂的模式,这些模式很难人工提取并输入到机器中。人工神经网络由三种类型的层组成,每一层都是一堆人工神经元。每层人工神经元的数量可以根据你的个人选择而有所不同。

为了更好地理解 ANN,让我们来理解每一层的功能。

  • 输入层由人工神经元组成,将输入数据带入系统,供后续人工神经元进一步处理。输入层出现在人工神经网络的起点。
  • 隐藏层在输入层和输出层之间。它接收一组加权输入,并通过激活功能产生输出。该层被命名为 hidden,因为它不构成输入层或输出层。这是所有处理发生的层。根据问题的复杂程度,可以有一个或多个隐藏层。

我们将在本文的后半部分更详细地讨论加权输入激活函数。现在请记住,修改后的输入被输入到隐藏层,在该隐藏层的人工神经元内部发生一些处理,产生一个输出,用作下一个隐藏层或输出层的输入。

  • 输出层是人工神经网络架构的最后一层,为特定问题产生输出。这是在预测问题的结果之前进行任何处理的最后一层。

神经元内部发生了什么?

为了更好地理解 ANN 的工作,我们需要了解神经元上到底发生了什么。所以,让我们开始吧…

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

Image of ANN-2

这个 ANN 架构由 n 个输入和单个人工神经元以及单个输出y _ j组成。这里 w1,w2…wn 是对应于 x1,x2…的输入信号的强度。xn 分别为

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

Image of operations inside an artificial neuron

上图显示的是一个人工神经元。在每个神经元处, ∑ xiwi 通过将权重乘以它们各自的输入并求和来计算。其上应用了激活功能***【f】***。激活只是一个非线性函数,应用于 ∑ xiwi 以在架构中添加非线性。所谓非线性,我的意思是我们在日常生活中面临的大多数问题都很复杂,无法通过线性函数来解决,激活函数帮助我们在我们的架构中添加非线性,以获得解决此类问题的更好结果。一个没有激活函数的神经网络只是线性回归。激活功能帮助它学习更复杂的任务并预测结果。

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

With the help of activation functions, neural networks are able to classify linearly non-separable data on the right

几个最常用的非线性激活函数是:

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

Image of the non-linear activation functions

  • s 形函数→f(x) = 1/(1+ exp(-x))

它用于二进制分类问题的输出层,会产生输出 0 或 1。由于 sigmoid 函数的值介于 0 和 1 之间,如果该值大于 0.5,我们可以很容易地预测为 1,否则为 0。对于多类分类问题,Softmax 函数是最常见的选择。softmax 函数类似于 sigmoid 函数。你可以在这里阅读更多关于 Softmax 函数的内容。

  • ***Tanh 函数→f(x)=***2/(1+exp(-2x))-1

它用于神经网络的隐藏层,因为它的值介于-1 到 1 之间,因此隐藏层的平均值为 0 或接近 0。这有助于更容易地学习下一层。

  • RELU 函数→f(x) = max(0,x)

RELU 比 sigmoid 和 Tanh 函数快得多。它涉及简单的数学。如果你不知道选择哪一个激活函数,那么简单地使用 RELU ,因为它是最通用的激活函数,使用最多。

你可以在这里阅读更多关于其他激活功能的信息。

神经网络是如何工作的?

既然我们对人工神经网络体系结构的基本结构以及它的几个组成部分的功能有了概念,我们就可以理解神经网络实际上是如何工作的了。

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

Image of ANN-3

我们将以*(安-3 的图像)*为例。

  • 写有 1 的神经元是偏见。偏置单元是添加到每个预输出层的“额外”神经元,存储值 1。偏置单元没有连接到任何先前的层,从这个意义上说,不代表一个真正的“活动”。为了清楚地理解我们为什么需要偏见,你可以阅读这篇文章
  • x_1x_2 为输入。
  • (W _11) 表示从x1分配给隐层第一个神经元的权重,***【W _ 12】***表示从 x1 分配给隐层第二个神经元的权重,以此类推。上标表示权重分配给哪一层,如 W ,表示权重从输入层到第一个隐藏层, W 表示权重从第一个隐藏层到输出层。
  • 右边的箭头是我们的 ANN 架构的最终输出*(将使用 y^来表示)*。

神经网络的工作过程可以分解为三个步骤:

1) →初始化

设计神经网络后的第一步是初始化:

  • 用正态分布的随机数初始化所有权重 (W _11,W _12 …) ,即~N(0,1)。保持权重接近 0 有助于神经网络更快地学习。
  • 将所有偏差设置为 1。

这些是一些最常见的初始化实践。还有各种其他的权重初始化技术,你可以阅读这篇帖子了解更多信息。

2) →前馈

前馈是神经网络用来将输入转化为输出的过程。我们将参考下图来计算 y^.

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

Feedforward calculation for ANN-3 architecture

从右到左阅读图像。

  • 第一个操作是将包含偏差的输入向量乘以 W 矩阵。请记住,您可能需要做一些矩阵转换,以使矩阵乘法可行*(将输入矩阵转换为 1X3,然后乘以 W,以创建 1X2 形状的输出)*。
  • 矩阵相乘后,应用 sigmoid 激活函数。
  • 到目前为止,我们已经计算了第一个隐藏层的值,现在我们将添加一个新的偏差到隐藏层矩阵*(这里从 1X2 变成 1X3)。*下一步是将隐藏层矩阵乘以 W。
  • 在矩阵乘法之后,我们将剩下单个值,该值将被馈送到 sigmoid 激活函数,从而产生 y^.。这种类型的 ANN 架构可以用于二进制分类*(如果输出大于 0.5,我们可以预测 1 否则为 0)* 。

按照这些步骤背后的思想,我们可以将一个人工神经网络的输入转化为输出,即使它有 100 个隐藏层。

在开始反向传播步骤之前,我们必须了解一些解释反向传播所需的概念。概念包括:

→成本函数

→梯度下降

什么是成本函数?

神经网络在机器学习领域获得了如此大的流行,因为它们在每次预测其输出时都具有学习和改进的能力。为了能够改进,我们需要一个误差函数或成本函数,让我们知道我们的预测与实际输出有多远*(成本函数是一种衡量神经网络相对于其给定训练样本和预期输出“有多好”的方法)。*在神经网络中,有许多成本函数。其中一个常用的是伯努利负对数似然损失。

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

Image of Bernoulli negative loglikelihood loss

忽略 L 前面的“-”。

  • N 这里表示训练样本数据点的数量。
  • p_i 表示我们模型的预测。
  • y_i 为实际输出。
  • M 表示多分类问题中输出类的数量。

成本函数导致总体训练点数的平均损失。通过查看二元和多分类对数似然损失方程,我们还可以得出结论,对于 M = 2,它们导致相同的成本(误差)。如果你有兴趣,你可以在这里阅读更多关于其他成本函数的信息。

什么是梯度下降?

梯度下降是一种优化算法,用于通过沿梯度的负值*(斜率或曲线的陡度,使用偏导数计算)*定义的最陡下降方向迭代移动来最小化某个函数。在机器学习中,我们使用梯度下降来更新模型的参数。参数包括线性回归的系数和神经网络的权重和偏差。

那么让我们来理解梯度下降是如何帮助神经网络学习的。

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

Graph of cost function(J(w)) vs weight(w)

我们将使用上面的图像*(成本函数(J(w))对权重(w))* 来解释梯度下降。

  • 假设对于特定的权重和偏差值,我们得到下面的平均成本*(误差)*,用图中的球表示我们的训练点。我们还可以观察到,通过微调参数,平均成本的值可以低至 J_min(w)。
  • 为了更新权重和偏差以最小化成本,梯度下降将在箭头指示的方向上迈出小步。它通过计算成本函数相对于权重和偏差的偏导数,并从相应的权重和偏差中减去它来实现。由于球所在位置的导数为正,如果我们从 w 中减去成本函数相对于 w 的导数,它将减小并更接近最小值。
  • 我们迭代地继续这个过程,直到我们到达图表的底部,或者到达我们不能再向下移动的点——局部最小值。对于每个训练样本,神经网络中的所有权重和偏差都会发生这种情况。

这些步骤的大小被称为学习率。有了高学习率,我们可以采取更大的步骤,但我们有超过最小值的风险,因为曲线的斜率是不断变化的。由于学习率很低,我们可以自信地向负梯度的方向前进,因为我们经常重新计算它。低学习率更精确,但是计算梯度很耗时,所以我们需要非常长的时间才能收敛。

3) →反向传播

反向传播算法只是它的一个扩展,使用链式法则来找出连接输入层和隐藏层的权重的误差(对于两层网络)。如果您对链式法则概念不太熟悉,请务必查看下面的链接

反向传播的主要思想是更新可以帮助我们降低网络成本的权重,从而生成更好的预测。要使用梯度下降更新隐藏层的权重,您需要知道每个隐藏单元对最终输出的影响有多大。由于层的输出由层之间的权重决定,因此由单元产生的误差由通过网络前进的权重来缩放。由于我们知道输出端的误差,我们可以使用权重反向工作到隐藏层。

使用梯度下降更新权重

我们可以借助以下等式来更新权重:

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

Equation-1

其中 η 是学习率, δ 是误差项,表示为

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

Equation-2

记住,上式中 (y−y^ ) 是输出误差,f′(h)是指激活函数的导数, f(h) 。我们称这个导数为输出梯度。这个δwi被添加到相应的权重,这有助于减少网络的误差,如(成本函数(J(w))对权重(w)的图表图像)中所解释的。

为了更好地理解,我们将考虑一个网络,其中输出层具有归因于每个输出单元 k 的误差 δ⁰_k 。然后,归因于隐藏单元 j 的误差是输出误差,由输出和隐藏层(以及梯度)之间的权重来缩放:

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

Equation-3

然后,梯度下降步骤与之前相同,只是有新的误差:

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

Equation-4

其中 wij 为输入和隐藏层之间的权重,为输入单元值。无论有多少层,这种形式都适用。权重步长等于步长乘以图层的输出误差乘以该图层的输入值。

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

Equation-5

这里,通过从更高层向后传播误差,得到输出误差 、δ输出 。并且输入值 Vin 是层的输入,例如隐藏层激活到输出单元。

通过一个例子

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

Image of a two-layer network

**下图描述了一个双层网络。(**注:输入值显示为图像底部的节点,而网络的输出值显示为顶部的 y^ 。输入本身不能算作一个层,这就是为什么这被认为是一个两层网络。)

假设我们试图拟合一些二进制数据,目标是 y = 1。我们将从正向传递开始,首先计算隐藏单元的输入。出于理解的目的,在这个网络中没有偏见。

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

Equation-6

和隐藏单元的输出。

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

Equation-7

将此作为输出单元的输入,网络的输出为

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

Equation-8

有了网络输出,我们可以开始反向传递来计算两个层的权重更新。利用以下事实,对于 sigmoid 函数f’(wa)=f(wa)(1f(wa),输出单元的误差项为

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

Equation-9

现在我们需要计算带有反向传播的隐藏单元的误差项。这里我们将通过权重 W 将输出单元的误差项与隐藏单元连接起来。对于隐藏单元误差项,(方程式-1 的图像),但是由于我们有一个隐藏单元和一个输出单元,这就简单多了。

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

Equation-10

现在我们有了误差,我们可以计算梯度下降的步骤。隐藏到输出权重步骤是学习率乘以输出单元误差,再乘以隐藏单元激活值。

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

Equation-11

然后,对于输入到隐藏权重 wi ,它是学习率乘以隐藏单元误差,再乘以输入值。

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

Equation-12

计算δwi后,添加到各自的 wi 中。这就是如何更新权重,以使网络在每次迭代中变得越来越好。

从这个例子中,您可以看到使用 sigmoid 函数进行激活的效果之一。sigmoid 函数的最大导数为 0.25,因此输出层中的误差至少减少了 75%,隐藏层中的误差至少减少了 93.75%!您可以看到,如果您有很多图层,使用 sigmoid 激活函数会将输入附近图层中的权重步长快速降低到很小的值。这就是所谓的消失梯度问题。你可以在这里阅读更多关于消失渐变问题

理解神经网络

原文:https://towardsdatascience.com/understanding-neural-networks-a12c999f821f?source=collection_archive---------26-----------------------

神经网络产生了很多兴趣。然而,机器学习社区之外的人并不总是清楚它们适合解决什么问题,它们是什么,或者它们是如何构建的。我们将在这篇博文中讨论这些话题,旨在让所有读者都能接触到神经网络。对于那些有编程经验的人,我在最后附加了一个 Jupyter 笔记本,你可以按照它来构建你自己的神经网络。

神经网络的大多数商业上成功的应用是在监督学习领域。在监督学习中,我们试图建立一个将输入映射到输出的模型。一些例子包括:

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

我们可以将这些模型表示为接受输入并产生输出的函数:

y = F(x)

其中 x 是输入,y 是输出,F()是我们的模型。神经网络是为许多类问题建立模型(即 F())的特别有效的方法。

让我们简单地考虑一下构建许多模型的传统方法。通过将我们对微积分的理解应用于特定领域的知识,我们可以推导出描述许多现象的模型。在物理学中,这将包括牛顿运动定律,或守恒定律,即在封闭系统中质量、能量和动量守恒。这种方法让我们成功地建立了各种各样的重要模型,例如告诉我们火箭到达太空需要多少燃料的理想火箭方程,或者让我们模拟海岸波浪的 Boussinesq 方程。

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

对于那些我们对基本动力学没有直觉的问题呢?假设您正在制造一辆自动驾驶汽车,并希望使用来自仪表板摄像头的视频流来识别道路上的其他汽车。尽管事实上我们都很擅长识别汽车,但我们还不能用物理原理来描述汽车的样子。我们不能指出组成汽车的轮子、门和窗户的组合。神经网络为我们提供了一种技术,我们可以用它来有效地解决这类问题。

神经网络通过直接从数据中学习从输入到输出的映射来工作。让神经网络学习这种映射的过程称为训练。训练需要一组训练示例,这些示例是成对的输入和相应的输出(x 和 y)。为了使训练有效,我们需要一个大的数据集,通常是数万到数千万个训练样本。

在训练期间,我们优化神经网络的权重(或参数)。对于每个训练示例,我们对输入运行模型,并使用损失函数将模型输出与目标输出进行比较。使用一种称为反向传播(或简称为反向传播)的算法,我们更新网络中的所有权重,以使模型输出更接近目标输出。权重根据它们对任何不匹配的贡献程度成比例地更新。我们继续循环我们的训练集,迭代更新模型,直到性能不再增加。

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

让我们来看一个直观的神经网络的可视化。在左手边,我们有输入层。这是我们的数据,比如一个图像的像素,或者某个词在一封邮件中出现了多少次。接下来,我们有两个隐藏层。隐藏层是一个术语,我们指的是输入层和输出层之间的层。最后,我们有输出层。当输入通过神经网络的每一层时,它经历一系列的计算。隐藏层和输出层中的每个“单元”(或“神经元”)包含一组要优化的权重,这些权重控制这些计算。

设计神经网络需要选择控制网络结构和训练过程的超参数。我们使用术语超参数,因为术语参数是权重的替代。与架构相关的超参数包括层数、每层的宽度(即单元数),以及在单元中选择称为激活函数的东西。训练尤其受优化算法的选择、算法使用的学习速率以及是否实现称为正则化的技术的影响。

不幸的是,没有办法预先知道对于你的问题什么是最好的架构,或者训练那个架构的最佳参数是什么。从业者由来自社区的经验、直觉和最佳实践的组合来指导。由于这个领域发展迅速,这就需要不断跟上时代的步伐。通常,从一个问题开始的最佳方式是查看机器学习文献,看看是否有人已经解决了与你类似的问题,并将他们的解决方案作为起点。获得特定问题的解决方案通常需要查看数据、实现想法、修改模型代码和测试的多次迭代。

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

任何神经网络的一个关键问题是,它能够对以前从未见过的数据执行得有多好。因此,在训练神经网络之前,通常称为测试集的数据中会留出一小部分。在训练神经网络之后,我们比较了神经网络在训练集和测试集上的性能。一种可能的情况是,该模型即使在接受训练的数据上也表现不佳。万一,我们说模型有高偏差。当模型不能很好地拟合其观察到的数据时,超参数应该被重新评估。另一个结果是,该模型在训练集上表现良好,但在测试集上表现不佳。在这种情况下,我们说模型具有高方差,即神经网络已过度适应训练数据。相当于,网络还没有很好地学习概括数据的特征,并且可能已经记住了特定于训练集的特征。为了解决高方差问题,我们通常采用一种称为正则化的技术。在可行的情况下,获取额外的数据也是有益的。

一个重要的细节是,训练神经网络的数据必须与应用神经网络的数据相似。从统计学上来说,您希望您的训练和测试数据来自同一个分布。直观地说,这意味着如果你训练你的自动驾驶汽车只在晴天驾驶,你就不能指望它在降雪期间留在路上。在实践中,这意味着如果你开发一个神经网络来预测客户行为,你将需要随着你的产品、客户和竞争等重要因素的发展定期更新你的模型。

这些是理解如何应用神经网络以及如何与经常使用神经网络的人交流的主要概念。读完这篇文章后,你应该能够自信地运用神经网络进行对话。

总结一下关于神经网络的要点:

  1. 它们是直接从训练数据集构建从输入到输出的模型映射的有效方法。
  2. 神经网络有很多超参数,设计一个好的网络是一个迭代的过程。
  3. 您的训练和测试数据应该来自同一个发行版。

最后,我交谈过的许多软件开发人员都渴望知道神经网络的实现细节。以下 Jupyter 笔记本详细信息是根据您的需求设计的,实现了一个神经网络来识别手写数字,准确率高达 98%。我们假设您已经用 PyTorch 设置了 python 环境。如果您不知道,Anaconda 是推荐的包管理器,并且非常容易上手。

你可以下载 jupyter 笔记本在你自己的机器上运行这里,以及跟随预计算版本这里

【https://inletlabs.com】最初发表于

理解 NLP 和主题建模第 1 部分

原文:https://towardsdatascience.com/understanding-nlp-and-topic-modeling-part-1-257c13e8217d?source=collection_archive---------25-----------------------

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

Photo by Ivo Rainha from Pexels

我们探索如何通过自然语言处理提取主题帮助我们更好地数据科学

自然语言处理(NLP)是数据科学的一个前沿领域。它的终端应用有很多——聊天机器人、推荐系统、搜索、虚拟助手等等。

因此,对于初露头角的数据科学家来说,至少了解 NLP 的基础知识是有益的,即使他们的职业生涯将他们带到了一个完全不同的方向。谁知道呢,通过 NLP 提取的一些主题可能会给你的下一个模型带来额外的分析提升。今天,在这篇文章中,我们试图理解为什么主题建模是重要的,以及它如何帮助我们这些数据科学家。

主题建模,顾名思义,就是使用一种算法来发现最能描述给定文本文档的主题或主题集。你可以把每个话题想象成一个单词或者一组单词。

主题建模的目标

我第一次和 NLP 一起工作时,我对自己说:

" NLP 仅仅是 EDA(探索性数据分析)的另一种形式吗?"

这是因为在那之前,我主要是带着明确的目标构建模型——用 X 来预测或解释 y。NLP 远没有那么结构化和清晰。甚至当我最终成功运行我的主题建模算法时,掉出的主题产生的问题比答案还多。在这里,看看我对 Reddit 的 NLP 分析得出的一些主题:

Topic 10:
book read reading history series love author first people novel world finished
Topic 11:
like feel something people look seem seems stuff actually right always question
Topic 12:
story writing write character main novel chapter short plot first scene advice
Topic 13:
think wait bit better people bad true might worth thinking put sell
Topic 14:
need financial house information relevant situation invest question money making ask consider
Topic 15:
car insurance loan vehicle damage accident hit month payment driver title pay

有些主题有意义,有些没有意义。不管怎样,我应该对这些话题做些什么呢?

这就是数据科学家的生活——通常只有在你最终清理了数据和调试了代码之后,真正的工作才开始。然后,终于,是时候去寻找那些恼人的难以捉摸的见解了。这正是自然语言处理和主题建模的要点。它本身可能不是目的,但通过 NLP 提取主题让我们更接近于生成有用的东西,就像降维技术在数据科学世界的数字方面帮助我们一样。

主题建模允许我们穿过噪音(处理文本数据的高维度)并识别我们的文本数据的信号(主要主题)。

有了这个经过提炼的信号,我们就可以开始真正的工作,产生真知灼见。让我们一步一步来。

维度的诅咒

在许多数据科学应用中,高维数据被视为诅咒。如果你想更详细地了解为什么,这是我以前写的一篇关于维度诅咒的文章。但是对于那些时间紧迫的人来说,这里有一个 TLDR:

  1. 如果我们的特征比观察值多,我们就会冒模型过度拟合的风险——这通常会导致糟糕的样本外性能。
  2. 当我们有太多的特征时,观察变得更难聚类-信不信由你,**过多的维度会导致数据集中的每个观察看起来与所有其他观察等距。**因为聚类使用一种距离度量,比如欧几里德距离,来量化观察值之间的相似性,这是一个大问题。如果距离都近似相等,那么所有的观察结果看起来都一样(也一样不同),并且不能形成有意义的聚类。

什么时候我们最有可能遇到高维数据(也就是太多的特征)?文本数据。要了解原因,想象一下我们将如何对以下句子的数据进行编码,以便算法可以对其进行处理:

“那个男人穿着一件有金色星星的夹克。”

一种自然的方法是所谓的单词包方法— **单词包将一个给定的文档表示为一个不同单词及其频率的列表。**所以上面的句子应该是这样的:

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

Bag of Words Example

**因此,为了捕获给定的文档,我们需要为文档中的每个独特的单词提供一个特征。**对于给定的文档,每个特征的值是该单词在文档中出现的次数(因此对于我们之前的示例,除了“a”出现两次之外,每个单词都出现一次)。

现在想象我们的文档不是孤立的,而是一个更大的语料库的一部分。让我们首先弄清楚行话:

  • 文档是你定义的单个观察(也就是一袋单词)的任何东西。它可以是一句话,也可以是一整篇文章,甚至是一整本书——你如何定义它取决于你分析的目标。
  • 语料库是所有文本数据的总和——换句话说,是数据集中的所有文档。

如果你的语料库很大,那么你大概会有至少上万个独特的单词在里面(如果你的语料库包括很多名字的话会更多)。仅仅是试图想象那袋单词就让我头疼。试图在它上面运行算法将会非常慢,并且可能没有帮助——很可能你会有更多的特征(独特的单词)而不是观察(文档)。

NLP 来救援了

现在,让我们用一个实际的例子来看看 NLP 如何帮助筛选维度来揭示信号。假设我们想向一个朋友推荐几本书。我们将如何着手做那件事?

一种方法是问:

“嘿,说出几本你最近读过的、你真正喜欢的书。”

然后根据回复,推荐几本我们最喜欢的、与他或她列出的书最相似的书。我们刚刚描述了一个简单的推荐系统。

为了在算法上做我们刚刚描述的事情,**我们需要能够弄清楚如何衡量两本书是否相似。**我们可以把这两本书描述成一袋袋的单词,并尝试使用像欧几里德距离这样的距离度量来比较它们,但这真的有帮助吗?答案是否定的,原因有几个:

第一个原因是停用词(真正常见的词有“The”、“a”、“it”、“and”等。)—这些单词在几乎所有的文档中出现得非常频繁,它们会给我们的相似度分数注入许多无意义的噪音(知道两本书都包含许多单词“the”的实例根本没有帮助)。

而且即使我们去掉了所有的停用词,的维度诅咒仍然影响着我们。一本书里有如此多不同的单词,其中许多与书的实际主题毫无关联。因此,我们的相似性度量很有可能锁定这些干扰词中的一个——这基本上是伪相关的文本版本。例如,我们可以有一本关于消防员的书和一本关于钓鲑鱼的书,但将它们列为高度相似,因为我们的算法注意到“杆”和“引擎”这两个词在这两本书中都频繁出现。这是一个偶然的和无意义的相似性,如果我们采取行动,这将是有问题的。

主题建模

**这就是主题建模的用武之地。**主题建模是使用定量算法梳理出文本主体所涉及的关键主题的实践。它与PCA 之类的东西有很多相似之处,它识别你的特征中的关键定量趋势(解释最大的差异)。PCA 的输出是总结我们特征的一种方式——例如,它允许我们从大约 500 个特征到 10 个总结特征。这 10 个概要特征基本上是主题。

在 NLP 中,它的工作方式几乎完全相同。我们想要将我们的全部书籍和它的 100,000 个特征(不同的单词)提取成 7 个主题(我任意选择了 7 个主题)。一旦我们知道了主题以及它们由什么组成,我们就可以将语料库中的每本书从嘈杂的单词包转换成一个干净的主题加载组合:

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

We want to express each book in our corpus as a portfolio of topics

现在我们开始做生意了。使用每本书的主题负载计算的相似性分数比使用原始单词包计算的分数有用得多,因为虚假的相似性现在不太可能了。

甚至一本书的描述性统计在“主题空间”中也比在“词汇袋空间”中更有意义——我们现在可以说一本书在数据科学主题上负载很重,而不是去纠结为什么在我们的词汇袋中最频繁出现的两个词是“森林”和“随机”。

思维练习

在前面的例子中,我们决定将我们的书表达为 7 个主题的负载。但是我们可以选择任何数量的主题(选择主题数量更多的是艺术而不是科学,并且很大程度上取决于你的数据——因此充分了解你的数据是至关重要的)。10 也行,100 也行。但是想想随着我们不断增加主题的数量,每个主题变得越来越细,算法开始失去看到全局的能力,会发生什么。****

例如,假设我们有三本书——第一本是法国旅游指南,第二本是中国旅游指南,第三本是中国城市化的经济史。在我们的 7 主题 NLP 模型中,我们将第 1 本书和第 2 本书归类为旅游书籍(并将其评分为彼此相似),将第 3 本书归类为商务书籍(并将其评分为与其他书籍不相似)。

有 5000 个主题,我们可以将第一本书归类为“骑行乡村法国”,第二本书归类为“旅游城市中国”,第三本书归类为“历史城市中国”。现在还不太清楚我们该如何给它们打分——算法可能只是举手表决,将所有 3 本书评为相同/不同。这不一定是错误的(取决于应用程序)但它确实显示了高维数据(5000 个主题肯定是)会以意想不到的方式引入干扰,扭曲我们的分析。

主题建模的一般经验法则是,只要你的最终应用程序要求你做的那样具体,不要再多了。

下次

**我意识到,到目前为止,我对我们实际上是如何提出我们的主题一直含糊其辞。那是因为我想充分探索为什么 NLP 很重要。下一次,我将(用 Python 代码)介绍两种主题建模算法— **LDA(潜在狄利克雷分配)NMF(非负矩阵分解)

在那之前,感谢阅读,干杯!

更多数据科学与分析相关帖子由我:

T5【维度之祸】T6

了解 PCA

数据科学家的商业战略

用 Python 进行业务模拟

理解贝叶斯定理

理解朴素贝叶斯分类器

二项分布

理解 NLP 单词嵌入—文本矢量化

原文:https://towardsdatascience.com/understanding-nlp-word-embeddings-text-vectorization-1a23744f7223?source=collection_archive---------2-----------------------

处理自然语言文本并从给定的单词中提取有用的信息,使用机器学习和深度学习技术的句子需要将字符串/文本转换为一组实数(向量)——单词嵌入。

单词嵌入或单词向量化是 NLP 中的一种方法,用于将单词或短语从词汇表映射到相应的实数向量,该向量用于查找单词预测、单词相似性/语义。

将单词转换成数字的过程称为矢量化。

单词嵌入在以下用例中有所帮助。

  • 计算相似的单词
  • 文本分类
  • 文档聚类/分组
  • 用于文本分类的特征提取
  • 自然语言处理。

在将单词转换成向量后,我们需要使用一些技术如欧氏距离余弦相似度来识别相似的单词。

为什么余弦相似

计算常用词或欧几里德距离是用于匹配相似文档的一般方法,其基于计算文档之间的常用词的数量。

即使常用词的数量增加,但文档谈论不同的主题,这种方法也不起作用。为了克服这个缺陷,使用“余弦相似度”方法来寻找文档之间的相似度。

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

Figure 1: Cosine Distance. Ref: https://bit.ly/2X5470I

在数学上,它测量两个向量(item1,item2)在 N 维向量空间中投影的角度的余弦值。余弦相似度的优点是,即使欧氏距离是距离,它也能预测文档的相似度。

“角度越小,相似度越高”——余弦相似度。

让我们看一个例子。

  1. 朱莉爱约翰胜过琳达爱约翰
  2. 简爱约翰胜过朱莉爱约翰
John  2   2
Jane  0   1
Julie 1   1
Linda 1   0
likes 0   1
loves 2   1
more  1   1
than  1   1

这两个向量是,

Item 1: [2, 0, 1, 1, 0, 2, 1, 1] Item 2: [2, 1, 1, 0, 1, 1, 1, 1]

两个向量值之间的余弦角(角度越小)为 0.822,最接近 1。

现在我们来看看把句子转换成向量的方法都有哪些。

来自预训练方法的单词嵌入,

  • Word2Vec —来自谷歌
  • 快速文本—来自脸书
  • 手套——来自斯坦福

在这个博客中,我们将看到最流行的嵌入式架构 Word2Vec。

Word2Vec

Word 2 vec——由托马斯·米科洛夫和谷歌的一个研究团队在 2013 年开发的向量空间中的单词表示。

word 2 vec 技术产生的原因:

大多数 NLP 系统将单词视为原子单位。现有系统的局限性在于没有单词之间相似性的概念。此外,该系统适用于较小、较简单的数据,并且在只有几十亿数据或更少的数据上表现优异。

为了用具有复杂模型的更大数据集进行训练,现代技术使用神经网络架构来训练复杂的数据模型,并且对于具有数十亿单词和数百万单词词汇的巨大数据集来说表现更好。

这种技术有助于测量结果矢量表示的质量。这适用于相似的单词,这些单词倾向于接近具有多种相似度的单词。

**句法规则:**指符合语法的句子纠正。

**语义规律:**指词汇符号在那个结构中排列的意义。

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

Figure 2: Five Syntactic and Semantic word relationship test set. Ref: https://arxiv.org/pdf/1301.3781.pdf

所提出的技术被发现,单词表示的相似性超出了句法规则,并且对于单词向量的代数运算惊人地有效。举个例子,

向量(“国王”)—向量(“男人”)+向量(“女人”)=词(“女王”)

其中“Queen”是单词表示的最接近的结果向量。

以下单词表示的模型架构的目标是最大化准确性和最小化计算复杂度。这些模型是,

  • 前馈神经网络语言模型(NNLM)
  • 递归神经网络语言模型

上述所有模型都使用随机梯度下降反向传播进行训练。

前馈神经网络语言模型(NNLM)

NNLM 模型由输入、投影、隐藏和输出层组成。由于投影层中的值密集,这种架构对于投影和隐藏层之间的计算变得复杂。

递归神经网络语言模型

与浅层神经网络相比,RNN 模型可以有效地表示更复杂的模式。RNN 模型没有投影图层;只有输入、隐藏和输出层。

应该使用名为 DistBelief 的大规模分布式框架为庞大的数据集训练模型,这将给出更好的结果。在 Word2Vec 中提出了两个新的模型,

  • 连续词袋模型
  • 连续跳格模型

使用分布式架构,尽量降低计算复杂性。

连续词袋模型

我们把这个模型称为 CBOW。CBOW 架构类似于前馈 NNLM,其中非线性隐藏层被移除,并且投影层被所有单词共享;因此所有的单词都被投射到相同的位置。

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

Figure 3: CBOW architecture. Ref: https://bit.ly/2NXbraK

CBOW 架构基于上下文预测当前单词。

连续跳格模型

跳格模型类似于 CBOW。唯一的区别是,它不是根据上下文来预测当前单词,而是试图根据同一句子中的另一个单词来最大化一个单词的分类。

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

Figure 4: Skip-gram architecture. Reference — https://bit.ly/2NXbraK

给定当前单词,跳格结构预测周围的单词。

Word2Vec 架构实现— Gensim

Gensim 库将使我们能够通过在自定义语料库上训练我们自己的 word2vec 模型来开发单词嵌入,或者使用跳格算法的 CBOW。

实现库可以在这里找到——https://bit.ly/33ywiaW。

结论

  • 自然语言处理需要将文本/字符串转换成实数,称为单词嵌入或单词向量化
  • 一旦单词被转换为向量,余弦相似性是用于实现大多数使用 NLP、文档聚类、文本分类、基于句子上下文预测单词的用例的方法
  • 余弦相似性—“角度越小,相似性越高
  • 最著名的架构,如 Word2Vec、Fasttext、Glove,有助于转换单词向量,并利用余弦相似性作为单词相似性特征
  • NNLM,RNNLM 优于巨大的词数据集。但是计算复杂度是一个很大的开销
  • 为了克服计算复杂性,Word2Vec 使用 CBOW 和 Skip-gram 结构,以便最大化精度和最小化计算复杂性
  • CBOW 架构基于上下文预测当前单词
  • 给定当前单词,跳格结构预测周围的单词
  • 详细解释了关于 Word2Vec 架构的论文。

参考资料:

了解对象检测

原文:https://towardsdatascience.com/understanding-object-detection-9ba089154df8?source=collection_archive---------7-----------------------

内部 AI

从物体探测的历史到著名的 fast-RCNN 的内部工作原理

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

Object detection combines the task of object localization and classification. Source

在这篇文章中,我想给你一个对象检测器的历史概述,并解释如何发展到目前最先进的检测器架构。此外,我将详细介绍更快的 R-CNN 的内部工作原理,因此它被广泛使用,也是 Tensorflow 对象检测 API 的一部分。

物体探测器简史

目标检测结合了目标分类和定位的任务。当前的对象检测器可以分为两类:将确定对象的位置和它们的分类的任务分开的网络,其中更快的 R-CNN 是最著名的网络之一,以及立即预测边界框和类别分数的网络,其中 YOLO 和 SSD 网络是著名的架构。

第一个用于物体检测的深度神经网络是 over feet[1]。他们介绍了一种使用 CNN 的多尺度滑动窗口方法,并表明对象检测也改善了图像分类。他们很快就被 R-CNN:具有 CNN 特征的区域[2]。作者提出了一个模型,该模型使用选择性搜索通过将相似像素合并到区域中来生成区域提议。每个区域都被输入到一个 CNN 中,产生一个高维特征向量。这个向量然后被用于最终的分类和包围盒回归,如图 1 所示。

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

Figure 1 The standard architecture of a R-CNN network consisting of a region proposal method, mostly selective-search, followed by a CNN for each proposal. The final classification is done with an SVM and a regressor.

它比 Overfeat 网络好得多,但也非常慢,因为使用选择性搜索生成提议非常耗时,而且需要通过 CNN 提供每一个提议。一种更复杂的方法,快速 R-CNN [3],也通过选择性搜索生成区域建议,但通过 CNN 提供整个图像。区域提案通过 ROI pooling 直接汇集在特征图上。汇集的特征向量被输入到一个完全连接的网络中进行分类和回归,如图 2 所示。类似于 R-CNN,快速 R-CNN 通过选择性搜索产生区域建议。

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

Figure 2: The standard architecture of a Fast R-CNN network. The region proposals are generated by selective-search, but pooled directly on the feature map, followed by multiple FC layers for final classification and bounding box regression.

快速 R-CNN [4]通过提出一种新颖的区域提议网络解决了这一问题,该网络与快速 R-CNN 架构相融合,大大加快了进程,我们将在下一节对此进行更详细的解释。另一种检测图像中对象的方法是 R-FCN [5],区域完全卷积网络,它使用位置敏感得分图而不是预区域子网。

YOLO [6]网络彻底改变了目标探测网络的设计。它遵循与上述模型完全不同的方法,并且能够立即预测类分数和边界框。所提出的模型将图像分成网格,其中每个单元预测具有相应边界框坐标的对象的置信度得分。这使得 YOLO 能够进行实时预测。作者还发布了另外两个版本,YOLO9000 [7]和 YOLOv2,前者能够预测 9000 多个类别,后者能够处理更大的图像。另一个可以同时预测类别和包围盒的网络是单次检测器 SSD [8]。它与 YOLO 相当,但每个网格单元使用多个纵横比和更多的卷积层来提高预测。

更快的 R-CNN

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

Figure 3: The standard architecture of a Faster R-CNN network, where the region proposal are generated using a RPN, that works directly on the feature map. The last layers are fully connected for classification and bounding box regression.

快速 R-CNN 和 R-CNN 的主要问题是区域提议的时间和资源密集型生成。快速 R-CNN 通过融合快速 R-CNN 和区域提议网络(RPN)解决了这一问题,如图 3 所示。RPN 使用 CNN 的输出作为输入,并生成区域提议,其中每个提议由对象性分数以及对象的位置组成。RPN 可以与检测网络联合训练,从而加快训练和推断时间。更快的 R-CNN 比快速 R-CNN 快 34 倍。在下面的段落中,更详细地解释了更快的 R-CNN 的每个步骤。

主播

更快的 R-CNN 的目标是检测作为矩形边界框的对象。这些矩形可以有不同的大小和比例。当以前的工作试图考虑不同大小和比例的对象时,他们要么创建图像金字塔,其中考虑图像的多个大小,要么创建过滤器金字塔,其中应用多个不同大小的卷积过滤器[1,9,10]。这些方法对输入图像起作用,而更快的 R-CNN 对 CNN 输出的特征图起作用,因此创建了锚的金字塔。锚点是一个固定的边界框,由中心点、特定的宽度和高度组成,并引用原始图像上的边界框。从特征图上的滑动窗口中为每个位置生成一组锚,该组锚由大小和比例的不同组合的多个锚组成。图 4 显示了一个例子,其中大小为 3x3 的窗口生成了 k 个锚点,其中每个锚点在原始图像中具有相同的中心点。这是可能的,因为卷积运算对于平移是不变的,并且可以将特征图上的位置计算回图像中的区域。

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

Figure 4: Generation of k anchors per position by sliding a 3x3 window over the feature map.

地区提案网

RPN 是一个完全卷积的网络,直接作用于特征地图,以生成区域建议,如图 5 所示。它将锚点作为输入,预测客观分数并执行盒回归。前者是锚作为对象或背景的可能性,后者对应于从锚到实际框的偏移。因此,对于 k 主播,RPN 预测 2 个 k 分数和 4 个 k 盒子回归值。锚的初始数量不需要小于来自任何其他区域提议方法的锚的初始数量,因为 RPN 通过仅考虑具有高客观性分数的区域来显著减少锚的数量。训练 RPN 并不简单。由于这是一种监督学习方法,每个锚点必须被标记为前景或背景。因此,每个锚点都必须通过计算它们在并集上的交集(IoU)来与每个地面真实对象进行比较。如果存在具有大于 0.7 的 groundtruth 对象的 IoU,则锚被认为是前景和正的。如果每个接地真值盒的 IoU 低于 0.3,则认为它是背景和负的。IoU 在 0.3 和 0.7 之间的所有锚都被忽略。积极和消极建议的分布是非常不平衡的,因为每个基础事实箱的消极建议比积极建议多得多。因此,具有固定数量阳性和阴性的迷你批次被取样用于训练过程。如果没有足够多的积极建议,则该批将被填入在各自的基础事实框中具有最高 IoU 的建议。如果仍然没有足够的积极建议,就会用消极的建议来填补。RPN 采用多任务损失同时优化两个目标。对于分类,使用二元交叉熵损失,对于包围盒回归,使用平滑 L1 损失。区域建议网络的架构,这是一个完全卷积的网络。

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

Figure 5: Standard architecture of a region proposal network

回归损失仅针对正锚点进行计算。在预测之后应用非最大抑制(NMS ),以移除与其他区域提议具有高于某个值的 IoU、但是具有较低的客观性分数的区域提议。NMS 之后,前 N 个方案被选为最终区域方案。

利息集中区域

RPN 之后的下一步是使用区域建议来预测对象类别和定位。与 R-CNN 的方法不同,在 R-CNN 中,每个建议都是通过分类网络提供的,更快的 R-CNN 利用特征图来提取特征。因为分类器期望固定大小的输入,所以从特征图中为每个区域提议提取固定大小的特征。在现代实现中,特征地图被区域提议裁剪,并被调整到固定大小。Max pooling 随后提取最显著的特征,为每个区域提议确定一个固定的大小,然后输入到最终阶段。

分类和回归

快速 R-CNN 的最后一步是对提取的特征进行分类。因此,合并的要素被展平并输入到两个完全连接的图层,这两个图层处理分类和回归。分类层输出 N+1 个预测,N 个类中的每一个都有一个预测,外加一个背景类。回归层输出 4N 个预测,其中每个预测代表 N 个类中每个类的回归边界框。R-CNN 模块的培训与 RPN 模块的培训相当。IoU 大于 0.5 的每个 groundtruth 框都分配有一个建议。IoU 在 0.1 和 0.5 之间的提案被视为负面和背景,IoU 低于 0.1 的提案被忽略。培训期间的随机抽样创建了一个包含 25%前景和 75%背景建议的小批量。分类损失是使用小批量中所有建议的多类交叉熵损失,而定位损失仅使用正建议。为了消除重复,应用基于类的 NMS。最终输出是概率高于特定阈值(通常为 0.5)的所有预测对象的列表。

结论

有许多不同的方法来检测图像中的对象。这篇博文展示了从使用选择性搜索生成区域建议的慢速网络到更复杂的网络(如更快的 R-CNN)的历史。如果你想从物体检测入手,我推荐 Tensorflow 的物体检测 API,它主要以更快的 R-CNN 和 SSD 架构为特色。感谢阅读!

来源

[1] P. Sermanet,D. Eigen,X. Zhang,M. Mathieu,R. Fergus,Y. LeCun, Overfeat:使用卷积网络的集成识别、定位和检测CoRR ,第 abs/1312.6229 卷,2014 年。

[2] R. B. Girshick,J. Donahue,T. Darrell 和 J. Malik,精确对象检测和语义分割的丰富特征层次2014 年 IEEE 计算机视觉和模式识别会议,第 580–587 页,2014 年。

[3] R. B. Girshick, Fast r-cnn ,2015 IEEE 计算机视觉国际会议(ICCV),第 1440–1448 页,2015。

[4] S. Ren,K. He,R. B. Girshick,和 J. Sun,更快的 r-cnn:用区域提议网络实现实时对象检测IEEE 模式分析和机器智能汇刊,第 39 卷,第 1137-1149 页,2015 年。

[5]戴,李,何,孙,R-fcn: 基于区域的全卷积网络目标检测,NIPS*,2016。*

[6] J. Redmon,S. K. Divvala,R. B. Girshick,a .法尔哈迪,你只看一次:统一的、实时的物体检测2016 年 IEEE 计算机视觉和模式识别大会(CVPR) ,第 779–788 页,2016 年。

[7] J .雷德蒙和 a .法尔哈迪, Yolo9000:更好、更快、更强,2017 年 IEEE 计算机视觉和模式识别大会(CVPR),第 6517–6525 页,2017。

[8] W. Liu,D. Anguelov,D. Erhan,C. Szegedy,S. E. Reed,C.-Y. Fu,A. C. Berg, Ssd:单次多盒探测器,载于2016 年。**

[9] D. A. Forsyth,基于区分性训练的部件模型的物体检测IEEE 计算机,第 47 卷,第 6–7 页,2014。

[10] K. He,X. Zhang,S. Ren,和 J. Sun,用于视觉识别的深度卷积网络中的空间金字塔池IEEE 模式分析与机器智能汇刊,第 37 卷,第 1904–1916 页,2014 年。

理解部分自相关

原文:https://towardsdatascience.com/understanding-partial-auto-correlation-fa39271146ac?source=collection_archive---------6-----------------------

它是什么,如何计算,何时使用

本文将部分自相关置于透镜之下。

我们将回顾推动创建PartialAuto-Cor relationFfunction(PACF)的概念,我们将看到这些概念如何导致部分自相关定义和 PACF 公式的发展。

我将根据基本原理演示如何计算 PACF,并将结果与由*stats models . TSA . stat tools . pacf()*返回的值进行比较。

最后,我们将了解如何在时间序列预测中使用 PACF。

为 PACF 奠定基础:自回归时间序列

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

Bouncing ball in strobe light

过去影响现在的现象很多。昨天的事件可以用来预言今天将会发生什么。当这种现象被表示为时间序列时,它们被认为具有自回归特性。在自回归时间序列中,当前值可以表示为前一个值、前一个值等的函数。换句话说,当前值与来自同一时间序列的先前值相关联。

如果时间序列是自回归的,通常情况下,当前值的预测可以计算为仅前一值和一个常数的线性函数,如下所示:

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

(Image by Author)

这里的 T_i 是在第和第时间步由方程预测的值。 Beta0 是模型的 Y 截距,它对预测应用恒定量的偏差。它还规定了如果前一时间步 T_(i-1) 的值恰好为零,那么 T_i 的预测值是多少。β1告诉我们 T_i 改变 w.r.t. T_(i-1) 的速率。

这个简单等式背后的关键假设是, T_(i-1) 中的方差能够解释时间序列中比 T_(i-1) 更老的所有值所表示的所有方差。这就好像 T_(i-1) 捕获了与比它自身更老的值相关联的所有信息。

但是如果这个假设不成立呢?如果 T_(i-1) 中的方差不能解释 T_(i-2) 中包含的所有方差怎么办?在这种情况下,上述等式将无法将来自 T_(i-2) 的这部分未解释的方差输入到 T_i 中,从而导致 T_i 的预测出现偏差。

幸运的是,很容易解决这个问题,在上面的等式中添加一项,如下所示:

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

(Image by Author)

在这个等式中,额外的项β2 * T (I-2)*试图捕捉包含在比 *T(i-1) 更老的值中的方差,该方差不能由 T_(i-1) 中的方差来解释。它将这个余额数量的信息直接输入到今天的值 T_i 的预测中。

背景建立后,让我们建立部分自相关函数的定义和公式。

构建 PACF 的定义

让我们复制上面的等式以供参考:

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

(Image by Author)

了解 T_(i-2) 中方差的余额在预测今天的值 T_i 中有多重要是非常有用的。为什么?因为它告诉我们是否需要在我们的 T_i 预测模型中添加 T_(i-2) 作为变量。如果 T_(i-2) 中的余额方差在统计上不显著,我们可以有把握地假设,比 T_(i-2) 更早的值中的所有方差要么对预测今天的值不显著,要么它们的显著性已经在 T_(i-1) 中被捕获。无论哪种方式,它都给了我们一个理由,让我们回到更早的更简单的方程,它只包含 T_(i-1)

那么我们如何发现 T_(i-2) 中的这个差额量在预测今天的价值 T_i 中有多重要呢?很简单,我们计算两者之间的相关系数。等等,但是 T_i 不也和 T_(i-1) 相关吗?毕竟这是上面两个方程的全部基础!当然是了。因此,我们实际上想要找出的是以下两个变量之间的相关性:

变量 I:T_(i-1) 中的方差解释以外的 T_i 中的方差,以及

**变量 II:T _(I-2)中的方差是未用 T_(i-1) 中的方差解释的量。

这种相关性称为 T_iT_(i-2)部分自相关

变量 II 的定义似乎有悖直觉。昨天的价值如何解释前天的价值?为了理解这一点,回想一下在自回归时间序列中,前天的值中的一些信息被结转到昨天的值中。这个事实——以一种听起来很奇怪的方式——使得昨天的价值成为前天价值的预测器!

对上述论证进行归纳,得出 PACF 的如下定义:

T _ I 与其自身的 k 滞后版本即 T_(i-k)的部分自相关是以下两个变量之间的相关:

**变量 1:**T _ I 中未被 T_(i-1)、T_(i-2)…T_(i-k+1)中的方差所解释的方差的量,并且

**变量 2:**T (I-k)中未被 T(i-1),T_(i-2)…T_(i-k+1)中的方差所解释的方差的量。

为 PACF 制定方案

让我们依靠我们的滞后=2 的例子来发展 PACF 公式。稍后,我们将把它推广到 LAG=k。要知道 T_(i-2) 中有多少方差没有被 T_(i-1) 中的方差解释,我们做两件事:

  1. 步骤 1: 我们用线性回归模型(即直线)拟合 T_iT_(i-1) 的分布。这个线性模型将让我们从 T_(i-1) 预测 T_i 。从概念上讲,这个线性模型允许我们将 T_i 的方差解释为 T_(i-1) 的方差的函数。但是像所有最佳拟合的模型一样,我们的模型不能解释 T_i 的所有变化。这个事实把我们带到了第二步。
  2. **第二步:**在这一步中,我们计算在第一步中建立的线性模型的残差。残差是 T_i 的观测值与模型预测值之差。我们对 T_i 的每个值进行残差计算,以获得残差的时间序列。这个残差时间序列给了我们想要的东西。它给出了 T_i 中的方差,这无法用 T_(i-1) 中的方差来解释,当然还有一些噪声。

为了计算相关性中的第二个变量,即 T_(i-2) 中无法用 T_(i-1) 中的方差来解释的方差,我们在 T_(i-2)T_(i-1) 的上下文中执行上面的步骤 1 和 2,而不是分别在 T_iT_(i-1) 的上下文中执行。这给了我们寻找变量 2 的残差序列。

最后一步是将皮尔逊相关系数公式应用于这两个残差时间序列。

这是 PACF(T_i,k=2)的结果公式:

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

(Image by Author)

T_i|T_(i-1) 是我们在将线性模型拟合到 T_iT_(i-1) 的分布后,从步骤 1 和 2 中创建的残差时间序列。

T_(i-2)|T_(i-1) 是我们在将线性模型拟合到 T_(i-2)T_(i-1) 的分布后,从步骤 1 和 2 中创建的第二个残差时间序列。

等式的分子计算这两个剩余时间序列之间的协方差,而分母使用各自的标准偏差标准化协方差**。**

所以你有它。这就是我们如何计算滞后=2 的 PACF。

PACF 的一般公式(X,lag=k)

在一般情况下,早于一个或两个期间的值也会对当前期间值的预测产生直接影响。因此,可以将预测 T_i 的自回归方程的一般形式写为:

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

The general auto-regression equation (Image by Author)

我们同样可以推广导致发展滞后=2 的 PACF 公式的论点。PACF 在滞后= k 时的公式为:

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

Formula for PACF at lag=k (Image by Author)

T_i|T_(i-1),T_(i-2)…T_(i-k+1) 是对 T_(i-1),T_(i-2)…T_(i-k+1) 拟合多元线性模型得到的残差时间序列,用于预测 T_i 。它代表在去除了 T_(i-1),T_(i-2)…T_(i-k+1)的影响后,在 T_i 中的剩余方差。

T_(i-k)|T_(i-1),T_(i-2)…T_(i-k+1) 是用多元线性模型拟合 T_(i-1),T_(i-2)…T_(i-k+1) 得到的残差时间序列,用于预测 T(i-k) 。它代表去除 T_(i-1),T_(i-2)…T_(i-k+1)的影响后,在 T_(i- k 中的剩余方差。

通过一个例子

让我们说到做到。我们将手动曲柄使用上述步骤在真实世界的时间序列上推出 PACF。当然,在实践中,你不必从第一原理计算 PACF。但是知道如何从头开始会让你对 PACF 的机器有一个有价值的了解。

我们将使用的真实世界时间序列是南方振荡数据集,它可以用来预测厄尔尼诺或拉尼娜事件。

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

Data source: NOAA (Image by Author)

我们将从设置导入开始,并将数据读入 pandas 数据帧。

**import** pandas **as** pd
**from** sklearn import linear_model
**import** matplotlib.pyplot **as** pltdf = pd.**read_csv**('southern_osc.csv', header=0, infer_datetime_format=True, parse_dates=[0], index_col=[0])

接下来,我们将向包含数据的滞后=1 和滞后=2 版本的数据框添加两列。

df['T_(i-1)'] = df['T_i'].**shift**(1)df['T_(i-2)'] = df['T_i'].**shift**(2)#drop the top two rows as they contain NaNs
df = df.**drop**(df.index[[0,1]])

现在,让我们在 T_iT_(i-1) 上拟合一个线性回归模型,并将模型的预测作为一个新列添加回数据框中。

lm = linear_model.**LinearRegression**()df_X = df[['T_(i-1)']] #Note the double brackets! [[]]df_y = df['T_i'] #Note the single brackets! []model = lm.**fit**(df_X,df_y)df['Predicted_T_i|T_(i-1)'] = lm.**predict**(df_X)

接下来,让我们创建与该模型预测相对应的残差时间序列,并将其添加到数据框中。该时间序列为我们提供了计算滞后=2 时 T_i 的 PACF 所需的两个数据序列中的第一个。

#Observed minus predicted
df['Residual_T_i|T_(i-1)'] = df['T_i'] - df['Predicted_T_i|T_(i-1)']

让我们重复上述过程来计算第二个残差时间序列,这一次使用列: T_(i-2)T_(i-1)

lm = linear_model.**LinearRegression**()df_X = df[['T_(i-1)']] #Note the double brackets! [[]]df_y = df['T_(i-2)'] #Note the single brackets! []model = lm.**fit**(df_X,df_y)df['Predicted_T_(i-2)|T_(i-1)'] = lm.**predict**(df_X)#Residual = Observed - predicted
df['Residual_T_(i-2)|T_(i-1)'] = df['T_(i-2)'] - df['Predicted_T_(i-2)|T_(i-1)']

最后,让我们将皮尔逊 r 公式应用于两个残差时间序列,以获得滞后=2 时的 PACF 值。

print(df.**corr**(method='pearson')['Residual_T_i|T_(i-1)']['Residual_T_(i-2)|T_(i-1)'])
#prints: 0.29612303554627606

如前所述,在实践中我们作弊!:=)像这样:

**from** statsmodels.tsa.stattools **import** pacfprint(**pacf**(df['T_i'], nlags=2)[2])
#prints: 0.2996545841351261

以下是完整的代码片段:

这里是链接到南方涛动数据集。

如何在时间序列预测中使用 PACF

您可以在以下方面非常有效地利用 PACF:

  1. 确定在自回归模型的预测方程中要包括多少个过去的滞后。这被称为模型的自回归(AR)阶。
  2. 确定或验证在季节性时间序列的基于移动平均的预测模型的预测方程中包括多少季节性滞后。这就是所谓的季节性移动平均线(SMA)的顺序过程。

让我们看看如何用 PACF 计算这些项。

利用 PACF 确定 AR 过程的阶数

让我们绘制不同滞后的南方涛动数据集的 PACF:

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

PACF plot for the Southern Oscillations data set (Image by Author)

这个情节引出了以下几点:

  1. 滞后 0 时的 PACF 为 1.0。情况总是如此。一个值总是与自身 100%相关!
  2. 滞后 1 时的 PACF 为 0.62773724。该值只是滞后 0 值和滞后 1 值之间的常规自相关。
  3. 滞后 2 时的 PACF 值为 0.29965458,这与我们手动计算的值基本相同。
  4. 在滞后 3 时,该值刚好在 95%置信区间之外。它可能重要,也可能不重要。

因此,南方涛动数据集具有 AR(2),或者可能具有 AR(3)特征。

下面是生成图表的代码片段:

**import** pandas **as** pd
**from** statsmodels.graphics.tsaplots **import** plot_pacf
**from** statsmodels.tsa.stattools **import** pacf
**import** matplotlib.pyplot **as** pltdf = pd.**read_csv**('southern_osc.csv', header=0, infer_datetime_format=True, parse_dates=[0], index_col=[0])plot_pacf(df['T_i'], title='PACF: Southern Oscillations')print(pacf(df['T_i']))

使用 PACF 确定形状记忆合金过程的顺序

考虑下面的季节性时间序列图。

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

Average monthly max temperature in Boston,MA from 1998- 2019 (Image by Author)

人们很自然地会认为去年一月份的最大值与今年一月份的最大值相关联。所以我们猜测季节周期是 12 个月。基于这一假设,让我们将 12 个月的单一季节差异应用于该时间序列,即我们将得出一个新的时间序列,其中每个数据点是原始时间序列中相隔 12 个周期的两个数据点的差异。这是季节性差异时间序列:

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

Seasonally differenced time series (Image by Author)

接下来,我们计算这个季节性差异时间序列的 PACF。这是 PACF 的地图:

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

PACF values of the seasonally differenced time series at various lags (Image by Author)

PACF 图显示了 12、24、36 个月的显著部分自相关,从而证实了我们的猜测,即季节周期为 12 个月。此外,这些尖峰为负的事实指向 SMA(1)过程。SMA(1)中的“1”对应于原始序列中的周期 12。因此,如果您要为此时间序列构建一个季节性 ARIMA 模型,您应该将 ARIMA 的季节性部分设置为(0,1,1)12。第一个“1”对应于我们应用的单一季节差异,第二个“1”对应于我们注意到的 SMA(1)特征。

以下是生成这些图的代码片段:

**import** pandas **as** pd
**from** statsmodels.graphics.tsaplots **import** plot_pacf
**import** matplotlib.pyplot **as** plt #load the data set
df = pd.**read_csv**('data\\boston_daily_wx_1998_2019.csv', header=0, infer_datetime_format=True, parse_dates=[0], index_col=[0])#plot it
df['Monthly Average Maximum'].**plot**()
plt.**show**()#created the LAG 12 column
df['T_(i-12)'] = df['Monthly Average Maximum'].**shift**(12)#create the differenced column
df['T_i-T_(i-12)'] = df['Monthly Average Maximum'] - df['T_(i-12)']#plot the differenced series
df['T_i-T_(i-12)'].**plot**()
plt.**show**()#drop the first 12 rows as they contain NaNs in the differenced col
df = df[12:]#plot the pacf of the differenced column
**plot_pacf**(df['T_i-T_(i-12)'], title='PACF: Seasonal Time Series')
plt.**show**()

这里是链接到数据集。

所以你有它。PACF 是一个强大的工具,是预测者工具箱中的必备工具。既然你已经知道了它的工作原理和如何解释结果,请一定要使用它,尤其是在构建 AR、MA、ARIMA 和季节性 ARIMA 模型时。

预测快乐!

相关阅读

[## 相关性背后的直觉

两个变量相关到底意味着什么?我们将在本文中回答这个问题。我们还将…

towardsdatascience.com](/the-intuition-behind-correlation-62ca11a3c4a)

如果你喜欢这篇文章,请关注我的Sachin Date获取回归、时间序列分析和预测主题的技巧、操作方法和编程建议。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值