机器学习

307 阅读21分钟

[HW]github.com/ylark1203/M…

2023.04.04

[课程链接 李宏毅教授]www.youtube.com/watch?v=7XZ…

图片.png

不同类型的输入与不同类型的输出 输入可以是:

  1. 一个向量。
    
  2. 一个矩阵。在做图片识别时,其输入往往就是一个矩阵(Matrix)
    
  3. 一个序列。如果要做语音识别、文本翻译,函数的输入就是一个序列。
    
  4. ......
    

输出可以是:

  1. 一个数值(scalar)。此种任务叫做regress(回归)。
    
  2. 一个类别。此种任务叫做classification(分类)。
    
  3. 可以是一段话,或者生成图片
    
  4. ......
    

pre-trained
可以理解为,通过pre-trained,让机器学会做例如图片识别等任务的基本功,这样在做其他任务时,就可以很快学会了。
机器通过学习基本任务(例如学习两张左右翻转的图片是否为同一张图片、学习两张更改过颜色后的图片是否为同一张)后,当有一些真正需要其解的问题,例如分类宝可梦与数码宝贝、分类苹果与橘子,这些真正需要机器解的任务称为downstream tasks(下游任务)。

Pre-trained Model VS Downstream Tasks
如今,开发一款移动应用并不是一件困难的事,可能一个程序员就可以完成某款应用的开发,这是因为真正复杂的事情已经被Android或者iOS做掉了。所以现在在开发一款应用时,不需要从头开发起,不用去考虑应用如何与硬件进行交互因为这些工作已经被操作系统做掉了。

而在self-supervised learning里面,pre-trained model与downstream tasks的关系也是一样。有一个好的pre-trained model就好像有一个好的操作系统,它将困难的任务做掉,当要开发新的任务时,就会变得非常简单。

如今很多人将Pre-trained Model又叫做foundation model(基础模型),在foundation model中一个比较知名的模型叫做BERT

2023.04.04 預測本頻道觀看人數 (上) - 機器學習基本概念簡介

[视频链接 李宏毅教授]www.youtube.com/watch?v=Ye0…

机器学习的步骤:

  1. 写出一个带有未知数的函数
  2. 定义一个名为Loss的函数,L(w,b)
  3. 解一个optimization的problem,找到一组(w,b)使loss最小

2023.04.05 預測本頻道觀看人數 (下) - 深度學習基本概念簡介

图片.png 如果仅仅是线性函数,无论如何变换w和b,都无法画出红色的曲线(Linear Model),显然Linear Model有很大的限制。这种来自于Model的限制称为model bias

图片.png 红色曲线可以由一个constant(常量)加上若干个曲线组成。

图片.pngx1+x_1→+∞时,这时ycy→c
想要直接表示出蓝色曲线可能比较复杂,但可以用另外一条曲线(sigmoid)来逼近它。
通过调整不同的b、w、c就可以生成不同形状的sigmoid function

图片.png
对于最初的linear model,有一个非常大的限制--model的bias。为了减少model的bias,可以写一个更具弹性的含有未知参数的function 图片.png
可以用更多的features去构建function.

图片.png
将这个function扩展成类似于上式更具弹性的function

图片.png

图片.png 整理一下便可以得到r1r_1r2r_2r3r_3的关系,用矩阵和向量表示。

图片.png
再进行整理可以得到

图片.png

图片.png 每更新一次参数叫作一次update,将所有batch都看完一遍叫作一次epoch
在样本数N=10000,batch_size=10的情况下,一个epoch update了多少次参数? 就看一下N包含了几个batch。在N=10000,batch_size=10的情况下,N/batch_size=1000,也就是update了1000次。

图片.png 上图为一个hard sigmoid。

图片.png 上图为一个ReLU(RectifiedLinearUnit)ReLU(Rectified Linear Unit)函数的图像,其数学表述为cmax(0,b+wx1)c·max(0,b+wx_1),即当b+wx1b+wx_1<0时,其图线表示为与x轴重合的直线,当b+wx1b+wx_1>0时,其函数图像为一条斜率为ww的直线。 图片.png 将两个Relu叠起来便可以形成一个hard sigmoid。
那么可不可以用ReLU代替Sigmoid呢?
是可以的。

图片.png 在上式中,(1)式有i个sigmoid,若要用ReLU代替,则要用2i个ReLU来代替。 Sigmoid和ReLU是两个很常见的Activation function(激活函数)

