李宏毅ML lecture-17-18 unsupervised Learning Generation
使用神经网络的生成模型,李老师从三个方面说明。
Component-by-component
从一张图片拿出像素点,顺序输入神经网络,训练预测下一个像素。
练习:
Source of image: http://bulbapedia.bulbagarden.net/wiki/List_of_Pokémon_by_base_stats_(Generation_VI)
如果直接输入RGB颜色值,让模型输出RGB颜色,输出通过sigmod集中在中央,所以颜色不够丰富。
通过把像素颜色换为one-hot编码,让模型输出one-hot编码。
但是RGB三个颜色全部转为one-hot编码数据有
25
6
3
256^3
2563维。
所以先聚类,用少数的颜色转换为167维。
输入到LSTM中。
用宝可梦图片作为例子,分别输入图片的前50%,75%查看网络的效果:
结果十分鬼畜:)
原因就在于很难评判生成结果的好坏。
图像生成—PixelRNN
Ref: Aaron van den Oord, Nal Kalchbrenner, Koray Kavukcuoglu, Pixel Recurrent Neural Networks, arXiv preprint, 2016
语言合成—waveNet
本来是gif图片但是动不了,模型的训练就是把output作为新的input输入到神经网络中。
模型不需要预训练,直接扔进去。
每一个蓝色的点就是声音讯号的一个sample。
这样就合成了一段声音。
Audio: Aaron van den Oord, Sander Dieleman, Heiga Zen, Karen Simonyan, Oriol Vinyals, Alex Graves, Nal Kalchbrenner, Andrew Senior, Koray Kavukcuoglu, WaveNet: A Generative Model for Raw Audio, arXiv preprint, 2016
音像生成
也是同样的原理
Video: Nal Kalchbrenner, Aaron van den Oord, Karen Simonyan, Ivo Danihelka, Oriol Vinyals, Alex Graves, Koray Kavukcuoglu, Video Pixel Networks , arXiv preprint, 2016
VAE (Variational Autoencoders)
Auto-encoder
Auto-encoder将input图片压缩为code,通过Decoder还原为一张图片。
损失函数定义为input和output的不同程度,通过训练完成auto-encoder。
随机给出一些code是不是decoder可以生成一些图片呢?
答案是不能的。生成的图片不make sense。
auto-encoder做的其实就是图片的降维。code之间没有任何关系。只有特定的code才能产生有意义的图片。
VAE
变分自编码器是优化后的autoencoder。他使得中间code具有了含义。从而通过修改code可以生成有意义的照片。
(国内打不开)https://jaan.io/what-is-variational-autoencoder-vae-tutorial/
tensorflow和pytorch 实现 https://github.com/altosaar/variational-autoencoder
https://zhuanlan.zhihu.com/p/34998569