交叉熵、GAN loss与softplus

2022-08-11  本文已影响0人  吃远
一、交叉熵理解:

交叉熵,其用来衡量在给定的真实分布P(x)下,使用非真实分布Q(x)所指定的策略消除系统的不确定性所需要付出的努力的大小。其公式为:
H(p, q) = \sum_{i=1}^N p_i log_2^{\frac{1}{q_i}}

KL散度用来衡量两个分布的距离,也称为相对熵:
KL(p||q) = H(p, q) - H(p)
,由于P 代表数据真实分布,是固定的量,所以优化交叉熵等同于优化KL散度。

二、GAN loss理解

从这个角度理解GAN loss:假如判别器为D,真实数据为x,生成数据为\hat{x}。则经过判别器后真实数据和生成数据的概率分布分别为 P(real, fake) \sim (D(x), 1-D(x))\hat{P}(real, fake) \sim (D(\hat{x}), 1-D(\hat{x}))。为了简洁起见,省略了sigmoid函数σ(x)

对于Dloss:生成数据的真实分布为P(real, fake) \sim(0, 1),真实数据的真实分布为P(real, fake) \sim(1, 0)。故生成数据和真实数据的损失分别为:

D_{loss\_real} = 1 * log\frac{1}{D(x)} + 0 * log\frac{1}{1-D(x)} = -log(D(x))
D_{loss\_fake} = 0 * log\frac{1}{D(\hat{x})} + 1 * log\frac{1}{(1-D(\hat{x}))} = -log(1-D(\hat{x}))
D_{loss} = \frac{D_{loss\_real} + D_{loss\_fake}}{2}

对于Gloss:认为生成数据如果离真实数据很远就要给与更大惩罚,故此时生成数据的目标分布可以看做 P(real, fake) \sim(1, 0)。则生成器的对抗损失为:

G\_{loss}=1 * log\frac{1}{D(\hat{x})} +0 * log\frac{1}{1-D(\hat{x})}=-log(D(\hat{x}))

三、GAN loss与softplus关系

进一步简化——使用softplus
softplus(x):= log(1 + e^{x})
俗称log_sum_exp函数。

D_{loss\_real} = -log(σ(D(x))) = -log(\frac{1}{1+e^{-D(x)}}) = log(1+e^{-D(x)}) = softplus(-D(x))
D_{loss\_fake} = -log(1-σ(D(\hat{x}))) = -log(1-\frac{1}{1+e^{-D(\hat{x})}}) = -log(\frac{e^{-D(\hat{x})}}{1+e^{-D(\hat{x})}}) = -log(\frac{1}{e^{D(\hat{x})}+1}) = log(1+e^{D(\hat{x})}) = softplus(D(\hat{x}))
同理
G_{loss} = -log(σ(D(\hat{x}))) = -log(\frac{1}{1+e^{-D(\hat{x})}}) = log(1+e^{-D(\hat{x})}) = softplus(-D(\hat{x}))

这就解释了一些GAN loss代码里面的写法:

另外,有些图像修补论文中会对mask内、外区域设置不同的判别器目标,如下面这段代码,对于fake样本,mask内部区域的label设置为False,外部设置为True。

上一篇 下一篇

猜你喜欢

热点阅读