小红书EGMN团队你们好:
我们在实现EGMN的时候有以下问题想咨询一下:
在论文中提到,MLE损失为 $-\frac{1}{N} \sum_{i=1}^{N} log p(t_i|x_i)$,其中 $p(t_i|x_i)$为 $f_{exp}(t_i | \lambda(x_i))$与 $f_{gauss}(t_i | \mu_k(x_i), \sigma_k^2(x_i))$的加权和。在我的理解中,该损失是希望把指数分布与高斯分布在真实时间t下的pdf通过加权和的方式汇总,再通过MLE损失将其优化至最小。
然而, pdf可能会极大。举个极端的例子,当 $\lambda = 1e10, t=1e-10$时, $f_{exp}(t_i | \lambda(x_i))=\lambda e^{-\lambda t}=\frac{1e10}{e} =3.6788e9$,高斯pdf同理。
在源码的实现中,我也看到log_prob_short = exp_dist.log_prob(y_true.view(-1)).view(batch_size, 1)这种用法,而这是将pdf的值取log后的结果,然而后续通过logsumexp又会将其指数化后再相加取log。
在实际训练过程中,会导致MLE损失失去控制,无法正常训练。
综上,想来咨询一下,在你们的实现过程中是否有遇到该问题?是否有更好的解决方案?
在我们的应用中,我们将 $p(t_i|x_i)$的公式修改为积分 $\int_{t_i}^{t_i+d} f_{exp}(t_i | \lambda(x_i)) d{t_i}$与积分 $\int_{t_i}^{t_i+d} f_{gauss}(t_i | \mu_k(x_i), \sigma_k^2(x_i)) d{t_i}$的加权和,确保其指代一个概率,其中d指一个时长区间,如果不做归一化则为1,做了归一化则为 $\frac{1}{\text{PlayDuration}_{max}}$。这样是否更合理一些?
小红书EGMN团队你们好:
我们在实现EGMN的时候有以下问题想咨询一下:
在论文中提到,MLE损失为$-\frac{1}{N} \sum_{i=1}^{N} log p(t_i|x_i)$ ,其中 $p(t_i|x_i)$ 为 $f_{exp}(t_i | \lambda(x_i))$ 与 $f_{gauss}(t_i | \mu_k(x_i), \sigma_k^2(x_i))$ 的加权和。在我的理解中,该损失是希望把指数分布与高斯分布在真实时间t下的pdf通过加权和的方式汇总,再通过MLE损失将其优化至最小。
然而, pdf可能会极大。举个极端的例子,当$\lambda = 1e10, t=1e-10$ 时, $f_{exp}(t_i | \lambda(x_i))=\lambda e^{-\lambda t}=\frac{1e10}{e} =3.6788e9$ ,高斯pdf同理。
在源码的实现中,我也看到
log_prob_short = exp_dist.log_prob(y_true.view(-1)).view(batch_size, 1)这种用法,而这是将pdf的值取log后的结果,然而后续通过logsumexp又会将其指数化后再相加取log。在实际训练过程中,会导致MLE损失失去控制,无法正常训练。
综上,想来咨询一下,在你们的实现过程中是否有遇到该问题?是否有更好的解决方案?