WDK李宏毅学习笔记第十一周02_More about Auto-encoder

2024-02-18 07:32

本文主要是介绍WDK李宏毅学习笔记第十一周02_More about Auto-encoder,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

More about Auto-encoder

文章目录

  • More about Auto-encoder
  • 摘要
  • 1、More than minimizing reconstruction error
    • 1.1 回顾Auto-encoder
    • 1.2 What is good embedding?
    • 1.3 Typical auto-encoder is a special case
  • 2 Squential Data
    • 2.1 Skip thought
    • 2.2 Quick thought
    • 2.3 Contrastive Predictive Coding(CPC)
  • 3、Feature Disentangle
  • 4、Discrete Representation
    • 4.1 One-Hot and Binary
    • 4.2 Vector Quantized Variational Auto-Encoder(VQVAE)
    • 4.3 Seq2seq2seq auto-Embedding
  • 方法
  • 结论与展望


摘要

Auto-encoder是一个很重要的技术,在很多方面都有应用,本章说明了auto-encoder的一些简单变形以及最小化重建误差的一些方法,介绍了用Au-encoder处理有顺序的数据(Skip thought、Quick thought、CPC),最后阐述了将Embedding变得容易解释的几种方法(Feature Disentangle、One-Hot、Binary、VQVAE、Seq2seq2seq auto-Embedding)。

1、More than minimizing reconstruction error

1.1 回顾Auto-encoder

Auto-encoder就是有一个Encoder,向encoder输入一个input,就会得到一个vector(Embedding、Latent Representation、Latent code),通过Decoder又可以还原出input的信息,我们希望最后输出的和输入越接近越好,即最小化重建误差(Reconstruction error)。
在这里插入图片描述

1.2 What is good embedding?

让我们回到一开始的初衷,我们并不是每次都要求输入和输出一样,我们有时也希望得到一个关于input有代表性,解释性强的embedding,例如machine知道看到蓝色的耳机,它就会想到三九而不是其他人。
在这里插入图片描述
而我们如何知道Embedding能否很好的包含输入的特性呢?我们可以用Discriminator,用于判断图片与code是否匹配,Discriminator就是一个分类器,它可以分辨出不同的角色对应的特征。
在这里插入图片描述
我们还可以用Discriminator构建一个Loss Function,用该Loss Function就可以评估一个model的好坏。
在这里插入图片描述

1.3 Typical auto-encoder is a special case

实际上,Discriminator还是可以认为在最小化重建误差。如下图Discriminator接收一个图片和一个vector,vector通过Decoder解码生成一个图片然后和输入图片进行比较,看它们的接近程度计算分数。
在这里插入图片描述

2 Squential Data

2.1 Skip thought

在有序列的数据上,我们也是可以采用上述model的,如下图Skip thought的方法,model经过训练后,Encoder接收一个句子,然后输出句子的上一句和下一句。
在这里插入图片描述

2.2 Quick thought

Quick thought是 Skip thought延申的想法,它不使用Decoder,而是使用一个Classifier,它将当前的句子,下一个句子和一些随机采样的句子作为输入,然后输出当前句子的下一句。
在这里插入图片描述

2.3 Contrastive Predictive Coding(CPC)

CPC也是接收一段序列数据,然后输出下一段数据。如下图:
在这里插入图片描述

3、Feature Disentangle

如何让embedding更容易被解释?经过Encoder得到的Embedding其实包含了很多输入数据的信息,当输入是声音信号时,Embedding可能包含了内容信息、讲话者信息等,如果输入的是一段文字,Embedding就可能包含语法信息、语义信息等。以声音信号为例,假设encoder得到的Embedding是一个100维的向量,它只包含了内容和讲话者身份的两种信息,我们希望能通过训练使得它的前100维代表内容信息,后50维代表讲话者身份信息。
在这里插入图片描述
这个在语言处理方面其实有很大的用处,如下图,我们可以将代表男生身份信息的维度部分与代表女生说话内容信息结合在一起,最后合成代表男生说话的vector。
在这里插入图片描述
如何做呢?我们可以在一般的Encoder-Decoder架构中引入一个Speaker Classifier,它将Embedding的前50维作为输入,来区别说话者的身份信息,我们希望的是Embedding可以骗过Speaker Classifier,这样machine就会为了骗过Speaker Classifier而将说话者的信息存放在后50维。
在这里插入图片描述
另一种方式是用两个Encoder分别输出身份的信息和内容信息,再处理内容信息的Encoder上加一个IN,该IN可以清除身份信息,最后得到的Embedding再组合放入Decoder中。但是该方法还存在问题,就是第2个的Encoder处理得到的Embedding还包含内容信息。
在这里插入图片描述
改进的方法就是在Decoder中加入AdaIN,过滤掉代表身份信息的Embedding中保留的内容信息。
在这里插入图片描述

4、Discrete Representation

4.1 One-Hot and Binary

如果model可以从连续性变量表示转化为离散表示,那会更容易理解,例如:用One-Hot表示,做法简单,只需将连续型变量中最大值的变成1,其他值的取0。还有一种方法就是设置Binary,例如当变量大于0.5取1,小于0.5取0。
在这里插入图片描述
这两个model,binary更好,所需要的内存更小,而且Binary可以处理在训练集中从未出现过的类别。

