第十七周:机器学习笔记

第十七周周报

  • 摘要
  • Abstratc
  • 一、机器学习——生成式对抗网络(Generative Adversarial Networks | GAN)——(中)
    • 1. GAN 的理论介绍
    • 2. 用JS散度训练存在的问题
    • 3. WGAN 算法
    • 4. 拓展——流体
  • 总结

摘要

本周周报主要对GAN进行了详细的学习,周报详细介绍了GAN的理论和训练过程,并说明了使用JS散度训练会存在的一些问题。然后周报还详细介绍了WGAN算法替代JS散度的原因和具体方式,并对WGAN算法进行介绍和说明。

Abstratc

This week’s weekly report primarily presents a detailed study on Generative Adversarial Networks (GANs). The theory and training process of GANs are thoroughly detailed in the report, along with an elucidation of the problems that may occur when employing Jensen-Shannon (JS) divergence for training purposes. Furthermore, the report discusses the reasons for substituting the Wasserstein GAN (WGAN) algorithm in place of the JS divergence and provides a comprehensive introduction and explanation of the WGAN algorithm.

一、机器学习——生成式对抗网络(Generative Adversarial Networks | GAN)——(中)

1. GAN 的理论介绍

这一小节我们来了解为什么生成器与判别器的交互可以产生人脸图片。
在之前的 回归问题 和 分类问题 中我们都是通过计算Loss Function来优化参数,其中都是通过进行gradient descent进行的。
在GAN中,Generator的input是一系列的从分布中采样出的vector,Generator就会产生一个比较复杂的分布我们称之为 PG
在这里插入图片描述

另外我们还有一系列原始的数据本身会形成另外一个分布,我们称之为 Pdata
训练的效果是希望 PG 和 Pdata 尽可能的相似
我们再举一个一维的简单例子说明 PG 和 Pdata,假设Generator的输入是一个一维的向量,如图的橙色曲线,Generator的输出也是一维的向量。
绿色曲线,真正的数据同样是一个一维的向量,它的分布用蓝色曲线来表示。
假设每次我们输入 5 个点,那每一个点的位置就会随着训练次数而改变,就会产生一个新的分布。
可能本来所有的点都集中在中间,但是通过Generator,通过一个网络里面很复杂的训练后,这些点就分成两边,变成图片中的分布的样子。
而其中 Pdata, 就是指真正数据的分布,在实际应用中真正数据分布可能是更极端的,比如左边的数据比较多,右边的数据比较少。
我们训练的结果是希望两个分布 PG 和Pdata越接近越好
即图片中的公式所示,表达的是这两个分布之间的Divergence,我们可以将其视为两个分布间的某种距离,如果这个距离越大,就代表这两个分布越不像;Divergence越小,代表这两个分布越相近。
Divergence就是衡量两个的分布相似度的一个指标。
我们现在的目标就是训练一组Generator模型中的网络参数,可以让生成的 PG 和 Pdata 之间的Divergence越小越好,这个最优生成器称为 G
在这里插入图片描述
其中的Divergence代表散度,那么散度是什么呢?
散度(Divergence)在数学和物理学中有着不同的定义,但它们通常都与度量某种量的“发散”或“扩散”趋势有关。
在概率论和信息论中,散度是描述两个概率分布差异的一种度量
在机器学习中,散度和距离度量常用于评估模型的性能。
特别是在生成模型(如GAN)中,用于衡量生成的样本分布与真实样本分布之间的相似度。
以下是几种常见的散度类型:

  1. Kullback–Leibler (KL) 散度
    KL散度是衡量两个概率分布 ( P ) 和 ( Q ) 差异的一种方法,定义为:
    D K L ( P ∥ ∥ Q ) = ∫ P ( x ) log ⁡ P ( x ) Q ( x ) d x D_{KL}(P \|\| Q) = \int P(x) \log \frac{P(x)}{Q(x)} \, dx DKL(P∥∥Q)=P(x)logQ(x)P(x)dx

