#3.7
为什么 embedding 层的收敛速度往往很慢?
- embedding 层的参数数量巨大
- 由于输入向量过于稀疏, 只有与非零特征相连的 embedding 层权重会被更新
因此 FNN 模型采用 FM 的隐向量来初始化底层 embedding
#4.1 什么是embedding?
embedding 常被翻译为”嵌入“、”向量化“、”向量映射“。
embedding 是用一个低维稠密向量表示一个对象。 embedding向量能够表达相应对象的某些特征,同时向量之间的距离反映了对象之间的相似性。
##4.1.1 embedding 技术对于深度学习推荐系统的重要性
原因主要有以下三个:
- 深度学习的结构特点使其不利于稀疏特征向量的处理,因此 embedding 对于构建深度学习推荐模型十分重要。
- Embedding 本身就是极其重要的特征向量(embedding 向量往往会与其他推荐系统特征连接后一同输入后续深度学习网络进行训练。),表达能力更强。
- Embedding可用于召回层对海量item进行初筛。Embedding 对物品、用户相似度的计算是常用的推荐系统召回层技术。在局部敏感哈希(Locality-Sensitive Hashing)等快速最近邻搜索技术应用于推荐系统后,Embedding 更适用于对海量备选物品进行快速“筛选”,过滤出几百到几千量级的物品交由深度学习网络进行“精排”。
#4.2 word2vec —— 经典的embedding方法
#4.2.1 什么是word2vec
word2vec可生成”词“的向量表达。
为了训练word2vec模型,需要准备由一组句子组成的语料库,假设其中一个长度为 T 的句子包含的词有 w 1 , w 2 … … w T w_{1},w_{2}……w_{T} w1,w2……wT,并且我们假定每个词都跟其相邻词的关系最密切。
CBOW 模型假设每个词都是由相邻的词决定,Skip-gram 模型假设每个词都决定了相邻的词。
#4.2.2 word2vec模型训练过程
以skip-gram框架为例进行说明,既然每个词都决定了相邻的词,基于极大似然估计的方法,希望所有条件概率之积最大,这里使用对数概率。word2vec目标函数如下:
如何定义
p
(
w
t
+
j
∣
w
t
)
p(w_{t+j}|w_{t})
p(wt+j∣wt),作为一个多分类问题,最直接的方式是使用softmax。
其中,
w
O
w_{O}
wO表示
w
t
+
j
w_{t+j}
wt+j,被称为输出词。
w
I
w_{I}
wI表示
w
t
w_{t}
wt,被称为输入词。
然而,用 w t w_{t} wt预测 w t + j w_{t+j} wt+j,但是二者向量表达并不在一个向量空间中。
根据条件概率 p ( w t + j ∣ w j ) p(w_{t+j}|w_{j}) p(wt+j∣wj)的形式,可以转为下图中的神经网络结构,输入向量表达就是输入层到隐藏层的权重矩阵 W V ∗ N W_{V*N} WV∗N,而输出向量就是隐藏层到输出层的权重矩阵 W N ∗ V ′ W^{'}_{N*V} WN∗V′
#4.5 Embedding 与 深度学习推荐系统的结合
#4.5.2 Embedding 的预训练方法
为了解决"Embedding层训练开销巨大”的问题,Embedding的训练往往独立于深度学习网络进行。在得到稀疏特征的稠密表达之后,再与其他特征一起输入神经网络进行训练。
典型的采用Embedding预训练方法的模型是FNN模型。它将 FM模型训练得到的各特征隐向量作为Embedding层的初始化权重,从而加快了 整个网络的收敛速度。
Embedding的本质是建立高维向量到低维向量的映射,而“映射”的方法并不局限于神经网络,可以是任何异构模型。例如,GBDT+LR组合模型,其中GBDT部分在本质上就是进行了一次Embedding操作, 利用GBDT模型完成Embedding预训练,再将Embedding输人入单层神经网络(即逻辑回归)进行CTR预估。
#4.6 局部敏感哈希——让 embedding 插上翅膀的快速搜索方法
传统的 Embedding 相似度的计算方法是 embedding 向量间的内积运算。这就意味着为了筛选某个用户的候选物品,需要对候选集合中的所有物品进行遍历。假设embedding维度为 k k k, 物品总数是 n n n,那么遍历一遍的时间复杂度为 O ( k n ) O(kn) O(kn)(涉及 k k k 维的加法运算),在线计算会导致巨大的延迟。
由于用户和物品的 embedding 同处于一个向量空间内,因此召回的过程其实是一个在向量空间内搜索最近邻的过程。
推荐系统工程实践上主流的快速Embedding 向量最近邻搜索方法-局部敏感哈希(Locality Sensitive Hashing,LSH)。
#4.6.1 局部敏感哈希的基本原理
局部敏感哈希的基本思想是让相邻的点落在同一个“桶”,这样在进行最近邻搜索时,只需要在一个桶内进行搜索即可,如果保持每个桶中的元素个数在一个常数附近,就可以将最近邻搜索的时间复杂度降低到常数级别,那么如何构建局部敏感哈希中的桶呢?
高维空间向低维空间映射(是怎么映射的呢?
如上图所示,中间的彩色点处在二维空间中,当把二维空间的点通过不同角度映射到 a b c 三个一维空间时,可以看到原本相近的点,在一维空间中都保持着相近的距离,而原本远离的绿色点和红色点在一维空间 a a a 中处于相近的位置,却在空间 b b b 中处于远离的位置,因此可得出一个结论:在欧式空间中,将高维空间的点映射到低维空间,原本相近的点在低维空间中肯定依然相近,但原本远离的点则有一定概率变成相近的点。
利用这一性质,就可以构造局部敏感哈希桶。
- 深度学习
疑问
- P 102 序列样本,图样本,异构的多特征样本。这个意思是这些都能用embedding表示吗?
- embedding向量能够表达相应对象的某些特征?是表达什么特征呢?
- 从经验讲,skip-gram的效果更好。
Q & A
4. 为什么深度学习的结构特点不利于稀疏特征向量的处理?
(1) 稀疏特征量级大,会使得网络参数巨大,对算力有很大的要求。
(2) 特征过于稀疏会导致整个网络的收敛速度非常慢。因为每次只有极少数的权重会得到更新,这样会在样本数量有限的情况下导致模型不收敛。
红色
绿色