4.2 Vector Quantized Variational Auto-Encoder(VQVAE)

VQVAE是在Encoder-Decoder架构中引入一个Codebook,Codebook存放了很多经过处理过的Vector,当输入经过encoder处理得到embedding后,会先将embedding与Codebook中的vector比较,将相似性最高的Codebook中的vector丢给Decoder,这样最后得到的Embedding就是我们所期望的。
在这里插入图片描述

4.3 Seq2seq2seq auto-Embedding

Seq2seq2seq auto-Embedding就是说input一篇文章,输出不是向量而是代表一串文字的seq2seq,然后decoder将该串文章吃进去还原出原本的文章。那显然中间的文字就是文章摘要。但是这个model之间training是得不到好的结果的,因为machine并没有学到语法,它很可能会得到我们看不懂的一串文字。
在这里插入图片描述
为了解决该问题,我们可以在该model加入GAN让机器判断word sequence是否是人写的使得其掌握语法。
在这里插入图片描述

方法

  1. 最小化重建误差使用的是Discriminator,Discriminator就是一个分类器,当model输出不是我们期望的值时,Discriminator能够判别处理,用Discriminator就可构建一个Loss function用于给model打分。
  2. Skip thought使用的方法是用Encoder接收一个句子,然后Decoder输出该句子的前一句以及下一句,这样就可以很好的将文章中每一句联系起来。
  3. Quick thought是用Encoder接收多个句子(当前句子、随机采样句子、下一个句子),然后经过分类器处理输出当前句子的下一句。
  4. Feature Disentangle可用的方法有好几个,本质的思想就是让Embedding的对应的维度能有存放其独立对应的信息,比如在Encoder-Decoder中加入Speaker Classifier,逼迫model在学习的时候只能将某些信息放在特定的维度,也可使用多个Encoder再加入过滤器,将一些信息过滤掉,让特定的维度存放特定的信息。
  5. One-Hot使用的是One-Hot编码,该方法占用内存大,且会丢失输入之间联系的信息,Binary的方法是设置Binary,大于Binary的值取1,其他取0,该方法相比One-Hot所占内存更小,且可以正确认识不在训练集的数据。
  6. VQVAE使用的方法是Encoder-Decoder架构中引入Codebook,Codebook中有很多个处理得到的vector,Embedding需要和Codebook中的vector做对比,最后将Codebook中与Embedding相似度最高的vector丢入Decoder。
  7. Seq2seq2seq是专门对有顺序的数据进行处理的,例如在对文章自动写摘要的时候,使用的方法是在Seq2seq2seq架构中引入GAN让model知道正确的语义是怎样的,然后写出和人写的差不多的摘要。

结论与展望

可以将Auto-encoder理解为是一种思想,它可以嵌入到其他一些model中使用,也可以做一些变形以方便处理问题。Discriminator可以很好的处理最小化重建误差问题,且可以构建Loss Function给model打分。Feature Disentangle则可以让Embedding变得可解释的,在处理变声器问题上,该方法很适合。Discrete Representation主要的思想就是将连续型变量离散化,其中设置Binary的方法就明显优于One-Hot的方法,VQVAE可以使得到的Embedding都是我们所期望的,Seq2seq2seq则比较适合处理有顺序的数据。

这篇关于WDK李宏毅学习笔记第十一周02_More about Auto-encoder的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

MySQL 设置AUTO_INCREMENT 无效的问题解决

《MySQL设置AUTO_INCREMENT无效的问题解决》本文主要介绍了MySQL设置AUTO_INCREMENT无效的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录快速设置mysql的auto_increment参数一、修改 AUTO_INCREMENT 的值。

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

重新对Java的类加载器的学习方式

《重新对Java的类加载器的学习方式》:本文主要介绍重新对Java的类加载器的学习方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍1.1、简介1.2、符号引用和直接引用1、符号引用2、直接引用3、符号转直接的过程2、加载流程3、类加载的分类3.1、显示

全解析CSS Grid 的 auto-fill 和 auto-fit 内容自适应

《全解析CSSGrid的auto-fill和auto-fit内容自适应》:本文主要介绍了全解析CSSGrid的auto-fill和auto-fit内容自适应的相关资料,详细内容请阅读本文,希望能对你有所帮助... css  Grid 的 auto-fill 和 auto-fit/* 父元素 */.gri

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen

利用Python快速搭建Markdown笔记发布系统

《利用Python快速搭建Markdown笔记发布系统》这篇文章主要为大家详细介绍了使用Python生态的成熟工具,在30分钟内搭建一个支持Markdown渲染、分类标签、全文搜索的私有化知识发布系统... 目录引言:为什么要自建知识博客一、技术选型:极简主义开发栈二、系统架构设计三、核心代码实现(分步解析

Java进阶学习之如何开启远程调式

《Java进阶学习之如何开启远程调式》Java开发中的远程调试是一项至关重要的技能,特别是在处理生产环境的问题或者协作开发时,:本文主要介绍Java进阶学习之如何开启远程调式的相关资料,需要的朋友... 目录概述Java远程调试的开启与底层原理开启Java远程调试底层原理JVM参数总结&nbsMbKKXJx

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

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

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