对于离散分布,积分被求和替代。
KL散度是不对称的即 ( DKL(P || Q) ) 通常不等于 ( DKL(Q || P) ),并且当且仅当 ( P ) 和 ( Q ) 是相同的分布时,KL散度为零。

  1. Jensen–Shannon (JS) 散度
    JS散度是KL散度的一种对称版本,定义为:
    J S D ( P ∥ ∥ Q ) = 1 2 D K L ( P ∥ ∥ M ) + 1 2 D K L ( Q ∥ ∥ M ) JSD(P \|\| Q) = \frac{1}{2} D_{KL}(P \|\| M) + \frac{1}{2} D_{KL}(Q \|\| M) JSD(P∥∥Q)=21DKL(P∥∥M)+21DKL(Q∥∥M)
    其中 ( M ) 是 ( P ) 和 ( Q ) 的平均分布,即 M = 1 2 ( P + Q ) M = \frac{1}{2}(P + Q) M=21(P+Q)

    JS散度的值总是在0到1之间,当且仅当 ( P ) 和 ( Q ) 相同时,JS散度为零。

  2. f-散度
    f-散度是散度的一个更一般的形式,定义为:
    D f ( P ∥ ∥ Q ) = ∫ f ( P ( x ) Q ( x ) ) Q ( x ) d x D_f(P \|\| Q) = \int f\left(\frac{P(x)}{Q(x)}\right) Q(x) \, dx Df(P∥∥Q)=f(Q(x)P(x))Q(x)dx

    其中 ( f ) 是一个凸函数,且 ( f(1) = 0 )。
    KL散度和JS散度都可以看作是f-散度的特例。

  3. Wasserstein (W) 距离
    Wasserstein距离(也称为地球移动者距离)是衡量两个概率分布差异的一种度量,它考虑了将一个分布转换为另一个分布所需的“成本”。在数学上,它定义为:
    W ( P , Q ) = inf ⁡ γ ∈ Π ( P , Q ) ∫ ∫ c ( x , y ) d γ ( x , y ) W(P, Q) = \inf_{\gamma \in \Pi(P, Q)} \int \int c(x, y) \, d\gamma(x, y) W(P,Q)=γΠ(P,Q)inf∫∫c(x,y)dγ(x,y)

    其中 ( Pi(P, Q) ) 是所有可能的 ( P ) 和 ( Q ) 之间的联合分布(转移计划),( c(x, y) ) 是成本函数,通常取 ( x ) 和 ( y ) 之间的欧几里得距离。

训练生成器的过程训练例如卷积神经网络等简单网络非常地像,相比于之前的找一组参数最小化损失函数,我们现在其实也定义了生成器的损失函数,即 PG 和 Pdata 之间的差异。
对于一般的神经网络,其损失函数是可以计算的,但是对于生成器的差异,我们应该怎么处理呢?
对于连续的差异例如 KL 散度和 JS 散度是很复杂的,在实际离散的数据中,我们或许无法计算其对应的积分。
在生成对抗网络(GAN)中计算生成分布 ( PG ) 和真实数据分布 ( Pdata ) 之间的散度(divergence)通常涉及到复杂的积分计算,这在实际中很难直接实现。
对于 GAN,只要我们知道怎样从 PG 和 Pdata 中sample,就可以计算得到差异,而不需要知道实际的公式。
1、我们对于图库进行随机采样时,就会得到 Pdata
2、对于Generator,我们需要从正态分布中采样出来的向量通过生成器生成一系列的图片,这些图片就是 PG 采样出来的结果。
所以我们有办法从 PG 采样,也可以从 Pdata 进行采样。
那从PG和PData中 sample出来的数据,又如何计算Div呢?
下面会介绍如何只做以上采样的前提下(即不知道 PG 和 Pdata的形式以及公式的情况下)

如何估算得到Divergence,这其中要依靠Discriminator的力量。
我们复习下Discriminator的训练方式。
1、首先,我们有一系列的真实数据(即从 Pdata采样得到的数据)还有一系列的生成数据(从 PG 中sample出来的数据),根据真实数据和Generator生成的数据去训练Discriminator
(Discriminator训练目标是看到真实数据就给它比较高的分数,看到生成的数据就给它比较低的分数)
2、然后把它当做是一个优化问题,我们要训练一个Discriminator,其可以最大化一个目标函数。
或者加个符号,转化为求最小值。
这个目标函数如图所示:
其中有一些 y 是从 Pdata中采样得到的,也就是真实的数据,而我们把这个真正的数据输入到Discriminator中,得到一个分数取Log(D(Y))。
另一方面,我们还有一些 y 来源于Generator,即从 PG 中采样出来的,将这些生成图片输入至Discriminator中同样得到一个分数,再取Log(1 − D(Y))。
我们希望目标函数 V 越大越好,其中 y 如果是从 Pdata 中采样得到的真实数据,它就要越大越好;如果是从 PG 采样得到的生成数据,它就要越小越好。

