Model module:会使用knowledge distillation来对模型参数进行fine-tune。
3.1 Feature Module
在推荐和信息检索场景下,feature维度通常非常高,例如:数百万 or 数十亿。这样大数目的features的出现频次符合长尾分布,其中只有少量比例的features会出现很频繁,其余很少出现。如[10]观察到的,在模型中的一半features在整个训练数据中只出现一次。很少出现的features很难被学好。
jd在《Reinforcement Learning to Optimize Long-term User
Engagement in Recommender Systems》对long-term engagement做了建模。
摘要
Feed流机制在推荐系统中广泛被采用,特别是移动Apps。Feed streaming setting提供用户无限feeds的交互形式。这种形式下,一个好的推荐系统会更关注用户的粘性,通常以long-term user engagement的方式进行measure。这与经典的instant metrics相差较大。直接对long-term engagement直行优化是一个non-trivial问题,因为learning target通常不能由传统的supervised learning方法提供。尽管RL天然适合于对long term rewards最大化的最优化问题,应用RL来最优化long-term user engagement仍然面临着以下挑战:
reward function \(R: S \times A \rightarrow R\)可以以不同的形式进行设计。我们这里会假设:在每一step t上的user engagement reward \(r_t(m_t)\)会以不同metrics进行加权求和的形式(weighted sum),来线性(linearly)地对它进行实例化:
Q-network的设计对于性能很重要。在long-term user engagement最优化中,用户的交互行为反复无常(例如:除了click外,还有dwell time、revisit、skip等),这使得建模变得non-trivial。为了有效对这些engagement进行最优化,我们会首先从这样的行为收到信息传给Q-Network
Q-value的逼近(approximation)通过具有dense state embedding的input的MLP来完成,item embedding如下:
\[Q(s_t, i_t; \theta_q) = MLP(s_t, i_t)\]
\(\theta_q\)的值会通过SGD进行更新,梯度计算如等式(5)所示。
4.2 off-policy learning任务
有了Q-learning based framework,在学习一个稳定的推荐policy之前,我们在模型中通过trial&error search来训练参数。然而,由于部署不满意policies的开销以及风险,对于在线训练policy几乎是不可能的。一个可选的方式是,在部署前使用logged data D训练一个合适的policy,它通过一个logging policy \(\pi_b\)收集到。不幸的是,等式(4)的Q-Learning framework会到到Deadly Trial问题,当对函数近似(function approximation)、bootstrapping以及offline training进行组合时,会出现这种不稳定和差异问题。
为了避免在offline Q-Learning中的不稳定和差异问题,我们进一步引入一个user simulator(指的是S-Network),它会对environment进行仿真,并帮助policy learning。特别的,在每轮推荐中,会使用真实user feedback进行对齐(aligning),S-Network需要生成用户的响应\(f_t\)、dwell time \(d_t\)、revisited time \(v^r\),以及一个二元变量\(L_T\),它表示用户是否会离开平台。
现在,我们已经解决了为什么(why)一个AI系统会增长,另一个问题是how:一组neurons只通过input/output signals相互连接,在一起工作来达到整体的稳态?一个理想的neuron model不应解释单个cell是如何工作的,而是要泛化到groups of cells,甚至groups of organisms。更好的是,它也能解释在deep learning中广泛使用的已经存在方法(比如:BP算法)的成功。
2.3.1 free energy principle的动机
free energy principle是为了理解大脑的内部运作而发展起来的,它提供给我们一些线索:关于如何在neural network learning上构建一个更统一的模型。必要的,它假设一个生物系统通过一个马尔可夫毯(Markov blanket:它会将internal state与外部环境相隔离)闭环,通信只通过sensory input和actions发生。生物系统的整体目标是:不论内部和外部,维持一个稳态(homeostasis),从而减小内部和外部的free energy(surprises)。
图2 在DynamicCell模型中,我们通过引入reaction到free energy priciple中,构建了生命的基本单元(basic unit of life)(cell)。一个basic activity of life仍会维持它的稳态。另外,它通过变更internal states或actions,会将unexpected input “react”成一种排出过多不能被处理energy的方式。例如:笑与器都意味着分别排出good和bad surprises,它们不会对生存(survival)有贡献。换句话说:life reacts。
如果用户使用在tensorflow中的automatic training framework,比如:tf.estimator,通过我们的high-level APIs自动处理saving/load模型。但如果他们希望在一个low level的方式,他们需要调用以上的函数和tensorflow相应的I/O函数。
当一个学习系统可以处理一段长期的数据时(比如:数月和数年),解决long-short term memory的主题很重要*。因为如果特定features只是短暂出现,或者在一段较长时间内没有被更新,它对inference accuracy不会有帮助。在另一方面,一些短期输入(momentary input)可能包含需要特殊处理的有价值信息,一个无偏的学习系统(unbiased learning system)应该处理这些低频数据。接着,我们提出了两个基本技术来管理embedding data的生命周期(lifetime)。
Frequency cutoff: 每当一个embedding被更新时,使用一个定时器进行递增来记录它的更新频次(update frequency)。因此,我们可以根据它的频次基于一个cutoff value来决定该embedding是否应该被保存成一个永久存储(比如:Bigtable)。对于涉及到多个epoches的训练,tensorflow的job会告诉你:一个example是否是首次见到。
facebook在2019的《Compositional Embeddings Using Complementary Partitions
for Memory-Efficient Recommendation Systems》,提出了一种compositional embedding,并且在dlrm中做了实现,我们来看下具体的概念。
1.介绍
DLRMs的设计是为了处理大量categorical (or sparse) features的情况。对于个性化或CTR预估任务,categorical features的示例可以包括:users、posts、pages、以及成百上千的这些features。在每个categorical feature中,categories的集合可能会有许多多样性的含义。例如,社交媒体主页(socal media pages)可能包含的主题范围是:从sports到movies。
为了利用这些categorical信息,DLRMs利用embeddings将每个category映射到在一个embedded空间中的一个唯一的dense representation;见[2,4,5等]。更精确的,给定一个关于categories的集合S以及它的基数 \(\mid S \mid\),每个categorical实例会被映射到一个在一个embedding table \(W \in R^{\mid S \mid \times D}\)的indexed row vector上,如图1所示。我们不用预先决定embedding的weights,对于生成准确的模型,在neural network的其余部分对embeddings进行jointly training更有效。
每个categorical feature,可有具有数千万可能不同的categories(比如:\(\mid S \mid \approx 10^7\)),采用的embedding vector的维度为\(D \approx 100\)。在DLRM的training和inference期,由于存在大量的categories,每个table可能需要多个GBs进行存储,因此embedding vectors的数目构成了主要的内存瓶颈。
尽管该方法可以极大减小embedding matrix的size,由于\(m \ll \mid S \mid\), 从\(O(\mid S \mid D)\)减小到\(O(mD)\),它可以天然地将多个categories映射到相同的embedding vector,从而产生信息丢失以及模型质量上的下降。一个重要的observation是,该方法不会为每个unique category生成一个unique embedding,从而不会遵循categorical data的天然多样性。
为了克服这一点,我们提出了quotient-remainder trick。出于简洁性,m除以\(\mid S \mid\)。假以”"表示整除或商(quotient)操作。使用两个complementary functions(integer quotient function和remainder function),我们可以生成两个独立的embedding tables,对于每个category,两个embeddings组合起来可以生成unique embedding。如算法2所示。
算法2
更严格的,我们定义了两个embedding矩阵:\(W_1 \in R^{m \times D}\)和\(W_2 \in R^{(\mid S \mid/m) \times D}\)。接着定义一个额外的hash矩阵\(Q \in R^{(\mid S \mid /m) \times \mid S \mid}\):
\[\]
…(4)
接着,我们可以通过以下方式获取我们的embedding:
\[x_{emb} = W_1^T R e_i \odot W_2^T Q e_i\]
…(5)
其中,\(\odot\)表示element-wise乘法。该trick会产生一个\(O(\frac{\mid S \mid}{m} D + mD)\)的内存复杂度,它对比起hashing trick在内存上会有微小的增加,但可以生成unique representation。我们在第5节展示了该方法的好处。
\[P = \lbrace \lbrace x \rbrace: x \in S \rbrace\]
如果P满足上式,那么P就是一个Complementary Partition。这对应于一个full embedding table,它的维度是:\(\mid S \mid \times D\)。
(2) Quotient-Remainder Complementary Partitions:
给定\(m \in N\),有:
\[P_1 = \lbrace \lbrace x \in S: \epsilon(x)\m=l \rbrace: l \in \epsilon(\lceil |S| /m \rceil) \rbrace &&
P_2 = \lbrace \lbrace x \in S: \epsilon(x) mod m = l \rbrace: l \in \epsilon(m) \rbrace\]
\[P_1 = \lbrace \lbrace x \in S: \epsilon(x) mod m = l \rbrace: l \in \epsilon(m_1) \rbrace &&
P_j = \lbrace \lbrace x \in S: \epsilon(x)\M_j mod m_j = l \rbrace: l \in \epsilon(m_j) \rbrace\]