GOLEM算法迭代训练时似然分数持续下降原因咨询
GOLEM训练似然持续下降原因与超大规模数据集适配说明
似然分数持续下降属于正常训练表现
- 首先明确:GOLEM训练过程中打印的
likelihood指标是负对数似然值,本身就是优化过程要最小化的目标,和常规认知里“越大越好”的似然概率定义相反,所以迭代轮次增加、数值持续下降是梯度下降优化的正常结果,不是训练故障。 - 日志里的总得分计算逻辑为
score = 负对数似然 + λ * h,其中h是有向无环图(DAG)的约束惩罚项,值越高说明当前学到的图结构中环的占比越高。从给出的日志可以看到两个明确的训练阶段特征:- 前700轮h值从0持续涨到0.083,说明优化初期模型优先拟合观测数据、压低似然损失,暂时放松了无环约束
- 700轮到800轮h值稳定在0.083不再上升,说明DAG惩罚项的权重已经开始压制无约束拟合的趋势,继续训练的话h值会逐步向0收敛,最终输出符合要求的无环因果图。
3.1亿行样本场景下的GOLEM适配性判断
- 目前从日志的指标变化来看,没有出现算法不适配的信号,不存在完全不能用的问题,但超大规模样本下需要注意几个实际问题:
- 从日志时间戳计算,每100轮迭代耗时约1小时20分钟,跑完预设的1200轮总耗时会超过16小时,计算效率是核心瓶颈,建议先评估时间成本是否可接受。
- 提前确认使用的GOLEM实现是否支持外存计算/批量数据加载,如果是全量数据一次性读入内存/显存,3.1亿行的特征矩阵极容易触发内存溢出,或者因为磁盘内存交换导致训练速度进一步下跌。
- 超大规模样本下模型很容易过拟合观测数据的噪声,建议提前拆分训练、验证子集,跟踪验证集上的负对数似然变化,一旦验证集指标不再下降就启动早停,不需要硬跑满1200轮。
- 训练调参提醒:如果后续训练中h值长期停在0.08左右不再下降,需要手动调高DAG惩罚项的系数λ,否则最终输出的图结构会残留环,不符合因果DAG的基本要求。
附:问题对应的训练日志
[2022-06-28 19:18:02,137][golem.py - line 204] - INFO - Started training for 1200 iterations. [2022-06-28 19:18:04,794][golem.py - line 217] - INFO - [Iter 0] score=142.987, likelihood=142.987, h=0.0e+00 [2022-06-28 20:46:41,095][golem.py - line 217] - INFO - [Iter 100] score=141.733, likelihood=141.655, h=9.5e-04 [2022-06-28 22:07:21,093][golem.py - line 217] - INFO - [Iter 200] score=140.727, likelihood=140.475, h=2.0e-02 [2022-06-28 23:27:34,371][golem.py - line 217] - INFO - [Iter 300] score=139.868, likelihood=139.517, h=3.2e-02 [2022-06-29 00:48:43,334][golem.py - line 217] - INFO - [Iter 400] score=138.987, likelihood=138.560, h=4.0e-02 [2022-06-29 02:06:52,349][golem.py - line 217] - INFO - [Iter 500] score=137.903, likelihood=137.324, h=4.9e-02 [2022-06-29 03:28:45,860][golem.py - line 217] - INFO - [Iter 600] score=136.425, likelihood=135.597, h=7.0e-02 [2022-06-29 04:53:14,669][golem.py - line 217] - INFO - [Iter 700] score=135.297, likelihood=134.317, h=8.3e-02 [2022-06-29 06:19:03,769][golem.py - line 217] - INFO - [Iter 800] score=134.337, likelihood=133.297, h=8.3e-02
内容的提问来源于stack exchange,提问作者Egorsky
相关产品推荐
相关产品推荐

