目录
摘要
本周在论文阅读上,阅读了一篇使用GNN与RNN实现用户行为分析的论文,图神经网络能够捕捉用户局部行为的隐藏状态,可以作为预处理步骤。循环神经网络能够捕捉时间序列的信息。因此,通过将 GNN和 RNN相结合的方式来构建该模型,以获得两者的优点来进行更好的用户分析。在深度学习上,对CA中的脑细胞自动机进了原理学习和代码复现。
This week,in terms of thesis reading,perusaling a paper on user behavior analysis using GNN and RNN.Graph neural network can capture the hidden state of user's local behavior and can be used as a preprocessing step.Cyclic neural networks can capture information from time series.Therefore, the model is constructed by combining GNN and RNN to obtain the advantages of both for better user analysis.In deep learning,studying the principles and code reproduction of brain cellular automata in CA.
论文阅读
1、题目和现存问题
题目:使用GNN与RNN实现用户行为分析
现存问题:在传统机器学习相关的用户行为分析行为上基于马尔可夫链模型的主要不足在于它们独立地组合了过去的组件,这种独立性假设过于强烈,限制了预测精度。在深度学习相关的用户行为分析研究上,RNN 模型通常适合处 理用户会话的长度比较长的情况,同时这些方法容 易忽略远距离用户行为操作之间的复杂转换。
2、符号定义
用户行为分析的目标是根据用户一次会话中已知的历史操作类型序 列来预测用户下一个操作类型,因此这里首先需要 定义基本的用户操作类型。设用户操作类型的集合为V,即用户的每次操作只能是集合 V 中的唯一元素。在实际整理用户会话数据时,可以根据数据的会话ID段位得到一次会话的所有操作, 然后将一次会话的所有操作数据通过数据的时间戳段位进行排序。这里将排好序的一次会话中的数据列表设为s,用户行为异常 检测模型的目标就是预测用户下一个操作的类型。
为了使得用户序列数据适用于图卷积神经网络 模型,用户会话数据在输入模型进行训练之前首先 需要转换成图数据结构。每一个会话都可以当作一个有向图,在这个会话组成的图中, 每一个节点代表一个操作类型,每一条边代表该次会话中用户在进行某次操作。由于每个操作之间都有 时间间隔,因此每一条边都可以增加一个基于时间间隔的权重,之后可以将每一个会话图的每一个条 目v∈V通过嵌入层嵌入到一个统一维度的欧式空 间,然后经过图卷积神经网络的训练得到的节点向 量 v′∈ Rd 表示学习到的潜向量,其中 d 表示该潜向 量的维度
3、图卷积网络与循环网络的叠加模型
设[v1,v3,v5,v3,v4]代表用户进行一次简单的操作流程,由于图数据结构中每种操作类型仅能出现一次,因此 该会话转换成图数据结构时仅有 {v1,v3,v4,v5} 这四种 节点。为了使得每个节点可以数值化表示,需要将 每种节点编码为唯一的自然数。例如 {v1 → 0,v3 → 1,v4 → 3,v5 → 2} 为本例中的编码。按此规则将本例 中的用户操作序列转换成会话的图结构,如下图最左边的结构所示。随后,该会话图可以转换成一个矩 阵表示,但是通常图节点之间的联系并不密集,属于稀疏图 ,因此使用COO(coordinate format)进行存储。
由于用户在进行两个操作之间的时间间隔在数据预测中起着非常重要的作用,因此处理时把这些 数据转换成图结构上边的权值。在实践中,每一个 时间数据都是一个连续的非负实数,需要标准化时 间数据。由于时间数据的范围比较大,因此这里使 用Softmax函数对时间数据进行归一化处理。这样在每一条边上设置的权重计算公式如下:
为了提高模型的准确度,首先使用表示学习中的分布式表示法来构造一个嵌入层,即将每个类别向量通过嵌入层转换成一个低维稠密向量。然后即可通过图卷积神经网络进行学习。图卷积操作的关键是将卷积运算符推广到不规则域的方法,该方法通常表示为邻域聚合或消息传递模式,其中传递模式可以使用如下的公式进行计算:
这里设经过嵌入层后得 到的数据为 X ,其正向的消息传递函数如下:
在进行循 环神经网络模块之前,潜向量首先要根据输入时用 户的操作顺序从新排列。这里为了简化,使用符号 X 代表排列好的潜向量,则使用的正向传播循环神经 网络公式如下:
4、数据集和准备工作
文搜集CNGrid用户的实际操作内容作为数据 集,并以该数据集来实验并评估本文方法。
该模型在线上预测时,可以根 据不同的用户调用不同的参数模型,然后预测该用 户的操作并与该用户的实际操作进行对比,如果不 同则认为该用户的此次操作是一次异常行为。整体 的异常诊断流程如下图所示:
为了评价该方法的性能,将该方法将与一些具有代表性的基线方法进行了比较:POP和S- POP算法、Item-KNN 算法、BPR-MF算法、FPMC算法、RNN 算法、RNN+注意力机制算法、SR-GNN算法。
为了比较上述方法的性能,选择两个评价指标进行对比分析。本文选择的指标广泛用于基于会话的数据集。P@3(Precision)代表模型预测结果的概率分布列表中概率值最大的前三位预测结果中的其中一个和实际结果相同,这样的数据在所有测试数据中所占的比例:
MRR@3(mean reciprocal rank)代表一定范围内 条目 t 的倒数秩的平均值。此处设置为如果倒数秩 大于 3,则倒数秩为 0。
5、实验结果
所有方法评价结果的数值如下表所示,其中每一列的最佳结果以加粗字体突出显示。在 CNGrid 数据集上,GR-NN在P@3和MRR@3方面的性能处于最优水平,验证了所提 出模型的有效性。在表中所有神经网络基线方法的结果都明显优于传统模型,从而证明了深度 学习技术在该领域的有效性。
为了验证文章方法的正确性,本轮实验选择了 不同的GNN和RNN叠加进行建模。实验结果如下表所示:
括号中的 GNN方法是指构造叠加模型时所选择的不同的GNN方案的名称。从以上结果可以看出,不同的GNN网络对预测结果的影响很小,这意味着所有的 GNN网络都具有较强的学习用户行为逻辑的能力。
为了验证本文方法在不同情况下的有效性和优势,将本文方法应用于所有其他用户的数据集上。所有其他用户的数据集中由于包含了各种不同用户, 而不同用户的行为是复杂多变的,因此这些数据中包含了长会话和短会话,这使得预测更加困难。
在使用 OneUser用户数据集的实验结果表明,RNN网络(RNN&RNN+注意力机制)的结果优 GNN网络(SR-GNN法),这与上表的结果相反,这是因为图数据结构忽略了用户操作的顺序信息,所 以仅仅使用图卷积神经网络容易忽略远距用户操作之间的复杂转换,而循环神经网络可以学习到这种关系。以上讨论更进一步证明了GNN网络和RNN网络各有其适应的范围。
深度学习
1、元细胞自动机经典案例
1、康威生命游戏(Conway's Game of Life)
康威生命游戏是最著名的元胞自动机之一,由英国数学家约翰·康威在1970年发明。生命游戏是一个零玩家游戏,通过简单的规则来模拟生物的繁殖和死亡。在一个二维的方格图上,每个格子有两种状态:生或死。每个格子周围的八个格子称为邻居。生命游戏的规则如下:
-
如果一个生命周围的邻居少于2个,它会因为孤独而死亡;
-
如果一个生命周围的邻居有2个或3个,它会继续存活;
-
如果一个生命周围的邻居多于3个,它会因为拥挤而死亡;
-
如果一个死亡周围的邻居恰好有3个,它会因为繁殖而变成生命。
2、元胞自动机图像处理
元胞自动机可以用于图像处理。例如,可以使用元胞自动机来实现图像分割、去噪和压缩等任务。元胞自动机可以通过定义相邻像素之间的规则来处理图像。
3、脑细胞元胞自动机
脑细胞元胞自动机是一种基于元胞自动机的神经网络模型。该模型通过模拟神经元之间的相互作用来实现类似于大脑的处理。该模型已被用于模拟语言处理、机器视觉和自然语言生成等任务。
4、群体行为模拟
元胞自动机可以用于模拟群体行为,例如鸟群、鱼群和蚁群等的行为。元胞自动机可以通过定义相邻个体之间的规则来模拟这些群体的行为。这些模拟可以用于研究群体行为的发展和演变,并且可以为人类行为和社会科学提供参考。
2、脑细胞元胞自动机
脑细胞元胞自动机(Neuronal Cellular Automata,NCA)是一种基于元胞自动机的模型,用于模拟神经元在脑中的行为。该模型由 Tommaso Toffoli 和 Norman Margolus 在 1987 年首次提出。该模型采用元胞自动机的思想,将神经元的行为建模为元胞自动机的规则,以便更好地理解神经元的活动规律。
优点:
-
简单性:脑细胞元胞自动机的规则非常简单,可以通过简单的局部规则生成全局行为。
-
可扩展性:脑细胞元胞自动机可以用于建模大规模神经网络,其结构可以轻松扩展。
-
并行计算:脑细胞元胞自动机的局部规则允许并行计算,使其在处理大规模数据时具有优势。
缺点:
-
参数调整困难:脑细胞元胞自动机的效果很大程度上取决于局部规则的参数,但是确定这些参数并不总是容易的。
-
缺乏实际应用:尽管脑细胞元胞自动机在理论上有很多应用,但是在实际应用中,往往会受到计算资源限制,难以扩展到大规模的问题。
-
可解释性:尽管脑细胞元胞自动机非常简单,但是其结构通常比较复杂,这使得其结果不太容易解释。
NCA 模型中,每个元胞表示一个神经元,其状态用一个二进制数字表示,0 或 1 表示该神经元是否处于兴奋状态。每个神经元会接收到来自周围神经元的信息,并基于这些信息更新自己的状态。神经元之间的连接关系被建模为元胞之间的邻接关系,每个神经元只能与其相邻的神经元进行交互。
NCA 模型的动态演化过程可以用一个时间序列来表示。在每个时间步长,每个神经元会基于其相邻神经元的状态计算自己的下一个状态。这个计算过程可以被描述为一个由简单的局部规则组成的全局规则。
NCA 模型的一个重要特性是其高度并行化的计算方式,这使得该模型能够有效地模拟神经元的行为。NCA 模型已经被用于研究神经网络的发展和演化,以及神经元之间的相互作用。
首先定义每个细胞状态为S_i,表示第i个神经元的状态,其中0表示神经元不兴奋,1 表示神经元兴奋。之后定义每个细胞的兴奋状态为e_i,表示第i个神经元的兴奋状态,其中0表示神经元未兴奋或处于抑制状态,1表示神经元兴奋。接下来,定义每个细胞的膜电位为V_i,表示第i个神经元的膜电位。
脑细胞元胞自动机的更新规则:
3、代码复现
模拟了一个N x N大小的背景网格和M个随机分布在网格上的脑细胞,每个脑细胞具有一定的概率发放信号,并且可以抑制相邻脑细胞的信号传递。在每个时间步骤中,更新规则将按照一定的概率更新脑细胞状态并更新背景网格状态。最终,将通过Matplotlib库将每个时间步骤的状态可视化。
import numpy as np
import matplotlib.pyplot as plt
# 定义常数
N = 100 # 背景网格大小
M = 10 # 脑细胞数量
T = 100 # 模拟时间
p_fire = 0.1 # 脑细胞发放信号的概率
p_inhib = 0.2 # 抑制信号的概率
strength = 5 # 脑细胞发放信号的强度
# 初始化状态
state = np.zeros((N, N))
brain_cells = np.zeros((M, 2), dtype=int)
brain_cells[:, 0] = np.random.randint(0, N, size=M)
brain_cells[:, 1] = np.random.randint(0, N, size=M)
# 定义更新规则
def update(state, brain_cells, p_fire, p_inhib, strength):
for i in range(M):
x, y = brain_cells[i]
if state[x, y] == 0 and np.random.rand() < p_fire:
state[x, y] = strength
for j in range(M):
if j != i and np.abs(brain_cells[j, 0]-x) <= 2 and np.abs(brain_cells[j, 1]-y) <= 2:
if np.random.rand() < p_inhib:
state[brain_cells[j, 0], brain_cells[j, 1]] = 0
elif state[x, y] > 0:
state[x, y] -= 1
# 模拟过程
fig = plt.figure()
for t in range(T):
update(state, brain_cells, p_fire, p_inhib, strength)
plt.imshow(state, cmap='Greys', interpolation='nearest')
plt.axis('off')
plt.title('Time Step: {}'.format(t+1))
plt.pause(0.01)
plt.show()
总结
本周仍然是继续学习相关模型和元细胞自动机,将RNN和GNN结合在用户行为分析上有着其他模型不具有的独特优势,通过实验也证明了该新模型的可行性和有效性,在元细胞自动机上,学习了其中的脑细胞自动机,该模型模拟神经元在大脑中的行为。