经典推荐模型: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 文 ...
推荐模型:从逻辑回归到POLY2到FM再到FFM
无论是基于内容的推荐算法,还是协同过滤算法,它们都只用到了用户和物品之间的行为信息,所以能不能加入更多的信息,比如用户/物品本身的信息以及上下文信息来更好地指导推荐呢?
事实上,这正在把推荐问题转化为我们所熟悉的机器学习问题。具体来讲,给定训练集,利用训练集的特征和标签训练一个模型,然后用该模型指导推荐。
在之前讲解的协同过滤算法中,我们通常是预测某用户对于某些物品的打分,然后按照打分值从高到低排列物品,选择前几个推荐给用户。
而这里,训练好的模型会直接预测某用户是否会对物品产生正反馈(比如购买一件商品,观看一部电影等),若会,则将物品推荐给该用户。没错,这就是一个二分类问题。
接下来介绍几个经典的相关模型,有一些可能已经听说过,比如逻辑回归,嗯,就从它开始吧~
逻辑回归逻辑回归(Logistic Regression, LR)用于分类任务,它使用sigmoid函数,将取值范围为全体实数的线性回归表达式$w_1x_1+w_2x_2+…+w_kx_k+b$映射到0和1之间:
123z=np.array(range(-10,10))sigm=1/(1+pow(2.73,-z))plt.pl ...
当SVD遇见CF
在之前的协同过滤算法中,我们使用了共现矩阵:
共现矩阵中每一个元素是特定用户对于特定物品(这里是电影)的打分。
但这存在一个问题:算法头部效应较明显,导致模型泛化能力较弱。具体来说,热门物品容易跟大量物品产生相似性,而尾部的物品由于其特征向量较稀疏,很少与其它物品产生相似性,从而很少被推荐。
一种比较好用的方法是,通过矩阵分解技术获取隐向量,用更稠密的隐向量来替代之前共现矩阵中对应的行(用户)和列(物品)组成的向量,从而加强了协同过滤模型处理稀疏矩阵的能力,提升了模型的泛化能力。
矩阵分解方法较多,比如梯度下降,SVD等.
隐向量的维度可自行设定或根据一定的规则确定(稍后就会看到),每一个维度都代表一种具体的含义。比如在之前举过的栗子中,每部电影的特征由一个二维向量来表示,两个维度分别代表了该电影中爱情元素和动作元素的含量;同样,每个用户也由一个二维向量来表示,两个维度分别代表该用户对于爱情元素和动作元素所喜爱的程度。其中所提及的二维向量,本质上就是隐向量。
回忆一下,在上面的栗子中,我们采用了梯度下降的方法来获取隐向量。
在接下来,你将看到另一种获取隐向量的方法:奇异值分解(SVD) ...