本文介绍的论文题目为:《Visualizing and Understanding Deep Neural Networks in CTR Prediction》
论文下载地址为:https://arxiv.org/abs/1806.08541
本文从预测值、神经元状态、特征梯度强度等几个方面入手,对点击率预估模型进行了可视化分析,一起来了解一下。
1、数据集介绍
先介绍一下本文使用的数据集,本文使用的数据是阿里广告平台收集到的日志数据。一共有8天,训练集从第一天的数据中采样得到,而测试集按天进行采样,每天的测试集作为单独的一组(test1代表第一天的测试集,test2代表第二天的测试集,依次类推),并且第一天的测试集和训练集没有交叉。
输入特征共有34组离散特征,如用户id、用户所在城市id、用户性别、用户年龄分集、搜索词、店铺id、广告类别等,embedding大小均为8。
而模型采用4层的全连接神经网络,神经元个数分别为256,128,64和32,中间层的激活函数为Relu,输出层的激活函数为sigmoid。
2、模型分析
2.1 AUC和预测值分析
这里主要通过AUC来对模型的效果进行评价。下图展示了随着训练轮数的增加,训练集和8组测试集的AUC变化情况:
从整体上看,训练集的AUC不断提升,但是每组测试集的AUC都呈现先上升后下降的趋势,在210000步左右,测试集的AUC最高。在210000步以后,随着训练的进行,每组测试集的AUC不断降低,模型出现了过拟合现象。
再看一下不同的测试集,test1到test5的AUC呈现单调递减的情况,这也是符合预期的。随着测试集和训练集发生的天数间隔越大,二者的差别越大,模型的泛化能力逐渐减小。但到了test6到test8,AUC反而逐渐提升,这也说明用户的行为存在一定的周期性变化的关系。
下图展示了在210000轮和600000轮时,训练集、test1和test5的标准化预测值(预测值pCTR/训练集的真实CTR)的变化。
从上图看,在210000轮时,训练集和测试集的预测结果的分布基本相同(图中好像漏画了训练集-负样本预测值的分布曲线,其实是被test1对应的曲线盖住了),而在600000轮时,则出现了巨大的差异。这主要是由于训练集中的样本非常不均衡,负样本占比过高(正样本不足10%),使得预测值逐渐趋近于0。
2.2 神经元状态分析
接下来分析一下神经元的状态变化。下图展示了layer3和layer4的神经元的输出均值随训练轮数增加后的变化情况:
下图则展示了layer3和layer4的神经元的输出标准差随训练轮数增加后的变化情况:
从上面两幅图来看,在欠拟合的第100000步和拟合最好的210000步,两层神经元的输出均值和标准差都非常接近。但随着模型的过拟合,在第300000步二者出现了一定的差异,并且在600000步更加明显。
标准差能在一定程度上表征每个神经元输出值的波动程度,波动程度越大,说明网络对于数据非常敏感。可以看到,在过拟合状态下,使用训练集时神经元的波动程度要明显高于测试集,反映了过拟合状态下的模型对训练数据过度敏感。
进一步,从训练集中随机选择1w条正样本和负样本,通过t-SNE方法将每一层神经元的输出映射到二维平面上:
可以看到,在拟合最好的210000步,第三层的输出中正样本分布较为集中,正样本和负样本分割较为准确,表明第三层表征的信息更有区分能力。但是第四层却并没有显示出进一步提升。
对测试集来说,随着训练轮数增加,过拟合现象出现,像上图中正样本分布较为集中的情况也不再出现(文中并没有给出对应的图示)。
经过上面的分析,你可能有所疑惑,第四层网络我们是否还需要呢?下一节将进行分析。
2.3 探测层方法分析
这里我们应用 Alain & Bengio’s的探测分析方法对不同层输出的表征能力进行分析。在不同的训练轮数下,直接使用不同层的输出向量作为输入以及相同的label来训练逻辑回归模型,在测试集的AUC表现如下:
可以看到,从第一到第三层,隐层输出信息对于点击行为的区分力逐层提升。第四层并没带来明显收益,与上节的结论一致。
2.4 特征影响力分析
最后,通过梯度信息来分析各个特征组对模型的影响。对于给定的模型,将全连接网络的输入针对模型输出(PCTR)求导,该梯度的强度表示了模型的输出预估对于该输入的微小变动的敏感度,从而可以反映出该输入对于模型的影响力。梯度越大,表明该输入的对模型的影响越大。
上文介绍的模型的输入共有34组离散特征,对应的embedding大小均为8。因此一条数据的一组特征会得到8个对应的梯度,首先对这8个梯度求平均, 然后在所有数据集上求平均,得到该组特征的强度。下图展示了训练轮数不同情况下,不同特征的强度信息:
可以看到,随着训练轮数增加,特征强度越来越集中,最后集中在编号1和10的特征上。事实上,这两个都是具有海量 ID 取值的单个特征如 user ID,所需参数空间极大,而本身携带的可泛化信息确实很少。因此在实际中,可以把userid从embedding layer去掉,而是在输出层为每个用户增加一个偏置,这样或许可以带来效果的提升(关于此处文章后面有介绍,本文不再赘述)。
3、总结
通过本文,我们学习到了一些分析模型效果的手段,咱们再来总结一下:
1、通过训练集和预测集的AUC变化曲线,来选取最优的模型
2、通过按天对预测集进行划分,以及每天的测试集的AUC变化,可以分析模型的泛化衰减程度,以及数据中存在的周期性变化。
3、通过神经元的波动程度来理解与检测过拟合,训练集的波动程度明显大于测试集,说明模型对训练数据过度敏感。
4、对不同层输出通过t-SNE方法转化到二维平面,同时使用探测分析方法,可以指导模型结构的设计。
5、通过计算每组特征对应的梯度,可以反映该特征对模型的影响力,从而指导输入特征的选择。