第八周【任务2】自适应技术与生成对抗网络(GAN)(笔记)

1. 初始参数的网络自适应

方法1:用已有数据集(ImageNet)先训练一个模型,在新数据集上,以此模型作为初始模型做fine tuning得到新模型。也就是传统的pretrain + fine tuning。

缺点:新训练出来的模型可能更偏向于新数据集的分布和特征。

方法2:基于KLD的方法

在fine tuning的过程中考虑新数据和老数据集。新训练的模型不要偏离原有的数据集太远。假设我们有两个数据集,旧数据集得到的模型A, 新数据集得到的模型B。新的数据集是 x x x​。于是我们有

在这里插入图片描述

我们使用的损失函数是:
J = α ⋅ J 1 ( x , y , w ) + ( 1 − α ) ⋅ J 2 ( x , w ~ , w ) J=\alpha \cdot J_{1}(x, y, w)+(1-\alpha) \cdot J_{2}(x, \widetilde{w}, w) J=αJ1(x,y,w)+(1α)J2(x,w ,w)
这里的 J 1 J_1 J1​​​​代表的是模型B的损失函数,也就是 y y y y ^ \hat{y} y^的距离。在训练模型B的同时,我们同时要想办法控制B不要偏离原模型A太远。因此我们要把输入 x x x同时输入模型A和模型B。通过控制模型A的输出 y ˉ \bar{y} yˉ y y y​​的kl距离不要太远,来控制模型B与模型A的距离。这里 J 2 J_2 J2​​​就是KL距离。加权平均系数 α \alpha α视情况设定更偏向于泛化还是特殊。

2.数据的混合

假设通用数据集很大。但是新增数据集情况不同

  • 新增数据量比较大。一般直接均匀混合,一起训练,效果好,训练慢,难以快速迭代。一般新增数据相对通用数据集大小比例超过10%就可以直接混合了。
  • 新增数据量比较小。直接混合的影响就很小,因此不能直接混合。采用的方法是:假设通用数据集有100万条数据,前面80万条数据先训练。然后等到后面20万条数据时,把1000条新增的小数据集混合,然后继续训练,这样新增数据量产生的影响就会更加明显。

3.对抗神经网络

正常的深度学习用的不多。新的地方在于监督和非监督学习同时存在于生成对抗网络中。

在这里插入图片描述

GAN的原理非常简单。以生成图片为例,我们有两个网络,Generator和Discriminator,它们的功能分别为:

  • G是生成图片的网络,它接受一个随机的噪声z,通过这个噪声生成图片,记作 G ( z ) G(z) G(z)
  • D D D是一个判别网络,判断一张图片是不是”真实的“(也即是输出1和0)。假设输入图片是 x x x​,输出 D ( x ) D(x) D(x)​代表 x x x​为真实图片的概率,如果是1,就表示100%是真实的图片对象,如果输出是0,就代表不可能是真实的图片对象。

中间是一个开关。在训练过程中,假如开关连接真实图片集,从 D D D的角度来看,想尽量输出1,分辨出真正的人脸。假如开关连接fake samples时,此时从 D D D的角度看,想尽量输出0,分辨出假的人脸,也就是 D ( G ( z ) ) → 0 D(G(z))\rightarrow 0 D(G(z))0

而生成网络 G G G的目标就是尽量生成真实的图片人脸,去欺骗 D D D,尽量让 D D D输出1,也就是 D ( G ( z ) ) → 1 D(G(z))\rightarrow 1 D(G(z))1 D D D的目标是尽量把 G G G生成的图片和真实图片分别开来。这样两个网络就形成了一个动态的“博弈过程”。

为了进一步理解,我们要观察这个结构的损失函数:
min ⁡ G max ⁡ D V ( D , G ) = E x ∼ p data  ( x ) [ log ⁡ D ( x ) ] + E z ∼ p z ( z ) [ log ⁡ ( 1 − D ( G ( z ) ) ) ] \min _{G} \max _{D} V(D, G)=\mathbb{E}_{\boldsymbol{x} \sim p_{\text {data }}(\boldsymbol{x})}[\log D(\boldsymbol{x})]+\mathbb{E}_{\boldsymbol{z} \sim p_{\boldsymbol{z}}(\boldsymbol{z})}[\log (1-D(G(\boldsymbol{z})))] GminDmaxV(D,G)=Expdata (x)[logD(x)]+Ezpz(z)[log(1D(G(z)))]
损失函数的优化分为两个部分:

  • 针对判别器D的优化,这步优化是让损失函数变大,也就是 max ⁡ D V ( D , G ) \max _{D} V(D, G) maxDV(D,G)
  • 针对生成器G的优化,这步优化是让损失函数变小,也就是 min ⁡ G V ( D , G ) \min _{G} V(D, G) minGV(D,G)​​

在这里插入图片描述

因为D的优化是要尽量使得 D ( x ) = 1 D(x)=1 D(x)=1并让 D ( G ( z ) ) = 0 D(G(z))=0 D(G(z))=0,也就是让 log ⁡ D ( x ) \log D(\boldsymbol{x}) logD(x) log ⁡ ( 1 − D ( G ( z ) ) ) \log (1-D(G(\boldsymbol{z}))) log(1D(G(z)))​​​尽量从负方向向0增长。因此这里的优化是随机梯度增加(ascending its stochastic gradient) 。注意,这步优化同时要在真实数据集和伪数据集同时提取minibatch samples。
∇ θ d 1 m ∑ i = 1 m [ log ⁡ D ( x ( i ) ) + log ⁡ ( 1 − D ( G ( z ( i ) ) ) ) ] \nabla_{\theta_{d}} \frac{1}{m} \sum_{i=1}^{m}\left[\log D\left(\boldsymbol{x}^{(i)}\right)+\log \left(1-D\left(G\left(\boldsymbol{z}^{(i)}\right)\right)\right)\right] θdm1i=1m[logD(x(i))+log(1D(G(z(i))))]

而针对G的优化是要尽量使得 D ( G ( z ) ) = 1 D(G(z))=1 D(G(z))=1,也就是让 log ⁡ ( 1 − D ( G ( z ) ) ) \log (1-D(G(\boldsymbol{z}))) log(1D(G(z)))​尽量从0向负方向减小。因此这里的优化就是随机梯度下降(descending its stochastic gradient)。注意,这步优化只在伪数据集提取minibatch samples.
∇ θ 9 1 m ∑ i = 1 m log ⁡ ( 1 − D ( G ( z ( i ) ) ) ) \nabla_{\theta_{9}} \frac{1}{m} \sum_{i=1}^{m} \log \left(1-D\left(G\left(z^{(i)}\right)\right)\right) θ9m1i=1mlog(1D(G(z(i))))

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值