Deepfm是把FM和DNN并行了,但是其实FM和DNN还有一种串行模式,接下来要讲的这三种就是;
先说PNN,老规矩先放图(https://www.jianshu.com/p/be784ab4abc2):
embedding layer以及Hidden layer往上就很清楚了,主要是中间那个product layer,图上写了两种一种是inner一种是outer,对左边来说这个z都是和1点积(其实就是本身),右边的p如果inner就是feature之间点积(就是类似FM的两两点积,但是FM是bit维度+参数隐变量,这里就是先embedding再用embedding去做,其实是一样的),outer就是向量转置相乘为一个矩阵(当然这样搞太复杂,还是做了一些简化操作);得到z和p后还各自过了一个矩阵,得到一个降维之后的向量作为输入;一些数据上的简化操作就不详细写了。
再说NFM,放图(https://www.jianshu.com/p/4e65723ee632):
这里v就是FM的参数变量,要着重说的也是这个Bi-interaction Pooling,名字没听过,但是做的事还是那些,就是v和v之间点乘,如果只是这么搞就和IPNN右边那部分一模一样了哈感觉,然后还有一部分是把原始特征再连到输出(而不是IPNN左边那部分那样把这个sum(w*x)也放到网络里面);
最后是AFM,全称是Attention FM,一听就是做了加权。先放图(https://www.jianshu.com/p/83d3b2a1e55d):
前两步还是一样的,到第三步做的是element-wise的相乘,得到的还是k维的向量,然后放一块儿做了个softmax就得到了权重:
乘以原向量再相加,可能最后再过一个sigmoid吧就得到了预测分,这里应该是只对二阶向量做了这个操作,文中也是说没有用到其他阶数的特征。