【保姆级】生成式网络模型基础知识(图像合成/语音合成/GPT)

news2024/11/16 13:47:37

生成式模型基础知识

初步接触生成任务

生成任务,顾名思义就是要去生成一个东西,比如生成图片/音频/文字等等。

大家接触最多比如chatGPT、stable diffusion、还有一些语音合成相关的东西。

那么问题来了,具体生成步骤是什么样的?

一、生成任务的流程

我们注意到一件事情,生成一张图片也好、一段文字也好,它们不总是唯一的

比如我希望生成一张鸡的图片,将**[一只鸡]** 这段文字送入模型让它去生成相应的图片,它生成的不总是同一个鸡,可能是一只有中分头的鸡,也可能是一个穿背带裤的鸡,但总的来说它们都符合文字的描述。

这就和其他任务比如分类任务有着很大的区别了,因为答案不唯一,甚至我们自己都不能枚举出所有的答案,你能想象到“一只鸡”这三个字可以对应到一张穿着背带裤打篮球的鸡的图片吗?

那么如何实现这种不唯一性呢?

我们要将一个值的思路转换为一个分布。这样每次去生成鸡的图片的时候就是从一个鸡的分布中随机采样一个结果,它们的结果不相同但又都符合鸡这个范围。

在这里插入图片描述

1. 生成一张图片

如上图所示,假设我要生成一张鸡的图片,如上图所示,首先我们在一个高斯分布(即正态分布)中随机取一个z作为我们的“种子”,可以说我们的所有不确定性都来自于这里。之后将这个“种子”送到一个神经网络模型中,输出一个结果 x x x,这个x满足一个分布 P θ ( x ) P_θ(x) Pθ(x)。当然,最开始的没训练网络的时候这个分布就是依托答辩,干啥啥不行。

而我们希望网络可以实现:“无论我从高斯分布中取什么样的值,他的输出都属于鸡的分布 P d a t a ( x ) P_{data}(x) Pdata(x)”,换句话说就是将高斯分布映射到鸡的分布 P d a t a ( x ) P_{data}(x) Pdata(x)上。

2. 训练网络

最右面的 P d a t a ( x ) P_{data}(x) Pdata(x)是我们真实的数据分布,也就是我们用来训练的数据集(里面装满了各种鸡的图片)。

我们现在要做的就是训练一个神经网络模型θ,让它生成的图片所满足的分布 P θ ( x ) P_θ(x) Pθ(x)和数据集的分布 P d a t a ( x ) P_{data}(x) Pdata(x)尽可能地相似,当模型训练完成之后,我从高斯分布中任意取一个z,他都会输出一个对应的x,这个x服从分布 P θ ( x ) P_θ(x) Pθ(x),同时也完全服从数据集的分布 P d a t a ( x ) P_{data}(x) Pdata(x)。换句话说,输出的x都是鸡的图片了。

3. 任务完成

有了训练好的模型,现在输入一段文字和一个从高斯分布中取的随机值z,比如“一只在打篮球的鸡”和z=1145141输入到模型中,它就会输出一个对应的图片,当输入不同的z时,就会产生不同的鸡在打篮球的图片,可能是一只穿背带裤的公鸡在打篮球,可能是中分头的母鸡在打篮球…

过程看起来很简单,现实却很x蛋。就好像考研的时候觉得:无非就是刷题嘛,按部就班地刷网课刷习题做模拟卷,最后考个120那不轻轻松松,结果学到最后模拟卷均分只有110,考研成绩一出来尼玛才考了90多分。

上述的想法很好,但是问题在于我们怎么去训练模型让分布 P θ ( x ) P_θ(x) Pθ(x)和数据集的分布 P d a t a ( x ) P_{data}(x) Pdata(x)尽可能地相似?

二、训练优化模型

看得懂英语的小伙伴一定看到了上图的标题:最大似然估计(Maximum Likelihood Estimation),忘了没关系,你只要知道它可以通过随机抽取的样本反向的去求得原始分布就够了。

1. 怎么去训练模型让分布 P θ ( x ) P_θ(x) Pθ(x)和数据集的分布 P d a t a ( x ) P_{data}(x) Pdata(x)尽可能地相似?

我们现在神经网络θ输出的所有内容都是满足 P θ ( x ) P_θ(x) Pθ(x)的对吧? P θ ( x ) P_θ(x) Pθ(x)的意思就是在分布 P θ ( x ) P_θ(x) Pθ(x)中得到x的概率值,既然我们要让 P θ ( x ) P_θ(x) Pθ(x) P d a t a ( x ) P_{data}(x) Pdata(x)尽可能相似,那么我们肯定希望能通过神经网络θ输出数据集中的原图,假设原图们是 x 0 x_0 x0, x 1 x_1 x1,…, x n x_n xn,那么只要让 P θ ( x 0 , 1 , . . . , n ) P_θ(x_{0,1,...,n}) Pθ(x0,1,...,n)最大就行了,也就是输出原图的概率越大越好

