机器学习课程学习周报十

2024-08-30 07:36
文章标签 学习 机器 周报 课程

本文主要是介绍机器学习课程学习周报十,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

机器学习课程学习周报十

文章目录

  • 机器学习课程学习周报十
    • 摘要
    • Abstract
    • 一、机器学习部分
      • 1.1 生成对抗网络
      • 1.2 生成器与辨别器的训练过程
      • 1.3 信息论
        • 1.3.1 信息量
        • 1.3.2 熵
        • 1.3.3 交叉熵
        • 1.3.4 相对熵/KL散度
        • 1.3.5 交叉熵损失函数
        • 1.3.6 JS散度
      • 1.4 GAN的理论介绍
    • 总结

摘要

本周学习了生成对抗网络(GAN)的基本原理和训练过程。重点介绍了生成器和判别器的协同训练机制,以及信息论在GAN中的应用。通过GAN的实践,理解了如何通过最小化生成数据与真实数据分布之间的差异来提高生成器的效果。

Abstract

This week I focused on the foundational principles and training process of Generative Adversarial Networks(GAN). The study highlighted the collaborative training mechanism of the generator and discriminator, along with the application of information theory in GAN. Practical insights were gained into improving generator performance by minimizing the divergence between generated and real data distributions.

一、机器学习部分

1.1 生成对抗网络

生成模型generative model)中的网络通常被作为一个生成器generator)来使用。在模型输入时会将一个随机变量 z z z与原始输入 x x x一并输入到模型中,随机变量 z z z是从随机分布中采样得到的,这个随机分布应能知道其函数表达式,例如高斯分布Gaussian distribution)、均匀分布uniform distribution)。虽然我们每次输入同样的 x x x,但随着采样得到的 z z z不同,我们得到的输出 y y y也会不一样。同理,对于网络来说,其输出也不再固定,而变成了一个复杂的分布,我们也将这种可以输出一 个复杂分布的网络称为生成器,如下图所示。

在这里插入图片描述

提出生成模型的原因,是我们的任务需要创造性的输出。对于生成模型来说,其输出的结果能够输出一个分布,能够说出多种答案,以处理开放式的问题。生成模型又分为无限制生成unconditional generation),也就是不需要原始输入 x x x,以及条件型生成conditional generation),这种则需要原始输入 x x x。以无限制的图片生成为例,一张图片就是一个高维的向量,所以生成器实际上做的事情就是输出一个高维的向量。我们首先从正态分布中采样得到一个向量 z z z,并输入到生成器中,生成器输出一个高维向量,如 64 × 64 × 3 64 \times 64 \times 3 64×64×3大小的彩色图片。我们也可以选择其他的分布,但是根据经验,不同分布之间的差异并没有非常大。正态分布比较简单且常见,后面的学习都以正态分布为前提。

生成模型中,现在非常火的是扩散模型Diffusion Model),这种模型将在下一章进行学习。本节将学习最为经典的生成式对抗网络Generative Adversarial Network, GAN)。

在GAN中,除了生成器,还需要多训练一个判别器discriminator),其通常是一个神经网络。判别器会输入一张图片,输出一个标量,其数值越大就代表现在输入的图片越像是真实的图像。举例来说,假设1是最大的值,生成得很好的图像输出就是1,不知道在画什么就输出0.5,再差一些就输出0.1 等等。判别器从本质来说与生成器一样也是神经网络,是由我们自己设计的。

在这里插入图片描述

举一个使用GAN生成动漫人物图像的例子:首先, 第一代生成器的参数几乎是完全随机的,所以它根本就不知道要怎么画动漫人物,所以其画出来的东西就是一些莫名其妙的噪音。那判别器学习的目标是要成功分辨生成器输出的动漫图片。 当然在上图里面可能非常容易,对判别器来说它只要看图片中是否有两个黑黑的眼睛即可。接下来生成器就要通过训练调整里面的参数来骗过判别器。假设判别器判断一张图片是不是真实图片的依据是看图片有没有眼睛,那新的生成器就需要输出有眼睛的图片。所以生成器产生眼睛出来,它是可以骗过第一代的判别器的。同时判别器也是会进化的,其会试图分辨新的生成器与真实图片之间的差异。例如,通过有没有嘴巴来识别真假。所以第三代的生成器就会想办法去骗过第二代的判别器,比如把嘴巴加上去。当然同时判别器也会逐渐的进步,会越来越严苛,来“逼迫”生成器产生出来的图片越来越像动漫的人物。所以生成器和判别器彼此之间是一直的互动、促进关系,和我们所说的“内卷”一样。最终,生成器会学会画出动漫人物的脸,而判别器也会学会分辨真假图片,这就是 GAN 的训练过程。

