- 商家货号:T001724351
- ISBN:9787302606284
- 出版日期:2022-10-01
- 页码:0
- 字数:0
- 装帧:
- 开本:
- 版次:
编辑推荐 |
|||
本书的重点是通过梳理脉络由浅入深地带领读者走进推荐算法领域并建立自己的推荐算法推理思路。配套112个示例源代码,1911分钟视频讲解。
|
|||
内容简介 |
|||
本书从理论结合实践编程来学习推荐系统。由浅入深,先基础后进阶,先理论后实践,先主流后推导。 第1章较为简单,仅初步带领大家了解什么是推荐系统及推荐系统的简史。第2章到第5章介绍的是主流的推荐算法及推荐算法的推导过程,这部分是本书的核心,每个算法都描述的非常详细且有具体代码帮助大家理解,深度学习的框架将采用PyTorch。第6章介绍的是商业及推荐系统的组成结构,第7章系统地介绍了推荐系统的评估指标及方式。第8章则介绍整个推荐工程的生命周期。第6~8章可随时抽取出来提前看。本书配套示例代码及微课视频,帮助读者快速入门推荐算法及系统。 本书可作为高等院校、科研机构或从事推荐系统工作的工程师的参考书籍,也可作为高年级本科生和研究生的学习参考书籍。
|
|||
作者简介 |
|||
|
|||
目录 |
|||
第1章 推荐系统的初步了解( 28min)
|
|||
精彩书评 | |||
|
|||
书摘 |
|||
第3章 进阶推荐算法 本章会介绍如今深度学习时代下热门的几个经典算法,以及如何推导深度学习推荐算法模型。笔者认为推荐算法工程师切勿生搬硬套前沿论文的模型。一定要有自己对于目前推荐场景的思路,学习他人的算法模型是为了帮助自己更好地建立思路,而不是单纯地搬运他人算法在自己的场景中使用。 因为对于推荐算法而言,至少现在并不存在一个万金油的模型可以覆盖一切场景,而是需要推荐算法工程师结合当前场景及当前的数据,结合前沿及经典算法的思路推导出最合适的推荐算法。 身处当代的大家,是否觉得目前正是推荐算法百家争鸣的年代呢?网上随便一查就可以查到诸多推荐算法,但其实如果纵观历史,每个年代当时的学问无不处于百家争鸣的状态,而之所以会对当代百家争鸣的状态更有印象,正是因为我们是局中人。 3.1神经网络推荐算法推导范式 6min 1992年,协同过滤问世之后,直到2003年才出现ItemCF算法,这11年间没有别的推荐算法吗?当然不是,只是经过多年的沉淀,成为经典的只有协同过滤而已,而今天众多的推荐算法也一样,20年后能流传下去的也不会太多,所以对于学习算法的大家,一定要在基础巩固的前提下,形成推导算法的范式。 自深度学习问世以来,神经网络的概念也随之而来。神经网络复杂吗?当然复杂,因为神经网络直接将算法的层次拉深且拉宽,动辄就会有好几个层级,以及无数个神经元。神经网络简单吗?其实简单无比,了解了基本网络层的组成后,就会发现深度学习神经网络像搭积木一样。 3.1.1ALS+MLP 15min 先从最基础的推荐算法ALS结合最基础的深度学习网络MLP开始讲解。首先,如果把ALS的模型结构画成神经网络图,则如图31所示。 多层感知机(MultiLayer Perceptron,MLP)[2]是深度学习的开端,简单理解是在最终计算前,使向量经过一次或多次的线性投影及非线性激活从而增加模型的拟合度。ALS结合MLP的神经网络如图32所示。 图31ALS神经网络示意图 图32ALSMLP示意图 6min 其中,每个隐藏层(Hidden Layer)都由一个线性层和非线性激活层组成。 线性层是y=w·x的一个线性方程的形式,非线性激活层 类似于Sigmoid、ReLU和Tanh等激活函数。线性层加非线性激活层的组合又被称为全连接层(Dense Layer)。 基础知识——非线性激活层的意义 这里顺便提一下,如果没有非线性激活单元,则多层的线性层是没有意义的。假设有l个隐藏线性层,则x经过多层投影得到第l层输出的这一过程可被描述为式(31)。 h1=w0·x h2=w1·h1 … hl=wl-1·hl-1 (31) 如果将此公式稍微改变一下形式,则可得 hl=wl-1…w1w0x(32) 所以可以发现,中间隐藏层的输出全部都没有意义,wl-1…w1w0这些计算最终只是输出一个第l层的权重wl,因为永远 进行的是线性变换,所以多次线性变换接近可由一次合适的线性变化代替,所以这个多层的神经网络与只初始化一个wl的单层神经网络其实并无差别,而加入非线性激活单元就不一样了,通常由σ(·)表示一次非线性激活计算,所以 l个隐藏层的公式就必须写成: h1=σ(w0·x) h2=σ(w1·h1) … hl=σ(wl-1·hl-1)(33) 如此一来,多层的神经网络就变得有意义了。 接下来是ALS+MLP的核心代码部分,代码如下: #代码的地址: recbyhand\chapter3\s11a_ALS_MLP.py class ALS_MLP (nn.Module): def __init__(self, n_users, n_items, dim): super(ALS_MLP, self).__init__() ''' :param n_users: 用户数量 :param n_items: 物品数量 :param dim: 向量维度 ''' #随机初始化用户的向量 self.users = nn.Embedding( n_users, dim, max_norm=1 ) #随机初始化物品的向量 self.items = nn.Embedding( n_items, dim, max_norm=1 ) #初始化用户向量的隐含层 self.u_hidden_layer1 = self.dense_layer(dim, dim //2) self.u_hidden_layer2 = self.dense_layer(dim//2, dim //4) #初始化物品向量的隐含层 self.i_hidden_layer1 = self.dense_layer logit = self.sigmoid(out) return logit 大家也许会有一个疑问,这里仅仅将用户的历史物品序列 通过RNN网络训练了一遍,对推荐能有效果吗?当然有,RNN的优势就在于在消息传递的过程中能保留顺序信息,所以把RNN层当作聚合用户的历史物品序列信息的函数会更好理解,也 就是说RNN最后一层的输出向量可以认为是用户向量与物品向量的拼接。如果还是不太 理解,则3.1.5节 有助于更好地理解RNN对推荐作用的原理。 3.1.5ALS结合RNN 大家对 ALS已经再熟悉不过了,中心思想是求用户向量与物品向量的点积。求点积 不是重点,重点是用户向量与物
|
商品评价
100%好评
共有0人参与评分评价商品