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

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

高斯混合模型聚类算法讲解

原文:https://towardsdatascience.com/gaussian-mixture-models-d13a5e915c8e?source=collection_archive---------0-----------------------

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

https://www.pexels.com/photo/macbook-pro-beside-spiral-notebook-669616/

高斯混合模型可以像 k-means 一样用于聚类未标记的数据。然而,与 k-均值相比,使用高斯混合模型有几个优点。

首先,k 均值不考虑方差。方差是指钟形曲线的宽度。

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

在二维中,方差(确切地说是协方差)决定了分布的形状。

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

思考k-均值模型的一种方式是,它在每个集群的中心放置一个圆(或者,在更高维度中,一个超球体),半径由集群中最远的点定义。

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

当你的数据是循环的时候,这很好。然而,当您的数据呈现不同的形状时,您最终会得到这样的结果。

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

相比之下,高斯混合模型甚至可以处理非常长方形的集群。

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

k-means 和高斯混合模型之间的第二个区别是前者执行硬分类,而后者执行软分类。换句话说,k-means 告诉我们什么数据点属于哪个聚类,但不会给我们提供给定数据点属于每个可能的聚类的概率。

在调用predict函数时,模型会将每个数据点分配给其中一个聚类。

gmm.predict(X)

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

另一方面,我们可以调用predict_proba函数来返回一个数据点属于每个 K 聚类的概率。

gmm.predict_proba(X)

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

高斯混合模型一览

顾名思义,高斯混合模型涉及多个高斯分布的混合(即叠加)。为了便于解释,假设我们有三个由三个不同类别的样本组成的分布。

蓝色高斯表示构成下层阶级的人的教育水平。红高斯表示构成中产阶级的人的教育水平,绿高斯表示构成上层阶级的人的教育水平。

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

在不知道哪些样本来自哪个类的情况下,我们的目标是使用高斯混合模型将数据点分配到适当的聚类中。

训练完模型后,我们理想的结果是在同一轴上有三个分布。然后,根据给定样本的教育水平(它在轴上的位置),我们将它放在三个类别中的一个。

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

每个分布都乘以一个权重π,以说明我们在每个类别中没有相同数量的样本。换句话说,我们可能只包括了 1000 名来自上层阶级的人和 10 万名来自中产阶级的人。

因为我们处理的是概率,所以权重加起来应该是 1。

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

如果我们决定添加另一个维度,比如孩子的数量,那么,它可能看起来像这样。

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

高斯混合模型算法

对于那些对数学不感兴趣的人,我提前向你们道歉,因为下一节很重。

假设我们想知道第 I 个样本来自高斯k概率是多少。我们可以这样表达:

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

其中θ代表每个高斯的平均值、协方差和权重。

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

你也可能会碰到写成π的方程。这不要和每个高斯相关的权重混淆(我知道的混淆)。

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

接下来,我们将观察到来自高斯 K 的数据点的可能性表示为:

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

后者有时候是这样写的(我相信 N 来源于 N 正规分布):

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

假设我们有一个高斯分布,横轴是一个人可能得到的不同智商分数,从最低到最高。我们可以通过从沿着 x 轴的位置到曲线画一条垂直线,然后查看 y 轴上相应的值,来找出个人智商为 120 的可能性有多大。任意一点的 y 值都等于上面的等式。

如果我们想知道在考虑所有不同分布的情况下观察样本 i 的可能性,我们只需对观察样本的可能性求和,假设样本来自每个可能的高斯分布。

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

换句话说,我们从数据集中选取一个样本(行),查看单个特征(即教育水平),在 x 轴上绘制其位置,并对每个分布的相应 y 值(可能性)求和。

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

为了将此扩展到我们数据集中的所有样本。我们假设观察一个样本的可能性独立于所有其他样本,然后我们可以简单地将它们相乘。

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

我们可以使用之前看到的命名法重写该等式,如下所示:

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

通常情况下,我们采用可能性的对数,因为对数中两个数字的乘积等于其组成部分的对数之和,并且数字相加比相乘更容易。

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

期望最大化算法

我们还需要解决这样一个事实,即我们需要每个高斯的参数(即方差、均值和权重)以便对我们的数据进行聚类,但是我们需要知道哪个样本属于哪个高斯,以便估计那些完全相同的参数。

这就是期望最大化发挥作用的地方。在高层次上,期望值最大化算法可以描述如下:

  1. 从随机高斯参数(θ)开始
  2. 重复以下步骤,直到我们收敛:

a) 期望步骤:计算 p(zi = k | xi,θ)。换句话说,样本 i 看起来像是来自聚类 k 吗?

b) 最大化步骤:更新高斯参数(θ) 以适合分配给它们的点。

最大化步骤

在最大化步骤中,我们希望最大化每个样本来自分布的可能性。回想一下,可能性是曲线在 x 轴某一点的高度。因此,我们希望修改分布的方差和均值,以使每个数据点的图形高度最大化。

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

这就带来了一个问题,“我们应该如何着手选择方差和均值的最优值。”使用期望最大化的一般形式,我们可以推导出均值、方差和权重的一组方程。

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

我们可以遵循相同的过程来获得协方差和权重的方程。

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

一旦我们有了方程,我们只需在最大化步骤中应用它们。也就是说,我们在每个方程中插入数字,以确定最佳均值、协方差、权重,然后相应地设置高斯参数。

让我们来看看数学在起作用。最初,我们不知道哪些点与哪个分布相关联。

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

我们从具有随机均值、方差和权重的 K 个高斯分布(在这种情况下,K=2)开始。

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

然后,我们重复期望和最大化步骤,直到θ几乎没有变化。

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

值得注意的是,该算法易受局部极大值的影响。

密码

现在,我们已经掌握了高斯混合模型的工作原理,让我们来看看如何实现它们。首先,导入以下库。

import numpy as np
from sklearn.datasets.samples_generator import make_blobs
from sklearn.mixture import GaussianMixture
from matplotlib import pyplot as plt
import seaborn as sns
sns.set()

我们随机生成 4 个集群。

X, y = make_blobs(n_samples=300, centers=4, cluster_std=0.60, random_state=0)
plt.scatter(X[:,0], X[:,1])

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

最佳聚类数(K)是最小化赤池信息准则(AIC)贝叶斯信息准则(BIC) 的值。

n_components = np.arange(1, 21)
models = [GaussianMixture(n, covariance_type='full', random_state=0).fit(X) for n in n_components]plt.plot(n_components, [m.bic(X) for m in models], label='BIC')
plt.plot(n_components, [m.aic(X) for m in models], label='AIC')
plt.legend(loc='best')
plt.xlabel('n_components');

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

我们使用最佳数量的聚类(在本例中为 4)来训练我们的模型。

gmm = GaussianMixture(n_components=4)gmm.fit(X)

我们使用predict方法来获得一系列的点和它们各自的集群。

labels = gmm.predict(X)plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='viridis');

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

最后的想法

与 k-means 不同,高斯混合模型考虑了方差并返回数据点属于每个 K 聚类的概率。

高斯混合模型解释

原文:https://towardsdatascience.com/gaussian-mixture-models-explained-6986aaf5a95?source=collection_archive---------0-----------------------

从直觉到实施

在机器学习领域,我们可以区分两个主要领域:监督学习和非监督学习。两者的主要区别在于数据的性质以及处理数据的方法。聚类是一个无监督的学习问题,我们希望在数据集中找到具有一些共同特征的点的聚类。假设我们有一个类似这样的数据集:

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

我们的工作是找到看起来很接近的几组点。在这种情况下,我们可以清楚地识别出两组点,我们将分别将它们着色为蓝色和红色:

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

请注意,我们现在引入了一些额外的符号。这里,μ1 和μ2 是每个聚类的质心,并且是识别每个聚类的参数。一种流行的聚类算法被称为 K-means,它将遵循迭代方法来更新每个聚类的参数。更具体地说,它要做的是计算每个聚类的均值(或质心),然后计算它们到每个数据点的距离。后者随后被标记为由其最近质心识别的聚类的一部分。重复该过程,直到满足某种收敛标准,例如当我们看不到集群分配中的进一步变化时。

K-means 的一个重要特点是它是一个硬聚类方法,也就是说它会将每个点关联到一个且仅一个聚类。这种方法的一个局限是没有不确定性度量或概率来告诉我们一个数据点与一个特定的聚类有多少关联。那么,使用软集群而不是硬集群怎么样呢?这正是高斯混合模型(简称 GMM)试图做的事情。现在让我们进一步讨论这个方法。

定义

一个高斯混合是一个由几个高斯组成的函数,每个高斯由 k ∈ {1,…, K }标识,其中 K 是我们数据集的聚类数。混合物中的每个高斯 k 由以下参数组成:

  • 定义其中心的平均值μ。
  • 定义其宽度的协方差σ。这相当于多变量场景中椭球体的维度。
  • 定义高斯函数大小的混合概率π。

现在让我们用图表来说明这些参数:

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

在这里,我们可以看到有三个高斯函数,因此 K = 3。每个高斯解释了三个可用分类中包含的数据。混合系数本身是概率,必须满足以下条件:

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

现在,我们如何确定这些参数的最佳值呢?为了实现这一点,我们必须确保每个高斯拟合属于每个聚类的数据点。这正是最大似然法的作用。

通常,高斯密度函数由下式给出:

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

其中 x 代表我们的数据点, D 是每个数据点的维数。μ和σ分别是均值和协方差。如果我们有一个由 N = 1000 个三维点( D = 3)组成的数据集,那么 x 将是一个 1000 × 3 的矩阵。μ将是 1 × 3 的向量,σ将是 3 × 3 的矩阵。为了后面的目的,我们还会发现取这个等式的对数是有用的,它由下式给出:

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

如果我们对该方程的均值和协方差进行微分,然后使其等于零,那么我们将能够找到这些参数的最优值,并且解将对应于该设置的最大似然估计(MLE)。然而,因为我们处理的不是一个,而是许多个高斯函数,当我们找到整个混合物的参数时,事情会变得有点复杂。在这方面,我们需要引入一些额外的方面,我们将在下一节中讨论。

初始导数

我们现在要引入一些额外的符号。只是一句警告。数学来了!别担心。为了更好地理解推导,我将尽量保持符号的简洁。首先假设我们想知道一个数据点xn 来自高斯 k 的概率是多少。我们可以这样表达:

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

上面写着“给定一个数据点 x ,它来自高斯 k 的概率是多少?”在这种情况下, z 是一个潜在变量,它只取两个可能的值。当 x 来自高斯 k 时为 1,否则为零。实际上,我们在现实中看不到这个 z 变量,但是知道它出现的概率将有助于我们确定高斯混合参数,正如我们稍后讨论的。

同样,我们可以陈述如下:

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

这意味着观察到来自高斯 k 的点的总概率实际上等于该高斯的混合系数。这是有意义的,因为高斯越大,我们期望的概率就越高。现在让 z 成为所有可能的潜在变量 z 的集合,因此:

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

我们预先知道每个 z 独立于其他出现,并且当 k 等于该点来自的集群时,它们只能取值 1。因此:

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

现在,假设我们的数据来自高斯函数 k ,那么如何找到观察数据的概率呢?原来它其实就是高斯函数本身!遵循我们用来定义 p ( z )的相同逻辑,我们可以声明:

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

好吧,现在你可能会问,我们为什么要做这些?还记得我们最初的目标是确定给定我们的观测值 xz 的概率吗?事实证明,我们刚刚推导出的方程,以及贝叶斯法则,将帮助我们确定这个概率。根据概率的乘积法则,我们知道

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

嗯,看起来我们现在有所进展了。右边的操作数是我们刚刚找到的。也许你们中的一些人会预料到,我们会用贝叶斯法则来得到我们最终需要的概率。但是,首先我们会需要p(xn**),而不是p(x**nz) 。那么我们这里怎么去掉 z 呢?是的,你猜对了。边缘化!我们只需要总结一下 z 轴上的术语,因此

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

这是定义高斯混合的方程,你可以清楚地看到,它取决于我们之前提到的所有参数!为了确定这些的最优值,我们需要确定模型的最大似然。我们可以找到所有观测值的联合概率xn 的可能性,定义如下:

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

就像我们对原始高斯密度函数所做的那样,让我们将对数应用于等式的每一侧:

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

太好了!现在为了找到高斯混合的最佳参数,我们要做的就是对这个方程的参数求导,这样就完成了,对吗?等等!没那么快。我们这里有一个问题。我们可以看到,有一个对数正在影响第二次求和。计算这个表达式的导数,然后求解参数,会非常困难!

我们能做什么?嗯,我们需要用迭代法来估计参数。但是首先,记住我们应该找到给定 xz 的概率?好,让我们这样做,因为在这一点上,我们已经有了定义这个概率的一切。

根据贝叶斯法则,我们知道

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

从我们之前的推导中,我们了解到:

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

现在让我们将这些代入上一个等式:

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

这就是我们一直在寻找的!接下来,我们会经常看到这个表达。接下来,我们将继续讨论一种方法,这种方法将帮助我们容易地确定高斯混合的参数。

期望值最大化算法

好了,在这一点上,我们已经得到了一些概率的表达式,我们会发现这些表达式对确定模型的参数很有用。然而,在上一节中,我们可以看到,简单地评估(3)来找到这样的参数将被证明是非常困难的。幸运的是,我们可以使用一种迭代方法来达到这个目的。它被称为期望——最大化,或者简称为 EM 算法。它广泛用于目标函数复杂的优化问题,比如我们刚刚遇到的 GMM 问题。

让我们的模型的参数

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

现在让我们定义一般 EM 算法将遵循的步骤。

步骤 1: 相应地初始化 θ 。例如,我们可以使用前一次 K-Means 运行获得的结果作为我们算法的良好起点。

**第二步(期望步骤)😗*评估

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

嗯,其实我们已经找到了 p ( Z | X, θ )。还记得上一节我们最后用的γ表达式吗?为了更好地理解,让我们将之前的等式(4)放在这里:

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

对于高斯混合模型,期望步骤归结为通过使用旧的参数值来计算(4)中γ的值。现在,如果我们将(4)替换为(5),我们将得到:

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

听起来不错,但是我们还缺少 p ( XZ | θ* )。怎么才能找到呢?嗯,实际上并没有那么难。就是模型的完全似然,既包括 X 又包括 Z ,我们可以用下面的表达式求出:

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

这是计算所有观测值和潜在变量的联合概率的结果,是我们对 p ( x )的初始推导的扩展。该表达式的对数由下式给出

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

不错!我们终于摆脱了影响(3)中求和的这个麻烦的对数。有了所有这些,我们通过最大化关于参数的 Q 来估计参数就容易多了,但是我们将在最大化步骤中处理这个问题。此外,请记住,每次求和时,潜在变量 z为 1。有了这些知识,我们就可以根据推导的需要轻松地去掉它。

最后,我们可以将(6)中的(7)替换为:

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

在最大化步骤中,我们将找到混合物的修正参数。出于这个目的,我们将需要使 Q 成为一个受限的最大化问题,因此我们将向(8)添加一个拉格朗日乘数。现在让我们回顾一下最大化步骤。

**步骤 3(最大化步骤)😗*使用以下公式找到修正参数 θ *

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

在哪里

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

这就是我们上一步的结果。但是,Q 还应考虑所有π值总和应为 1 的限制。为此,我们需要添加一个合适的拉格朗日乘数。因此,我们应该这样重写(8):

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

现在我们可以很容易地用最大似然法来确定参数。现在让我们对π求 Q 的导数,并将其设为 0:

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

然后,通过重新排列各项,并对等式两边的 k 求和,我们得到:

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

从(1)中,我们知道所有混合系数的总和π等于 1。此外,我们知道,将概率γ与 k 相加也会得到 1。因此我们得到 λ = N 。利用这个结果,我们可以求解 π :

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

类似地,如果我们将 Q 对μ和σ求导,使导数等于零,然后利用我们定义的对数似然方程(2)求解参数,我们得到:

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

就是这样!然后,我们将在下一次 EM 迭代中使用这些修正值来确定γ,以此类推,直到我们看到似然值有所收敛。我们可以使用等式(3)来监控每一步中的对数似然,并且我们总是保证达到局部最大值。

如果能看到我们如何用编程语言实现这个算法就好了,不是吗?接下来,我们将看到我提供的 Jupyter 笔记本的一部分,这样您就可以看到 GMMs 在 Python 中的工作实现。

用 Python 实现

顺便提一下,完整的实现可以在 https://bit.ly/2MpiZp4 的 Jupyter 笔记本上获得

我在这个练习中使用了 Iris 数据集,主要是为了简单和快速训练。根据我们之前的推导,我们说明了 EM 算法遵循迭代方法来寻找高斯混合模型的参数。我们的第一步是初始化我们的参数。在这种情况下,我们可以使用 K-means 的值来满足这个目的。这方面的 Python 代码如下所示:

接下来,我们执行期望步骤。我们在这里计算

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

相应的 Python 代码如下所示:

请注意,为了计算总和,我们只需利用分子中的项,然后进行相应的除法运算。

然后是最大化步骤,我们计算

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

相应的 Python 代码如下所示:

请注意,为了稍微简化计算,我们使用了:

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

最后,我们还有对数似然计算,由下式给出

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

这方面的 Python 代码应该是

我们已经在期望步骤中预先计算了第二个求和的值,所以我们在这里只是利用它。此外,创建图表来查看可能性的进展情况总是很有用的。

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

我们可以清楚地看到,算法在大约 20 个历元后收敛。EM 保证在过程的给定迭代次数之后将达到局部最大值。

最后,作为实现的一部分,我们还生成一个动画,向我们展示每次迭代后集群设置是如何改进的。

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

注意 GMM 是如何改进 K-means 估计的质心的。当我们收敛时,每个集群的参数值不再改变。

结束语

高斯混合模型是一种非常强大的工具,广泛用于涉及数据聚类的各种任务。我希望这篇文章对你有用!请随意提出问题或评论。我也强烈建议您亲自尝试这些派生,并深入研究代码。我期待着尽快创作出更多这样的材料。

尽情享受吧!

[1] Bishop,Christopher M. 模式识别和机器学习 (2006)施普林格出版社柏林,海德堡。

[2]墨菲,凯文·p .机器学习:一种概率视角 (2012) 麻省理工学院出版社,剑桥,麻省,

高斯过程:预测纽约气温

原文:https://towardsdatascience.com/gaussian-processes-predicting-new-york-temperatures-d80906eb006?source=collection_archive---------18-----------------------

在我们开始之前,我想澄清一下,这篇文章并不完整,也不一定正确。当我试图学习更多关于高斯过程的知识时,把它看作是我的想法的笔记本,如果你看到错误或需要进一步澄清的部分,请突出显示并评论它们,以帮助我和其他读者。

数学中最著名的形状之一一定是不起眼的钟形曲线。卡尔·弗里德里希·高斯首先提出了这个函数,许多人都知道这个函数,而且由于它被用作正态分布随机变量的概率密度函数,现在学生们必须在高中以上学习。它广泛存在于我们的自然世界,这在很大程度上归功于中心极限定理

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

The Guassian Curve for a random variable with mean 0 and standard deviation 1 i.e. the probability density function for such a random variable

