首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

二十五:初识生成式对抗网络

周四照旧撸公式。之前所有的问题与解答文章都可以在公众号菜单“机器学习”中找到,周末记得复习一波哟~

今天的内容是

【初识生成式对抗网络(GANs)】

场景描述

2014年的一天,Goodfellow与好友相约到酒吧聊天。也许平日里工作压力太大,脑细胞已耗尽了创作的激情,在酒吧的片刻放松催生了一个绝妙的学术点子,然后就有了GANs的传说。GANs全称为生成式对抗网络,是一个训练生成模型的新框架。

GANs自提出之日起,就迅速风靡深度学习的各个角落,GANs的变种更是雨后春笋般进入人们的视野,诸如:WGAN、InfoGAN、f-GANs、BiGAN、DCGAN、IRGAN等等。

GANs之火,就连任何初入深度学习的新手都能略说一二。GANs刚提出时没有华丽的数学推演,描绘出的是一幅魅力感极强的故事画面,恰好契合了东方文化中太极图的深刻含义——万物在相生相克中演化,听起来很有意思。想象GANs框架是一幅太极图,“太极生两仪”,这里“两仪”就是生成器和判别器,生成器负责“生”,判别器负责“灭”,这一生一灭间有了万物。具体说来,生成器在初始混沌中孕育有形万物,判别器甄别过滤有形万物,扮演一种末日大审判的角色。回到严谨的学术语言上,生成器从一个先验分布中采得随机信号,经过神经网络的“妙手”转换,得到一个模拟真实数据的样本;判别器既接收来自生成器的模拟样本,也接收来自实际数据集的真实样本,我们不告诉判别器这个样本是哪里来的,需要它判断样本的来源。判别器试图区分这两类样本,生成器则试图造出迷惑判别器的模拟样本,两者自然构成一对“冤家”,置身于一种对抗的环境。然而,对抗不是目的,在对抗中让双方能力各有所长才是目的,理想情况下最终达到一种平衡,使得双方的能力以臻完美,彼此都没有了更进一步的空间。

问题描述

关于GANs,从基本理论到具体模型再到实验设计,我们依次思考三个问题:

(1)GANs可看作一个双人minimax游戏,请给出游戏的value function。我们知道在理想情况下最终会达到一个纳什均衡点,此时生成器表示为G*,判别器表示为D*,请给出解(G*, D*)和value function的值;在未达到均衡时,我们将生成器G固定,去寻找当前下最优的判别器DG*,请给出DG*和此时的value function。至此的答案都很容易在原论文中找到,这里进一步发问,倘若固定D,我们将G优化到底,那么解GD*和此时的value function是什么?

(2)发明GANs的初衷是为了更好地对概率生成模型作估计,我们知道在应用传统概率生成模型(如:马尔科夫场、贝叶斯网)时会涉及大量难以完成的概率推断计算,GANs是如何避开这类计算的?

(3)实验中训练GANs的过程会如描述的那么完美吗,求解的最小化目标函数

在训练中会遇到什么问题,你有什么解决方案?

解答与分析

(1)

在minimax游戏里,判别器的目标是将来自实际数据集的样本识别为真实样本,同时将来自生成器的样本识别为模拟样本。简单地看,这是一个二分类问题,损失函数自然是negative log-likelihood,也称为categorical cross-entropy loss或cross-entropy loss,即:

其中,D(x)表示判别器D预测x为真实样本的概率,p(datax)和p(gx)分别表示x为真实样本和模拟样本的后验概率。另外,p(x) =Psrc(s= data)P(xdata) +Psrc(s= g)P(xg), 这里的P(xdata)即pdata(x)表示从实际数据集获取样本x的概率,P(xg)即pg(x)表示从生成器生成样本x的概率。由于假定实际数据集的和生成器的样本各占一半,即Psrc(s= data)=Psrc(s= g) = 1/2,我们可以得到

因此,判别器最小化L(D)的过程可以化作最大化如下value function:

同时,作为另一方的生成器G最小化该value function,故这个minimax游戏可表示为:

我们发现在优化G的过程中,最小化value function本质是在最小化生成器样本分布pg与真实样本分布pdata的Jensen-Shannon divergenceJSD(pdatapg)。

进一步考虑最终达到的均衡点,JSD(pdatapg)的最小值在pdata=pg取到零,故最优解G*满足x=G*(z)~pdata(x),D*满足D*(x)≡1/2,此时value function的值为V(G*,D*) =﹣㏒4。

进一步,在训练时如果给定D求解当下最优的G,我们可以得到什么?

我们不妨假设G'表示前一步的生成器,给出的D是G'下的最优判别器,即

那么,当前G的最小化目标变为

(2)

传统概率生成模型要定义一个描述概率分布的表达式P(X),通常是一个联合概率分布的密度函数P(X1,X2,…,XN),然后基于此表达式做最大似然估计。这个过程少不了做概率推断计算,如:计算边缘概率P(Xi),计算条件概率P(XiXj),计算作分母的partition function等。当随机变量很多时,概率模型会变得十分复杂,做概率计算变得非常困难,即使做大量近似计算,效果常不尽人意。而GANs在刻画概率生成模型时,并不对概率密度函数P(X)直接建模,而是通过直接制造样本X,间接地体现出分布P(X),就是说我们实际上看不到P(X)的一个表达式。那么怎么做呢?

我们知道,如果有两个随机变量Z和X,且它们之间存在某种映射关系,X=f(Z),那么它们各自的概率分布PX(X)和PZ(Z)也存在某种映射关系。当Z,X∈R都是一维随机变量时,

当Z,X是高维随机变量时,导数变成Jacobian矩阵,为PX=JPZ。因此,已知Z的分布,我们对随机变量之间的转换函数f直接建模,就唯一确定了X的分布。

这样,不仅避开了大量复杂的概率计算,而且给了f更大的发挥空间,我们可以用神经网络来刻画f。我们知道,近些年神经网络领域大踏步向前发展,涌现出一批新技术来优化网络结构,除了经典的CNN和RNN结构,ReLu激活函数、Batch Normalization、Dropout等,都可以自由地添加到生成器的网络中,大大增强了生成器的表达能力。

(3)

在实际训练中,早期阶段的生成器G很差,生成的模拟样本很容易被判别器D识别,使得D回传给的G梯度非常非常小,达不到训练G的目的,这个现象称为优化饱和。为什么会出现这种现象呢?回答这个问题前,我们将判别器D的sigmoid输出层的前一层记为o,那么D(x)可表示成D(x) = sigmod(o(x)),当输入的是一个真实样本时x~pdata,当输入的是一个模拟样本时x=G(z;θg),z~pz。我们看判别器D的导数形式

训练生成器的loss项的导数形式为

此时生成器获得的导数基本为零,这说明判别器强大后对生成器的帮助反而变得微乎其微。怎么办呢?

下一题预告

【隐马尔科夫模型】

场景描述

序列标注(sequence labeling)是对一个序列的每个元素给出标签的机器学习任务。序列标注模型被应用于文本处理相关领域,包括中文分词、词性标注、语义角色标注、命名实体识别、语音识别等。我们前面已经提到过用RNN等深度学习模型解决序列标注问题,接下来我们还将回顾序列标注的一系列经典模型。

隐马尔科夫模型是机器学习中一个经典的生成式模型,描述了由隐状态的马尔科夫链随机生成观测状态序列的过程,常用于解决序列标注问题,在自然语言处理、语音识别等领域有广泛的应用。

问题描述

简述如何对中文分词问题用隐马尔科夫模型进行建模。给定语料库,如何对模型进行训练。

欢迎留言提问或探讨

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180201G0XQP500?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券