一、监督学习与非监督学习、生成模型
-
-
监督学习
给定数据 x x x,以及数据所对应的标签 y y y,学习一个从 x x x到 y y y的映射。
应用举例:分类、回归、目标识别、语义分割、图像标注等。
-
-
-
非监督学习
分析数据的隐藏结构特征。应用举例:聚类、降维、特征提取、数据分布估计等。
-
-
-
生成模型
给定训练数据,生成满足训练数据分布规律的新数据。这一问题和非监督学习中的数据分布估计问题关联甚大。应用举例:创造图像、图像着色、超像素。
-
生成模型的主要研究思路分为两类:一种是对数据分布律进行显式建模,本节将会讲述此类中的逐像素RNN/CNN
方法和变分自编码器;另一类是不对数据分布律显式建模,而直接生成新数据,本节将讲述此类方法中的对抗生成网络。
二、逐像素RNN/CNN
朴素的想法是依据已有的像素,确定下一像素的取值。数学抽象描述为:在已知若干像素的条件下,构建未知像素的概率分布;然后利用条件概率的链式法则,求取整幅图像中所有像素的分布规律。
p ( x ) = Π i = 1 n p ( x i ∣ x 1 , ⋯   , x i − 1 )    ↑ ↑ 图 像 像 素    下 一 个 未 知 像 素 \begin{array}{ccl} p(x) &=& \Pi^n_{i=1} p(x_i|x_1,\cdots,x_{i-1})\\ \,\,\uparrow &&\quad\quad\quad\uparrow\\ 图像像素 &&\,\,下一个未知像素 \end{array} p(x)↑图像像素=Πi=1np(xi∣x1,⋯,xi−1)↑下一个未知像素
解决方案:使用RNN
或LSTM
网络,从图像的左上角像素开始,依次推测相邻像素的取值;然后使用新的像素值,推进网络到下一轮的预测。
上述方法存在的问题是,在训练阶段和预测阶段,位置像素的分布律和取值需逐个构建或推断,因而计算效率不高。一个解决方法是使用CNN
代替RNN
来构建未知像素的分布律,这样,未知像素的取值依赖于一小块区域,而非仅是与之相关联的像素;同时,使得训练过程可以并行化,无需逐像素进行;但推断过程仍是逐像素的。
三、变分自编码器
考虑如下过程:我们期望从数据中提取最能表征数据的特征,然后使用这些特征尽可能地重建数据,此即自编码-解码
过程。其中由自编码器输出的特征可用做分类网络的输入。
好,现在扔掉编码器,仅考虑解码过程,并作如下描述:假设图像 x x x由特征 z z z产生,这个由 z z z到 x x x的过程已由上述解码器描述,即我们已通过神经网络学得生成模型 p ( x ∣ z ) p(x|z) p(x∣z)。现要考察数据的真实分布律。这一分布律可由用于生成图像的特征 z z z的分布律 p θ ( z ) p_\theta(z) pθ(z)表示。求解真实分布律的问题可归结为求解参量 θ \theta θ的问题。进一步,我们明确 θ \theta θ的最优解为使得观测到的数据 x x x出现概率最大的值,即一个最大似然问题:
arg
max
θ
p
θ
(
x
)
=
∫
p
θ
(
z
)
p
θ
(
x
∣
z
)
d
z
\arg\max_\theta p_\theta(x) = \int p_\theta(z)p_\theta(x|z)dz
argθmaxpθ(x)=∫pθ(z)pθ(x∣z)dz
假定
p
θ
(
x
)
p_\theta(x)
pθ(x)为正太分布形式。那么上述问题的难点在于积分式不可求解。
上述问题又进一步可转化成如下形式:
然后这个问题就可近似求解了。(好吧,其实我也没看懂,后面再补充吧o(╯□╰)o)
应用实例:生成手写字体;依据笑容程度和头部姿态,生成人脸图像。
四、生成对抗网络
一个概率论中的结论:可通过恰当的变换,使得满足均匀分布的数据通过变换后,满足任意分布。在此,这种变换可使用神经网络实现。用于实现这一表换(实际上,是实现从高斯分布到任意分布的变换)的网络被称为生成网络(Generator Network
)。另外需要一个判别网络(Discriminator Network
),用于监督生成的数据的好坏。这样就构成了对抗生成网络的基本结构:生成网络用于生成虚假数据,力求使得这些虚假数据看起来像是真的,并能够通过判别网络的检验;判别网络则争取尽量识别出"伪造"的数据。
以 G θ g ( z ) G_{\theta_g(z)} Gθg(z)表示生成器生成的数据,以 D θ d ( ⋅ ) D_{\theta_d}(\cdot) Dθd(⋅)表示判别器判别为真的概率,则生成对抗网络的优化目标为:
min θ g max θ d [ E x ∼ p d a t a log D θ d ( x ) + E z ∼ p ( z ) log ( 1 − D θ d ( G θ g ( z ) ) ) ] \min_{\theta_g}\max_{\theta_d}\left[ E_{x\sim p_{data}}\log D_{\theta_d}(x) + E_{z\sim p(z)}\log(1-D_{\theta_d}(G_{\theta_g}(z))) \right] θgminθdmax[Ex∼pdatalogDθd(x)+Ez∼p(z)log(1−Dθd(Gθg(z)))]
这一模型的求解,可通过对生成器和判别器交替推进来实现,即交替优化如下函数:
-
针对判别器,使用梯度上升方法,优化
max θ d [ E x ∼ p d a t a log D θ d ( x ) + E z ∼ p ( z ) log ( 1 − D θ d ( G θ g ( z ) ) ) ] \max_{\theta_d}\left[ E_{x\sim p_{data}}\log D_{\theta_d}(x) + E_{z\sim p(z)}\log(1-D_{\theta_d}(G_{\theta_g}(z))) \right] θdmax[Ex∼pdatalogDθd(x)+Ez∼p(z)log(1−Dθd(Gθg(z)))]
-
针对生成器,使用梯度下降法,优化
min θ g E z ∼ p ( z ) log ( 1 − D θ d ( G θ g ( z ) ) ) \min_{\theta_g} E_{z\sim p(z)}\log(1-D_{\theta_d}(G_{\theta_g}(z))) θgminEz∼p(z)log(1−Dθd(Gθg(z)))
在实际中,上述优化模型有点问题。问题产生于 log ( 1 − D ( G ( z ) ) ) \log(1-D(G(z))) log(1−D(G(z)))函数。当 D ( G ( z ) ) D(G(z)) D(G(z))很小时—即此时生成器产生的图片很假— log ( 1 − D ( G ( z ) ) ) \log(1-D(G(z))) log(1−D(G(z)))曲线较为平缓,这意味着对生成器网络,此时反向传递回去的梯度值很小,不利于网络的训练。解决方法是:针对生成器,优化如下目标:
-
针对生成器,使用梯度上升法,优化
max θ g E z ∼ p ( z ) log ( D θ d ( G θ g ( z ) ) ) \max_{\theta_g} E_{z\sim p(z)}\log(D_{\theta_d}(G_{\theta_g}(z))) θgmaxEz∼p(z)log(Dθd(Gθg(z)))
一些关于生成对抗网络的资料: