加载中...

地址发布 老王说明书 宣传中心
此板块只作为纯讨论

正经话题,不搞色情!贤者时间必备
查看: 626|回复: 5
收起左侧

[学习讨论] 【芝士】看看生成式模型

[复制链接]
发表于 2024-10-8 09:07:34 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?免费注册

x
最近统计机器学习的课快结束了,正好做一下小小的总结。
0 C6 f9 D: Z8 {8 S3 c4 |- h5 `(欢迎访问老王论坛:laowang.vip)
Requirements: 高中概率和一点点本科的概率论,和一些统计机器学习的基础知识。$ G) D3 t* a0 w9 D(欢迎访问老王论坛:laowang.vip)
6 `. p) h7 f  ](欢迎访问老王论坛:laowang.vip)
00:# W2 r' \* t4 i(欢迎访问老王论坛:laowang.vip)

" b) \1 G/ E; l3 C& }8 r( }3 T( \最近(其实已经不是最近了)感觉机器学习领域最热门的是两个话题:ChatGPT类型的transformer模型,和Stable Diffusion这类生成式模型。不难注意到,这两类模型在解决两种完全不同的问题:对于一个sequence(序列,很多情况下就是你的输入,以及历史的上下文)他的后续应该是什么,以及给定一组D(一堆数据)找到他在某个空间的分布。对于前者,当你知道每一段输入的下一个词语是什么的时候,你就可以生成文本,而对于后者,除了D是数据,在哪个空间,什么分布,似乎都不是非常明了(当然,你也可能早就了解到这些信息了)。
) w# k' ], t. }& N- n  y7 X" |7 M3 D(欢迎访问老王论坛:laowang.vip)
遵顼传统地,先给出两个重要量的定义:
7 J: s$ V2 i! _D={x_1, x_2, ……, x_n} 是数据集,其中包含n个元素。以图像生成为例,这些元素就是图片。7 J( @8 g4 C% K; b8 {$ h(欢迎访问老王论坛:laowang.vip)
θ={z_1, z_2, ……, z_m} 是隐变量。这是一些我们不知道的变量,但我们希望通过算法学习到这些变量,并且用这些变量重构D。& Q1 f" k5 R4 m8 F) c, w/ c(欢迎访问老王论坛:laowang.vip)
7 N) k7 q5 ]" F: _. X0 F) \(欢迎访问老王论坛:laowang.vip)
其实看不懂也没关系,因为我课上到这里的时候也不清楚这两个量的意义。
$ F+ |% F/ l, `# a9 _$ c/ j- Q" K. _# P6 \2 y- Z(欢迎访问老王论坛:laowang.vip)
让我们从最简单也是最符合直觉的GAN开始吧。( I0 y/ p5 y1 ^3 E3 l5 z$ W' n) J(欢迎访问老王论坛:laowang.vip)

, T7 e# ?( R) K) a01:1 j( |3 |( [$ U8 K(欢迎访问老王论坛:laowang.vip)
- S/ F7 R4 G; a4 A: j' b3 y(欢迎访问老王论坛:laowang.vip)
GAN可以用来生成图片,其训练的原理也众所周知:模型分为生成器和鉴别器,生成器负责生成随机的图片,鉴别器负责判断一张图片来自生成器还是来自数据集D。这是一个非常简单而符合直觉的模型:如果模型训练良好,那么生成器就会生成尽可能像原始数据集的图片从而骗过鉴别器,鉴别器在一次次的欺骗中也学会怎么从最微小的差别中判断到底图片来自哪里,那么随着时间的进行,鉴别器愈发精明的同时生成器生成的图片也更能让人信以为真。1 p* O% f3 _. R" m" h(欢迎访问老王论坛:laowang.vip)

) b( b' s6 P0 o) F6 q( z那么随之而来的是三个问题。& G* T0 C2 [' X' _* }8 T0 E(欢迎访问老王论坛:laowang.vip)
        模型怎么训练?
& o) N7 v+ l% @# \- ?9 L1 \        鉴别器怎么鉴别?
0 X) k. \- T: e        生成器怎么生成?
' S# d, j( R' a: |! r- D& A2 k- S: \2 w(欢迎访问老王论坛:laowang.vip)
对于第一个问题有疑惑的人,其实答案是很简单的梯度下降。你只要定义好loss,而pytorch要考虑的就多了(((。只要知道一个loss是可微的那么模型就是可梯度下降的。关于这个如果你不知道什么是梯度下降那么可能去百度一下有无数人比我更能讲清楚。其实基本所有的模型都是这么训练的。
9 B- ]- C9 n; ^5 ~
8 Z  @. _: q! L4 G5 ?对于第二个问题,答案是这就是一个简单的图片分类问题,而且还是其中最简单的二分类,任何一个Data Science和ML专业的学生都不会对此感到陌生。
+ r) d  s$ A; x第三个问题的答案是,从一个随机的输入开始,经过一个网络就生成了。这个网络在最简单的情况下可以是一个多层感知机(一堆全连接层),或者有卷积,逆向卷积这些CV里常用的网络结构。那么这个模型的输入是什么呢?是一个随机的噪声,更确切的,他是一个高斯噪声。
0 V# u& ?' Z% k8 E; ^% }
, w# G" v9 h4 a8 C也就是说,这个模型包含两个网络:一个通过随机的噪声生成了图片,一个判断图片的来源。而令人感到惊喜的是,这个随机噪声就是θ。在GAN中,θ并没有被学习到,被学习到的是两个网络。
9 }2 s- Y2 S' l% {( m7 d4 W3 S8 R# G! ~(欢迎访问老王论坛:laowang.vip)
至此,θ和D就都被提及了,希望能让大家有个概念。
* \1 E& ~2 ]8 f0 _7 N+ K6 B' A! u6 V" u! h$ a' M; V(欢迎访问老王论坛:laowang.vip)
02:
7 E; w8 {' H: P7 f
5 I+ b( H* s4 e0 D4 Y; o在编码器-解码器的架构中,VAE是其中之一。编解码器的架构的意思是,模型有编码器和解码器两个部分(呃……)。编码器把D编码成θ,而解码器从θ中恢复出一个D’。而模型的loss就是D’和D的区别,以及一个kl散度(这个先不必理会)。
5 E2 |' J, c( j1 ~) m0 \; l3 ]1 }8 J7 E, X" h5 w(欢迎访问老王论坛:laowang.vip)
一般来说,模型训练完美之后,从一个x∈D经过编码器产生一个θ,用这个θ经过解码器会得到和x完全一样的图像。
/ ~' h# P5 e  X: _& m- C. S( R/ O3 ]9 _& a" F(欢迎访问老王论坛:laowang.vip)
这是我们希望的吗?
6 p# s* I6 L( A% Z/ R" d% d5 T8 Z2 s1 }& M6 ^% M! y9 W) }(欢迎访问老王论坛:laowang.vip)
其实并不是,我们希望的是获得一些稍微不同的图像。比如我输入的是一张JK的色图,得到了一个隐变量θ,我希望得到的是其他的图片,最好也是色图,最好也是JK题材,而不是获得一个打了马赛克的原图(因为θ一般比输入要小,所以信息多少会丢失一些,因此恢复的图像的质量会变差)。怎么做呢?答案是在θ附近采样。一个符合直觉的猜测是:如果一个θ对应解码后是JK色图,那么他的附近生成的也应该是JK色图。
( _9 F$ D  G! q2 ?4 Z0 c+ S
  n) s: l: O0 \事实并非如此,要不然也不需要大费周章地搞VAE了。
- E, S3 P2 J7 z5 i' o. `0 v9 k# t(欢迎访问老王论坛:laowang.vip)
其实根本原因在于θ所在的空间性质很差。从你当前的位置向某些方向移动或许是JK色图,向另一些方向移动一点点就变成章鱼色图,再朝另外一个方向移动就会变成JK鬼片。在三维的世界里我们有三个正交的方向,然而θ常常有几千的维度,也就是几千个正交的方向。如果不要求每个方向向量完全正交,那么几千的维度可能会产生上万个方向。(这段推导或者模拟都很麻烦)。总之就是,这个空间的性质很差,以至于你没有办法知道你应该去哪里采样。! C1 Y9 S  U9 X5 w2 B% _. _9 S(欢迎访问老王论坛:laowang.vip)
) H: a1 c0 H, h7 k! ]0 e(欢迎访问老王论坛:laowang.vip)
所以我们需要VAE。
% j* W) y/ C1 [2 `  ?- t$ U
4 C+ W( b( v3 }9 L/ F7 k9 ?" ^1 bVAE的一个基本假设是θ应该满足高斯分布。高斯分布是一个性质很好的分布:首先他很圆,所以一个点附近的点和他也是近似的。其次是有些东西是可以计算的,过会就能看见。
0 x* G( h7 f1 x% p5 e# G
. _) l  U' N3 n, T/ k& J) G在VAE的视角下,问题变成了:" I' K! T0 }# y# m& {(欢迎访问老王论坛:laowang.vip)
我们有:7 o) F) E( k& A( d' V7 g9 n(欢迎访问老王论坛:laowang.vip)
数据的分布:p(D) 我们不知道
9 N- @) l, A" w' {2 Eθ的分布: p(θ) ~N(0, 1) 我们假设他是一个标准正态分布。: ]) c7 j1 d9 i(欢迎访问老王论坛:laowang.vip)
现在我们希望将D编码到θ,并且从θ恢复到D。, T; |! _' k4 l# r+ v(欢迎访问老王论坛:laowang.vip)
p(D| θ)是似然,就是从θ还原成D的概率4 k" F0 O( c! t* |: @# p(欢迎访问老王论坛:laowang.vip)
p(θ|D)是后验,既从D编码成θ的概率。(其实这里一般是说在观察到数据D后对θ分布的猜测)3 ]+ m( ]* i& G8 Q(欢迎访问老王论坛:laowang.vip)
) D8 @$ r$ A' R) p# g(欢迎访问老王论坛:laowang.vip)
那么loss的设计就很简单了。我们希望θ能准确的还原D,所以只需要最大化似然就行。$ B5 w$ y) H* f! L/ k(欢迎访问老王论坛:laowang.vip)
但是这一切怎么计算呢?我们对于似然和后验都不知道,所以我们需要一个好的后验的假设,让似然是可以计算的。我们这门课叫这个东西conjugate priors,5 K1 m9 h1 t5 }6 Y/ F; |(欢迎访问老王论坛:laowang.vip)
2 g& a) `* C: a; P9 M; w5 ?(欢迎访问老王论坛:laowang.vip)
https://en.wikipedia.org/wiki/Conjugate_prior 这里有更多的例子。. M# c6 `+ x0 H5 N+ E2 M) m(欢迎访问老王论坛:laowang.vip)

$ E+ ~, R" Y, N话说回来,既然我们假设了先验,也就是p(θ)是一个正态,那么如果我们假设似然也是高斯,那么后验就可以计算了!
5 \# W, o6 `3 _# G3 O3 Y& u+ H- r) \' T  M1 e# c(欢迎访问老王论坛:laowang.vip)
VAE干的事情就是假设似然也服从一个正态分布,均值和方差就是可以学习的参数。
) {$ s0 J& u" H
% T+ }% }, T4 b. W结局就是VAE在一个x给出的θ旁的采样也是和x类似的!
, i( q5 }/ N8 C) B0 i* \: ?7 g2 ~  f1 L. q3 N/ T& N(欢迎访问老王论坛:laowang.vip)
那么古尔丹,代价是什么呢?答案是首先,你做出了两个假设。第一个先验的假设还算合理,第二个就完全是为了凑共轭而嗯造出来的,事实上似然几乎不可能是一个高斯,我们只能用一个高斯去近似(这也就是kl散度那一项,目的是让这个高斯尽可能接近真实的似然)。但只有两个参数的高斯何德何能能逼近一个一般需要上万参数才能拟合的分布呢?所以这导致的结果就是:VAE生成的图片很烂。但他保证了你能找到类似的图片。" ~0 `" m4 x) V: a(欢迎访问老王论坛:laowang.vip)
% j! B6 @* [* u(欢迎访问老王论坛:laowang.vip)
03:diffusion6 {1 ~7 X- Z. [2 T- ?(欢迎访问老王论坛:laowang.vip)
既然一层的VAE是不好用的,那么不如试试叠一堆VAE到一起。你既可以把diffusion理解为一堆VAE,也可以从他的形式上理解为他就是在原图上一点点加高斯噪音,直到图像完全变成噪音后,再从噪音一点点重建图像。效果很好。效果好的一方面是因为网络变深了,因此参数是VAE的几百上千倍,自然能学到更加精细的结构。第二点我觉得是因为一堆高斯的叠加才能拟合复杂的分布,就好像一堆线形层的堆叠才能识别复杂的结构一样。
7 O6 r7 V' Y- h4 x
* ?3 u9 o5 c/ \7 q04:不是,我写不下去了。直接快进到结语部分。
* J, j9 s  A: }# I8 e2 x% d
! m! M# Y8 F4 _6 y7 h其实这件事情远比这一点点东西复杂,但怎么能不牵扯到麻烦的概率论和很多机器学习的概念又能讲明白确实不是很容易做到,真这么写了有时候又觉得写得很像是你去知乎也能看到的科普,以及更重要的是我不知道这个论坛怎么写latex,导致写公式异常难受。
4 Z. B& {$ c$ B, J/ l! g* \) U7 }- }. \3 @' z/ ~(欢迎访问老王论坛:laowang.vip)
但如果你知道loss是什么,知道什么是正态分布,最好也知道先验,后验和似然,更巧的是这么博学的你竟然不知道VAE,那么可能你会对VAE有个大致的概念。3 ?, ?5 t( Z9 Z1 j. ~; A(欢迎访问老王论坛:laowang.vip)

& P+ h- c9 r# @9 j3 i0 c! C0 n6 a  g) d! \! E% o9 C(欢迎访问老王论坛:laowang.vip)
顺便调研一下真的有人看吗?以及看的人的分布是什么样的,还有有什么计算机相关的问题。主要思索了好久也不知道什么主题好,我会的大家都会,专业的知识网上也有很多现成的。! @  F& i# ^6 a% Z(欢迎访问老王论坛:laowang.vip)
要不然下一篇讲讲怎么从逻辑门到简单CPU吧,计组和数电我学的还不算太差的。或者有什么关于C++(20以前)或者机器学习的推荐主题?我发现我一旦写下我学过的东西或者给别人讲之后我的印象就会更加深刻,所以可能等着课少一点的时候会再更新一些。; x& E) Y- n2 S/ h+ w5 ^) d  b(欢迎访问老王论坛:laowang.vip)
. ], b! V, I2 p( {, @+ c9 @(欢迎访问老王论坛:laowang.vip)
看了看感觉好像逻辑性和其他芝士帖子没法比,,,有点惭愧5 G/ d8 m& k" |5 r& Z, y(欢迎访问老王论坛:laowang.vip)

: ~% L# u/ H/ y1 L
" c( p) C( G, s* l

评分

参与人数 1软妹币 +450 收起 理由
navebayes + 450

查看全部评分

本帖被以下淘专辑推荐:

回复

使用道具 举报

发表于 2024-10-16 18:44:28 手机版 | 显示全部楼层
可读性20,大段文字+无图+内容需要一定的前置只是基础,而并没有对前置知识简单说明$ {' e+ I8 c5 j(欢迎访问老王论坛:laowang.vip)
1 L! U" B) O( a% N(欢迎访问老王论坛:laowang.vip)
排版40,建议多分段、分割线——,“引号”、**星号**等标记重点内容4 t$ b0 g" O% Z0 }- [(欢迎访问老王论坛:laowang.vip)
) a/ J5 Z( B- h  S1 X) a(欢迎访问老王论坛:laowang.vip)
内容80,深度学习和神经网络确实很好发文章,能讲的东西很多,但是科普的知识门槛略高

评分

参与人数 1软妹币 +200 收起 理由
navebayes + 200

查看全部评分

回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-10-21 05:15:41 | 显示全部楼层
微时灬暮雨 发表于 2024-10-16 18:44
: u+ ]" R8 S$ G, f2 b8 S可读性20,大段文字+无图+内容需要一定的前置只是基础,而并没有对前置知识简单说明
3 K3 y5 A3 D9 a  O: S) V0 ?5 b& j(欢迎访问老王论坛:laowang.vip)
排版40,建议多分段、 ...

