由极大似然估计理解GAN

一、(概率)生成模型

生成模型,顾名思义它可以生成一些样本。它在训练时更关心数据本身的分布:
P ( Y ∣ X ) = P ( X , Y ) P ( X ) P(Y \mid X) = \frac{P(X,Y)}{P(X)} P(YX)=P(X)P(X,Y)
即公式中的 P ( X , Y ) P(X,Y) P(X,Y),如果得到了这个分布,就可以通过上述公式反向得到条件概率分布。假设说我利用GAN模型得到了 P ( X , Y ) P(X,Y) P(X,Y),那么我给出一些噪音X的情况下,就会生成一个Y。

二、从极大似然估计切入

如果说去预测一个分布的情况,机器学习中有非常多的方法,极大似然估计就是其中一种,给出数据从而去判断生成这个数据最大可能性的分布。虽然说这个分布不一定与真实分布完全吻合,但一定程度上是可以表明数据本身的状态的。

了解似然估计的都知道,在估计参数之前需要知道这批数据是满足什么大体分布的,然后再去估计它的参数。这已经非常违背常识了,很有一种本末倒置的感觉。例如说,我知道抛硬币是符合0-1分布的,所以极大似然估计的是 θ \theta θ,我又知道身高的分布是符合高斯分布的,所以极大似然估计的是 σ \sigma σ μ \mu μ。问题是如果数据非常复杂,我们肯定不知道那个数据是符合什么分布的。

此时就可以引入生成器了。

三、生成器

众所周知神经网络实际上在做拟合任务,拟合成功后得到 y = f ( z ) y = f(z) y=f(z)。这样的映射在参数量大的情况下是复杂的且能力更强大的。 z z z表示输入的数据(原始分布采样来的数据), y y y表示新的分布。

此处使用Generative Adversarial Nets文章中的符号。
当使用MLP模型对 x x x进行拟合时,我们的目的是从x中学习分布去拟合真实的分布 p t p_t pt
首先对输入定义一个噪声先验 p z ( z ) p_z(z) pz(z),这里的噪声先验是采样于Normal Distribution的,这个分布的最重要的目的就是通过采样产生输入的随机性,至于是不是高斯分布并没有特别重要,且也并不能说明我接下来生成的数据是符合高斯分布的,因为我要用神经网络去映射一个新的分布。模型对数据空间的映射表示为 G ( z , θ g ) G(z,\theta_g) G(z,θg)which obey p g p_g pg G ( z , θ g ) G(z,\theta_g) G(z,θg)表示生成器通过 z z z和本身学习到的网络参数可以生成一个东西,这个东西服从一个新的分布 p g p_g pg

值得注意的是 G ( z , θ g ) G(z,\theta_g) G(z,θg)生成的数据确实满足一个分布,但大概率不是真实的分布 p t p_t pt。且我们可以发现,在生成的过程还完全没有真实数据x的参与。

四、判别器

同时,定义另一个MLP去判断某一个数据是真实来自于x背后的分布或由 p g p_g pg生成的虚假数据。这个MLP定义为 D ( g u e s s , θ d ) D(guess,\theta_d) D(guess,θd) D ( g u e s s ) D(guess) D(guess)表示input来自于真正分布的概率。如果判别器性能还不错的情况下, D ( x , θ d ) = 1 D(x,\theta_d) = 1 D(x,θd)=1 D ( G ( z , θ g ) , θ d ) = 0 D(G(z,\theta_g),\theta_d) = 0 D(G(z,θg),θd)=0

训练过程就不进行赘述,如果判别器分不清 g u e s s guess guess来自与真实或是生成时,我们认为G生成的数据就非常符合真实了,此时就可以用G凭空生成一些数据。等到机器学习的功力更深厚时会从数学角度再写一篇。

Generative Adversarial Nets

你可能感兴趣的:(深入浅出系列,生成对抗网络,人工智能)