在GAN诞生的时候,人们会让Discriminator和二分类产生联系,因为objective function(目标函数)本身就是一个cross entropy乘上一个负号。
在这里插入图片描述
训练一个分类器时的操作就是要最小化cross entropy。
所以当我们最大化objective function的时候,其实等同于最小化cross entropy,也就是等同于是在训练一个分类器。
这个它做的事情就是把图中蓝色点,从 Pdata 采样出的真实数据当作类别 1,把从 PG 采样出的这些假的数据当作类别 2。有两个类别的数据,训练一个二分类的分类器,训练后就等同于是解了这个优化问题。
而图中红框里面的数值,它本身就和 JS 散度有关。
或许最原始的 GAN 的文章,它的出发点是从二分类开始的,一开始是把判别器写成二分类的分类器然后有了这样的objective function,然后再经过一番推导后发现这个objective function的最大值和 JS 散度是相关的
在这里插入图片描述
为什么objective function与JS散度是相关的呢?
如上图中
假如Pdata与PG的Divergence很小,那么类别1与类别2就会混在一起(Generator与Database的数据非常接近),那么作为类似于二分类器(0、1分类)的Discriminator就会难以分辨,所以其V就会非常小。
假如Pdata与PG的Divergence很小,则Discriminator就会很好分辨,所以其V就会非常大。
所以Divergence(假设使用JS散度)与V之间是息息相关的。

我们再来看下计算生成器 + 判别器的过程:
我们的目标是要找一个生成器去最小化两个分布 PG 和 Pdata 的Divergence。
这个Divergence就是使用训练好的Discriminator来最大化它的Objective function值来实现。

如下图所示:
G*中的 MinMax 过程就像是Generator和Discriminator进行互动,互相“欺骗”的过程。

注意,这里的差异函数不一定使用 KL 或者 JS 等函数,可以尝试不同的函数来得到不同差异衡量指标。
在这里插入图片描述
所以实际上,在GAN训练的过程中,我们其实需要两个M
1、Minimize(最小化)————最小化Divergence ——等同于求minmaxV(G,D)
2、Maximize(最大化)————最大化Objected Function——maxV(G,D)
V其实就是 (- cross entropy)——视为分类器,用于区分Database 与 Generator的差距
其中E是期望
在这里插入图片描述

2. 用JS散度训练存在的问题

因为要进行 MinMax 操作,所以 GAN 是很不好训练的。
假如我们使用JS Divergence进行训练,结果其实是有点不理想的。
原因有两点:
1、PG 与 Pdata 的重合部分非常少,如果使用JS的表现会非常差。
图片其实是高维空间里低维的流形图片其实是高维空间里低维的流形(可以在1.3看流体的概念再回来细看)
因为在高维空间中随便采样一个点,它通常都没有办法构成一个人物的头像,所以人物头像的分布,在高维的空间中其实是非常狭窄的。
换个角度解释,如下图所示:
如果是以二维空间为例,图片的分布可能就是二维空间的一条线,也就是 PG 和 Pdata都是二维空间中的两条直线。而二维空间中的两条直线,除非它们刚好重合,否则它们相交的范围是几乎可以忽略的。
在这里插入图片描述
从另一个角度解释,如下图所示:
我们不知道 PG 和 Pdata 的具体分布,因为其源于采样,所以也许它们是有非常小的重叠分布范围。
比如采样的点不够多,就算是这两个分布实际上很相似,也很难有任何的重叠的部分。
因为从这些少量点我们可以画一条线明确的区分这两种分布,使其看起来不相似
在这里插入图片描述
所以以上的问题就会对于 JS 分布造成以下问题:
1、 对于两个没有重叠的分布,JS 散度的值都为 Log2,与具体的分布无关。就算两个分布都是直线,但是它们的距离不一样,得到的 JS 散度的值就都会是 Log2。
如下图所示:
在这里插入图片描述
计算过程如下:
在这里插入图片描述在这里插入图片描述
所以 JS 散度的值并不能很好地反映两个分布的差异。

