对抗生成网络模型如下图:
1.分为生成网络G和对抗网络D,对抗网络G是用于生成数据,对抗网络是用语判断真假数据,即判断数据是真实的还是生成的;
2.z是随机生成的隐藏向量,通过生成网络G后得到生成数据G(z);
3.x是原始的数据;
4.首先需要训练一个最佳的对抗网络,有了一个很好的判断真假数据的网络,我们才能确保生成出来的假数据可以以假乱真,所以要最大化对抗网络D的区分度,即达到使得D(G(z))=0和D(x)=1的境界;
5.其次需要训练一个完美的生成网络,由于有了一个最佳的对抗网络,所以生成网络G只需要努力的生产出假数据,使假数据通过生成网络D时能够以假乱真,达到D(G(z))=1的境界。
那么,具体怎么实现呢?先看看那伟大的数学家帮我们推导出来的公式:
公式中,很复杂,将其分为两个模型:
1.对抗模型
对抗模型中,需要尽量满足D1(x)=1,所以上述式子第一个加数尽量为0;需要尽量满足D2(G(z))=0,所以第二个加数尽量也为0。上面的式子,其实只能尽量满足,不能满足的那一部分就作为损失函数,由于计算出来的是负值(log(x)中的x是0~1的时候结果为负),所以在整个式子前面加上负号即可转为正数,这个正数越小越好。
2.生成模型
生成模型中,需要尽量以假乱真,就是使得D2(G(z))=1,所以公式中的结果尽量等于0。不等于的部分,作为损失函数就可以了,同样加上一个负号,即可转为正数,这个正数越小越好。