YA

In me the tiger sniffes the rose.

  • 主页
  • 世界之内
  • 世界之外
  • 叶隙随笔
所有文章 友链 关于我

YA

In me the tiger sniffes the rose.

  • 主页
  • 世界之内
  • 世界之外
  • 叶隙随笔

机器学习|Flow-based Model学习笔记

阅读数:24101次 2019-11-06
字数统计: 2.9k字   |   阅读时长≈ 10分

本文简单记录了我在学习Flow-based Model时的笔记,阐述了对模型概念、思路的模糊且不准确的理解。

昨天(11.4)在看ICCV2019的时候,看到一篇使用flow-based generative model来实现虚拟试穿的paper,作者提出了一个模型,只要把你的全身照和衣服的照片丢进模型里,就能生成一张你穿着这件衣服的图像,这个虚拟试穿功能犹如一道惊雷在电商时代炸开。对于我身边很多人来说,之所以还会去线下买衣服,只是因为能够试穿看看效果、试试尺码。但是除了功能上的创新,这篇paper最吸引我的是flow-based generative model,一个我之前从来没有听说过的生成模型。

GAN是目前最火爆的生成模型,基本上每个顶会都有好多篇做GAN的。因为最近我和GAN在一起的时间比较长,对GAN的特性有一个大概、模糊的全局观。日久生情,而又爱屋及乌,这次看到除了GAN、autoencoder之外的生成模型,就很好奇,也很期待。flow到底是什么呢?一查,嚯,不得了,“超越GAN的生成模型”。

熬夜学习了flow的基本知识,也对flow的想法、技巧有了粗略的掌握。这次打算写一篇马马虎虎的学习笔记,主要记录一些思路上、概念上的想法,具体的推算就pass了。毕竟概念和思路最重要,零零碎碎的东西,花时间就能学了。

基本概念

大家都可以理解,一个事物之所以区别于另一个事物,是因为这个事物具有自己的特征,所以对于属于同一类事物的个体们来说,他们虽然各不相同,有的人耳朵大,有的人眼睛小,但是在“人”这个维度上说,都是一模一样的。生成模型为了能够生成一张人脸图像,就得从一大堆(成千上万)的人脸图像中学习到人脸的特征:比如眼睛长什么样子,嘴巴在哪个位置。从统计学上讲,生成模型的本质目的是为了学习一个分布q(x),使得q(x)逼近真实数据的分布p(x)。

基本步骤

任何复杂的事物都是有最简单的成分组成的,我有一个符合某一个分布(高斯分布等)的特征向量z,我就能通过复杂的映射过程g:z→x,投影到一个复杂的空间中。我同样可以使用映射的逆过程,将复杂空间投影到简单空间中f:x→z。其中g=f−1。

img

给定两组数据z和x,其中z服从已知的简单先验分布π(z)(通常是高斯分布),x服从复杂的分布p(x)(即训练数据代表的分布),现在我们想要找到一个变换函数g,它能建立一种z到x的映射g:z→x,使得每对于π(z)中的一个采样点z′,都能在p(x)中有一个(新)样本点x′与之对应。

x=g(z)⇔z=f(x)

如果这个变换函数能找到的话,那么我们就实现了一个生成模型的构造。因为,p(x)中的每一个样本点都代表一张具体的图片,如果我们希望机器画出新图片的话,只需要从π(z)中随机采样一个点,然后通过g:z→x,得到新样本点x,也就是对应的生成的具体图片。

怎么评估分布q(x)与p(x)近似呢?直觉上说,因为所有那些真实数据组成了p(x),所以在p(x)下,N个数据出现的可能性加起来就为1,即:
∫\infin−\infinp(x)dx=1


所以,我们要尽可能地使得使得每一个采样的Xi在经过这个分布后结果之和最大。数学一点,我们要最大化目标函数:
Ex∼˜p(x)[logq(x)]

GAN与VAE