* t' A! ^8 R( {* v! ?是真的。其实本来想写的核心是VAE的,但写着写着就发现:1. 基本上所有东西都得假设读者知道深度学习的基础(神经网络和梯度下降),并且对概率论比较熟悉
( q9 B7 X' m6 r* _2. 如果想要用类比的方法VAE很难找到另一个相似的东西(比如神经网络和神经元之类的),因为他的核心就是要把信息编码到一个正态分布里去然后去采样,但对分布和采样不熟悉的人很难理解这其中的意味9 ^6 r! x0 [+ \5 ]" |(欢迎访问老王论坛:laowang.vip)
3. VAE的效果基本都一般,虽然可以沾边diffusion说后者是前者的堆叠,但其实差别还是有不少的,所以不是很容易举出很多例子. Q: W1 @0 Y1 e4 z0 X) h(欢迎访问老王论坛:laowang.vip)

. m6 L6 w, w. n6 Q所以我在想应该从什么方向,向谁说明这个东西。更重要的是,其实这个还需要读者知道无监督学习的目的,以及到底哪些东西可以这么搞,但这个其实就完全不属于VAE的范围,而是在半监督无监督学历那边讨论。其实发出来也是有点侥幸的,因为我确实想写点什么但又找不到很好的主题,所以这个有点水也有点难读,但是真读懂了会发现也不是很有深度。
* e" `1 n) E! V% r' z6 h( e; k. m
, O; C7 b1 c+ r以及有个问题,有什么好办法能在这边发latex或者类似的东西吗?因为我看可以从word粘贴所以我用word写的,然后粘贴过来发现公式和格式很多乱掉了,所以我直接删掉了公式推导的部分
: G* q% W/ d5 `+ _5 M1 ]
回复 支持 反对

使用道具 举报

发表于 2024-10-21 12:47:05 手机版 | 显示全部楼层
Rosta清 发表于 2024-10-21 05:15! s- c$ D& i+ W2 B(欢迎访问老王论坛:laowang.vip)
是真的。其实本来想写的核心是VAE的,但写着写着就发现:1. 基本上所有东西都得假设读者知道深度学习的基 ...

3 w1 Q: ?1 ^3 }9 D0 q2 W1、关于如何发帖,建议私聊站长询问,这个功能或许可以加2 L5 K. H2 L* Z  f' N(欢迎访问老王论坛:laowang.vip)
2、关于公式推导,个人不建议,如果是我评分的话,出现大量公式推导也是扣分项。原因是我认为**科普**类型的文章不宜涉及过多的数学运算;而且阅读文章的人数学水平参差不齐,并不是所有读者都能熟练掌握数分、线代、概统的相关知识,所以反而会增加阅读障碍$ o% P( m7 V5 r, n- P. Y) |. N(欢迎访问老王论坛:laowang.vip)
3、机器学习相关知识确实比较难科普,之前我也想写过类似的科普文,写着写着就会不明所以了,所以我自己也放弃了
回复 支持 反对

使用道具 举报

发表于 2024-10-21 12:49:36 手机版 | 显示全部楼层
Rosta清 发表于 2024-10-21 05:15% \. c# p& f7 ]2 k8 {(欢迎访问老王论坛:laowang.vip)
是真的。其实本来想写的核心是VAE的,但写着写着就发现:1. 基本上所有东西都得假设读者知道深度学习的基 ...

/ Y* k! I9 _$ B2 ~- w/ Q8 q( E- K但总之感谢你的分享
回复 支持 反对

使用道具 举报

发表于 2024-11-1 12:40:49 | 显示全部楼层
看不懂思密达
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 免费注册
点击进行验证

本版积分规则

我们不生产资源,只做资源的搬运工。

tags标签-春满四合院-AvGood-Archiver-小黑屋- |网站地图