HELLO WORLD--一起加油(🍺)!|

kingwzun

园龄:3年6个月粉丝:111关注:0

机器学习_编码Embedding

Sparse Coding 稀疏编码

 稀疏编码算法是一种无监督学习方法,它用于寻找一组“超完备基(over-complete bases)”来更高效地表示样本数据。
换句话收,稀疏编码算法的目的就是找到一组基向量Φϕ,使得我们能将输入向量 x 表示为这些基向量的线性组合

“稀疏性(sparsity )”定义为:只有很少的几个非零元素或只有很少的几个远大于零的元素。

原文:https://blog.csdn.net/walilk/article/details/78175912

自编码器auto-encoder

https://blog.csdn.net/StarandTiAmo/article/details/126921918

在自编码器中,有两个神经网络,分别为Encoder和Decoder,其任务分别是:

  • Encoder:将读入的原始数据(图像、文字等)转换为一个向量
  • Decoder:将上述的向量还原成原始数据的形式

image

而目标是希望还原出来的结果能够与原始数据尽可能的接近。其中的向量可称为Embedaing、Representation、Code。而它的主要用处就是将原始数据(高维、复杂)经过Encoder后得到的向量(经过处理,低纬度)作为下游任务的输入。

降噪自编码器Denoising Auto-Encoder

先加噪,再encoder,但是decoder和未加噪的图比较。
image

而如果我们回顾一下之前学习过的BERT,可以发现BERT实际上就是De-noising Auto-encoder,可以看下图:
image

Feature Disentangle and Voice Conversion

Feature Disentangle:
在Auto-encoder中我们将图片、文字、语音等放入Encoder得到的输出向量Embedaing中就包含了这些输入的特征信息,但是一个输入可能存在不同的特征信息,例如一段语音就包含语音的内容、说话者的特征等等,那么有没有可能在Embedaing中将这些特征分别提取出来呢?这就是Feature Disentangle想要实现的事情。
image

者转换这个例子就是学习完模型之后,将A说话的内容用B的声音复述出来作为输出,就好像柯南的领带变声器一般神奇。那么Auto-encoder如何来实现这个任务呢?
实际上这就需要借助Feature Disentangle。首先如果将该任务作为一个监督学习的任务,那我们就需要A和B两个人分别来说同样的句子同样的内容,产生大量的样本从而来进行训练,但是这显然是不可能的!因此如果我们利用Auto-encoder和Feature Disentangle,可以有这样的思路:

  • 训练完Auto-encoder后,将A说话的语音和B说话的语音都输出Encoder得到对应的Embedaing输出
  • 运用特征提取技术,将A和B对应的Embedaing分别提取出说话的内容和语者的特征两部分
  • 再将A说话的特征和B的特征互换,让B的特征和A的内容拼接在一起,这样就实现了用B语者来说出A的内容。
    image

令Embedaing是一段文字

如果天马行空一点,能否让Embedaing是一段文字呢?例如我们给Encoder一篇文章,然后希望它输出一段文字,而Decoder再由这段文字来还原回原来的文章。那么此时这个Embedaing是否可以认为是文章的摘要呢?
image

如果真的将这个想法进行实现会发现:Embedaing虽然确实是一段文字,但是它经常是我们人类看不懂的文字,即在我们看来是毫无逻辑的文字无法作为摘要,但这可以认为是En和De之间发明的暗号,它们用这些文字就可以实现输入和输出的文章都极其相似。

那么如果希望中间的Embedaing是我们能够看得懂的文字,我们可以加上GAN的思想,即加上一个辨别器Discriminator,该辨别器是学习了很多人类写文章的句子,它能够分辨一段文字是否是人类能够理解的逻辑,那么这就会使得En不断地调整自己的输出,希望能够欺骗过辨别器,让它认为是人类写出来的句子,因此Embedaing也就越来越接近于摘要的功能了!
image

异常检测

们如果想要做一个异常检测系统,那我们需要很多的资料来进行训练,而在某些应用场景中很可能我们只有非常多的正常的数据而只有非常少的异常数据,甚至于说有些异常的数据混杂在正常的数据中都分辨不出来,那么这时候Auto-encoder就可以派上用场了!如下图,我们先用正常的数据来训练我们的Auto-encoder,例如正常的数据是人脸:

image
那么训练完成之后,如果你进行检测时输入的也是相似的人脸,那么Auto-encoder就有较大的可能,使得输入与输出之间较为接近,即计算相似度就会较大;但是如果输入不是人脸,例如动漫人物,那么因为Auto-encoder没有看过这样的图片因此很难正确的将其还原,那么再计算输入与输出之间的相似度时就会较小,即:
image

如果你提供了很多的雷丘作为训练数据,皮卡丘就是异常的。如果你提供了很多的皮卡丘作为训练数据,雷丘就是异常的。如果你提供很多的宝可梦作为训练数据,数码宝贝就是异常的。
image

生成器

训练完Auto-encoder后,由于Decoder是接受一个向量,生成一个输出(例如图像),那么就可以认为这个Decoder就是一个生成器,因此可以单独拿出来作为一个生成器使用:
image

