经典推荐模型:PNN
之前介绍的NeuralCF使用神经网络代替了协同过滤中的点积操作,并取得了一定的进步。但是,它只使用了用户-物品的共现矩阵进行建模,而忽略了其它特征,比如用户的性别、年龄等。
本文将要介绍PNN在模型中加入了更多的特征,并设计了更为精细的特征交叉方式。
PNN简介PNN,全称是Product-based Neural Networks,这里的Product特指PNN中的Product层。如果将Product层所做操作替换成简单的拼接(concat),那么就变成了我们之前介绍的Deep Crossing。因此,PNN最大的创新就在于Product层。
PNN总体结构PNN的结构如下图所示:
从下往上看。
Input Layer:Input层的输入是一些类别特征,它们一般是One-Hot编码的形式,比如第一个特征域Field1表示性别,如果当前输入样本性别为男,则Field1对应特征的值是”10”,若是女则为”01”,其余特征域同理。
举个栗子,假设共2个类别变量,分别为’性别,星期几’,那么对于如下样本:
1男,星期2
输入网络的数字为:
1100100000
最开始的10表示男,后面的 ...
经典推荐模型:NeuralCF
之前,我们在协同过滤的基础上,引入了矩阵分解技术,将用户-物品的共现矩阵分解得到用户的隐向量和物品的隐向量。由于隐向量的维度一般是低于其在共现矩阵中的维度的,从而加强了协同过滤模型对于稀疏矩阵的处理能力,提升了模型的泛化性能。具体可以看这篇:
https://hans0809.github.io/2021/08/31/%E5%BD%93SVD%E9%81%87%E8%A7%81CF/
这样,在获得用户和物品的隐向量后,求解用户的某一隐向量与物品的某一隐向量之间的内积,就得到了对应的评分。
这其中的原理是:两个向量求内积,相当于求解两者之间的余弦相似度,因此该操作可以度量两个向量之间的相似性。
内积操作的缺点假设隐向量所在空间维度为$K$,则第$u$个用户$p_u$对于第$i$个物品$q_i$的预测评分通过内积计算如下:从计算公式可以看出,内积操作是一种线性运算。
下图左侧是用户-物品的共现矩阵,右侧是相应的用户隐向量空间。
在左侧的共现矩阵中,$u_4$与$u_1$最相似,其次是$u_3$,最后是$u_2$。
而在右侧的隐空间中,$p_4$与$p_1$最相似,其次是$p_2$,最后是$ ...
经典推荐模型:DeepCrossing
众所周知,好的特征对于模型是至关重要的。在深度学习大行其道之前,往往采用手工设计特征的方法,在原始特征的基础上,衍生出一些有效特征,来帮助模型更好的学习。
当深度学习时代来临后,以上过程可以交由神经网络实现了自动化,这一优势最先在语音、图形识别等领域大放异彩。
在推荐领域,Deep Crossing于2016年由于微软提出,它实现了特征组合的自动化。
Deep Crossing的模型结构如下:
从下往上看。
恰如其名,最下方的Feature#代表特征,比如Feature#1代表第一个特征,Feature#2代表第2个特征。
将特征再做细分的话,有类别特征和数值特征。对于类别特征,比如Feature#1,通常是原特征的One-Hot编码形式,若类别数较多,则做One-Hot编码后的特征将非常稀疏,鉴于此,在这些特征后面接Embedding层,从而将稀疏特征稠密化;对于数值特征,比如Feature#2,则无需做Embedding。
Embedding对应的前向传播过程如下:
本质上就是在全连接层后面使用ReLU进行激活。通过设置$W$的维度,可以使得$X^{O}$的维度小于$X^{I}$ ...
经典推荐模型:AutoRec
在之前,我们介绍了协同过滤模型,该模型根据用户的行为历史生成用户-物品共现矩阵,利用用户相似性和物品相似性进行推荐。
本文要介绍的AutoRec也使用了用户-物品共现矩阵,但不同于协同过滤模型之处在于,AutoRec借鉴了自编码器(AutoEncoder)的思想,对用户向量或物品向量进行了自编码,利用自编码结果得到用户对于物品的评分,据此进行推荐排序。
假设共m个用户,n个物品,则共现矩阵的维度为mxn。
以物品的AutoRec(Item based AutoRec)为例,对应AutoRec的模型结构如下:
下方的$r^{(i)}$代表全部m个用户对于物品i的评分,它是一个m维的向量。中间层蓝色的两个圈圈代表隐藏层的两个神经元,于是,从下方的$r^{(i)}$到中间层的过程就对应着自编码器的编码过程。同理,从中间层到上方的$r^{(i)}$的过程对应了自编码器的解码过程。
通常,并不是所有用户都对物品i进行了评分,为了方便描述,这里暂且将这些称之为缺失位置。
在进行训练时,下方的m维向量$r^{(i)}$中对应的缺失位置会使用平均值等统计量进行填补,将填补后的向量其输入AutoRec, ...
深度推荐模型的前夜:MLR
直观理解MLRLS-PLM(Large Scale Piecewise Linear Model),又称MLR(Mixed Logistic Regression),从名字就可以看出,它是多个逻辑回归模型的组合。
对于某一数据集,假设用户特征为性别(男, 女),物品特征为物品类别(键盘,女装),即:
1234性别为男 性别为女 物品类别为键盘 物品类别为女装 是否点击(待预测标签)1 0 1 0 是0 1 0 1 是...
在该数据集上使用MLR时,首先会将该数据集的全部特征划分为若干区域,比如划分为如下4个区域:
1234567性别为男 物品类别为键盘性别为男 物品类别为女装性别为女 物品类别为键盘性别为女 物品类别为女装
在每一个区域,使用对应特征训练一个模型,比如逻辑回归模型。
当对新到来的样本进行预测时,MLR会预测该样本属于这些区域的概率(可以看作是权重),然后分别使用每个区域对应的LR对样本进行预测,最后将每个LR的预测结果加权求和得到 ...
RL基本概念
一、强化学习中的基本概念##state and action
policy根据观测到的状态做出决策,以控制Agent运动。
强化学习就是学pocily函数。
pocily函数一般是个概率密度函数,具有随机性。
比如,在玩剪刀石头布时,如果你的出拳策略不随机,那么就有规律可循,当对方观察到这一规律时,你就gg了。
reward强化学习的目标是使得reward更高。
state transition
agent environment interaction
Randomness in Reinforcement Learning
Play the game with AI
rewards and returns当前时刻的return定义为当前时刻以及之后时刻reward的总和。
但是时间越久,奖励越不明显,因此对应的权重可以设置小一些:
return中的随机性:
Action-value functions
State-Value Function
Value Functions Summary
Play the game with AI两种方式:
OpenAI-gym
Summary ...
何为空洞卷积?
卷积再回顾你可能经常看到,两个3x3的卷积核或者单独一个5x5的卷积核的感受野大小是相同的。
那么问题来了:
为何两者的感受野大小会相同呢?
既然相同,那为何大多数时候都选择两个3x3的卷积核呢?
对于第一个问题,可以用特征图尺寸计算公式来验证:
假设输入特征图尺寸为10x10, ,执行普通的卷积,无padding,stride=1,
对于两个3x3卷积:第一次卷积输出的特征图尺寸为$10-3+1=8$,第二次卷积输出的特征图尺寸为$8-3+1=6$
对于一个5x5卷积:输出特征图尺寸为$10-5+1=6$
对于第二个问题,答案就是显著降低了参数量。
具体地,对于卷积层而言,需要学习的参数就是卷积核对应的参数。不考虑偏置项,假设输入特征图的通道数为$C$,输出通道数为$C’$,对于两个尺寸为3x3的卷积核而言,所具有的参数量为$33CC’+33CC’=18CC’$,二对于一个尺寸为5x5的卷积核而言,所具有的参数量为$5*5CC’=25CC’$。
由此可见,前者拥有更小的参数量。
计算感受野所谓感受野,就是输出特征图中的某一个像素点能够看到输入特征图区域的大小。通常,我们会将多个卷 ...
何为转置卷积?
正如你所熟知的那样,卷积操作可以从特征图中提取信息,并且经过卷积的特征图的尺寸会变小或者不变。
那么问题来了,如果我想让特征图尺寸变大(即对特征图进行上采样),应该怎么做呢?
一种方法是,直接做插值操作,从而完成对特征图的上采样。
这的确可以,但是,这种上采样的过程中不包含可学习的参数,所以,一个想法冒出:可不可以也通过具有可学习参数的卷积操作实现对特征图的上采样呢?
这就引出了今天的主角:转置卷积。
什么是转置卷积以一维卷积为例,对于一个5维向量$x=[x_1,x_2,x_3,x_4,x_5]$,使用kernel_size为3的卷积核$W=[w_1,w_2,w_3]$做卷积操作,根据卷积后的特征图尺寸计算公式(默认步长为1,不加padding,不加dialation,不做分组)$$\frac{n-f+2p}{s}+1$$
可计算得到输出特征图(一维向量)的维度是$(5-3+2*0)/1+1=3$,不妨记输出向量为$z=[z_1,z_2,z_3]$.
事实上,上述操作在计算机中是以矩阵乘法的形式实现的。具体地,根据卷积核写出对应的Toeplitz矩阵,至于这是个啥,这里可以先不做了解 ...
电子商务AI算法大赛Top2方案分享
上一次,我们介绍了电子商务AI算法大赛中我个人的解决方案。虽然在经过一顿操作后,线上分数得到了肉眼可见的提升,但相比于大佬们的成绩还是差了亿点点的
所以呢,这次来解读top2选手的解决方案,从优秀开源代码中学习思路,积累经验。
关于赛题的介绍以及数据集说明,可以回看上一篇文章哈:xxxxxx
线下验证方案date字段代表的是第几天,训练集中date的取值范围是从1 到116,共116天;测试集中date的取值范围是117到123共7天。于是从训练集中划出最后7天的数据作为验证集进行线下验证:
而在最终提交时,取消验证集,用全部训练数据进行训练:
数据集划分代码如下:
123456def split_dataset(data, valid_start_date, gap): train = data[data['date']<valid_start_date].copy() valid = data[(data['date']>=valid_start_date)&(data['date']& ...
电子商务AI算法大赛baseline
目录抢先看:[TOC]
赛题背景随着电子商务与全球经济、社会各领域的深度融合,电子商务已成为我国经济数字化转型巨大动能。庞大的用户基数,飞速发展的移动互联网行业,balabalabala……
本次比赛提供消费门户网站“什么值得买”2021年1月-2021年5月真实平台文章数据约100万条,旨在根据文章前两个小时信息,利用当前先进的机器学习算法进行智能预估第三到十五小时的文章产品销量,及时发现有潜力的爆款商品,将业务目标转化成商品销量预测,为用户提供更好的产品推荐并提升平台收益。
赛题地址: https://www.automl.ai/competitions/19#home
数据介绍赛题数据包含以下部分:
1234- train.csv #训练数据- test.csv #测试数据- sample_submission.csv #样例预测文件- sample_submission.csv.zip #样例提交文件
数据集所含字段如下:
1234567891011121314151617181920212223242526字段名称 字段类型 字段说明 article_id int 文 ...