深度学习

2020机器学习GAN(6)

2020-02-29  本文已影响0人  zidea
naruto_vs_sasuke.png

2 \log \frac{1}{2} + 2JSD(P_{data}||P_G)
我们就是找到一个 G ,这个 G 可以让P_GP_{data}之间的 JSDiv 距离尽量小。

G = \arg \min_{G} Div(P_{data},P_G)
回忆一下我们在 GAN 中任务,就是找到一个可以让 P_{data}P_G 之间距离最小的 G,那么之前Div(P_{data},P_G)这个我们因为不知道 P_{data}P_G形状所以是无法计算的 Div(P_{data},P_G) 的现在可以用 D = \arg \max_D V(D,G) 来计算这个距离。怎么计算的呢,再简单总结一下,就是找到 D 让V(D,G) 最大,这个在这个找到可以让V(D,G) 最大 D 带入到V(D,G) 后的值就是Div(P_{data},P_G)距离。

G = \arg \min_{G} \max_D V(G,D)

001.png

假设现在只有3(G_1,G_2,G_3) 个生成器 图中横坐标表示 D 调整参数后选择不同的 D,纵坐标表示V(G,D)在给定 G 前提条件,也就是固定 G 后哪个一个 D 可以让 V(G,D) 最大(红色点表示)

002.png

然后找一个 G 可以让 \max_D V(G,D) 的值最小,其实这个很简单,经过这个图解,李宏毅老师就巧妙地把这个式子讲清楚了。

003.png

现在我们似乎有点明白了在 GAN 训练中为什么要先后分别固定生成器和判别器然后再更新他们的参数。
初始化生成器和判别器

L(G) = \max_D V(G,D)
也就是找到一个 D 让L(G)的值越大越好。
\theta_G \leftarrow \theta_G - \eta \frac{\partial L(G)}{\partial \theta_G}

f(x) = \max \{ f_1(x),f_2(x),f_3(x) \}
这里可能有点疑问就是在我们目标函数中 \max 那么对于这样损失函数我们应该如何求导。其实也并不难,我们可以将 x 对应最大的f(x)找到,然后就对这个 f(x) 进行求导即可。

上一篇 下一篇

猜你喜欢

热点阅读