机器学习_生成模型

从Auto-Encoder到VAE

VAE指的是Variational Auto-Encoder,这一节就讨论Auto-Encoder与VAE之间的关系。

Auto-Encoder是由encoder和decoder两部分组成,样本经过encoder变成一段code,code再通过decoder变回去,希望输出的结果与样本越接近越好(code往往是比样本有更低的维度)。训练完Auto-Encoder之后,可以把decoder单独拎出来,给decoder输入任意的code,就会得到不同的样本,起到了生成模型的作用。

image

把auto-encoder中的decoder拿出来,随便产生一个vector作为code输入到decoder,得到一张image,这样做performance通常不一定很好,要改用 Variational Autoencoder (VAE)。
VAE的结构:
image

为什么加noise
AE的主要作用为特征提取或数据降维,即寻找合适的抽象特征z,可以使其代表x,如上图左侧,当我们微调z时,无法生成有效的月亮图片。
而右侧的VAE过程,此时z为抽象特征的分布,当微调时,可以得到有效的月亮图片。
image

score based generative model

宋飏博士的 Generative Modeling by Estimating Gradients of Data Distribution

原文:score-based model介绍
通过预测数据分布的对数梯度(即 score 分数)来构建一个生成模型。

在当时,主流的生成模型有两个分支,分别是基于似然的模型(likelihood-based model)和隐式的生成模型(implicit generative model):

  • 基于似然的模型
    直接建模数据分布
    代表方法:VAE、flow-based model
    缺点:由于理论推导上的原因,对网络结构有很大的限制(如 VAE 中间隐变量需为高斯分布,flow-based model 网络结构需可逆)

  • 隐式的生成模型
    间接拟合(如对通过抗训练)数据分布
    代表方法:GAN
    缺点:训练困难,容易崩

本文提出了一种新的生成模型,即 score-based model。该方法首先通过 score-matching 来估计数据的对数梯度(即 score),然后使用基于退火的朗之万动力学的方法来进行采样,进行数据生成。

  • 由于在数据分布比较稀疏的低密度区域,对 score 的估计不是很准,作者提出使用不同强度的高斯噪声对真实数据分布进行扰动,从而提高 score 估计的准确性。

在采样时,作者提出了一种退火的朗之万动力学采样方法,加入强度不断递减的噪声扰动,最终逼近真实的数据分布。

score-based model 改善了之前两类方法的缺点。首先,score-based model 对网络结构基本没有限制,任何图到图的网络都可以,其次,score-based model 也不需要对抗训练,优化形式简洁,训练稳定。

可以将score类别与力,坐标就是场(实际是概率),那么这个score就会沿着machine去力高的地方去带, 带来的问题是只能走向概率最高的地方(力最大的地方),即只能是一个点。

这就需要加入噪声,结果就是在概率高的地方多采样,在概率低的地方少采样,形成一个概率分布,而不是一个点

方法

score-based model 不是直接学习数据的概率分布pθ(x),而是学习 score,即数据分布的对数梯度 xlogpθ(x)

下图分别展示了数据分布的密度,越亮的地方数据密度越高,数据分布的真实 score,和估计的 score,score 是一种梯度,即图中箭头所指的方向。
image

我们接下来围绕之前提到的 score-based model 中的两个核心问题来进行介绍:如何求 score;求得 score 之后如何采样。我们先看第二个问题。

求得 score 之后如何采样

我们先看第二个问题。

假设我们已经能够通过某个模型 sθ(x)
来估计空间中每一个位置的 score(后面会讲究竟如何估计 score),即知道当前位置朝什么方向走能抵达高数据密度区域,那我们就可以按照这个方向走,最终抵达数据分布密集的区域,从而完成采样。具体来说,有如下采样公式:

xi+1xi+ϵlogp(x)+2ϵzi,    i=0,1,...,K
注意其中 zi是一个随机噪声,score-based model 的采样过程是存在随机性的。

解决低密度估计不准

看起来很简单,前提是我们已经能够准确地求 score 了。然而问题是,我们并不能准确地估计 score,至少在低数据密度区域,不够准。

在低数据密度区域,模型 sθ(x) 对于 score 的估计是不准的。而且不幸的是,在整个空间中,高数据密度区域一定是稀疏的。
也就是说,刚开始我们随机一个起始位置,几乎必定是落在低数据密度区域的。那么我们采样初期的几步,几乎就是乱走的,而初期乱走,由于高数据密度区域的稀疏性,基本就不可能走到高数据密度区域了,就会一直在低数据密度区域打转。
未加入扰动预测图
image

为了解决这个问题,使得模型在采样初期,在低数据密度区域,也能够相对较准地估计 score,作者提出对真实数据分布加噪声扰动。在加入噪声扰动之后,数据分布密度较高的位置就会大很多,从而使得模型在前期随机选择的位置,也能够对 score 有较准地估计。极端情况下,如果加的噪声足够大,整个分布几乎成了高斯分布,此时 score 甚至是可以解析的,那么我们当然能准确地求出 score。
加入噪声扰动预测图
image

