看算法看到了PNN,找了好几篇介绍没太看懂,决定自己看完章理一遍。
前期算法储备:
- FM算法
- FFM算法
-
DeepFM
PNN算法结构图
PNN结构图
从上往下看:
最后一层为输出层执行操作为:
其中表示第二层隐藏层的输出。
隐层二执行操作:
为隐藏层1的输出。
隐藏层1执行操作:
表示线性部分,
表示非线性部分。
定义
其中和
为权重参数,
为第一层神经元的个数。
表示矩阵或者向量对应位置相乘后所有元素的和,即
(这个定于与卷积的定义相同),如
有的定义可以知道,
和
均是一个一个的数值。
首先明确一下各个字母的含义:为特征
后的向量维度,
表示用于
的特征总数,
表示一层和而第二层的神经元个数。
表示特征
后的
维向量,
。
下面具体先看一下
与z按元素相乘,所以
所以线性层的参数维度为
下面再看:
由定义层中
,
,同理
为
的权重,也为一个矩阵。
具体的:
即中的每一个元素
计算得出,
可以给出不同的定义。
文章中函数定义了两种
1. 基于内积的函数(Inner Product-based Neural Network,IPNN)
即向量的内积。则可以表示为
由于,所以
,故权重矩阵
。
=一个数值。
与FM算法的思路类似,考虑将进行因子分解。因为
也为对称矩阵,因此可以将其分解为
,此时
记
最终参数中的参数即为
,故inner product涉及的参数总量为
。
2. 基于外积的函数(Outer Product-based Neural Network)
此处外积定义为矩阵乘法:
由矩阵的乘法,得到。即
为一个
维的方阵,其中其每个元素同时也是一个
维的方阵。
如果第一层神经元的个数用表示,此时模型的时间复杂度为
,其中
复杂度为
,样本个数为
,
需要计算
次,复杂度为
,故总的为
。
为了降低复杂度,定义
此时仍有,复杂度为
,
。故outer product层的参数总量为
。
=一个数值。
即其实最终维的数组。
代码部分参考: 推荐系统遇上深度学习(六)--PNN模型理论和实践