2、 对于两个有重叠的分布,JS 散度的值也不一定能够很好地反映两个分布的差异。
因为 JS 散度的值是有上限的,所以当两个分布的重叠部分很大时,JS 散度不好区分不同分布间的差异。

让我们从实际操作的角度来阐述这个问题:
在使用JS散度(Jensen-Shannon divergence)来训练一个用于二分类的分类器,以区分真实图片和生成图片时,我们通常会发现分类器的正确率几乎达到了100%。
这种现象的原因在于我们用于训练的样本数量非常有限。
对于Discriminator而言,即使只采样了256张真实图片和256张生成的假图片,它也能通过简单的记忆方法将这两组图片区分开来。因此,在这种情况下,使用二分类分类器训练的判别器,其识别正确率自然会达到100%,但这并不能真实反映生成器的性能是否有所提升。
在还没有WGAN(Wasserstein GAN)这类技术的时代,训练GAN(生成对抗网络)的过程就像是在玩一个盲盒游戏。
因为我们无法直观地了解模型在训练过程中是否在不断进步。因此,过去的常见做法是在每次更新生成器几次之后,将生成的图片打印出来进行可视化检查。这意味着你需要在吃饭时一边查看图片生成的结果,一边监控训练过程。 如果过程中出现内存错误,你就需要重新开始训练,这使得训练GAN的过程变得非常辛苦。
与训练常规神经网络不同,后者通常有一个损失函数,其值会随着训练的进行而逐渐减小,从而让我们放心网络正在有效地学习。
然而,对于GAN来说,我们缺乏这样的直接指标,因此我们需要一个更有效的衡量两个分布差异的指标。
否则,我们只能依赖于人工观察,守在电脑前,一旦发现结果不理想,就得重新调整超参数并再次尝试训练网络。

3. WGAN 算法

所以既然从 JS 散度中,看不出来分布的差异。那么在训练的时候,我们就很难知道我们的生成器有没有在变好,我们也很难知道我们的判别器有没有在变好。所以我们需要一个更好的衡量两个分布差异的指标——就是著名的WGAN(Wasserstein Generative Adversarial Network)

Wasserstein 距离的想法如下:
假设两个分布分别为 P 和 Q,我们想要知道这两个分布的差异,我们可以想像有一个推土机,它可以把 P 这边的土堆挪到 Q 这边,那么推土机平均走的距离就是 Wasserstein 距离。
如下图所示:
我们假设 P 集中在一个点,Q 集中在一个点
对推土机而言,假设它要把 P 这边的土挪到 Q 这边,那它要平均走的距离就是 D,那么 P和 Q 的 Wasserstein 距离就是 D。
然而,如果变量 P 和 Q 的分布不是集中在一个点,而是分布在一个区域内,我们就需要考虑所有可能的情况,也就是所有推土机的行走路径。然后,我们可以计算这些路径的平均长度。这个平均长度,实际上就是所谓的 Wasserstein 距离。
Wasserstein 距离可以想象为有一个推土机在推土,所以 Wasserstein 距离也称为推土机距离(Earth Mover’s Distance,EMD)
在这里插入图片描述
当处理更复杂的分布时,计算 Wasserstein 距离变得具有挑战性,如图下图所示:
假设我们有两个分布,P 和 Q,我们的目标是将 P 转换为 Q。
将 P 转换为 Q 可以通过两种方式来实现这一目标:
1、将 P 的“土壤”(即分布的质量)移动到 Q
2、或者将 Q 的“土壤”移动到 P。
因此,当我们考虑更复杂的分布时,计算两种分布之间的距离会涉及多种不同的“移动”方法。
每种方法计算出的平均距离,即推土机平均行走的距离,可能会有所不同。
例如,在图的左侧,推土机平均行走的距离较短;而在右侧,由于选择了较远的路径,推土机平均行走的距离较长。
在这里插入图片描述
这引出了一个问题:
两个分布 P 和 Q 之间的 Wasserstein 距离是否会有多个不同的值?如果是这样,我们又该如何确定哪一个值才是真正的 Wasserstein 距离呢?
为了确保 Wasserstein 距离有一个唯一的值,我们定义它为考虑所有可能的“移动”方式,并找出使平均距离最小的那种方法即最小的值,就是我们所说的 Wasserstein 距离。
因此,计算 Wasserstein 距离实际上是一个优化问题,它涉及到寻找最优的“移动”策略,以最小化推土机平均行走的距离。
这个过程可能相当复杂,因为它需要在所有可能的移动方案中找到最优解。

