1 引言1.1 能量函数
1.2 使用EBMs的难点
1.3 为什么使用EBMs?
2 模型构建2.1 数据与标签的联合分布
2.2 边缘分布
2.3 条件分布
2.4 模型表示
![]() 3 训练
![]()
4 模型代码
def __init__(self, energy_net, alpha, sigma, ld_steps, D): super(EBM, self).__init__() print('EBM by JT.') # EBM所使用的神经网络 self.energy_net = energy_net # 分类任务的损失函数 self.nll = nn.NLLLoss(reduction='none') # it requires log-softmax as input!! # 一些超参数 self.D = D self.sigma = sigma self.alpha = torch.FloatTensor([alpha]) self.ld_steps = ld_steps def classify(self, x): f_xy = self.energy_net(x) y_pred = torch.softmax(f_xy, 1) return torch.argmax(y_pred, dim=1) def class_loss(self, f_xy, y): # - 计算分类网络的预测 y_pred = torch.softmax(f_xy, 1) return self.nll(torch.log(y_pred), y) def gen_loss(self, x, f_xy): # - 使用Langevine动力学采样 x_sample = self.sample(x=None, batch_size=x.shape[0]) # - 计算网络对于采样值的输出 f(x_sample)[y] f_x_sample_y = self.energy_net(x_sample) return -(torch.logsumexp(f_xy, 1) - torch.logsumexp(f_x_sample_y, 1)) def forward(self, x, y, reduction='avg'): # ===== # 网络前向传播 # - 计算 f(x)[y] f_xy = self.energy_net(x) # ===== # 判别式部分 # - 计算判别损失: 交叉熵 L_clf = self.class_loss(f_xy, y) # ===== # 生成部分 # - 计算生成损失: E(x) - E(x_sample) L_gen = self.gen_loss(x, f_xy) # ===== # 最终目标 if reduction == 'sum': loss = (L_clf + L_gen).sum() else: loss = (L_clf + L_gen).mean() return loss def energy_gradient(self, x): self.energy_net.eval() # 复制数据 x_i = torch.FloatTensor(x.data) x_i.requires_grad = True # 在生成服从模型分布的采样值时,需要对数据x进行求导 # 计算梯度 x_i_grad = torch.autograd.grad(torch.logsumexp(self.energy_net(x_i), 1).sum(), [x_i], retain_graph=True)[0] self.energy_net.train() return x_i_grad def langevine_dynamics_step(self, x_old, alpha): # 计算梯度 wrt x_old grad_energy = self.energy_gradient(x_old) # 采样 eta ~ Normal(0, alpha) epsilon = torch.randn_like(grad_energy) * self.sigma # 新的样本 x_new = x_old + alpha * grad_energy + epsilon return x_new def sample(self, batch_size=64, x=None): # - 1) 初始化样本 x_sample = 2. * torch.rand([batch_size, self.D]) - 1. # - 2) 运行 Langevine 动力学采样 for i in range(self.ld_steps): x_sample = self.langevine_dynamics_step(x_sample, alpha=self.alpha) return x_sample
![]() 5 受限玻尔兹曼机
CMU-10707 第九讲 受限玻尔兹曼机
![]() 6 终评6.1 RBMs
6.2 DBMs
CMU-10707 第十讲 深度信念网络 6.3 近似配分函数
6.4 EBMs是未来吗?
7 参考文献[1] Will Grathwohl, Kuan-Chieh Wang, Joern-Henrik Jacobsen, David Duvenaud, Mohammad Norouzi, and Kevin Swersky. Your classifier is secretly an energy based model and you should treat it like one. In International Conference on Learning Representations, 2019 [2] Max Welling and Yee W Teh. Bayesian learning via stochastic gradient Langevin dynamics. In Proceedings of the 28th international conference on machine learning (ICML-11), 2011 [3] David H Ackley, Geoffrey E Hinton, and Terrence J Sejnowski. A learning algorithm for Boltzmann machines. Cognitive science, 9(1):147–169, 1985. [4] Geoffrey E Hinton, Terrence J Sejnowski, et al. Learning and relearning in Boltzmann machines. Parallel distributed processing: Explorations in the microstructure of cognition, 1(282-317):2, 1986. 推荐阅读
|
相关文章
合理优化网站网页。
很多的站长朋友每天总是为自己的企业营销型网站排名迟迟没有排名在第一页而烦恼,不知道如何去优化自己的网站,其实大家可以从用户角度上去思考,想想客户在进入到一个网站的时候最先接触的会是那个页面,为什么这样页面没有产生对话,而有的页面却产生了对话,然后去想想这个页面是不是没有体现出客户所要看到的内容呢,那...
分享一个网站怎样同时优化多个关键词。
网站如何优化?如果它是三个或四个关键字,那么关注主页基本上是可以的。但是,如果有超过十个或二十个或更多的关键字,他们需要在整个网站妥善安排,而不是仅仅依靠主页。 通常的做法是将主要关键词放在主页上。第二级中的其他关键字放在每个列或频道页上。属于长尾关键词的可以使用内容页面进行优化。 在...
一个人思维的深刻,都是从概念思维开始
文/田志刚 摘自《卓越密码:如何成为专家》01小明在作文《我的理想》中写道:虽然我才上二年级,但一定要好好学习。只有好好学习,将来才能买得起变形金刚、乐高的玩具,这些玩具都很贵,我妈不舍得给我买。然后玩具买多了,得有地方放,我们家租的那个房子根本装不下,那就得买个房子。最好...
高人气直播间必备的8个技巧
你有没有遇到这样的情况? 直播开场吸引了2000个人进入直播间,不到20分钟,直播间不到300人,直播结束时,直播间的人数只有2位数,十分惨淡。 也就是说,你的直播留不住人。 直播间是否能留得住人不仅会影响直播人气,还会影响直播收益。 毕竟,没有观众的直播间...
淘宝日活连月增长,背后原因是什么?
现在,通过数据对比,我们可以发现淘宝和拼多多之间的DAU增速出现了差异,那么,造成差异的背后原因有哪些?电商平台之间的缠斗,未来有可能会出现怎样的变化?不妨来看看本文的解读和分析。 “拼多多DAU增速下滑幅度高达20%,相比之下,淘宝增长了7个点。”高盛的最新报告数据,如一记惊...
我来教你网站推广优化方案中的关键词定位,它对SEO的影响有哪些。
针对关键字优化是优化方案中每名SEO工作人员都必须考虑到的难题,每一篇高品质的内容,都能够用关键字提炼精粹。但从内容营销推广与搜索引擎寻找的实质而言,关键字排名,在全部SEO项目推进的情况下,并不是非常关键的一个指标值,SEO优化也会产生一定的影响,今天小编就来给大家分享一下。 1、错...