标准一点的写法就是 θ ∗ = a r g max ⁡ θ ∏ i = 1 n P θ ( x i ) \theta^*=arg\max_\theta\prod_{i=1}^nP_\theta(x^i) θ=argmaxθi=1nPθ(xi),其中的 θ ∗ \theta^* θ就是我们希望得到的最大概率值,使用最大似然估计,也就是找出满足输出原图概率最大的那个分布,就可以确定分布 P θ ( x ) P_θ(x) Pθ(x)中的参数了。

说了一大堆,就会有人问,为什么输出原图的概率越大,这两个分布就越相似,就单凭感觉?

2. 理性理解分布之间“相似”
(1) KL散度

首先我们引入一个衡量分布之间相似度的标准,KL散度

以下引用GPT的答案

如果我们有两个离散型概率分布 P 和 Q,其概率质量函数分别为 p(x) 和 q(x),KL 散度可以定义为:

D K L ( P ∥ Q ) = ∑ x p ( x ) log ⁡ ( p ( x ) q ( x ) ) D_{KL}(P\|Q)=\sum_xp(x)\log\left(\frac{p(x)}{q(x)}\right) DKL(PQ)=xp(x)log(q(x)p(x))

如果是连续型概率分布,则 KL 散度可以表示为积分形式:

D K L ( P ∥ Q ) = ∫ − ∞ ∞ p ( x ) log ⁡ ( p ( x ) q ( x ) ) d x D_{KL}(P\|Q)=\int_{-\infty}^\infty p(x)\log\left(\frac{p(x)}{q(x)}\right)dx DKL(PQ)=p(x)log(q(x)p(x))dx

KL 散度的值通常是非负的,且当且仅当两个概率分布完全相同时取得最小值 0。当 P 和 Q 之间的差异越大时,KL 散度的值也越大。

知道了KL散度可以衡量分布之间的相似度,我们希望PQ之间差异尽可能小 => 让KL散度尽可能小 => 让似然函数尽可能大。那么如果KL散度公式和似然函数相等,那不就有联系了,也就代表我们的感觉是正确的了?

废话不多说,直接开推!

(2)推理

S a m p l e { x 1 , x 2 , … , x m } f r o m P d a t a ( x ) θ ∗ = a r g max ⁡ θ ∏ i = 1 m P θ ( x i ) = a r g max ⁡ θ l o g ∏ i = 1 m P θ ( x i ) = a r g max ⁡ θ ∑ i = 1 m l o g P θ ( x i ) ≈ a r g max ⁡ θ E x ∼ P d a t a [ l o g P θ ( x ) ] = a r g max ⁡ θ ∫ x P d a t a ( x ) l o g P θ ( x ) d x − ∫ x P d a t a ( x ) l o g P d a t a ( x ) d x = a r g max ⁡ θ ∫ x P d a t a ( x ) l o g P θ ( x ) P d a t a ( x ) d x = a r g min ⁡ θ K L ( P d a t a ∣ ∣ P θ ) \begin{align} &\mathsf{Sample}\left\{x^{1},x^{2},\ldots,x^{m}\right\}\mathsf{from}P_{data}(x) \\ &\theta^{*}=arg\operatorname*{max}_{\theta}\prod_{i=1}^{m}P_{\theta}\bigl(x^{i}\bigr) =arg\operatorname*{max}_{\theta}log\prod_{i=1}^{m}P_{\theta}\bigl(x^{i}\bigr) \\ &=arg\max_{\theta}\sum_{i=1}^{m}logP_{\theta}\bigl(x^{i}\bigr) \approx arg\max_{\theta}E_{x\sim P_{data}}\bigl[logP_{\theta}(x)\bigr] \\ &=arg\max_{\theta}\int_{x}P_{data}(x)logP_{\theta}(x)dx\quad-\int_{x}P_{data}(x)logP_{data}(x)dx \\ &=arg\max_{\theta}\int_{x}P_{data}(x)log\frac{P_{\theta}(x)}{P_{data}(x)}dx =arg\min_{\theta}KL(P_{data}||P_{\theta}) \end{align} Sample{x1,x2,,xm}fromPdata(x)θ=argθmaxi=1mPθ(xi)=argθmaxlogi=1mPθ(xi)=argθmaxi=1mlogPθ(xi)argθmaxExPdata[logPθ(x)]=argθmaxxPdata(x)logPθ(x)dxxPdata(x)logPdata(x)dx=argθmaxxPdata(x)logPdata(x)Pθ(x)dx=argθminKL(Pdata∣∣Pθ)