Wasserstein 距离在衡量两个分布差异方面具有显著的优势,如下图所示:
假设我们有两个分布,PG 和 Pdata,它们之间的距离分别用 d0 和 d1 表示。
在这种情况下,Wasserstein 距离能够准确地反映出这两个距离,即 d0 和 d1
特别地,如果 d1 小于 d0,那么对应的 Wasserstein 距离也会相应地更小,从而有效地反映出两个分布之间的差异。
但是对于Discriminator来说,使用JS散度计算得到的结果都是Log2,所以随着生成器的不断进步,我们观察到判别器的表现却没有明显的规律性,这使得判别器难以判断。
如果我们采用 Wasserstein 距离作为衡量标准,我们就能清晰地看到,随着生成器的改进,Wasserstein 距离逐渐减小,表明生成器的性能在提升。
因此,Wasserstein 距离越小,表明Generator的性能越好,这正是我们选择使用 Wasserstein 距离的原因。
在这里插入图片描述
可以再举一个演化的例子——人类眼睛的生成。
如下图所示:
人类的眼睛是非常复杂的,它是由其他原始的眼睛演化而来的。
1、一开始有一些细胞具备有感光的能力,这可以看做是最原始的眼睛。那这些最原始的眼睛怎么变成最复杂的眼睛呢?
2、它只是一些感光的细胞在皮肤上经过一系列的突变产生更多的感光细胞,中间有很多连续的步骤。举例来说,感光的细胞可能会出现在一个比较凹陷的地方,皮肤凹陷下去,这样感光细胞可以接受来自不同方向的光源。
3、然后慢慢地把凹陷的地方保护住并在里面放一些液体,最后就变成了人的眼睛。
所以这个过程是一个连续的过程,是一个从简单到复杂的过程。
当使用 WGAN 时,使用 Wasserstein 距离来衡量分布间的偏差的时候,其实就制造了类似的效果。本来两个分布 PG0 和 Pdata 距离非常遥远,你要它一步从开始就直接跳到结尾,这是非常困难的。但是如果用 Wasserstein 距离,你可以让 PG0 和 Pdata 慢慢挪近到一起,可以让它们的距离越来越小,最后就可以让它们连在一起。
用 Wasserstein 距离的原因,因为它可以让我们生成器一步一步地变好,而不是一下子就变好。
在这里插入图片描述
所以 WGAN 实际上就是用 Wasserstein 距离来取代 JS 距离,这个 GAN 就叫做 WGAN。
那Wasserstein 距离是要如何计算呢?
如下图所示:
Wasserstein 距离的定义是一个最优化的问题,如图所示:
这里我们简化过程直接介绍结果,也就是解图中最大化问题的解,解出来以后所得到的值就是 Wasserstein 距离,即 PG0 和 Pdata 的 Wasserstein距离。
我们观察如下公式:

max ⁡ D ∈ 1 Lipschitz  { E x ∼ P data  [ D ( x ) ] − E x ∼ P G [ D ( x ) ] } \max _{D \in 1 \text { Lipschitz }}\left\{E_{x \sim P_{\text {data }}}[D(x)]-E_{x \sim P_{G}}[D(x)]\right\} D1 Lipschitz max{ExPdata [D(x)]ExPG[D(x)]}

即我们要找一个函数 D,这个函数 D 是一个函数,我们可以想像成是一个神经网络,这个神经网络的输入是 x,输出是 D(x)。
X 如果是从 Pdata采样来的,要计算它的期望值 Ex∼Pdata
如果 X 是从 PG 采样来的,那要计算它的期望值 Ex∼PG ,然后再乘上一个负号
所以如果要最大化这个objective function 我们就需要:
1、如果 X 如果是从 Pdata 采样得到的,那么判别器的输出要越大越好。
2、如果 X 如果是从 PG 采样得到的,从生成器采样出来的输出应该要越小越好。
在这里插入图片描述
此外还有另外一个限制:函数 D 必须要是一个 1-Lipschitz 的函数。
我们可以想像成,如果有一个函数的斜率是有上限的(足够平滑,变化不剧烈),那这个函数就是 1-Lipschitz 的函数。
如果没有这个限制,只看大括号里面的值只单纯要左边的值越大越好,右边的值越小越好,那么在蓝色的点和绿色的点,也就是真正的图像和生成的图像没有重叠的时候,我们可以让左边的值无限大,右边的值无限小,这样的话,这个目标函数就可以无限大。这时整个训练过程就根本就没有办法收敛。所以我们要加上这个限制