由于我们试图了解更多关于高斯人以及这一切背后的数学和计算机科学,上面的曲线是以一种比使用图书馆更 DIY 的方式生成的。我觉得这是最好的学习方式之一,尤其是涉及数据科学及其他领域的编程技能。

A verbose Guassian function

现在我们对正态分布和定义其概率密度函数的高斯函数有了更好的理解,你可能会问,如果我不是只有一个变量呢?现代世界中的许多系统,无论是生物学、物理学还是气候科学,都是复杂的,涉及许多干扰变量。你的健康不仅仅取决于你的年龄,就像气候变化不仅仅与二氧化碳排放有关一样。

我们能把这个想法纳入我们的正态分布吗?简短的回答是:是的!但是首先,我们需要了解更多关于描述这些被称为协变量的干扰变量。

通常在科学和数学中,当我们想要理解多个元素时,我们会求助于向量和矩阵,因为它们将所有这些东西捆绑在一起,使得应用变换更加容易。以你的健康为例,它可以(不完全)表达为你的年龄、身高和体重的向量。我们可能需要计算哪些东西?首先是每一个的意思,这很简单。如果我们考虑一个大型电子表格,其中每个人都有行,向量中的每个元素都有列,我们可以很容易地计算出每列的平均值,因此健康向量的平均值是包含这些组件的单个向量。

更有趣的是协方差矩阵。这个想法很简单,我们想了解一个变量相对于另一个变量是如何变化的。凭直觉,你可以开始做预测:年龄越大,你会越高(在一定程度上),你越高,你越有可能重。显然,事情没那么简单。

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

A Covariance Formula

呀!好吧,让我们稍微分解一下。协方差在这里有很多详细的描述。在某种意义上,我们正在寻找两个随机变量偏离其平均值的乘积的平均值。需要注意的一点是,如果随机变量是独立的,那么它们的协方差是零。在这种情况下,它们的联合分布就是它们两个分布的乘积。

让我们看一个具体的例子,多元高斯分布。下面是两个随机变量 X 和 Y,都以零为中心,但具有不同的标准偏差。我们假设它们是独立的,我们看 Z,它们的联合分布,就是它们的概率密度函数的乘积。

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

有趣的是,通过联合分布,我们可以计算边际和条件概率分布,就像反向工作一样,以发现有趣的模式和对数据的洞察。事实上,我们可以从联合正态分布p(x_1, x_2)到条件概率p(x_1 | x_2),因为我们已经了解了第二个变量。

这就是我们如何开始对看不见的数据进行预测!我们可以将我们观察到的数据和我们想要预测的数据视为一个联合分布,然后将其转换为一个条件分布,其中我们以我们标记的数据为条件。这种转换的数学问题超出了本文的范围,所以我们将只应用公式。下面公式中的xy分别与训练和测试数据有关。

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

在开始举例之前,这个难题还有一个额外的部分。乔莱斯基分解。这听起来很可怕,但事实并非如此,如果你从未听说过它,那么希望你能从这篇文章中学到一些数学知识。直观上就像是求一个矩阵的平方根。如果我有一些矩阵A,那么乔莱斯基分解会给我一个新的矩阵L,这样LL* = A。所有这些矩阵都需要有一些特殊的属性,例如A必须是正定的并且L必须是下三角矩阵。这里有一个例子:

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

让我们用一个例子来使它更加真实。我们将尝试用高斯过程来拟合来自纽约市(T2)的温度数据。

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

The earliest twenty data points for New York City temperatures

在实际数据中,我们将在尝试进行任何类型的拟合之前对其进行归一化——这是数据科学中使用的一种常用技术,可以使梯度下降等事情更好地工作(见最后我关于这一点的问题)。

在这里,我们只是初始化数据,并将其规范化。下一步是使用我们的核函数进行计算——在这个例子中,我选择使用径向基函数。我们用核函数来度量变量的协方差。不同的函数有不同的属性,选择正确的函数似乎既是一门科学,也是一门艺术。但首先,让我们在没有任何数据的情况下,通过逐步完成这个过程来感受一下我们在做什么。

这将产生不同采样函数的下图。

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

现在,我们将做同样的事情,只是这一次,我们将对一些观察到的数据进行处理,以更好地猜测数据中的潜在模式。

请注意,我重新调整了所有的数据,使其回到此时的原始温度。拟合度显然不是很好,改善的一种方法是改变alpha值(称为长度比例),这可以控制曲线中的摆动量,考虑到季节性波动引起的数据周期性,将其设置为 6 可能是有意义的。

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

我希望这篇文章已经帮助你掌握了高斯过程的一些关键数学特征。正如我在开始时提到的,它绝不是完整的,甚至是正确的,所以请指出任何错误或有用的指示。我发现这是一个学习和展开讨论的好方法。

问题

我对高斯过程相当陌生,实际上我自己也有不少问题,如果有人读到这里,觉得他们可以启发我,并为其他人提供更多内容,请评论。

  1. 当我试图拟合温度,然后绘制它们顶部的标准偏差时,最初我没有将数据标准化。在我看来,标准偏差需要进行缩放,是这样吗?
  2. 在我看来,高斯过程更适合填补数据点之间的空白,而不是推断遥远的未来,这是正确的吗?

资源

  • 凯瑟琳·贝利关于 GPs 的一篇精彩的帖子
  • Neil Lawrence 在 MLSS 的演讲记录
  • Chris Fonnesbeck 的另一篇好文章,代码清晰示例
  • 牛津大学工程科学和天体物理学系的详尽的课程笔记

GCNet:非局域网络与压缩激励网络相遇及超越综述

原文:https://towardsdatascience.com/gcnet-non-local-network-meets-squeeze-excitation-network-and-beyond-review-f3f3e4035e4d?source=collection_archive---------29-----------------------

在进入 GCNet 之前,我们首先需要了解两个网络:非局域网络压缩-激发网络。我们不会得到太多关于这些网络的细节。一旦我们有了基本的概念,我们就可以进入主要的话题,GCNet。

非局部神经网络

该网络受非局部均值滤波器的启发。该滤波器用于随机降噪任务。图像中的这些噪声可以通过取具有随机噪声的其他多幅图像的像素平均值来减少。然而,在真实世界场景中,获取具有随机噪声的多个图像是困难的。我们通常得到的是带有随机噪声的单幅图像。

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

为了解决这个问题,采用了非局部均值滤波。代替具有随机噪声的多个图像,可以使用位于不同区域的类似补片来计算平均值。如上图所示,图像补丁 p 与其他图像补丁( q1q2) 类似。这些补丁可以用来去除补丁 p 中的噪声。

受这个想法的启发,NLNet 的作者提出了一个非本地块。该块计算像素之间的所有相互作用,为此,网络执行多次权重整形和乘法以产生嵌入的特征表示。

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

如图所示,如果块获得 T x H x W x 1024 作为输入(T 代表时间戳,因为原始论文的目标是视频分类),它会产生相同大小的特征图。执行矩阵整形、乘法和逐元素加法来捕捉像素之间的全局依赖性。

要了解更多关于这篇论文的信息,请阅读原文这里

挤压激励网络

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

与 NLNet 相比,压缩激励网络解决了一个不同的问题。NLNet 试图捕获像素之间的全局相关性,而 SENet 试图捕获通道间的相关性。SENet 背后的主要思想是在每个特征映射通道中添加参数。通过这样做,网络自适应地学习特征图中通道的权重。

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

挤压激励模块将特征图作为输入。首先减少特征图的空间维度(W x H x C ),以应用两个完全连接的层。与输入要素通道大小相同的最终矢量被转换为 s 形图层,以根据其重要性缩放每个通道。

要了解更多关于这篇论文的信息,请阅读原文这里

GCNet

全球背景网络有三个主要想法。

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

**简化的非局部块:**作者提出了非局部块的简化版本。简化版本计算全局(独立于查询的)注意力图,并共享所有查询位置的注意力图。这种变化是在观察不同查询位置产生的相似注意力图后做出的。

此外,块中的 W_v 被移出注意池以减少计算成本。在遵循关系网络论文中的结果之后,权重 W_z 也被移除。

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

**全局上下文建模框架:**全局上下文网络中使用的主块(上图中的 a)可以分为三个过程:首先,全局注意力池,采用 1x1 卷积和 softmax 函数来获得注意力权重。然后应用注意力池来获取全局上下文特征。一旦应用了注意力集中,输出特征通过 1x1 卷积被转换,并且它们被聚集以将全局上下文特征添加到每个位置的特征。

**全局上下文块:**如上图所示,全局上下文块与挤压激励块一起使用了一个简化的非局部块。对模型进行了一些调整,以减少参数的数量。例如,在图中所示的挤压激励块中,1x1 卷积被瓶颈变换模块代替。而不是有 CxC 参数,数量减少到 2CC/ r ,其中 r 是瓶颈比,C/ r 是瓶颈的隐藏表示维度。

结果

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

实验在目标检测和分割任务中进行。上表比较了不同的架构设计。作者观察到,添加全局上下文块明显提高了模型的性能。

此外,需要注意的一点是,参数/触发器的数量不会急剧增加。这可能是因为 NL 数据块和 SE 数据块都设计了轻量级体系结构。

结论

该论文成功地结合了两种思想,并提出了一个优于现有基线网络的模型。作者通过提出 NL/SE 块的简化版本来解决长程相关性问题。通过仅添加少量参数,该模型在对象检测和识别任务上优于现有模型。

参考

