1.问题优化
这篇论文的思路就很数学,从优化的角度入手
矩阵补全问题本质是求最小秩,优化这个np难问题,则有
其中F范数平方即所有元素平方和
*范数是通过奇异值分解得到的稀疏值经过松弛得到的核范数
参考自https://www.cnblogs.com/aezero/p/4860174.html
进一步优化核范数,使对于矩阵这样的几何结构平滑松弛(点题)
这时就分别有用户和电影的邻接矩阵(相似度矩阵?),分别得到拉普拉斯矩阵,进而得到矩阵的平滑度
从而有Dirichlet范数
现在得到目标函数
进一步改善复杂度将矩阵X分解得到最终的目标函数作为损失
这里就存在一个问题,用户和电影的对称的邻接矩阵怎么来呢,源码的数据集是已经有特征工程做好的,难道是相似度矩阵?
2.图卷积核
已知拉普拉斯矩阵的特征值分解
接下来是图卷积核的原理
记
从图信号学迁移过来类比傅里叶变换有如下图卷积的计算公式
其中g即为学习参数
此时存在要对拉普拉斯矩阵做特征分解的巨额复杂度,所以引入切比雪夫多项式将卷积核展开近似,
其中切比雪夫多项式为
𝜃为学习参数,k为决定展开阶数的超参数
调了一下k试试,最终的rmse并没有多大差距,仅是损失收敛平缓程度有些差别
3.算法流程
如上文所说,先喂入GCN编码得到嵌入,然后给LSTM解码出最终矩阵
这里将原本的矩形邻接矩阵分解出W和H两个对称阵,再分别对这俩做GCN,这样就可以使用拉普拉斯进而切比雪夫了
于是,依照切比雪夫网络的公式,先由拉普拉斯矩阵得到切比雪夫数列,再将这数列与邻接矩阵相乘,然后再乘权重(𝜃)加偏重,形成一个卷积层
此时的输出是一堆序列,也即编码出来的嵌入
喂入LSTM,经过记忆遗忘输出更新等操作得到最终的对称矩阵,这里的遗忘大概也能起到丢弃的作用吧,然后两个对称矩阵相乘就是补全后的大邻接矩阵了
这里损失用上面提到的目标函数来计算
4.个人体会
首先这个算法确实相当慢,换用GPU会提速不少,但是应该是代码里没有及时清理缓存,就连CPU都不一定能撑够3000次
以及代码中用到的这个图也不是很理解是干啥的