傻瓜式无限P图,MIT朱俊彦团队“重写”深度生成模型

99封情书 提交于 2020-08-12 14:27:26

  

  作者 | 陈大鑫

  编辑 | 丛末

  复制一位老人的胡子,把胡子粘贴到全部孩子的眉毛上。该如何实现这样的操作呢?

  让我们从塔尖生树的问题说起。

  如何在教堂的塔尖上生成一棵树?——当然是使用P图软件啦!

  

  但是P图软件一次只能修改一张图片,难道就没有那种能一键无限张P图的软件吗?

  近日,来自MIT朱俊彦团队的一篇论文《Rewriting a Deep Generative Model》就很巧妙地 解决了这个问题,目前该论文已被接收为ECCV 2020 Oral,且代码已开源。

  在这篇《重写深度生成模型》论文中,作者不是单独地对一张张图片进行编辑,而是很大胆地提出直接对深度网络的内部生成模型动刀编辑:

  

  在这个规则编辑器中,深度生成模型G(z,w_0) 作为输入,这时模型的初始权重是 w_0,预训练模型G映射一个随机输入向量z到一个真实图像,将权重w_0改成w_1即可产生新的模型作为输出。

  利用现有的模型能产生无限数量的图像,那么改变生成模型的规则就能让我们创造新规则下的无限张可改变图像。如下图所示,通过把塔尖的生成模型重写为“树”,一次操作即可在所有教堂的塔尖上都生成一棵树:

  

  1

  傻瓜式操作

  那这么神奇的重写模型操作起来容易吗,够傻瓜式吗?

  为了让读者更好地亲自编辑模型,作者特意创建了一个用户交互界面,共包含三部分。如下图黄色字体所示,左上角是规则选择器,左下角是目标选择器,右边是图像浏览器。

  

  图像浏览器显示了从StyleGAN v2模型合成的教堂图像的样例:

  

  想要改变模型,就要从规则选择器开始,每次选择一个教堂的塔尖,然后点击 把刚才选择的图像加入context区域:

  

  点击 可以显示刚才选择过的图片,再点击一次则可取消显示:

  

  下一步是指定模型重写规则,作者给用户提供了“复制-粘贴”操作来实现这一点。

  首先是复制(Copy):在图像浏览器右下角选择一棵树,之后点击 ,这样一棵树的模型规则就被复制了:

  

  之后先选择一张图片,点击 进行粘贴,可以看出塔尖已经被替换成了树:

  

  这时说明模型已经被成功复制粘贴了,之后点击交互页面右上方的 ,就可以把“树”的模型规则粘贴到之前选择到context区域的三张图片上面了:

  

  除了能把塔尖变成树之外,重写模型还能把塔尖的锥形变成圆顶:

  

  既然重写模型操作这么方便,不如拿人脸来“开刀”--让人们“强颜欢笑":

  

  再来一张大规模的“多人微笑”:

  

  2

  模型方法

  1、再次认识模型重写

  在介绍具体的模型方法之前我们再来认识一下模型重写,我们可以拿以往的“人工智能训练模式”来做比较。

  虽然训练可以有效地优化全局目标,但它不能直接指定模型内部机制。相比之下,通过模型重写,人们可以直接编辑深层网络的内部规则,而不必训练大数据集,即使这些选择并非恰好匹配现有数据集或优化全局目标。

  因此训练和重写之间的差异就类似于自然选择和基因工程之间的差别。

  但是重写模型具有挑战性,因为有效地执行模型需要人们对网络的内部参数的结构、行为和目的有正确的因果关系的理解,最后作者的论文证明了模型重写是可行的。

  2、与联想记忆的联系

  模型重写方法基于以下假设:生成器的权重充当最优性线性联想记忆(OLAM)。

  OLAM是经典的单层神经数据结构,用于记忆关联,由 Teuvo Kohonen和 James A Anderson(独立地)于1970年代提出。作者假设在一个大型的现代多层卷积网络中,每个单独的层都扮演着OLAM的角色,该OLAM存储了一组规则,这些规则将表示有意义的上下文的键与确定输出的值相关联。

  最优性假设的含义是,单个规则存储在权重内的某个插槽中 ,该插槽对应于由固定的全局键值统计和规则的上下文(key)确定的秩1(rank-one)更新的特定子空间对应的插槽中的权重,而不只是某个数值。

  换句话说,一个规则对应于一行可以自由重写的内存。

  

  因此,要更改规则,首先要确定对应于一个特定规则的内存插槽的子空间方向 d,然后在该方向上进行更改。由于更新方向将对其他规则的干扰降到最低,因此可以大幅更改一个规则以适合用户希望指定的任何目标,而其余模型的行为基本上保持不变,也就是使附带的损失最小。

  3、附带损失最小的改变模型规则

  给定一个预先训练的生成器 , 权重为 ,我们可以合成多个图像 ,其中每个图像由一个潜在编码 生成。假设我们已经为这些情况手动创建了所需更改的 。我们希望找到更新后的权重 ,它能改变计算规则以匹配我们的目标示例 ,同时最小化对其他行为的干扰:

  传统的解决方法是在θ上联合优化L平滑和L约束的加权和,其中 是度量图像之间感知距离的距离度量。

  然而这种标准方法并不能在G中产生一个广义规则,因为大量的参数θ允许生成器在没有良好的泛化的情况下快速地过拟合新样例的出现。

  因此作者提出了两个方法使它变得有效:

  通过在一个特定层修改权重W来减少自由度,而不是修改所有的θ。

  对于目标函数,直接在同一层的输出特征空间中最小化损失距离。

  给定一个层L,我们用k表示G的第一个L1固定层计算的特征,然后用 表示层L本身的计算,预训练权重是 。对于每个潜在样本 ,这些层产生特征 和 。现在假设对于每个目标示例 ,用户手动创建了一个特性更改 。

  优化目标就变为:

  

  其中 表示L2损失,即使在一个层中,权重W也包含很多参数。但是,自由度可以进一步减小,以将变化约束到我们将导出的特定方向;这个额外的方向约束将允许我们从单个 例子中创建一个广义的变化。为了理解这种限制,将单个卷积层解释为联想存储器是很有帮助的,下面简要回顾一下这一经典概念。

  4、将卷积层视为联想存储器

  任何矩阵W都可以用作联想存储器,它存储一组键值对 ,这些键值对可以通过矩阵乘法来检索:

  利用矩阵作为线性联想存储器是神经网络的一个基本思想,例如,如果键 形成一组相互正交的单位范数向量,那么无误差内存可以创建为 。

  当 时,由于 ,当乘以 时,所有不相关的项都会被消除,就会得到 。

  只要选择的 与前面所有键正交,就可以通过向矩阵中添加 来存储新值。 N×M矩阵可以用来存储N×N的关联。

  5、模型整体架构

  

  模型整体可分为a,b,c,d四个部分:

  (a) 生成器由一系列层组成,我们关注一个特定的层L。

  (b) 卷积权重W用于联想存储器,将键k映射到值v。键是单位置输入特征,值是输出特征的模式。

  (c) 一个键将倾向于匹配不同图像中语义相似的上下文。图示为生成图像的位置,这些图像的特征与特定的k非常匹配。

  (d) value值在小区域中渲染形状。在这里,值v的效果是通过渲染一个位置的要素而将其他位置的要素设置为零来可视化的。

  上图将生成器中一个卷积层的权重视为联想存储器:将层视为一个将键与值关联起来的内存,而不是将层视为卷积过滤操作的集合。这里每个键k是一个单一的位置特征向量。

  这个键很有用,因为在训练过的生成器中,同一个键将匹配不同图像中许多语义相似的位置,如上图c所示。与每个键关联,映射存储一个输出值v,该值将呈现输出形状的排列。这个输出可以通过在与相邻位置隔离的情况下呈现特性来直接可视化,如上图d所示。

  例如,考虑使用3×3的卷积核将512通道特征映射转换为256通道特征映射的层;权重形成256×512×3×3张量。对于每个键 ,我们的层将调用一个值 来表示256个通道特征的3×3输出模式,之后平摊到一个向量,如 。我们将层解释为联想记忆并没有改变计算:张量被简单地重塑并处理为一个稠密的矩阵 ,其任务是通过 将key(键) 映射到value(值) 。

  6、更新W以插入新值

  如何修改 ? 假定一个新的 ,现在希望覆盖一个新的键值,经修改后,新矩阵 应满足两个条件:

  也就是说它应该存储新的值,且继续将以前存储的所有值的误差最小化。这就形成了一个约束线性最小二乘(CLS)问题,可以精确地用 来解决。

  等式15中,C是对称的;如果K的平均值为零,C就是协方差。更新值 是一个秩为 1的矩阵,每行都是向量 的倍数。 等式15揭示了更新方向只由总体键值统计信息和特定的目标密钥 决定。协方差C是一个可以预先计算和缓存的模型常数,更新方向由键决定,而不管存储的值是什么。∧规定了每一行变化的幅度,取决于目标值 。

  7、推广到非线性神经层

  实际上,即使是一个单独的网络块也包含几个非线性组件,例如偏移、ReLU、正则化和风格迁移。下面将程序推广到非线性情况下。

  首先定义更新方向: 然后假设有一个非线性神经层 ,它遵循线性运算W,并附加了非线性步骤。 因为等式15对W的行空间敏感, 对列空间不敏感,我们可以用相同的更新形式来约束 的优化。

  因此,在我们的实验中,当我们更新一个层以插入一个新的键k→v*时,我们从现有的w0开始,对由等式15的行向量定义的子空间进行优化。

  也就是说,在非线性情况下通过求解以下优化来更新w1:

  通过 来更新层权重,通过减少 的秩,可以产生更具体的变化。

  其中约束优化问题可以用投影梯度下降法求解,之后:

  然后在每个优化步骤之后,将W投影到子空间 。

  3

  总结和讨论

  我们总结一下“重写生成模型”目前能做的三件事:

  1、删除规则,如下图第二列删除水印。

  2、添加规则,如下图第三列在地面添加人群。

  3、改变规则,如下图第四列把塔尖换成树。

  

  下面是动态过程:

  

  给马戴上帽子!

  

  1、为什么要重写模型?

  要直接重写深度网络有两个原因:

  深入了解深度网络如何组织其知识。

  为了使富有创造力的用户能够快速创建没有现有数据集的新颖模型。

  模型重写构想了一种根据用户意图构建深度网络的方法。重写不仅可以将网络限制为模仿我们已经拥有的数据,还可以使深度网络对遵循用户希望拥有的新规则的世界进行建模。

  2、相关讨论

  机器学习需要数据,那么如何为尚不存在的数据创建有效的模型?由于最近的GANs具有丰富的内部结构,在这篇论文中作者发现通过重写现有网络中的规则来创建这样的模型是可行的。虽然我们可能从未见过树从塔中发芽,但网络包含了树和塔的规则,我们可以轻松地创建一个模型,将这些组合规则连接起来,以合成包含新组合的图像的无尽分布。

  图像域之外复杂生成模型的发展,如GPT-3语言模型和用于音频合成的WaveNet,意味着在其他类型的模型中重写规则也将越来越有吸引力。经过对大量数据集的训练,大规模的深层网络已经被证明能够代表广泛的不同风格、情感和主题。

  模型重写为使用这种结构作为创建新颖内容、行为和交互的富媒体提供了一种途径。

  4

  

  

  项目主页:http://rewriting.csail.mit.edu/

  论文链接:https://arxiv.org/pdf/2007.15646.pdf

  开源代码:https://github.com/davidbau/rewriting

  第一作者 David Bau,麻省理工学院计算机科学与人工智能实验室博士生。 个人主页:

  https://people.csail.mit.edu/davidbau/home/

  共同作者朱俊彦,CycleGAN作者,2020年秋季加入CMU,担任助理教授。

  另外值得说道的是,本次研究也有Adobe研究院参与,Photoshop正是Adobe全家桶旗下的一款产品,或许之后这个一键无限P图的功能会加到PS里!

  最后作者额外提供了在线demo演示:

  https://colab.research.google.com/github/davidbau/rewriting/blob/master/notebooks/rewriting-interface.ipynb

  

  等待几秒钟交互界面就会加载出来,赶紧上手吧!

  

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!