(2) 我们要求的是最大值,取log单调性不变

(3) 最大化 l o g P θ ( x ) logP_{\theta}\big(x\big) logPθ(x)们的累加等同于最大化 l o g P θ ( x ) logP_{\theta}\big(x\big) logPθ(x)的期望(x服从 P d a t a ( x ) P_{data}(x) Pdata(x)分布)

(4) 第一项期望 E ( X ) = ∫ x f ( x ) d x E(X)=\int xf(x)dx E(X)=xf(x)dx,其中 x x x看作是 l o g P θ ( x ) logP_{\theta}\big(x\big) logPθ(x),第二项只与数据集分布 P d a t a ( x ) P_{data}(x) Pdata(x)有关,而数据集都是已知的,所以可以看作是减了个常数项,不影响单调性

(5) 上一步减的常数项就是为了凑这个 l o g P θ ( x ) P d a t a ( x ) log\frac{P_{\theta}(x)}{P_{data}(x)} logPdata(x)Pθ(x)的形式,而整个式子也就是KL散度的定义式。

至此我们得出,最大化θ等同于最小化KL散度,也就是尽可能让分布 P θ P_\theta Pθ P d a t a P_{data} Pdata之间差异更小,证明完毕。

三、理想很丰满、现实就是一坨

恭喜你看到这里,估计你已经感觉自己无敌了:“生成模型也就这么回事嘛。”

然而很遗憾的告诉你,我们之前讲的东西都基于一个条件:假设分布 P θ ( x ) P_θ(x) Pθ(x)可求

我们本科期间做的一些最大似然估计的题目都是假设满足泊松分布,xxx分布,它们都有固定的参数值,自然可以通过偏导来计算参数。

然而谁能想象出一个充满了鸡的图片的数据集的分布长什么样?它又有哪些参数?

所以直接去求 P θ ( x ) P_θ(x) Pθ(x)是不太可行的(除非精心设计整个模型,那就十分的复杂了)。

不过别灰心,至少已经入门了,有很多文章去解决了这个问题

下期我会讲讲VAE, DDPM(扩散模型)是如何解决这个问题的(前提是有下一期)

至于是否还有下一期就请大家多多支持啦。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1678136.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Kibana】快速上手Kibana平台(KQL)

文章目录 快速使用Kibana平台常用查询语句KQL基本查询覆合查询模糊查询 目前市面上大部分的公司的日志系统都是使用ELK系统,因此我们进行工作必须得掌握Kibana平台的基本使用,这里主要说明怎么“快速使用Kibana平台”以及记录一些常用的“KQL语言”。 快…

数字化应用标杆 | 又两家成套厂效率翻倍,利用率高达93%以上!

利驰 联能 & 利驰 俊郎 近日,利驰数字科技(苏州)有限公司(简称利驰软件)成功与俊郎电气有限公司(简称俊郎电气)、浙江联能电气有限公司(简称联能电气)成功确立了数字…

Elasticsearch_sql插件安装+使用

一、安装 前提是你先安装好了elasticseach,安装过程在我上一篇博客有说,可以看一下。 在elasticsearch容器启动的情况下,进入到elasticsearch容器,Elasticsearch_sql仓库,比如我的版本是8.11.2,那么我就选…

618值得入手的数码有哪些?数码好物清单推荐|款款实用闭眼冲

每年的618购物节都是消费者们翘首以盼的盛宴,这一天,各大品牌和电商平台都会推出极具吸引力的优惠活动,让消费者们能够以更优惠的价格购买到心仪的数码好物,为了帮助大家在这个购物狂欢节中挑选到真正实用、性价比高的数码产品&am…

javaSE:类和对象

面向对象 java是一种面向对象的编程语言,面向对象就是把能为我们所用的东西直接拿来使用,省去中间过程,比如洗衣服,要完成这一个动作,我们本来需要一个盆,放水,放衣服,换水&#xf…

MATLAB公式推导和导出Latex格式的方法

最近在推机械臂正逆运动学公式,那个旋转矩阵乘起来是真滴多,手算算的脑浆疼。突然想起来MATLAB还有符号计算这个功能,于是翻了翻手册, 找到了这个利用MATLAB帮助计算公式并且直接导出Latex格式的办法。 先定义符号变量&#xff0…

LeetCode2352相等行列对

题目描述 给你一个下标从 0 开始、大小为 n x n 的整数矩阵 grid ,返回满足 Ri 行和 Cj 列相等的行列对 (Ri, Cj) 的数目。如果行和列以相同的顺序包含相同的元素(即相等的数组),则认为二者是相等的。 解析 针对题目给出的数量级…