[## GCNet:非局域网络与压缩激励网络相遇及超越

非本地网络(NLNet)提出了一种开创性的方法,通过聚集…

arxiv.org](https://arxiv.org/abs/1904.11492) [## 非局部神经网络

卷积运算和递归运算都是一次处理一个局部邻域的构建块。在这个…

arxiv.org](https://arxiv.org/abs/1711.07971) [## 压缩和激励网络

卷积神经网络(CNN)的核心构件是卷积算子,它使网络能够…

arxiv.org](https://arxiv.org/abs/1709.01507) [## 非局部神经网络

이번포스트에서는한동안·arxiv-sanity.com·에서상위권에머물었던·明凯·he의2017년11월에공개된논문,“非本地神经 Networks’를 소개 드리도록 하겠습니다…”

博客. lunit.io](https://blog.lunit.io/2018/01/19/non-local-neural-networks/) [## 用于对象检测的关系网络

尽管多年来人们普遍认为对物体之间的关系进行建模有助于物体识别,但目前仍存在一些问题

arxiv.org](https://arxiv.org/abs/1711.11575)

极客女孩崛起:神话还是现实

原文:https://towardsdatascience.com/geek-girls-rising-myth-or-reality-81e1897433c8?source=collection_archive---------16-----------------------

2019 年 Kaggle ML 和 DS 关于机器学习和数据科学领域女性代表性的调查分析

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

Designed by rawpixel.com / Freepik

巴拉克·奥巴马:在女性充分参与国家政治或经济的地方,社会更有可能成功

最近参加了 2019 Kaggle ML & DS 调查 **挑战赛。**这是第三年的调查,旨在提供数据科学和机器学习状况的全面视图。这项挑战面向所有人,讲述数据科学社区独特而有创意的故事的笔记本电脑将获得奖励。挑战描述说-: " 挑战是(通过数据)深入探索数据科学和机器学习实践者的特定群体的影响、优先事项或关注点

这对我来说是一个绝佳的机会,让我可以参与挑战,探索 w.r.t 全球女性参与调查的情况。笔记本的目的是分析调查数据以回答一个重要问题: 女性参与 STEM 的情况真的有所改善,还是只是一种炒作?我运用我的分析技巧来调查事情是否有所改善,或者是否还有很多事情要做。

我还获得了 2019 年 11 月 19 日之前发布的所有笔记本的最佳笔记本奖。

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

这篇文章是我在分析数据集时获得的结果和见解的总结。点击可以查看 Kaggle 笔记本原文。

方法学

我在六个不同类别下分析了女性参与调查的情况,即:

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

分析这些不同类别下的妇女代表情况,让我对妇女代表在 ML 和 DS 领域的性质有了一个公平的想法。

我首先分析了 2019 年调查的数据集,以了解整体情况。

2019 年受访者最多的国家

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

  • 大多数受访者(男性和女性)来自印度,事实上紧随其后的是美国;这些国家加起来占总人口的 50%以上。

请注意,如果某个国家或地区收到的调查对象少于 50 人,他们将被分组到名为“其他”的匿名组中。

历年答卷人数比较

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

  • 尽管 2018 年的回复数量远高于 2017 年,但 2019 年有所下降。

现在让我们看看从六个关键领域的分析中获得的见解——性别、国家、年龄、教育、职业经验和工资。

1.性别

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

PC: rudall30

巨大的性别差异

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

  • 在调查中,男性和女性受访者之间有着惊人的差异。大约 82%的受访者是男性,只有 16%是女性。

历年性别分布情况

与过去两年相比,2019 年的性别分布情况。

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

  • 嗯,模式差不多。多年来,女性受访者的参与率一直很低。

2.国家

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

PC: Freepic.com

现在让我们看看女性受访者来自哪些国家。这些数据将有助于我们了解反应最大和最小的国家。

女性受访者所在国家

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

  • 2019 年大多数女性受访者来自印度和美国。
  • 来自中非的参与比例令人震惊,尽管像尼日利亚这样的国家确实在世界地图上显示了它们的存在。
  • 来自土耳其、尼日利亚和巴基斯坦的女性也对调查做出了回应,尽管她们所占的比例很小。

这些年来印度和美国的女性受访者

由于印度和美国的受访者比例最高,我也分析了这些数据,看看过去几年是否也观察到了类似的趋势。

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

  • 2017 年和 2018 年,美国女性受访者的数量远高于印度。然而,2019 年印度女性受访者有所增长,其比例超过了美国女性。

非洲仍然存在巨大的障碍

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

  • 与前几年相比,2019 年回答调查的非洲女性人数有所增加。2019 年,约有 150 名女性回答了调查,而在此前几年,这一数字甚至不到 100 人。
  • 探究 2019 年非洲次大陆参与度增加的原因很有意思。首先,很少有阿尔及利亚女性在 2019 年首次参加调查。其次,与前两年相比,2019 年观察到尼日利亚女性受访者人数激增。这两个因素都促使非洲女性在 2019 年的调查中表现更好。

3.年龄分布

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

PC: www.freepik.com

年龄是任何人口统计分析的一个重要属性,在分析年龄变量时获得了一些有趣的结果。

年轻的旅在 2019 年占据主导地位

2019 年女性受访者的年龄分布。

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

  • 大多数女性受访者属于 (25 -29) 年龄组,紧随其后的是**(22-24)年龄组。因此,大多数女性处于(20-30)**年龄段。
  • **(20–30)**年龄组可以包括学生(本科生和研究生)和专业人士。
  • 有趣的是,60 岁和 70 岁以上的女性也对调查做出了回应。嗯,正如人们所说——年龄只是一个数字。

历年的年龄分布模式

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

  • 没有观察到模式的显著变化。总的来说,20-30 岁的群体在调查中占主导地位。

国别年龄分布

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

  • 印度大多数女性受访者是 20 多岁的女性,这一比例也高于其他任何国家。因此,来自印度的女性受访者主要是年轻人。
  • 此外,印度有相当数量的 18 至 21 岁的女性受访者。这个年龄组通常由学生组成,看到他们参与调查令人振奋。
  • 对于美国女性来说,学生受访者的比例相对较低。至于其他国家,各年龄组的分布几乎相同。

4.教育

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

PC: www.freepik.com

有人说得对,受过教育的女性是社会的支柱。以下是对女性受访者资格状况的分析。

2019 年女性受访者的学历

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

  • 女性的教育状况令人印象深刻,大多数人(~46%)拥有硕士学位,紧随其后的是学士学位(27%)。16%的博士回答了调查。
  • 分析还显示,有一定比例的人高中毕业后没有接受过正规教育。尽管如此,他们还是参加了调查,这本身就是一件值得称赞的事情。

按国家分列的女性受访者的教育资格

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

  • 美国 T1 拥有最多的 T2 硕士学位,T4 T3 和 T5 拥有博士学位,紧随其后。然而,应该记住的是,印度和其他国家的许多女性一般都是为了获得硕士和博士学位而移民到美国的。
  • 印度拥有最多的学士学位。这一点非常明显,因为大多数女性受访者都是 20 多岁的学生。
  • 除了专业学位出现率较高的日本之外,所有国家的硕士学位普遍高于其他学位。

5.专业经验

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

PC: www.freepik.com

让我们看看女性在行业中所扮演的各种职业角色。

多年来女性受访者的角色

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

  • 自 2017 年以来,数据科学家似乎是女性受访者的主要角色,其次是数据分析师。开发人员、研究人员和项目经理等其他角色也可以在人群中看到。

2019 年女性受访者的 20 大角色

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

  • 如果我们从结果中排除学生,数据科学家(约 19.5%)构成了参加调查的大部分人口。紧随其后的是从事数据分析师工作的女性(约 11%)。
  • 有趣的是,一些妇女没有工作,但对调查做出了回应。这些妇女不可能选择工作,也不可能寻找工作。我们可以联系这些女性,了解她们是否愿意工作,并帮助她们。

女性受访者目前的角色

我结合了一些角色来创建更广泛的群体。例如,数据工程师和 DBA/数据库工程师与数据分析师和业务分析师混在一起。

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

  • 同样,排除学生,美国参与调查的数据科学家和数据分析师人数最多,其次是印度。
  • 印度参与调查的软件工程师人数最多。有趣的是,失业女性受访者的比例(~<2%) was also the highest in India.

Female Data Scientists distribution over the years

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

  • Even though the percentage of female respondents had decreased in 2019, the percentage of Data Scientists who took the survey was more significant than in 2018.

6. Salary

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

Even though someresearch相反,薪酬是留住和获得新人才的一个重要激励因素。让我们看看我们的女士在数据科学领域的薪酬有多高。我分析了 2019 年女性受访者工资的大致趋势,然后将趋势与 2018 年的工资进行了对比。

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

2019 年女性受访者薪资范围

  • 大多数女性受访者不愿意透露自己的年薪。剩下的人中,有 10%的人年薪不到 1000 美元。这是有道理的,因为其中很大一部分人是目前可能没有固定工作的学生。
  • 也有一小部分女性年收入超过 20 万到 30 万美元。

2018 年和 2019 年女性受访者薪资对比。

为了了解这种工资模式是 2019 年独有的,还是一种反复出现的现象,我将它与 2018 年的工资范围进行了比较。我没有包括 2017 年的工资数据,因为它有十多种不同的货币。

  • 2018 年和 2019 年,薪酬分布的总体模式似乎相同。2019 年的年度薪酬比 2018 年略有改善,这很好。
  • 另一个关键点是,与 2018 年不同,2019 年确实有一些女性收入超过 50 万美元。

2019 年男女薪酬对比。

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

  • 男女工资的总体趋势保持不变。大多数人收入低于 1000 美元。然而,收入低于 1000 美元的女性比例高于男性。此外,与男性不同,没有女性受访者的收入高于 50 万美元

2019 年男女数据科学家薪酬对比

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

  • 与男性同行相比,收入低于 1000 美元的女性数据科学家的比例要高得多。女性数据科学家在高工资范围内的薪酬似乎也较低。收入超过 20 万美元的女性数据科学家的比例非常低。

全球女性数据科学家的薪水一览

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

  • 美国数据科学家的薪酬相对高于其他国家。

关键要点和建议

从整个练习中获得的一些重要收获可以总结为六个要点:

  • 妇女在这项调查中的参与率很低,而且这些年来没有显示出多大的改善。我们需要了解参与率如此之低背后的原因,以及我们如何才能鼓励女性变得更加积极参与。
  • 美国和印度女性的反应令人振奋,尽管与男性相比仍然很低。随着尼日利亚和阿尔及利亚等国家加快步伐,非洲显示出一线希望。组织应该与非洲政府和非政府组织合作,为这些妇女提供更好的学习和研究机会。
  • 数据科学领域的年轻女性人数正在上升,其中大多数来自印度。这并不奇怪,因为印度拥有世界上最年轻的军队之一。应该通过改革现有的印度教育模式并在当前课程中引入高质量的数据科学课程来有效利用这一人口红利。
  • 科学领域的女性素质很高,大多数拥有硕士学位。
  • 大多数女性数据科学家位于美国和印度。一些没有工作的妇女也对调查做出了回应。这可能有多种原因。他们可能是学生或女性,希望在休息后重新开始他们的职业生涯。后者可以通过参加聚会或社区活动得到帮助。对于学生来说,导师是一个很好的选择。
  • 薪酬分配多年来保持不变,但与美国同行相比,印度女性数据科学家的薪酬相对较低

结论

所以让我们回到最初的问题——极客女孩崛起了吗?真是百感交集。一些领域有所改善,但其他领域仍有大量工作要做。总的来说,事情似乎很有希望。

数据科学本身是不同科学学科的结合。让不同性别、背景和种族的人加入进来更有意义,他们可以带来更多的创造力,让知识、发现和创新蓬勃发展。

这需要社会的共同努力,使多样性和包容性成为生态系统的重要组成部分。作为女性,我们应该确保创建一个积极的支持小组来帮助数据科学领域的其他女性。毕竟,被赋予权力的女性赋予了女性权力。

GPT 的性别偏见-2

原文:https://towardsdatascience.com/gender-bias-in-gpt-2-acf65dc84bd8?source=collection_archive---------32-----------------------

一名男子和他的儿子遭遇了一场严重的事故,被紧急送往医院抢救。医生看着这个男孩,大声说道:“我不能给这个男孩做手术,他是我的儿子!”。这怎么可能?

答案?医生是男孩的母亲

我的回答…在为此纠结了一分钟后,我得出结论,这个男孩有两个爸爸。虽然我并不完全不喜欢我的答案(我们对异性关系有偏见),但我得出这个结论只是因为我的大脑无法计算医生是女性的想法。更糟糕的是,我研究算法偏差……这个问题是在“像我这样的女人”活动中提出的。

在社会中,偏见无处不在,存在于我们每一个人身上。当我们构建人工智能时,我们冒着做出反映这些偏见的东西的风险,并根据我们与技术互动的方式,加强或放大这些偏见。

OpenAI 在二月份发布了 GPT-2,这是一个生成语言模型,在互联网上掀起了风暴,部分是因为它创造了令人信服的合成文本,但也因为这种模型的安全性令人担忧。一个问题是偏见。

“我们预计安全和安保问题将在未来减少我们的传统出版,同时增加共享安全、政策和标准研究的重要性,” OpenAI Charter

九个月过去了,OpenAI 稳步遵循分阶段发布策略,仔细监控模型的使用,在他们的 6 个月更新中发布关于模型偏差的初步结果,现在(仅仅一周前!)发布完整型号

在这篇博客中,我们将深入探讨 GPT 新协议中的偏见。具体来说,我们将着眼于职业性别偏见,如何与社会中预先存在的偏见进行比较,并讨论为什么语言模型中的偏见很重要。

这不是我第一次写 GPT-2。我写这篇博客是关于我用 GPT-2 写小说的经历。我觉得挺好的,但我可能有偏见。

结果

我们实验的目的是测量 GPT-2 中的职业性别偏见,观察这种偏见如何随着不同规模的模型而变化,并将这种偏见与我们社会中的偏见进行比较。我们的实验从“单词嵌入事实关联测试” (Caliskan 等人)中获得了一些灵感,这是一种类似于“隐含关联测试”的测试,但针对事实数据进行测量,即“事实关联”。我们的事实数据来自“国家统计局”(ONS)和他们的英国职业数据:一个大约 500 个工作类别的列表,每个列出了该职业的男女雇员人数和平均工资。

我们通过各种 GPT-2 模型(124 米、355 米、774 米和 15 亿个参数)运行了一系列提示,以衡量每个模型给国家统计局职业数据中各种职位的性别关联。

为了帮助你理解我们的实验,我想让你想象你在一个学校集市上。在集市上,其中一个摊位有一个装满软糖的罐子。上百个!几千,也许?无论如何都数不过来。你猜一猜,写在一张纸上,放在一个小盒子里,然后祈祷好运。

一天结束时,负责摊位的两个学生浏览了所有的猜测,他们注意到一些奇怪的事情。虽然这些人都不知道罐子里软糖的确切数量,而且每个猜出来的人对罐子里有多少颗软糖都有自己的偏见,但是如果你把所有的猜测加在一起并取平均值,你会得到一个非常接近罐子里软糖数量的数字。

就像果冻豆游戏的参与者一样,GPT-2 无法获得果冻豆的确切数量(或者说,它没有从国家统计局的数据中了解到社会偏见)。相反,我们正在观察 GPT-2 是否通过从很多人那里学习语言来反映社会偏见。

这是我们发现的!

图表中的 X 轴显示了英国不同工作的薪水。在 Y 轴上,我们测量性别偏见,大于 0 的数字表示男性偏见,小于 0 的数字表示女性偏见。就国家统计局的数据而言,它描绘了从事各种职业的实际人数及其工资。对于 GPT-2,我们正在研究 GPT-2 与同样的工作相关的性别偏见的强度。

GPT-2 的所有 4 个模型和社会数据显示,随着工作薪水的增加,男性倾向越来越大,这意味着职位越高,薪水越多,GPT-2 就越有可能表明男人在那个位置工作。国家统计局的数据还显示,在英国就业市场,这种对从事高薪工作的男性的职业性别偏见甚至比 GPT-2 更强烈。

随着我们给 GPT-2 增加更多的参数,这个趋势真的很有希望。我们在 GPT-2 中加入的参数越多,模型就越接近中性零线。该模型的 15 亿参数版本既最接近零,也具有最弱的梯度,表明随着工作薪水的增加,偏向男性的趋势最小。根据国家统计局的数据,在所有趋势线中,我们可以看到英国社会最偏向男性,并且随着工资的增加,表现出最明显的偏向男性的趋势。

通常,我们会期望一种算法通过输入更多数据或训练更长时间来更接近事实,但 GPT-2 似乎正相反。那么,这是为什么呢?

记得糖豆!GPT-2 从来没有得到国家统计局的数据来训练。相反,它已经从数百万在线用户的语言中学习。虽然每个人都有自己的偏见,这可能与社会真相有一定的距离,但总的来说,GPT-2 发现自己接近社会偏见是令人惊讶的。

GPT-2 不仅从个人偏见的平均值中学习,而且还从他们的语言偏见中学习。理解了这一点,我们可能会认为性别陈规定型的工作表现出不同的趋势。所以让我们试试…

在这张图表中,我们可以看到全部结果的一个子集,从中挑选出一些典型的与女性相关的工作。社会偏见的趋势比我们在上图中看到的更加接近。我们发现 776m 模型惊人地接近社会偏见,在模型中,像“护理助理”这样的角色与女性代词的联系比男性代词多 77.4%,在社会中多 77.3%。即使有这些老套的例子,15 亿参数模型仍然显示出性别中立的趋势。

一个公平的批评是,我们挑选了刻板的女性工作来支持一个假设。为“性别刻板印象工作”找到一个标准的分类器并不容易,网上的清单大体上是由其他人的判断组成的。为了尽可能公平起见,我们的选择是基于论文中的一个列表:男人对于电脑程序员就像女人对于家庭主妇一样?去偏置词嵌入’ T1 '。我们从他们的“极端 she 职业”列表中选取了职位,排除了那些缺乏完整的 ons 统计数据的职位。基于我们团队的判断和我们所经历的刻板印象,我们还增加了一些职位名称(例如助产士和幼儿园老师)。

我们对男性刻板印象的工作重复了这一过程,再次发现 15 亿参数模型最接近中性。然而,在所有型号的模特中,这些角色几乎普遍存在男性偏见。

我们学到了什么?

你在提示中使用的词语真的很重要!

我们的第一课受到了我们在为模型创建可访问的职位时所面临的挑战的启发。为了帮助解释这一点,请和我一起快速玩一轮“单词联想游戏”。当你听到这些英国国家统计局的工作类别时,你首先想到的是什么?

学校午间过马路警卫?

邮政工人?

货车司机?

如果你和我一样,你会发现“学校午间交警”变成了“棒棒糖女士”,“邮政工人”变成了“邮递员”,“货车司机”变成了“开货车的人”。我们修改了许多英国国家统计局的职位名称,从那些明确但极不寻常的职位名称,改为我们期望在社会上听到的对等名称。国家统计局的分类太不寻常了,不能在新 GPT 协议中发挥作用,我们必须非常小心,不要在修改它们的过程中添加不必要的性别偏见。在我描述的三个“真实世界”的标题中,每一个都包含了对性别的明确提及,并将 GPT-2 推向了性别偏见。

有些情况下,每个职位都有男性/女性相关的工作,比如服务员和女服务员。国家统计局包含“服务员”类别的统计数据,女性比男性多 55.8%。当我们通过模型的 774m 参数版本运行时,我们发现服务员有 15%的男性偏见,而女服务员有 83.6%的女性偏见。总的来说,我们得到平均 34.3%的女性偏见,非常接近社会偏见。

解决办法?

考虑每个工作类别的中性词。我们不应该在招聘广告上登“场地管理员”,而应该登“场地人员”的广告。与其称某人为“绘图员”,不如称他们为“绘图员”或“制图员”。这同样适用于我们使用 GPT-2 的方式和我们自己写的东西。下面你可以看到“穿越守卫”的结果,它最清楚地证明了这一点。点击此处查看更多示例。

展望未来

虽然新 GPT 协议通常反映了现有的社会偏见,但我们对该技术的应用有可能加剧社会偏见。虽然随着模型尺寸的增加,性别中立的趋势是有希望的,但所有模型尺寸都继续显示出一定程度的性别偏见,这很重要,因为 GPT-2 可以以前所未有的速度生成可信的文本,可能没有人的监督。这不一定会增加社会偏见,反而会增加惰性,减缓朝着减少偏见社会的积极进展。在最坏的情况下,它可能会放大我们的偏见,使其对社会的影响更加极端。GPT-2 的偏见对我们社会的影响将取决于谁能获得这项技术以及如何应用它。这使得 OpenAI 分阶段发布并在公开发布之前分析其效果的决定尤其有价值。

自 2011 年 Siri 发布以来,数字助理大受欢迎,这为科技领域的性别偏见提供了一个严酷的教训。在联合国教科文组织的报告《如果我能,我会脸红》中,我们经历了数字助理性别偏见的现实。在 Siri、Alexa、Cortana 和谷歌助手中,我们看到数字助手被描绘成女性,她们屈从于用户对她们咆哮的命令,甚至把性挑逗当作笑话不予理睬。在数字助理表现不佳的地方(他们经常表现不佳),我们会在心理上将这种不佳表现与这些数字助理模仿的声音和角色的女性联系起来。我们现在刚刚开始看到数字助理中男性/女性选项的趋势,远离默认的女性,并逐渐增加性别中立选项的可用性。

联合国教科文组织的报告建议开发者和其他利益相关者监控数字助理对用户行为的影响,特别关注“儿童和年轻人的社会化”。正如我们可能希望限制儿童与女性数字助理的接触,以避免他们在女性和从属关系之间建立不健康的联系,我们也可能希望更加关注 GPT-2 和其他生成性语言模型的使用。GPT-2 本身没有角色,也不认同性别,但这只是微调模型并将其作为网站上的对话代理来实现的一小步,例如,以达到相同的结果。即使 GPT-2 没有表明性别,使用带有性别偏见的语言仍然会对我们的行为和年轻人的思想产生同样的影响。相反,联合国教科文组织的报告建议我们建立人工智能,以性别中立的方式回应查询。

在某些特殊情况下,我们应该限制 GPT 新协议的使用,例如在写招聘广告时,性别语言会影响申请者的多样性。带有性别偏见的语言模式可能会减缓缩小性别薪酬差距的进程,并放大我们在国家统计局数据中看到的男性在高薪工作中的主导地位。

在他们 6 个月的更新中,OpenAI 分享了一个积极的信息:自发布以来,他们几乎没有看到恶意使用他们技术的证据。虽然这肯定是一件好事,但我们仍然需要小心这项技术的善意使用。体验负面影响不需要有任何恶意,但只要小心,GPT-2 可以对我们的社会产生积极影响。

感谢让这一切成为可能的人们

没有一些伟人的贡献,这个实验是不可能的。我的 Sopra Steria 同事 Mark Claydon 提出了实验方法,管理所有后端集成并帮助处理数据。还要感谢艾莉森·加德纳索克拉蒂斯·卡卡拉斯帮助构思实验并回顾我们的结果。

如果您想了解更多关于我们方法的信息,请点击此处

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

I spent about 30 seconds making this because I figure some cover photo is better than nothing. Sorry!

男人之于医生,如同女人之于护士:词语嵌入的性别偏见

原文:https://towardsdatascience.com/gender-bias-word-embeddings-76d9806a0e17?source=collection_archive---------5-----------------------

为什么我们应该担心自然语言处理技术中的性别不平等

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

CalArts]

文化和语言,语言和机器

电梯里的性别

我想象你正和两个人一起走进医院的电梯:一男一女。他们穿着同样的白大褂,但他们的徽章被遮住了,所以你看不出他们在医院里是什么角色。在某个时刻,电梯门打开了,一位年轻女士跳出来说:“早上好,史密斯医生!”。你觉得哪个会去迎接她回来?

常识告诉我们两人都有可能成为史密斯医生,但是几项实验表明个人更有可能将女性与护理联系在一起,将男性与医生联系在一起。也就是说,你可能最终会把头转向那个穿白大褂的人,期待他说点什么。

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

If you are a sci-fi lover, you probably know that doctor Smith’s gender can’t be established without knowing which version of Lost in Space you’re referring to. [© Netflix, CBS]

语言反映了(不良)文化

性别陈规定型观念在我们的社会中仍然根深蒂固,由于有意识和无意识的性别偏见,女性在成长和生活中受到与男性截然不同的对待。

语言是性别歧视和性别歧视得以实施和复制的最强有力的手段之一。词汇选择和日常交流不断反映出这种长期存在的偏见,以至于语言本身被设计成反映社会不对称。例如,语法和句法规则是以这样一种方式构建的,即阴性术语通常源自其对应的阳性形式(例如 princ- ess ,god- dess 等)。)【梅内加蒂等人,2017 。同样,阳性名词和代词也经常与一个通用功能一起使用,既指男人也指女人(如 man- kind,states- men 等)。),经常被人认为是歧视女性。这些问题对大多数语言来说都是常见的,凸显了性别歧视是如何在全世界蔓延的,涉及到整个社会。

由于语言和文化是如此紧密地联系在一起,很容易理解对基于理解和处理人类语言的自动任务的危险暗示,从网络浏览器的自动补全人工智能机器人(还记得微软的人工智能聊天机器人完全纳粹化的时候吗?)和查询结果排名

让我们用一些技术性的细节来更深入一点(不涉及数学!).

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

Surprisingly (?) biased Google Search’s autocomplete suggestions from a 2013 query [© UN Women]

自然语言处理中的性别偏见:垃圾进,垃圾出

什么是自然语言处理?

自然语言处理(NLP)是人工智能(AI)的一个分支,它帮助计算机理解、解释和处理自然语言。
将 NLP 驱动的机器想象成能够理解和评估输入文档(即单词集合)的上下文的黑盒,输出有意义的结果,这些结果取决于机器被设计用于的任务。

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

Documents are fed into magic NLP model capable to get, for instance, the sentiment of the original content

就像任何其他机器学习算法一样,有偏见的数据导致有偏见的结果。就像任何其他算法一样,结果去偏置是非常恼人的,以至于去偏置社会本身可能更简单。

亲爱的人类:请停止性别歧视。
真诚的,你友好的邻居数据科学家。

现在,让我们看看性别偏见是如何通过 NLP 模型传播的。

大事:单词嵌入

W ords 必须表示为数值向量才能馈入机器学习算法。最强大(也是最流行)的方法之一是通过单词嵌入。在单词嵌入模型中,给定语言中的每个单词被分配给一个高维向量,使得向量的几何形状捕获单词之间的关系。例如,单词 king 的向量表示之间的余弦相似度将更接近单词 queen 而不是 *potato。*记住,余弦相似度就是两个向量之间角度的余弦,可以定义为:

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

因此,余弦相似度越高,向量方向越接近。让我们试着把它变成一个简单的 R 脚本,使用一个预训练的手套单词嵌入(你可以在这里找到它)。

