今天将和大家一起学习具有很高知名度的SNGAN。之前提出的WGAN虽然性能优越,但是留下一个难以解决的1-Lipschitz问题,SNGAN便是解决该问题的一个优秀方案。我们将先花大量精力介绍矩阵的最大特征值、奇异值,然后给出一个简单例子来说明如何施加1-Lipschitz限制,最后一部分讲述SNGAN。

作者&编辑 | 小米粥

在GAN中,Wasserstein距离比f散度拥有更好的数学性质,它处处连续,几乎处处可导且导数不为0,所以我们更多的使用Wasserstein距离。在上一期的结尾,我们得到critic(判别器)的目标函数为:

本篇所讲的SNGAN便是一种“严格”地解决了判别器1-Lipshcitz约束的方法。

1 最大特征值(奇异值)

我们从矩阵的特征值、奇异值开始说起。在线性代数中,Ax=b表示对向量x做矩阵A对应的线性变换,可以得到变换后的向量b。如果x为矩阵A对应的特征向量,则有:

即对特征向量x做矩阵A对应的线性变换的效果是:向量方向不变,仅长度伸缩λ 倍!比如,对

两个特征值、特征向量分别为:

线性变换作用在特征向量的效果如下:

对于一般向量x,对其线性变换的中间运算过程可以分解为三步。例如对于计算Ax,其中x=[0,1],先将x分解到两个特征向量上:

然后在两个特征向量方向上分别进行伸缩变换,有:

最后再进行简单的向量合成,可有:

一般的,对于非奇异n阶方阵,有n个特征向量和与之对应的特征值,故n阶方阵A对应的线性变换操作其实可以分解成三步:将向量x先分解到n个特征向量对应的方向上(本质是求解x在以特征向量组成的基上的表示),分别进行伸缩变换(在特征向量组成的基上进行伸缩变换),最后进行向量合成(本质是求解得到的新向量在标准基上的表示)。这其实就是在描述熟悉的矩阵特征值分解:

特征值是对应于方阵的情况,将其推广至一般矩阵,便可引出奇异值。奇异值分解形式为:

简单说,特征值分解其实是对线性变换中旋转、缩放两种效应的归并,奇异值分解正是对线性变换的旋转、缩放和投影三种效应的一个析构(当V的维度大于U的维度时存在投影效应)。

说了这么多,其实是为了直观地解释一个问题,对于任意单位向量x,Ax的最大值(这里使用向量的2范数度量值的大小)是多少?显然,x为特征向量v2时其值最大,因为这时的x全部“投影”到伸缩系数最大的特征向量上,而其他单位向量多多少少会在v1方向上分解出一部分,在v1方向上只有2倍的伸缩,不如在v2方向上4倍伸缩的值来的更大。这样,我们可以得到一个非常重要的式子:

其中σ (A)表示A的最大特征值(奇异值),也称为A的谱范数。

2 Lipshcitz限制

所谓Lipshcitz限制,在最简单的一元函数中的形式即:

或者也可以写成:

直观上看,它要求f(x)任意两点之间连线的“斜率”绝对值小于Lipshcitz常数k。在WGAN中要求k=1,1-Lipshcitz限制要求保证了输入的微小变化不会导致输出产生较大变化。我们常见的函数,比如分段线性函数|x|,连续函数sin(x)都显而易见的满足该限制:

我们以一个最简单的例子来展示一下,如何使用谱范数施加1-Lipshcitz限制。考虑f(x)=Wx,其中

显然,f(x)=Wx不满足1-Lipshcitz限制,利用第一部分的结论,考虑到

那么若将W整体缩小4倍,

即可以得到:

可以看出,虽然线性函数f(x)=Wx不满足1-Lipshcitz限制,但是可使用谱范数将W的”缩放大小“限定为小于等于1,(有点类似于向量的归一化操作)这样处理后的f*(x)可以满足1-Lipshcitz限制。接下来,我们将对这条思路进行补充、推广,最后得到SNGAN将是显而易见的事情了。

3 SNGAN

通常在神经网络中的每一层,先进行输入乘权重的线性运算,再将其送入激活函数,由于通常选用ReLU作为激活函数,ReLu激活函数可以用对角方阵D表示,如果Wx的第i维大于0,则D的第i个对角元素为1,否则为0,需要注意D的具体形式与W,x均有关系,但是D的最大奇异值必然是1。