GAN怎么去学习这个分布呢?它们没有去解这个目标函数,因为Goodfellow解不出来。GAN通过Discriminator和Generator来交替训练迭代,使得生成图像越来越像训练图像,既然生成的图像都像训练图像了,那么我们就可以认为q(x)越来越接近p(x)。我认为,GAN的学习是粗暴的模仿,它没有让q(x)变得接近p(x),也就是说它没有去改变本质,而是通过优化生成图像这个外在表现,来拖着q(x)变得像p(x)。q(z)需要被生成图像拖着,在茫茫人海中慢慢靠近p(z),靠近了自然好,但是这个靠近的过程很艰难,而且不准确(两者不能完全相等,只能做到相对近似)。

举个例子,考试的目的是检验同学掌握的情况。为什么不直接去测量同学掌握的情况呢?因为没办法直接去测量,所以只能通过分数,来反映同学掌握知识的情况。自然,一个同学分数越高,可以说他掌握了知识,但是毕竟他的目的是为了提高分数,而不是为了掌握知识,所以很可能出现,他成绩很高,但是其实啥都不知道(当然这种情况很少见)。

VAE的重要概念是变分推断。变分推断简单来说便是需要根据已有数据推断需要的分布P;当不P容易表达,不能直接求解时,可以尝试用变分推断的方法。即,寻找容易表达和求解的分布Q,当Q和的P差距很小的时候,Q就可以作为P的近似分布代替P。VAE怎么学习这个分布呢?衡量两个分布的相似程度的一种标准便是KL散度,KL的值越小表示两种分布越相似。什么时候最小呢?只要KL便是最小,这个条件看似说明了一切,但是我们只知道Q不知道P的分布啊,没法确定两者是否为0。通过变分推断(使得ELBO最大化的这种间接的方式)从而使得KL散度尽可能的小。它也没有优化目标函数,同样用了一种暴力的方法:通过计算KL散度来近似计算两个分布的距离,但由于无法确知目标分布的特性,实际上只能依靠mean和variance来计算两者之间的分布差异性的下限。所以VAE只能近似,而不能完全相似,因此生成图像的质量不高。

之前VAE的支持者酸酸地说,虽然我们VAE生成的图像烂,但是人家能encoder图像,输出一个图像的隐空间特征,相当于发现了图像的内在表征,我们就可以试图通过改变表征来控制生成图像的内容,而GAN就只是生成图像的傻大个,控制不了生成的内容。但是BiGAN的提出彻底把VAE的最后一个优点打破了:BiGAN加入了encoder模块,GAN也能学习图像内在表征了。

Flow

VAE和GAN的能力强,但都是死记硬背。GAN通过博弈,让q(x)无限逼近p(x),但是非常不优雅。VAE则通过优化KL散度上界来训练q(x)慢慢靠近p(x)。

Flow可以说既直接,又委婉。说flow直接,是因为它从本质入手,直接去解目标函数(2),而不是像GAN一样拐弯抹角地要通过生成图像来优化。说flow委婉,是因为这个目标函数是解不出来的,但是它用了非常秒的trick,把这个目标函数改得可解了。

一种不同于 VAE 和 GAN 的生成模型——flow 模型徐徐揭开了面纱,它通过巧妙的构造,让我们能直接去拟合概率分布本身。

我们通常将q(z)作为一个高斯分布:
q(z)=1(2π)D/2exp(−12‖z‖2) 


因为x到z的映射为f:x→z,所以上式可以变为:
q(x)=1(2π)D/2exp(−12‖f(x)‖2)|det[∂f∂x]|tag4

看到这里多出了一个行列式|det[∂f∂x]|,这个行列式叫雅克比行列式(Jacobian),在n维欧几里得空间中,行列式描述的是一个线性变换对“体积”所造成的影响,而 Jacobian 也是如此,它描绘了一个比例关系:对于非线性映射来说,但其微元变换实际上可以看做是线性的,因此雅可比行列式实际意义就是坐标系变换后单位微元的比率或倍数。

进一步变换式 (4):
logq(x)=−D2log(2π)−12‖f(x)‖2+log|det[∂f∂x]|