1.2 生成器与辨别器的训练过程

在这里插入图片描述

第一步,生成器和判别器是两个网络,在训练前我们要先分别进行参数初始化。然后固定生成器,只训练判别器。因为生成器的初始参数是随机初始化的,所以它什么都没有学习到,输入一系列采样得到的向量给它,它的输出肯定都是些随机、混乱的图片。这时,我们开始训练判别器,判别器的训练目标是要分辨真正的动漫人物与生成器产生出来的动漫人物间的差异。我们从图库中采样一些动漫人物头像图片,再将其与生成的结果作对比,将真正图片的标签标1,生成器产生的图片标签标0。此时,将训练判别器看作为分类或回归问题。如果是分类问题,判别器应能将真实图片当作类别1,将生成图片当作类别2;如果是回归问题,判别器得到真实图片的输入就要输出1,得到生成图片的输入就要输出0,并在0-1之间打分。

在这里插入图片描述

第二步,固定判别器,只训练生成器。训练生成器的目的就是让生成器想办法去骗过判别器,因为在第一步中判别器已经学会分辨真图和假图间的差异,如果生成器如果可以骗过判别器,那生成器产生出来的图片可能就可以以假乱真。现在,生成器先产生一个图片,然后将这个图片输入到判别器中,判别器会给这个图片一个打分。这里判别器是固定的,它只需要给更“真”的图片更高的分数即可,生成器训练的目标就是 让图片更加真实,也就是提高分数。生成器和判别器都是有很多层的神经网络络,我们通常将两者一起当作一 个比较大的网络来看待,但是不会调整判别器部分的模型参数,判别器在这一步是固定的。

GAN 算法的两个步骤:步骤一,固定生成器训练判别器;步骤二,固定判别器训练生成器。接下来就是重复以上的训练,训练完判别器固定判别器训练生成器。训练完生成器以后再用生成器去产生更多的新图片再给判别器做训练。训练完判别器后再训练生成器, 如此反覆地去执行。当其中一个进行训练的时候,另外一个就固定住,期待它们都可以在自己的目标处达到最优,这就是生成式对抗网络的思想。

1.3 信息论

在介绍GAN的理论之前,我认为有必要先在这里学习一下信息论相关的知识。

1.3.1 信息量

信息量Amount of Information)表示事情包含的信息量大小(事件发生的难度有多大)。小概率事件,它发生的难度比较大,所以有较大的信息量。大概率事件,它发生的难度比较小,所以有较小的信息量。例如:小明考试及格的概率是20%,则不及格的概率就是80%。小明考试及格这件事,就是小概率事件,发生的难度大,信息量大;小明考试不及格这件事,就是大概率事件,发生的难度小,信息量小。

信息量的性质:对于独立事件A、B,有 p ( A B ) = p ( A ) p ( B ) p(AB) = p(A)p(B) p(AB)=p(A)p(B)。两个事件同时发生的信息量等于两个事件的信息量相加,有 I ( A B ) = I ( A ) + I ( B ) I(AB) = I(A) + I(B) I(AB)=I(A)+I(B)

信息量公式 I ( x ) = log ⁡ 2 ( 1 p ( x ) ) = − log ⁡ 2 ( p ( x ) ) I(x) = {\log _2}(\frac{1}{{p(x)}}) = - \log {}_2(p(x)) I(x)=log2(p(x)1)=log2(p(x))

这样设计信息量公式的原因是,要满足上面信息量的定义和性质:

  • 概率 p ( x ) p(x) p(x)和信息量 I ( x ) I(x) I(x)是负相关的,所以设计为 1 p ( x ) \frac{1}{{p(x)}} p(x)1

  • 两个事件同时发生的信息量等于两个事件的信息量相加,所以设计为log的形式