因此,一般而言,即使神经网络的输出是非线性的,但是在x的一个足够小的邻域内,它一个表现为线性函数Wx,W的具体形式与x有关。真实的判别器f(x)的函数图像在比较小的尺度上来看应该是类似这种形式的分段函数:

考虑到对于任意给定的x,均有:

整体标记判别器各层的权值、偏置项:

那么可以得到:

根据:

可得到:

不必像第二部分所描述办法整体求解W的谱范数,充分利用上述不等式,我们只需要计算每层的权值矩阵的最大奇异值,即可完成1-Lipshcitz限制。

综上,有结论:对于任意x

为了严格起见,需要说明,f(x)在x的任意邻域内都满足1-Lipshcitz限制,则f(x)在定义域上满足1-Lipshcitz限制。

其实这里有一个遗留的小问题,如何快速求解超大矩阵A的最大奇异值。在原论文中使用了一种幂方法(power method),随机给两个初始变量,然后令:

则经过数次迭代,便有

我们用求最大特征值的例子来辅助理解一下,A对向量x的线性变换的实质是对x在不同的特征向量方向进行伸缩,由于在不同的特征向量方向进行伸缩的幅度不同,造成的结果是:不断对x做A对应的线性变换,则x的方向不断靠近伸缩幅度最大的特征向量的方向,如下图

则经过足够次数的迭代,得到的新的向量方向与伸缩幅度最大的特征向量的方向重合,故每次迭代结果只差一个常数,即最大特征值。

[1] Yoshida, Yuichi , and T. Miyato . "Spectral Norm Regularization for Improving the Generalizability of Deep Learning." (2017).

[2] Miyato, Takeru , et al. "Spectral Normalization for Generative Adversarial Networks." (2018).

[3]Wasserstein GAN and the Kantorovich-Rubinstein Duality.  https://vincentherrmann.github.io/blog/wasserstein/

总结

这篇文章带领大家一起学习了SNGAN,学习了特征值和奇异值相关问题,学习如何使用谱范数解决1-Lipschitz限制,并推导了SNGAN,最后给出了一个快速求解矩阵最大奇异值的方法。下一期的内容将比较“数学”一点,介绍一个个人非常喜欢的统一理论,它将WGAN和诸多GAN纳入一个框架。

下期预告:IPM与xGAN

GAN群

有三AI建立了一个GAN群,便于有志者相互交流。感兴趣的同学也可以微信搜索xiaozhouguo94,备注"加入有三-GAN群"。

知识星球推荐

有三AI知识星球由言有三维护,内设AI知识汇总,AI书籍,网络结构,看图猜技术,数据集,项目开发,Github推荐,AI1000问八大学习板块。

有三AI知识星球官宣,BAT等大咖等你来撩

【知识星球】千奇百怪的网络结构板块更新到哪里了?

转载文章请后台联系

侵权必究

往期精选

  • 【GAN优化】GAN优化专栏上线,首谈生成模型与GAN基础

  • 【GAN的优化】从KL和JS散度到fGAN

  • 【GAN优化】详解对偶与WGAN

  • 【技术综述】有三说GANs(上)

  • 【模型解读】历数GAN的5大基本结构

  • 【完结】深度学习CV算法工程师从入门到初级面试有多远,大概是25篇文章的距离

  • 【完结】优秀的深度学习从业者都有哪些优秀的习惯

  • 【完结】给新手的12大深度学习开源框架快速入门项目

  • 【完结】总结12大CNN主流模型架构设计思想

  • 【AI不惑境】数据压榨有多狠,人工智能就有多成功

  • 【AI不惑境】网络深度对深度学习模型性能有什么影响?

  • 【AI不惑境】网络的宽度如何影响深度学习模型的性能?

  • 【AI不惑境】学习率和batchsize如何影响模型的性能?

  • 【AI不惑境】残差网络的前世今生与原理

  • 【AI不惑境】移动端高效网络,卷积拆分和分组的精髓

