其他
【源头活水】通过样本有效估计高维连续数据互信息
“问渠那得清如许,为有源头活水来”,通过前沿领域知识的学习,从其他研究领域得到启发,对研究问题的本质有更清晰的认识和理解,是自我提高的不竭源泉。为此,我们特别精选论文阅读笔记,开辟“源头活水”专栏,帮助你广泛而深入的阅读科研文献,敬请关注。
01
02
KL散度的期望表示
03
最大化互信息以改善 GAN网络 最大化互信息来改进双向对抗网络 信息瓶颈
import numpy as np
import torch
import torch.nn as nn
from tqdm import tqdm
from torch.utils.tensorboard import SummaryWriter
#正向传播网络
class Net(nn.Module):
def __init__(self,x_dim,y_dim) :
super((Net), self).__init__()
self.layers = nn.Sequential(
nn.Linear((x_dim+y_dim), 10),
nn.ReLU(),
nn.Linear(10, 1))
def forward(self, x, y):
batch_size = x.size(0)
tiled_x = torch.cat([x, x, ], dim=0)
idx = torch.randperm(batch_size)
shuffled_y = y[idx]
concat_y = torch.cat([y, shuffled_y], dim=0)
inputs = torch.cat([tiled_x, concat_y], dim=1)
logits = self.layers(inputs)
pred_xy = logits[:batch_size]
pred_x_y = logits[batch_size:]
loss = - np.log2(np.exp(1)) * (torch.mean(pred_xy) - torch.log(torch.mean(torch.exp(pred_x_y))))
return loss
#估计器
class Estimator():
def __init__(self,x_dim,y_dim) -> None:
self.net = Net(x_dim,y_dim)
self.optimizer = torch.optim.Adam(self.net.parameters(), lr=0.01)
self.x_dim = x_dim
self.y_dim = y_dim
def backward(self,x,y):
loss = self.net(x, y)
self.net.zero_grad()
loss.backward()
self.optimizer.step()
info = -loss.detach()
return info
power = 3
noise = 0.5
n_epoch = 2000
batch_size = 10000
x_dim = 5
y_dim = 3
writer = SummaryWriter('./log')
estimator = Estimator(x_dim,y_dim)
def gen_x(num, dim ,power):
return np.random.normal(0., np.sqrt(power), [num, dim])
def gen_y(x, num, dim,noise):
return x[:,:dim] + np.random.normal(0., np.sqrt(noise), [num, dim])
def true_mi(power, noise, dim):
return dim * 0.5 * np.log2(1 + power/noise)
#互信息真实值
mi = true_mi(power, noise, y_dim)
print('True MI:', mi)
for epoch in tqdm(range(n_epoch)):
x_sample = gen_x(batch_size, x_dim, power)
y_sample = gen_y(x_sample, batch_size, y_dim ,noise)
x_sample = torch.tensor(x_sample,dtype=torch.float32)
y_sample = torch.tensor(y_sample,dtype=torch.float32)
info = estimator.backward(x_sample,y_sample)
writer.add_scalar('info',info,epoch)
writer.add_scalar('true info',mi,epoch)
参考文献
论文原文:
https://arxiv.org/abs/1801.04062v1
https://zhuanlan.zhihu.com/p/113455332
https://zhuanlan.zhihu.com/p/191155238
https://github.com/gtegner/mine-pytorch
https://cloud.tencent.com/developer/article/1827058
本文目的在于学术交流,并不代表本公众号赞同其观点或对其内容真实性负责,版权归原作者所有,如有侵权请告知删除。
“源头活水”历史文章
Knowledge In PLM: 语言模型可以作为一种知识库吗?
DeepEMD : 小样本学习中的可微EMD
DPR一种高效的开放域问答检索技术
Few-shot Object Detection via Feature Reweighting
行人重识别:一个模型打天下
FSOD with Attention-RPN and Multi-Relation Detector
美文赏析:大佬对变分蒸馏的跨模态行人重识别的工作
通过对比学习提升OOD检测
将线性门控机制应用于卷积结构
CVPR 2021 | CLD: 通过挖掘实例与聚类间关系进行无监督特征学习
CTRL,定向生成模型
Deep InfoMax损失函数小记
游走图模型-聊聊Node2Vec(论文分析、代码实践)
CVPR 2021 | 让机器想象未见的世界:反事实的零次和开集识别
更多源头活水专栏文章,
请点击文章底部“阅读原文”查看
分享、在看,给个三连击呗!