2023/3/12周报

目录

摘要

论文阅读

1、题目和现存问题

2、问题阐述及相关定义

3、LGDL模型框架

4、实验准备

5、实验过程

深度学习

1、元细胞自动机和深度学习的融合

2、代码例子

总结


摘要

本周在论文阅读上,对基于图神经网络与深度学习的商品推荐算法论文进行阅读,利用图神经网络提取关联关系的同时,利用深度学习提取评论的优势提取用户和商品的一般偏好,并进行特征融合来提升推荐效果。结果表明,此算法比已有相关算法更好。在深度学习上,探讨了元细胞自动机和深度学习融合的可能性,但结果不是很好。

This week,in terms of thesis reading,perusaling the paper on commodity recommendation algorithm based on graph neural network and deep learning.The graph neural network is used to extract the association relationship,and use the advantage of deep learning to extract comments to extract general preferences of users and products.Besides carry out feature fusion to improve the recommendation effect.The results shows that the algorithm is better than the existing related algorithms.In deep learning,discussing the possibility of integration of cellular automata and deep learning but the result is not very good.

论文阅读

1、题目和现存问题

题目:基于图神经网络与深度学习的商品推荐算法

现存问题:目前大部分基于图神经网络的推荐算法均使用用户物品的ID信息提取用户物品特征,忽略了数据中评论文本等其他数据所隐含的用户物品特征,或使用了辅助信息却使得网络训练更复杂。大部分基于GCN的推荐算法没有考虑到深度学习在文本等其他信息处理中的优势。

文章提出的解决办法:利用LightGCN基础网络同时增加注意力机制来提取用户物品之间的高阶特性,作为用户物品特征表示的一部分。其次,使用传统深度学习网络从评论文本中提取用户物品特征的另一部分。最终将两特征表示进行融合获得最终用户物品特征表示,进而给出推荐。

2、问题阐述及相关定义

给定一个包含X个样本的数据集D,其中每个样本(u,i,Rui)表示用户u对商品i写了一条评论Rui。如下图所示,本文的核心任务是训练出一个模型,根据全部用户与全部商品交互(不包含用户u与商品i的交互)来学习用户u、商品i的关联关系表示,同时根据用户u的评论集(用户u除Rui外的评论)、商品i的评论集(商品i除Rui外的评论)学习用户u与商品i的一般偏好表示,综合两种特征表示预测用户 u 对商品i的评分Pui。

 

使用相同方法得到用户u对全部商品的评分集合Pu,根据该评分集合对用户u给出前K个商品推荐,最终任务是使该推荐集合更接近用户u未来的购买行为。下表为本文使用的相关运算符号及其定义。

 

3、LGDL模型框架

该模型框架中包含嵌入层、前向传播层和评分预测层三个主要模块,框架图如下所示。

 

嵌入层

嵌入层负责将用户商品ID及用户商品评论信息输入模型。

全部用户的ID嵌入向量构成集合:

 

全部商品的ID嵌入向量构成集合:

 

商品与用户的ID嵌入向量均为初始状态,通过在前向传播层进行传播来进一步细化嵌入,使ID嵌入向量可以更好地表达其内含的关联关系。

前向传播层

前向传播层分为两个并行框架来分别提取用户与商品的关联关系及一般偏好。

用户ui 的ID嵌入在图卷积网络传播一次的计算规则为:

 

商品Ij的ID嵌入在网络中传播一次的计算规则为:

 

节点在图卷积网络中的一阶传播建模了用户和项目之间的一阶关联关系特征,利用一阶传播的计算方法,可以在图卷积网络中堆叠多层图卷积来建模用户与项目之间的高阶关联关系特征。

用户ui和商品ij 的表达:

 

利用注意力向量将每层的嵌入向量加权求和可以得到最终的用户ui 的关联关系嵌入表达:

 

商品ij的关联关系嵌入最终表达:

 

评分预测层

本文采用concat方法对两特征向量进行特征融合,从而得到最终用户ui和商品ij的特征表示:

 

用户对商品的最终评分预测:

 

文章采用推荐系统中使用广泛的BPR损失。该损失基于贝叶斯排序,考虑到了可观察到和不可观察到的用户与物品交互的相对顺序,认为观察到的交互项的重要程度比不可观察到的交互项的重要程度更高。

4、实验准备

采用亚马逊数据集。首先从总数据集中提取所需数据,其次由于评论文本数据存在空值、评论字数过少等情况,需要对评论文本数据进行数据清洗。由于空评论无法反映用户对商品的偏好,即使进行随机填充也无法正确表达用户偏好,所以去除空值评论数据;对于评论字数过少的数据通过对评论进行复制填充,对于评论字数过长的数据进行删除(无意义、意义相对较低的词和符号等),使评论字数长度统一为RL=50。通过对用户ID和商品ID进行统计分析,制作10-core版本的数据集。

 

本文采取top K推荐方法进行推荐,其中K=20,采用了召回率recall和归一化折损累计增益两种评价指标来评价模型性能。模型召回率的计算公式为

 

NDCG衡量了推荐列表中不同位置推荐结果的相关性得分,与用户相关性越高的推荐商品的排序越靠前,其推荐效果越好,得分也越高。

 

对比模型:LFM、NeuMF、NGCF、LightGCN。

正则化权重采用5E-5,最终迭代层数确定为2层,故嵌入向量维度最终采用64维。

5、实验过程

本文在四个数据集上对五个模型进行了实验对比

 