所以让这个函数是一个 1-Lipschitz的函数,这样的话,左边的值无法无限大,右边的值无法无限小,所以这个目标函数就可以收敛。
所以当Discriminator够平滑的时候,假设真实数据和生成数据的分布距离比较近,那就没有办法让真实数据的期望值非常大,同时生成的值非常小。
因为如果让真实数据的期望值非常大,同时生成的值非常小,那它们中间的差距很大,Discriminator的更新变化就很剧烈,它就不平滑了,也就不是 1-Lipschitz 了
在这里插入图片描述
(拓展)1-Lipschitz是什么?
在这里插入图片描述
那接下来的问题是:如何确保Discriminator一定符合 1-Lipschitz 函数的限制呢?
其实最早刚提出 WGAN 的时候也没有什么好想法。
最早的一篇 WGAN 的文章做了一个比较粗糙的处理,就是训练网络时,把判别器的参数限制在一个范围内,如果超过这个范围,就把梯度下降更新后的权重设为这个范围的边界值。但其实这个方法并不一定真的能够让判别器变成 1-Lipschitz 函数。虽然它可以让判别器变得平滑,但是它并没有真的去解这个优化问题,它并没有真的让Discriminator符合这个限制。

后来就有了一些其它的方法
例如说有一篇文章叫做 Improved WGAN,它就是使用了梯度惩罚(gradient penalty)的方法,这个方法可以让判别器变成 1-Lipschitz 函数。
如图所示:
假设蓝色区域是真实数据的分布,橘色是生成数据的分布,在真实数据这边采样一个数据,在生成数据这边取一个样本,然后在这两个点之间取一个中间的点,然后计算个点的梯度,使之接近于 1。
就是在Discriminator的objective里面,加上一个惩罚项(penalty term),这个惩罚项就是Discriminator的gradient的范数减去 1 的平方
这个惩罚项的系数是一个超参数,这个超参数可以让你的判别器变得越平滑。
在这里插入图片描述
梯度惩罚项的公式的解释如下:
在这里插入图片描述
在 Improved WGAN 之后,还有 Improved Improved WGAN,就是把这个限制再稍微改一改。另外还有方法是将判别器的参数限制在一个范围内,让它是1-Lipschitz 函数,这个叫做谱归一化
总之,这些方法都可以让判别器变成 1-Lipschitz 函数。
但是这些方法都有一个问题,就是它们都是在判别器的目标函数里面加了一个惩罚项,这个惩罚项的系数是一个hyper parameter(超参数),这个超参数会让你的Discriminator变得越平滑。

4. 拓展——流体

在1.2中我们说了图片其实是高维空间里低维的流形图片其实是高维空间里低维的流形
那么流体是什么呢?

在数学中,流形(manifold)是一个局部类似于欧几里得空间的拓扑空间,它可以是任何维度的。
简单来说,流形是一种可以被看作是局部平坦的空间,即使它整体上可能是弯曲的。
所有可能的图片构成的数据集在高维空间中可能只形成了一个低维的结构,这个结构就是我们所说的流形。

在这里插入图片描述
为什么图片分辨率高,其向量的维度就大呢?
彩色图片通常由RGB三个颜色通道组成,每个通道代表红色、绿色和蓝色。
每个像素点的颜色值由这三个通道的强度值决定,通常每个通道的值范围从0到255。
但是,当我们说分辨率高导致向量维度大时,我们是在考虑整个图片的维度,而不仅仅是单个像素的颜色值。
在这里插入图片描述
图片可以看作高维中的一个点的具体解释
在这里插入图片描述
数据分布的狭窄性是什么?
数据分布的狭窄性是在高维空间中随机采样一个点,通常不会得到一个有意义的数据点
比如一个人物的头像。这是因为实际的数据点(如人物头像)在高维空间中分布非常集中,形成了一个狭窄的区域。这个区域就是流形,它代表了数据的内在结构。
举个例子深入理解一下:
在这里插入图片描述

总结

