lzj-isee / undergraduate_project

毕设代码-
0 stars 0 forks source link

请教有关BBVI的问题 #1

Closed BrunoQin closed 1 year ago

BrunoQin commented 1 year ago

看到您在https://github.com/allenzhangzju/Black_Box_Variational_Inference上面有提交代码的记录,想向您请教有关黑盒变分推断的问题,主要是似然估计的计算部分(functions.py中的ng_log_Likelihoods函数)。如您方便,可以通过邮箱(brunoqin@163.com)联系,或直接回复。感谢!

lzj-isee commented 1 year ago

@BrunoQin 你好,我不清楚关于你提到的代码提交记录的问题,那个allenzhangzju不是我的账号,我在以前短暂研究过BBVI。

关于BBVI的似然函数计算部分,请详细描述问题,看起来functions.py中的ng_log_likelihood只是计算了机器学习概念上的negative log-likelihood,相当于损失函数。

或者你可以参考https://lzj-isee.github.io/2023/07/16/da/model_based_vi/。

你也可以参考论文: @InProceedings{pmlr-v33-ranganath14, title = {{Black Box Variational Inference}}, author = {Ranganath, Rajesh and Gerrish, Sean and Blei, David}, booktitle = {Proceedings of the Seventeenth International Conference on Artificial Intelligence and Statistics}, pages = {814--822}, year = {2014}, editor = {Kaski, Samuel and Corander, Jukka}, volume = {33}, series = {Proceedings of Machine Learning Research}, address = {Reykjavik, Iceland}, month = {22--25 Apr}, publisher = {PMLR}, pdf = {http://proceedings.mlr.press/v33/ranganath14.pdf}, url = {https://proceedings.mlr.press/v33/ranganath14.html} }

BrunoQin commented 1 year ago

谢谢!不太清楚为什么您在那个库上会有提交记录。。。冒昧打扰,不好意思!我大概明白您解释的负的似然估计作为损失函数,就是不太理解他为何将二分类标签化为[-1和1],并且使用log(sigmoid(y*yhat))作为损失函数的意义。常规理解这里应该使用BCE。这个操作可能也与他标签处理有关。

BrunoQin commented 1 year ago

不管怎么说,看您的解释,并且按照他的代码,应该是使log_likelihood尽可能大。而现有深度学习loss均是为梯度下降做准备的,也就是需要尽可能小。因此他的ng_log_likelihood函数设计了一个越大越好的函数作为loss。如果用BCE或者MSE应该在前面加上负号。我这样理解是否正确?:)

lzj-isee commented 1 year ago

@BrunoQin 你好,第一个问题是这样的:

  1. 标签为[0, 1]或者是[-1, 1]在代码上做微小改动后其实是等价的,这个你可以自己推一下,都是BCE(或者说logistic regression),详情可以参考论文

Max Welling, Yee Whye Teh. Bayesian Learning via Stochastic Gradient Langevin Dynamics

的5.2实验部分的公式(12)以及对应的正文描述

写成[-1, 1]的标签是为了写代码方便

第二个问题是这样的:

  1. 这里关于正负号的问题是“优化领域”和“贝叶斯领域”的习惯问题,实际上在公式上是等价的,你可以数学公式推一下。
  2. 贝叶斯问题中,讨论的一般是“极大后验”,这个正比于 似然函数 * 先验,这里的似然函数相当于 Optimization问题中的损失函数取负然后求exp指数,先验相当于模型正则化项
  3. Optimization领域习惯讨论 minimization问题,因此习惯上都是梯度下降
  4. BBVI讨论的更复杂一点,不是直接的极大后验,实际上VI任务的目的是最大化 Evidence Lower Bound (ELBO),ng_log_likelihood是组成这个问题的一部分,所以你很容易看到梯度上升的做法。
  5. 当然加了个负号优化就反过来了,所以我觉得不用纠结这些事情。公式写出来就明晰了。