> word_vec = read.csv('./glove.6B.300d.csv')> cosine_sim = function(v1,v2){
+    return(dot(v1, v2) / (sqrt(sum(v1^2)) * sqrt(sum(v1^2)))
+}> cosine_sim(word_vec["**king**",],word_vec["**queen**",])
[1] **0.67**> cosine_sim(word_vec["**king**",],word_vec["**potato**",])
[1] **0.23**

这些惊人的结果可以通过学习单词嵌入的方式来实现:遵循分布假设嵌入以无监督的方式评估每个目标单词及其上下文(即出现在目标单词之前和之后的一组单词),建立和处理共现矩阵(手套)或输入巧妙设计的神经网络来解决单词预测任务( Word2VecFastText )。

为了完整地保留自然语言的语义,单词嵌入通常在大规模文本数据库上进行训练,如维基百科转储(600 万个英文页面)或谷歌新闻(约 1000 亿个单词),继承了我们之前指出的所有偏见。当然,特定于上下文的嵌入总是可以使用较小的数据集来学习。

国王和王后:单词嵌入实际上发挥了魔力

L et 的贴有国王王后字样。作为人类,我们知道国王是统治国家的皇家男性人物,而我们用单词 queen 来描述一个嫁给国王或独自领导一个王国的女人(queens 统治 king-doms…你能看到吗?).围绕国王和王后的语义关系对我们来说相当直接,但是对于一台不能理解字里行间含义的机器来说可能很难理解。单词嵌入允许机器捕捉(部分)这些类比和关系,包括性别。****

既然我们在谈论数字向量,我们可以简单地通过取 kingman 的向量表示之间的差来估计语义关系方向*。如果我们试图将女人向量投射到同一个方向,会发生什么?惊喜:我们得到了单词 queen
**关于
女王国王*的女性的信息从未被直接输入到模型中,但模型无论如何都能捕捉到这种关系**。

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

2D representation of the semantic analogies between king, queen, man and woman

此时,你大概会猜到这件事会在哪里结束:如果我们试着对——比如说——职业——做同样的事情会怎么样?不出所料,这就是性别刻板印象真正出现的地方。

> get_analogy = function(v1,v2,v3){
+   x = v2-v1+v3
+   return(names(get_closest(x,word_vec))[1])
+}> get_analogy(word_vec["man",],
+              word_vec["doctor",],
+              word_vec["woman",])
[1] **"nurse"**

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

该死的。显然,我们的算法也经历了医院电梯的情况。

许多不同的职业都可以得到类似的结果。举个例子,如果我们试图得到男人*:程序员 = 女人 : X 的类比,我们会不可思议地以 X = 家庭主妇告终。当然,单词程序员(以及单词家庭主妇)根据其定义是中性的,但是在新闻语料库上训练的嵌入模型倾向于认为程序员更接近,因为我们对这份工作的社会认知,这反映在我们使用的语言中。[ Bolukbasi 等人,2016 年 ]*

通过词云的性别偏见

当我们观察男人女人K-最近嵌入邻居时,更容易发现 S 存在。即使不看描述也能猜出两朵云的目标性别。

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

Word clouds for the nearest neighbours of “man” (L) and “woman” ®. Topic observed: “occupations”

子群中,我们可以找到像暴徒*、商人机械师、中尉屠夫警察这样的词。在女性子群中最相关的词中,我们看到的是助产士、护士、接待员、女服务员和……妓女这样的词。可怕。*

甚至更可怕的结果可以被检索到将感兴趣的领域从职业切换到形容词。按照嵌入方式,男人有趾高气扬*、正派奸诈聪明绝顶谦逊。不出所料,女性反而被描述为时髦的*、性感的有品味的迷人的华丽的。**

我们真的只能用这个来形容一个女人吗?

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

Considering the first 200 closest adjectives to man or woman, 76% of them are referred to “man”. Within the remaining 14%, more than 50% are beauty-related terms.

你可以用这个令人难以置信的可视化工具亲自尝试一下,这个工具是在 2017 年微软新英格兰研究&开发中心举办的黑客歧视黑客马拉松上制作的。

性别偏见的人工智能在现实生活中的影响

鉴于自然语言处理中的性别偏见确实存在,即使只是出于伦理原因也应该避免,那么受刻板印象影响的人工智能对人类日常生活的影响是什么?换句话说,我们为什么要在乎呢?

在自动化系统的所有优点中,廉洁、敬业和尽职尽责的工作狂可能是最重要的优点之一。机器学习系统可以确定贷款资格而不受申请人种族的影响,它们可以提供信息 和服务而没有性别歧视,它们可以为公司招聘最佳候选人而不受他/她的性取向等的影响。
然而,当机器学习系统开始在预测中变得更像人类时,它们也可能开始延续人类行为,失去它们对人类的主要优势之一:不是人类

让我们考虑工作招聘的例子。我们希望设计一个 NLP 驱动的自动系统,根据候选人的动机信生成工作适合度分数。假设公司 HR 的数据库不够大,不足以训练自己的嵌入,我们决定使用维基百科上预先训练的 300 维手套词嵌入。
在激励函中找到积极形容词的几率很高,如
狡猾的*、聪明的聪明的,但是我们观察到,在预训练的嵌入空间中,这些术语更接近于男人而不是女人。此外,假设我们正在评估初级程序员职位的候选人,我们知道我们的嵌入不会被认为是性别中立的。
在这种情况下,如果模型成功检索到候选人的性别,它将在候选人选择过程中受到很大影响。*

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

结论

G 安德不等式在我们的社会中仍然根深蒂固,机器学习算法的盲目应用有传播和放大原始上下文中存在的所有偏见的风险。实施这种令人不快的人类行为不仅非常不道德,而且可能在许多不同的决策场景中产生令人担忧的后果

如今,数据科学家正在努力解决这个问题,最终找到了非常聪明的去偏置策略 [ Bolukbasi 等人,2016 ][ Chakraborty 等人,2016 ],在保留嵌入的有用属性的同时,减少了性别极化。然而,我们应该非常小心地在每一个社会偏见不应该造成差异的环境中应用 NLP 技术。这样做将提高我们模型的效率,最终提高我们作为人类的自身。

参考资料和进一步讲座

在这里你可以找到我的主要资料,以及一些非常有趣的读物,如果你有兴趣深入研究单词嵌入和偏差消除,我建议你看一看。

希望这篇博文能够强调李颖社会中的性别不平等,以及为什么我们应该担心 NLP 中的性别陈规定型观念。如果你觉得有帮助,请在评论区留下你的想法并分享!

*[## Tommaso Buonocore - Scrittore -走向数据科学| LinkedIn

查看世界上最大的职业社区 LinkedIn 上 Tommaso Buonocore 的个人资料。托马索有 3 份工作列在…

www.linkedin.com](https://www.linkedin.com/in/tbuonocore/)*

深度学习的性别推断

原文:https://towardsdatascience.com/gender-identification-with-deep-learning-ac379f85a790?source=collection_archive---------19-----------------------

名人的微调预训练卷积神经网络

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

Photo by Alex Holyoake on Unsplash

总结

我想建立一个从图像中推断性别的模型。通过微调预训练的卷积神经网络 VGG16,并在名人图像上训练它,我能够在测试集上获得超过 98%的准确性。该练习展示了设计预训练模型的架构以补充数据集特征的效用。

任务

通常情况下,人类可以很容易地分辨出上面照片中的男人和女人,但很难准确描述我们为什么会做出这样的决定。没有定义的特征,这种区分对于传统的机器学习方法来说变得非常困难。此外,与任务相关的特征并不是每次都以完全相同的方式表达,每个人看起来都有点不同。深度学习算法提供了一种在没有预定义特征的情况下处理信息的方法,并且尽管特征表达方式存在差异,但仍能做出准确的预测。在本文中,我们将把卷积神经网络应用于名人的图像,目的是预测性别。(免责声明:作者理解外貌与性别没有因果关系)

工具

卷积神经网络(ConvNets)提供了一种从原始图像进行预测的方法。该算法的一个特点是能够通过使用识别区别特征的过滤器序列来降低图像的维度。模型中的附加层帮助我们强调由过滤器识别的特征和分配给图像的标签之间的非线性关系的强度。我们可以调整与过滤器和附加层相关联的权重,以最小化预测分类和观察分类之间的误差。Sumit Saha 提供了一个更深入的解释:https://towardsdatascience . com/a-comprehensive-guide-to-convolutionary-neural-networks-the-Eli 5-way-3bd2b 1164 a53

有许多预训练的神经网络已经被训练来对从飞机到柯基犬的一系列图像进行分类。通过使用预训练模型的权重并根据我们的目的对它们进行微调,我们可以节省计算时间并克服一些采样不足。

资料组

CelebA 数据集包含超过 200,000 张名人的照片,这些照片标有包括性别在内的 20 个属性。图像是从肩膀以上开始的,所以大部分信息都在面部特征和发型上。

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

Example image available from CelebA

建模

特征抽出

我们将使用 VGG16 预训练模型,并对其进行微调,以最好地从名人图像中识别性别。

vgg=VGG16(include_top=False, pooling=’avg’, weights=’imagenet’,
input_shape=(178, 218, 3))

我们使用“include_top=False”来移除为识别 VGG16 被训练识别的一系列对象(例如,苹果、柯基犬、剪刀)而设计的全连接层,并且我们下载与 ImageNet 竞赛相关联的权重。

下表 1 显示了 VGG16 的卷积架构;对于所有的卷积,有数百万个权重,我们可以选择训练或保持冻结在预训练值。通过冻结模型的所有权重,我们有欠拟合的风险,因为预训练的权重不是为我们的特定任务专门估计的。相比之下,通过训练所有的权重,我们冒着过度拟合的风险,因为模型将开始“记忆”训练图像,这是由于高参数化的灵活性。我们将通过训练最后一个卷积块来尝试折衷:

# Freeze the layers except the last 5
for layer in vgg.layers[:-5]:
 layer.trainable = False# Check the trainable status of the individual layers
for layer in vgg.layers:
 print(layer, layer.trainable)

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

Table 1: Architecture of VGG16 model after turning final layers on

VGG16 模型中的第一个卷积块识别更一般的特征,如线条或斑点,因此我们希望保留相关的权重。最后的块识别更精细的尺度特征(例如,与飞机翼尖相关的角度),所以我们将训练那些给定名人图像的权重。

模型编译

在卷积提取特征之后,我们将在模型中添加两个密集层,使我们能够根据识别的特征对图像进行预测。您可以使用单个密集图层,但是附加的隐藏图层允许在对要素进行更复杂的解释的情况下做出预测。过多的密集层可能会导致过度拟合。

# Create the model
model = models.Sequential()# Add the VGG16 convolutional base model
model.add(vgg)

# Add new layers
model.add(layers.Dense(128, activation=’relu’))
model.add(layers.BatchNormalization())
model.add(layers.Dense(2, activation=’sigmoid’))

我们添加了一个批处理规范化层,它将缩放我们的隐藏层激活值,以减少过度拟合和计算时间。最后一个密集层对性别进行预测(表 2)。

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

Table 2: Custom Model Architecture

因为我们允许模型训练卷积层和密集层,所以我们将估计数百万个权重(表 3)。给定我们构建的网络的深度,为像随机梯度下降这样的优化器选择最佳的恒定学习速率将是棘手的;相反,我们将使用 ADAM 优化器,它可以调整学习速度,在训练中迈出更小的步伐。

model.compile(optimizer=’adam’, loss=’binary_crossentropy’, metrics=[‘accuracy’])

使用 Keras,我们将设置我们的数据生成器来支持我们的模型,并使网络适合我们的训练集。

data_generator = ImageDataGenerator(preprocessing_function=preprocess_input)train_generator = data_generator.flow_from_directory(
 ‘C:/Users/w10007346/Pictures/Celeb_sets/train’,
 target_size=(178, 218),
 batch_size=12,
 class_mode=’categorical’)validation_generator = data_generator.flow_from_directory(
 ‘C:/Users/w10007346/Pictures/Celeb_sets/valid’,
 target_size=(178, 218),
 batch_size=12,
 class_mode=’categorical’)model.fit_generator(
 train_generator,
 epochs=20,
 steps_per_epoch=2667,
 validation_data=validation_generator,
 validation_steps=667, callbacks=cb_list)

经过 6 个时期后,模型达到了 98% 的最大验证精度。现在应用于测试集。

测试

我们有一个每个性别 500 张图片的测试集。该模型将通过网络为我们提供每张图像的预测概率,我们可以简单地将这些概率的最大值作为预测的性别。

# obtain predicted activation values for the last dense layer
pred = saved_model.predict_generator(test_generator, verbose=1, steps=1000)# determine the maximum activation value for each sample
predicted_class_indices=np.argmax(pred,axis=1)

**我们的模型预测名人性别的准确率高达 98.2%!**这相当于人类的能力。

这个模型适用于非名人吗?让我们试试作者。这个模型在作者的近照上表现很好。

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

上面这张图片的预测概率是 99.8%是男性。

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

这位模特在作者年轻、头发蓬乱的过去也做得很好;它预测 98.6%是男性。

结论

这个练习展示了微调预训练 ConvNets 的强大功能。每个应用程序都需要不同的方法来优化建模过程。具体来说,模型的架构需要以补充数据集特征的方式进行设计。佩德罗·马塞利诺对调整微调过程以适应任何数据集的一般规则做了很好的解释:https://towardsdatascience . com/transfer-learning-from-pre-trained-models-f 2393 f 124751

我感谢对这项工作的任何反馈和建设性的批评。与分析相关的代码可以在 github.com/njermain 的找到

Kaggle 上数据科学家的性别薪酬差距

原文:https://towardsdatascience.com/gender-pay-gap-among-data-scientists-on-kaggle-87b393aa21fe?source=collection_archive---------14-----------------------

美国和印度的性别薪酬差距一样吗?

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

Pixabay.com

2012 年,数据科学家被《哈佛商业评论》评为 21 世纪最性感的工作。从那以后,数据科学领域发展了很多,也发生了很多变化。但是,这份如此现代的工作避免了困扰许多传统工作的性别薪酬不平等吗?

数据科学平台 Kaggle 最近在 2018 年机器学习和数据科学调查中对其全球用户群进行了调查。近 24,000 个回复让我们对这个问题有了深入的了解。

谁是调查对象?

调查答复主要来自美国和印度,中国远远排在第三位:

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

这三个国家的大多数受访者都是男性。大约 23%的美国受访者是女性,而印度和中国的女性受访者比例分别为 15%和 16%。

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

进一步研究不同国家男性和女性受访者的年龄差异显示:

  • 在美国,25-29 岁是男性和女性最常见的年龄范围,平均年龄为 33 岁。
  • 50 岁及以上的受访者大多是美国男性——这一年龄范围在美国女性中的代表性不足。
  • 中国受访者的平均年龄为 26.4 岁,略低于印度 26.6 岁的平均年龄。
  • 印度男性受访者的年龄分布显示,最年轻的年龄组(18-21 岁)比任何其他年龄组都更常见,而对于印度女性来说,22-24 岁的年龄范围更普遍。

按国家和性别划分的收入水平如何?

调查参与者报告了他们的收入,用美元表示了一个范围。

一些受访者报告的年薪超过 20 万美元,但特别是在印度和中国,年薪大多低于 5 万美元。美国的平均年收入为 10 万美元,印度和中国的平均年收入约为 2.2 万美元(由于括号中的数据为工资,因此每个受访者的括号中均为中间值)。如果将非常高的工资从样本中剔除,那么中国和印度的平均工资将比美国还要低。

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

Note that the amounts below zero are an artifact from trying to plot a smooth curve. The lowest reported salary range was 0–10,000 USD and that range was encoded as 5,000 USD.

将每个国家的数据按性别分类显示:

  • 中国女性的薪酬分布比男性更窄,平均水平似乎也更低。
  • 印度男性受访者的收入分布范围比女性受访者窄。
  • 美国男性调查者的薪酬分布显示了一个较高的中心点,约为 10 万美元,范围超过 20 万美元,而美国女性的薪酬分布在 10 万美元以上急剧下降。

按国家和性别划分的工资分布似乎表明,男性收入高于女性。这种性别薪酬差距与其他地方的研究结果一致。

女性数据科学家的工资比男性低吗?

到目前为止,我们已经查看了所有对调查的回复。调查受访者报告了各种各样的职称、教育程度、工作经验年限和使用的工具。我们需要更仔细地剖析这些数据,这样我们就不会将一位 50 多岁的印度男性首席执行官与一位印度女数学系学生进行比较,然后得出他比她挣得多的结论(他很可能会这么做)。

Kaggle 调查中有一个问题可以帮助我们关注数据科学家。Kaggle 问每个参与者“你认为自己是数据科学家吗?”。

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

印度女性在*“可能是”群体中有所下降,但除此之外,我们还有数百人认为自己在“是”*群体中属于美国和印度。每一组中中国女性的数量都要少得多,因此我们未来将专注于美国和印度。

现在,我们有了尝试回答男女之间是否存在薪酬差距这一问题的所有要素——我们将研究将自己列为数据科学家的个人,并比较他们的薪酬、年龄、性别和国家。在一个可视化中包含了很多维度:

  • 下面您会看到四个图表(左栏是美国,右栏是印度,最上面一行是将自己列为“可能”“肯定”是数据科学家的个人,底部显示只是是“肯定”数据科学家的个人)。
  • 每张图表都以等高线图的形式显示了年龄与收入分布的关系——“峰值”是大部分值所在的位置。
  • 为了便于比较,男性和女性的回答重叠在一起,女性的回答用蓝色轮廓线表示,而男性的回答用橙色实线表示。
  • 要比较男性和女性,只需比较每个图中橙色和蓝色的“峰值”,并注意分布如何不同。

请注意,平滑的线条给人以极其详细和丰富的数据的印象,但我们已经进入了数据集的一些相当稀疏的区域(例如,在 45-50 岁的年龄组中,只有三名印度女性认为自己“绝对”是数据科学家)。尽管如此,等高线图的总体形状应能让我们对数据有所了解:

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

Each chart is showing the most relevant ranges on Age and Pay — ie some of the highest incomes are not shown but they were included in the analysis. Number of respondents in each chart quadrant: upper left: 1,242 men and 352 women, lower left: 669 men and 172 women, upper right: 908 men and 117 women, lower right: 435 men and 79 women.

很难估计受访者在将自己归类为“可能”或“肯定”数据科学家时的自信程度。性别之间和国家之间也可能存在文化差异。在本次分析中,我们将重点关注那些有信心认为自己“绝对”是数据科学家的人,因此,让我们试着理解我们可能从最下面一行的图表中推断出什么:

来自美国的 20 多岁的女性数据科学家回应了 Kaggle 的调查,似乎比他们的男性同行挣得多一点。但是对于年龄较大的男性来说,工资似乎高于女性(30-35 岁年龄组的工资范围更高,扩展到 15 万美元以上)。

来自印度的男性和女性自我分类数据科学家之间的薪酬差距似乎很小(分布的总体形状相当相似)。在相同的薪酬范围内,大多数男性印度数据科学家似乎比女性年轻几岁(男性和女性的高峰期相差 2-3 岁)。

包装它

我们研究了一个包含近 24,000 份调查反馈的丰富数据集。一旦我们将数据按国家、作为数据科学家的自我分类和性别进行了划分,我们就能够按年龄对男性和女性的自我报告的薪酬数据进行比较。

对数据的分析表明,回答 Kaggle 调查的美国老年男性数据科学家比他们的女性同行挣得更多,收入范围更广。印度男性和女性数据科学家之间的薪酬差距似乎不那么明显。

我们能从这里去哪里?关于美国和印度之间更大的社会经济趋势和差异,这告诉了我们什么?薪酬差距在成熟经济体或行业更明显吗?

查看这些文章了解更多:https://www . aauw . org/research/the-simple-truth-about-the-gender-pay-gap/https://www.payscale.com/data/gender-pay-gap

如果你喜欢这个帖子,请鼓掌。这篇文章也发表在我的网站上:http://flo lytice . com/blog/gender-pay-gap-in-data-scientists-on-ka ggle。

这篇文章的分析和图形是用 Python 制作的。

你可以在这里找到 Github 上的完整项目:https://github.com/Lindstaedt/Kaggle-2018-Survey-Analysis

来自 Kaggle 的原始数据集在这里:https://www.kaggle.com/kaggle/kaggle-survey-2018/

泛化界限:依赖你的深度学习模型

原文:https://towardsdatascience.com/generalization-bounds-rely-on-your-deep-learning-models-4842ed4bcb2a?source=collection_archive---------12-----------------------

你的深度学习系统对新数据会有怎样的表现(泛化)?它的性能能差到什么程度?评估算法的概括能力是建立信任和依赖人工智能系统所必需的。

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

Can you trust your AI? Will your AI go binge drinking or try to destroy the world once it goes live? (image source: https://unsplash.com/photos/0E_vhMVqL9g)

TL;DR —传统方法(VC 维、Rademacher 复杂性)无法提供可靠、有用(足够紧密)的泛化界限。如果网络压缩与泛化边界的估计齐头并进会怎样?那是一张中奖彩票!

为什么统计学习理论很重要?

确保一个算法一旦上线就能按预期执行是必要的:人工智能系统需要安全可靠。证明人工智能算法的性能对于推动采用和信任是必要的[5]

此外,理解算法的泛化属性是政策制定者的要求,正如欧盟委员会发布的可信人工智能(AI)道德准则所强调的[0]。

尽管如此,不幸的是,模型的泛化特性(泛化理论)的研究仍然是一个投资不足的研究领域。在训练、验证和测试集中拆分数据已经成为进行的标准方式,并且通常被认为是进行的唯一方式。然而,对于我们无法量化算法的泛化能力来说,在测试(保留)集上估计算法的泛化属性的想法可能只是一个聪明的变通办法;这是一个棘手的过程,使我们暴露在泄漏的风险中,并需要额外的独立性假设(参数从维持集独立选择),这已被 p-hacking [20] 等实践所混淆

什么是泛化?

我们的主要工作假设是,数据是由一个潜在的、未知的分布 D 产生的。统计学习不是直接访问分布,而是假设给我们一个训练样本 S ,其中 S 的每个元素都是 i.i.d .并根据 D 生成。学习算法从函数空间(假设类) H 中选择一个函数(假设 H),其中 H = {f(x,α)}其中α是参数向量。

然后,我们可以将假设的泛化误差定义为从分布 D 中选取的样本 x 的误差期望值与经验损失(给定样本 S 的损失)【4,11】之差

我们的工作是给泛化误差上界:它能有多坏?

传统方法:模型容量

在一般化理论的传统方法中,一般化的能力由假设类 h 的复杂性(容量)来建模。粗略地说,类的“容量”是它可以(似乎)很好地适合多少不同的数据集。高容量模型类更灵活,但也更容易过度拟合。[…产能控制是一门艺术,它使用足够灵活的模型以获得良好的适应性,而不使用过于灵活以至于过度适应的模型

我们如何定义一个假设类的复杂性 H ?传统的泛化理论概念包括 VC 维、Rademacher 复杂度和 PAC-Bayes 界。

VC 维与死亡神经元

VAP Nik–Chervonenkis(VC)维度是一种通过评估其成员的波动程度来衡量一类函数的复杂性的方法:类 H 的 VC 维度被定义为可以被 H 的成员分解的最大点数。如果一组点被一类函数分解,不管我们如何给每个点分配一个二元标号,这个类中的一个成员可以完美地分离它们。[5]

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

Figure 1 — Ballooning number of parameters — yet the test error does not explode [1]

张等人【7】的实验表明,20 多年前 Bartlett 的 VC 计算(节点数 #层数)*【2】对基于现实数据训练的深度网络的真实“参数复杂性”(当然现在没人知道)。

这可能并不令人惊讶,例如,根据 死神经元 : 当网络的规模足够大并且非线性被选择为 ReLU 时,许多权重为零【13】。

那么,我们如何估算一个模型的风险值呢?

PAC 可学习性和 Rademacher 复杂性

大概近似正确(PAC)可学习性的定义很简单:有一个算法,对于每个分布 d 和є,δ > 0,找到一个概率为 1-δ的“є-optimal”假设。每个分布都有一个算法是一个很强的要求:Rademacher 复杂度是为一个特定的未知分布定义的 D

A sketched derivation of the Rademacher complexity based on [23]

简而言之,Rademacher 复杂度测量假设类 H 适合随机 1 二进制标签的能力。如果与 VC 维相比,Rademacher 复杂度是分布相关的,并且是为任何一类实值函数(不仅仅是离散值函数)定义的。

正如 Bartlett 的 VC 计算*,*的情况一样,Rademacher 复杂性没有为深度学习提供有用的泛化界限。实证测试表明,事实上,许多神经网络与随机标签的训练集完美匹配,我们期望对应的模型类 h 具有几乎完美的 Rademacher 复杂性。当然,这是 Rademacher 复杂性的一个微不足道的上限,在现实设置中不会导致有用的泛化界限【7】。

换句话说,事情在理论上并不可行,我们只剩下“炼金术”和一些最佳实践:实际上降低如此复杂的学习架构的 Rademacher 复杂性的唯一方法是尝试训练一个分类器,并通过一个保留的集合来检测一般化的缺乏。世界上的每一个实践者都已经这样做了(没有意识到),张等人(【7】)强调理论目前没有提供更好的东西【2】值得称赞

走向新颖的方法

一般化理论的经典方法很难计算出今天复杂的 ML 模型,更不用说在设计学习系统时用作指南【2】。一般化理论的经典方法只是描述性的:换句话说,如果一般化没有发生,我们可以通过利用复杂性的度量来证明这一经验发现(VC 维度,Rademacher),但我们没有任何可以指导我们的规定性原则[2]。

此外,经验证据证明,假设类具有高,甚至无限的能力,可能在实践中工作得很好。这是真的,不仅对于深度学习模型如此,对于其他机器学习方法论也是如此:例如,具有某些核(例如:径向基函数)的 SVM 的特征在于无限的 VC 维。甚至更简单的线性模型也可以欺骗我们:过参数化线性模型的假设空间可以记忆任何训练数据,并在参数范数任意大的情况下,将训练和测试误差降低到任意接近于零(包括零),即使参数距离地面真实参数任意远【12】

*深度学习将泛化理论的传统方法强调到了极致:*深度网络的一个主要难题围绕着没有过拟合,尽管存在大的过参数化,尽管随机标记数据上的零训练误差证明了大容量【1】。

复杂性的整体概念正在被重新审视。专注于深度学习,有许多新颖的概括方法。

基于规范的能力度量

一种方法是查看基于通过差值归一化的权重矩阵的范数度量的容量度量。数据样本的输出分类容限是模型分配给正确类别的值减去所有其他类别的最大值的差值。

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

Figure 2 — Note that path norms, sum over all possible paths going from the input to the output of the network, passing through one single neuron in each layer [14]

基于范数的度量并不明确依赖于模型中的参数数量,因此更有可能代表其能力 [14]: 基于范数的度量可以解释深度神经网络(DNNs)的泛化,因为在随机标签上训练的模型的复杂性总是高于在真实标签上训练的模型的复杂性,对应于后者的良好泛化能力 [14]

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

Figure 3 — Different complexity measures of a VGG network (a Convolutional Neural Network architecture) on CIFAR10 data. In all experiments, the training error of the learned network is zero. The plots indicate that these measures can explain the generalization as the complexity of model learned with random labels is always higher than the one learned with true labels. Furthermore, the gap between the complexity of models learned with true and random labels increases as we increase the size of the training set [22]

与基于范数的方法相关的另一个有趣的容量度量是网络的 Lipschitz 常数。Lipschitz 常数是权重矩阵的谱范数的乘积。谱范数是矩阵的最大奇异值:一个矩阵可以拉伸一个向量多少[9]。

经验证据表明,李普希茨常数与超额风险(测试误差减去训练误差)相关。然而,这一指标随着时间的推移而增长,尽管超额风险处于平稳状态[4];再一次,通过边缘的 Lipschitz 常数进行归一化,可以中和的增长(见图 4)

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

Figure 4 — AlexNet trained with SGD on cifar10 [4]

压缩方法

一般化的基本定理陈述了如果训练集具有 m 个 样本,则定义为训练数据和测试数据上的误差之差的一般化误差的顺序为 sqrt(N’/m)其中***N’***

取一个矩阵 C N 可训练参数并尽量压缩成另一个带较少参数的矩阵***【C’(【N】)并且训练误差与*****大致相同)确实概括得好。【23,24】

我发现压缩方法非常有吸引力。一方面,我们确定了 DNNs 的推广范围。另一方面,我们获得了广泛的实际和操作优势:

  1. 将较小的(经过训练的)模型部署到生产中有很多好处:较小的模型速度更快,消耗的能量更少(这在移动和嵌入式应用中很重要),占用的内存也更少。
  2. 最近的研究提供了一些被称为“彩票假说”的经验证据:随机初始化的密集神经网络包含一个子网络(中奖彩票),该子网络被初始化为当被隔离训练时,它可以在最多相同次数的迭代训练后匹配原始网络的测试精度 [16]。采用能够识别中奖彩票的训练策略意味着 a)更快的学习 b)更高的测试准确度 c) …)

