PPNet的网络结构由基础的DNN结构和Gate NN结构组层。两种结构的融合方式是LHUC(Learning Hidden Unit Contributions)结构。像快手、字节等公司的推荐模型都是用了该结构。
所以,学习PPNet之前,必须先清楚LHUC结构。简单讲,就是将重要的一些bias特征embedding,作为其他所有特征的"gate"——即特征的重要性embedding,和特征原始embedding 做hadamard 积,生成加权后的embedding,后面就是mlp层。详细可以看下大佬的这篇文章先入为主:将先验知识注入推荐模型 - 知乎,写得非常清楚。
了解LHUC结构后,就比较容易能理解PPNet(Parameter Personalized Net)结构。将LHUC的结构应用到每一层网络结构(embedding层和mlp层)。其中Gate NN 是一层relu,一层sigmoid(为什么是sigmoid,因为是当作特征重要性是用)。所有层的Gate NN的输入都是bias embedding和其他所有特征的embedding。不同的是,因为需要做hadamard 积,所以,每一层Gate NN的输出维度是和左侧对应层的维度一致。具体的训练过程,以下几点需要注意:
- 除bias embedding外,其他所有embedding特征,即绿色框的embedding,其梯度更新不受Gate NN的反转梯度更新。其参数只会受左侧塔(橘色的)的反向梯度更新。
- Gate NN是一个2层神经网络,其中第二层网络的激活函数是2 * sigmoid,目的是约束其输出的每一项在[0, 2]范围内,并且默认值为1。当Gate NN输出是默认值时,PPNet同左侧部分网络是等价的。
- 左侧塔是辅助网络,个人理解主要是学习embedding,右侧塔是最终上线serving的塔。
技术日新月异,欢迎大佬多多点评沟通。