Flow模型

一、简述

Flow模型是生成模型,目标是找到输入样本的分布。Flow模型选择直接直面生成模型的概率计算。

流模型有一个非常与众不同的特点是,它的转换通常是可逆的。也就是说,流模型不仅能找到从A分布变化到B分布的网络通路,并且该通路也能让B变化到A,简言之流模型找到的是一条A、B分布间的双工通路。当然,这样的可逆性是具有代价的——A、B的数据维度必须是一致的。

A、B分布间的转换并不是轻易能做到的,流模型为实现这一点经历了三个步骤:最初的NICE实现了从A分布到高斯分布的可逆求解;后来RealNVP实现了从A分布到条件非高斯分布的可逆求解;而最新的GLOW,实现了从A分布到B分布的可逆求解,其中B分布可以是与A分布同样复杂的分布。

二、建模思想

给定两组数据z和x,其中z服从已知的简单先验分布π(z)(通常是高斯分布),x服从复杂的分布p(x)(即训练数据代表的分布),现在我们想要找到一个变换函数f,它能建立一种z到x的映射f。

如果这个变换函数能找到的话,那么我们就实现了一个生成模型的构造。因为现在如果我们想要有新的生成,只需要从π(z)中随机采样一个点,然后通过映射f,就可以得到新的样本点x。

三、数学基础

3.1

![](https://img-blog.csdnimg.cn/dbf5b6156baa44f9afa47fecd460c837.png?x-oss-
process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6YGg6L-c5aqb,size_13,color_FFFFFF,t_70,g_se,x_16)

假设x、z满足简单的均匀分布,那么构建z与x之间的变换关系只需要构造一个线性函数即可:x=f(z)=2z+1。

3.2 下面再考虑非均匀分布的更复杂的情况:

我们可以考虑在很短的间隔上将二者视为简单均匀分布,然后应用前边方法计算小段上的,最后将每个小段变换累加起来(每个小段实际对应一个采样样本)就得到最终的完整变换式f。

![](https://img-blog.csdnimg.cn/cc34435928c6423a895fa80bee061ad2.png?x-oss-
process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6YGg6L-c5aqb,size_15,color_FFFFFF,t_70,g_se,x_16)

(相同的面积可以确保它们处理了对应信息量的任务)

又考虑到dz/dx有可能是负值(如下图所示),而p(x’)Π(z’)都为非负,所以p(x’)、Π(z’)的实际关系为p(x’)=Π(z’)|dz/dx|。

3.3

![](https://img-blog.csdnimg.cn/5b300d128e004b718c6885948ef83adf.png?x-oss-
process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6YGg6L-c5aqb,size_16,color_FFFFFF,t_70,g_se,x_16)

![](https://img-blog.csdnimg.cn/5cb9ce61cabc4494a3d42872583922c7.png?x-oss-
process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6YGg6L-c5aqb,size_19,color_FFFFFF,t_70,g_se,x_16)

![](https://img-blog.csdnimg.cn/e889b39a96c547a8ab4b7b1e4cd30671.png?x-oss-
process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6YGg6L-c5aqb,size_19,color_FFFFFF,t_70,g_se,x_16)

3.4 (注意:这个地方将上文中的f换成G,其实只是一个符号,本质是一样的)

G*是我们要求的。

四、如何求解3.4中的G*

4.1 要求解G*,就是要计算![](https://img-
blog.csdnimg.cn/f0ec5c3e5f7a448d9151e83305ca6ba1.png)

有着一些困难


不好计算,因为的
Jacobian矩阵一般维度不低(譬如256*256矩阵),其行列式的计算量是异常巨大的,所以在实际计算中,我们必须对![](https://img-
blog.csdnimg.cn/b38ef73571024a699dc2230df408a6b2.png)的Jacobian行列式做一定优化,使其能够在计算上变得简洁高效。

②需要巧妙地设计G的结构使得![](https://img-
blog.csdnimg.cn/914a8eeb548b4223b812ac4563cbcb8e.png)也是好计算的

4.2 逐步设计![](https://img-
blog.csdnimg.cn/1bd1b2c74ea24d8dbedb1001bdbef666.png)的结构

要求:G的输入和输出的维度必须是一致的并且G的行列式不能为0。

从上面的表达式中我们可以看出其只和![](https://img-
blog.csdnimg.cn/26baddb0c4214702b6e56cd2c9fd0388.png)有关,所以在实际训练中我们可以训练![](https://img-
blog.csdnimg.cn/d3756d7118d84f478093950d685df6a9.png)对应的网络,然后想办法算出G来并且在真实运行的时候改用G做图像生成。

![](https://img-blog.csdnimg.cn/bb63fb7c238242e7858d6d6762ba2a02.png?x-oss-
process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6YGg6L-c5aqb,size_18,color_FFFFFF,t_70,g_se,x_16)

4.2.1

![](https://img-blog.csdnimg.cn/7b7e7357ca0f4d669d96e2cf301f8b44.png?x-oss-
process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6YGg6L-c5aqb,size_14,color_FFFFFF,t_70,g_se,x_16)

这样设计的耦合层能快速计算出![](https://img-
blog.csdnimg.cn/fc03b7e1d1a94e30a597c90784da3470.png),其在G的Jacobian行列式的计算上也是非常简便。注:就是在学习β、γ。

![](https://img-blog.csdnimg.cn/01be23603c83472b811c6a7db1dcc7a0.png?x-oss-
process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6YGg6L-c5aqb,size_20,color_FFFFFF,t_70,g_se,x_16)

4.2.2

上述措施对G做了诸多限制,导致G的变换能力有限,所以我们可以堆叠多个G,去增强模型的变换拟合能力。

多个耦合层堆叠在一起,从而形成一个更完整的生成器。但是这样会有一个新问题,就是最终生成数据的前d维与初始数据的前d维是一致的,这会导致生成数据中总有一片区域看起来像是固定的图样(实际上它代表着来自初始高斯噪音的一个部分)

4.2.3

我们可以通过将复制模块(copy)与仿射模块(affine)交换顺序的方式去解决4.2.2一问题。

如上图所示,通过将某些耦合层的copy与affine模块进行位置上的互换,使得每一部分数据都能走向copy->affine->copy->affine的交替变换通道,这样最终的生成图像就不会包含完全copy自初始图像的部分。值得说明的是,在图像生成当中,这种copy与affine模块互换的方式有很多种。

4.2.4

W矩阵,帮我们决定按什么样的顺序做copy和affine变换,这种方法叫做1×1 convolution。1×1
convolution只需要让机器决定在每次仿射计算前对图片哪些区域实行像素对调,而保持copy和affine模块的顺序不变,这实际上和对调copy和affine模块顺序产生的效果是一致的。其中W矩阵是可以由机器来学习的。引入1×1
convolution后的G的Jacobian行列式计算依然非常简单。

👉AI大模型学习路线汇总👈

大模型学习路线图,整体分为7个大的阶段:(全套教程文末领取哈)

第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;

第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

👉大模型实战案例👈

光学理论是没用的,要学会跟着一起做,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

在这里插入图片描述

👉大模型视频和PDF合集👈

观看零基础学习书籍和视频,看书籍和视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
在这里插入图片描述
在这里插入图片描述

👉学会后的收获:👈

• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

👉获取方式:

😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

在这里插入图片描述

  • 23
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值