除了“彩票方法”,还有许多其他有趣的网络压缩方法。我发现一个特别吸引人的想法是受张量网络的启发:这个想法“张量训练”DNN 的全连接层的权重矩阵已经显示了有希望的实证结果[17]。

[25]提供了网络压缩方法的调查,尽管这种压缩通常涉及重新训练压缩的网络,这是基于基本定理和[23,24]提供的压缩的一般化理论的方法没有考虑的。

结论

为了能够确保深度学习算法的可靠性,我们需要能够估计有用的(紧密的)泛化边界。这是一个开放的问题,传统的方法(VC dimension,Rademacher)无法提供答案,而新的方法正在开发中。

免责声明

这篇博文中所表达的观点是我的,并且仅是我的。错误和不准确也是如此。

参考

[0]https://EC . Europa . eu/futurium/en/ai-alliance-consultation/guidelines/1 # Robustness

[1] Poggio,Tomaso,等,“深度学习理论 III:解释非过度拟合难题。”arXiv 预印本 arXiv:1801.00173 (2017)。[ 链接 ]

[2]桑吉夫·阿罗拉(Sanjeev Arora),《一般化理论与深度网络导论》(2017) [ 链接 ]

[3] Desh Raj,学习理论导论—第 1 部分[ 链接 ]

[4]巴特利特、彼得·l、迪伦·j·福斯特和马图斯·j·特尔加斯基。"神经网络的光谱标准化边界界限."神经信息处理系统进展。2017.