由本文模型LGDL与其他模型对比可以看出,其在四个数据集的模型表现均优于其他模型,召回率在数值上至少有0.15%的提升,NDCG在数值上至少有0.37%的提升。相比于次优模型LightGCN效果相对提升了约 5%,证明本文模型设计的方法对于模型效果的提升有相应贡献。

本文针对LGDL模型的各个部分设置了四种变体来进行消融实验,以验证模型的有效性。模型对比结果如下图所示。

 

LGDL-1表示模型取消注意力机制部分且不使用评论文本嵌入数据。

LGDL-2表示模型增加了注意力机制部分,且不使用评论文本嵌入数据。

LGDL-3表示模型只使用评论文本嵌入数据进行推荐。

LGDL-1采用简单的GCN层嵌入的融合效果,相比LightGCN效果略低。LGDL-2相比LGDL-1明显增加了注意力机制模型效果,说明注意力机制模块在模型中是有效的。LGDL-3只采用评论文本数据,相比前两个变体效果略低,但结合评论文本及注意力机制的LGDL的效果比单使用注意力机制的LGDL-2效果要好,说明评论文本中提取的用户商品一般偏好特征在最终特征表达中作出了贡献,即添加评论文本数据处理模块对模型效果增加是有贡献的。

深度学习

1、元细胞自动机和深度学习的融合

元细胞自动机是基于规则的离散动态系统,其核心思想是用简单的规则来描述复杂的自组织行为。它们通常用于建模复杂的自然和社会现象,如流体力学、城市交通和生物发展等。元细胞自动机的主要挑战是如何选择适当的规则和参数来生成有意义的模拟结果。

深度学习是一种基于神经网络的机器学习方法,可以从大量数据中学习复杂的模式和关系。深度学习通常用于图像和语音识别、自然语言处理和推荐系统等任务。深度学习的主要挑战是如何选择适当的网络结构和参数来实现高效的学习和预测

要将元细胞自动机和深度学习融合起来,需要解决许多问题,例如如何将元细胞自动机的规则转化为神经网络的参数,如何将元细胞自动机的状态与神经网络的输入和输出相结合,以及如何设计适当的训练算法来优化整个系统。此外,由于元细胞自动机和深度学习的复杂性和计算要求,还需要解决高效的算法和计算资源的问题。

在元细胞自动机中无法简单地转化成优化问题,没有类似深度学习中Back-propagation这样的优化算法。离散值空间难以直接处理连续变量的输入。在一些学者研究下,CA应用到机器学习上,从表面看是不合适的,缺乏将模型和实际数据链接对应起来的算法。这个问题导致的后果即理论无法应用到实际上,倘若算法一直没出现的话,随着时间的发展,元细胞自动机可能会遭到弃用。

2、代码例子

这个程序实现了一个简单的元胞自动机,并将其转化为神经网络的训练。

使用一个卷积神经网络来对当前状态进行编码,并输出一个新的状态。训练过程中,使用均方误差损失函数和随机梯度下降优化器来训练网络,以使输出状态与下一步元胞自动机的状态更接近。

import torch
import torch.nn as nn
import numpy as np
​
​
# 定义元胞自动机的演化规则
def evolve(ca, rule):
    new_ca = np.zeros_like(ca)
    for i in range(1, ca.shape[0] - 1):
        for j in range(1, ca.shape[1] - 1):
            neighborhood = ca[i - 1:i + 2, j - 1:j + 2]
            neighborhood_idx = np.ravel_multi_index(neighborhood.astype(int).flatten(), (2, 2, 2, 2, 2, 2, 2, 2, 2))
            new_ca[i,j] = rule[neighborhood_idx]
    return new_ca
​
​
​
# 定义元胞自动机的初始状态和演化规则
ca = np.zeros((32, 32))
ca[16, 16] = 1
rule = np.random.randint(0, 2, size=512)
​
​
# 定义神经网络的结构
class CA_Net(nn.Module):
    def __init__(self):
        super(CA_Net, self).__init__()
        self.conv = nn.Conv2d(1, 1, kernel_size=3, padding=1, bias=False)
        self.sigmoid = nn.Sigmoid()
​
    def forward(self, x):
        x = self.conv(x)
        x = self.sigmoid(x)
        return x
​
​
# 定义损失函数和优化器
net = CA_Net()
criterion = nn.MSELoss()
optimizer = torch.optim.SGD(net.parameters(), lr=0.1)
​
# 将元胞自动机的演化转化为神经网络的训练
for i in range(100):
    input_ca = torch.FloatTensor(ca).unsqueeze(0).unsqueeze(0)
    output_ca = net(input_ca)
    label_ca = torch.FloatTensor(evolve(ca, rule)).unsqueeze(0).unsqueeze(0)
​
    loss = criterion(output_ca, label_ca)
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()
​
    ca = output_ca.detach().numpy()[0, 0]
​
    print(f"Epoch {i + 1}: Loss {loss.item():.5f}")
​ 

最后收敛到0.07,由这段代码看来,收敛的结果是挺不错的。但这只是最简单的应用,随着问题的复杂化,二者之间的结合会越来越难,所面临的问题也是越来越多,解决起来也越来越麻烦。

总结

本周继续对GNN展开学习, 阅读了相关论文。在CA和DL的结合上,据查找的相关资料表明,二者之间的融合并没有许多人做,在相关论文的搜索上,也很少,可供学习研究的资料也没找到什么,在下周将重点展开对GNN的学习,争取早日做出成果。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值