生成对抗网络&sigmoid

GAN论文:https://arxiv.org/abs/1406.2661

sigmoid

sigmoid/tanh作为映射函数,很好的把输出限制到目标区间,但是随之带来的问题是反向传播的收敛问题——梯度消失。

f ( x ) = s i g m o i d ( x ) f(x) = sigmoid(x) f(x)=sigmoid(x)
∇ f ( x ) = s i g m o i d ( x ) [ 1 − s i g m o i d ( x ) ] \nabla f(x) = sigmoid(x)[1-sigmoid(x)] f(x)=sigmoid(x)[1sigmoid(x)]
∇ f ( x ) = f ( x ) [ 1 − f ( x ) ] \nabla f(x) =f(x)[1-f(x)] f(x)=f(x)[1f(x)]

GAN

以生成对抗网络为例。
在论文中,对算法的伪代码描述如下:
生成器与辨别器的训练过程
如果在 G G G D D D中使用sigmoid激活函数,那在训练的收敛会出现问题。
以辨别器 D D D为例:

辨别器 D D D:

假设 D D D的最后一层激活函数为 s i g m o i d sigmoid sigmoid。未经过激活时的值为 D u a c t D_{uact} Duact,即

D a c t = s i g m o i d ( D u a c t ) D_{act}=sigmoid(D_{uact}) Dact=sigmoid(Duact)

设最终 l o s s loss loss对某参数 x x x的反向传播梯度为 D a c t ( x ) ′ D'_{act(x)} Dact(x)
进一步可写成 D a c t ( u a c t ) ′ ∗ D u a c t ( x ) ′ D'_{act(uact)}*D'_{uact(x)} Dact(uact)Duact(x)

D a c t ( u a c t ) ′ ∗ D u a c t ( x ) ′ = s i g m o i d ′ ( D u a c t ) ∗ D u a c t ( x ) ′ D'_{act(uact)}*D'_{uact(x)}=sigmoid'(D_{uact})*D'_{uact(x)} Dact(uact)Duact(x)=sigmoid(Duact)Duact(x)
D a c t ( u a c t ) ′ ∗ D u a c t ( x ) ′ = s i g m o i d ( D u a c t ) ∗ ( 1 − s i g m o i d ( D u a c t ) ) ∗ D a c t ( x ) ′ D'_{act(uact)}*D'_{uact(x)}=sigmoid(D_{uact})*(1-sigmoid(D_{uact}))*D'_{act(x)} Dact(uact)Duact(x)=sigmoid(Duact)(1sigmoid(Duact))Dact(x)

当D对输入图像的识别结果趋紧于0或者1时

lim ⁡ D → 1 / 0 s i g m o i d ( D u a c t ) ∗ ( 1 − s i g m o i d ( D u a c t ) ) = 0 \lim_{D\to1/0}sigmoid(D_{uact})*(1-sigmoid(D_{uact}))=0 D1/0limsigmoid(Duact)(1sigmoid(Duact))=0

lim ⁡ D → 1 / 0 s i g m o i d ( D u a c t ) ∗ ( 1 − s i g m o i d ( D u a c t ) ) ∗ D a c t ( x ) ′ = 0 \lim_{D \to 1/0}sigmoid(D_{uact})*(1-sigmoid(D_{uact}))*D'_{act(x)}=0 D1/0limsigmoid(Duact)(1sigmoid(Duact))Dact(x)=0
lim ⁡ D → 1 / 0 D a c t ( x ) ′ = 0 \lim_{D \to 1/0}D'_{act(x)}=0 D1/0limDact(x)=0

在训练GAN的过程中,生成器和辨别器的损失函数应该是震荡的,考虑

  • case1:生成器的能力很强,辨别器能力较弱,不能很好的识别,从而得到 D ( G ( z ) ) D(G(z)) D(G(z))趋紧于1,此时我们希望通过较大的梯度调整辨别器,因为他识别错误,但是由于上文中讨论的结果,梯度经过 s i g m o i d sigmoid sigmoid的导数影响使得参数调整幅度较小。不能很好的改进。
  • case2:生成器的能力很弱,辨别器能力较强,此时 D ( G ( z ) ) D(G(z)) D(G(z))趋紧于0,但是我们希望能使用较大的梯度改进生成器,但是和case1的情况一样,梯度很小,无法显著改进生成器。
  • case3:生成器和辨别器的能力都已经达到较优值,辨别器不能区分是否是真实图片和伪造图片,此时 D ( G ( z ) ) D(G(z)) D(G(z)) D ( z ) D(z) D(z)都趋紧0.5,我们应该希望此时反向传播梯度不要太大,但是0.5*(1-0.5)是a*(1-a)中最大的情况。即网络会以较大的梯度改变已经较优的局面。这显然与我们的初衷相悖。

Summary

PS:loss使用交叉熵的话, l o g ( D ( x ) ) = l o g ( s i g m o i d ( x ) ) log(D(x))=log(sigmoid(x)) log(D(x))=log(sigmoid(x)),其导数为 1 s i g m o i d ( x ) ∗ s i g m o i d ( x ) ∗ ( 1 − s i g m o i d ( x ) ) = 1 − s i g m o i d ( x ) \frac {1}{sigmoid(x)}*sigmoid(x)*(1-sigmoid(x))=1-sigmoid(x) sigmoid(x)1sigmoid(x)(1sigmoid(x))=1sigmoid(x),就不会出现以上讨论的那种情况了~
当然在把激活函数换成ELU/RELU之流就更棒了~

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值