上图为Sparse Feature 层到 Dense Embedding 层的神经元连接示意图。
1、每个圆点代表一个神经元,神经元本身是没有数值的,我们需要知道的是Sparse Feature 到 Embedding 层之间连线的权重,这个权重就是所谓的Embedding Vector。
2、一共有m个field,每个field对应k个嵌入维数,所以嵌入层神经元的个数为m*k。
3、Embedding Vector的确定:
在FM里得到的隐变量Vik现在作为了嵌入层网络的权重。假设我们的k=5,首先,对于输入的一条记录,同一个field 只有一个位置是1,那么在由输入得到embedding vector的过程中,输入层只有一个神经元起作用,得到的embedding vector其实就是输入层到embedding层该神经元相连的五条线的权重,即vi1,vi2,vi3,vi4,vi5。这五个值组合起来就是我们在FM中所提到的Vi。在FM部分和DNN部分,这一块是共享权重的,对同一个特征来说,得到的Vi是相同的。
一共有m 个field ,所以得到的embedding vector 是 m*k 的矩阵。(这里是错的,正确的是一共有N个特征,得到N*k的矩阵,因为即便是特征的值为0,但是它依然参与了计算。样本1的第一个特征为0,但是样本2的第一个特征就为1了)
2019-4-29 修正:看实现的代码,这里,就是m*k 。 N个特征作用在<w,x>这里的 w [1,N]。m个field作用在嵌入层。
field 经过one-hot 编码之后,假设field编码之后的长度为n, 对应的input layer 只有一个位置是1,其余n-1位置是0。