Spark编程基础-Python版本
第一章、基础概念目前的主流大数据技术:Hadoop、Spark、Flink、Beam.
Hadoop
MapReduce像写单机任务一样.
使用前提:任务必须满足可以分而治之.
YARNHadoop2.0出现.
统一调配资源,实现底层数据无缝共享.
Spark全能选手.
Hadoop的缺点
有些不能转成Map和Reduce的业务无法使用Hadoop.
需要反复迭代,磁盘IO开销大.
磁盘IO,任务之间的衔接延迟高.
衔接延迟:3个Map任务全部结束才能执行REduce任务.因此难以胜任多阶段的复杂任务.
Spark的优势Spark本质上也属于MapReduce,但是不再局限于Map和Reduce这两个操作,还可以执行其它操作,比如groupby,filter,join等等,因此具有更强大的表达能力.
Spark可以将数据读到内存中进行操作,提升了迭代时的运行效率.
Spark使用了有向无环图的调度机制,使得相关的操作可以优化,从而很多操作可以进行流水线化处理.
对比Hadoop和Spark的读取和查询:Hadoop每次都要读写磁盘,而Spark可以直接在内存中完成,所以性能更好.
S ...
经典推荐模型:Deep&Cross
本文介绍Deep&Cross模型,它沿用了Wide&Deep模型的设计思路,并且将Wide&Deep的Wide部分使用Cross Network进行了替换,解决了Wide&Deep需要人工选取交叉特征的麻烦。
Deep&Cross模型结构如下:
从下往上看。
将稀疏特征进行Embedding,将得到的结果与稠密特征(一般指的是数值型特征)进行拼接,这就是网络的输入$x_0$.
$x_0$再往上兵分两路,左路是Cross Network部分,右路是Deep部分。
先看左路。它是由多个Cross Layer构成的,Cross Layer执行的前向运算如下:
该运算可视化如下:
可以看到 ,$x_0$在每一层中都有参与。
事实上,随着Cross Layer的层数增加,原始输入$x_0$各个位置元素交叉的阶数也在增加,具体参见如下推导:
正因如此,Cross Network相比于Wide&Deep中的Wide部分拥有更强的特征交叉能力,而且,每一个Cross Layer的参数只有$w$和$b$,它们的维度和$x_0$的维度一致,因此参数量是线 ...
经典推荐模型:Wide&Deep
本文介绍谷歌于2016年提出的Wide&Deep模型,它兼具记忆能力与泛化能力,在谷歌商店的app推荐中效果显著。
Wide&Deep由记忆能力较强的Wide部分和泛化能力较强的Deep部分组成,接下来我们分别介绍这两部分,然后将它们组合起来,得到Wide&Deep.
WideWide部分是一个(广义)线性模型,比如逻辑回归,具有较强的记忆能力。
输入这种模型的特征可以通过交互产生新的有用特征,然后将这些新的特征与原始特征共同输入模型进行预测。
举个栗子,假设输入逻辑回归模型的特征中含有”已安装应用,在应用商店看到的应用”这俩特征,那么我们可以根据这俩特征得到一个新的交互特征:”已安装应用=xxx 并且 在应用商店看到的应用=yyy”.
使用上述方法构造特征,训练模型。当待预测的样本特征中也含有类似上述交互特征时,由于在训练集中存在相同特征,那么模型就能很快定位到训练集中出现相同模式时的标签。
假设训练集中出现”已安装应用=Youtube 并且 在应用商店看到的应用=facebook”这一交互特征,也就是说,用户安装了Youtube,并且在应用商店中看到了Fac ...
经典推荐模型: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’$。
由此可见,前者拥有更小的参数量。
计算感受野所谓感受野,就是输出特征图中的某一个像素点能够看到输入特征图区域的大小。通常,我们会将多个卷 ...