图片.png 很多Layer就叫做Deep,这整套技术叫做Deep Learning.
引入ReLU或者Sigmoid就是为了逼近任何函数。

图片.png 在上图中,可以发现,在2017-2020即看过的资料上的表现4层layer的表现比较好,而在2021年没有看过的资料上三层layer的表现比较好,这种情况称为over fitting。即在看过的资料上表现有变好,而在没有看过的资料上没有变好。

2023.04.06 再探寶可夢、數碼寶貝分類器 — 淺談機器學習原理

[课程链接 李宏毅教授]www.youtube.com/watch?v=_j9…

2023.04.07 為什麼用了驗證集 (validation set) 結果卻還是過擬合(overfitting)了呢?

www.youtube.com/watch?v=xQX…

当机器学习模型出现过拟合现象时,通常会表现出以下几个特征:

  1. 训练集准确度高,测试集准确度低:过拟合的模型在训练数据上表现很好,准确度较高,但在未见过的测试数据上表现不佳,准确度较低。这表明模型无法泛化到新的数据样本。

  2. 训练误差较低,测试误差较高:过拟合的模型在训练数据上的误差非常低,但在测试数据上的误差较高。这表示模型过度拟合了训练数据的噪声和细节,而无法对新数据进行准确的预测。

  3. 模型复杂度高:过拟合的模型通常具有较高的复杂度,例如,神经网络中的大量隐藏层和神经元,或者决策树中的深度过大。这使得模型过于灵活,能够在训练数据上几乎完美地拟合,但泛化能力较差。

  4. 参数估计不稳定:过拟合的模型的参数估计可能会出现不稳定的情况。微小的变动或噪声可能导致模型参数的大幅度变化,因为模型试图尽可能地拟合训练数据中的每一个样本。

  5. 高方差:过拟合的模型在训练数据中可能表现出很高的方差。这意味着模型对训练数据的变化和噪声非常敏感,导致模型在不同的训练集上可能得到不同的结果。

当观察到这些表现时,很可能存在过拟合问题。解决过拟合的关键是通过调整模型复杂度、增加训练数据、使用正则化等方法来平衡模型的拟合能力和泛化能力,以达到更好的性能。

以下是导致过拟合的一些常见原因:

  1. 模型复杂度过高:当模型的复杂度过高时,它可以在训练数据上几乎完美地拟合所有样本,包括噪声和异常值。然而,这种过度拟合的模型在面对未见过的数据时往往无法泛化,导致性能下降。

  2. 数据不足:如果训练数据集规模太小,模型可能会过于依赖于这些有限的样本,而无法学到更广泛的模式和规律。在这种情况下,模型可能会过度拟合训练数据的细节,而无法对新数据进行准确的预测。

  3. 特征选择不当:选择不恰当的特征或特征提取方法可能导致过拟合。如果特征过于复杂或包含了过多的噪声信息,模型可能会过度拟合这些特征的细节,而无法进行泛化。

  4. 过度训练:训练模型的过程中,如果训练次数过多或迭代次数过高,模型可能会过度拟合训练数据,因为它过于关注训练数据的细微变化,而不是学习到普遍的模式。

  5. 数据不平衡:如果数据集中某些类别的样本数量远远多于其他类别,模型可能会倾向于过度拟合这些主要类别,而对少数类别的样本预测效果较差。

以下是一些常见的方法来解决机器学习模型过拟合问题:

  1. 增加训练数据:增加更多的训练样本可以减少模型对有限数据的过度拟合。更多的数据有助于模型更好地学习数据的普遍规律。

  2. 简化模型:减少模型的复杂度可以降低过拟合的风险。可以考虑减少模型的层数、减少神经元数量(对于神经网络),或者使用更简单的模型(如线性模型)。

  3. 正则化(Regularization):通过在损失函数中引入正则化项,可以惩罚模型的复杂度,促使模型更倾向于学习简单的模式。常见的正则化技术包括L1正则化和L2正则化。

  4. 交叉验证(Cross-validation):使用交叉验证技术来评估模型的性能。交叉验证可以帮助评估模型在未见过的数据上的泛化能力,从而检测和避免过拟合。

  5. 特征选择和特征提取:选择最相关和最具有代表性的特征,可以减少模型对噪声和不相关特征的拟合程度。可以使用特征选择算法、主成分分析(PCA)等方法来进行特征选择和提取。

  6. 提前停止(Early stopping):在训练过程中,通过监控模型在验证集上的性能,当性能不再提升或开始下降时,停止训练,避免过度拟合。

  7. Dropout:对于神经网络模型,使用Dropout技术可以随机地将一些神经元的输出设置为零,从而减少模型对特定神经元的依赖,降低过拟合的风险。

  8. 数据增强(Data augmentation):通过对训练数据进行一系列随机变换(如旋转、平移、缩放等),生成更多的训练样本,可以帮助模型更好地泛化。

  9. 集成学习(Ensemble Learning):使用多个不同的模型进行集成,可以减少过拟合的风险。常见的集成学习方法包括Bagging、Boosting和随机森林。

