KL散度、JS散度、Wasserstein距离

目录

                  1. KL散度

2. JS散度(Jensen-Shannon)

3. Wasserstein距离


1. KL散度

KL散度又称为相对熵,信息散度,信息增益。KL散度是是两个概率分布 P 和 Q  之间差别的非对称性的度量。 KL散度是用来 度量使用基于 Q 的编码来编码来自 PP 的样本平均所需的额外的位元数。 典型情况下,P 表示数据的真实分布,Q 表示数据的理论分布,模型分布,或 P 的近似分布。 

定义如下:

因为对数函数是凸函数,所以KL散度的值为非负数。

有时会将KL散度称为KL距离,但它并不满足距离的性质:

  1. KL散度不是对称的,即 
  2. KL散度不满足三角不等式。

2. JS散度(Jensen-Shannon)

JS散度度量了两个概率分布的相似度,基于KL散度的变体,解决了KL散度非对称的问题。一般地,JS散度是对称的,其取值是 0 到 1 之间。定义如下:

KL散度和JS散度度量的时候有一个问题:

如果两个分布 P,Q 离得很远,完全没有重叠的时候,那么KL散度值是没有意义的,而JS散度值是一个常数。这在学习算法中是比较致命的,这就意味这这一点的梯度为 0。梯度消失了。

3. Wasserstein距离

Wasserstein距离度量两个概率分布之间的距离,定义如下:

  

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
稀疏自编码器的目标是最小化重构误差,同时还要鼓励编码器产生稀疏的编码。传统的稀疏自编码器使用KL散度作为稀疏度量,但它存在一些问题,比如它对于大量缺失值的输入数据可能不够稳定。因此,一些研究者开始尝试使用Wasserstein距离来替代KL散度。 在Keras中,可以通过定义自定义损失函数来实现使用Wasserstein距离的稀疏自编码器。具体实现步骤如下: 1.导入必要的库 ```python import keras.backend as K from keras.losses import mse ``` 2.定义稀疏惩罚项 ```python def sparse_penalty(sparse_rate): def penalty(y_true, y_pred): return K.mean(K.sum(sparse_rate * K.log(sparse_rate / K.mean(y_pred, axis=0)), axis=0)) return penalty ``` 其中,sparse_rate是一个控制稀疏度的超参数,y_true是输入数据,y_pred是对输入数据的重构。稀疏惩罚项的计算方式与传统稀疏自编码器中KL散度的计算方式类似,只不过KL散度中的对数项被替换成了Wasserstein距离中的log(sparse_rate / K.mean(y_pred, axis=0))。 3.定义损失函数 ```python def sparse_wasserstein_loss(sparse_rate, recon_loss_weight): def loss(y_true, y_pred): recon_loss = mse(y_true, y_pred) sparsity_penalty = sparse_penalty(sparse_rate)(y_true, y_pred) return recon_loss_weight * recon_loss + sparsity_penalty return loss ``` 其中,recon_loss_weight是一个控制重构误差和稀疏惩罚项权重的超参数。最终的损失函数是重构误差和稀疏惩罚项的加权和。 4.使用自定义损失函数训练稀疏自编码器 ```python model.compile(optimizer='adam', loss=sparse_wasserstein_loss(sparse_rate=0.1, recon_loss_weight=1.0)) model.fit(x_train, x_train, epochs=10, batch_size=32) ``` 在训练稀疏自编码器时,使用自定义损失函数即可。在本例中,我们使用sparse_rate=0.1和recon_loss_weight=1.0来定义损失函数。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值