I ( A B ) = log ⁡ 2 ( 1 p ( A B ) ) = log ⁡ 2 ( 1 p ( A ) p ( B ) ) = log ⁡ 2 ( 1 p ( A ) ) + log ⁡ 2 ( 1 p ( B ) ) = I ( A ) + I ( B ) I(AB) = {\log _2}(\frac{1}{{p(AB)}}) = {\log _2}(\frac{1}{{p(A)p(B)}}) = {\log _2}(\frac{1}{{p(A)}}) + {\log _2}(\frac{1}{{p(B)}}) = I(A) + I(B) I(AB)=log2(p(AB)1)=log2(p(A)p(B)1)=log2(p(A)1)+log2(p(B)1)=I(A)+I(B)

log以2为底,是转换到二进制下表示复杂度。其实以e为底,以10为底都可以,只不过以2为底更优。

1.3.2 熵

Entropy)表示概率分布的信息量期望: H ( p ) = E ( I ( x ) ) H(p) = E(I(x)) H(p)=E(I(x)),亦可以理解为系统整体的信息量。其中,系统整体由所有可能发生的事件构成。比如抛硬币,抛正面和抛反面就构成一个系统整体。

在这里插入图片描述

熵的公式 H ( p ) = ∑ p i I i p = − ∑ p i log ⁡ 2 ( p i ) H(p) = \sum {{p_i}} I_i^p = - \sum {{p_i}} {\log _2}({p_i}) H(p)=piIip=pilog2(pi)

熵的作用:用来评估概率模型的不确定性程度。不确定性越大,熵越大;不确定性越小,熵越小。

在这里插入图片描述

如上图,左边的图片类似于一个均匀分布,右边的图片类似于一个正态分布。均匀分布中概率都相等,完全不确定哪一个会发生,因此均匀分布的不确定性程度较高;正态分布中,概率的差异明显,因此正态分布的不确定性程度较低。

例子在这里插入图片描述

结论

  • 若概率密度均匀,产生的随机变量的不确定性就更高,则熵的值就更大
  • 若概率密度聚拢,产生的随机变量的不确定性就更低,则熵的纸较小
1.3.3 交叉熵

假设真实概率分布为 p p p,预测概率分布(估计概率分布)为 q q q

交叉熵Cross Entropy)表示预测概率分布 q q q对真实概率分布 p p p的平均信息量的估计。

交叉熵公式 H ( p , q ) = ∑ p i I i q = − ∑ p i log ⁡ 2 ( q i ) H(p,q) = \sum {{p_i}} I_i^q = - \sum {{p_i}} {\log _2}({q_i}) H(p,q)=piIiq=pilog2(qi)

例子

在这里插入图片描述

结论

  • 预估概率分布与真实概率分布越接近,交叉熵越小。

  • 交叉熵的值总是大于熵的值,根据吉布斯不等式。

在这里插入图片描述

1.3.4 相对熵/KL散度

相对熵Relative Entropy)/ KL散度KL Divergence),用于衡量2个概率分布之间的差异。

KL散度公式:(交叉熵减去熵)

D K L ( p ∥ q ) = ∑ p i [ I q − I p ] {D_{KL}}(p\parallel q) = \sum {{p_i}\left[ {{I_q} - {I_p}} \right]} DKL(pq)=pi[IqIp]

= ∑ p i [ log ⁡ 2 ( 1 q i ) − log ⁡ 2 ( 1 p i ) ] = \sum {{p_i}} \left[ {{{\log }_2}(\frac{1}{{{q_i}}}) - {{\log }_2}(\frac{1}{{{p_i}}})} \right] =pi[log2(qi1)log2(pi1)]

= ∑ p i log ⁡ 2 ( 1 q i ) − ∑ p i log ⁡ 2 ( 1 p i ) = \sum {{p_i}} {\log _2}(\frac{1}{{{q_i}}}) - \sum {{p_i}} {\log _2}(\frac{1}{{{p_i}}}) =pilog2(qi1)pilog2(pi1)

= H ( p , q ) − H ( p ) = H(p,q) - H(p) =H(p,q)H(p)

