先以一张图说明下
“如果我不能创造,那我并没有理解”----------理查德费曼
我们也许能让机器区分一只猫和一只狗,但是我们未来也许会希望让机器自己画一只猫
Generatvie Models主要有3种,提出的时间都离现在不超过十年,我们先讲解PixelRNN
PixelRNN我们先举个例子,比如我们创建一张图片,我们每次生成一个像素,以3*3为例,我们可以先通过神经网络输入橙色得到深蓝色,然后输入橙色深蓝色得到浅蓝色,如此下去,有人就会说输入维度不固定,怎么实现的呢,其实这就是RNN的效果,我们可以理解成NN但是预留出其他维度空着
如我们机器学习了很多种狗的图片,然后有一张狗遮住了一半,让机器去预测另一半,可能就有下图中的几种(PixelRNN是几种方法里清晰度较高的)
我们在语音上也有其应用,比如我们训练出他可能说的下一个单词,就会形成一段话;影像上也有训练机器看很多视频,给其一定输入,让其生成一段视频
我们用于手写数字的话可能效果不一定太好,比如我们按下图的网址,得到宝可梦的图源,每张是40*40,老师推荐处理成20*20的中间部分,然后根据图片生成宝可梦
由于RGB我们训练出的模型r,g,b给的权重常常比较接近,导致颜色都是近乎灰色的,而实际颜色往往是R,G,B一维大其他两维小,我们就考虑将每一种颜色进行one-hot编码,但是255**3种可能数量太大,于是老师采用了聚类是颜色比较接近的化为一个颜色,最终得到167种颜色
素材可以在如下图网址找到,我们训练后将颜色对应到一定的维度序号,如维度0就是255,255,255白色
我们于是训练好模型后,之前故意留了几个模型没有训练过,然后分别盖住50%,75%得到如下图结果,虽然和实际图不一样,但是机器学习已经很强大了,会一定的配色,还能自己添加上一定想象。总的来说来评估机器生成模型的好坏是很难的
我们之前都是留一部分原图,如果我们什么都不给的话会怎么样呢,我们如果都按照模型的几率给,那我们画多少张图都是一样的,因此我们引入了随机,让其可能选择概率低的,就有了如下的几个自创图
我们之前知道auto-encoder,我们会将一幅图片生成code,再经过解码生成图片使其尽可能相似,然后我们就可以用解码器输入一个随机的code,看看生成的图片
然而auto-encoder生成的图片效果往往都很不好,我们就有了VAE,他是在中间新加了一层结构,如你的code分布是3维的话,我们就用编码器输出2个3维向量,然后和一组正态分布的3维向量计算求得c向量,c就是我们要的code,其中c的表达式如图,我们于是要最小化重构误差,还要最小化右下的式子
我们比如说生成宝可梦,code是10维,如果随机来说,那生成的图片可能无法理解,但是我们可以尝试固定8维,其他2维在其二维空间分布取一些点,看生成的图片,就可以发现每个维度上参数的关系,就像拉杆一样,就可以生成我们想要的宝可梦
下面2张图分别是选取不同的2维调整的结果,还是能看出一定的规律的
我们还可以用于写句子(课上说是写诗,但是我没看出来任何诗的样子),他是训练好模型后,我们将2句话投影到code空间上,然后将2个点等距分割,就会生成一些新的句子