【GAN优化】详解SNGAN(频谱归一化GAN)相关推荐

  1. 【GAN优化】从动力学视角看GAN是一种什么感觉?

    今天讲述的内容是GAN与动力学,这是一个非常好玩.非常新鲜的视角.考虑到很多人微积分和线性代数等知识的涉猎不多,我将会对涉及的内容都做出基本说明,也并不会涉及过深入的东西,然后争取串成一个故事,扩展一 ...

  2. 【GAN】二、原始GAN论文详解

    写在前面 在前面一篇文章:[GAN]一.利用keras实现DCGAN生成手写数字图像中我们利用keras实现了简单的DCGAN,并生成了手写数字图像.程序结果让我们领略了GAN的强大,接下来我们开始一 ...

  3. MySQL之SQL优化详解(二)

    目录 MySQL之SQL优化详解(二) 1. SQL的执行顺序 1.1 手写顺序 1.2 机读顺序 2. 七种join 3. 索引 3.1 索引初探 3.2 索引分类 3.3 建与不建 4. 性能分析 ...

  4. lucene.NET详细使用与优化详解

    lucene.NET详细使用与优化详解 http://www.cnblogs.com/qq4004229/archive/2010/05/21/1741025.html http://www.shan ...

  5. python实现单例模式的几种方式_基于Python中单例模式的几种实现方式及优化详解...

    单例模式 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在.当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场. ...

  6. 高效并发:Synchornized的锁优化详解

    高效并发:Synchornized的锁优化详解 1. HotSpot虚拟机的对象头的内存布局 2. 偏向锁 举一反三:当锁进入偏向状态时,存储hash码的位置被覆盖了,那对象的hash码存储到哪儿的? ...

  7. MySQL-5.5.32 配置文件优化详解

    目录 MySQL-5.5.32 配置文件优化详解 一.配置文件说明 2.my-medium.cnf 3.my-large.cnf 4.my-huge.cnf 5.my-innodb-heavy-4G. ...

  8. 网易考拉海购Dubbok框架优化详解

    网易考拉海购Dubbok框架优化详解 摘要:微服务化是当前电商产品演化的必然趋势,网易考拉海购通过微服务化打破了业务爆发增长的架构瓶颈.本文结合网易考拉海购引用的开源Dubbo框架,分享支持考拉微服务 ...

  9. 快速排序深度优化详解

    正如它的名字所体现,快速排序是在实践中最快的已知排序算法,平均运行时间为O(NlogN),最坏的运行时间为O(N^2).算法的基本思想很简单,然而想要写出一个高效的快速排序算法并不是那么简单.基准的选 ...

最新文章

  1. Mysql中对table的操作问题
  2. Android社招最全面试题,妈妈再也不用担心我找工作了!
  3. 成功解决 ModuleNotFoundError: No module named ‘PyQt5.sip‘
  4. c语言字符数组不写,C语言数组
  5. Windows 文件含义大全
  6. textbox的textmode取为multiline多行时,其maxlength不起作用
  7. el-select传递多个参数_python函数是如何进行参数传递的
  8. 基于javaweb+jsp的员工绩效考核管理系统(JavaWeb JSP MySQL Servlet SSM SpringBoot Bootstrap Ajax)
  9. vue3.0中使用echarts
  10. Kali linux 局域网arp断网攻击
  11. <Zhuuu_ZZ>设计模式—面向接口编程
  12. Excel 去除重复项的几种常用技巧
  13. Python实现猫捉老鼠小游戏!虽然简陋但是童真永在!
  14. 【来日复制粘贴】利用函数公式解决Tricky的不重复记录高亮
  15. 权值衰减和 L2 正则化傻傻分不清楚?
  16. 《微积分:一元函数积分学》——反常积分的计算与敛散性判别
  17. 火炬电阻_火炬神经网络的对抗性攻击和防御
  18. 计算机方面的专业英语,谁有计算机专业英语方面的英语论文?
  19. (两百七十)学习 针对低电耗模式和应用待机模式进行优化
  20. streaming api_XML的Streaming API简介(StAX)

热门文章

  1. 沙雕同事一来公司就把高并发的程序搞崩了,我心态也蹦了!
  2. hibernate教程--快速入门(增删改查)
  3. BigDecimal add方法问题:调用add后,求和结果没变
  4. 【JavaSE_07】Java中类和对象-封装特性
  5. Struts文件上传包含修改文件上传参数,多文件上传
  6. dubbo配置(一)
  7. mysql 时间取日期函数_mysql 获取当前日期函数及时间格式化参数详解
  8. linux c mysql 封装_本人对MYSQL C API做的一个封装,希望对linux C++程序员有点帮助,同时欢迎拍砖!...
  9. 查看linux的用户 7.2,linux下查看用户登入系统相关命令及编写脚本(七)
  10. 电源空间辐射CDN余量低_EMI辐射整改