机器学习_编码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

posted @ 2024-12-13 16:13  kingwzun  阅读(8)  评论(0编辑  收藏  举报