【源头活水】顶刊解读!IEEE T-PAMI (CCF-A,IF 23.6)2024年46卷第二期

“问渠那得清如许,为有源头活水来”,通过前沿领域知识的学习,从其他研究领域得到启发,对研究问题的本质有更清晰的认识和理解,是自我提高的不竭源泉。为此,我们特别精选论文阅读笔记,开辟“源头…

HarmonyOS NEXT 阅读翻页方式案例

介绍 本示例展示手机阅读时左右翻页,上下翻页,覆盖翻页的功能。 效果图预览 使用说明 进入模块即是左右翻页模式。点击屏幕中间区域弹出上下菜单。点击设置按钮,弹出翻页方式切换按钮,点击可切换翻页方式。左右翻页方式可点击翻…

内存函数:memcpy(拷贝),memmove(拷贝),memcmp(比较),memset(设置)

内存函数 一.memcpy(内存拷贝1)1.函数使用2.模拟实现 二.memmove(内存拷贝2)1.函数使用2.模拟实现 三.memcmp(内存比较)1.函数使用2.模拟实现 四.memset(内存设置)1.函数使用2.模拟实…

【Doris的安装与部署】

1 集群规划和环境准备 Doris作为一款MPP架构的OLAP数据库,可以在绝大多数主流的商用服务器上运行。 1.1 环境要求 一般推荐使用Linux系统,版本要求是CentOS 7.1及以上或者Ubuntu 16.04及以上,这也是目前服务器市场最主流的操作系统。 操作…

算法练习day4

前言 中间个人原因断了很久,现在回来继续。。。。 两两交换链表中的节点 代码随想录 两两交换链表中的节点 24. 两两交换链表中的节点 - 力扣(LeetCode) (用时:0.3小时) 思路 这道题的思路其实很简单…

[数据结构]红黑树的原理及其实现

文章目录 红黑树的特性红黑树的时间复杂度推导:结论红黑树与AVL树比较 红黑树的插入红黑树的节点定义调整策略思考情况2:思考情况3: 代码实现myBTRee.htest.cpp 红黑树的特性 红黑树最常用的平衡二叉搜索树。跟AVL树不同的是,红黑…

OpenAI 推出革命性新模型 GPT-4o:全能AI的新纪元

GPT-4o 模型的推出预示着人工智能领域的又一次飞跃,它将如何改变我们的世界? 在人工智能的快速发展浪潮中,OpenAI 再次站在了技术革新的前沿。2024年5月14日,OpenAI 宣布了其最新旗舰模型 GPT-4o,这不仅是一个简单的版…

GitHub操作

远程库-GitHub GitHub网址 GitHub是全球最大的远程库 1. 创建远程库 2. 远程仓库操作 2.1 创建远程仓库别名 git remote -v 查看当前所有远程库地址别名 git remote add 别名 远程地址 设置远程库地址别名 案例操作 起一个别名会出现两个别名,是因为既可以拉取…

艺人百度百科怎么创建

创建艺人百度百科是一个相对复杂的过程,需要遵循一定的步骤和规则。以下是百科优化网yajje整理的艺人百度百科创建指南: 了解百度百科的创建流程 在创建艺人百度百科页面之前,首先需要了解百度百科的创建流程。可以通过访问百度百科的官方网…

uniapp如何打包预约上门按摩APP

uniapp如何打包预约上门按摩APP? 开发工具:HBuilderX 一、创建移动应用 1、 点击此处微信开放平台 2、点击【管理中心 - 移动应用 - 创建移动应用】填写资料后等待审核 app运行流程图 签名如何获取: 1)先把打包好的app安装在手…

防爆安检系统市场规模保持增长态势 行业将向智能化方向发展

防爆安检系统市场规模保持增长态势 行业将向智能化方向发展 防爆安检系统,是指为了防止爆炸物品及其他危险物品进入特定区域而设置的一套完整的设备系统,细分产品包括金属探测器、生物安全检测设备、爆炸物探测器等。防爆安检系统能够有效检测并识别出潜…

单文件组件,为什么要使用 SFC

介绍 Vue 的单文件组件 (即 *.vue 文件&#xff0c;英文 Single-File Component&#xff0c;简称 SFC) 是一种特殊的文件格式&#xff0c;使我们能够将一个 Vue 组件的模板、逻辑与样式封装在单个文件中。下面是一个单文件组件的示例&#xff1a; <script setup> impor…

【Qt】之【CMake】Error : The source.. does not match the soused

QT中cmak编译出现CMake Error: The source… does not match the soused 分析 前提是该项目是从另一个路径的项目复制过来的&#xff0c;编写代码时发现无论怎样修改代码&#xff0c;运行后都没有任何变化&#xff0c;以为是qtbug&#xff0c;重构重启都没用&#xff0c;最后…