然而,加入噪声之后,分布还是我们想要的真实数据分布吗?当然不是,如果加入过强的噪声,最终采样出来的也就是一个噪声了。

这里我们就面临一个两难的问题:如果不加噪声,虽然数据分布是真实的,但对 score 的估计不准,造成我们在低密度数据区域乱转;而如果加入噪声过强,虽然对噪声的估计准了,但最终采样不到我们想要的数据分布。因此,我们需要在准确估计 score 和维持原始分布之间进行权衡。

其实权衡思路也很明确,在采样初期,一定落在低密度区域,score 估计极其不准,这时需要加高强度的噪声扰动,使我们能大致按照正确的方向走,而到了采样的后期,我们已经来到中高密度数据区域,此时就要加较小的噪声扰动,使得我们最终能够采样到真实的数据分布附近。

最终,作者提出了如下退火的朗之万动力学的采样算法。在该采样算法中,有两个循环,其中外层循环 i 遍历从 1 到 L,表示不同的噪声级别,级别越高,噪声强度越小;而内层循环 t 从 1 到 T,表示该噪声强度下采样的时间步,总的步数就是 L * T。特别的,如果 T = 1,即在每个噪声强度只采样一步,就类似 DDPM 了。
image

到这里,我们已经回答了问题 (2):求得 score 之后如何进行采样生成。即通过在采样不同阶段添加不同程度的噪声扰动,权衡 score 估计的准确性和数据分布的真实性,依据退火的朗之万动力学采样方法,一步一步逼近真实数据的分布。

当然,这一切都是建立在我们已经能够求 score 的前提下,那么 score-based model 究竟是怎么求 score 的呢?

如何求 score

求 score 的方法就是之前提到的 score-matching.
这里我们套用DDPM的噪声假设,和score-based model 原文的表示略有出入:
xtN(α¯tx0,  (1α¯t)I)
该多元高斯分布的分布函数为:
p(xt)exp{(xtα¯tx0)(xtα¯tx0)2(1α¯t)}
我们要求的 score 是:xlogp(xt)
带入得:
xlogp(xt)=xtα¯tx01α¯t=1α¯tϵ1α¯t

可以看到,我们要估计的 score,与噪声 ϵ实际就差了一个系数。所以说,估计噪声,就相当于估计 score,也就是估计数据分布的对数梯度。DDPM、score-based model 这类扩散模型实际上都是去训练一个去噪网络。

至此,我们就回答了问题 (1):如何估计 score。答案就是训练一个去噪网络。估计噪声,就是估计 score。

理解这两个问题,就理解了 score-based model 的核心思想。

详细计算过程

如何求 score

我们这里讨论的 score 指的是数据分布对数密度的梯度,即 xlogp(xt),它是扩散模型(如 DDPM 和 score-based model)中的核心概念。


基本假设

  1. 噪声假设(DDPM 框架)
    数据 xt 的生成遵循多元高斯分布: xtN(α¯tx0,(1α¯t)I),
    其中:

    • x0 是原始数据。
    • α¯t 是扩散过程中定义的时间相关参数。
  2. 分布函数
    上述分布的概率密度函数为: p(xt)exp{(xtα¯tx0)(xtα¯tx0)2(1α¯t)}.

score

score 的定义是对数据分布 logp(xt) 求梯度:xlogp(xt).

  1. 分布函数的对数形式
    p(xt) 的表达式代入并取对数,有: logp(xt)=(xtα¯tx0)(xtα¯tx0)2(1α¯t)+C,
    其中 C 是与 xt 无关的常数。

  2. xt 求梯度
    logp(xt)xt 的梯度: xlogp(xt)=xtα¯tx01α¯t.

  3. 与噪声的关系
    根据 DDPM 的噪声模型: xt=α¯tx0+1α¯tϵ,
    其中 ϵ 是标准高斯噪声。代入得: xlogp(xt)=1α¯tϵ1α¯t.

结论

  • score 的形式
    xlogp(xt) 与噪声 ϵ 仅相差一个比例系数 1α¯t/(1α¯t)
  • 意义
    • 估计噪声 ϵ 等价于估计 score。
    • 估计 score 实际上是在估计数据分布的对数梯度 xlogp(xt)
  • 扩散模型的本质
    无论是 DDPM 还是 score-based 模型,最终目标都是训练一个去噪网络,用于估计 ϵxlogp(xt),从而重构数据分布。

总结

同为扩散模型。score-based model 在很多地方与 DDPM 非常相近(yang song 后来的文章 也通过 SDE 统一了这两种形式)。通过理解两个关键问题。score-based model 的许多做法似乎有更好的解释性。

如何采样?通过加不同程度的高斯噪声来权衡 score 估计准确性和数据分布真实性。

如何估计 score?估计加入的噪声就是估计 score。

本文作者:kingwzun

本文链接:https://www.cnblogs.com/kingwz/p/18605085

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   kingwzun  阅读(26)  评论(0编辑  收藏  举报
历史上的今天:
2021-12-13 7-5 悄悄关注 (25 分)
2021-12-13 JAVA多线程
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起