pytorch-AutoEncoders

目录

  • [1. 监督学习&无监督学习](#1. 监督学习&无监督学习)
    • [1.1 监督学习](#1.1 监督学习)
    • [1.2 无监督学习](#1.2 无监督学习)
    • [1.3 为什么需要无监督学习](#1.3 为什么需要无监督学习)
  • [2. AutoEncoders](#2. AutoEncoders)
  • [3. Auto Encoders loss function](#3. Auto Encoders loss function)
  • [4. PCA VS Auto Encoders](#4. PCA VS Auto Encoders)
  • [5. Auto Encoders的变种](#5. Auto Encoders的变种)
    • [5.1 Denoising Auto Encoders](#5.1 Denoising Auto Encoders)
    • [5.2 Dropout AutoEncoders](#5.2 Dropout AutoEncoders)
    • [5.3 Adversarial AutoEncoders](#5.3 Adversarial AutoEncoders)
    • [5.4 Variational Auto Encoder](#5.4 Variational Auto Encoder)

1. 监督学习&无监督学习

1.1 监督学习

分类和回归都属于监督学习,即数据集需要人的参与,比如:数据标定、分类,因此受人的主观影响较大。

1.2 无监督学习

下图展示了三大机器学习方向的数据量,增强学习最少,其次是监督学习,大部分数据是无标注无监督学习

1.3 为什么需要无监督学习

  • 降维
  • 预处理
    比如:把224x224的数据降维为64x64
  • 可视化
    降维后,进行数据可视化
    https://projector.tensorflow.org/
  • 从无监督数据中发现数据的分布、形态,方便后续train
  • 压缩、去噪、超分辨率

2. AutoEncoders

auto encoder 就是重建自己,它的输入和输出维度相同,如下图:输入和输出都是784,中间都是隐藏层,过程分三步,encoder、code和decode,decode是encode的反过程。code可以看作数据暂存,可升维也可降维,下图处理手写数字识别图片,code降到了2维

3. Auto Encoders loss function

如下图:MSE和cross Entropy loss函数也是适合auto encoder的

cross Entropy用于binary 0,1输入。

4. PCA VS Auto Encoders

大部分数据是非线性的,PCA 属于线性变化,而Auto Encoders得意于神经网络的非线性,因此效果要比PCA更好。

如下图:

5. Auto Encoders的变种

5.1 Denoising Auto Encoders

为了防止像素级重建时,网络记住像素值,通常会在样本数据中增加一些噪声,这样才能记住更高级别的特征。

如下图:可以看出加了噪声后,重建后的效果还是不错的。

5.2 Dropout AutoEncoders

drop是在train的时候,删除掉一些网络连接,以防止over fitting,而在测试的时候又恢复全部网络连接。

如下图:

绿色柱状图标识dropout与loss之间的关系,蓝色标识dropout与accuracy之间的关系,可以看出dropout为0时,全连接loss最小,但是accuracy却不是最大的,说明可能出现了over fitting,dropout=0.2时,accuracy最大,说明dropout在一定程度上防止overfitting

5.3 Adversarial AutoEncoders

AutoEncoders的hidden code数据存在类似下图的一种分布,随着epoch的增加数据越靠近下方,而这种分布并不符合常见的分布形态,所以人为希望均值=0,方差为某个值,使得在生成时,h从[-1,1]属于某种分布,为了解决这个问题,Adversarial 加入一个discriminator网络用来验证真实的z分布是否与z`一致,如果相差不大输出一个real,否则输出一个Fake

5.4 Variational Auto Encoder

VAE = Variational Auto Encoder,变分自编码器。是一种常见的生成模型,属于无监督学习的范畴。它能够学习一个函数/模型,使得输出数据的分布尽可能的逼近原始数据分布,其基本思路是:把一堆真实样本通过编码器网络变换成一个理想的数据分布,然后这个数据分布再传递给一个解码器网络,得到一堆生成样本,生成样本与真实样本足够接近的话,就训练出了一个VAE模型.

下图中的公式,前半部分计算的是重建误差,可以理解为MSE或者是Cross Entropy,而后半部分KL是散度的公式,主要是计算q分布与p分布的相似度。

那么公式的目标就是重建误差越小越好,q和p的分布越接近越好。

下图中1表示pq两种分布,2表示两种分布的重叠程度,重叠度越高,值越低,3表示的KL值,同样是两种分布越接近值越小,反之越大。

下图是计算重建误差max likelihood 公式的两个常用方法,MSE和cross Entropy

计算KL的公式

下图表示VAE的一个过程,AE过程是输入x->h->x值一一对应;VAE是输入->N分布->x,也就说值不是一一对应的了,所以需要在N分布中sample出一个值,变为x->h->x`一一对应。

那么有一个问题是sample操作不可微,所以有个小技巧就是将N(μ,σ 2 ^2 2)分布表达为

使得μ和σ即变得可导,又保留了原来的分布特性,因为不关心ε ,从而忽略掉ε

VAE网络,隐藏层是一个分布,z值从分布中sample得到

AE与VAE的对比,发现VAE还是要好一些

生成模型

VAE学习的是分布,通过从q(h)分布sample不同的h值,就可以做生成模型

下图是通过VAE和GAN生成的二次元图像

相关推荐
Monkey的自我迭代17 分钟前
Python爬虫实战:Requests与Selenium详解
python·网络爬虫
9呀21 分钟前
【人工智能99问】梯度消失、梯度爆炸的定义、后果及规避手段?(7/99)
人工智能
lishaoan7730 分钟前
用TensorFlow进行逻辑回归(四)
人工智能·tensorflow·逻辑回归
nbsaas-boot31 分钟前
AI交互的初期魅力与后期维护挑战
人工智能·交互
小关会打代码1 小时前
Python编程进阶知识之第二课学习网络爬虫(requests)
爬虫·python·学习
柠檬味拥抱1 小时前
基于MCP的一体化AI管线:从模型训练到部署监控的全链路解析
人工智能
t_hj1 小时前
Selector的用法
人工智能·python·tensorflow
期待着20131 小时前
Python 程序无法找到 Oracle 的 64 位客户端库 (libclntsh.so)
python
mortimer2 小时前
为 Index-TTS 打造一个开箱即用的 Windows 整合包:从环境隔离到依赖难题的解决
人工智能·python·github
算家计算2 小时前
今天,OpenAI彻底颠覆AI助手!ChatGPT智能体上线,融合三大AI
人工智能·chatgpt·agent