赞
踩
Wide & Deep Learning for Recommender Systems这篇文章介绍了一种结合宽线性模型和深度神经网络的方法,以实现推荐系统中的记忆和泛化。这种方法在Google Play商店的应用推荐系统中进行了评估,展示了其显著的性能提升。
推荐系统中的记忆和泛化
为了实现记忆和泛化,Wide & Deep模型结合了宽线性模型和深度神经网络:
宽组件的主要功能是实现记忆,即捕捉特征之间的频繁共现关系。这部分模型采用线性模型,利用交叉乘积特征来捕捉特征之间的高阶关系。
宽组件的线性组合公式:
其中:
宽组件通过权重向量 学习特征间的共现关系。例如,如果某用户安装了Netflix且展示了Pandora,则特征“AND(user_installed_app=netflix, impression_app=pandora)”的值为1,模型可以利用这个信息来进行记忆。
深组件的主要功能是实现泛化,即学习特征之间的潜在关系,处理未见过的新特征组合。深组件通过深度神经网络来实现,能够更好地捕捉复杂的非线性关系。
类别特征嵌入:将高维稀疏的类别特征转化为低维稠密的嵌入向量。每个类别特征(如“language=en”)被映射到一个32维的嵌入向量。公式:
其中, 是嵌入向量,
是类别特征。
其中:
深组件通过嵌入层和多层感知器学习特征之间的非线性关系,能够处理以前未见过的新特征组合。例如,通过学习用户的行为模式和上下文信息,模型可以生成新的推荐。
- import tensorflow as tf
-
- # 创建一个简单的模型,包括一个嵌入层、一个隐藏层和一个输出层
- model = tf.keras.Sequential([
- tf.keras.layers.Embedding(input_dim=4, output_dim=32, input_length=1),
- tf.keras.layers.Flatten(),
- tf.keras.layers.Dense(64, activation='relu'), # 隐藏层
- tf.keras.layers.Dense(1) # 输出层
- ])
-
- # 编译模型
- model.compile(optimizer='adam', loss='mse')
-
- # 打印嵌入层的权重(训练前)
- print("嵌入层权重(训练前):")
- print(model.layers[0].get_weights()[0])
-
- # 创建简单的数据
- import numpy as np
- x_train = np.array([[0], [1], [2], [3]])
- y_train = np.array([1.0, 2.0, 3.0, 4.0])
-
- # 训练模型
- model.fit(x_train, y_train, epochs=100, verbose=0)
-
- # 打印嵌入层的权重(训练后)
- print("嵌入层权重(训练后):")
- print(model.layers[0].get_weights()[0])

宽组件和深组件的输出通过加权和进行组合,作为最终的预测结果。在训练过程中,这两部分是同时优化的,使得模型能够平衡记忆和泛化的需求。具体过程如下:
宽组件的输出是原始输入特征和交叉乘积特征的线性组合:
深组件的输出是嵌入层和多层感知器处理后的结果:
其中, 是深度模型最后一层的激活值。
宽组件和深组件的输出通过加权和进行组合,作为最终的预测值:
其中, 是sigmoid激活函数,
和
分别是宽组件和深组件的权重向量,
是深组件最后一层的激活值,
是偏置项。
使用逻辑损失函数(logistic loss function)进行联合训练,通过反向传播算法同时优化宽组件和深组件的参数:
其中:
通过最小化这个损失函数,模型会在预测时更加准确地反映实际标签。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。