这些方法可以单独或结合使用,根据具体情况选择最适合的策略来解决过拟合问题。

2023.05.16 生成式對抗網路 (Generative Adversarial Network, GAN) (二) – 理論介紹與WGAN

机器学习中的divergence的含义

在机器学习中,差异(Divergence)是一种衡量两个概率分布或概率密度函数之间差异的度量方式。它可以用来比较模型生成的概率分布与真实概率分布之间的差异,或者用于衡量两个模型之间的相似性或差异。

常见的差异度量包括:

  1. Kullback-Leibler 散度(Kullback-Leibler Divergence):也称为相对熵(Relative Entropy),衡量一个概率分布相对于另一个概率分布的信息损失。KL散度可以用来比较模型生成的概率分布与真实概率分布之间的差异。
  2. Jensen-Shannon 散度(Jensen-Shannon Divergence):是KL散度的一种变体,用于衡量两个概率分布之间的相似性。它是KL散度的对称平均,并且总是非负的。
  3. Earth Mover's Distance(EMD):也称为Wasserstein距离,衡量将一个概率分布转换为另一个概率分布所需的最小代价。EMD可以用于比较两个概率分布之间的差异,特别适用于处理连续分布。

这些差异度量可以用于模型评估、生成模型训练、聚类分析等任务中。通过计算概率分布之间的差异,我们可以量化模型预测与真实数据之间的差异,或者比较不同模型之间的性能差异。

需要注意的是,差异度量通常不是距离度量,因为它们不满足对称性和三角不等式。然而,它们仍然是有用的工具,可以提供关于概率分布之间的差异程度的有用信息。

JS Divergence VS Wasserstein Distance

如果两个分布没有重叠,那么其JS Divergence恒等于log2,这就导致无法判断两个模型的好坏,可能一样好,也可能一样差。所以用Wasserstein Distance来代替JS Divergence

如果两个分布没有重叠,即它们的支撑集(support)没有交集,那么它们的Jensen-Shannon(JS)散度将等于log2。

Jensen-Shannon散度是通过KL散度定义的,计算两个概率分布的平均散度。具体而言,假设P和Q是两个概率分布,它们的JS散度可以通过以下公式计算:

JS(P, Q) = 0.5 * KL(P || M) + 0.5 * KL(Q || M)

其中,M = 0.5 * (P + Q) 是P和Q的平均分布。

当P和Q没有重叠时,即它们的支撑集没有交集,KL(P || M) 和 KL(Q || M) 的值将无穷大,因为存在某些事件在一个分布中的概率为0而在另一个分布中的概率大于0。在这种情况下,JS(P, Q) 将被定义为log2,因为无穷大乘以0.5等于无穷大。

因此,当两个分布没有重叠时,JS散度将恒等于log2。这意味着它们之间的差异程度最大。值得注意的是,JS散度的取值范围是[0, log2],当两个分布完全相同时,JS散度为0。

WGAN(Wasserstein GAN)是对原始的生成对抗网络(GAN)的改进和扩展。它引入了Wasserstein距离作为生成器和判别器之间的损失函数,以解决传统GAN中存在的一些问题。

WGAN与传统GAN(简称为GAN)之间的区别和联系:

WGAN(Wasserstein GAN)是对原始的生成对抗网络(GAN)的改进和扩展。它引入了Wasserstein距离作为生成器和判别器之间的损失函数,以解决传统GAN中存在的一些问题。

  1. 目标函数的不同:

    • GAN: 传统的GAN使用了Jensen-Shannon散度或KL散度来衡量生成器输出和真实数据分布之间的差异。
    • WGAN: WGAN使用Wasserstein距离来衡量生成器输出和真实数据分布之间的差异。Wasserstein距离更加稳定,并且在一些情况下能够提供更好的梯度信号。
  2. 训练过程的不同:

    • GAN: GAN的训练过程中存在梯度消失和梯度爆炸等问题,很难保持生成器和判别器的平衡。
    • WGAN: WGAN通过使用Wasserstein距离,避免了训练过程中的梯度消失和梯度爆炸问题。它通过限制判别器的Lipschitz连续性来保持生成器和判别器的平衡。
  3. 损失函数的不同:

    • GAN: GAN使用交叉熵损失函数来最小化生成器和判别器之间的差异。
    • WGAN: WGAN使用Wasserstein距离作为判别器的损失函数,从而鼓励判别器能够提供更准确的分数和梯度。
  4. 输出结果的不同:

    • GAN: 传统的GAN在训练过程中生成的样本可能存在模式塌陷(mode collapse)的问题,即生成器只能生成有限种类的样本。
    • WGAN: WGAN通过改变损失函数,能够更好地避免模式塌陷问题,生成多样化且更稳定的样本。

总之,WGAN是对传统GAN的改进,引入了Wasserstein距离作为损失函数,解决了GAN中的一些问题,如梯度不稳定、模式塌陷等。通过使用Wasserstein距离,WGAN能够提供更好的梯度信号,更稳定地训练生成器和判别器,并生成更多样化的样本。

2023.05.16 生成式對抗網路 (Generative Adversarial Network, GAN) (三) – 生成器效能評估與條件式生成

model collapse与model dropping

模型塌陷(Model Collapse)和模型消失(Model Dropping)是两种与生成对抗网络(GAN)相关的问题。

1. 模型塌陷(Model Collapse): 模型塌陷指的是生成对抗网络(GAN)中生成器(Generator)输出的样本出现缺乏多样性的情况。具体而言,生成器倾向于只生成有限种类的样本,而忽略了真实数据分布中的其他模式。这意味着生成器无法充分捕捉到数据的全局分布,从而限制了模型的生成能力。模型塌陷可能发生在训练过程中,导致生成器无法产生丰富多样的样本。 图片.png 如上图所示,生成的图片(红星)仅分布在某一real data的周围,也就是说生成器“缺乏想象力”,无法生成足够多样性的图片。

2. 模型消失(Model Dropping): 模型消失指的是生成对抗网络(GAN)中判别器(Discriminator)的性能下降或崩溃的现象。在训练过程中,判别器可能出现过拟合,无法准确区分真实样本和生成样本。这会导致判别器的输出不再有意义,从而使训练失去方向性和稳定性。模型消失可能导致生成器无法得到有效的反馈信号,使其无法学习和提高生成样本的质量。 图片.png 如上图所示,发生模型消失现象后,生成器生成的图片的多样性是足够的,但当生成器仅对已生成的fake image进行调色、左右翻转等操作后,依然能够通过判别器的判别。

解决这些问题的方法包括:

  • 模型塌陷:使用合适的损失函数,例如Wasserstein GAN(WGAN)或改进的GAN架构,以增加生成样本的多样性。此外,还可以通过增加噪声输入、使用正则化技术(如批次归一化和正则化项)等方法来提高生成器的多样性。
  • 模型消失:采用更稳定的架构和训练策略,例如深层卷积生成对抗网络(DCGAN)、谱归一化(Spectral Normalization)和渐进训练等。这些方法有助于缓解模型消失问题,使判别器能够提供有意义的反馈信号。

需要注意的是,模型塌陷和模型消失可能同时存在,而且它们的解决方法并非完全独立。在设计和训练生成对抗网络时,需要综合考虑这些问题,并选择合适的技术和策略来克服它们,以获得更好的生成性能和训练稳定性。

如何判断生成的图片多样性是否足够?

过去有一种方法,借用了image classify的思想,将生成的图片投入到图像分类器中进行分类,则每一张图片都会得到一个分布。观察最终的分类结果。 图片.png 如上图所示的分类结果,大多数图片经过分类后都被认为大量含有class 2的成分,这就说明生成的图片的多样性不够。

图片.png 在上图中,经过分类后每一张图片都被认为是不同的分布,在经过平均后,得到的分布很是平均,这就说明图片的多样性应该是足够的。

FID

FID(Fréchet Inception Distance)是一种用于评估生成对抗网络(GAN)生成图像质量的指标。它基于真实图像和生成图像之间在特征空间中的分布差异度量。

