2 g# m* k! Z$ {4 Q @那么随之而来的是三个问题。 ! W. M' a, G! J/ ]6 p 模型怎么训练? 5 |& T- ^! ^9 G @ 鉴别器怎么鉴别?: ?. A7 a& m( Y3 z T7 ^7 Q(欢迎访问老王论坛:laowang.vip)
生成器怎么生成?% ~6 W/ g. l. \! b(欢迎访问老王论坛:laowang.vip)
& M! z. k; e1 L, U U对于第一个问题有疑惑的人,其实答案是很简单的梯度下降。你只要定义好loss,而pytorch要考虑的就多了(((。只要知道一个loss是可微的那么模型就是可梯度下降的。关于这个如果你不知道什么是梯度下降那么可能去百度一下有无数人比我更能讲清楚。其实基本所有的模型都是这么训练的。5 V* K3 j% W' r# o' [(欢迎访问老王论坛:laowang.vip)
! O: p1 a G. s2 O+ ~6 a; o对于第二个问题,答案是这就是一个简单的图片分类问题,而且还是其中最简单的二分类,任何一个Data Science和ML专业的学生都不会对此感到陌生。 ; w: o O. Y' @8 i2 s! C8 o- |第三个问题的答案是,从一个随机的输入开始,经过一个网络就生成了。这个网络在最简单的情况下可以是一个多层感知机(一堆全连接层),或者有卷积,逆向卷积这些CV里常用的网络结构。那么这个模型的输入是什么呢?是一个随机的噪声,更确切的,他是一个高斯噪声。 , n* Q! n& Y* }) ]2 g* x4 _+ K4 ]# c+ W v5 _; ~(欢迎访问老王论坛:laowang.vip)
也就是说,这个模型包含两个网络:一个通过随机的噪声生成了图片,一个判断图片的来源。而令人感到惊喜的是,这个随机噪声就是θ。在GAN中,θ并没有被学习到,被学习到的是两个网络。 ` e! M; @! J(欢迎访问老王论坛:laowang.vip)
3 g# k- p$ B2 t5 k& `$ P: i(欢迎访问老王论坛:laowang.vip)
至此,θ和D就都被提及了,希望能让大家有个概念。 3 X4 j1 A: Y' y 0 i3 _1 U D8 h+ V02: D. Z5 p% A7 l) |) { % s! p" S& W& O; |在编码器-解码器的架构中,VAE是其中之一。编解码器的架构的意思是,模型有编码器和解码器两个部分(呃……)。编码器把D编码成θ,而解码器从θ中恢复出一个D’。而模型的loss就是D’和D的区别,以及一个kl散度(这个先不必理会)。 9 ^2 k9 I1 ~. H8 T& { s" o5 S" ` " v/ E; W0 X7 g1 D) |一般来说,模型训练完美之后,从一个x∈D经过编码器产生一个θ,用这个θ经过解码器会得到和x完全一样的图像。 / h( X" h$ g f- k- W ) ? g& n' `+ a6 r0 z" |* v这是我们希望的吗?# H" D, k4 b) x. E(欢迎访问老王论坛:laowang.vip)
* l2 p$ A6 b5 z( s% P6 ~4 qVAE干的事情就是假设似然也服从一个正态分布,均值和方差就是可以学习的参数。 , k3 V7 b' V, {% U8 R* s; u! E" K 0 E( `( ` M8 ]1 T$ i: S结局就是VAE在一个x给出的θ旁的采样也是和x类似的!: L* E) p! v; W3 t& O, b8 W5 B(欢迎访问老王论坛:laowang.vip)
7 J9 X1 d( A( p4 d( |- Y+ D4 e(欢迎访问老王论坛:laowang.vip)
那么古尔丹,代价是什么呢?答案是首先,你做出了两个假设。第一个先验的假设还算合理,第二个就完全是为了凑共轭而嗯造出来的,事实上似然几乎不可能是一个高斯,我们只能用一个高斯去近似(这也就是kl散度那一项,目的是让这个高斯尽可能接近真实的似然)。但只有两个参数的高斯何德何能能逼近一个一般需要上万参数才能拟合的分布呢?所以这导致的结果就是:VAE生成的图片很烂。但他保证了你能找到类似的图片。 ; S2 K. V2 l1 G E6 \1 q' _ P9 a+ [% l8 c& J3 R0 v! N1 P. ] N03:diffusion/ N; D% \. c9 h+ U. f2 P(欢迎访问老王论坛:laowang.vip)
既然一层的VAE是不好用的,那么不如试试叠一堆VAE到一起。你既可以把diffusion理解为一堆VAE,也可以从他的形式上理解为他就是在原图上一点点加高斯噪音,直到图像完全变成噪音后,再从噪音一点点重建图像。效果很好。效果好的一方面是因为网络变深了,因此参数是VAE的几百上千倍,自然能学到更加精细的结构。第二点我觉得是因为一堆高斯的叠加才能拟合复杂的分布,就好像一堆线形层的堆叠才能识别复杂的结构一样。8 n5 e6 N+ _8 z. F(欢迎访问老王论坛:laowang.vip)
# z% x1 \7 ^$ p v2 I7 ~(欢迎访问老王论坛:laowang.vip)
04:不是,我写不下去了。直接快进到结语部分。 3 y5 o' S" j4 k1 y7 a$ Z9 M; l B, v, P- y(欢迎访问老王论坛:laowang.vip)
其实这件事情远比这一点点东西复杂,但怎么能不牵扯到麻烦的概率论和很多机器学习的概念又能讲明白确实不是很容易做到,真这么写了有时候又觉得写得很像是你去知乎也能看到的科普,以及更重要的是我不知道这个论坛怎么写latex,导致写公式异常难受。 1 {) h# {+ A$ k7 }) y+ Y, {; ~0 f. x(欢迎访问老王论坛:laowang.vip)
但如果你知道loss是什么,知道什么是正态分布,最好也知道先验,后验和似然,更巧的是这么博学的你竟然不知道VAE,那么可能你会对VAE有个大致的概念。5 b* h5 k m' u2 Y& w(欢迎访问老王论坛:laowang.vip)
' H4 a5 p8 J, P( e$ J: k(欢迎访问老王论坛:laowang.vip)
. n% ?5 ~* ~; _' C/ Y顺便调研一下真的有人看吗?以及看的人的分布是什么样的,还有有什么计算机相关的问题。主要思索了好久也不知道什么主题好,我会的大家都会,专业的知识网上也有很多现成的。: t9 S# C) Q0 X+ Z- f(欢迎访问老王论坛:laowang.vip)
要不然下一篇讲讲怎么从逻辑门到简单CPU吧,计组和数电我学的还不算太差的。或者有什么关于C++(20以前)或者机器学习的推荐主题?我发现我一旦写下我学过的东西或者给别人讲之后我的印象就会更加深刻,所以可能等着课少一点的时候会再更新一些。 t4 N. d. V7 V+ P: f(欢迎访问老王论坛:laowang.vip)
& i. D' x/ J0 O看了看感觉好像逻辑性和其他芝士帖子没法比,,,有点惭愧6 P9 v1 F6 [. M/ w p: n(欢迎访问老王论坛:laowang.vip)
0 t3 Q) p. a; B) U8 Q. J(欢迎访问老王论坛:laowang.vip)
2 M# l. b5 |# F(欢迎访问老王论坛:laowang.vip)