临近期末需要处理的事情很多,所进度缓慢,这一周以复习为主之前的pytorch为主,为以后跑模型做准备。希望期末过后能够加快进度。
本周,我深入研究了生成式对抗网络(GAN)的理论基础。我学习了GAN的架构,包括生成器和判别器,以及它们如何通过竞争来生成高质量的数据。我理解了GAN的训练目标是通过最小化生成数据分布PG和真实数据分布Pdata之间的散度来优化生成器。然后探讨了使用JS散度作为训练GAN的损失函数时遇到的问题。我意识到JS散度在高维空间中的数据分布上表现不佳,因为它不能很好地反映两个分布之间的实际差异。为了解决JS散度的问题,我研究了WGAN算法。WGAN使用Wasserstein距离来衡量分布之间的差异,这提供了一个更有效的训练指标。我学习了Wasserstein距离的概念,它通过模拟推土机移动“土壤”的平均距离来衡量分布差异。我还了解了如何通过梯度惩罚和谱归一化等技术来确保判别器满足1-Lipschitz函数的限制。最后,我拓展了对流体概念的理解。我学习了流形的概念,以及如何将数据分布视为高维空间中的低维流形。这有助于我理解GAN在高维空间中的行为,以及为什么数据分布往往是狭窄的。
通过本周的学习,我对GAN有了更深入的理解。我认识到了JS散度在训练GAN时的局限性,并探索了WGAN算法作为解决方案的优势。此外,对流体概念的理解也让我对GAN在高维空间中的行为有了更直观的认识。
下一周计划继续学习GAN,临近期末,进度缓慢,望理解。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/452915.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在ESP-IDF环境中如何进行多文件中的数据流转-FreeRTOS实时操作系统_流缓存区“xMessageBuffer”

一、建立三个源文件和对应的头文件 建立文件名,如图所示 图 1-1 二、包含相应的头文件 main.h 图 2-1 mess_send.h mess_rece.h和这个中类似,不明白的大家看我最后面的源码分享 图2-2 三、声明消息缓存区的句柄 大家注意,在main.c中定义的是全局变…

免费字体二次贩卖;刮刮乐模拟器;小报童 | 生活周刊 #4

Raycast 的两款在线工具 Raycast 公司出品,必属精品,之前的代码转图片工具,交互和颜值都做得很漂亮 现在又新出了一个 图标制作器,一键制作美观好看的图标 猫啃网 没想到像【汇文明朝体】这样免费的字体都被人拿来当成【打字机字…

基于知识图谱的电子元器件问答系统

你还在为寻找电子元器件的相关信息头疼吗?作为一名程序员或电子工程师,在项目中经常需要快速查询电子元件的属性或关联关系。今天给大家介绍一个可以大大提升工作效率的神器——基于知识图谱的电子元器件问答系统。这不仅是你学习和工作的好帮手&#xf…

vue2使用pdfjs-dist实现pdf预览(iframe形式,不修改pdfjs原来的ui和控件,dom层可以用display去掉一部分组件)

前情提要 在一开始要使用pdf预览的时候,第一次选的是vue-pdf,但是vue-pdf支持的功能太少,缺少了项目中需要的一项-复制粘贴功能 之后我一顿搜搜搜,最终貌似只有pdfjs能用 但是网上支持text-layer的貌似都是用的2.09那个版本。 使…

androidStudio编译导致的同名.so文件冲突问题解决

files found with path lib/arm64-v8a/libserial_port.so from inputs: ...\build\intermediates\library_jni\debug\jni\arm64-v8a\libserial_port.so C:\Users\...\.gradle\caches\transforms-3\...\jni\arm64-v8a\XXX.so 解决方式如下: 1.将gradle缓存文件删…

c++迷宫游戏

1、问题描述 程序开始运行时显示一个迷宫地图,迷宫中央有一只老鼠,迷宫的右下方有一个粮仓。游戏的任务是使用键盘上的方向健操纵老鼠在规定的时间内走到粮仓处。 基本要求: 老鼠形象可以辨认,可用键盘操纵老鼠上下左右移动;迷宫的墙足够结…

Android 第5种启动模式:singleInstancePerTask

Android 第5种启动模式:singleInstancePerTask 随着 Android 版本的更新,应用启动模式逐渐丰富。在 Android 12 中,新增了一种启动模式——singleInstancePerTask。它是继 standard、singleTop、singleTask 和 singleInstance 之后的第五种启…

