对抗性自动编码器系列--有监督对抗自动编码器SAAE的原理及实现-随机数生成想要的数字
Posted Tina姐
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对抗性自动编码器系列--有监督对抗自动编码器SAAE的原理及实现-随机数生成想要的数字相关的知识,希望对你有一定的参考价值。
前言
先来看看实验:
我们使用 MNIST 手写数字,测试通过自动编码器和对抗性自动编码器学习重建恢复效果。
- 原始图像:
- 自动编码器重建效果
- 对抗性自动编码器重建效果
- 有监督对抗性自动编码器重建效果
虽然这里看到,自动编码器和对抗性自动编码器重建出来的能力差不多,有监督对抗性自动编码器基本上重建出来的图像和输入基本对的上。他们的差别有何不同呢,通过之后几章的学习,大家会有体会。
我们学习自动编码器有什么用?
重建图像本身自然是没有任何意义的,但是能把图像重建出来,说明模型学到了输入图像集的分布和特征。
- 提取图像特征,特征我们可以拿来做影像组学。
- 异常检测,图像的分布可以拿来做异常检测。
- 图像去噪,其中可以使用有噪声的图像生成清晰的无噪声图像。
- 语义散列可以使用降维来加快信息检索速度。
- 最近,以对抗方式训练的自动编码器可以用作生成模型(我们稍后会深入探讨)。
具体地, 我们将从以下几部分来介绍:
- 自动编码器重建 MNIST 手写数字
- 对抗性自动编码器重建 MNIST 手写数字
- 监督自动编码器重建 MNIST 手写数字
- 使用自动编码器对 MNIST 进行分类
这是本系列第三个类容:监督对抗性自动编码器
如果你已经阅读了前两部分,你会觉得实施这一部分很简单
监督对抗性自动编码器 SAAE 风格和内容的分离
第 1 部分和第 2 部分主要关注 AE 和 AAE 的入门。我们从一个简单的 AE(原版)开始,对其架构和训练算法进行了一些更改,最终得到了 AAE。这部分通过改变 AAE 的架构以及对其训练方式的微小变化来延续这一趋势。
我们每个人都有自己独特的写作风格,无论是写信还是签名。我们书写某些字符的方式、我们经常用来造句的词,甚至一个人在纸上施加的压力都是定义独特笔迹的特征。
随着所有这些事情的发生,伪造笔迹会变得非常困难和昂贵。让我们尝试从 MNIST 数据集中学习写作风格,并使用它来输出具有相同风格的图像。我们将只关注写作风格,而不关注句子的构架方式或作者经历的思维过程。
要清楚地了解什么是 风格和内容,请查看下图:
每行文本都有相同的内容“Autoencoder”,但风格不同。我们现在的任务是从图像中分离风格和内容。
Autoencoder 和 Adversarial Autoencoder 都是以无监督的方式训练的(训练期间没有使用任何标签)。使用图像的标签信息允许 AAE 专注于学习提取图像中的样式,而无需考虑其内容。利用图像标签使其成为监督模型。
我们实现这一目标所需的架构与我们在第 2 部分中看到的非常相似
在这里,我们不是直接使用 z 作为 Decoder 输入图像,而是把图像标签(y, one-hot形式)和 z 一起作为输入给 Decoder。因此,Decoder 输入有两部分:
- The latent code z from the encoder
- One-hot representation of the image label(y)
除了 Decoder 的输入改成了 y+z (y是one-hot形式,有 10 个数字,就是 10 个神经元,z 假设是 2 个神经元,因此,输入就是 12 个神经元), 其余(训练,损失函数)都同第二部分一样。
通过把标签作为 Decoder 的输入,就可以强迫 Decoder 生成我们想要的数字。
到底能不能像我们想的这样呢?
SAAE 训练结果
AE AAE SAAE 实验对比结果
恢复效果对比
这个对比实验在 前言 就给到大家了。这里,我们在仔细分析一下。
实验过程:我们从测试集随机选取了一个 batch x,通过 Encoder 和 Decoder 得到最后的重建图像 x_hat. 然后我们比较 AE AAE SAAE的恢复效果。
x > encoder > decoder > x_hat
实验结果
原始图像
每个图像上方的label就是数字对应的标签。
AE 结果
AAE 结果
SAAE 结果
对恢复性能的分析:AE 和 AAE 恢复性能差不多,都会有重建错误的图像,AAE 相对好些。但是二者恢复出来的图像都比 SAAE 模糊。而且,SAAE 基本上不会有重建错误的图像。
从随机数重建图像的效果
实验过程: 我们从高斯分布中随机取一个 batch z, 直接给 Decoder 重建出来。
z_guass = torch.randn(128, 2)
z > decoder > x_hat
实验结果
AE 结果
AAE 结果
SAAE 结果
这里的SAAE 是有标签的,因为它的Decoder接收的是 标签和Z。
随机数重建效果的分析:给定一个随机数,AE 和 AAE 可能会重建出任何数字,但是给定一个随机数和一个标签,SAAE 能重建出我们想要的数字。比如,随机数加数字 7 的标签,SAAE 就能重建出 7. 从图像上来看,SAAE 基本都能重建正确。说明有监督的训练确实要强于 AE 和 AAE。
关于第四部分,使用自动编码器对 MNIST 进行分类,就不再讨论了,如果感兴趣,请自学。这一系列到这里就结束了。实践中遇到问题欢迎咨询哦
这部分实验代码
- 文中内容参考
- 原作者 Tensorflow 代码
- Tina 姐的代码
- GitHub上提供了详细的代码说明。
文章持续更新,可以关注微信公众号【医学图像人工智能实战营】获取最新动态,一个关注于医学图像处理领域前沿科技的公众号。坚持已实践为主,手把手带你做项目,打比赛,写论文。凡原创文章皆提供理论讲解,实验代码,实验数据。只有实践才能成长的更快,关注我们,一起学习进步~
我是Tina, 我们下篇博客见~
白天工作晚上写文,呕心沥血
觉得写的不错的话最后,求点赞,评论,收藏。或者一键三连
以上是关于对抗性自动编码器系列--有监督对抗自动编码器SAAE的原理及实现-随机数生成想要的数字的主要内容,如果未能解决你的问题,请参考以下文章
对抗性自动编码器系列--自动编码器AutoEncoder的原理及实现-手写数字的重建