《深度学习推荐系统实战》 学习笔记 3月Day 24

195 阅读2分钟

18|Wide&Deep:怎样让你的模型既有想象力又有记忆力?

Wide&Deep 模型的结构

image.png

image.png

模型的记忆能力&模型的泛化能力

为了提高模型的泛化能力,需要引入Wide部分来增强模型的记忆能力,让模型学习历史数据中的重要规律。泛化能力指模型对新鲜样本和未出现过的特征组合的预测能力,是模型的重要性能之一。矩阵分解算法是为了解决协同过滤泛化能力不强而诞生的,通过生成用户和物品的隐向量来计算任意两个用户和物品之间的相似度,从而提高模型的泛化能力。

Wide&Deep 模型的 TensorFlow 实现

这里,我们也会像上节课一样,继续使用 TensorFlow 的 Keras 接口来构建 Wide&Deep 模型。具体的代码如下:

# wide and deep model architecture
# deep part for all input features
deep = tf.keras.layers.DenseFeatures(numerical_columns + categorical_columns)(inputs)
deep = tf.keras.layers.Dense(128, activation='relu')(deep)
deep = tf.keras.layers.Dense(128, activation='relu')(deep)
# wide part for cross feature
wide = tf.keras.layers.DenseFeatures(crossed_feature)(inputs)
both = tf.keras.layers.concatenate([deep, wide])
output_layer = tf.keras.layers.Dense(1, activation='sigmoid')(both)
model = tf.keras.Model(inputs, output_layer)

Wide 部分其实不需要有什么特殊操作,我们直接把输入特征连接到了输出层就可以了。但是,这里我们要重点关注一下 Wide 部分所用的特征 crossed_feature。

movie_feature = tf.feature_column.categorical_column_with_identity(key='movieId', num_buckets=1001)
rated_movie_feature = tf.feature_column.categorical_column_with_identity(key='userRatedMovie1', num_buckets=1001)
crossed_feature = tf.feature_column.crossed_column([movie_feature, rated_movie_feature], 10000)

小结

这节课,我们一起实现了业界影响力非常大的深度学习模型 Wide&Deep,它是由 Wide 部分和 Deep 部分组成的。其中,Wide 部分主要是为了增强模型的“记忆能力”,让模型记住“如果 A,那么 B”这样的简单但数量非常多的规则。Deep 部分是为了增强模型的“泛化能力”,让模型具备对于稀缺样本、以及从未出现过的特征组合的预测能力。Wide&Deep 正是通过这样取长补短的方式,让模型的综合能力提升。在具体实践的时候,我们继续使用 TensorFlow 的 Keras 接口实现了 Wide&Deep 模型。相比上节课 Embedding MLP 模型的实现,我们新加入了“用户已好评电影”和“当前评价电影”组成的交叉特征 crossed_feature,让 Wide 部分学习“一个喜欢电影 A 的用户,也会喜欢电影 B”这样的规则。好了,这就是我们这节课的主要内容,同样,我也把重要的知识点总结在了表格里,你可以利用它来巩固复习。

image.png此文章为3月Day25学习笔记,内容来源于极客时间《深度学习推荐系统实战》,强烈推荐该课程!

f90b5d6255252bda60a8c7852aee69a.jpg