提交 46816ef7 编写于 作者: W wizardforcel

2020-12-15 14:01:08

上级 9a149534
......@@ -479,7 +479,7 @@ syn = poisson.rvs(mu, size=2000)
半监督算法的另一个重要系列是基于将标准 **SVM****Support Vector Machine**的缩写)扩展到包含未标记样本的数据集。 在这种情况下,我们不想传播现有标签,而是传播分类标准。 换句话说,我们要使用标记的数据集训练分类器,并将判别规则也扩展到未标记的样本。
与只能评估未标记样本的标准程序相反,半监督 SVM 使用它们来校正分离的超平面。 该假设始终基于相似性:如果`A`的标签为`1`,而未标签的样本`B`的标签为`d(A, B) <ε`(其中`ε`是预定义的阈值),可以合理地假设`B`的标签也是`1`。 这样,即使仅手动标记了一个子集,分类器也可以在整个数据集上实现高精度。 与标签传播类似,仅当数据集的结构不是非常复杂时,尤其是当相似性假设成立时,这类模型才是可靠的(不幸的是,在某些情况下,很难找到合适的距离度量,因此 许多相似的样本的确不同,反之亦然)。
与只能评估未标记样本的标准程序相反,半监督 SVM 使用它们来校正分离的超平面。 该假设始终基于相似性:如果`A`的标签为`1`,而未标签的样本`B`的标签为`d(A, B) <ε`(其中`ε`是预定义的阈值),可以合理地假设`B`的标签也是`1`。 这样,即使仅手动标记了一个子集,分类器也可以在整个数据集上实现高精度。 与标签传播类似,仅当数据集的结构不是非常复杂时,尤其是当相似性假设成立时,这类模型才是可靠的(不幸的是,在某些情况下,很难找到合适的距离度量,因此许多相似的样本的确不同,反之亦然)。
......
......@@ -33,7 +33,7 @@
* Matplotlib 2.0+
* Seaborn 0.9+
该数据集可以通过 UCI 获得。 可以从[这里](https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/wdbc.data)下载 CSV 文件,并且不需要任何预处理 用于添加在加载阶段将出现的列名。
该数据集可以通过 UCI 获得。 可以从[这里](https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/wdbc.data)下载 CSV 文件,并且不需要任何预处理添加在加载阶段将出现的列名。
[这些示例可在 GitHub 存储库上找到](https://github.com/PacktPublishing/HandsOn-Unsupervised-Learning-with-Python/tree/master/Chapter02)
......@@ -142,7 +142,7 @@ Avg(distances) = 5.0168687736484765
Std(distances) = 0.042885311128215066
```
因此,对于`p = 15`,对于`x ∈ [0.002, 5.0)`的所有样本`(5, x)`与原点之间的距离均值约为`5.0`和标准差 关于`0.04`。 当`p`变大时,`Avg(distances) = 5.0``Std(distances) = 0.04`
因此,对于`p = 15`,对于`x ∈ [0.002, 5.0)`的所有样本`(5, x)`,与原点之间的距离均值约为`5.0`并且标准差为`0.04`。 当`p`变大时,`Avg(distances) = 5.0``Std(distances) = 0.04`
在这一点上,我们可以开始讨论一种最常见且被广泛采用的聚类算法:K-means。
......@@ -170,7 +170,7 @@ Std(distances) = 0.042885311128215066
![](img/2654403d-f595-446f-a602-b22518cc792f.png)
重复该过程,直到质心停止变化为止(这也意味着序列`S(0) > S(1) > ... > S(t[end])`)。 读者应该立即了解到,计算时间受初始猜测的影响很大。 如果`M^(0)`非常接近`M^t[end]`,则可以找到一些迭代 最佳配置。 相反,当`M^(0)`纯粹是随机的时,无效初始选择的概率接近`1`(也就是说,每个初始均匀随机选择为 在计算复杂度方面几乎相等)。
重复该过程,直到质心停止变化为止(这也意味着序列`S(0) > S(1) > ... > S(t[end])`)。 读者应该立即了解到,计算时间受初始猜测的影响很大。 如果`M^(0)`非常接近`M^t[end]`,则可以找到一些迭代最佳配置。 相反,当`M^(0)`纯粹是随机的时,无效初始选择的概率接近`1`(也就是说,每个初始均匀随机选择为 在计算复杂度方面几乎相等)。
......@@ -347,7 +347,7 @@ for i in range(2, 21):
惯性与簇数的关系
上图显示了一种常见行为。 当团簇的数量非常小时,密度成比例地降低,因此内聚降低,结果,惯性也高。 簇数的增加会迫使模型创建更多的内聚组,并且惯性开始突然减小。 如果继续此过程,并且`M > > K` ,我们将观察到非常慢的方法,接近与`K = M`的配置对应的值(每个样本都是 簇)。 通用启发式规则(在没有外部约束的情况下)是选择与将高变化区域与几乎平坦区域分开的点相对应的聚类数目。 这样,我们可以确保所有群集都达到了最大的凝聚力,而没有内部碎片。 当然,在这种情况下,如果我们选择`K = 15`,则将九个斑点分配给不同的簇,而其他三个斑点将分为两部分。 显然,当我们划分一个高密度区域时,惯性仍然很低,但是不再遵循最大分离的原理。
上图显示了一种常见行为。 当团簇的数量非常小时,密度成比例地降低,因此内聚降低,结果,惯性也高。 簇数的增加会迫使模型创建更多的内聚组,并且惯性开始突然减小。 如果继续此过程,并且`M > > K` ,我们将观察到非常慢的方法,接近与`K = M`的配置对应的值(每个样本都是簇)。 通用启发式规则(在没有外部约束的情况下)是选择与将高变化区域与几乎平坦区域分开的点相对应的聚类数目。 这样,我们可以确保所有群集都达到了最大的凝聚力,而没有内部碎片。 当然,在这种情况下,如果我们选择`K = 15`,则将九个斑点分配给不同的簇,而其他三个斑点将分为两部分。 显然,当我们划分一个高密度区域时,惯性仍然很低,但是不再遵循最大分离的原理。
现在,我们可以使用`K ∈ [2, 50]`,的乳腺癌威斯康星数据集重复该实验,如下所示:
......
......@@ -34,7 +34,7 @@
* Matplotlib 2.0+
* Seaborn 0.9+
数据集 可以通过 UCI 获得。 可以从[这里](https://archive.ics.uci.edu/ml/datasets/Absenteeism+at+work)下载 CSV 文件,并且不需要任何预处理,除了添加了 将在加载阶段发生
数据集可以通过 UCI 获得。 可以从[这里](https://archive.ics.uci.edu/ml/datasets/Absenteeism+at+work)下载 CSV 文件,并且不需要任何预处理,除了添加将在加载阶段出现的列名
[Github 存储库中提供了示例](https://github.com/PacktPublishing/HandsOn-Unsupervised-Learning-with-Python/tree/master/Chapter03)
......
......@@ -99,7 +99,7 @@ faces = fetch_olivetti_faces(shuffle=True, random_state=1000)
X_train = faces['images']
```
样本是 400、64×64 灰度图像,我们将其调整为 32×32,以加快计算速度并避免出现内存问题(此操作会导致视觉精度略有下降,您可以删除 如果您有足够的计算资源,则可以使用它)。 现在,我们可以定义主要常量(历元数(`nb_epochs``batch_size``code_length`))和`graph`
样本是 400`64×64`灰度图像,我们将其调整为`32×32`,以加快计算速度并避免出现内存问题(此操作会导致视觉精度略有下降,如果您有足够的计算资源,您可以删除它)。 现在,我们可以定义主要常量(历元数(`nb_epochs``batch_size``code_length`))和`graph`
```py
import tensorflow as tf
......@@ -304,7 +304,7 @@ Epoch 600) Average loss per sample: 0.4635812330245972 (Code mean: 0.42368677258
* 将噪声层用作编码器的输入 1。
* 将压差层用作编码器的输入 1(例如,椒盐噪声)。 在这种情况下,丢失的概率可以是固定的,也可以以预定义的间隔(例如,(0.1,0.5))随机采样。
如果假定噪声为高斯噪声(这是最常见的选择),则可能会同时产生同调和异调噪声。 在第一种情况下,所有分量的方差都保持恒定(即`n(i) ~ N(0, σ^2 I)`),而在后一种情况下,每个 组件具有其自身的差异。 根据问题的性质,另一种解决方案可能更合适。 但是,在没有限制的情况下,总是最好使用异方差噪声,以提高系统的整体鲁棒性。
如果假定噪声为高斯噪声(这是最常见的选择),则可能会同时产生同调和异调噪声。 在第一种情况下,所有分量的方差都保持恒定(即`n(i) ~ N(0, σ^2 I)`),而在后一种情况下,每个组件具有其自身的差异。 根据问题的性质,另一种解决方案可能更合适。 但是,在没有限制的情况下,总是最好使用异方差噪声,以提高系统的整体鲁棒性。
......@@ -468,7 +468,7 @@ Epoch 600) Average loss per sample: 0.8058895015716553 (Code mean: 0.02853894419
正如我们将要讨论的,使用 ELBO 比处理公式的其余部分要容易得多,并且由于 KL 散度不会产生负面影响,所以如果我们最大化 ELBO,我们也将最大化对数似然率。
我们先前定义了`p(z; θ) = N(0, I)`; 因此,我们可以将`q(z | x; θ)`建模为多元高斯模型,其中两个参数集(均值向量和协方差矩阵)由`a`表示 拆分概率编码器。 特别是,给定样本`x`,编码器现在必须同时输出平均向量`μ(z | x; θ[q])`协方差矩阵`Σ(z | x; θ[q])`。 为简单起见,我们可以假设矩阵是对角线,因此两个组件的结构完全相同。 结果分布为`q(​​z | x; θ[q]) = N(μ(z | x; θ[q]), Σ(z | x; θ[q])`; 因此,ELBO 的第一项是两个高斯分布之间的负 KL 散度:
我们先前定义了`p(z; θ) = N(0, I)`; 因此,我们可以将`q(z | x; θ)`建模为多元高斯模型,其中两个参数集(均值向量和协方差矩阵)由拆分概率编码器表示。 特别是,给定样本`x`,编码器现在必须同时输出平均向量`μ(z | x; θ[q])`协方差矩阵`Σ(z | x; θ[q])`。 为简单起见,我们可以假设矩阵是对角线,因此两个组件的结构完全相同。 结果分布为`q(​​z | x; θ[q]) = N(μ(z | x; θ[q]), Σ(z | x; θ[q])`; 因此,ELBO 的第一项是两个高斯分布之间的负 KL 散度:
![](img/30ba70c1-c5f3-4ea6-b019-0e51ab9b72ad.png)
......@@ -675,7 +675,7 @@ for e in range(nb_epochs):
在本节中,我们将分析两个神经模型(Sanger 和 Rubner-Tavan 网络),它们可以执行**主成分分析****PCA**),而无需对协方差矩阵进行特征分解 或执行截断的 SVD。 它们都是基于 **Hebbian learning** 的概念(有关更多详细信息,请参阅《理论神经科学》),这是有关非常简单的神经元动力学的第一批数学理论之一。 然而,这些概念具有非常有趣的含义,尤其是在组件分析领域。 为了更好地了解网络的动力学,提供神经元基本模型的快速概述将很有帮助。 让我们考虑一个输入`x ∈ R^n`和权重向量`w ∈ ℜ^n`。 神经元执行点积(无偏差),以产生标量输出`y`
在本节中,我们将分析两个神经模型(Sanger 和 Rubner-Tavan 网络),它们可以执行**主成分分析****PCA**),而无需对协方差矩阵进行特征分解或执行截断的 SVD。 它们都是基于 **Hebbian learning** 的概念(有关更多详细信息,请参阅《理论神经科学》),这是有关非常简单的神经元动力学的第一批数学理论之一。 然而,这些概念具有非常有趣的含义,尤其是在组件分析领域。 为了更好地了解网络的动力学,提供神经元基本模型的快速概述将很有帮助。 让我们考虑一个输入`x ∈ R^n`和权重向量`w ∈ ℜ^n`。 神经元执行点积(无偏差),以产生标量输出`y`
![](img/82b33ae4-637c-4004-b89b-c6e72863705d.png)
......@@ -683,7 +683,7 @@ for e in range(nb_epochs):
![](img/d422484d-1407-4fbe-8258-bb66809bb7be.png)
常数`η`是学习率。 完整的分析超出了本书的范围,但是有可能证明,一个 Hebbian 神经元(经过一些非常简单的修改,需要控制`w`的生长)可以改变突触的权重,因此在 足够多的迭代,它沿着数据集的第一个主成分`X`对齐。 从这个结果(我们不会证明)开始,我们可以介绍 Sanger 的网络。
常数`η`是学习率。 完整的分析超出了本书的范围,但是有可能证明,一个 Hebbian 神经元(经过一些非常简单的修改,需要控制`w`的生长)可以改变突触的权重,因此在足够多的迭代之后,它沿着数据集的第一个主成分`X`对齐。 从这个结果(我们不会证明)开始,我们可以介绍 Sanger 的网络。
......@@ -873,7 +873,7 @@ Rubner 和 Tavan 提出了另一种可以执行 PCA 的神经网络(在《主
前一个公式的第一项`-ηy^(j) y^(k))`负责解相关,而第二项类似于 Oja's 规则,用作防止权重溢出的自限制正则器。 特别地,`-ηy(i) y^(k)`项可以解释为更新规则的反馈信号`w[ij]`,它受`w[ij]`项校正的实际输出的影响。 考虑到 Sanger 网络的行为,不容易理解,一旦输出去相关,内部权重`w[ij]`就变成正交,代表第一个主要成分`X`
以矩阵形式,权重`w[ij]`可以立即排列为`W = {w[ij]}`,这样在训练过程结束时,每一列都是`C`的特征向量(降序排列)。 相反,对于外部权重`v[jk]`,我们需要再次使用`Tril(·)`运算符:
以矩阵形式,权重`w[ij]`可以立即排列为`W = {w[ij]}`,这样在训练过程结束时,每一列都是`C`的特征向量(降序排列)。 相反,对于外部权重`v[jk]`,我们需要再次使用`Tril(·)`运算符:
![](img/9080b2af-6409-4238-a6a8-8f230792ce22.png)
......@@ -1013,7 +1013,7 @@ Final covariance matrix: [[28.9963492 0.31487817]
通用受限玻尔兹曼机的结构
神经元`x[i]`是可观察到的(也就是说,它们代表 RBM 必须学习的过程生成的向量),而`h[j]`是潜在的(也就是说,它们是隐藏的并且有助于`x[i]`假定的值)。 由于没有任何进一步的细节,我们需要说这个模型具有 **Markov 随机场****MRF**)的结构,这是由于相同神经元之间没有连接 层(即描述网络的图是二分图)。 MRF 的一个重要特性是可以用吉布斯分布对整个联合概率`p(x, h; θ)`进行建模:
神经元`x[i]`是可观察到的(也就是说,它们代表 RBM 必须学习的过程生成的向量),而`h[j]`是潜在的(也就是说,它们是隐藏的并且有助于`x[i]`假定的值)。 由于没有任何进一步的细节,我们需要说这个模型具有 **Markov 随机场****MRF**)的结构,这是由于相同层的神经元之间没有连接(即描述网络的图是二分图)。 MRF 的一个重要特性是可以用吉布斯分布对整个联合概率`p(x, h; θ)`进行建模:
![](img/c997f7bc-603a-4fd5-8bdf-6ab3fad3a30c.png)
......@@ -1045,7 +1045,7 @@ DBN 是基于 RBM 的堆叠模型。 下图显示了通用结构:
通用 DBN 的结构
第一层包含可见单元,其余所有单元都是潜在单元。 在无监督的情况下,目标是学习未知分布,找出样本的内部表示。 实际上,当潜在单元的数量少于输入单元的数量时,模型将学习如何使用低维子空间对分布进行编码。 Hinton 和 Osindero(在《深层信念网络的快速学习算法》)提出了 逐步贪婪训练程序(这是通常执行的程序)。 每对层都被认为是 RBM,并使用对比发散算法进行训练。 一旦对 RBM 进行了训练,则隐藏层将成为后续 RBM 的可观察层,并且该过程将一直持续到最后一个。 因此,DBN 开发了一系列内部表示形式(这就是为什么将其定义为深度网络的原因),其中每个级别都接受了较低级别功能的训练。 该过程与可变自编码器并无不同。 但是,在这种情况下,模型的结构更加僵化(例如,无法使用卷积单位)。 而且,输出不是输入的重建,而是内部表示。 因此,考虑上一节中讨论的公式,如果有必要反转过程(即给定内部表示,获得输入),则必须使用以下公式从最顶层进行采样:
第一层包含可见单元,其余所有单元都是潜在单元。 在无监督的情况下,目标是学习未知分布,找出样本的内部表示。 实际上,当潜在单元的数量少于输入单元的数量时,模型将学习如何使用低维子空间对分布进行编码。 Hinton 和 Osindero(在《深层信念网络的快速学习算法》)提出了逐步贪婪训练程序(这是通常执行的程序)。 每对层都被认为是 RBM,并使用对比发散算法进行训练。 一旦对 RBM 进行了训练,则隐藏层将成为后续 RBM 的可观察层,并且该过程将一直持续到最后一个。 因此,DBN 开发了一系列内部表示形式(这就是为什么将其定义为深度网络的原因),其中每个级别都接受了较低级别功能的训练。 该过程与可变自编码器并无不同。 但是,在这种情况下,模型的结构更加僵化(例如,无法使用卷积单位)。 而且,输出不是输入的重建,而是内部表示。 因此,考虑上一节中讨论的公式,如果有必要反转过程(即给定内部表示,获得输入),则必须使用以下公式从最顶层进行采样:
![](img/ee120b1c-ad77-481c-9f39-0d90a1f6c72c.png)
......@@ -1147,7 +1147,7 @@ Sanger 和 Rubner-Tavan 的网络是神经模型,能够在不进行任何统
4. 如果`std(z[i]) = 0.03`,代码是否稀疏?
5. Sanger 网络需要协方差矩阵列作为输入向量。 它是否正确?
6. 我们如何确定 Rubner-Tavan 网络提取的每个成分的重要性?
7. 给定一个随机向量,`h[i] ∈ R^m``m`是 DBN 的输出维数),是否可以确定 最可能对应的输入样本?
7. 给定一个随机向量,`h[i] ∈ R^m``m`是 DBN 的输出维数),是否可以确定最可能对应的输入样本?
......
......@@ -49,7 +49,7 @@
* **生成器**
* **判别器**(也称为**评论家**
让我们首先假设有一个数据生成过程,`p_data`,以及一个数据集`X`,该数据集是从`m`样本中提取的
让我们首先假设有一个数据生成过程,`p_data`,以及一个数据集`X`,该数据集是从`m`样本中提取的:
![](img/51747182-bf27-4942-aa5c-7bc1d719034b.png)
......@@ -73,7 +73,7 @@
![](img/1c69083f-4200-4599-a7af-1b594ab3bc20.png)
实际上,当两个代理都成功地优化了目标时,判别器将能够区分从`p_data`提取的样本和异常值,并且生成器将能够输出合成样本 属于`p_data`。 但是,必须明确的是,可以通过使用单个目标来表达问题,并且训练过程的目标是找出最佳参数集,`θ = {θ[d], θ[g]}`,因此判别器将其最大化,而生成器将其最小化。 必须同时优化两个代理,但是实际上,过程是交替的(例如,生成器,判别器,生成器等)。 目标可以用更紧凑的形式表示如下:
实际上,当两个代理都成功地优化了目标时,判别器将能够区分从`p_data`提取的样本和异常值,并且生成器将能够输出属于`p_data`的合成样本。 但是,必须明确的是,可以通过使用单个目标来表达问题,并且训练过程的目标是找出最佳参数集,`θ = {θ[d], θ[g]}`,因此判别器将其最大化,而生成器将其最小化。 必须同时优化两个代理,但是实际上,过程是交替的(例如,生成器,判别器,生成器等)。 目标可以用更紧凑的形式表示如下:
![](img/304d8dd9-8212-4b27-a550-71c85664a763.png)
......@@ -81,7 +81,7 @@
![](img/3ef1bf38-3d09-434a-993d-0a410667c1fe.png)
根据博弈论,这是一个不合作的博弈,它承认**纳什均衡**点。 当满足这种条件时,如果我们假设双方都知道对手的策略,那么他们就没有理由再改变自己的策略了。 在 GAN 的情况下,这种情况意味着一旦达到平衡(甚至只是理论上),生成器就可以继续输出样本,并确保它们不会被判别器误分类。 同时,判别器没有理由改变其策略,因为它可以完美地区分`p_data`和任何其他分布。 从动态角度来看,两个组件的训练速度都是不对称的。 尽管生成器通常需要更多的迭代,但判别器可以非常迅速地收敛。 但是,这样的过早收敛对于整体性能可能非常危险。 实际上,由于判别器提供的反馈,生成器也达到了最佳状态。 不幸的是,当梯度很小时,这种贡献可以忽略不计,其明显的结果是,生成器错过了提高其输出更好样本能力的机会(例如,当样本是图像时,它们的质量可能会保持非常低,甚至 具有复杂的架构)。 这种情况并不取决于生成器固有的容量不足,而是取决于判别器收敛(或非常接近收敛)后开始应用的有限次校正。 在实践中,由于没有特定的规则,唯一有效的建议是在训练过程中检查两个损失函数。 如果判别器的损失下降得太快,而生成器的损失仍然很大,那么通常最好在单个判别器步骤中插入更多的生成器训练步骤。
根据博弈论,这是一个不合作的博弈,它承认**纳什均衡**点。 当满足这种条件时,如果我们假设双方都知道对手的策略,那么他们就没有理由再改变自己的策略了。 在 GAN 的情况下,这种情况意味着一旦达到平衡(甚至只是理论上),生成器就可以继续输出样本,并确保它们不会被判别器误分类。 同时,判别器没有理由改变其策略,因为它可以完美地区分`p_data`和任何其他分布。 从动态角度来看,两个组件的训练速度都是不对称的。 尽管生成器通常需要更多的迭代,但判别器可以非常迅速地收敛。 但是,这样的过早收敛对于整体性能可能非常危险。 实际上,由于判别器提供的反馈,生成器也达到了最佳状态。 不幸的是,当梯度很小时,这种贡献可以忽略不计,其明显的结果是,生成器错过了提高其输出更好样本能力的机会(例如,当样本是图像时,它们的质量可能会保持非常低,甚至具有复杂的架构)。 这种情况并不取决于生成器固有的容量不足,而是取决于判别器收敛(或非常接近收敛)后开始应用的有限次校正。 在实践中,由于没有特定的规则,唯一有效的建议是在训练过程中检查两个损失函数。 如果判别器的损失下降得太快,而生成器的损失仍然很大,那么通常最好在单个判别器步骤中插入更多的生成器训练步骤。
......@@ -117,7 +117,7 @@
GAN 的目标是将生成的模型分布朝`p_data`方向移动,以尝试使重叠最大化
初始分布通常与目标分布完全不同; 因此,GAN 必须同时调整形状并将其移向`p_data`。 重叠完成后,Jensen-Shannon 散度达到最小值,并且优化完成。 但是,正如我们将在下一节中讨论的那样,由于 Jensen-Shannon 散度的特性,此过程并不总是如此平稳地运行,并且 GAN 可以达到次理想的极小值,离期望值很远 最终配置
初始分布通常与目标分布完全不同; 因此,GAN 必须同时调整形状并将其移向`p_data`。 重叠完成后,Jensen-Shannon 散度达到最小值,并且优化完成。 但是,正如我们将在下一节中讨论的那样,由于 Jensen-Shannon 散度的特性,此过程并不总是如此平稳地运行,并且 GAN 可以达到次理想的极小值,离期望的最终配置很远
......@@ -137,9 +137,9 @@ GAN 的目标是将生成的模型分布朝`p_data`方向移动,以尝试使
现在,让我们想象一下我们正在处理人脸图片的多模式分布(例如下一节将要讨论的示例中的人脸图片)。 模式的内容是什么? 很难精确地回答这个问题,但是很容易理解,对应于最大数据生成过程的人脸应该包含数据集中最常见的元素(例如,如果 80% 的人留着胡须 ,我们可以合理地假设该模式将包含它)。
我们在使用 GAN 时面临的最著名,最棘手的问题之一就是**模式崩溃**,它涉及到次优的最终配置,其中生成器冻结在某个模式附近,并不断提供输出。 发生这种情况的原因非常难以分析(实际上,只有理论),但是我们可以理解如果重新考虑 minimax 游戏,为什么会发生这种情况。 当我们要训练两个不同的分量时,即使保证了纳什均衡,在几次迭代之后,对于最常见的模式,判别器也会变得非常有选择性。 当然,当训练生成器以欺骗判别器时,实现此目标的最简单方法是简单地避免所有采样远离模式。 这种行为增加了判别器的选择性,并创建了一个反馈过程,使 GAN 陷入只有数据生成过程只有一小部分区域的状态。
我们在使用 GAN 时面临的最著名,最棘手的问题之一就是**模式崩溃**,它涉及到次优的最终配置,其中生成器冻结在某个模式附近,并不断提供输出。 发生这种情况的原因非常难以分析(实际上,只有理论),但是我们可以理解如果重新考虑 minimax 游戏,为什么会发生这种情况。 当我们要训练两个不同的分量时,即使保证了纳什均衡,在几次迭代之后,对于最常见的模式,判别器也会变得非常有选择性。 当然,当训练生成器以欺骗判别器时,实现此目标的最简单方法是简单地避免所有采样远离模式。 这种行为增加了判别器的选择性,并创建了一个反馈过程,使 GAN 陷入只有数据生成过程只有一小部分区域的状态。
在梯度方面,判别器提供的用于优化生成器的信息很快变得非常稀缺,因为最常见的样本不需要任何调整。 另一方面,当生成器开始避免所有`p(x)`不接近最大值的样本时,它们不会将判别器暴露给新的,可能有效的样本,因此梯度将 保持很小,直到消失为零。 不幸的是,没有可以用来避免此问题的全局策略,但是在本章中,我们将讨论一种建议的方法,以减轻模式崩溃(WGAN)的风险。 特别是,我们将把注意力集中在 Jensen-Shannon 发散的局限性上,在某些情况下,由于没有大的梯度,这可能导致 GAN 达到次优配置。 在本简介中,重要的是,不熟悉这些模型的读者应意识到风险,并能够在发生模式崩溃时识别出它。
在梯度方面,判别器提供的用于优化生成器的信息很快变得非常稀缺,因为最常见的样本不需要任何调整。 另一方面,当生成器开始避免所有`p(x)`不接近最大值的样本时,它们不会将判别器暴露给新的,可能有效的样本,因此梯度将保持很小,直到消失为零。 不幸的是,没有可以用来避免此问题的全局策略,但是在本章中,我们将讨论一种建议的方法,以减轻模式崩溃(WGAN)的风险。 特别是,我们将把注意力集中在 Jensen-Shannon 发散的局限性上,在某些情况下,由于没有大的梯度,这可能导致 GAN 达到次优配置。 在本简介中,重要的是,不熟悉这些模型的读者应意识到风险,并能够在发生模式崩溃时识别出它。
此时,我们可以继续进行实际操作,并使用 TensorFlow 建模真实的 GAN。
......@@ -736,7 +736,7 @@ Ys = np.squeeze((Ys[0] + 1.0) * 0.5 * 255.0).astype(np.uint8)
WGAN 生成的样本
可以看到,WGAN 已收敛到合理的最终配置。 图像质量受尺寸调整操作的强烈影响; 但是,有趣的是,生成的样本平均比原始样本要复杂。 例如,衣服的质地和形状受其他因素(例如,包和鞋子)的影响,结果是模型不规则,新颖样本数量增加。 但是,与 Olivetti 人脸数据集相反,在这种情况下,很难理解样本是否由异质属性的混合物组成,因为数据生成过程(例如标准 MNIST)具有至少 10 种原始的类。
可以看到,WGAN 已收敛到合理的最终配置。 图像质量受尺寸调整操作的强烈影响; 但是,有趣的是,生成的样本平均比原始样本要复杂。 例如,衣服的质地和形状受其他因素(例如,包和鞋子)的影响,结果是模型不规则,新颖样本数量增加。 但是,与 Olivetti 人脸数据集相反,在这种情况下,很难理解样本是否由异质属性的混合物组成,因为数据生成过程(例如标准 MNIST)具有至少 10 种原始的类。
WGAN 不会陷入模式崩溃,但是不同区域的强烈分离使模型无法轻松合并元素,正如我们在面部观察到的那样。 作为练习,我邀请读者对 Olivetti 人脸数据集重复该示例,找到最佳的超参数配置,并将结果与​​标准 DCGAN 获得的结果进行比较。
......@@ -748,7 +748,7 @@ WGAN 不会陷入模式崩溃,但是不同区域的强烈分离使模型无法
自组织映射是 Willshaw 和 Von Der Malsburg 首次提出的模型(在《如何通过自组织建立模式化的神经连接》中),目的是找到一种描述大脑中发生的不同现象的方法。 许多动物 实际上,他们观察到大脑的某些区域可以发展出内部组织的结构,这些结构的子组件相对于特定的输入模式(例如,某些视觉皮层区域对垂直或水平带非常敏感)可以选择性地接受。 SOM 的中心思想可以通过考虑聚类过程来综合,该聚类过程旨在找出样本的低级属性,这要归功于其对聚类的分配。 主要的实际差异是,在 SOM 中,单个单元通过称为**赢家通吃**的学习过程,成为一部分样本总体(即数据生成过程的区域)的代表。 。 这样的训练过程首先是引起所有单元(我们将其称为神经元)的响应并增强所有权重,然后通过减小最活跃单元周围的影响区域来进行,直到单个单元成为唯一的响应神经元为止。 给定输入模式。
自组织映射是 Willshaw 和 Von Der Malsburg 首次提出的模型(在《如何通过自组织建立模式化的神经连接》中),目的是找到一种描述大脑中发生的不同现象的方法。 实际上,他们观察到许多动物的大脑的某些区域可以发展出内部组织的结构,这些结构的子组件相对于特定的输入模式(例如,某些视觉皮层区域对垂直或水平带非常敏感)可以选择性地接受。 SOM 的中心思想可以通过考虑聚类过程来综合,该聚类过程旨在找出样本的低级属性,这要归功于其对聚类的分配。 主要的实际差异是,在 SOM 中,单个单元通过称为**赢家通吃**的学习过程,成为一部分样本总体(即数据生成过程的区域)的代表。 。 这样的训练过程首先是引起所有单元(我们将其称为神经元)的响应并增强所有权重,然后通过减小最活跃单元周围的影响区域来进行,直到单个单元成为唯一的响应神经元为止。 给定输入模式。
下图综合了该过程:
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册