我们的目的就是求出f(x),最大化下式:
$$
\mathbb{E}{\boldsymbol{x}\sim \tilde{p}(\boldsymbol{x})} \big[-\log q(\boldsymbol{x})\big] = \mathbb{E}{\boldsymbol{x}\sim \tilde{p}(\boldsymbol{x})} \big[\frac{D}{2}\log (2\pi) +\frac{1}{2}\big\Vert \boldsymbol{f}(\boldsymbol{x})\big\Vert^2 - \log \left|\det\left[\frac{\partial \boldsymbol{f}}{\partial \boldsymbol{x}}\right]\right|\tag{5}\big]
$$
乍一眼看,这就是一个很简单的优化问题,用反向传播算法优化神经网络就可以了。但是仔细一瞧,最右边多了一项:$\log |\det[\frac{\partial \boldsymbol{f}}{\partial \boldsymbol{x}}]|$ ,没那么简单,这个优化有两个要求

  1. Jacobian容易计算;
  2. f(x)可逆,且容易计算。

两个要求,都提出了一个问题:如何设计f(x)?

这就是Flow的厉害之处,也是它的核心。为了满足上述要求,Flow-based Model采用了一种称为耦合层(Coupling Layer)的设计来实现,它将D维的x分为两个部分x1和x2,并取以下变换:
z1=x1

z2=F(x1)⊙x2+H(x1)

计算过程如下图:

img

这样一来,Jacobian非常好算:

[∂z∂x]=(IdO [∂F∂x1⊗x2+∂H∂x1]F)

因为右上角是0,所以不管左下角是什么都无所谓,Jacobian的结果只是对角线上的行列式,也就是F各个元素之积。所以直接用一层神经网络建模输出F就好了。

然后很自然地会想到,为了增加f(x)非线性拟合能力,我们多加几层映射:

img

这样一个多耦合层结构,就是最终的f(x)。

还有一个小问题,如果x1一直copy下去,到最后剩的还是x1,这不就是一团噪声嘛。所以可以通过交替复制模块(copy)与仿射模块(affine)来进行。如下图:

img

赏

谢谢你请我吃糖果

支付宝
微信
  • 本文作者: YA
  • 本文链接: http://www.yuuuuang.com/2019/11/06/机器学习-Flow-based-Model/
  • 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!
  • 世界之内
  • 机器学习

扫一扫,分享到微信

2019年终总结
【Introduction to TensorFlow】03 卷积神经网络与复杂数据集
  1. 1. 基本概念
    1. 1.1. 基本步骤
    2. 1.2. GAN与VAE
  2. 2. Flow
© 2018-2025 YA
GitHub:hexo-theme-yilia-plus by Litten
本站总访问量27713次 | 本站访客数22625人
  • 所有文章
  • 友链
  • 关于我