= ∑ p i log ⁡ 2 ( p i q i ) = \sum {{p_i}} {\log _2}(\frac{{{p_i}}}{{{q_i}}}) =pilog2(qipi)

KL散度性质

  • D K L ( p ∥ q ) {D_{KL}}(p\parallel q) DKL(pq) D K L ( q ∥ p ) {D_{KL}}(q\parallel p) DKL(qp)是不一样的, D K L ( p ∥ q ) ≠ D K L ( q ∥ p ) {D_{KL}}(p\parallel q) \ne {D_{KL}}(q\parallel p) DKL(pq)=DKL(qp) D K L ( p ∥ q ) {D_{KL}}(p\parallel q) DKL(pq)表示以 p p p为基准(为真实概率分布),估计概率分布 q q q与真实概率分布 p p p之间的差异; D K L ( q ∥ p ) {D_{KL}}(q\parallel p) DKL(qp)表示以 q q q为基准(为真实概率分布),估计概率分布 p p p与真实概率分布 q q q之间的差异。
  • 由上面介绍的吉布斯不等式可知: D K L ( p ∥ q ) ≥ 0 {D_{KL}}(p\parallel q) \ge 0 DKL(pq)0;当分布 p p p和分布 q q q完全一样时, D K L ( p ∥ q ) = 0 {D_{KL}}(p\parallel q) = 0 DKL(pq)=0
1.3.5 交叉熵损失函数

由上可知,KL散度能够衡量2个概率分布之间的差距,所以我们直接将损失函数定义为KL散度: L o s s = D K L ( p ∥ q ) L{\rm{oss}} = {D_{KL}}(p\parallel q) Loss=DKL(pq),并且我们希望模型的预测分布 p p p与真是分布 q q q完全相同,即: L o s s = D K L ( p ∥ q ) = 0 L{\rm{oss}} = {D_{KL}}(p\parallel q) = 0 Loss=DKL(pq)=0

L o s s = D K L ( p ∥ q ) = H ( p , q ) − H ( p ) = ∑ p i log ⁡ 2 ( 1 q i ) − ∑ p i log ⁡ 2 ( 1 p i ) L{\rm{oss}} = {D_{KL}}(p\parallel q) = H(p,q) - H(p) = \sum {{p_i}} {\log _2}(\frac{1}{{{q_i}}}) - \sum {{p_i}} {\log _2}(\frac{1}{{{p_i}}}) Loss=DKL(pq)=H(p,q)H(p)=pilog2(qi1)pilog2(pi1)

对于分类问题,真实分布是一个单点分布,真实类别的概率为1,其他类别的概率为0,类似如下:

类别class1class2class3class4
概率0010

1.3.6 JS散度

由于KL散度是非对称的, D K L ( p ∥ q ) ≠ D K L ( q ∥ p ) {D_{KL}}(p\parallel q) \ne {D_{KL}}(q\parallel p) DKL(pq)=DKL(qp)JS散度在其基础上,稍作修改,有 D J S ( p ∥ q ) = D J S ( q ∥ p ) {D_{JS}}(p\parallel q) = {D_{JS}}(q\parallel p) DJS(pq)=DJS(qp),成为对称的。

[外链图片转存中...(img-h3C1OYnv-1724950774844)]

1.4 GAN的理论介绍

生成器的输入是一系列的从分布中采样出的向量,生成器就会产生一个比较复杂的分布,我们称之为 P G {P_G} PG。另外我们还有一组原始数据,这些数据会形成另一个分布,我们称之为 P d a t a {P_{data}} Pdata。GAN的训练效果是希望 P G {P_G} PG P d a t a {P_{data}} Pdata尽可能得相似。

在这里插入图片描述

差异Divergence),是衡量两个分布的相似度的一个指标,我在上面学习KL Divergence时,提到“当分布 p p p和分布 q q q完全一样时, D K L ( p ∥ q ) = 0 {D_{KL}}(p\parallel q) = 0 DKL(pq)=0。”。即我们现在要求 P G {P_G} PG P d a t a {P_{data}} Pdata之间的差异越小越好,越小越表明 P G {P_G} PG P d a t a {P_{data}} Pdata相似。上图中,使得 P G {P_G} PG P d a t a {P_{data}} Pdata分布最相似的最优的生成器称为 G ∗ {G^ * } G

