1.本发明属于广告点击率推荐技术领域,具体为一种融合压缩交叉网络的混合推荐方法。
背景技术:2.点击率预测模型设计中需要考虑特征数据的基本特性,如果数据存在稀疏性等问题时,一般要通过合适的方式进行处理,针对此问题处理的方法较多,而常用的是特征组合方法,将不同特征之间的交互性考虑在内,通过高阶特征组合[9],得到用户在广告上的偏好。其中在隐性特征组合上大多采用了深度神经网络,这种方式存在一定的不足,仅仅能够学习特征的部分非线性组合关系,因此无法保持较高的表达能力。针对上述问题,部分学者开展了相关的研究工作,致力于挖掘得到不同特征组合的非线性关系,使得点击率预测模型达到更高的预测精度,从而提高广告推荐的精准性。
[0003]
然而此类模型复杂度较高,在效率上相对于lr模型等存在明显的劣势,难以实时为用户提供推荐的结果。因此有必要针对基于深度学习的点击率预测模型深入研究,解决存在的瓶颈问题,为其走向实用化提供足够的支持。
技术实现要素:[0004]
本发明的目的在于:为了解决上述提出的问题,提供一种融合压缩交叉网络的混合推荐方法。
[0005]
本发明采用的技术方案如下:一种融合压缩交叉网络的混合推荐方法,所述融合压缩交叉网络的混合推荐方法包括以下步骤:
[0006]
s1:将用户信息和商品信息等数据处理为稀疏矩阵的形式作为模型的输入;
[0007]
s2:将输入的稀疏矩阵经过embedding层,通过向量内积处理为稠密的特征向量,即embedding向量;
[0008]
s3:进行embedding处理,首先,在deepfc模型的输入层对输入数据进行数据预处理。然后再经过embedding处理,将多个领域 (field)组成的高维稀疏分类特征通过神经网络嵌入到低维密集特征。通过embedding的处理,提升了向量之间的交互。
[0009]
将所有的embedding向量作为一个矩阵公式化为:
[0010][0011]
其中m表示field的数量,表示embedding特征, d为embedding维度
[0012]
s4:把计算的稠密特征向量作为fm模块、cin模块和dnn模块三部分输入,从线性低阶交互、线性组合和非线性高阶交互三个角度分别处理输入特征
[0013]
s5:采用等权重线性加权各部分特征结果作为中间层的输出。输出特征再进行一层全连接,在激活函数作用后,作为模型整体的输出层;
[0014]
s6:在模型确定出之后,接着还应该设置适宜的参数,从而提高模型的性能。在研
究时目标函数设为j(θ),通过求取此函数的最小值而使得实测值和预测值的偏差最小,从而起到优化模型的目的,通过优化的模型进行预测也有利于提高结果的精度。对参数进行训练时应用了adam[45]方法。
[0015]
在求解最优化问题时adam算法有明显的优势,基于这种方法对数据规模大的问题可以取得良好的效果,适用性强。这种算法融合了 adagrad、rmsprop的优势[46]。在进行参数更新时,adagrad算法应用了二阶动量,这样可以实现一定自适应效果。在对步长进行设置时,主要考虑的因素为更新频次。在更新频次大情况下,应该设置的步长小一些,相反情况下则设置大步长。根据实际应用经验表明,这种算法的缺陷表现为,学习率趋于零时,训练过程会提前结束,这样降低了训练效果。rmsprop算法则避免了持续积累问题[47]。adam在训练时对应的流程如下:
[0016]
输入:训练数据,学习率η,批量数据大小n
[0017]
输出:deepfc模型
[0018]
1:初始化deepfc模型
[0019]
2:for训练迭代次数do:
[0020]
3:通过adam最小化目标函数:
[0021][0022]
更新deepfc模型参数
[0023]
4:endfor;
[0024]
s7:对deepfc模型的进行模型压缩与加速;
[0025]
先进行一定次数的迭代训练,接着进行剪枝操作,在剪枝结束之后再次进行训练,以此实现对网络的有效调整。持续进行上述过程,并对稀疏速率进行合理地设置,即在不同的网络状态下设置不同的速率,如果网络敏感度较高,则速度后期增速减小;如果网络处于稳定的状态,则初期速率增速较大。上述算法在原理上与基于弱子模优化的贪心算法是相似的[60],然而后者受到剪枝中不确定性的影响,导致权重不佳,
[0026]
修剪策略为:
[0027]
输入:设置目标稀疏率s、阻尼比和
[0028]
输出:稀疏模型
[0029]
1:训练训练网络进行一次迭代
[0030]
2:修剪
[0031]
fork=1,2...n
[0032]
进行一次迭代训练网络。
[0033]
枚举模型中的候选组件x。
[0034]
更新当前稀疏率
←
。
[0035]
修剪底部%的较大交叉熵误差的边。
[0036]
保存完成修剪的组件
[0037]
3:模型预测
[0038]
将稀疏模型转化为有效结构。
[0039]
在一优选的实施方式中,所述步骤s4中,cin模块的输入输出描述如下:
[0040]
输入:cin网络的输入即embedding的输出,
[0041]
输出:cin的第k层的输出,其中hk为第k层特征向量的数量,且h0=m;
[0042]
第k层的各个特征向量的表达式如下:
[0043][0044]
该式中,
⊙
表示哈达玛乘积(hadamardproduct),即对应矩阵元素相乘。h、hk分别表示特征向量数量和第k层特征向量的数量, 1≤h≤hk。表示hk-1层二维矩阵,x0∈rm×d表示经embedding层处理后的第0层二维矩阵,表示第0层第i个域的特征向量,表示第k层的二维矩阵。例如:t表示cin模块的层数,每个隐藏层xk(其中,k∈[1,t])都与第 0层的二维向量进行计算,最终
[0045]
在一优选的实施方式中,所述步骤s4中,对于cin的计算方式,以第k+1层的输出为例。首先进行外积操作:引入一个过渡张量它是隐藏层与输出层的外积,然后将整个可以视为图片,视为过滤器,过滤器沿着embedding维度(d)滑动。然后得到隐藏向量这被称为一个特征图或特征映射(featuremap)。
[0046]
因此xk是hk个不同特征映射的集合。cin网络种的压缩指的便是第k个隐藏层将hk-1
×
m向量空间压缩至hk向量。
[0047]
定义t为整个网络的深度。每个隐藏层的二维矩阵为xk,k∈[1,t], 对于第k层,将所有的特征映射进行一个加和池化操作 (sumpooling),对公式(3.2)得到的各隐藏层的二维矩阵进行加和池化操作,即:
[0048][0049]
其中,i∈[1,hk],第k层的池化向量cin 模块的输出向量结果即为将各层的池化向量串联,即:
[0050][0051]
由上述计算公式可知,cin模型的第k层w
k,h
对应参数大小为 hk
×
hk-1
×
m,由于最后sigmoid函数中的w0,因此cin模型总的空间复杂度为第k层中,两个特征交互得到中间层的时间复杂度是o(mhd),由于每个隐藏层有h个特征层,cin中包含t层,因此总的时间复杂是o(mh2dt)。
[0052]
cin模块的处理过程和cnn网络提取知识特征图的过程很类似,也就是先基于各卷积核提取输入数据的各方面信息,接着进行池化处理,以便对其中重要信息组合。在cin中和各个特征映射保持对应关系。可在加和池化操作基础上汇总特征映射相关信息。
[0053]
在一优选的实施方式中,所述步骤s4中,dnn模块通过前馈网络来得到隐性高阶特征组合,通过这种处理方式可以组合形成具有价值的新特征,从而改善模型的性能。
[0054]
前馈神经网络,作为一种非线性模型已经广泛应用到了多个领域中。该模型的基本原理如下所示:在变量从输入端到输入端的过程中需要通过隐含层进行处理,而隐含层的数目往往不低于1个,在各个层次中涉及到了大量的神经元,这里的总层数仅仅包括隐含层和输出层,并不包括输入层。
[0055]
对应的输出表达式如下:
[0056]
z=w1x1+w2x2+w3x3+w0ꢀꢀꢀ
(3.5)
[0057]
y=g(z)
ꢀꢀꢀ
(3.6)
[0058]
在上述公式内,w1,w2,w3均为神经元参数,x1,x2,x3代表输入, y代表对应的输出;g(.)代表激活函数,使用较多的包括relu、sigmoid函数等,一般需要结合具体的要求选择合适的激活函数。目前在深度学习领域中广泛采用了sigmoid函数,其公式为
[0059][0060]
在一优选的实施方式中,所述步骤s4中,sigmoid函数的输出范围限定在0到1区间,它会对每个单元的输出进行归一化,适合将预测概率作文输出的模型。tanh函数表达式为该函数常用于二分类问题的隐藏层。relu函数和leakyrelu函数不以0 为中心,存在存在输入为负时,函数完全失效。在本次研究中采用的激活函数是sigmoid函数,该函数的形状以及概率密度均为正态分布,在难以确定样本分布的情况下可以通过正态分布近似表示,所以选择sigmoid函数是比较合适的。
[0061]
dnn可以对非线性高阶特征进行提取,具备了较强的非线性处理能力,其公式如下:
[0062]
a0=[e1,e2,
…
,em]
ꢀꢀꢀ
(3.7)
[0063]a(l+1)
=σ(w
(l)a(l)
+b
(l)
)
ꢀꢀ
(3.8)
[0064][0065]
在上述公式内,a(0),a(l+1)分别是网络的输入、l+1层输出;σ(.)代表激活函数;w(l),b(l)依次代表l层的权重、偏差;ei(i ∈[1,...,m])代表m个域的值;|h|代表隐含层数目。
[0066]
根据图中的信息可以明显地看到,前馈神经网络内的各个层次之间密切相关,当前层次的输入即为先前层次的输出,通过这种方式可以将输入信息逐层传输到最终的输出层中。而在实际模型中需要确定合适的输入数据,对于点击率预测模型一般采用embedding层处理之后的数据,将这些数据统一输入到模型内进行处理。
[0067]
在一优选的实施方式中,所述步骤s7中,还需要考虑更多权重和权值的非共享的全连接层。对这种类型网络而言,权值不共享,因而其中的权重和连接存在唯一对应关系。其相应的输入表示为
[0068]
其中n=1,2,
…
,n对应于输入数据量。在处理过程中根据前向传播算法,非激活的输出值neth,这样就可通过如下表达式描述出lk为输入神经元:
[0069][0070]
以上表达式中,代表权重矩阵。对应的输出结果被 softmax函数所激活,式4.2描述其一般表达式,神经元在激活情况下,其输出值y0可具体描述如下:
[0071][0072]
yh=f(neth)
ꢀꢀꢀ
(4.3)
[0073]
其中c
′
表示非c的各参数,对神经网络中的各连接,假设全会被剪枝掉,接着计算确定出剪枝后神经元的激活函数值相应计算表达式为:
[0074][0075]
根据以上分析可知,yh和的差异表现为右边有没有被假设剪枝。在处理过程中基于矩阵w进行简化,而剪枝边的权重假设,这种情况下w
′
h,k
被置为零。各边都被假设剪枝,同时边与权重存在一定唯一对应关系。这样全部与w的矩阵形状保持一致。在计算过程中确定出yh和后,然后带入数据获得原神经元和剪枝后神经元输出的交叉熵。相应的交叉熵均值可通过如下公式确定出:
[0076][0077]
上式中,c
hk
对应于每条被剪枝边的交叉熵,在进行剪枝判断时,主要是依据此参数。c
hk
为非负数,这样可以为剪枝过程提供支持,也对神经元输入起到促进作用。其中c
hk
值反映出此边对于输出神经元的影响权重。由此可判断出对全部的c
hk
,其中k=1,2,
…
,num_k,接着对全部正值通过降序的模式排列,将所得结果描述为desc
hk
。然后依据目标稀疏度,将desc
hk
进行划分而形成两部分,其中含有的参数分别为λ*num_k和(1-λ)*num_k个。
[0078]
在描述过程中对含有最小交叉熵值的权重,可以对其进行保留,这样还可以和其余权重进行互补。设l表示有较小c
hk
,这种条件下进行划分时,des c
hk
能够被分为三个部分,其中各部分含有的参数量分别为μ*num_k、λ*num_k和(1-λ)*num_k个。被剪枝权重的比例与数量保持固定,二者和参数λ存在相关性。
[0079]
在一优选的实施方式中,所述步骤s4中,cin组件和dnn组件是导致推理时间长的主要原因。对cin分量进行剪枝后,dnn分量成为限制,需要对dnn分量进行进一步剪枝。embedding层的剪枝对计算没有明显的加速。在cin和dnn分量权重的中等scin%稀疏度下,相应的加速可以接近1/(1-scin%)倍。然而,当稀疏度scin%大于 90%时,压缩行存储等稀疏结构的计算偏差和开销将变化缓慢。对于 dnn分量的剪枝,随着dnn分量中稀疏性dnn%的增加,加速速度变得更加显著。
[0080]
在embedding层中的修剪也显著减少了deepfc中的参数数量,从而节省了大量内存。在embedding层中,emb%的稀疏性将参数的数量从减少到(1-emb%)。在cin组件中,权重的数量(不包括偏差)可以从o(nkhc2l)减少到o(nkhc2l)(1-emb%)。同理,在dnn组件中,
权重的数量(不包括偏差)可以从o(lh2+nkh)减少到o(lh2+nkh)(1-emb%)。
[0081]
由于embedding向量中的参数在deepfc中的总参数中占主导地位,所以embedding向量上emb%的稀疏性导致总内存减少约1/(1
‑ꢀ
emb%)倍。
[0082]
在一优选的实施方式中,所述步骤s7中,模型无论是进行训练还是压缩,都需要存储在硬件上才能进行应用,因此模型存储是模型压缩后的必要步骤。采用非结构化方法对模型进行剪枝,剪枝后模型的权重矩阵是非规则化的,权重矩阵中存在大量的零元素。存储大量重复的零元素不光浪费了存储的空间,还花费了大量对这些零元素的无效计算时间。因此,对非规则化的稀疏矩阵采用稀疏存储的方法进行有效存储有助于减少存储模型大小并提高计算效率。
[0083]
本次实验采用压缩行存储(compressedrowstorage,crs存储) 稀疏权值矩阵。csr存储方法通过采用3个数组分别存储全部非零元素的数值、列号和行偏移。行偏移记录的是每一行的第一个非零元素在数值中的起始偏移位置。另外,为了记录矩阵中非零元素的个数,在行偏移的最后会补上矩阵全部的非零元素个数。crs存储方法具体如下所示:
[0084]
v:用来存储矩阵中的非零元素的值;
[0085]
col_index:第i个元素记录了v[i]元素的列数(index从0开始);
[0086]
(3)row_index:第i个元素记录第i行到第1行中包含的非零元素的数量。
[0087]
令a=row_index[row],b=row_index[row+1],则v[a,b)的行数等于row,再结合col_index,即可得到非零元素的行数和列数。
[0088]
例如:
[0089][0090]
v=[8,9,10,85,65,7,45,21]
[0091]
col_index=[0,1,2,3,3,4,1,5]
[0092]
row_index=[0,2,4,6,8]
[0093]
假如获取“10”的坐标位置,通过v得到index=2,通过col_index 得到列数为2,2∈[2,4)=[row_index[2],row_index[2+1]),所以行数为1,最终10的坐标为(1,2)。
[0094]
综上所述,由于采用了上述技术方案,本发明的有益效果是:
[0095]
1、本发明中,通过前馈神经网络处理之后,实现了特征信息的非线性组合,通过这种方式可以得到多种模式的特征组合,但是主要是隐性特征组合。因为在该网络中包括大量的参数,并且难以定量描述不同神经元之间的关联性,所以在前馈网络中输入特征之后并不能准确得到输入、输出之间的关系。
[0096]
2、本发明中,设计的deepfc模型内包括较多的神经元,训练过程中部分神经元之间往往会存在一定的关联性,由此可能会导致过拟合问题。考虑到上述问题,采用引入dropout的方式能够有效的降低神经元之间的共适应关系,避免神经网络对局部神经元的过分依赖,从而提高模型泛化性能。
[0097]
3、本发明中,针对当前推荐模型特征组合不充分的问题,提出了 deepfc模型,模型主要采用了因子分解机、压缩交叉网络和深度神经网络三种方法并行操作。该模型可以较好的解决模型组合不充分的问题。其中,deepfc模型分别采用三种方法并行组成,是由于
当前模型一般仅考虑低阶、显性高阶和隐形高阶这三种方式中的一到两种方式。例如当前已提出的deep&cross模型、deepfm模型和xdeepfm 模型等。之所以将高阶显性与高阶隐形进行组合实验,是因为现有模型仅单纯的采用其中一种方式。因此在原有模型的基础上进行了改良,对高阶和低阶的特征组合进行了研究。
[0098]
4、对比当前经典的深度学习推荐模型可知,这些经典模型均存在特征冗余较多的问题。而轻量级deepfc模型则是将deepfc模型中 cin模块和dnn模块进行权重修剪,同时对embedding层进行了修剪,前者通过两个主要模块进行非结构剪枝实现了模型的特征参数的压缩,减少计算参数;后者通过对embeding层进行修剪,减小了模型的存储大小。由此可知剪枝操作对于推荐模型是非常重要的优化方法,值得进行更深入地研究。
[0099]
5、两个模型都在ctr预估的经典数据集上进行了实验,并与其它同为wide&deep结构的组合模型:dcn模型、deepfm模型和xdeepfm 模型进行了对比。通过实验,证明了deepfc模型的结构设计和对 deepfc模型中cin模块和dnn模块剪枝策略对未来ctr预测组合模型的设计与优化具有较好的指导作用。
附图说明
[0100]
图1为本发明的deepfc模型的整体框架示意图;
[0101]
图2为本发明中输入端的结构示意图;
[0102]
图3为本发明中外积操作示意图;
[0103]
图4为本发明中中间张量的压缩过程示意图;
[0104]
图5为本发明中cin模型计算的整体流程示意图;
[0105]
图6为本发明中神经元输入输出关系图示意图;
[0106]
图7为本发明中前馈神经网络结构图示意图;
[0107]
图8为本发明中聚类量化示意图。
具体实施方式
[0108]
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
[0109]
参照图1-8,
[0110]
实施例:
[0111]
一种融合压缩交叉网络的混合推荐方法,所述融合压缩交叉网络的混合推荐方法包括以下步骤:
[0112]
s1:将用户信息和商品信息等数据处理为稀疏矩阵的形式作为模型的输入;
[0113]
s2:将输入的稀疏矩阵经过embedding层,通过向量内积处理为稠密的特征向量,即embedding向量;
[0114]
s3:进行embedding处理,首先,在deepfc模型的输入层对输入数据进行数据预处理。然后再经过embedding处理,将多个领域 (field)组成的高维稀疏分类特征通过神经网络嵌入到低维密集特征。通过embedding的处理,提升了向量之间的交互。
[0115]
将所有的embedding向量作为一个矩阵公式化为:
[0116][0117]
其中m表示field的数量,表示embedding特征, d为embedding维度
[0118]
s4:把计算的稠密特征向量作为fm模块、cin模块和dnn模块三部分输入,从线性低阶交互、线性组合和非线性高阶交互三个角度分别处理输入特征
[0119]
s5:采用等权重线性加权各部分特征结果作为中间层的输出。输出特征再进行一层全连接,在激活函数作用后,作为模型整体的输出层;
[0120]
s6:在模型确定出之后,接着还应该设置适宜的参数,从而提高模型的性能。在研究时目标函数设为j(θ),通过求取此函数的最小值而使得实测值和预测值的偏差最小,从而起到优化模型的目的,通过优化的模型进行预测也有利于提高结果的精度。对参数进行训练时应用了adam[45]方法。
[0121]
在求解最优化问题时adam算法有明显的优势,基于这种方法对数据规模大的问题可以取得良好的效果,适用性强。这种算法融合了 adagrad、rmsprop的优势[46]。在进行参数更新时,adagrad算法应用了二阶动量,这样可以实现一定自适应效果。在对步长进行设置时,主要考虑的因素为更新频次。在更新频次大情况下,应该设置的步长小一些,相反情况下则设置大步长。根据实际应用经验表明,这种算法的缺陷表现为,学习率趋于零时,训练过程会提前结束,这样降低了训练效果。rmsprop算法则避免了持续积累问题[47]。adam在训练时对应的流程如下:
[0122]
输入:训练数据,学习率η,批量数据大小n
[0123]
输出:deepfc模型
[0124]
1:初始化deepfc模型
[0125]
2:for训练迭代次数do:
[0126]
3:通过adam最小化目标函数:
[0127][0128]
更新deepfc模型参数
[0129]
4:endfor;
[0130]
s7:对deepfc模型的进行模型压缩与加速;
[0131]
先进行一定次数的迭代训练,接着进行剪枝操作,在剪枝结束之后再次进行训练,以此实现对网络的有效调整。持续进行上述过程,并对稀疏速率进行合理地设置,即在不同的网络状态下设置不同的速率,如果网络敏感度较高,则速度后期增速减小;如果网络处于稳定的状态,则初期速率增速较大。上述算法在原理上与基于弱子模优化的贪心算法是相似的[60],然而后者受到剪枝中不确定性的影响,导致权重不佳,
[0132]
修剪策略为:
[0133]
输入:设置目标稀疏率s、阻尼比和
[0134]
输出:稀疏模型
[0135]
1:训练训练网络进行一次迭代
[0136]
2:修剪
[0137]
fork=1,2...n
[0138]
进行一次迭代训练网络。
[0139]
枚举模型中的候选组件x。
[0140]
更新当前稀疏率
←
。
[0141]
修剪底部%的较大交叉熵误差的边。
[0142]
保存完成修剪的组件
[0143]
3:模型预测
[0144]
将稀疏模型转化为有效结构。
[0145]
所述步骤s4中,cin模块的输入输出描述如下:
[0146]
输入:cin网络的输入即embedding的输出,
[0147]
输出:cin的第k层的输出,其中hk为第k层特征向量的数量,且h0=m;
[0148]
第k层的各个特征向量的表达式如下:
[0149][0150]
该式中,
⊙
表示哈达玛乘积(hadamardproduct),即对应矩阵元素相乘。h、hk分别表示特征向量数量和第k层特征向量的数量, 1≤h≤hk。表示hk-1层二维矩阵,x0∈rm×d表示经embedding层处理后的第0层二维矩阵,表示第0层第i个域的特征向量,表示第k层的二维矩阵。例如:t表示cin模块的层数,每个隐藏层xk(其中,k∈[1,t])都与第 0层的二维向量进行计算,最终
[0151]
所述步骤s4中,对于cin的计算方式,以第k+1层的输出为例。首先进行外积操作:引入一个过渡张量它是隐藏层与输出层的外积,然后将整个可以视为图片,视为过滤器。过滤器沿着embedding维度(d)滑动。然后得到隐藏向量这被称为一个特征图或特征映射(featuremap)。
[0152]
因此xk是hk个不同特征映射的集合。cin网络种的压缩指的便是第k个隐藏层将hk-1
×
m向量空间压缩至hk向量。
[0153]
定义t为整个网络的深度。每个隐藏层的二维矩阵为xk,k∈[1,t], 对于第k层,将所有的特征映射进行一个加和池化操作 (sumpooling),对公式(3.2)得到的各隐藏层的二维矩阵进行加和池化操作,即:
[0154][0155]
其中,i∈[1,hk],第k层的池化向量cin 模块的输出向量结果即为将各层的池化向量串联,即:
[0156]
[0157]
由上述计算公式可知,cin模型的第k层w
k,h
对应参数大小为 hk
×
hk-1
×
m,由于最后sigmoid函数中的w0,因此cin模型总的空间复杂度为第k层中,两个特征交互得到中间层的时间复杂度是o(mhd),由于每个隐藏层有h个特征层,cin中包含t层,因此总的时间复杂是o(mh2dt)。
[0158]
cin模块的处理过程和cnn网络提取知识特征图的过程很类似,也就是先基于各卷积核提取输入数据的各方面信息,接着进行池化处理,以便对其中重要信息组合。在cin中和各个特征映射保持对应关系。可在加和池化操作基础上汇总特征映射相关信息。
[0159]
所述步骤s4中,dnn模块通过前馈网络来得到隐性高阶特征组合,通过这种处理方式可以组合形成具有价值的新特征,从而改善模型的性能。
[0160]
前馈神经网络[40],作为一种非线性模型已经广泛应用到了多个领域中。该模型的基本原理如下所示:在变量从输入端到输入端的过程中需要通过隐含层进行处理,而隐含层的数目往往不低于1个,在各个层次中涉及到了大量的神经元,这里的总层数仅仅包括隐含层和输出层,并不包括输入层。
[0161]
对应的输出表达式如下:
[0162]
z=w1x1+w2x2+w3x3+w0ꢀꢀꢀ
(3.5)
[0163]
y=g(z)
ꢀꢀꢀ
(3.6)
[0164]
在上述公式内,w1,w2,w3均为神经元参数,x1,x2,x3代表输入, y代表对应的输出;g(.)代表激活函数,使用较多的包括relu、 sigmoid函数等,一般需要结合具体的要求选择合适的激活函数。目前在深度学习领域中广泛采用了sigmoid函数,其公式为
[0165][0166]
所述步骤s4中,sigmoid函数的输出范围限定在0到1区间,它会对每个单元的输出进行归一化,适合将预测概率作文输出的模型。tanh函数表达式为该函数常用于二分类问题的隐藏层。relu函数和leakyrelu函数不以0为中心,存在存在输入为负时,函数完全失效。在本次研究中采用的激活函数是sigmoid函数,该函数的形状以及概率密度均为正态分布,在难以确定样本分布的情况下可以通过正态分布近似表示,所以选择sigmoid函数是比较合适的。
[0167]
dnn可以对非线性高阶特征进行提取,具备了较强的非线性处理能力,其公式如下:
[0168]
a0=[e1,e2,
…
,em]
ꢀꢀꢀ
(3.7)
[0169]a(l+1)
=σ(w
(l)a(l)
+b
(l)
)
ꢀꢀꢀ
(3.8)
[0170][0171]
在上述公式内,a(0),a(l+1)分别是网络的输入、l+1层输出;σ(.)代表激活函数;w(l),b(l)依次代表l层的权重、偏差;ei(i ∈[1,...,m])代表m个域的值;|h|代表隐含层数目。
[0172]
根据图中的信息可以明显地看到,前馈神经网络内的各个层次之间密切相关,当前层次的输入即为先前层次的输出,通过这种方式可以将输入信息逐层传输到最终的输出
层中。而在实际模型中需要确定合适的输入数据,对于点击率预测模型一般采用embedding层处理之后的数据,将这些数据统一输入到模型内进行处理。
[0173]
所述步骤s7中,还需要考虑更多权重和权值的非共享的全连接层。对这种类型网络而言,权值不共享,因而其中的权重和连接存在唯一对应关系。其相应的输入表示为其中n=1,2,
…
,n 对应于输入数据量。在处理过程中根据前向传播算法,非激活的输出值neth,这样就可通过如下表达式描述出lk为输入神经元:
[0174][0175]
以上表达式中,代表权重矩阵。对应的输出结果被 softmax函数所激活,式4.2描述其一般表达式,神经元在激活情况下,其输出值y0可具体描述如下:
[0176][0177]
yh=f(neth)
ꢀꢀꢀ
(4.3)
[0178]
其中c
′
表示非c的各参数,对神经网络中的各连接,假设全会被剪枝掉,接着计算确定出剪枝后神经元的激活函数值相应计算表达式为:
[0179][0180]
根据以上分析可知,yh和的差异表现为右边有没有被假设剪枝。在处理过程中基于矩阵w进行简化,而剪枝边的权重假设,这种情况下w
′
h,k
被置为零。各边都被假设剪枝,同时边与权重存在一定唯一对应关系。这样全部与w的矩阵形状保持一致。在计算过程中确定出yh和后,然后带入数据获得原神经元和剪枝后神经元输出的交叉熵。相应的交叉熵均值可通过如下公式确定出:
[0181][0182]
上式中,c
hk
对应于每条被剪枝边的交叉熵,在进行剪枝判断时,主要是依据此参数。c
hk
为非负数,这样可以为剪枝过程提供支持,也对神经元输入起到促进作用。其中c
hk
值反映出此边对于输出神经元的影响权重。由此可判断出对全部的c
hk
,其中 k=1,2,
…
,num_k,接着对全部正值通过降序的模式排列,将所得结果描述为deschk。然后依据目标稀疏度,将desc
hk
进行划分而形成两部分,其中含有的参数分别为λ*num_k和(1-λ)*num_k个。
[0183]
在描述过程中对含有最小交叉熵值的权重,可以对其进行保留,这样还可以和其余权重进行互补。设l表示有较小c
hk
,这种条件下进行划分时,des c
hk
能够被分为三个部分,其中各部分含有的参数量分别为μ*num_k、λ*num_k和(1-λ)*num_k个。被剪枝权重的比例与数量保持固定,二者和参数λ存在相关性。
[0184]
所述步骤s4中,cin组件和dnn组件是导致推理时间长的主要原因。对cin分量进行剪枝后,dnn分量成为限制,需要对dnn分量进行进一步剪枝。embedding层的剪枝对计算没
有明显的加速。在cin 和dnn分量权重的中等scin%稀疏度下,相应的加速可以接近 1/(1-scin%)倍。然而,当稀疏度scin%大于90%时,压缩行存储等稀疏结构的计算偏差和开销将变化缓慢。对于dnn分量的剪枝,随着 dnn分量中稀疏性dnn%的增加,加速速度变得更加显著。
[0185]
在embedding层中的修剪也显著减少了deepfc中的参数数量,从而节省了大量内存。在embedding层中,emb%的稀疏性将参数的数量从减少到(1-emb%)。在cin组件中,权重的数量(不包括偏差)可以从o(nkhc2l)减少到o(nkhc2l)(1-emb%)。同理,在dnn组件中,权重的数量(不包括偏差)可以从o(lh2+nkh)减少到o(lh2+nkh)(1-emb%)。
[0186]
由于embedding向量中的参数在deepfc中的总参数中占主导地位,所以embedding向量上emb%的稀疏性导致总内存减少约1/(1-[0187]
emb%)倍。
[0188]
所述步骤s7中,模型无论是进行训练还是压缩,都需要存储在硬件上才能进行应用,因此模型存储是模型压缩后的必要步骤。采用非结构化方法对模型进行剪枝,剪枝后模型的权重矩阵是非规则化的,权重矩阵中存在大量的零元素。存储大量重复的零元素不光浪费了存储的空间,还花费了大量对这些零元素的无效计算时间。因此,对非规则化的稀疏矩阵采用稀疏存储的方法进行有效存储有助于减少存储模型大小并提高计算效率。
[0189]
本次实验采用压缩行存储(compressedrowstorage,crs存储) 稀疏权值矩阵。csr存储方法通过采用3个数组分别存储全部非零元素的数值、列号和行偏移。行偏移记录的是每一行的第一个非零元素在数值中的起始偏移位置。另外,为了记录矩阵中非零元素的个数,在行偏移的最后会补上矩阵全部的非零元素个数。crs存储方法具体如下所示:
[0190]
v:用来存储矩阵中的非零元素的值;
[0191]
col_index:第i个元素记录了v[i]元素的列数(index从0开始);
[0192]
(3)row_index:第i个元素记录第i行到第1行中包含的非零元素的数量。
[0193]
令a=row_index[row],b=row_index[row+1],则v[a,b)的行数等于row,再结合col_index,即可得到非零元素的行数和列数。
[0194]
例如:
[0195][0196]
v=[8,9,10,85,65,7,45,21]
[0197]
col_index=[0,1,2,3,3,4,1,5]
[0198]
row_index=[0,2,4,6,8]
[0199]
假如获取“10”的坐标位置,通过v得到index=2,通过col_index 得到列数为2,2∈[2,4)=[row_index[2],row_index[2+1]),所以行数为1,最终10的坐标为(1,2)。
[0200]
需要说明的是,在中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有
的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
[0201]
以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
技术特征:1.一种融合压缩交叉网络的混合推荐方法,其特征在于:所述融合压缩交叉网络的混合推荐方法包括以下步骤:s1:将用户信息和商品信息等数据处理为稀疏矩阵的形式作为模型的输入;s2:将输入的稀疏矩阵经过embedding层,通过向量内积处理为稠密的特征向量,即embedding向量;s3:进行embedding处理,首先,在deepfc模型的输入层对输入数据进行数据预处理;然后再经过embedding处理,将多个领域(field)组成的高维稀疏分类特征通过神经网络嵌入到低维密集特征;通过embedding的处理,提升了向量之间的交互;将所有的embedding向量作为一个矩阵公式化为:其中m表示field的数量,表示embedding特征,d为embedding维度s4:把计算的稠密特征向量作为fm模块、cin模块和dnn模块三部分输入,从线性低阶交互、线性组合和非线性高阶交互三个角度分别处理输入特征s5:采用等权重线性加权各部分特征结果作为中间层的输出;输出特征再进行一层全连接,在激活函数作用后,作为模型整体的输出层;s6:在模型确定出之后,接着还应该设置适宜的参数,从而提高模型的性能;在研究时目标函数设为j(θ),通过求取此函数的最小值而使得实测值和预测值的偏差最小,从而起到优化模型的目的,通过优化的模型进行预测也有利于提高结果的精度;对参数进行训练时应用了adam[45]方法;在求解最优化问题时adam算法有明显的优势,基于这种方法对数据规模大的问题可以取得良好的效果,适用性强;这种算法融合了adagrad、rmsprop的优势[46];在进行参数更新时,adagrad算法应用了二阶动量,这样可以实现一定自适应效果;在对步长进行设置时,主要考虑的因素为更新频次;在更新频次大情况下,应该设置的步长小一些,相反情况下则设置大步长;根据实际应用经验表明,这种算法的缺陷表现为,学习率趋于零时,训练过程会提前结束,这样降低了训练效果;rmsprop算法则避免了持续积累问题[47];adam在训练时对应的流程如下:输入:训练数据,学习率η,批量数据大小n输出:deepfc模型1:初始化deepfc模型2:for训练迭代次数do:3:通过adam最小化目标函数:更新deepfc模型参数4:endfor;s7:对deepfc模型的进行模型压缩与加速;先进行一定次数的迭代训练,接着进行剪枝操作,在剪枝结束之后再次进行训练,以此
实现对网络的有效调整;持续进行上述过程,并对稀疏速率进行合理地设置,即在不同的网络状态下设置不同的速率,如果网络敏感度较高,则速度后期增速减小;如果网络处于稳定的状态,则初期速率增速较大;上述算法在原理上与基于弱子模优化的贪心算法是相似的[60],然而后者受到剪枝中不确定性的影响,导致权重不佳,修剪策略为:输入:设置目标稀疏率s、阻尼比和输出:稀疏模型1:训练训练网络进行一次迭代2:修剪fork=1,2...n进行一次迭代训练网络;枚举模型中的候选组件x;更新当前稀疏率
←
;修剪底部%的较大交叉熵误差的边;保存完成修剪的组件3:模型预测将稀疏模型转化为有效结构。2.如权利要求1所述的一种融合压缩交叉网络的混合推荐方法,其特征在于:所述步骤s4中,cin模块的输入输出描述如下:输入:cin网络的输入即embedding的输出,输出:cin的第k层的输出,其中hk为第k层特征向量的数量,且h0=m;第k层的各个特征向量的表达式如下:该式中,
⊙
表示哈达玛乘积(hadamardproduct),即对应矩阵元素相乘;h、hk分别表示特征向量数量和第k层特征向量的数量,1≤h≤h
k
;表示hk-1层二维矩阵,x0∈r
m
×
d
表示经embedding层处理后的第0层二维矩阵,表示第0层第i个域的特征向量,表示第k层的二维矩阵;例如:t表示cin模块的层数,每个隐藏层x
k
(其中,k∈[1,t])都与第0层的二维向量进行计算,最终3.如权利要求1所述的一种融合压缩交叉网络的混合推荐方法,其特征在于:所述步骤s4中,对于cin的计算方式,以第k+1层的输出为例;首先进行外积操作:引入一个过渡张量它是隐藏层与输出层的外积,然后将整个可以视为图片,视为过滤器;如下图3.4所示,过滤器沿着embedding维度(d)滑动;然后得到隐藏向量这被称为一个特征图或特征映射(featuremap);因此xk是hk个不同特征映射的集合;cin网络种的压缩指的便是第k个隐藏层将hk-1
×
m向量空间压缩至hk向量;定义t为整个网络的深度;每个隐藏层的二维矩阵为xk,k∈[1,t],对于第k层,将所有的特征映射进行一个加和池化操作(sumpooling),对公式(3.2)得到的各隐藏层的二维矩阵进行加和池化操作,即:其中,i∈[1,h
k
],第k层的池化向量cin模块的输出向量结果即为将各层的池化向量串联,即:由上述计算公式可知,cin模型的第k层w
k,h
对应参数大小为hk
×
hk-1
×
m,由于最后sigmoid函数中的w0,因此cin模型总的空间复杂度为第k层中,两个特征交互得到中间层的时间复杂度是o(mhd),由于每个隐藏层有h个特征层,cin中包含t层,因此总的时间复杂是o(mh2dt);cin模块的处理过程和cnn网络提取知识特征图的过程很类似,也就是先基于各卷积核提取输入数据的各方面信息,接着进行池化处理,以便对其中重要信息组合;在cin中和各个特征映射保持对应关系;可在加和池化操作基础上汇总特征映射相关信息。4.如权利要求1所述的一种融合压缩交叉网络的混合推荐方法,其特征在于:所述步骤s4中,dnn模块通过前馈网络来得到隐性高阶特征组合,通过这种处理方式可以组合形成具有价值的新特征,从而改善模型的性能;前馈神经网络[40],作为一种非线性模型已经广泛应用到了多个领域中;该模型的基本原理如下所示:在变量从输入端到输入端的过程中需要通过隐含层进行处理,而隐含层的数目往往不低于1个,在各个层次中涉及到了大量的神经元,这里的总层数仅仅包括隐含层和输出层,并不包括输入层;对应的输出表达式如下:z=w1x1+w2x2+w3x3+w0ꢀꢀꢀꢀꢀꢀ
(3.5)y=g(z)
ꢀꢀꢀ
(3.6)在上述公式内,w1,w2,w3均为神经元参数,x1,x2,x3代表输入,y代表对应的输出;g(.)代表激活函数,使用较多的包括relu、sigmoid函数等,一般需要结合具体的要求选择合适的激活函数;目前在深度学习领域中广泛采用了sigmoid函数,其公式为5.如权利要求1所述的一种融合压缩交叉网络的混合推荐方法,其特征在于:所述步骤s4中,sigmoid函数的输出范围限定在0到1区间,它会对每个单元的输出进行归一化,适合将预测概率作文输出的模型;tanh函数表达式为该函数常用于二分类问题的隐藏层;relu函数和leakyrelu函数不以0为中心,存在存在输入为负时,函数完全失
效;在本次研究中采用的激活函数是sigmoid函数,该函数的形状以及概率密度均为正态分布,在难以确定样本分布的情况下可以通过正态分布近似表示,所以选择sigmoid函数是比较合适的;dnn可以对非线性高阶特征进行提取,具备了较强的非线性处理能力,其公式如下:a0=[e1,e2,
…
,e
m
]
ꢀꢀꢀꢀꢀ
(3.7)a
(l+1)
=σ(w
(l)
a
(l)
+b
(l)
)
ꢀꢀꢀꢀꢀꢀ
(3.8)在上述公式内,a(0),a(l+1)分别是网络的输入、l+1层输出;σ(.)代表激活函数;w(l),b(l)依次代表l层的权重、偏差;ei(i∈[1,...,m])代表m个域的值;|h|代表隐含层数目;根据图3.8中的信息可以明显地看到,前馈神经网络内的各个层次之间密切相关,当前层次的输入即为先前层次的输出,通过这种方式可以将输入信息逐层传输到最终的输出层中;而在实际模型中需要确定合适的输入数据,对于点击率预测模型一般采用embedding层处理之后的数据,将这些数据统一输入到模型内进行处理。6.如权利要求1所述的一种融合压缩交叉网络的混合推荐方法,其特征在于:所述步骤s7中,还需要考虑更多权重和权值的非共享的全连接层;对这种类型网络而言,权值不共享,因而其中的权重和连接存在唯一对应关系;其相应的输入表示为其中n=1,2,
…
,n对应于输入数据量;在处理过程中根据前向传播算法,非激活的输出值neth,这样就可通过如下表达式描述出lk为输入神经元:以上表达式中,代表权重矩阵;对应的输出结果被softmax函数所激活,式4.2描述其一般表达式,神经元在激活情况下,其输出值y0可具体描述如下:y
h
=f(net
h
)
ꢀꢀꢀꢀꢀ
(4.3)其中c
′
表示非c的各参数,对神经网络中的各连接,假设全会被剪枝掉,接着计算确定出剪枝后神经元的激活函数值相应计算表达式为:根据以上分析可知,yh和的差异表现为右边有没有被假设剪枝;在处理过程中基于矩阵w进行简化,而剪枝边的权重假设,这种情况下w
′
h,k
被置为零;各边都被假设剪枝,同时边与权重存在一定唯一对应关系;这样全部与w的矩阵形状保持一致;在计算过程中确定出yh和后,然后带入数据获得原神经元和剪枝后神经元输出的交叉熵;相应的交叉熵均值可通过如下公式确定出:
上式中,c
hk
对应于每条被剪枝边的交叉熵,在进行剪枝判断时,主要是依据此参数;c
hk
为非负数,这样可以为剪枝过程提供支持,也对神经元输入起到促进作用;其中c
hk
值反映出此边对于输出神经元的影响权重;由此可判断出对全部的c
hk
,其中k=1,2,
…
,num_k,接着对全部正值通过降序的模式排列,将所得结果描述为des c
hk
;然后依据目标稀疏度,将des c
hk
进行划分而形成两部分,其中含有的参数分别为λ*num_k和(1-λ)*num_k个;在描述过程中对含有最小交叉熵值的权重,可以对其进行保留,这样还可以和其余权重进行互补;设l表示有较小c
hk
,这种条件下进行划分时,des c
hk
能够被分为三个部分,其中各部分含有的参数量分别为μ*num_k、λ*num_k和(1-λ)*num_k个;被剪枝权重的比例与数量保持固定,二者和参数λ存在相关性。7.如权利要求1所述的一种融合压缩交叉网络的混合推荐方法,其特征在于:所述步骤s4中,cin组件和dnn组件是导致推理时间长的主要原因;对cin分量进行剪枝后,dnn分量成为限制,需要对dnn分量进行进一步剪枝;embedding层的剪枝对计算没有明显的加速;在cin和dnn分量权重的中等scin%稀疏度下,相应的加速可以接近1/(1-scin%)倍;然而,当稀疏度scin%大于90%时,压缩行存储等稀疏结构的计算偏差和开销将变化缓慢;对于dnn分量的剪枝,随着dnn分量中稀疏性dnn%的增加,加速速度变得更加显著;在embedding层中的修剪也显著减少了deepfc中的参数数量,从而节省了大量内存;在embedding层中,emb%的稀疏性将参数的数量从减少到(1-emb%);在cin组件中,权重的数量(不包括偏差)可以从o(nkhc2l)减少到o(nkhc2l)(1-emb%);同理,在dnn组件中,权重的数量(不包括偏差)可以从o(lh2+nkh)减少到o(lh2+nkh)(1-emb%);由于embedding向量中的参数在deepfc中的总参数中占主导地位,所以embedding向量上emb%的稀疏性导致总内存减少约1/(1-emb%)倍。8.如权利要求1所述的一种融合压缩交叉网络的混合推荐方法,其特征在于:所述步骤s7中,模型无论是进行训练还是压缩,都需要存储在硬件上才能进行应用,因此模型存储是模型压缩后的必要步骤;采用非结构化方法对模型进行剪枝,剪枝后模型的权重矩阵是非规则化的,权重矩阵中存在大量的零元素;存储大量重复的零元素不光浪费了存储的空间,还花费了大量对这些零元素的无效计算时间;因此,对非规则化的稀疏矩阵采用稀疏存储的方法进行有效存储有助于减少存储模型大小并提高计算效率;本次实验采用压缩行存储(compressedrowstorage,crs存储)稀疏权值矩阵;csr存储方法通过采用3个数组分别存储全部非零元素的数值、列号和行偏移;行偏移记录的是每一行的第一个非零元素在数值中的起始偏移位置;另外,为了记录矩阵中非零元素的个数,在行偏移的最后会补上矩阵全部的非零元素个数;crs存储方法具体如下所示:v:用来存储矩阵中的非零元素的值;col_index:第i个元素记录了v[i]元素的列数(index从0开始);(3)row_index:第i个元素记录第i行到第1行中包含的非零元素的数量;令a=row_index[row],b=row_index[row+1],则v[a,b)的行数等于row,再结合col_index,即可得到非零元素的行数和列数;
例如:v=[8,9,10,85,65,7,45,21]col_index=[0,1,2,3,3,4,1,5]row_index=[0,2,4,6,8]假如获取“10”的坐标位置,通过v得到index=2,通过col_index得到列数为2,2∈[2,4)=[row_index[2],row_index[2+1]),所以行数为1,最终10的坐标为(1,2)。
技术总结本发明公开了一种融合压缩交叉网络的混合推荐方法。本发明中,针对当前推荐模型特征组合不充分的问题,提出了DeepFC模型,模型主要采用了因子分解机、压缩交叉网络和深度神经网络三种方法并行操作。该模型可以较好的解决模型组合不充分的问题。其中,DeepFC模型分别采用三种方法并行组成,是由于当前模型一般仅考虑低阶、显性高阶和隐形高阶这三种方式中的一到两种方式。例如当前已提出的Deep
技术研发人员:崔昊 栾方军
受保护的技术使用者:沈阳建筑大学
技术研发日:2022.06.29
技术公布日:2022/11/1