[5]成长的烦恼——2018 年全球 CEO 展望[ 链接

[6] Jordan Boyd-Graber,分类:Rademacher 复杂性,机器学习,第 6 讲,[ 链接 ]

[7]张、等,“理解深度学习需要反思概括。”arXiv 预印本 arXiv:1611.03530 (2016)。

[8]科斯马·罗希拉·沙莉兹,本科生能力控制,2012,[ 链接

[9]吉田、雄一和宫藤健。"谱范数正则化用于提高深度学习的泛化能力."arXiv 预印本 arXiv:1705.10941 (2017)。

[10] Boyd,s .,EE263 讲义(2015),奇异值分解[ 链接 ]

[11] Shawe-Taylor,j .和 Rivasplata,o .,“统计学习理论:搭便车指南”,2012 年,[ 链接 ]

[12] Kawaguchi,Kenji,Leslie Pack Kaelbling 和 Yoshua Bengio。“深度学习中的泛化。”arXiv 预印本 arXiv:1710.05468 (2017)。[ 链接

[13]维达尔、雷内等,《深度学习的数学》arXiv 预印本 arXiv:1712.04741 (2017)。[ 链接

[14] Jakubovitz,Daniel,Raja Giryes 和 Miguel RD Rodrigues。“深度学习中的泛化错误。”arXiv 预印本 arXiv:1808.01174 (2018)。[ 链接

[15] Rob Schapire,COS 511:理论机器学习讲义,第 09 讲,[ 链接 ]

[16]弗兰克、乔纳森和迈克尔·卡宾。"彩票假说:寻找稀疏的、可训练的神经网络."arXiv 预印本 arXiv:1803.03635 (2018)。

[17]诺维科夫,亚历山大等,“张量化神经网络”神经信息处理系统进展。2015.

[18]周、哈蒂等:“解构彩票:零、符号与超级市场”。优步工程博客帖子。2019.[ 链接

[20]巴格纳尔、亚历山大和戈登·斯图尔特。“证明真正的错误:Coq 中的机器学习与验证的泛化保证.”(2019).【链接

[21] Neyshabur,Behnam,Ryota Tomioka 和 Nathan Srebro。"神经网络中基于规范的容量控制."学习理论会议。2015.[ 链接

[22] Neyshabur,Behnam 等人,“探索深度学习中的泛化”神经信息处理系统的进展。2017.

[23] Belkin,Mikhail 等人,“调和现代机器学习和偏差-方差权衡” arXiv 预印本 arXiv:1812.11118 (2018)。[ 链接

[23]巴斯卡拉,CS 5966/6966:机器学习理论,第 6 讲[ 链接 ]

[23] Arora,Sanjeev 等人,“通过压缩方法对深度网络进行更强的推广” arXiv 预印本 arXiv:1802.05296 (2018)。[ 链接

[24] Arora,Sanjeev,通过压缩证明深度网络的一般化(2018) [ 链接

[25]程,于等.深度神经网络模型压缩与加速综述 arXiv 预印本 arXiv:1710.09282 (2017)。[ 链接

深度强化学习中的泛化

原文:https://towardsdatascience.com/generalization-in-deep-reinforcement-learning-a14a240b155b?source=collection_archive---------9-----------------------

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

source

监督学习中的过拟合

机器学习是一门学科,在这门学科中,给定一些训练数据\环境,我们希望找到一个优化某些目标的模型,,但目的是在训练期间模型从未见过的数据上表现良好。这通常被称为概括,或者学习超出培训环境细节的有用知识的能力。

为了做到这一点,我们通常要求训练数据分布能够代表真实的数据分布,我们确实希望在这些数据分布上表现良好。我们将数据分为训练集和测试集,并尝试确保这两个集代表相同的分布。这在监督学习环境中很容易看到:

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

source

我们可以看到,虽然训练样本和测试样本不同,但它们是由相同的底层过程生成的。如果不是这样,监督学习中泛化的标准概念就不成立,并且很难证明我们的期望,即在训练集上的学习也应该在测试集上产生良好的结果。

机器学习中的一个常见挑战是避免过度拟合,这是一种我们的模型“太好”适应训练数据的细节和细微差别的情况,这种方式对它在测试数据上的性能是有害的。

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

在上面的例子中,我们可以看到一个正弦曲线(黑色曲线)给出了一个体面的近似数据。当我们将数据分为训练集(蓝色)和测试集(红色)时,我们看到试图“太好地”拟合训练集会导致橙色曲线,该曲线显然与黑色曲线非常不同,并且在测试集上表现不佳。

RL 中的过拟合

在强化学习中,事情有些不同。当考虑尽可能最好地玩一个 Atari 游戏的任务时,我们似乎不清楚如何区分一些训练环境和一个测试环境。如果我训练我的代理玩“突破”并且表现良好,这不就是我的目标吗?直到最近,RL 研究中一直是这种情况,大多数研究论文报告的结果都是在相同的环境下进行的。

第一个登上头版的 RL 作品是关于使用 ALE 环境学习玩 Atari 游戏的原始 DeepMind 论文。ALE 是确定性的,2015 年一篇名为*的论文《街机学习环境:总代理评估平台表明,使用一种名为“Brute”的天真的轨迹优化算法,可以在一些游戏上产生最先进的结果。该算法甚至不知道在任何给定时刻的当前状态,但是它利用环境中的确定性来记忆成功的动作序列。这引起了人们的关注,一些习得的智能体可能在某种意义上“记忆”动作序列,并利用状态的细微差别来记住要采取的动作。*

神经网络策略记忆动作意味着什么?当学习玩一些游戏时,我们可能喜欢我们的策略来学习避开敌人,跳过障碍和抓住宝藏。具体来说,我们希望我们的策略跳过一个敌人,因为附近有一个敌人**,并且爬上梯子到平台**,因为它看到了平台上的宝藏。在完全确定的环境中,情况可能不是这样。我们的策略可能会了解到,由于背景墙上的某些视觉特征(如独特的瓷砖纹理或绘画),它需要在某个点跳跃,并且当它在某个遥远的平台上的某个位置看到敌人时,它会学习爬梯子。

这些特征与期望的特征同时出现完全是巧合,但是因为环境是决定性的,它们可能提供比我们希望我们的政策基于其决策的那些特征更强的学习信号。

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

source

随后的论文开始探索将随机性引入游戏的方法,以阻止代理记住动作序列,而是学习更有意义的行为。其他几篇论文表明,RL 策略对于它们学习的环境和它们预期部署的环境之间非常小的不匹配可能是脆弱的,这使得在现实世界中采用 RL 非常困难。我们希望我们的策略能够像在监督学习中一样一般化**,但是这在 RL 环境中意味着什么呢?**

RL 中的概括

RL 的目标通常被描述为学习马尔可夫决策过程(MDP)的策略,该策略使一些目标函数最大化,例如期望的奖励的折扣和。MDP 由一组状态 S、一组动作 A、一个转移函数 P 和一个奖励函数 r 来表征。当我们讨论一般化时,我们可以提出不同的表述,其中我们希望我们的策略在 MDP 的分布上表现良好。使用这样的设置,我们现在可以让代理在一组 MDP 上训练,并保留一些其他 MDP 作为测试集。

这些 MDP 在哪些方面有所不同?我认为有三个关键的不同点:

1.MDP 之间的状态在某些方面有所不同,但转换函数是相同的。例如,玩不同版本的视频游戏,游戏中的颜色和纹理可能会改变,但策略的行为不应因此而改变。

2.即使状态看起来相似,MDP 之间的基本转换函数也是不同的。这方面的一个例子是一些机器人操纵任务,其中各种物理参数(如摩擦系数和质量)可能会发生变化,但我们希望我们的策略能够适应这些变化,或者在可能的情况下保持稳健。

3.MDP 在大小和表面复杂性上各不相同,但是有一些基本的原则可以推广到不同大小的问题。这方面的例子可能是某些类型的组合优化问题,如旅行推销员问题,我们希望有一个策略可以解决不同大小的实例。(我之前写过关于组合优化的 RL

在我看来,这些代表了一般化挑战的主要来源,但是当然也有可能产生结合多个这样的来源的问题。接下来,我将集中讨论第一种类型。

最近,研究人员已经开始通过开发新的模拟环境来系统地探索 RL 中的泛化,这些模拟环境能够创建 MDP 的分布并拆分独特的训练和测试实例。这种环境的一个例子就是 CoinRun ,OpenAI 在论文中介绍了强化学习。这种环境可以产生大量具有不同布局和视觉外观的关卡,因此可以作为通用化的良好基准。**

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

source

在本文中,作者检查了几个变量对学习策略的泛化能力的影响:

训练集的规模:作者已经证明,增加训练 MDP 的数量可以提高泛化能力,这可以从以下方面看出:

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

source

正如监督学习中的情况一样,我们可以看到,增加训练“数据”的数量会使策略更难在训练集上成功,但会增加其推广到看不见的实例的能力。

神经网络的规模:这篇论文的另一个与监督学习的当前实践相呼应的发现是,较大的神经网络通常比较小的神经网络获得更好的泛化性能。作者使用了 DeepMind DQN 论文(他们将其命名为“自然-CNN”)中的“标准”卷积架构,并将其与 DeepMind 的 IMPALA 论文中提出的架构进行了比较。使用更大的模型结果明显更好。

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

source

正则化:监督学习中用来提高泛化能力的最常见的一套技术是 L2 正则化、剔除和批量归一化。这些技术通过添加噪声和减小权重的大小来限制神经网络的过拟合能力,并且已经成为监督学习中的标准。有趣的是,它们在深度 RL 文献中并不常见,因为它们的帮助并不总是显而易见。然而,在本文中,作者证明了这些技术确实有助于提高泛化性能。

总的来说,本文展示了一个很好的基准环境,并考察了监督学习的常见实践。但是我们能进一步提高泛化能力吗?

随机网络泛化

一篇名为深度强化学习中泛化的简单随机化技术的非常有趣的论文提出了一种比之前显示的标准正则化改进泛化的好方法。他们建议在输入图像和神经网络策略之间添加一个卷积层,以转换输入图像。这个卷积层在每集被随机初始化,并且它的权重被归一化,使得它不会过多地改变图像。这有点像数据扩充技术,自动生成更多种类的训练数据。****

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

source

神经网络策略被馈入该增强图像,并输出动作的概率,这在 RL 中是常见的。拥有各种视觉上不同的输入应该有助于模型学习更通用的特征,并且不太可能过度适应环境的视觉细微差别。这通常被称为域随机化*,经常被用来帮助在 RL 的机器人应用中弥合模拟和现实之间的差距(我在另一篇文章中写过)。不幸的是,众所周知,域随机化会遭受高样本复杂性和策略性能的高变化。***

为了减轻这些影响,作者增加了另一项损失;特征匹配。这意味着我们给我们的模型一个原始图像和一个增强图像(使用随机层),并通过将它们之间的均方误差添加到损失中来鼓励它具有相似的特征。

作为概念的证明,作者首先在一个玩具监督学习问题上尝试他们的方法;给猫和狗分类。为了使问题在泛化方面具有挑战性,他们用白狗和黑猫创建了一个训练数据集,并用黑猫和白猫创建了一个测试集。他们针对上一节提到的常见正则化方法以及图像处理文献中的一些其他数据增强技术测试了他们的方法。结果相当有趣:

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

source

在 RL 设置中,他们在几个问题中针对这些基线测试了他们的方法,包括 CoinRun,并在泛化方面取得了优异的结果。

他们进行了一项有趣的实验,以检查他们的技术是否确实创造了对视觉外观差异不变的特征,方法是在几个视觉上不同的变化中取一个样本轨迹,并将其馈送给未经他们的方法训练的模型和用他们的方法训练的模型。然后,他们使用维度缩减来可视化这些轨迹在不同模型中的嵌入:

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

source

数字代表轨迹中的阶段,颜色代表状态的视觉变化。很明显,使用新技术,状态在嵌入空间中更好地聚集在一起,这表明该模型确实已经学习了对这些令人分心的视觉变化更加不变的特征。

我认为这是一个非常有趣的研究方向,对于深度强化学习在工业中的广泛应用至关重要。希望看到更多这方面的研究。

理解机器学习中的泛化、正则化、过拟合、偏差和方差

原文:https://towardsdatascience.com/generalization-regularization-overfitting-bias-and-variance-in-machine-learning-aa942886b870?source=collection_archive---------6-----------------------

这五个术语如何定义机器学习中的“学习”

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

Photo by Scott Webb on Unsplash

如何知道机器学习模型是否真的在学习有用的东西?它不像看起来那么简单,绝对值得仔细研究。首先,这篇文章是关于机器学习的,例如,在经典书籍【T2 统计学习元素】中有解释。这些模型通常通过计算损失函数的导数并逐步向正确的方向移动其参数来学习,或一些类似的统计学习的想法。在这种情况下,“学习”实际上与人类的学习毫无关系。即使一些算法是受人脑的启发,它们的工作方式也非常不同。做出这一区分非常重要,因为“学习”一词可能会错误地暗示这种模型真的可以像人类一样“学习理解”它正在处理的数据——但事实并非如此。它唯一可以学习的是统计模式,不多也不少。

一般化

机器学习的最终目标是在训练集中找到统计模式,这些模式可以推广到训练集之外的数据。以下面这个简单的 NLP 问题为例:假设你想要预测一个序列中的一个单词,给定它前面的单词。

例如,序列“猫 __”之后可能是睡觉享受、想要。你的训练序列大概包括很多这样的名动组合,其他的可能是“她”、“一个专家”、“它好像”等等。注意,所有这些动词都有第三人称- s ,因为它们指的是序列的主语。一个好的语言模型确实可以获得这种模式,甚至可以对未经训练的序列做出正确的预测。例如,给定输入“飞机 __ ”,我们会期望模型预测离开的概率比离开的概率高,并且离开的概率比离开的概率高。在这种情况下,模型已经学习了一种更普遍适用的模式。竖起大拇指。然而这个模型不理解单词的意思,更不用说一般的语言了。例如,如果我们提供“theee plaaaane __”作为模型的输入,它将完全出错。

到底是学习吗?

规划学习过程通常是个好主意。首先,看一下培训损失。它应该接近零,或者至少是一个合理的低值(见下图)。如果不是,您的模型可能不是很合适,不够灵活,或者——这一点经常被忘记——输出不是输入数据的函数,因此没有要学习的关系。例如,想想一个句子是否真的是单词的函数。它可能不是无条件成立的,但在某些方面仍然是有用的。

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

Training loss should decrease with the number of training iterations (but not necessarily to 0)

什么是泛化 n?

如果训练损失确实如预期的那样减少了,这并不自动意味着无论模型学到了什么都是有用的。这就是验证损失发挥作用的地方。如果验证损失随着训练损失一起减少,情况看起来会好一些。在这种情况下,学习到的模式似乎会推广到看不见的验证数据。但是,验证损失通常会高于训练损失,因为并非所有模式都会泛化,如下图所示。

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

If validation loss decreases as well, the learned patterns seem to generalize.

偏见

偏差被定义为预测值和真实值之间的均方差。这是衡量模型与数据吻合程度的标准。零偏差意味着模型完美地捕捉了真实的数据生成过程。您的培训和验证损失都将为零。然而,这是不现实的,因为数据在现实中几乎总是有噪音的,所以一些偏差是不可避免的——称为不可约误差

无论如何,如果损失没有像预期的那样减少,这可能表明该模型不太适合数据。例如,如果您试图用线性模型来拟合指数关系,就会出现这种情况——它根本无法充分捕捉这种关系。在这种情况下,尝试不同的、更灵活的模型。

你也可以称之为不合身,尽管内涵略有不同。与偏差不同,拟合不足意味着模型仍有学习能力,因此您只需为更多迭代进行训练或收集更多数据。

重要的是,偏见也可能隐藏在训练数据中——这很容易被忽略。在那种情况下,你的训练损失可能会像往常一样减少。只有对真实数据的测试才能揭示这种偏差。

差异

如果一个模型的预测对输入的微小变化很敏感,则称该模型具有高方差。换句话说,你可以把它想象成数据点之间的曲面不是平滑的,而是非常起伏的。这通常不是你想要的。高方差通常意味着过度拟合,因为模型似乎捕捉到了随机噪声或异常值。

像高偏差和拟合不足一样,高方差和过度拟合也是相关的,但在意义上仍然不完全等同。见下文。

过度拟合

在模型训练期间的某个时间点,验证损失通常趋于平稳(有时甚至开始再次增加),而训练损失继续减少。这是过度拟合的信号。换句话说,模型仍在学习模式,但它们不会泛化到训练集之外(见下图)。过度拟合对于具有大量参数的模型尤其典型,例如深度神经网络。

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

Overfitting can happen after a certain number of training iterations.

训练和验证损失之间的巨大差距暗示模型不能很好地概括,您可能想要尝试缩小差距(下图)。解决过度拟合的最简单方法是提前停止,也就是说,一旦验证损失开始趋于平稳,就停止训练循环。或者,正规化可能会有所帮助(见下文)。另一方面,如果你过早停止,可能会出现不适应。

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

Generalization is low if there is large gap between training and validation loss.

正规化

正则化是一种避免高方差和过拟合以及提高泛化能力的方法。不涉及细节,正则化旨在保持系数接近于零。直观地说,模型所代表的函数更简单,不太不稳定。因此预测更加平滑,过度拟合的可能性更小(下图)。正则化可以简单到缩小或惩罚大系数——通常称为权重衰减。L1 和 L2 正则化是两种广泛使用的方法。但是你也可能遇到不同的形式,比如神经网络中的辍学正则化。

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

Regularization can help avoid high variance and overfitting.

综上所述,学习固然很好,但泛化才是我们真正想要的。就此而言,一个好的模型应该同时具有低偏差和低方差。过度拟合和欠拟合都应该避免。正规化可能是解决所有这些问题的一部分。

如果真实的情节与这里呈现的非常不同,不要感到惊讶。他们只是应该将概念形象化,并帮助理解它们。真实的损失曲线有时会以某种方式偏离。然而,知道在训练机器学习模型时要注意什么是很好的。

广义 Huber 回归

原文:https://towardsdatascience.com/generalized-huber-regression-505afaff24c?source=collection_archive---------13-----------------------

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

在这篇文章中,我们提出了一个广义的 Huber 损失函数,它可以与广义线性模型(GLM)结合,非常适合异方差回归问题。我们将讨论如何使用梯度提升树优化损失函数,并在人工数据集上将结果与经典损失函数进行比较。

让我们首先简要回顾一下休伯损失函数和广义线性模型(GLM)的基础知识。

Huber 损失和广义线性模型

Huber 损失[ Huber ]是回归问题的稳健损失函数,定义为

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

其中 y 是目标变量, ŷ 是相应的预测值, α ∈ ℝ⁺是超参数。人们很容易将这种损失视为潜在重尾误差分布的对数似然函数。事实上,对于小于 α 的绝对误差,相应的分布类似于正态分布,在该区域之外,它与更重尾的拉普拉斯分布一致。这正是这种损失对异常值稳健的原因。

这就是我们现在需要知道的关于 Huber 损失的全部情况。因此,让我们直接跳到 GLMs,通过首先记住线性回归的假设,可以最好地理解 GLMs。在线性回归中,人们通常假设因变量 Y 和某个特征向量 X 之间的线性关系中的误差项正态分布,均值为零,方差为常数σ,即y|x~x^⊤β+ε,ε ∈ 𝓝(0,σ)和β是一组变分参数。人们感兴趣的是找到最小化二次成本函数(对应于ε分布的对数似然)的最佳估计 β^hat 。对于给定的 X 的估计 ŷ 就是简单的ŷ(x)= e[y|x]=*x*⊤*β*帽子。请注意(在最大似然解释中), Huber 回归用一个更重尾的分布代替了正态分布,但仍然假设方差不变。

另一方面,GLM 方法以下列方式放松了线性回归的假设:

  1. 随机分量的非正态性:

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

2.由链接功能 g 引入的非线性:

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

指数族包含各种分布,尤其是方差是平均值的函数的分布,如泊松或伽马分布。这一特性特别适用于异方差问题,在这种情况下,误差项的恒定方差假设不再成立,例如,目标变量的范围跨越几个数量级的情况就很常见。链接功能通过贡献非线性效果额外地增强了模型的复杂性。还要注意的是,链接函数永远不会应用于 y。这与将模型拟合到转换后的目标变量的常见做法形成对比,后者通常会导致在预测被反向转换后低估平均值。这可以从詹森不等式中看出,该不等式陈述对于任何凹函数 g ,E[g(Y)|Xg(E[Y|X),对于对数或 Box-Cox 函数也是如此。还可以导出 GLM 似然函数的封闭形式的表达式,这导致了一大类损失函数,例如参见 P. Rigollet 对 GLMs 的精彩介绍[ MIT 。但是,在指数族内似乎不存在负支持度且方差非常数的连续分布。

因此,是否有可能将连接函数的概念与 Huber 损失结合起来,同时仍然具有非常数方差?下一节试图回答这个问题。

广义 Huber 损失函数

对于任何可逆函数 g : ℝ ↦ ℝ,我们将广义 Huber 损失(GHL)函数定义为

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

α ∈ ℝ⁺, y 目标变量和 ŷ 一些预测模型的连续输出。这里最重要的观察是,大小写的区分是在由 g (y)定义的“链接标度”上进行的,而范围是在原始标度上进行的。该损失函数不能转化为单变量问题[如等式(1)的情况]。然而,在固定的 ŷ_ 0 处,人们可能会将𝓛( yŷ_ 0)视为误差分布的对数似然函数𝓟( y ,*ŷ_*0)~ exp(-𝓛(yŷ_ 0)。下面我们将进一步说明𝓟( yŷ_ 0)的方差是 ŷ_ 0 的(单调)增函数。

现在让我们讨论如果我们在等式(2)的右边取 g ( y )而不是 g ⁻ ( ŷ )会发生什么。这将简单地对应于首先转换目标变量,从而估计 E[g(Y)|X]。然而,由于 E[g(Y)|Xg(E[Y|X)对于任何凹函数 g ( y ),我们最终会低估均值。

第二种选择是在等式(2)的右边取 g ⁻ ( ŷ ),从而在原始标度上应用案例区分,这也不会有多大帮助。请记住,我们希望解决的问题是 y 的范围可以在几个数量级内变化。在这种情况下,我们通常无法找到合适的 α 值来保证对于 y 的所有范围,两种情况都适用。换句话说,只有通过等式(2)中的选择,我们才能得到非常数方差的分布。

然而,等式(2)中的损失函数在线|g(y)-ŷ| =α处具有跳跃不连续性,这可以用一种或另一种方法消除。等式(2)的以下平滑版本在实践中证明工作良好

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

其中∓= SGN(g(y)-ŷ)。
如图[1]所示,对于固定的 y _0,函数𝓛_s( y _0, ŷ )没有局部最小值,但也不是凸的。此外,𝓛_s( y _0, ŷ )展示了一个小斜率区域,这可能导致基于梯度的优化例程中的收敛问题。然而,这些问题通常可以通过选择一个好的起始向量来克服。我们将在下面用一个例子进一步讨论这个问题。

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

Figure 1: Left: Smoothed generalized Huber function with y_0 = 100 and α =1. Right: Smoothed generalized Huber function for different values of α at y_0 = 100. Both with link function g(x) = sgn(x) log(1+|x|).

在图[2]中,我们说明了前面提到的𝓟( yŷ_ 0)的比例随着 ŷ_ 0 的增加而增加。正是这一特点使得 GHL 函数稳健并适用于异方差问题。注意,𝓟( yŷ_ 0)的比例也随着 α 的增加而增加,如图【2】右侧所示。注意,我们没有将 𝓟( yŷ_ 0)规格化。相应的归一化因子将取决于 ŷ_ 0,研究是否可以导出封闭形式的表达式将是有趣的。

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

Figure 2: Left: (Unnormalized) Error distribution for different values of *ŷ_*0 at α = 1. Right: (Unnormalized) Error distribution at *ŷ_*0 = 1 for different values of α. Both with link function g(x) = sgn(x) log(1+|x|).

为了用梯度法优化𝓛_s( yŷ ,我们需要这个函数的梯度和海森。然而,这些表述相当冗长,因此可以在下文的附录中找到。相反,现在让我们来看最后一个例子。

例子

让我们考虑一个简单的一维问题,具有非常数方差的偏斜正态误差分布,即y=x+ε_ skew normal。我们使用了具有偏斜度参数 a =100, loc = 0 和 scale = 1 + | x |的 SciPy skewnorm 对象,并从区间[-500,500]创建了一个线性间隔的网格,网格中有 N = 10⁶个示例。此外,我们训练了三个 LightGBM 模型。一个在 g ( y )上的均方根误差(RMSE)模型,一个在 g( y )上的平均绝对误差(MAE)模型,还有一个 GHL 模型,都带有链接函数g(x)= SGN(xlog(1+|x|)。通过使用三重交叉验证方法,基于 R -score 度量,通过早期停止来训练模型。GHL 函数中的自由参数也被交叉验证并被选择为 α = 0.67。LightGBM 中的所有采样参数都设置为 1,num_leaves = 31,而所有其他参数都保留为默认值。

一般来说,为了收敛到 GHL 损失函数的最小值,需要一个好的起始向量。这里我们首先用经典的 Huber 目标函数(Huber 参数 α = 2)在 g ( y )上训练了一个只有 20 棵树的小型 LightGBM 模型。该模型的输出然后被用作 GHL 模型的起始向量(init_score)。

图[3]显示了所有三个模型的测试集(0.7/0.3 分流比)预测的散点图,其中预测最接近来自 GHL 模型的趋势线。下表还总结了一些指标,并举例说明了 GHL 模型在测试集上取得了明显更好的结果,同时比其他两个模型需要更少的树。

这个例子的 Jupyter 笔记本以及线性估计器包可以在这里找到【GIT】。线性估计器也可以与 pip 一起安装:

pip 安装 ghlestimator

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

Comparison of RMSE, MAE and (smoothed) Generalized Huber. Predictions are partitioned into 150 equally sized bins and within each bin the mean is plotted against the true mean of that partition. Black dots show a trend line of 45 degrees.

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

最后,我要感谢我的同事塞巴斯蒂安·霍弗就这个话题进行了富有成效的讨论。

附录

𝓛_s( yŷ 的梯度由下式给出

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

黑森被发现

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

这里我们定义了a=(g⁻(ŷ**α)-g⁻(ŷ))和b=(y-g⁻(g(y)α)用∓ = sgn()

广义线性模型

原文:https://towardsdatascience.com/generalized-linear-models-9cbf848bb8ab?source=collection_archive---------0-----------------------

高级统计建模简介

在本文中,我想解释广义线性模型(GLM),这是学习更高级的统计建模的一个很好的起点。学习 GLM 让你了解我们如何使用概率分布作为建模的基础。我假设你熟悉线性回归和正态分布。

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

Image by Semevent from Pixabay

线性回归再探

线性回归是通过解释变量 X 的线性组合来预测连续变量 y 的值。

在单变量情况下,线性回归可以表示如下:

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

Linear regression

这里, i 表示每个样本的指数。请注意,该模型假设噪声项呈正态分布。该模型可以说明如下:

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

Linear regression illustrated

通过三个正态 PDF(概率密度函数)图,我试图说明数据遵循具有固定方差的正态分布。

泊松回归

所以你只需要知道线性回归?肯定不是。如果你想在实际问题中应用统计建模,你必须知道更多。

例如,假设您需要用传感器值( x )作为解释变量来预测缺陷产品的数量( Y )。散点图看起来像这样。

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

Do you use linear regression for this data?

如果你试图对这类数据应用线性回归,会有几个问题。

  1. X 和 Y 之间的关系看起来不是线性的。更有可能是指数级的。
  2. 相对于 X,Y 的方差看起来不恒定。这里,当 X 增加时,Y 的方差似乎也增加。
  3. 因为 Y 代表产品的数量,所以它必须是正整数。换句话说,Y 是一个离散变量。然而,用于线性回归的正态分布假定变量是连续的。这也意味着通过线性回归的预测可能是负的。它不适合这种计数数据。

在这里,你能想到的更合适的模型是泊松回归模型。泊松回归是广义线性模型(GLM) 的一个例子。

广义线性模型有三个组成部分。

  1. 线性预测器
  2. 链接功能
  3. 概率分布

在泊松回归的情况下,公式是这样的。

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

Poisson regression

线性预测器只是参数( b )和解释变量( x )的线性组合。

链接功能字面上“链接”线性预测值和概率分布参数。在泊松回归的情况下,典型的连接函数是对数连接函数。这是因为泊松回归的参数必须是正的(稍后解释)。

最后一个部分是概率分布,它产生观察变量 y 。当我们在这里使用泊松分布时,该模型被称为泊松回归。

泊松分布用于模拟计数数据。它只有一个代表分布的均值和标准差的参数。这意味着平均值越大,标准差越大。见下文。

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

Poisson distribution with mean=1, 5, 10

现在,让我们将泊松回归应用于我们的数据。结果应该是这样的。

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

Poisson regression illustrated

品红色曲线是通过泊松回归的预测。我添加了泊松分布的概率质量函数的条形图,以明确与线性回归的区别。

预测曲线是指数曲线,因为对数连接函数的倒数是指数函数。由此也可以清楚地看出,由线性预测器计算的泊松回归参数保证为正。

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

Inverse of log link function

如果使用 Python, statsmodels 库可以用于 GLM。泊松回归的代码非常简单。

# Poisson regression code
import statsmodels.api as sm
exog, endog = sm.add_constant(x), y
mod = sm.GLM(endog, exog,
             family=sm.families.Poisson(link=sm.families.links.log))
res = mod.fit()

endog(内生)和 exog(外生)就是你在 statsmodels 中怎么称呼 yX 。请注意,您需要将常数项添加到 X 中。没有这个,你的线性预测器就只是 b_1x_i* 。

实际上,您不需要在这里提供 link 参数,因为 log link 是 Poisson 系列的缺省值。

我用来创建所有图形的完整代码在我的 Github 库中。

其他典型的 GLM

线性回归也是 GLM 的一个例子。它只是使用恒等连接函数(线性预测器和概率分布的参数是相同的)和正态分布作为概率分布。

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

Linear regression

如果用 logit 函数作为连接函数,用二项式/伯努利分布作为概率分布,那么这个模型就叫做 logistic 回归

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

logistic regression

如果用 z 表示线性预测器,上面的等式等价于下面的。

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

Logistic function

第二个方程的右边称为逻辑函数。因此,这个模型被称为逻辑回归。

由于逻辑函数对任意输入返回值介于 0 和 1 之间,因此它是二项式分布的合适链接函数。

逻辑回归主要用于二元分类问题。下面是一个用逻辑回归拟合一些数据的例子。

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

Logistic regression illustrated

自定义 GLM

到目前为止,我解释的模型使用了概率分布和链接函数的典型组合。换句话说,上面所有的模型都使用了规范链接函数。

这是概率分布及其规范链接函数的列表。

  • 正态分布:身份函数
  • 泊松分布:对数函数
  • 二项式分布:logit 函数

但是,您不一定要使用规范链接函数。更确切地说,统计建模的优势在于,您可以创建任何类型的模型来很好地适应您的数据。

例如,让我们考虑以下数据。

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

这看起来类似于我为泊松回归准备的数据。然而,如果你仔细观察数据,似乎 y 相对于 X 的方差是恒定的。况且 y 是连续的,不是离散的。

因此,这里使用正态分布是合适的。由于 Xy 之间的关系看起来是指数关系,你最好选择对数链接函数。

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

GLM with non-canonical link function

使用 statsmodels,您可以像这样编码。

mod = sm.GLM(endog, exog,
             family=sm.families.Gaussian(sm.families.links.log))
res = mod.fit()

请注意,您需要在这里指定链接函数,因为高斯分布的默认链接是身份链接函数。模型的预测结果是这样的。

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

statsmodels 中实现了各种链接功能。但是,如果您需要使用更复杂的链接函数,您必须自己编写模型。

为此,Stan、PyMC3 和 TensorFlow Probability 等概率编程框架将是一个不错的选择。这可能是我未来工作的主题。

广义线性模型—简介

原文:https://towardsdatascience.com/generalized-linear-models-introduction-1b4af2a11759?source=collection_archive---------23-----------------------

本文探讨了线性模型的背景,它们的局限性和广义线性模型背后的思想,以及是什么使它们广义化。

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

Photo by Markus Spiske on Unsplash

什么是机器学习中的线性模型?

为了举例说明这个主题,我采用了这个数据集的,它有一个预测器/特征/自变量/解释变量,即Brain Weight和一个响应/目标/因变量,即Body Weight

Index Brain Weight Body Weight
 1          3.385     44.500
 2          0.480     15.500
 3          1.350      8.100
 4        465.000    423.000
 5         36.330    119.500
 6         27.660    115.000
...

响应变量Body Wight 具有连续分布。我们可以将该分布建模为预测值的线性组合— Brain Weight,(在该数据集中仅有一个)和截距项。这里,模型本质上是试图学习与每个特征相关联的权重/参数。在数学上,我们必须建立以下线性方程的模型—

y = Body Weight [Response]
X = Brain Weight [Predictor]
We are interested to model the following equation ***y_hat***
 **y_hat = W1*X1 + W0
     y = y_hat + e**

上式中,**W1******W0**统称为模型参数。在线性模型的上下文中,**W1****W0** 分别称为系数和截距。**W0** 代表所有**X1**预测值为零的情况,**W0**是我们的模型将预测的值。**

**e**称为误差项。这是不能从预测者的知识中预测的误差。这是观察到的结果(即**y**)与我们的模型预测的结果(即**W1*X1 + W0**)之间的差异。

回归函数告诉我们,对于X1值的单位变化(增加或减少),响应变量y平均变化多少。**

下面的图是符合数据的超平面(在这种情况下是直线)。

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

Figure 1: Linear Regression Example

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

Figure 2: Learned Parameter of the Linear Model

我们将再举一个例子来更具体地说明线性模型的思想。
在这个例子中,我们有这个数据集,它包含两个预测值和一个连续响应变量。在这种情况下,我们有以下情况—

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

Figure 3: Fish Length Data

**y = Fish Length [Response]
X1 = Age [Predictor]
X2 = Water Temperature[Predictor]We are interested to model the following equation ***y_hat***
 **y_hat = W1*X1 + W2*X2 + W0**     **y = y_hat + e****

下面的超平面(在这种情况下是平面)是使用模型学习的参数,即W1, W2, W0绘制的。虽然它不是数据的最佳拟合,但我们的重点是线性模型的基本概念,而不是模型的预测能力。

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

Figure 5: Linear Model with two Predictors

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

Figure 5: Learned Parameter of the Linear Model

我们可以通过将学习到的参数放入方程y_hat = W1*X1 + W2*X2 + W0来比较和交叉检查方程y = y_hat + e。为了简洁起见,我取了数据集的前十行。

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

Figure 6: Error which cannot be predicted by the model

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

Figure 7: Comparison between y and y_hat

我们可以清楚地看到,y非常接近等于y_hat和误差项e的总和。

根据上述讨论,我们可以得出结论,线性模型意味着随机变量的分布被建模为特征/预测值的线性组合。**

线性模型中的‘线性’是什么?

当我们说“特征的线性组合”时,意思是模型参数Wi是线性的,阶数为 1,而不是特征。我们估计线性参数,而不是在线性模型中估计类似于W1², W1*W2的东西。此外,特性可以有不同种类的术语,如— X1, X1*X2, X2²等。

现在我们可以为线性模型写一个通用方程如下—

**y = W0 + W1*X1 + W2*X2 + W3*X3 + ... + Wn*Xn + e**

但是,当我们进行线性回归时,我们做出某些假设,例如:1。响应变量的分布为正态分布,即*Y_i ~ N(* μ_i,σ *)* 2。预测因子/解释变量Xi的功能W0 + Wi*Xi3。解释变量和Yi 分布之间的连接/联系是响应变量的平均值。
每个数据点的预测值将以方差 σ分布在平均值周围。

*****μ_i = E(Y_i) = W0 + Wi*Xi*****

线性模型的局限性-
1。常态假设并不总是成立的,我们可能有自己的分类特征,如性别、职业类型等。或者我们可能有非正态分布的时间序列数据。
2。线性模型无法拟合具有分类响应变量的数据,如鸢尾花数据集、MNIST 数据集等。

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

Figure 8: Distribution of Categorical Target Variable

3.即使响应变量是连续的随机变量,但是其取值在诸如 0 和 1 之间的概率的范围内。
传统的线性模型将无法预测 0 到 1 之间的值,因为我们的特征可以取范围(-∞,∞)内的任何值。

现在我们已经知道,线性模型并不总是正确的选择,因为它与连续响应数据不同,可能会提供相当奇怪的结果。现在我们要做的是推广这个模型来克服这样的问题。这就产生了 GLMs,它提供了一个统一的框架,用于对源自概率分布指数族(如正态分布、二项式分布、泊松分布等)的数据进行建模。

GLM 有三个组成部分。

  1. 随机分量— 定义响应变量 y 及其概率分布。一个重要的假设是从y1yn的响应是相互独立的。
  2. 系统组件— 定义我们希望在模型中包含哪些解释变量。它还允许解释变量之间的相互作用,例如— X1*X2X1² etc.这是我们建模的部分。它也被称为协变量的线性预测器,即X1, X2, … , Xn和系数的线性预测器,即W1, W2, … , Wn.
  3. 链接组件— 连接随机组件和系统组件。响应变量期望值的函数,即E(Y),使参数呈线性,并允许E(Y)与解释变量呈非线性关系。链接函数概括了线性模型。

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

Figure 9: Components of GLM

注意,连接函数的选择与随机分量的选择是分开的。

现在我们可以说,简单线性回归模型是 GLM 的一个特例,其中随机分量具有正态分布,并且取范围(-∞,∞)内的连续值。系统组件是X.链接功能是标识功能。

 ***Y ~ N(**μ, σ²**)
                        E(Y) = μ
                        g(E(Y)) = μ = W1*X1 + e***

我们在 GLMs 中概括了什么?

  1. 我们推广了响应变量的分布,即y,可以取。
  2. 我们在解释变量Xi和响应变量Yi之间推广了链接函数

下表包含了常用的链接功能。

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

Figure 10: Types of Link Functions

让我们总结一下到目前为止我们所讨论的内容——T4。线性模型适合于模拟连续响应变量,但它们有一定的局限性。
2。广义线性模型统一了许多不同类型的属于指数密度族的响应变量分布。
3。链接函数是 GLM 中实现参数线性的关键组件,并且是概括线性模型的组件。

参考文献:
【1】b . Caffo, 03 01 第 1 部分共 1 部分广义线性模型(2015)
【2】r . Cooksey,一般线性模型的逻辑(GLM)(2013)
【3】精算教育, CT6 广义线性模型导论(GLMs) (2012)

生成包含感兴趣的主题/关键词的公共“tweets”语料库

原文:https://towardsdatascience.com/generate-a-corpus-of-public-tweets-containing-a-subject-keyword-of-interest-da86bc90259f?source=collection_archive---------22-----------------------

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

通常很难对人们的兴趣进行研究,民意测验和调查结果经常是有偏差的,或者有无意中加载的问题。因此,这意味着理解人们兴趣的最真实的 T2 方法在于他们想要分享或谈论什么,而不受任何外部影响。最简单的方法是在网上搜索包含某些特征的 twitter 帖子。

Twitter API

最初,最直观的方法是查看 twitter API。要使用它,你首先必须在 https://developer.twitter.com/en/apply-for-access 注册一个开发者账户(免费)

这里为您分配了一组凭证,您可以将它们保存为以下格式的 JSON 文件:

{
 “twitter”: {
 “auth”: {
     “consumer_key”: “xxxx”,
     “consumer_secret”: “xxx”,
     “access_token_key”: “xxx”,
     “access_token_secret”: “xxx”
 },
  “token”: “xxx”,
  “secret”: “xxx”
 }
}

接下来,我们需要安装 Twython 库pip install twython(不幸的是 python 3),之后我们可以根据需要定制下面的脚本。

# Import the Twython class
from twython import Twython
import json# Load credentials from json file
with open("twitter_credentials.json", "r") as file:
    creds = json.load(file)['twitter']['auth']# Instantiate an object
python_tweets = Twython(creds['consumer_key'], creds['consumer_secret'])
# Create our query
query = {'q': 'air quality',
        'result_type': 'popular',  # other options 'mixed'
        'count': 100,   # max 100
         # 'until':"2019-02-01",
        }import pandas as pd
# Search tweets
dict_ = {'user': [], 'date': [], 'text': [], 'favorite_count': []}
for status in python_tweets.search(**query)['statuses']:
    dict_['user'].append(status['user']['screen_name'])
    dict_['date'].append(status['created_at'])
    dict_['text'].append(status['text'])
    dict_['favorite_count'].append(status['favorite_count'])# Structure data in a pandas DataFrame for easier manipulation
df = pd.DataFrame(dict_)

这种方法的缺点是结果仅限于过去 7 天,并且最多只能返回 100 条推文。

访问两个日期之间的所有推文

相反,如果我们希望获得更久以前日期之间的所有推文,我们需要依靠其他方法。要做到这一点,我们可以依赖 GetTweetsFrom 库;https://github.com/Jefferson-Henrique/GetOldTweets-python

这是在 python 2 上设计的,尽管有一个 python 3 的实验接口,它可能工作也可能不工作。

因为我希望只提取每条 tweet 的文本,并将其保存在新的一行上进行文本处理(word2vec),所以对库提供的原始示例代码进行了轻微的调整。这里,我对查询、开始和结束日期以及输出文件名进行了硬编码。

下面的脚本遍历两个日期之间的每一天,并下载它找到的与查询匹配的前 1000 条 tweets。这可以适应用户的需求。

# -*- coding: utf-8 -*-
import sys,getopt,datetime,codecs
from datetime import date, timedeltaedate = date(2019, 10, 1)   # start date
sdate = date(2018, 10, 1)   # end datequery = 'atmospheric chemistry'
maxtweets = 1000
toptweet=False
outputFileName = 'myoutput.csv'delta = edate - sdate       # as timedelta
dates = [(sdate + timedelta(days=i)) for i in range(delta.days + 1)]if sys.version_info[0] < 3:
    import got
else:
    import got3 as gotdef main():try:tweetCriteria = got.manager.TweetCriteria()tweetCriteria.querySearch = query
        tweetCriteria.topTweets = toptweet
        tweetCriteria.maxTweets = maxtweetsoutputFile = codecs.open(outputFileName, "w+", "utf-8")def receiveBuffer(tweets):
            for t in tweets:
                outputFile.write('\n%s'% t.text)
            outputFile.flush()for dt in dates:
            print (dt)
            tweetCriteria.since = str(dt)
            tweetCriteria.until = str(dt + timedelta(days=1))got.manager.TweetManager.getTweets(tweetCriteria, receiveBuffer)except arg:
        print('Arguments parser error, try -h' + arg)
   finally:
        outputFile.close()
        print('Done. Output file generated "%s".' % outputFileName)if __name__ == '__main__':
   main()

结论

  • Twitter API 仅用于收集过去 7 天的推文。
  • 如果您需要历史数据,GetOldTweets 库非常有用
  • 然后,生成的输出文件可以用作基于 NLP 的机器学习和预测的语料库,或者关于该主题的公众观点的样本。
  • 这两种方法都非常容易使用,而且几乎是即插即用的(一旦您使用了正确版本的 python)。

使用 DCGAN 生成动漫风格人脸并探索其潜在特征表示

原文:https://towardsdatascience.com/generate-anime-style-face-using-dcgan-and-explore-its-latent-feature-representation-ae0e905f3974?source=collection_archive---------1-----------------------

逐步试验 DCGAN 并可视化其结果

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

各位,好久不见了!今天,我想写一下我学习和实验另一种深度学习技术的结果,这种技术是生成对抗网络(GAN)。最近研究了解了一下。我想如果把我的实验分享给每个人会很好。

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

Photo by Hitesh Choudhary on Unsplash

“干”主要是指产生某种东西。在这篇文章中,我想分享关于生成动漫人物面部的实验。不仅仅是生成,我还实验了图像可以通过潜在变量(一个用于生成人脸的向量)的线性代数运算来操作。我还看到生成的人脸遵循统计分布,这真的很棒。

这篇文章将集中在教程如何做 GAN 的每个步骤解释(与源代码)。它将针对任何对人工智能感兴趣的人,特别是想练习使用深度学习的人。它也针对每个人谁想学习如何做甘第一次。我会尽可能简单易懂地写这篇文章。我希望读者通过阅读这篇文章,了解甘将军是如何工作的。

如果你想在阅读这篇文章时有更好的理解,我建议你至少了解神经网络和卷积神经网络(CNN)。

如果您想了解完整的源代码,本文末尾有一个 GitHub 链接。现在,我将给出存储库中的 python 笔记本和协作链接。

图片 0 是生成的动漫人物脸之一,我们将使用模型形成的图片来创建。左起第一张和第二张图由 GAN 生成。第三是第一面和第二面的相加(你可以称之为第一面和第二面的融合)。

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

Images 0 : Example of generated faces and the fusion of their face. G + D = GAN

概述

  1. 技术
  2. 介绍
  3. 甘简介
  4. 履行
  5. 结果
  6. 吸取的教训
  7. 结论
  8. 编后记
  9. 贮藏室ˌ仓库
  10. 来源

技术和数据

  1. Python 3.7
  2. 合作实验室:免费的 Jupyter 笔记本环境,无需设置,完全在云中运行。有 GPU 特斯拉 K80 甚至 TPU!遗憾的是,在撰写本文时,Tensorflow v2.0 alpha 仍不支持 TPU。遗憾的是,DCGAN 不能通过 TPU 训练。
  3. Keras:用于深度学习的 Python 库。
  4. 数据取自这里

介绍

深度学习领域的研究热点之一是生成对抗网络。由 Ian Goodfellow 等人介绍。,它可以在无人监督的情况下从零开始生成东西。在计算机视觉领域。有许多研究人员在研究和改进它。例如,NVIDIA 通过使用 GAN 创建了逼真的人脸生成器。音乐领域也有一些关于使用甘的研究。我之前的一篇文章展示了如何使用 GAN 来生成音乐。

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

Image 1 : HoloGAN paper

研究人员开发了许多不同类型的氮化镓。最新的一个(在我写这篇文章的时候)是可以从自然图像生成 3D 表示的 HoloGAN 。如果你看看它是如何做到的,它真的很神奇。实际上,这些高级 GAN 遵循 GAN 工作的基本原理。每个 GAN 都有两个代理作为它的学习器、鉴别器和生成器(我们将在后面深入讨论这些术语)。要了解更多高级 GAN 技术,必须了解基本 GAN 的工作原理。

本文将重点介绍深度卷积 GAN (DCGAN)的实现,它是拉德福德等人提出的 GAN 的变体之一。基本上就是一个有很多卷积层的 GAN。它是流行的 GAN 神经网络之一。我们将构建一个与他们论文中提出的架构不同的架构。尽管有所不同,但它仍然产生了一些好结果。

关于 GAN 的一个有趣的事情是,它将建立它的潜在变量(一个长度为任何长度的一维向量),可以用线性代数运算。图像 0 上的例子就是其中之一。第一个面的向量(从左边开始)被添加到第二个面的向量。然后,它产生了第三张脸。

它还产生了一些有趣数据分布。分布中的每一点都有不同的面。例如,以平均值-0.7 为中心的数据将具有黄色头发的脸。

我们将从了解一个关于甘的简要描述开始。

简介

那么,甘是什么呢?

更简单地说,这是一种用于从头生成一些新数据的深度学习技术。它以无人监管的方式运行,这意味着它可以在没有人为标记的情况下运行。它会根据学习到的模式生成数据。

甘是一个生成性的模型,他有以下几个方面的特点:

  • 学习联合概率 P(x,y) 其中 x 是输入, y 是输出。它将基于 P(x|y) 进行推断,给定输出 **y,**它将推断出 x. 你可以说 y 是 GAN 中的真实数据。
  • 当模型被给予训练真实数据 y 时,它将学习真实数据的特征。它将通过识别真实数据潜在特征表示变量来学习。更简单地说,它学习真实数据中图像的基本构造函数特性。例如,模型可以学习由眼睛和头发的颜色构成的脸。这两个将是产生面的基础之一。通过调整它的变量,它也可以改变生成的面。比如提高眼睛的变量,眼睛会更黑。降低它将产生相反的结果。
  • 它可以建立概率分布,例如正态分布,其可以用于避免异常值**。由于异常值通常在分布中非常罕见,所以生成它的几率将非常小。因此,GAN 在有异常值的真实数据上运行良好。**

那么,它是如何工作的呢?

GAN 组成两个神经网络,鉴别器发生器**。甘将使这两个网络在一个零和博弈框架(博弈论)上相互争斗。这是这些代理(网络)之间的游戏。《甘》中的名就来源于这个概念。**

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

Image 2 : Illustration of Discriminator vs Generator . Image modified and taken from here

发生器将产生一些假数据,而鉴别器将识别出几个数据,这些数据包含由发生器产生的假数据和从真实数据中采样的数据。发生器的目的主要是产生一些与真实数据相似的虚假数据,并欺骗鉴别器识别哪些数据是真实的,哪些是虚假的。鉴别器的目的是让它更智能地识别真假数据。每个代理将交替移动。通过与这些代理决斗,我们希望这些代理会变得更强,尤其是发电机。

你可以说他们是命中注定的对手。主角是发电机,它通过从对手的战斗中学习,力求更好地实现我们的目标。****

好的,换句话说,发生器将通过对学习到的分布进行采样来模拟真实数据,并打算与真实数据相同的分布。它会训练自己的神经网络来生成它。鉴于此,鉴别器将在监督技术中训练其神经网络来检测虚假和真实数据。每个网络将交替训练其网络。

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

Image 3 : Illustration GAN on learning data distribution. Picture taken from here.

以下是 GAN 工作原理的大致步骤:

  1. 以概率分布如正态分布产生随机噪声。
  2. 将其作为发电机神经网络的输入。它将输出生成的 假数据 。这些步骤也意味着我们从生成器学习的分布中抽取一些数据。我们将噪声记为**z_n**,生成的数据记为**G(z_n**)**G(z_n)**指发电机 G 处理噪声的结果。
  3. 我们将生成的假数据与从数据集采样的数据(真实数据)结合起来。使它们成为我们的鉴别器的输入。我们将其记为 D.** 鉴别器将通过预测数据是否为假来尝试学习。通过前向传递和后向传播来训练神经网络。更新 D 权重。**
  4. 然后,我们需要训练发电机**。我们需要将**G(z_n)**或者随机噪声产生的伪数据作为 D 的输入注意,这个步骤只是将伪数据输入到鉴别器中。正向传递**【d】中的**G(z_n)** 通过使用鉴别器神经网络,在做正向传递时,预测假数据是否为假数据**(D(G(z_n)))**。然后进行反向传播,我们将只更新 G 权重。
  5. 重复这些步骤,直到我们可以看到生成器提供良好的伪数据或者已经达到最大迭代。

图示如下:

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

Image 4 : How GAN Works. Picture taken from [here](http://Image 3 : Illustration GAN on learning data distribution. Picture taken from here.).

通过更新生成器的分布来匹配鉴别器。这和最小化 JS 散度是一样的。要了解更多信息,您可以阅读这篇文章。

为了让我们的代理学习,一定要让鉴别器发生器互相支配。使它们尽可能平衡,并使鉴别器发生器同时学习。当鉴别器太强(能 100%区分真假)时,发生器变得什么也学不会。如果在训练过程中我们达到这一点,最好结束它。在发生器比鉴别器强的情况下,相反的情况也有影响。它会导致模式崩溃,我们的模型对任何随机噪声都会预测相同的结果。这是 GAN 中最难和最难的部分之一,它会让人感到沮丧。

如果你想了解更多,我建议看一看这篇很棒的文章

履行

那么,鉴别器和生成器的架构如何呢?

这取决于我们将开发的 GAN 的变体。由于我们将使用 DCGAN,我们将使用一系列的 CNN 层。

我们将使用不同于原始论文的自定义架构。我沿用了《用 Python 进行深度学习》一书中使用的架构。****

我们用于构建 DCGAN 的配置如下:

*latent_dim = 64
height = 64
width = 64
channels = 3*

这意味着我们将有一个 64 维的潜在变量。我们的图像的高度和宽度是 64。每个图像有 3 个通道(R,G,B)

以下是导入的库以及如何准备数据:

这里是架构:

发电机

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

它由卷积层组成,其中一层是卷积转置层。为了增加图像(32 -> 62)的大小,我们将在卷积层中使用步长参数。这样做是为了避免 GAN 的不稳定训练。

代码

鉴别器

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

它还由卷积层组成,我们使用步长进行缩减采样。

代码

开始

为了使生成器的反向传播成为可能,我们在 Keras 中创建新的网络,它是生成器后跟鉴别器。在这个网络中,我们冻结了所有的权重,这样它的权重就不会改变。****

这是网络:

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

培养

培训的配置如下:

*iterations = 15000 
batch_size = 32*

该配置意味着我们将进行 15000 次迭代。每次迭代我们处理 32 批真实数据和虚假数据(总共 64 批用于训练鉴别器)。

按照我上面解释的粗略步骤,下面是我们如何一步一步地训练 DCGAN:

  1. 重复以下步骤直到最大迭代次数
*for step in tqdm_notebook(range(iterations)):*

2。以概率分布如正态分布产生随机噪声。

*random_latent_vectors = np.random.normal(size = (batch_size, latent_dim))
generated_images = generator.predict(random_latent_vectors)*

3。将生成的假数据与从数据集中采样的数据结合起来。

*stop = start + batch_size
real_images = x_train[start: stop]
combined_images = np.concatenate([generated_images, real_images])
labels = np.concatenate([np.ones((batch_size,1)), 
                                    np.zeros((batch_size, 1))])*

请注意,我们使用顺序采样器,每个数据将被顺序采样,直到数据结束。将被抽样的数量等于批量大小。

4。向输入标签添加噪声

*labels += 0.05 * np.random.random(labels.shape)*

这是训练甘的重要一招。

5。训练鉴别器

*d_loss = discriminator.train_on_batch(combined_images, labels)*

6。训练发电机

*random_latent_vectors = np.random.normal(size=(batch_size, 
                                                 latent_dim))
misleading_targets = np.zeros((batch_size, 1))
a_loss = gan.train_on_batch(random_latent_vectors, 
                              misleading_targets)*

注意,我们创建了一个新的潜在向量。别忘了我们需要交换标签。请记住,我们要尽量减少因鉴别者未能预测到假货而造成的损失。misleading_targets的标签应该是 1。

7。更新真实数据集的起始索引

*start += batch_size

  if start > len(x_train) - batch_size:
    start = 0*

就这样,下面是训练 DCGAN 的完整代码:

结果

好了,好戏开始了!我们将开始在不同的平均点上可视化生成的图像。在我们这样做之前,让我告诉你,这是上述模型的结果,该模型训练了 20000 步(迭代)和 30000 步。该模型被训练大约 7 小时(大约每小时 4300 步)。我将较少步骤的模型命名为模型-A* ,另一个命名为模型-B 。***

开始了。

如何阅读

N ~ (x,y) :遵循正态分布随机生成的潜在向量,具有均值 x 和标准差 y

模型-AN ~ (0,0.4) 的潜在向量结果:

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

Image 5 : Generated Face Model-A N ~ (0, 0.4)

不错吧,虽然有一些照片中的人有不对称的脸。

模型-AN ~ (0,1) 的潜在向量结果:

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

Image 6 : Generated Face Model-A N ~ (0, 1)

看看它…这个模型产生了一些令人厌恶的面孔。事实证明,这个模型并没有真正掌握真实数据的分布。当标准差较低时,它可以做得更好。我训练的 DCGAN 还没有掌握如何表示不太接近均值点的数据点。我认为,它需要更多的训练或更强大的架构。

让我们将架构更改为模型-B****

模型 B:N ~ (0,0.4) 的潜在向量结果

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

Image 7 : Generated Face Model-B N ~ (0, 0.4)

还好,但是脸变得更黑了。我想知道发电机怎么了。

模型-B* 上的 N ~ (0,1) 上的潜在向量结果:***

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

Image 8 : Generated Face Model-A N ~ (0, 1)

嗯,好吧…其中大部分仍然包含着可憎的面孔。他们中的一些人表情很好。质量还是和 a 型差不多。好的…对于下一批图像,让我们尽可能地改变标准偏差。0.4 最好。**

让我们检查一下,我们的潜在向量是否是使用相同的标准偏差,以-0.3 和 0.3 为中心平均值生成的。

模型-AN ~ (-0.3,0.4) 的潜在向量结果:

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

Image 9 : Generated Face Model-A N ~ (0.3, 0.4)

模型-AN ~ (0.3,0.4) 的潜在向量结果:

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

Image 10: Generated Face Model-A N ~ (-0.3, 0.4)

B 型N ~ (-0.3,0.4) 的潜在向量结果:

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

Image 11: Generated Face Model-B N ~ (-0.3, 0.4)

Model-BN ~ (0.3,0.4) 上的潜在向量结果:

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

Image 12: Generated Face Model-B N ~ (0.3, 0.4)

看出区别了吗?

是的,看他们的头发。平均值为 0.3 时,头发大部分是黑色的(其中一些是棕色的)。相反,在平均值为-0.3 时,毛发大多是黄色的。是的,我们的模型可以把脸放在相应的点上。模型 B 也生成比 a 更暗的面。

从上面我们所做的,我们可以直观地了解我们的模型是如何学习数据分布的。

让我们绘制它:

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

Image 13: Data distribution of the generator

从上面显示的结果来看,我认为潜在向量越小,脸的头发越亮,潜在向量越大,脸的头发越红。

为了确定这一点,让我们来看看每个平均点中的平均面:

我们画出这些潜在向量,它们的平均值是:

*[-1, -0.8, -0.6, -0.4, -0.2, 0, 0.2 0.4, 0.6, 0.8 ]*

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

Image 14: Average faces from different mean points

第一行是模型 A,第二行是模型 b。通过处理潜在向量的平均值,我们可以看到它在该点生成的脸。我们可以看到:

  • 向量的点越低,头发越黄。
  • 它的脸中间比较黑。这意味着数据集中的平均人脸具有这些风格。
  • 向量的点越正,头发越蓝。正面潜在向量在微笑上也有更多的开口。

基本线性代数运算

很神奇吧?

还没有,我们可以对潜向量做线性代数运算。方程的结果也可以生成,并有有趣的结果。在介绍部分之前,从我们的第一张面孔中提取一个结果:

G + D

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

Images 15 : G + D = GAN

甘脸是 G 和 d 相加的结果。你可以看到头发变得有点棕色。右边的头发是 D 型,左边的是 G 型。

以下是其他人操作的结果:

G — D(绝对)

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

Images 16 : G-D

按分量相乘(G,D)

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

Images 17 :Component-Wise multiplied (G, D)

操纵潜在向量

如果我们在潜向量中操作一个维度,我们将会看到生成的图像是怎样的。正如我前面所说,模型将学习潜在的特征表示。所以,潜在向量中的每一个元素都有生成图像的目的。

为了进行可视化,我们将冻结 vectors 中的所有元素,并更改要检查的所选维度。

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

Images 18 : Illustration on what we do in this section

例如,我们想要检查潜在向量中的第一个元素,我们改变该维度并保持其他维度不变。

我们将生成一些具有以下意义的面:

*[-0.6, -0.3, 0.1, 0.3, 0.6]*

对于每个平均点,我们将生成其潜在向量中的维度随着这些值迭代地改变的面:

*[-1.08031934, -0.69714143, -0.39691713, -0.12927146,  0.12927146, 0.39691713,  0.69714143,  1.08031934]*

让我们在选择的维度上可视化: (本节将只使用模型-A)

第 28 次元:

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

Image 19 : Result on Changing 28th latent variable in different mean points.

第 28 个潜变量的目的是什么?

我认为,它使头发变得更亮,改变左眼的形状,也改变右眼的小变化。由于它将特征压缩成 64 长度的潜在向量,一个维度可以有多种用途。

让我们看另一个!

第五维度

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

Image 20 : Result on changing 5th latent variables in different means

这个潜在变量的目的是什么?

我认为这与左眼有关,尽管每个穴位对左眼的治疗不同。它也使头发颜色变深。你怎么想呢?

第 11 维

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

Image 21 : Result on changing the 11th latent variables in different means

我想,这个维度关心的是嘴巴和右眼。

另一个例子是通过调整一个潜在变量从一个平均点生成的面:

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

Image 22 : Result on faces by changing a latent variable

就是这样。我们可以画出潜在向量的任何维度,看看它的目的是什么。尽管有时很难看出潜在变量的目的是什么。

与真实数据比较

让我们从数据集中抽取 8 个真实的人脸样本:

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

Image 22 : Real Faces from dataset

型号 A 和 B 的发电机 N ~ (0,1)的样本 8:

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

Image 23 : Fake faces generated by generator

那么,如果我们充当鉴别者,我们能区分真脸和假脸吗?

毫无疑问,我们仍然可以区分哪些面孔是假的,哪些是真的。这种模式需要更多训练或强大的架构来实现。即便如此,我们的模型仍然可以生成动漫风格的人脸形状,这很棒。

吸取的教训

以下是我研究 DCGAN 后学到的经验:

  • 训练甘很难。如果没有经验者的提示和技巧,很难做出一个稳定的架构。尤其是在平衡鉴频器和发生器的功率方面。使 GAN 不崩溃也是一个挑战。

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

Photo by Pablo Merchán Montes on Unsplash

  • 实际上,这些模型仍然不擅长生成假图像。然而,它可以建立一些好的面孔,虽然没有真正的好。我们仍然可以区分假图像和真实图像。这是因为模型还没有掌握真实数据的数据分布。
  • 该模型在 26000 步左右降低其质量。在我的实验中,这是发电机变弱的地方。这是 GAN 中的不稳定性。我需要寻找一个更好的架构来做这件事。我们可以看到模型 B 上的结果变得更暗。
  • 因此,我开发了另一个具有批处理规范化甚至是丢弃层的架构。你猜怎么着?在调整架构的过程中,我有两个结果。模型崩溃和鉴别器优势。我猜开发 GAN 架构并不容易。
  • 然而,有许多关于开发一个好的 GAN 的提示和技巧我还没有实现。也许遵循这些提示可以减少模型的不稳定性。
  • 有许多更稳定 GAN 变体,例如 WGAN-DC 和 DRAGAN,以及 SAGAN。我需要使用可能比 DCGAN 做得更好的不同架构。

结论

这篇文章告诉了我们甘在做什么,并一步一步地告诉我们如何去做。之后,它告诉我们一个有趣的特征,它的潜在向量显示了数据分布的发电机学习。它向我们展示了它可以形成一个数据分布。

潜在向量可以进行线性代数运算。它可以向我们展示一些有趣的事情,例如两个潜在向量的相加将组合这些面孔中每一个的特征。它还可以被操纵以基于潜在向量中的改变的元素来改变面部。

即便如此,我们的模型仍然无法做出一张能让我们怀疑那张脸是不是假的脸。它仍然可以形成一个动漫风格的面孔。

编后记

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

Photo by Lemuel Butler on Unsplash

就是这样,我第一次做 GAN 的经验。我越来越了解甘在做什么。我也想探究一下我对甘到底学到了什么的好奇心。它们就在那里,它实际上做的事情真的很神奇。生成器可以将正常随机噪声生成的随机向量映射到数据分布中。它将人脸聚集成指定的数据点。

在做甘,我实际上运行几个模型,我手工制作的。好吧,他们悲惨地失败了。有一次,我认为模型可以成功,但它进入模式崩溃(预测的脸将是相同的,不管潜在向量)。我找到了关于 DCGAN 的 fchollet 存储库,并遵循了它的架构。

由于这是我第一次设计 GAN,我希望每个人都对此有很多反馈。请指出我犯的错误,因为这是我第一次做。如果结果没那么好请见谅。我只想分享我做甘的兴奋。并分享如何做到。

即便如此,这真的很有趣,我想尝试另一种 GAN 变体,如 WGAN-GP、DRAGAN 或 SAGAN。我只是略读了一点,并想尝试一下。期待一篇做这些实验的文章😃。

这个迷因实际上描绘了这个实验😆。

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

Images 24 : Image taken from neuralnetmemes Instagram

我欢迎任何可以提高我自己和这篇文章的反馈。我正在学习写作和深度学习。我感谢能让我变得更好的反馈。确保以适当的方式给出反馈😄。

在我的下一篇文章中再见!

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

Source : https://cdn.pixabay.com/photo/2017/07/10/16/07/thank-you-2490552_1280.png

贮藏室ˌ仓库

查看这个 GitHub 资源库:

*** [## haryoa/DCGAN-Anime

使用 DCGAN 制作动漫脸的个人项目。通过在…上创建一个帐户,为哈里亚海/DCGAN-Anime 的发展做出贡献

github.com](https://github.com/haryoa/DCGAN-Anime)

目前,我只提供 IPython 笔记本来从头开始训练 GAN。请注意,如果模型在大约 200 次迭代后没有输出人脸形状的图像,请重新开始训练(从“创建模型部分开始运行)。

稍后,我将创建一个操场笔记本来实验操纵潜在变量。

来源

[## 深度学习——生成对抗网络

在这篇文章中,我们将了解生成性敌对网络(GAN)。我们将比较生成性和辨别力…

medium.com](https://medium.com/datadriveninvestor/deep-learning-generative-adversarial-network-gan-34abb43c0644)

感谢雷努·汉德尔瓦尔的精彩文章。

https://www . cs . Toronto . edu/~ duvenaud/courses/CSC 2541/slides/gan-foundations . pdf

https://github . com/fchollet/用 python 深度学习笔记本

[## 从 GAN 到 WGAN

这篇文章解释了生成性对抗网络(GAN)模型背后的数学原理,以及为什么它很难被训练…

lilianweng.github.io](https://lilianweng.github.io/lil-log/2017/08/20/from-GAN-to-WGAN.html)

https://arxiv.org/pdf/1511.06434.pdf

[## 甘——为什么生成性对抗网络这么难训练!

认出莫奈的画比画一幅容易。生成模型(创建数据)被认为是非常…

medium.com](https://medium.com/@jonathan_hui/gan-why-it-is-so-hard-to-train-generative-advisory-networks-819a86b3750b)

感谢 Jonathan Hui 的精彩文章。***

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值