FID是由Martin Heusel等人在2017年提出的。它结合了两个关键元素:Inception网络和Fréchet距离。Inception网络是一个预训练的深度卷积神经网络,用于图像分类任务。它能够提取图像的高级特征表示。Fréchet距离是一种用于度量两个多元正态分布之间差异的距离度量。

FID的计算步骤如下:

  1. 使用预训练的Inception网络将真实图像和生成图像的特征向量提取出来。
  2. 计算真实图像和生成图像特征向量的均值向量(μ)和协方差矩阵(Σ)。
  3. 使用Fréchet距离度量真实图像和生成图像特征向量的分布之间的差异。Fréchet距离考虑了均值向量和协方差矩阵之间的差异。
  4. FID值是真实图像和生成图像之间的Fréchet距离的度量值。

FID值越低,表示生成图像和真实图像在特征空间中的分布越接近,生成图像的质量越好。与其他评估指标相比,FID对于模型塌陷(mode collapse)和样本多样性的评估更具敏感性。

FID已经成为衡量GAN生成质量的重要指标,并被广泛应用于GAN的训练和调优过程中,以便选择和比较不同的生成模型。

Conditional GAN

条件生成对抗网络(Conditional GAN)是生成对抗网络(GAN)的一种扩展形式,它通过在生成器(Generator)和判别器(Discriminator)之间引入条件信息,实现对生成过程的控制。

传统的GAN模型中,生成器的输入是一个随机噪声向量,而判别器则负责判断输入样本是真实样本还是生成样本。条件GAN在此基础上,引入了额外的条件信息(通常是类别标签或其他形式的辅助信息),将其作为输入之一,并要求生成器和判别器能够利用这些条件信息。

条件GAN的结构包括两个关键组件:

1. 条件生成器(Conditional Generator): 条件生成器是生成器的扩展,它接收两个输入:随机噪声向量和条件信息。生成器通过将随机噪声和条件信息进行合并,并将其映射为生成样本。条件信息可以是类别标签、图像描述、文本向量等,它们提供了生成过程中的额外指导和控制。

2. 条件判别器(Conditional Discriminator): 条件判别器是判别器的扩展,它接收两个输入:真实样本和条件信息。判别器通过将真实样本和条件信息进行合并,并评估它们的真实性。条件判别器的任务是判别生成样本的真实性,并根据条件信息对生成样本进行分类。

通过引入条件信息,条件GAN可以生成与给定条件相对应的样本。例如,在图像生成任务中,给定一个类别标签作为条件信息,条件GAN可以生成与该类别相关的图像。这种机制为GAN提供了更大的灵活性和可控性,使得生成器能够生成具有指定特征和属性的样本。

条件GAN的应用非常广泛,包括图像生成、图像转换、图像修复、文本到图像的转换等。它在许多任务中展现了出色的生成性能,并且为生成模型的进一步研究和应用开辟了新的可能性。

以Text-to-Image为例,如何将文字输入到生成器中呢?

以前会用RNN读取文字,然后得到一个向量,再丢入到生成器中。
现在可以将文字丢入到tansformer的encoder中,将encoder输出的向量平均一下然后丢入到生成器中。

图片.png 如果我们想画一个红眼睛的二次元形象,就可以将红眼睛输入到生成器中,每次一都会生成不同的具有红眼睛这一特征的图像,生成哪一副图像则取决于噪声zz图片.png 在训练判别器时不仅仅是将生成器的输出yy作为输入,还会将条件xx作为输入,以此来计算并得到一个数值,以此来评判生成的图片跟输入的条件的关联性。

Conditional GAN除了可以输入文字输出图片,也可以输入图片输出图片。

图片.png 比如可以给生成器房屋的设计图,最终输出房屋的模样、给黑白图片上色、图像去雾、素描转实物等等。

像这样的应用,叫做Image translation,也有人叫做pix2pix 图片.png 以房屋设计图转房屋实际图为例,若用supervised方法来训练,生成的图像可能会比较模糊,原因可能是在训练时同一个输入有着多个输出,所以在最终生成结果时会将这些可能性全结合起来并去一个平均。如果用GAN方法来训练,会得到一个清晰的结果,但GAN过于有“创造力”,会生成一些在输入中不存在的部分。若采用GAN+supervised则会得到一个比较好的结果。