一、简述
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%免费
】🆓