博主最近在上李弘毅老师的GAN的课程,所以写一些博客作为笔记,方便以后回忆。bilibili链接: https://www.bilibili.com/video/av24011528/?spm_id_from=333.338.recommend_report.1,课程的相关学习资料的链接为:http://speech.ee.ntu.edu.tw/~tlkagk/courses_MLDS18.html
目录
1 为什么GAN
Yann LeCun 说过,GAN是ML领域近十年最有意思的想法。GAN的强大就不强调了,本文主要介绍下GAN的核心思想。
2 什么是 GAN
所谓GAN,及Generative Adversarial Networks,由两个网络组成,一个是generative network,是生成网络,一个是adversarial network 是判别网络。
以生成一张二次元图片为例,生成网络的输入是一个向量,表示生成图像的各种特征,比如第一个参数的大小表示人物头发的大小,第二个参数的大小表示人物头发的颜色等,输出是生成的图像。
而判别网络,输入是一张图片,判断它是否是真实的,还是生成网络生成的。若是真实的图片,则输出高分,1分,若判断是网络生成的则给低分,0分。
3 GAN 的原理
如图1所示(来源于李弘毅老师第一节课的课件),首先1代生成器生成1带图片,然后训练判别器识别1代假图片与真图片。然后训练生成器得到2代图片(训练过程在后边介绍),然后训练判别器识别2代假图片和真图片,然后依次类推,最终生成器生成接近真实的图片。
图1 生成对抗网络的训练过程示意图
4 GAN 的训练
接下来是训练的过程。
(1)随机生成器和判别器的参数。
(2)随机生成器输入的向量,生成图片,然后以生成的图片和真实图片作为样本,真实图片标签为1,生成图片标签为0,使用监督学习来训练判别网络。
(3)判别网络训练完成后训练生成网络,将生成网络和判别网络连接起来,如图2所示(来源为李弘毅老师第一节课的课件),将判别网络的参数固定,合成网络输出是随机向量,输出是判别网络的输出,将期望输出设定为1进行训练。因为判别网络参数固定,要想输出为1,则生成网络的输出可以认为骗过了判别网络。再执行第(2)步。.
图2 生成网络训练示意图
GAN的算法如图3所示(来源为李弘毅老师第一节课的课件),与上文的描述基本一致。
图3 GAN训练算法
5 其他
李弘毅老师第一节课中还讲了structured learning,Can Genertor learn by itself? Can discriminator generate?还有a little bit theory(这个他课上没讲)。下面简单介绍一下,详细的可以看课件或听课。
structed learning 意思就是输出不仅仅是一个数,而是一个序列,矩阵,图,书等等。
生成网络自己也是可以通过监督学习来学习生成的,只不过由于他的结构限制,是从下到上的,所以缺少大局观像素间的关系较少。课程中以Auto-encoder和(Variational) Auto-encoder为例介绍了一下,反正就是效果不太,生成图像模糊。
判别网络自己也是可以生成的,其实就是解一个式子
其中x为判别网络输入,D(x)为输出。所以使得输出最大的输入即为生成的最佳的图片。只不过个很难解,且目前只有假设判别网络是线性的才能解,当然这大大失去了复杂程度。
当然最好的效果就是生成网络加判别网络,也就是GAN,也可以理解为生成网络就是解了上述的式子。
今天就写到这里。由于第一,二节课都是前两天上的,所以为了赶进度,写的不是很用心,过几天再把第二篇也给补了,以后就一边听课一边写博客,写的仔细一点。李弘毅老师上课很有意思,强烈安利!!
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:李弘毅老师GAN笔记(一),对抗生成网络(GAN)简单介绍 - Python技术站