— order: 6 —1 Generative Adversarial Nets1.1 摘要 & 引言 & 相关工作摘要两种写法创新工作(本文):讲清楚自己是谁?拓展工作:和别人的区别、创新提出了一种 framework掂量这个词的份量),即Generator Discriminator𝐺的目标是使𝐷犯错,而非常见的直接拟合数据分布𝐷的目标是分辨输入来自𝐺还是真实数据类似于 minimax two-player game最终希望找到函数空间中的一个解,使𝐺逼近真实数据而𝐷无法分辨使用 MLP –> error backpropagation 训练,无需 Markov chains or unrolled approximate inference networks 近似推理过程的展开引言深度学习不等于深度神经网络,我可以不用 DNN 去近似似然函数,可以有别的方法得到计算上更好的模型𝐺𝐷做了造假者和警察的比喻𝐺的输入是随机噪音(通常为高斯),映射到任意分布。两个模型都是 MLP 所以可以通过反向传递来优化相关工作版本为 NIPS final version不同于 arxiv 早期版本其实基本没写相关工作,可能是因为作者的确是完全自己想毫无参考的,但事实上还是有一定类似工作的学习数据分布,一种想法是直接假定了数据分布是什么然后去学它的参数,另一种想法是直接学习一个模型去近似这个分布(坏处是,即使学会了也不知道究竟是什么分布),后者逐渐成为主流相关工作 VAEs相关工作 NCE (noise-contrastive estimation)相关工作 PM (predictability minimization)GAN 几乎是它的逆向,也是一段趣事易混淆的概念 adversarial examples用于测试算法的稳定性1.2 方法adversarial modeling framework 𝐺𝐷都是 MLP 最简单直白我们设数据为𝒙,其分布为𝑝data(𝑥),并定义一个噪声变量,其分布为𝑝𝑧(𝒛)𝐺学习𝒙上的分布𝑝𝑔=𝐺(𝒛;𝜃𝑔)𝐺为由𝜃𝑔参数化的 MLP 函数,使𝑝𝑔逼近𝑝data定义𝐷(𝒙;𝜃𝑑)𝐷为由𝜃𝑑参数化的 MLP 函数,输出标量表示输入是真实数据的概率(1为真实)定义损失函数和优化目标min𝐺max𝐷𝑉(𝐷,𝐺)=𝔼𝒙𝑝data(𝒙)[log𝐷(𝑥)]+𝔼𝒛𝑝𝑧(𝒛)[log(1𝐷(𝐺(𝒛)))]举一个游戏的例子显示器里一张 4K 分辨率 (800𝑤pixels) 的图片。每一个像素是一个随机向量,由游戏程序𝑝data所控制。𝒙是一个800𝑤维度的多维随机变量𝐺的学习目标:生成和游戏里一样的图片。思考游戏生成图片的方式?4𝐾图片由100个变量控制1.反汇编游戏代码,找到代码生成原理 —— 困难2.放弃底层原理,直接构造一个约100维的向量(这就是这里的𝒛a prior on input), MLP 强行拟合最后图片的样子好处是计算简单,坏处是不真正了解代码。看到一个图片,很难找到对应的𝒛;只能反向操作,随机给一个𝒛,生成一个像样的图片𝐷的学习目标,判断一个图片是不是游戏里生成的𝐷最大化𝑉(𝐷,𝐺)。对完美的𝐷而言,前一项判正,后一项判负,即𝐷(𝒙)=1,𝐷(𝐺(𝒛))=0,上式𝑉(𝐷,𝐺)=0,达到最大𝐺最小化𝑉(𝐷,𝐺)。对完美的𝐺而言,𝐷(𝐺(𝒛))=1,上式𝑉(𝐷,𝐺)=,达到最小伪代码Algorithm 1: 伪代码1for number of training iterations do2for𝑘steps do3Sample minibatch of m noise samples{𝒛(1),...,𝒛(𝑚)}from noise prior pg(z).4Sample minibatch of m examples{𝒙(1),...,𝒙(𝑚)}from data generating distribution𝑝data(𝑥).5Update the discriminator by ascending its stochastic gradient:𝜃𝑑1𝑚𝑚𝑖=1[log𝐷(𝒙(𝑖))+log(1𝐷(𝐺(𝒛(𝑖))))]6end for7Sample minibatch of m noise samples{𝒛(1),...,𝒛(𝑚)}from noise prior𝑝𝑔(𝒛).8Update the generator by descending its stochastic gradient:𝜃𝑑1𝑚𝑚𝑖=1log(1𝐷(𝐺(𝒛(𝑖))))9end for10The gradient-based updates can use any standard gradient-based learning rule. We used momentum in our experiments.GAN 的收敛特别不稳定,因为要确保𝐺𝐷实力相当,这也是后续很多工作的改进方向另外一个小问题是说,一开始判别器𝐷容易训练得特别强大,导致log(1𝐷(𝐺(𝒛)))==0𝐺梯度消失无法学习,可以把𝐺的优化目标暂时改成max𝐺log𝐷(𝐺(𝒛))理论证明1.𝐺固定,𝐷的最优解就是𝐷(𝑥)=𝑝data(𝒙)𝑝data(𝒙)+𝑝𝑔(𝒙)2.𝐺达到全局最优当且仅当𝑝𝑔=𝑝data(使用 KL 散度证明)3.如果𝐺𝐷有足够的容量,并且算法中每一次迭代都让𝐷达到当前最优(但其实不一定有,只迭优化了𝑘步),那么𝐺确保能够收敛到最优(使用泛函分析证明)1.3 实验 & 评价实验结果相对来说不是那么好,但也因此给后人留了很多机会优劣作者 claim 优点是没有看训练数据,因此能够生成比较锐利的边缘(?),但后来大家发现不是这样子缺点是训练困难,不好收敛未来工作1.conditional GAN2.学习到的近似 inference 其实可以用任意模型去蒸馏3.通过训练一组共享参数的条件模型,可以对所有条件进行近似建模4.半监督学习5.效率优化李沐的评价1.无监督学习,无需标注数据。标签和数据来自真实采样 + 生成器拟合2.借助𝐷用有监督的损失函数来训练无监督,相对高效。同时也是自监督学习的灵感来源,i.e. BERT