no.3-10/31/2018

2020-07-05  本文已影响0人  红豆汤来两大碗

一 引言

上一周,学习的范围比较散,因为觉得只看论文和基础知识会很干,想要提高一下编程的能力。主要有这几件事情:

二 目前进度

Task 1. 学习神经网络基本知识:

image.png

看完这部份感觉就是,源码还是要看的,这对理解网络模型和编程有很帮助,但是细枝末节也不要穷究。现在对怎么程序实现一个网络有了一些了解。

Task 2. 对GAN进一步学习

1. Basic theory of GAN - 2014 paper

图像可以认为是一个高维的Vector,在高维空间中,只有部分区域的图像是“真实”的(可以是样本集 P_data(x)),其他区域形成的图像都不那么“真实”。

image.png

Generator G就是把一个Vector经过G后转化后的向量空间和样本集的向量空间 P_data(x) 越接近越好。

image.png

关键在于怎么计算 Div(P_G, P_Data)

image.png

训练一个Discriminator,其Objective Function是V(G, D)。在训练时,固定G,只调整D的参数,maximize V(G, D) 。

image.png

2. 推导 (对V变形) :

Objective Function:

image.png

对V积分

image.png

由于D(x)可以是任何函数,所以积分的定义相当于对积分项分别取最大。(比如D(x)是一个不连续的函数,然后恰好满足每一项都最大)

image.png

对式子用一定符号表示:

image.png

对上式微分,取极值。且可知这个极值是极大点,不是最小,也不是saddle point鞍点(不稳定极点)。

image.png

代入 D*(x)

image.png

所以最佳D就是 D*(x)

[图片上传中...(image.png-fc3b9d-1593945288472-0)]

当我们在train一个discriminator时,就是在evaluate P_G 和 P_data 的JSD.

V(G, D)就是 P_G 和 P_data 的divergence

image.png

Eg:对于下面三个G来说,G3就是符合条件的 G* 。(G和D应该在更高维,这只是一个便于理解案例)

image.png

下面的演算法就是在解

image.png image.png

3. 算法:

image.png

求解L(G)求gradient descent。对于L(G)中的包含max,其实就是对L(G)的分段函数分别求导即可。

image.png

即对于给定 G_0 ,用gradient ascent找到max V(G, D) ,然后对整体 L(G) 用gradient descent 找到min L(G)

image.png

但是对 G_0 已经找到的 L(G)中 D 取 D_0* 时,V(G_0, D_0* )最大 ,但是当固定 D_0* ,调整G时,V(G_0, D_0* ) 随着G的变化,整个函数也变化了,此时的取值 D_0* 不再是 V(G, D) 的最大值。面对这样的情况,我们认为G的变化时很小的,两个 V(G, D) 变化很小,不会出现下图中G变化后,V(G, D) 的最大值变化很大的问题。就是在train D时应该跑到底,但是对于G就跑比较少(interaction),免得这个假设不成立。

image.png

In practice:

image.png

实际上,GAN中train D的过程就是 max V(G, D) ,就是在量出JSD。Train G的过程就是较少JSD,G不能train太多次,不然D就不能evaluate JSD。

image.png

此外,原作论文中指出,由于G产生的时“不真实“的图片,所以D(x)很小,所以把V进行如下修正。但是实际上两个V都是可以做出来的,并且在此后被命名为MMGAN和NSGAN。

image.png

原作作者有一个猜想是:因为G会产生越来越近似于真实的图像,那么G生成的图像 和真实图像x之间的距离会越来越近,D会越来越难分别,最后D会变得无法区分真实图像,整个坏掉(变成一条直线,所有输入都是真实的图像)。这个理论看起来是合理的,但是实际上在实验中是没有办法train出完全坏掉的D(变成直线)。(这个问题还没有解决)

image.png

二:总结和计划

总结:

黄俊嘉

2018年10月31日

上一篇下一篇

猜你喜欢

热点阅读