热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

GraphConvolutionalMatrixCompletion,GCMC

文章目录MotivationContributionSolutionencoder使用交互物品的特征引入边信息decoder训练方法权重分配EvaluationSummarizat

文章目录

  • Motivation
  • Contribution
  • Solution
    • encoder
      • 使用交互物品的特征
      • 引入边信息
    • decoder
    • 训练方法
    • 权重分配
  • Evaluation
  • Summarization


本文首发于公众号:code路漫漫,欢迎关注
在这里插入图片描述
一篇17年的文章,图推荐里面常见的baseline


Motivation

两种类型的推荐系统

  1. content based:从用户和物品的特征入手
  2. 协同过滤:从交互历史入手

本文的idea是把协同过滤技术应用在图上
用户物品的交互历史可以自然而然的表示成二部图上的链接,图上的结点分别是用户和物品。转换为图后,预测评分任务就变为预测结点之间的链接。

Contribution

提出了GC-MC框架(a graph-based auto-encoder framework for matrix completion),在图上卷积,在六个数据集上达到了SOTA的效果
在这里插入图片描述

Solution

看上图可以知道,GCN技术的几个问题

  1. 如何更有效地生成用户和物品的表征
  2. side information 如何提高model效果
  3. encoder和decoder的实现细节

下面一一介绍

encoder


使用交互物品的特征

用户和物品的处理方式相同,接下来只介绍生成用户表征的处理方式
在这里插入图片描述
encoder可以写成Z=f(X,A)Z=f(X,A)Z=f(X,A)的形式,将NXDNXDNXD维的特征矩阵XXX和图邻接矩阵AAA作为输入,得到NXENXENXE维的embedding矩阵ZZZ
前面说的encoder可以生成用户和物品的表示,那么有公式[U,V]=f(X,A)[U,V] =f(X,A)[U,V]=f(X,A),其中U是用户的表示,V是物品的表征

考虑到评分类型R可能由多个类型组成,我们对每个类型的评分单独抽取出来做一个矩阵,那么ZZZ的表示形式变为
[U,V]=f(X,M1,...,Mr)[U,V] = f(X,M_1,...,M_r)[U,V]=f(X,M1,...,Mr),这里MrM_rMr是用户i评分r的交互矩阵,交互过的值为1,没交互过的值为0

这也是论文的一个创新点,之前的encoder直接把用户u的交互矩阵M传进去,而这里先把M按照评分数量拆分成多个0-1矩阵,然后再传入

用户可以被它交互过的物品表示
在这里插入图片描述
这里j表示物品j,i是用户i,c是常量,xj是物品j的feature,Wr是特定的评分矩阵
当我们计算出u之后,使用公式2计算用户i的中间输出(也就是dense layer的输出)hih_ihi
在这里插入图片描述
最后传给公式3就能得到用户的最终表示uiu_iui
在这里插入图片描述

公式3是encoder的雏形,这里只用了物品的feature,稍后我们还会看到它的改进形式


引入边信息

side information可以用来增强用户的表示,但是当边信息本身含有的信息量不足的时候,直接将其和用户特征一起输入到网络中会导致模型性能下降
在论文中,side information使用单独的通道处理(separate processing channel)
考虑用户i的表示生成
在这里插入图片描述
其中ui=σ(Whi)u_i = \sigma(Wh_i)ui=σ(Whi)部分等同于公式3,xifx_i^fxif是用户i本身的特征,bbb代表bias
那么最终的用户表征由两部分组成

  1. 交互物品的feature
  2. 本身的feature,这里称为边信息

至此encoder的表示如下:
在这里插入图片描述

decoder

decoder的作用是接受用户、物品的表征用于生成重构矩阵,然后把重构矩阵和真实的结果矩阵比较计算Loss,使用梯度下降训练整个model
在这里插入图片描述

在这里插入图片描述在这里插入图片描述

这里decoder计算方法就是公式4和公式5所述

训练方法

在这里插入图片描述

权重分配


这一块论文讲得不是很清楚

之前提到,论文把不同类型的评分拆分成单独的矩阵处理,然而并不是所有用户和物品都拥有相同数量的评分。这会导致某些参数的优化次数非常少
对于encoder的权重计算方法,使用ordinal weight sharing策略
在这里插入图片描述
TsT_sTs是什么论文里没说

对于decoder的权重计算方法,使用basis weight sharing策略
在这里插入图片描述


模型的整体框架
在这里插入图片描述

Evaluation

数据集
在这里插入图片描述
score:
在这里插入图片描述
在这里插入图片描述

使用边信息的效果
在这里插入图片描述
在这里插入图片描述

Summarization

本文在encoder和decoder上进行改进

  1. 对评分矩阵进行拆分
  2. 使用单独通道处理边信息(只使用交互历史是协同过滤思想,论文中还引入和物品、用户本身的feature,这被称为边信息)
  3. 使用特殊的权重计算方法

论文的code:https://github.com/riannevdberg/gc-mc


推荐阅读
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • FeatureRequestIsyourfeaturerequestrelatedtoaproblem?Please ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • EPICS Archiver Appliance存储waveform记录的尝试及资源需求分析
    本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 本文介绍了PhysioNet网站提供的生理信号处理工具箱WFDB Toolbox for Matlab的安装和使用方法。通过下载并添加到Matlab路径中或直接在Matlab中输入相关内容,即可完成安装。该工具箱提供了一系列函数,可以方便地处理生理信号数据。详细的安装和使用方法可以参考本文内容。 ... [详细]
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有