目录
本周在论文阅读上,阅读了一篇基于自注意力机制和双向GRU神经网络的深度知识追踪优化模型的论文。通过将自注意力机制和双向GRU神经网络融合起来构建新的模型,提高深度知识追踪的预测精度,优于现有的知识追踪模型。在深度学习上,学习了GRU的原理和特点,并在最后探讨了GRU和GCN融合的可能性。
This week,in terms of thesis reading,perusaling a paper on a deep knowledge tracking optimization model based on self attention mechanism and bidirectional GRU neural network.Constructing a new model by integrating self attention mechanism and bidirectional GRU neural network.The new model improves the prediction accuracy of deep knowledge tracking and outperforms existing knowledge tracking models.In deep learning,studying the principles and characteristics of GRU, and finally explored the possibility of integrating GRU and GCN.
题目:基于自注意力机制和双向GRU神经网络的深度知识追踪优化模型
现存问题:知识追踪是对学习者的答题表现进行建模,已被广泛应用于在线教育应用系统中。RNN的长期依赖问题使深度知识追踪模型无法利用长历史序列输入数据,导致预测结果产生波动。文章旨在优化深度知识追踪模型,解决RNN由于梯度消失产生的长期依赖问题并提升模型的预测精度。
解决方法:提出了基于自注意力机制和双向GRU神经网络的深度知识追踪模型(KTSA-BiGRU),利用双向GRU神经网络对学习者进行建模,通过注意力权重直接捕获输入练习题之间的关系,将学习者过去和未来的上下文序列信息集成 到模型的多个知识点概念中,更精准地模拟学习者的学习状态,预测学习者在未来学习中的作答表现。
知识空间理论(knowledge space theory,KST)是一种将人的认知和理解用数学形式表达出来并形成严谨的数学理论,主要应用于智能导学系统。知识空间理论中的相关定理结合可实现的技术操作,能够精准地预测学习者当前的知识状态,从而为学习者的个性化学习提供帮助。然而,知识空间理论指导下,现有的深度知识追踪模型存在输入习题间复杂关系捕获能力弱、无法有效处理长序列输入数据等问题,文章在知识空间理论指导下使用自注意力机制和双向 GRU 神经网络协同优化知识追踪模型。
门控制循环神经网络(gated recurrent unit,GRU)是LSTM神经网络的简化,用于处理和预测序列数据。相比于LSTM神经网络,GRU神经网络的参数减少了 1/3,不容易产生过拟合, 并且在需要的迭代次数和收敛时间上,GRU 神经网络效果更好。文章中使用双向 GRU 神经网络对学习者进行建模 ,Bi-GRU将两个方向相反的隐藏层连接到同一个输出,可以同时从前向和反向训练学习者的历史答题序列获取信息。
自注意力机制是注意力机制的变体,自注意力机制减少了对外部信息的依赖,更擅长捕捉数据的内部相关性,主要通过计算练习题间的相互影响来解决长期依赖问题。文章使用自注意力机制来学习练习题之间的关系权重,以预测学习者能否正确回答下一练习题, 通过增加练习题之间的关系来提高模型的预测性能。
文章提出的KTSA-BiGRU模型通过研究练习题之间的关系对预测结果产生的影响,再采用自注意力机制和双向GRU神经网络对DKT模型进行优化。优化的过程先利用双向 GRU 神经网络对学习者进行建模,将学习者过去和未来的上下文序列信息集成到模型的多个知识点概念中;另外,将自注意力机制融入深度知识追踪模型中,对注意力权重赋予初始值,同时随着模型的训练不断地更新注意力权重的值,通过注意力权重直接捕获输入练习题之间的关系。KTSA-BiGRU模型结构:
学习者嵌入旨在对整个学习者练习过程进行建模,并结合历史上学习者表现的影响,学习者在不同练习步骤中的隐藏表征,即学习者的学习状态。本文采用双向 GRU神经网络对学习者进行建模:
同时训练两个相反方向的GRU神经网络,将两个方向相反的隐藏层连接到同一个输出,输出层可以同时获得向前和向后状态的信息。将学习者过去和未来的上下文序列信息集成到模型的多个知识点概念中,更准确地模拟学习者的学习状态, 从而不考虑输入序列的长度。计算更新隐向量:
将自注意力机制将实值向量作为输入计算预测练习题之间的相关权重,生成权重向量矩阵F;使用缩放的点积向量注意力机制,找到对应每个先前所做练习的相对权重,用于预测当前练习是否能答对。计算查询矩阵和键值对:
使用注意力权重来确定每个先前的练习题与当前练习题之间的相关性。为了找到注意力权重,文章使用了向量点积:、
为了使模型能够表示不同子空间中的学习相关信息,注意力权重被计算了x次,并将x次的结果相连接。称为多头注意力(multi-head attention,MHA):
为了将非线性纳入模型,并考虑不同潜在维度之间的相互作用,本文使用了前馈神经网络来计算:
最后,将通过双向GRU神经网络得到的隐向量和自注意力机 制得到的练习题相关矩阵输入到一个带有sigmoid激活函数的全连接层中,得到表示学习者在t +1时刻答对练习题的概率 Pt+1:
文通过执行输出向量yt的下一个问题qt +1的注意力权重的点积和二进制交叉熵损失函l来构建训练模型。 损失函数表示如下:
对比模型:将基于贝叶斯的知识追踪模型(BKT)、基于深度学习的知识追踪模型(DKT)和正则化的深度知识追踪模型(DKT +)
数据集:ASSISTmentsData 和 KDD
文章采用AUC(area under curve)、准确率ACC(accurary)、精确率(precision)评价预测性能的指标。数据特征名称:
文章模型与其他三个较为经典的知识追踪模型的区别与联系:
下表给出了KTSA-BiGRU模型与三个对比模型在三个数据集上的AUC、ACC和准确率值的对比结果:
实验结果表明,KTSA-BiGRU模型在预测学习者未来作答表现的性能方面优于其他三种模型。DKT+和KTSA-BiGRU模型都是对DKT模型无 法处理过长的历史学习序列输入作出的改进,但是DKT+模 型只是通过引入正则化参数来缓解此问题,而KTSA-BiGRU模型将自注意力机制和双向GRU神经网络融入知识追踪模型, 可以直接捕获练习题之间的关系来解决DKT模型无法处理过长的历史学习序列输入。因此,KTSA-BiGRU模型的预测性能强于DKT+模型。
消融实验:
隐藏层数对模型性能的影响(采用更多的隐藏层数优于更少层的性能):
自注意力机制和双向GRU 神经网络对性能的影响(完整模型效果最好):
完整模型不仅能够更好地捕获学习者所做练习题之间的关系,还能将学习者过去和未来的上下文序列信息集成到模型的多个知识点概念中,更好地模拟学习者的学习过程。
GRU(Gated Recurrent Unit)是一种循环神经网络(RNN)模型,它是在LSTM(Long Short-Term Memory)模型的基础上提出的。与LSTM相比,GRU具有更简单的结构和更快的训练速度,同时具有与LSTM相媲美的性能。
GRU模型相比于其他的循环神经网络模型,具有以下特点:
简单高效:相比于LSTM模型,GRU模型的结构更简单,参数更少,训练速度更快,同时性能也不逊于LSTM模型。
可解释性好:GRU模型的结构相对简单,更易于解释和理解。
适用性强:GRU模型适用于各种自然语言处理任务,如语言模型、机器翻译、文本生成等。
GRU模型的缺点主要包括以下几点:
对于长序列的建模能力不如LSTM:由于GRU模型只包含更新门和重置门,没有遗忘门,所以对于长序列的建模能力不如LSTM。
容易出现梯度消失或爆炸:GRU模型的训练过程中容易出现梯度消失或爆炸的问题,需要通过一些技巧来缓解
GRU的主要创新点是将LSTM的三个门(输入门、遗忘门、输出门)简化为两个门(更新门、重置门),并引入一个状态向量(即重置门控制的前一状态和更新门控制的当前输入的线性组合)来实现信息传递和控制。
具体来说,GRU模型包括一个更新门和一个重置门,它们决定了模型是否更新当前的状态和是否忘记历史状态。GRU模型的更新门可以控制当前状态中的哪些信息应该被保留,而重置门可以控制历史状态中的哪些信息应该被遗忘。此外,GRU模型还有一个状态向量,用于传递当前状态和历史状态之间的信息。
GRU模型的数学公式如下:
其中,h_t表示第t个时间步的隐藏状态,x_t表示第t个时间步的输入,r_t表示第t个时间步的重置门,z_t表示第t个时间步的更新门,h_t表示第t个时间步的候选隐藏状态,⊙表示逐元素乘法,,W和U是权重矩阵,b是偏置向量。
重置门控制了新的输入信息对记忆单元的影响,更新门控制了上一个时刻的记忆单元和当前时刻的输入信息对当前时刻记忆单元的影响。通过这两个门控单元的组合,GRU模型能够在保留重要信息的同时,避免长期依赖的问题。
对一个由连续自然数构成的序列进行预测任务:
- import torch
- import torch.nn as nn
-
- class GRUModel(nn.Module):
- def __init__(self, input_size, hidden_size, output_size):
- super(GRUModel, self).__init__()
- self.hidden_size = hidden_size
- self.gru = nn.GRU(input_size, hidden_size)
- self.fc = nn.Linear(hidden_size, output_size)
-
- def forward(self, input, hidden):
- output, hidden = self.gru(input, hidden)
- output = self.fc(output[:, -1, :])
- return output, hidden
-
- def init_hidden(self, batch_size):
- return torch.zeros(1, batch_size, self.hidden_size)
-
- input_size = 1
- hidden_size = 20
- output_size = 1
- batch_size = 1
- sequence_length = 10
-
- model = GRUModel(input_size, hidden_size, output_size)
-
- # 构造输入和隐藏状态
- input_data = torch.arange(1, sequence_length+1, dtype=torch.float).view(sequence_length, batch_size, input_size)
- hidden_state = model.init_hidden(batch_size)
-
- # 前向传播计算输出
- output, new_hidden_state = model(input_data, hidden_state)
-
- print("输入的大小:", input_data.size())
- print("输出的大小:", output.size())
- print("输出结果为:", output.squeeze())
在这里输出的预测值是负的,可能是因为训练数据和模型的架构不够适合,导致模型没有学习到合适的关系。优化方向为更改模型架构或者增加训练数据,来提升模型的表现。
首先,GRU和GCN都可以应用于图像、语音、自然语言等序列数据的处理和建模,因此可以考虑将它们结合起来,共同处理这些序列数据。比如,可以使用GCN来对输入数据进行图像、语音、文本等特征提取和表示,然后将提取的特征输入到GRU中进行序列建模和预测。其次,GCN在处理图数据时能够考虑到节点之间的相互关系,而GRU则能够捕捉序列数据中的长期依赖关系,因此可以将GCN和GRU结合起来,用于处理时空序列数据。比如,可以使用GCN来处理空间维度的数据,然后将处理后的结果作为GRU的输入,用于建模时序数据中的长期依赖关系。
可能融合结构:
使用GCN处理图像数据,生成图像特征表示。GCN的输出可以是一个表示整个图像的向量。
将图像特征表示作为GRU的输入,并使用时间序列数据进行训练和预测。GRU的输出可以是预测值或者时间序列数据的特征表示。
将GRU的输出与其他信息(如图像标签)一起输入一个全连接层进行最终的预测
在这个结构中,GCN可以用于提取输入数据的特征表示,并将不同特征表示之间的关系转换成图结构。GRU则用于对特征表示矩阵进行序列建模和预测,以捕捉输入数据中的时序信息和长期依赖关系。最后,将GRU的输出结果进行分类、回归或者预测,以得到最终的结果。
本周是对GRU展开了学习,将GRU的整个流程重新复习了下,并思考了GRU和GCN的融合,接下来将展开深入的学习。