无题
第1页:标题
“老师好,我这次汇报的题目是《时序图的反事实记忆更新控制》。
这项工作关注连续时间动态图中的异常检测。它并不只针对TGN,而是针对一类具有持续状态更新机制的时序图模型。第一版实验选择TGN,是因为它具有显式节点记忆,而且能够比较清楚地控制每条事件是否进入记忆。
这项工作和我之前的DyBAN也存在问题链条上的承接。DyBAN关注的是,面对当前事件,应该从历史中读取哪些相关行为,也就是控制‘读什么’。这项工作进一步研究,当前事件完成评分以后,是否应该进入持续记忆,也就是控制‘写什么’。”
过渡:
“下面我先说明为什么需要单独研究记忆写入。”
第2页:动机
“TGN这一类模型处理事件流时,可以分成两个阶段。
首先,模型读取当前事件发生前的历史状态,计算源节点和目标节点的时序表示,并对当前边进行异常评分。
完成评分以后,模型再根据当前交互生成消息,更新相关节点的记忆。新的记忆会参与后续事件的表示计算,使模型能够适应行为随时间发生的变化。
这里存在一个问题:模型通常会根据当前交互直接更新状态,但没有单独判断这次更新是否有利于未来检测。
当前边的异常分数只能回答:在当前历史状态下,这条边有多可疑。它不能直接回答:如果把这条边写入节点记忆,会不会影响模型对后续事件的判断。
一次写入可能产生两种结果。
如果当前交互反映了正常的行为变化,那么写入能够帮助模型及时适应新的模式。如果当前交互会扭曲节点状态,那么写入以后,它的影响可能通过节点记忆传播到后续相关事件。
因此,简单地过滤所有异常边并不合理,因为异常边不一定都会产生有害写入;同样,正常边的写入也不一定总是有益。
所以,我研究的问题是:给定当前事件发生前的状态,将当前交互写入记忆,会增加还是降低其影响范围内未来事件的异常检测风险?”
过渡:
“为了回答这个问题,我把整个方法分为离线学习和在线控制两部分。”
第3页:方法流程
“这张图的下半部分是离线训练流程,上半部分是在线检测流程。我先补充说明基础TGN如何得到。”
基础TGN训练
“Wiki数据按照时间顺序划分为50%的训练段、20%的验证段和30%的测试段。
前50%的训练段还要进一步划分。最前面的约24%用于训练TGN参数,接下来的约6%用于选择TGN的最佳训练轮次。当前基础TGN一共训练5个epoch。
再往后的两个10%时间段分别用于构造写入预测器的训练样本,以及验证预测器和选择写入阈值。
这种划分的目的是避免信息泄漏。基础TGN不能提前使用后面用于评价写入效用的数据,否则WRITE和SKIP的比较就不再是时间外评价。”
为什么冻结TGN
“选出基础TGN以后,我们固定它的网络参数和异常评分器。
这里的冻结只表示不再通过梯度修改TGN参数,并不表示节点记忆停止变化。运行过程中,TGN的记忆仍然按照WRITE或者SKIP动作持续演化。
这样设计是为了控制实验变量。如果同时重新训练TGN和写入预测器,那么检测性能发生变化时,我们无法判断变化来自TGN参数,还是来自写入策略。冻结以后,不同策略共用同一个检测模型,主要区别就是哪些事件进入了记忆。”
上半部分:在线检测
“下面看图的上半部分。
当前事件 (e_t) 到来以后,TGN首先读取事件发生前的历史状态 (M(t^-)),计算当前边的时序表示和异常分数 (a_t)。
与此同时,TGN根据当前交互产生一个候选更新,但暂时不把这个更新提交到主记忆中。
我们从当前异常分数、事件前记忆、时间间隔、节点历史活跃度以及候选更新幅度等信息中构造提交前特征 (x_t)。
有害写入预测器根据 (x_t) 输出:
[ p_t=P(\text{当前写入有害}\mid x_t) ]
如果这个概率高于阈值,就执行SKIP,丢弃当前事件产生的候选消息;否则执行WRITE,将消息提交到TGN记忆。
这里必须强调,当前事件要先完成异常评分,再决定WRITE或者SKIP。所以写入决策不会改变当前边已经得到的异常分数,只会改变未来的记忆轨迹和后续事件的检测结果。”
下半部分:离线反事实监督
“预测器训练所需的标签不能直接从原始数据中获得。原始数据只告诉我们当前边是否异常,没有告诉我们它写入记忆后是否有害。
因此,在离线训练阶段,我们从完全相同的候选事件前状态出发,建立两个分支。
WRITE分支允许当前事件产生的消息进入记忆,得到未来风险 (R_{\mathrm{write}})。
SKIP分支不提交当前消息,得到未来风险 (R_{\mathrm{skip}})。
两个分支使用相同的冻结TGN,按照相同顺序处理真实记录的未来10个时间组。未来事件、标签和模型参数都保持一致,唯一的差别是候选事件是否写入。
然后定义写入效用:
[ Ut=R{\mathrm{skip}}-R_{\mathrm{write}} ]
如果WRITE的未来风险更小,那么 (U_t>0),说明写入有益;如果SKIP的未来风险更小,那么 (U_t<0),说明写入有害。
我们利用这个结果生成监督标签,再训练在线写入预测器。
需要注意,未来回放只发生在离线训练阶段。真正在线检测时不需要等待未来事件,也不需要同时维护两个分支,只进行一次预测器前向计算。”
过渡:
“下一页进一步介绍反事实标签的具体构造方法。”
第4页:标签构造
“原始Wiki数据提供的是边异常标签,而这里需要的是写入有害标签。因此,这两个标签不是同一个概念。”
候选事件选择
“首先从写入预测器的训练时间段中选取候选事件。候选事件需要满足三个条件。
第一,候选事件之后存在完整的未来 (W) 个时间组。
第二,未来窗口中的事件数量不能超过预先设置的计算预算,防止单个候选的回放开销过大。
第三,未来窗口中至少存在与候选端点相关的事件。因为如果候选节点在未来完全没有再次出现,那么当前写入很难在有限窗口中产生可观察的影响,也无法得到有效监督信号。”
候选前状态
“对于每个候选事件,我们保留事件写入之前的状态:
[ St^-=\operatorname{State}(\mathcal H{<t}) ]
它包括节点记忆、节点最后更新时间、待处理消息以及当前历史位置。
保存这个状态相当于为WRITE和SKIP准备相同的实验起点。两个分支之间只能存在一个区别,也就是当前候选事件是否写入。”
未来潜在影响边
“回放时并不是把未来窗口中的所有边都放入损失。
我们首先把候选边的两个端点看作初始受影响节点。如果未来事件连接到这些节点,它就可能受到候选写入的影响,同时它的另一个端点也被加入受影响节点集合。这个过程按照未来时间组逐步扩展。
最后得到未来潜在影响边集合:
[ \mathcal E{1:W}^{\mathrm{aff}} = \bigcup{k=1}^{W}\mathcal E_k^{\mathrm{aff}} ]
两条分支仍然会按顺序回放完整窗口,以保证TGN状态演化正确。但是计算风险时,只评价潜在影响集合中的边,避免大量无关事件稀释候选写入的影响。”
未来风险
“对于WRITE和SKIP分支,未来风险由两部分组成:
[ R{\mathrm{write}} = \mathcal L{\mathrm{cls}}^{(\mathrm{write})} + \alpha\mathcal L{\mathrm{rank}}^{(\mathrm{write})} ][ R{\mathrm{skip}} = \mathcal L{\mathrm{cls}}^{(\mathrm{skip})} + \alpha\mathcal L{\mathrm{rank}}^{(\mathrm{skip})} ]
其中,分类损失衡量未来边的异常预测是否准确。
由于Wiki中的异常边很少,如果直接使用普通BCE,损失容易被大量正常边主导。因此我们使用类别加权BCE,提高异常边在未来风险中的贡献。类别权重只根据训练段中的类别比例计算并固定,不会使用验证集或者测试集统计。
排序损失关注异常边和正常边的相对顺序。因为异常检测最终不仅要求概率准确,还要求真正的异常边能够排在正常边前面。
这里的 (\alpha) 用于控制排序损失的相对贡献,当前设置为0.25。它与后面的写入标签阈值 (\epsilon) 不是同一个参数。”
生成写入标签
“得到两个分支的未来风险以后,计算:
[ Ut=R{\mathrm{skip}}-R_{\mathrm{write}} ]
如果
[ U_t<-\epsilon, ]
说明SKIP的未来损失明显更小,当前写入被标记为有害:
[ y_t=1 ]
如果
[ U_t>\epsilon, ]
说明WRITE的未来损失明显更小,当前写入被标记为有益:
[ y_t=0 ]
如果 (U_t) 落在 ([-\epsilon,\epsilon]) 内,说明两个分支的差别不足以超过数值误差。这类样本属于影响不明确样本,当前不参与二分类训练。”
训练有害写入预测器
“最后,把候选事件提交前能够获得的因果特征记为 (x_t)。预测器先输出logit:
[ qt=g\phi(x_t) ]
再通过Sigmoid得到有害写入概率:
[ p_t=\sigma(q_t) ]
预测器使用带正则化的二分类损失训练:
[ \mathcal L_{\mathrm{pred}} = \operatorname{BCEWithLogits}(q_t,y_t) + \lambda\lVert\phi\rVert_2^2 ]
当前已经完成实验的版本实际上使用的是轻量逻辑回归预测器,而不是多层MLP。因此,PPT中的 (\mathcal L{\mathrm{MLP}}) 最好改为更准确的 (\mathcal L{\mathrm{pred}})。如果继续写MLP,就不能把当前结果称为MLP的结果。
最终在独立的写入效用验证段上选择决策阈值。阈值冻结以后,才用于后续完整时间流验证。”
过渡:
“最后一页展示当前单种子开发验证的初步结果。”
第5页:实验结果
“目前实验在Wikipedia数据集和冻结TGN上完成,采用一个固定的预测器随机种子42。这里展示的是开发验证结果,不是最终测试集结果,也不是多种子的正式结论。
我们比较三个策略。
WRITE-ALL是TGN的默认策略,即每个事件完成评分以后都写入记忆。
RANDOM采用与AA-FURM近似相同的总体写入率,但随机决定每条事件是否写入。这个对照可以判断结果变化是否只是因为减少了写入数量。
AA-FURM使用训练得到的有害写入预测器决定WRITE或者SKIP。
结果显示,WRITE-ALL的AUPRC为0.00780,AUROC为0.8507,是当前三个策略中最好的。
匹配写入率的RANDOM策略,AUPRC为0.00673,AUROC为0.8437。
AA-FURM的AUPRC为0.00658,AUROC为0.8258,没有超过WRITE-ALL,也没有超过匹配写入率的随机策略。
AUPRC的绝对值比较低,是因为这个验证时间段包含31,494条事件,其中只有43条异常边,异常比例约为0.14%。在这种高度不平衡的数据中,AUPRC会明显低于AUROC,因此不能直接根据AUPRC数值小就判断模型完全无效,重点应放在相同数据和相同协议下的相对比较。
但从相对结果看,当前方法还没有带来下游检测提升。因此,这个实验不能支持‘方法已经优于TGN’的结论。
目前能够支持的结论主要有两点。
第一,WRITE和SKIP确实能够在未来异常检测风险上产生方向不同的影响,说明写入效用这个研究对象是存在的。
第二,仅凭当前的小规模训练样本和轻量预测器,还不能稳定地把这种效用转化为更好的完整时间流检测性能。
下一步需要重点检查候选样本的覆盖范围、提交前特征是否包含足够信息,以及写入阈值在时间分布变化下是否稳定。在完成多种子开发验证以前,我们暂时不进入测试集。”
结束语
“整体来看,这项工作把记忆模型的处理过程拆成了两个问题。
基础异常检测器判断当前事件是否异常,写入预测器判断当前事件是否适合进入持续状态。
离线阶段通过WRITE和SKIP反事实回放构造监督标签,在线阶段使用轻量预测器完成一次WRITE或者SKIP决策。
从与前期工作的关系看,DyBAN研究从历史中读取哪些行为证据,本工作研究当前事件应该怎样写入未来状态。两项工作分别作用于行为参考的读取和更新。
当前结果仍处于初步验证阶段。反事实写入效用具有可观测信号,但现有预测器还没有把该信号转化为检测性能提升。这也是下一阶段需要解决的核心问题。”
老师可能追问的简短回答
“为什么未来损失能够评价当前写入?”
因为当前写入不会改变已经发布的当前分数,它改变的是节点记忆,所以影响主要体现在后续相关事件上。未来损失正好用于测量这种后续影响。
“有正负样本吗?”
有。未来损失中的正负样本是异常边和正常边;写入预测器中的正负样本是有害写入和有益写入。这是两套不同的标签。
“为什么冻结TGN?”
为了保证WRITE和SKIP的差异来自写入动作,而不是模型参数变化。冻结的是参数,节点记忆仍然持续更新。
“为什么不用当前异常分数直接过滤?”
当前异常分数描述当前边是否可疑,写入标签描述它对未来检测是否有害。两者相关但不等价。
“为什么选择未来10个时间组?”
它是影响覆盖范围与计算开销之间的折中。当前先固定 (W=10) 完成初步验证,后续还需要通过不同窗口长度的消融实验检查敏感性。
“现在的结果算成功吗?”
机制验证取得了初步信号,但完整检测效果没有超过基线,因此不能称为方法成功。当前结果更准确的定位是可行性验证和问题诊断。
“为什么不直接汇报测试集?”
当前开发验证没有超过WRITE-ALL,继续查看测试集容易产生测试集选择偏差,所以按照实验协议暂时停止在验证阶段。
文件:汇报0909.pptx