然而,训练生成器的过程训练例如卷积神经网络等简单网络非常地像,相比于之前的找一组参数最小化损失函数,我们现在其实也定义了生成器的损失函数,即 P G {P_G} PG P d a t a {P_{data}} Pdata之间的差异。 对于一般的神经网络,其损失函数是可以计算的,但是对于生成器的差异,其中连续的差异例如KL散度和JS散度是很复杂的,在实际离散的数据中,我们或许无法计算其对应的积分。

对于GAN,只要我们知道怎样从 P G {P_G} PG P d a t a {P_{data}} Pdata中采样,就可以计算得到差异,而不需要知道实际的公式,这其中要依靠判别器的力量。我们在训练判别器时,其训练目标是看到真实数据就给它比较高的分数,看到生成的数据就给它比较低的分数。这时,我们希望训练判别器时是最大化其目标函数,该目标函数就写为了下图所示的 V ( G , D ) V(G,D) V(G,D)

在这里插入图片描述

我们希望目标函数 V ( G , D ) V(G,D) V(G,D)越大越好,其中 y y y如果是从 P d a t a {P_{data}} Pdata中采样得到的真实数据,分数就要越大越好,因为 D ( y ) D(y) D(y)大, log ⁡ D ( y ) \log D(y) logD(y)就大;如果是从 P G {P_G} PG采样得到的生成数据,它就要越小越好,因为 D ( y ) D(y) D(y)越小, log ⁡ ( 1 − D ( y ) ) \log (1 - D(y)) log(1D(y))就越大。这个过程在 GAN 提出之初,人们将其写为这样其实还有一个缘由,就是为了让判别器和二分类产生联系,因为这个目标函数本身就是一个交叉熵乘上一个负号。训练一个分类器时的操作就是要最小化交叉熵, 所以当我们最大化目标函数的时候,其实等同于最小化交叉熵,也就是等同于是在训练一个分类器,训练后就等同于是解了这个优化问题。

在这里插入图片描述

上图红框中的 max ⁡ V ( G , D ) \max V(G,D) maxV(G,D)与JS散度有关。如上图,当示蓝色的星星和红色的星星混在一起时,两种分布的差异不大,交叉熵的值大,交叉熵的负值小,也就是 V ( G , D ) V(G,D) V(G,D)小,在最大化 V ( G , D ) V(G,D) V(G,D)时,很难让目标函数 V ( G , D ) V(G,D) V(G,D)达到最大值。但是当两组数据差距很大时,也就是蓝色的星星和红色的星星并没有混在一起,那么分类器就可以轻易地把它们分开,交叉熵的值小,交叉熵的负值大,也就是 V ( G , D ) V(G,D) V(G,D)大,在最大化 V ( G , D ) V(G,D) V(G,D)时,目标函数 V ( G , D ) V(G,D) V(G,D)就可以很大。

将:

在这里插入图片描述

中的Divergence替换为:
在这里插入图片描述

总结

后面会继续重点学习GAN的数学原理,这一节的数学知识较多,需要好好消化一下。

这篇关于机器学习课程学习周报十的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1120190

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

线性代数|机器学习-P36在图中找聚类

文章目录 1. 常见图结构2. 谱聚类 感觉后面几节课的内容跨越太大,需要补充太多的知识点,教授讲得内容跨越较大,一般一节课的内容是书本上的一章节内容,所以看视频比较吃力,需要先预习课本内容后才能够很好的理解教授讲解的知识点。 1. 常见图结构 假设我们有如下图结构: Adjacency Matrix:行和列表示的是节点的位置,A[i,j]表示的第 i 个节点和第 j 个

Node.js学习记录(二)

目录 一、express 1、初识express 2、安装express 3、创建并启动web服务器 4、监听 GET&POST 请求、响应内容给客户端 5、获取URL中携带的查询参数 6、获取URL中动态参数 7、静态资源托管 二、工具nodemon 三、express路由 1、express中路由 2、路由的匹配 3、路由模块化 4、路由模块添加前缀 四、中间件