tag:

  • 随笔
  • 年终总结
  • 世界之内
  • 世界之外
  • 叶隙集
  • 机器学习
  • 叶隙随笔
  • 图像处理
  • 数据挖掘

    缺失模块。
    1、请确保node版本大于6.2
    2、在博客根目录(注意不是yilia-plus根目录)执行以下命令:
    npm i hexo-generator-json-content --save

    3、在根目录_config.yml里添加配置:

      jsonContent:
        meta: false
        pages: false
        posts:
          title: true
          date: true
          path: true
          text: false
          raw: false
          content: false
          slug: false
          updated: false
          comments: false
          link: false
          permalink: false
          excerpt: false
          categories: false
          tags: true
    

  • 【叶隙集】43 阅读的平静

    2025-06-28

    #随笔#叶隙集

  • 【叶隙集】42 实习

    2025-05-31

    #随笔#叶隙集

  • 2024年终总结

    2025-04-08

    #随笔#年终总结

  • 【叶隙集】41 盘旋的白文鸟

    2025-01-12

    #随笔#叶隙集

  • 大语言模型正在伤害人机交互领域的研究

    2025-01-05

    #随笔#世界之内

  • 【叶隙集】40 台湾旅行

    2024-12-22

    #随笔#叶隙集

  • 【叶隙集】39 搬家了

    2024-09-05

    #随笔#叶隙集

  • 2023年终总结

    2024-06-27

    #随笔#年终总结

  • 【叶隙集】38 参加学术会议

    2024-05-22

    #随笔#叶隙集

  • Notes of 3D Gaussian Splatting

    2024-03-19

    #世界之内

  • 【叶隙集】37 音乐会和朋友

    2023-12-04

    #随笔#叶隙集

  • 【叶隙集】36 QE和音乐会

    2023-11-02

    #随笔#叶隙集

  • 【叶隙集】35 新室友和更积极的生活

    2023-09-11

    #随笔#叶隙随笔

  • 读书笔记|《规训与惩罚》

    2023-08-27

    #随笔#世界之外

  • 【叶隙集】34 无法参加学术会议

    2023-06-28

    #随笔#叶隙集

  • 【叶隙集】33 回国后与朋友和家人们的聚会

    2023-06-11

    #随笔#叶隙集

  • 视频压缩技术概述

    2023-04-28

    #世界之内

  • 2022年终总结

    2023-03-31

    #随笔#年终总结

  • 【叶隙集】32 平和的心态

    2022-12-27

    #随笔#叶隙集

  • 【叶隙集】31 双相情绪障碍症

    2022-12-17

    #随笔#叶隙集

  • 【学习笔记】CS5229 Advanced Computer Network

    2022-12-17

    #世界之内

  • 【叶隙集】30 下半学期太忙了!

    2022-11-25

    #随笔#叶隙集

  • 【叶隙集】29 当助教的半个学期

    2022-10-07

    #随笔#叶隙集

  • 【叶隙集】28 忙碌的第一个月

    2022-08-31

    #随笔#叶隙集

  • 【叶隙集】27 老师的职责

    2022-07-31

    #随笔#叶隙集

  • 【叶隙集】26 新加坡太难找工作了

    2022-07-23

    #随笔#叶隙集

  • 【叶隙集】25 生产工具、学习生活和阅读笔记

    2022-07-15

    #随笔#叶隙集

  • 【叶隙集】24 学习、科研、旅行和爱与关怀

    2022-06-24

    #随笔

  • 【叶隙集】23 学习与研究

    2022-04-26

    #随笔#叶隙集

  • 【学习笔记】人工智能规划与决策

    2022-04-26

    #世界之内

  • 博士申请的总结

    2022-03-31

    #随笔

  • 【叶隙集】22 新的体验和宗教

    2022-03-07

    #随笔#叶隙集

  • 2021年终总结

    2022-01-08

    #随笔#年终总结

  • 【叶隙集】21 新朋友和学术报告

    2021-10-31

    #随笔#叶隙集

  • 【叶隙集】20 音乐会与教训

    2021-10-19

    #随笔#叶隙集

  • 【叶隙集】19 六周年纪念日

    2021-10-03

    #随笔#叶隙集

  • 【叶隙集】18 疫情与疫苗

    2021-09-24

    #随笔#叶隙集

  • 摘录|联合国2021年气候问题总结报告的摘要

    2021-09-19

    #世界之外

  • 【叶隙集】17 音乐会和读书

    2021-09-08

    #随笔#叶隙集

  • 【叶隙集】16 喜欢上了游泳

    2021-09-01

    #随笔#叶隙集

  • 【叶隙集】15 课前的夜曲

    2021-08-24

    #随笔#叶隙集

  • 【叶隙集】14 平稳的学习生活

    2021-08-16

    #随笔#叶隙集

  • 【叶隙集】13 生活与朋友

    2021-07-15

    #随笔#叶隙集

  • 【叶隙集】12 毕业

    2021-06-30

    #随笔#叶隙集

  • 【叶隙集】11 毕业前的生活

    2021-06-23

    #随笔#叶隙集

  • 读书笔记|《国境以南,太阳以西》读后感

    2021-06-17

    #随笔

  • 【叶隙集】10 青甘环线旅行

    2021-06-13

    #随笔#叶隙集

  • 半监督学习|论文粗读

    2021-06-07

    #机器学习

  • 【叶隙集】9 纯粹地生活

    2021-06-06

    #随笔#叶隙集

  • 【叶隙集】8 生活的界限

    2021-05-30

    #随笔#叶隙集

  • 【叶隙集】7 隔离结束

    2021-05-21

    #随笔#叶隙集

  • 【叶隙集】6 隔离生活

    2021-05-14

    #随笔#叶隙集

  • 【叶隙集】5 新的阶段

    2021-05-08

    #随笔#叶隙集

  • 【叶隙集】4 团队管理

    2021-04-30

    #随笔#叶隙集

  • 【叶隙集】3 过低的自我评价

    2021-04-23

    #随笔#叶隙集

  • 【叶隙集】2 方向与交往

    2021-04-16

    #随笔#叶隙集

  • 【叶隙集】1 原爆点-续

    2021-04-08

    #随笔#叶隙集

  • 随笔|目的与纯粹

    2021-03-28

    #随笔

  • 随笔|白文鸟

    2021-01-20

    #随笔

  • 写在一百以后——2020年终总结

    2021-01-01

    #随笔#年终总结

  • 随笔|选择

    2020-12-25

    #随笔

  • 读书笔记|《人生的意义》总结、摘录

    2020-11-25

    #世界之外

  • 书评|Normal People, Normal Love

    2020-10-07

    #随笔

  • Decision Making|人工智能、机器学习与强化学习的概述与比较

    2020-10-03

    #世界之内

  • 随笔|疫情后的总结

    2020-09-10

    #随笔

  • 学习笔记@PRML|1 Introduction

    2020-07-31

    #世界之内

  • 随笔|面试后的回顾与思考

    2020-07-26

    #随笔

  • 数据挖掘|数据挖掘概论笔记

    2020-06-24

    #世界之内#数据挖掘

  • 续写|美女或野兽

    2020-06-18

    #随笔

  • 随笔|无常

    2020-05-31

    #随笔

  • 现象学|胡塞尔《小观念》笔记

    2020-05-13

    #世界之外

  • 随笔|我的局限性

    2020-05-13

    #随笔

  • 随笔|胡乱的记录

    2020-04-09

    #随笔

  • 随笔|疫情

    2020-02-16

    #随笔

  • 随笔|怅惘地忖度

    2020-01-29

    #随笔

  • 2019年终总结

    2019-12-08

    #随笔#年终总结

  • 机器学习|Flow-based Model学习笔记

    2019-11-06

    #世界之内#机器学习

  • 【Introduction to TensorFlow】03 卷积神经网络与复杂数据集

    2019-10-31

    #世界之内#机器学习

  • 【Introduction to TensorFlow】02 初识机器学习与计算机视觉

    2019-10-29

    #世界之内#机器学习

  • 【Introduction to TensorFlow】01 TF 快速入门

    2019-10-29

    #世界之内#机器学习

  • 【Introduction to TensorFlow】00 课程概览

    2019-10-29

    #世界之内#机器学习

  • 随笔|呓语

    2019-10-27

    #随笔

  • 周记|面纱 久别重逢

    2019-09-21

    #随笔

  • 学习笔记|拟合优化

    2019-09-15

    #世界之内

  • 周记|爱人 体验 芝诺

    2019-09-07

    #随笔

  • 摘录|造成不幸福的原因之六:嫉妒

    2019-09-06

    #世界之外

  • 随笔|虚无 纵欲

    2019-08-22

    #随笔

  • 周记|尘埃落定

    2019-06-29

    #随笔

  • 周记|本能 愉悦 基因

    2019-06-12

    #随笔

  • 周记|空荡荡

    2019-06-02

    #随笔

  • 四月裂帛——读《女儿红》

    2019-05-30

    #随笔#世界之外

  • 机器学习|主成分分析

    2019-05-10

    #世界之内#机器学习

  • 《好运设计》史铁生

    2019-05-09

    #世界之外

  • 机器学习|感知机与支持向量机

    2019-04-27

    #世界之内#机器学习

  • 周记|记忆 概念 庸俗

    2019-04-27

    #随笔

  • 机器学习|模型评估与选择

    2019-04-17

    #世界之内#机器学习

  • 机器推理|SLD Resolution

    2019-04-06

    #世界之内

  • 第五代计算机

    2019-03-31

    #世界之内

  • 学习笔记|Volume Rendering

    2019-03-31

    #世界之内#图像处理

  • 周记|三月驼云

    2019-03-28

    #随笔

  • 生成对抗网络与强化学习:文本生成的方法

    2019-03-11

    #世界之内

  • 《桨声灯影里的秦淮河》俞平伯

    2019-03-09

    #世界之外

  • 周记|雨

    2019-03-09

    #随笔

  • 《春之积雪》简媜

    2019-03-01

    #世界之外

  • 周记|逃离

    2019-02-15

    #随笔

  • 存在主义是一种人道主义

    2019-02-11

    #世界之外

  • 学习笔记|比较文学

    2019-02-09

    #世界之外

  • 尼采的美学

    2019-02-01

    #世界之外

  • 哲学涉猎

    2019-02-01

    #世界之外

  • 读书笔记|光的诗人——《如何看懂印象派》

    2019-01-28

    #随笔#世界之外

  • 叔本华的生命意志哲学

    2019-01-25

    #世界之外

  • 再也不要把他们弄丢了

    2019-01-21

    #随笔

  • 2018年终总结

    2018-12-31

    #随笔#年终总结

  • 人类的心理行为模式

    2018-12-25

    #世界之外

  • 周记|神经症人格

    2018-12-22

    #随笔

  • 【周记】旋转

    2018-11-30

    #随笔

  • 七牛云Bucket失效

    2018-11-21

    #世界之内

  • 周记|从前的日色慢

    2018-11-21

    #随笔

  • 【数理逻辑】Incompleteness Theorem

    2018-11-10

    #世界之外

  • 专业随想

    2018-11-05

    #随笔

  • 生活

    2018-11-04

    #世界之外

  • 计算机组成与体系结构

    2018-11-04

    #世界之内

  • 【强化学习】Policy Gradient

    2018-11-03

    #世界之内

  • 怀疑是否有价值——怀疑论

    2018-10-30

    #世界之外

  • 周记|Every hero and coward

    2018-10-20

    #随笔

  • Web in Java

    2018-10-11

    #世界之内

  • 周记|十月女泽

    2018-10-02

    #随笔

  • 托福备考

    2018-09-28

    #世界之内

  • 周记|裸体之舞

    2018-09-24

    #随笔

  • 周记|中秋幸福

    2018-09-18

    #随笔

  • History of artificial intelligence

    2018-09-09

    #世界之外

  • 周记|我那无趣的灵魂

    2018-09-09

    #随笔

  • Softmax Regression

    2018-09-08

    #世界之内

  • 周记|Rational

    2018-09-02

    #随笔

  • 贰 《SICP》笔记:模块化、对象和状态

    2018-08-05

    #世界之内

  • 周记|困倦

    2018-08-04

    #随笔

  • 壹 《SICP》笔记:构造数据抽象

    2018-07-31

    #世界之内

  • 周记|原爆点

    2018-07-31

    #随笔

  • 零 《SICP》笔记:构造过程抽象

    2018-07-23

    #世界之内

  • Norms or maybe more

    2018-07-09

    #世界之内

  • 事已至此

    2018-06-24

    #随笔

  • 【增强学习】AirSim搭建

    2018-06-02

    #世界之内

  • 【机器学习】BP算法

    2018-05-26

    #世界之内

  • 【康德】宏大的哲学语境

    2018-05-26

    #世界之外

  • 【康德】康德的研究领域是什么

    2018-05-11

    #世界之外

  • 【高等数学】什么是梯度(期中考试复习思考)

    2018-04-29

    #世界之内

  • 《自控力》读书笔记

    2018-04-21

    #随笔

  • 【线性代数】The Essence of Linear Algebra

    2018-04-21

    #世界之内

  • 【数据结构与算法】临时抱佛脚

    2018-03-10

    #世界之内

  • 科技革命与人类社会——《论工业社会及其未来》读后感

    2018-03-08

    #随笔

  • 《论工业社会及其未来》原文摘录

    2018-02-23

    #世界之外

  • 《如何高效学习》读后总结

    2018-02-19

    #随笔

  • 《精进》chapter-2读后总结

    2018-02-13

    #随笔

  • A Review of Brian - Inspired Computer Vision

    2018-02-11

    #世界之内

  • 最近有个女生,说对我很失望

    2017-12-07

    #随笔

  • 病入膏肓

    2017-01-29

    #随笔

  • 白文鸟

    2016-10-29

    #随笔

  • 《不能承受的生命之轻》读后感

    2016-07-13

    #随笔

  • 都五月份了

    2016-04-29

    #随笔

  • 《四月裂帛》简媜

    2014-09-29

    #世界之外

  • Fernweh
  • Wuuuudle (已失效)
  • Nemo
  • Elmo (yyh) (已失效)
  • highestpeak (已失效)
  • Kazoo Blog
努力做一名谦逊、独立、乐于思考的学生