链接:https://www.zhihu.com/question/52311422/answer/130508707
ICLR 2017 的论文实在太多,看了三四天也就看完了一小小部分,所以这个回答会在近期多次更新。 1. GAN 首先如所有答案里几乎都提到的,GAN 确实火得不能再火。在这次 ICLR 2017 全部 GAN 的论文里,我个人觉得主要集中在三个方向: 1.1. 如何提高 GAN 稳定性 GAN 的训练之不稳定,调参之难,也是众所周知的。与不稳定性并存的是 GAN 很容易产生一个叫 missing modes problem,即用 GAN 中的生成网络 G 产生的样本会很容易局限在某些 mode 上,而不够丰富。为了改进这两点,以下四篇论文从不同角度提出了不同的方法: 《Mode Regularized Generative Adversarial Networks》[pdf](http://openreview.net/pdf?id=HJKkY35le) 这篇是我和 @Gerry Che 的工作。主要贡献是提出了两种 regularizers 去提高稳定性和解决 missing modes。这两种 regularizers 可以很方便地用在任何 GAN 网络中(不比如 DCGAN,或者 Goodfellow 原版的 MLP GAN)。 第一个 regularizer 是:与其让生成网络 G 直接从 noise vector z 映射到样本空间,我们可以让 z 从一个样本空间先映射过来,也就是有一个 z = encoder(X) 的过程,从而再,G(encoder(X))。这样的好处是,reconstruction 过程会增加额外的学习信息,使得生成网络生成出来的 fake data(generated sample)不再那样容易被判别网络 D 一下子识别出来。这样 D 和 G 就都能一直有 loss/gradient 去将训练过程较为稳定地进行下去,从而达到了让 GAN 训练更加稳定的效果。另一方面,因为 encoder(X) 保证了 X 和映射后的 X 的空间的对应性,也就可以保证了生成网络能覆盖所有样本空间的样本 modes,也就理论上保证了 missing modes 问题的减少。 第二个 regularizer 是在此基础上,我们提出了一种 manifold-diffusion GAN(MDGAN),它将 reconstruction loss 提取成单独的一步去训练——第一步 manifold step 就是去做 G(Enc(X)) 和 X 的训练,减少这两者之间的差别;第二步 diffusion 就是让 G(Enc(X)) 再和 G(z) 做拉近。这样从模型训练的过程,形象的理解就是,先把两个分布的 “形状” 调整好,再把两个分布的距离拉近。 为了能评价我们的 regularizers 的效果,我们在 inception score 的基础上提出了一种 MODE score。我们发现,Inception score 有一种很不好的现象是,即使 GAN 的网络训练塌了(即会产生完全是噪音,肉眼根本不 perceptual 的图片),inception score 的分数也会很高(很高应该代表的是图片非常像真实样本)。这是不 make sense 的。而我们提出的 MODE score,将塌了的情况用一种额外的 metric 衡量进来——从而使得最终的 MODE score 是基于样本质量和样本 mode(塌了的话,mode 就非常差),两个角度。 《Generative Adversarial Parallelization》[pdf](http://openreview.net/pdf?id=Sk8J83oee) 这篇是很早以前另一篇 GRAN 的工作的后续。它解决稳定性的方法很简单,我个人认为它也和 OpenAI 提出 Inception Score 的那篇论文有关系。在那篇论文里,openAI 团队还提出了一种 minibatch discrimination 的训练方法,也就是在每次让 GAN 的判别网络 D 进行判别时,不要基于单个样本,而是基于一个 minibatch 的一批样本。这样一批样本组成起来,就更加 “robust”。而这篇论文 GAP,它就是说,我们不要让 GAN 每次一个生成网络用一个判别网络来判别,而是同时训练几组 GAN,然后让他们的判别网络 D 们,swap,交替着去判别其他的生成网络 G 的样本。这就很像是 minibatch discrimination 了。就是我们一起学,你可能只见过现象 A(mode A),我见过 mode B,那我见过 mode B 的 D_B 去来判别你只会生成 mode A 的 G_A,这就更容易 robust 了,也更容易不 miss modes。 《Unrolled Generative Adversarial Networks》[pdf](http://openreview.net/pdf?id=BydrOIcle) 这篇论文做的更加理论一点,它们提出了一种新的 loss。这种 loss 并不是通过改变模型 architecture 来引入的,也不是一种新的 metric,而是一种 gradient-based loss。如果说我们过去做 gradient descent trainig 时候,是让 gradient 进行改变,让其他模型参数保持不变的话;那么他们提出的这种 loss,被叫做 surrogate loss,则是要能基于一阶 gradient 改变后的其他模型参数的变化再去改变二阶甚至高阶 gradient——从而是一种 gradient dynamics 信息。这件事其实并不是很常见,因为在我们大部分神经网络和机器学习的训练中,我们都只会用到一阶导数信息。然而,二阶或者高阶导数的出发点其实是我们真正的不 approximate 的求解就应该是不断的 unroll 出 gradient 的或者是 exact solution 的。而这件事就是非常难算的。所以可以认为,这篇论文提出的这种 loss 是一种中间态,tradeoff。所以这篇论文我认为最重要的贡献就是,它指出了也强调了高阶信息在神经网络或者在机器学习中的重要性(主要是神经网络)。顺着这个思路思考下去,应该也能为其他模型和其他任务带来一些新的解决方法。 《Improving Generative Adversarial Networks with Denoising Feature Matching》[pdf](http://openreview.net/pdf?id=S1X7nhsxl) 这篇论文的想法和上一篇 unrolled 有点相似,同时也可以认为是 openAI 那篇论文中(minibatch discrimination 那篇)另一个 trick——feature matching 的延伸和泛化。在之前训练 GAN 中,已经有许多人提出了一些比较 heuristic 的训练方法,或者说 addiitional feature,去帮助稳定和提高效果。其中就有一些是用判别网络 D 学到的 feature 来做辅助,让 G 生成的时候要尽可能去匹配 D 的一些 feature 的统计特征。这个事情其实比较好理解,就是说既然你 D 能通过一些东西(feature)判断我不好,那么我就把你的东西直接抄过来,变成我自己的一种能力,让你不再能(只)利用这个 feature 来判别出我是假的。但是这个事情,在之前都很 heuristic,包括前人的 VAEGAN 也提到了 Dis_l(layer)这种 feature 加入一种新 loss。然后,这篇 ICLR 2017 也指出了一种 gradient 或者说生成网络 G 要去改进的方向。上面那篇 unrolled 是用高阶 gradient 直接指导 G,而这篇论文 denoising 是用 denoising feature matching 来让 G 生成的时候 manifold 更趋向于真实 distribution——而这个 distribution 是通过用 D 学出来的 feature space 来体现的。 《Energy-based Generative Adversarial Networks》[pdf](http://openreview.net/pdf?id=ryh9pmcee) 这个 EBGAN,其实已经放在 arXiv 上有一段时间了。在解决 missing modes 这个问题时,它的方法更加 ad-hoc——用 energy model 来衡量 diversity,然后把这个 diversity metric 加入 loss function。如他们在论文里说的,这种 loss 和 minibatch discrimination 没什么本质区别。 1.2. 用新角度/框架去理解和建模 GAN 《Generative Adversarial Networks as Variational Training of Energy Based Models》[pdf](http://openreview.net/pdf?id=ry7O1ssex) 这篇论文我觉得就是比较好的用 energy model 的框架重新理解和建模 GAN 的工作,发挥了 energy model 的优势。就像 infoGAN 想从信息论的角度去刻画 GAN 一样,这篇论文就想用 energy 来刻画 energy-based GAN(这个是上面介绍的 energy-based GAN 所没有的)。具体的可以看这篇论文里的公式(5)-(7),将 GAN 和用 variational training 建模的 EBM 给联系在了一起。论文还有更多的贡献在 Section 5、6 里,甚至也提出了一种 semi-supervised 的结合方式。我觉得整篇论文给出的用 energy 刻画 GAN,是未来可以继续探索的方向与角度。 1.3. GAN 与 (semi)-supervised 的结合 这方面的论文就太多了。 《Adversarially Learned Inference》[pdf](http://openreview.net/pdf?id=B1ElR4cgg) 《Adversarial Feature Learning》[pdf](http://openreview.net/pdf?id=BJtNZAFgg) 《Multi-view Generative Adversarial Networks》[pdf](http://openreview.net/pdf?id=SJgWQPcxl) 其中前两篇都是有点 bi-directional GAN 的意思,把 latent space 和 data space 的信息一起结合利用。然后第三篇是第二篇的一个后续工作。 《Semi-Supervised Learning with Context-Conditional Generative Adversarial Networks》[pdf](http://openreview.net/pdf?id=BJ--gPcxl) 这篇是关于 conditional GAN 的,是 DCGAN 的作者的工作。 然后再来关于 Domain Adaption 的: 《Unsupervised Cross-Domain Image Generation》[pdf](https://arxiv.org/pdf/1611.02200v1.pdf) 这篇一看图就觉得超有趣!做得效果看起来也很棒! 《Delving into Transferable Adversarial Examples and Black-box Attacks》[pdf](http://openreview.net/pdf?id=Sys6GJqxl) 做得相当 solid,不可不读的一篇论文,会得到很多关于 adversarial examples 的 insights。 2. Attention and Memory 除了已经被很多人提到的 GAN 这个 ICLR 2017 大火的方向,其实 Attention 和 Memory 这俩已经火了两年的方向也还在发展。 《Structured Attention Networks》[pdf](http://openreview.net/pdf?id=HkE0Nvqlg) 这篇绝对是必看中的必看,它将我们经典的 attention mechanism 和他们提出的新的两种(两个 attention layer)统一在一个框架里,使得 attention mechanism 从普通的 soft annonation 变成了既能 internally modeling structure 信息又不破坏 end-to-end training 的新机制。 具体来讲,我们以往的 attention 机制的作用方式是,encoder 端的 input x_1,..., x_n,这个被作者称为 x,decoder 端已经解码产生的序列 y_1, ..., y_n,这个被作者称为 q(query)。那么,attention 机制就可以看做是一个 attention position 基于 x, q 的分布。有了这样一个框架,我们就可以将一系列独立的 z 变成了互相之间有关联,有依赖——从而也就有了 structure 信息的 z 的分布表达——也就是一种 structured attention networks。为了实现这个,作者使用了 CRF 来建模,并给出了两种具体的例子。第一个例子叫,segmentation attention layer,它可以用于选择源句子中的 sub-sequence(而不再是经典 attention 中以 word 为单位了)。它的设计也十分简单直观,就是我们把 z 像 gate 机制一样,变成 z=[z_1, ..., z_n],并且 z_i \in {0,1}。然后,第二个例子,则在这种虽然是 seb-sequence 上但仍然是 continuous、顺序进行的基础上,又改进了一些,被叫做 syntactic attention layer。它的 motivation 是直接去建模我们 NLP 中的语法树结构。这一次,我们要从 z_i 变成 z_{ij},用它来表示一对语法树中的父结点和子结点。用这两种新的 attention layer,作者在多个任务上都取得了比经典 attention layer 更好的结果。 《Hierarchical Memory Networks》[pdf](http://openreview.net/pdf?id=BJ0Ee8cxx) 这篇论文则是将 Memory Networks 改造成了一种 soft attention 和 hard attention 之间的 trade-off。我们都知道,attention mechanism 中的 soft attention 的计算量其实是非常庞大的,hard attention 又不够 stable——分别取其二者之精华后,这篇论文的作者便想出了 hierarchical memory networks(HMN)。HMN 是利用层次化结构,将 soft attention 每次需要计算的量缩小。那么如何 “找到” 这种层次化结构呢?它们提出使用一种叫 Maximum Inner Product Search(MIPS)的方法。MIPS 不仅可以建立这种层次化形式的 memory,还能通过计算这个 maximum inner product 的值,找到和 query 最相关的 memory 子集。最后,因为这种 MIPS 的精确计算也很难,它们又提出了几种近似的计算方法。 《Generating Long and Diverse Responses with Neural Conversation Models》[pdf](http://openreview.net/pdf?id=HJDdiT9gl) 这篇论文我也比较推荐。虽然乍一看 Abstract 会觉得并没有什么新技术(research point),但其实整篇文章对于当前 sequence-to-sequence conversation models 中存在的问题和背后的原因,分析得相当清楚。并且,这篇论文也修改了 attention 机制,使得以前只依赖于 input(source-side) 的 attention 能融合进已经产生的 output(target-side)的信息——所以被他们成为 target-side attention。作者指出,我们经典的 attention 机制在计算的时候,它的 attended pool 只包含了 C,也就是只包含了 source-side encoder 中的信息——这个模型也就只能 attend 这些 candidates(比如说 input words)。这个本来,在机器翻译这种任务上是没问题的,因为毕竟我们的 source sentence 已经包含了我们要产生的全部信息了;但是在对话这种任务上就有问题了。问题是啥呢,我们很多时候,source sentence,也就是用户说的那句话,是不够 informative 的,比较短——这个时候反而是 decoder 中已经产生的 output 可能会对我们更有帮助。于是乎,直接的解决办法就是把 decoder 中已经产生的序列也扔到 attention candidate pool 里去。这样做还有啥好处呢,好处就是我们的 decoder 的 hidden states 就可以少 “记” 一些已经生成的信息了,也就能更好的去做整体的语义建模和表达。 《Sequence to Sequence Transduction with Hard Monotonic Attention》[pdf](http://openreview.net/pdf?id=HkyYqU9lx) 这篇论文的二作是 NLP 里良心出品的 Yoav Goldberg,所以第一时间找来读了。本文设计的 attention mechanism,也和上面那篇 diverse 有相似之处——比如都考虑了 decoder 端已经产生的 input。更独特的是,它融入了一种 hard attention 的思想,使得在 decoder 的过程中,decoder 并不是一直在 output(不是每个 step 都产生输出),而是像被一个 gate 控制一样,有的时候需要输出,有的时候则需要重新修改 attention 值(在 encoder 端进行 move)。这样的好处是,soft attention 是比较依赖于 training data 才能自动学好这种 alignments 的,然而很多时候我们的小语料不存在足够多的能产生好 alignments 的数据 pair——这时候 hard attention 就能发挥出更好的作用了。其实这个关于 gate 的改进方法,很像 RL NTM。那么具体来讲,他们的主要改造其实就在于那个 control mechanism。这个模型不再只由 decoder 的 output 作为唯一 action,而是增加了 encoder 端 hard attention 的第二种 action——step。所以,当在进行 training 的时候,就会在 step/write 两种 action 之间进行交替(不是稳定交替),只由当当前 action 是 write 的时候,output 才会输出;否则,当 action 是 step 的时候,encoder 端的 hard attention head 就会 move 一个位置,并且将新的 encoded representation 计算出来。 未完待续!
本文由zdx3578推荐。