大数据新视界 --大数据大厂之 Apache Beam:统一批流处理的大数据新贵

💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

OpenCV高级图形用户界面(18)手动设置轨迹条(Trackbar)的位置函数setTrackbarPos()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 该函数设置指定窗口中指定轨迹条的位置。 注意 [仅 Qt 后端] 如果轨迹条附加到控制面板,则 winname 可以为空。 函数原型 void cv…

插件发布新特性,让运动适配更简单。

为了让广大开发者更好的适配各AI运动场景,我们的AI运动识别插件已经迭代了23个版本,最近又迎来了我们的1.5.5小版本更新,本次更新了2个新特性,新特性有助于大家更好的适配新运动,更轻松的开发健身、体育、体测、AR互动…

Veritas NetBackup 10.5 发布,新增功能概览

Veritas NetBackup 10.5 发布,新增功能概览 Veritas NetBackup 10.5 (Unix, Linux, Windows) - 领先的企业备份解决方案 The #1 enterprise backup and recovery solution. 请访问原文链接:https://sysin.org/blog/veritas-netbackup-10/ 查看最新版。…

PPT自动化:快速更换PPT图片(如何保留原图片样式等参数更换图片)

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 PPT更换图片 📒1. 安装 `python-pptx` 模块2. 加载PPT文件3. 查找并替换图片3.1 查找图片形状3.2 获取原图片的样式和位置3.3 替换图片4. 保存修改后的PPT文件5. 设置图片的相关参数5.1 设置透明度5.2 设置边框🚀 保留所有参…

基于springboot的网上服装商城推荐系统的设计与实现

基于springboot的网上服装商城推荐系统的设计与实现 开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:idea 源码获取&#xf…

upload-labs靶场Pass-01

upload-labs靶场Pass-01 分析 查看提示,提示如下 查看源码 function checkFile() {var file document.getElementsByName(upload_file)[0].value;if (file null || file "") {alert("请选择要上传的文件!");return false;}//定义允许上传…

Halcon 使用二维像素分类对图像进行分割

文章目录 算子histo_2dim 计算双通道灰度值图像的直方图class_2dim_sup 使用二维像素分类对图像进行分割 示例 算子 histo_2dim 计算双通道灰度值图像的直方图 histo_2dim(Regions, ImageCol, ImageRow : Histo2Dim : : )Regions (输入对象):在此区域内计算直方图…

[STM32] 简单介绍 (一)

文章目录 1.STM32简介2.ARM3.STM32F103ZET6/STM32F103C8T64.STM32命名规则5.STM32最小系统板6.STM32开发方式7.STM32系统架构8.STM32时钟系统9.STM32中断系统9.1 NVIC嵌套向量中断控制器9.2 EXIT外部中断控制器 10.STM32定时器 1.STM32简介 STM32是ST公司基于ARM Cortex-M内核…

水题四道。

我的 水题四道--题目目录 问题 A: 依次输出第k小整数 代码1 问题 B: 第k小整数(knumber) 代码2 树的统计 代码3 枪声问题 代码4 问题 A: 依次输出第k小整数 现有n个正整数,n≤10000,要求出这n个正整数中的第1小的整数,第2小的整数&#xf…

基于Multisim温控电风扇控制电路(含仿真和报告)

【全套资料.zip】温控电风扇控制电路设计Multisim仿真设计数字电子技术 文章目录 功能一、Multisim仿真源文件二、原理文档报告资料下载【Multisim仿真报告讲解视频.zip】 功能 2.1 设计内容 设计制作一个温控风扇自动控制系统电路。 2.2 设计要求 设计一温控风扇控制系统&am…

汽车管理系统——主界面制作

目录 主界面需要有什么?然后要做什么?添加两个主菜单(声明)下一步应该干什么?能够跳转到文件有哪几个动作?动作如何声明?为什么用选择声明指针,不选择直接声明这个对象? …

IO进程_day1

目录 概要 标准IO 1.概念: 2.特点: 3.缓存区 3.1行缓存:和终端操作相关 3.2全缓存:和文件操作相关 ​​​​​​​3.3不缓存:标准错误 stderr 4.函数 ​​​​​​​4.1打开文件 ​​​​​​​4.2关闭文件…