引入无监督表示学习和堆叠双向GRU的预测模型
2021-08-28朱壮壮周治平
朱壮壮,周治平
(江南大学物联网学院,江苏 无锡 214122)
随着可穿戴设备的日益普及,人们越来越倾向于使用可穿戴设备来监测睡眠状况并且追踪身体健康。Lim[1]等人发现患有疾病的手环佩戴者和健康佩戴者的手环数据存在着显著的差异,且特定的指标与特定疾病的关联较大。对于手环佩带者而言,若缺乏对数据的有效分析,仅仅依靠手环显示并不能准确地了解自身健康状况。因此,对手环采集到的时序数据进行有效的疾病预测,以便进行及时的治疗,对改善用户的身体健康状况具有重要的作用。
由可穿戴设备采集的数据绝大多数为时序数据,若不做任何处理直接进行预测,则容易遗漏数据间的相关性特征;尽管可穿戴设备数据对健康问题的研究分析有很大的帮助,但是仅仅有一小部分的人同意其临床数据可用于研究分析。基于此,本文训练无监督的表示学习模型,通过添加无监督预训练矢量学习原始时序序列有用的特征[2],以提高基于深度神经网络的疾病预测模型的性能。
1 相关工作
长期以来,研究学者们致力于研究各种表示学习技术以提高特征表示的效果。然而,早期的表示学习模型,计算复杂度高,难以应付各种复杂场景的需求。Bengio[3]等人应用分布式表示结合神经网络训练特征表示模型,成功解决了独热表示(One-Hot Representation)模型中的参数爆炸以及数据稀疏性问题。word2vec[4]以及其衍生的表示学习模型[5]的提出,使得对大量的无标记数据集进行特征表示成为可能。Mikolov[6]等人提出了一种word2vec算法,该算法利用连续词袋(Continous Bag of Words,CBOW)和Skip-Gram模型训练词向量。word2vec用一个单层神经网络将独热编码形式的词向量映射为分布式表示,并以分层softmax或者负采样技术加快训练速度。Mikolov[7]等人在CBOW的基础上提出了分布式词袋(Distributed Bag of Words,DBOW)模型,该模型经过优化可以预测上下文词向量,提取文本的全局和局部特征。然而,上述的研究并没有结合具体任务的信息,因此很难发挥特征表示的最大作用。
时间序列表示学习使用相似性概念执行特征表示任务,旨在将原始时间序列转换为向量表示,其中欧几里得距离常用作相似性度量。SAX-VSM[8](Symbolic Aggregate Approximation Vector Space Model)使用时间序列的tf-idf(Term Frequency Inverse Document Frequency)转换来获取数据的特征表示,该技术是时间序列特征表示中经常使用的技术之一。BOSS[9]是另一种时间序列特征表示技术,该方法首先为时序数据设置合适的窗口大小,接着在每个窗口上使用傅里叶变换,最后根据最近邻方法中的相似度对相邻进行分类。BOSS-VS[10]将SAX-VSM方法中的tf-idf统计和BOSS中的傅里叶变换相结合,有效地改善了表示效果,并被广泛使用。这些算法假定原始数据满足某种特定的分布,需要对时序数据很有研究的专家构建数学模型,在特征表示时容易丢失时间域上的重要信息。
鉴于此,从本文角度出发,提出了一种无监督的表示学习模型act2vec,受DBOW启发,该模型将时序数据中的每个数据视为一个word,从原始活动数据中学习时间序列的特征表示。设计了一种新颖的学习算法,通过优化不同的度量以捕获时间序列中的局部、全局、平滑以及序数损失;此外,针对疾病的共病性,构建堆叠双向GRU模型并引入所学习的特征来进行疾病预测。
2 无监督表示学习模型
2.1 分析单元粒度的选择
为了构建活动序列的特征矩阵,首先需要确定合适分析单元的时间粒度。图1表示一个可穿戴设备用户一周的活动时序数据。其中x轴表示时间,时间间隔为5 min;y轴表示活动等级,范围为0~1000。若时间粒度设置太小(例如以秒为单位),可能导致学习到的特征矩阵存在稀疏性问题,难以处理接下来的疾病预测任务;若时间粒度设置太大(例如以周为单位),则会削弱活动序列特征矩阵解决疾病预测任务的能力。
图1 受试者一周内的活动强度
活动序列可以描述用户一段时间内的活动情况,对于活动序列,重要的是考虑为其嵌入合适的时间粒度。在本文中,将考虑时间粒度为5 min、1 h、1 d和1周的情况。
令D={S1,S2,…,S N}表示含有N个受试者的活动时间序列数据集,其中每个序列S p=(t1,t2,…,t n)表示每个受试者在一定时间内的n个活动指标(例如运动步数和消耗卡路里)。令g∈{5 min,1 hour,1 day,1 week}表示不同时间粒度,首先根据g的值将每个序列S p分成长度相等的K个连续时间段。令T k=(t a,t a+1,…,t a+L)∈T作为时间间隔,并且总长度为L,从时间a开始算起。表示学习的目标构建一个映射函数Φ:T→R d,用d维的分布式向量来表示每个时间段。该映射函数可以被视为在单个隐含层神经网络中的的嵌入矩阵中的查找操作,通过将K个段级向量串联起来,便可得到完整活动序列的向量表示,即得到活动时序数据的特征矩阵。以一周活动数据为例,通过考虑不同的时间粒度,经特征学习后的时序数据的特征矩阵信息,如表1所示。
表1 不同时间粒度的特征矩阵维度信息
对给定的时间粒度,通过最小化四个部分的损失函数来得到映射函数Φ,具体流程如图2所示。
图2 act2vec流程图
2.2 段内损失函数
受分布式词袋(DBOW)的doc2vec模型的启发,将时序片段中的元素视为doc2vec中的words,时序片段视为doc2vec中的documents,并且时序片段中的元素与时序片段都被分配了唯一的标识符,每一个标识符都对应着共享嵌入矩阵Φ(T k)中待学习的向量。通过预测时序片段内的元素,act2vec利用段内损失函数来学习每一个时序片段的特征矩阵。给定输入序列T k=(t a,t a+1,…,t a+L),首先在共享嵌入矩阵中查找对应的向量,然后映射到唯一的向量Φ(T k)。噪声对比估计[11](Noise-contrastive Estimation,NCE)被用于有效地预测损失,段间损失函数为:
式中:σ为sigmoid函数,并且定义σ(x)=1/(1+e-x),w t j和w t m分别为与元素t j和t m对应的权重矢量,v(t)为t m采样的噪声分布。
2.3 序数损失函数
当预测时序片段时,上述的段内损失函数将独立地作用于时序片段内的每一个元素。但是,由于这些元素代表活动等级,因此其值具有自然顺序关系,如”5”>”1”,该关系应该考虑在表示学习模型中。为了嵌入该自然顺序关系,模型在学习时序片段内的每一个元素时使用了序数损失:
式中:σ是之前定义的sigmoid函数,Ⅱ表示指标函数,V表示时间序列可以采用的不同离散值的数量,本文中0≤V≤1000,θc是回归的有序阈值。
2.4 段间损失函数
上面的两个损失函数主要是为了捕获时序片段中的局部模式。但是,由于时间片段是连续的,并且描述了一个人的活动,因此其很有可能是相关的。例如,剧烈运动后,会有一段周期内的运动强度比较低。
与时序片段中的元素类似,数据集中的每个时序片段都被分配有一个唯一的标识符,以使用该标识符在嵌入矩阵中查找其对应的向量。在表示学习模型中,首先利用当前时序片段向量Φ(T k)来预测它的相邻片段Φ(T k-1)和Φ(T k+1)。假设片段T i与T k相邻,那么段间损失可由下式表示:
式中:w T i和w T m分别是片段T i和T m关联的权重系数,v(t)为t m采样的噪声分布。
2.5 平滑损失函数
先前所述的损失函数主要是捕获时序数据中的局部、自然序数和全局特征,由于用户活动数据存在周期性,则相邻时序片段之间存在平滑模式。表示学习模型需要尽可能地避免时序数据相邻片段之间的突变,通过最小化相邻向量之间的L2距离来实现此需求。时序片段T k的平滑损失函数为:
式中:N(T k)表示邻近Tk的时序片段的集合,η表示平滑损失函数的平滑强度参数。由于时间粒度为一周时不存在邻近的时序片段的集合,因此week2vec不存在平滑损失函数。
2.6 组合损失函数
将改进的act2vec模型定义为式(1)~式(4)损失函数的组合:
式中:β>0,表示序数回归损失的相对权重。
由于随机梯度下降[12](Stochastic Gradient Descent,SGD)算法随机选择一个批次数据进行梯度更新,而不是整个数据集,因此很容易陷入局部最优。而均方根概率(Root mean square Probability,RMSprop)算法[13]类似带有动量的标准SGD,它使用衰减率ρ来减小振荡幅度,从而加快训练速度。它通常得到全局最优解,并且与SGD相比,时间复杂度不会太大。因此,RMSprob用于训练我们的表示学习模型。算法1给出了act2vec模型的伪代码。首先,初始化全局学习率ε,衰减率ρ,初始参数θ,初始化累积变量γ=0和一个小的常数δ。然后迭代循环获得L s(T k,t j)和L c(T k,T i)的噪声分布v(t)和v(T),并更新参数直至模型收敛。
算法1 利用RMSprop训练act2vec
3 层叠式双向门控循环单元
Lynn[14]等人表明具有多个隐含层的层叠式的GRU网络可以重新组合来自先前层学习到的特征,以便在高抽象级别创建新的时序数据特征表示,以便获得更好的表现效果。在具有多个隐含层的层叠式网络中,上一个隐含层的输出用作下一个隐含层的输入。基于此,在本文的工作中使用了此层叠式结构,并且在实验中表现出了较好的预测效果。
在时序数据的预测任务中,某个时间序列的预测不仅取决于过去时刻,还和未来的时刻有关[15]。因此,为了从不同方向处理时序数据,结合上述并引入双向GRU[16],提出层叠式双向GRU(Stacked Bi-Direction GRU,SB-GRU),如图3所示。
图3 层叠式双向GRU网络
SB-GRU依次叠加两个不同方向的Bi-GRU,最底层Bi-GRU接收输入的时序序列,用于提取时序序列的特征。随后将提取出时序序列的特征拼接成顶层多层神经网络(Multi-Layer Perceptron,MLP)的输入,通过MLP的隐含层使得时序序列发生非线性映射,最后通过softmax分类层给出最终的疾病分类结果。
4 实验环境与结果分析
4.1 实验环境
实验平台配置为Windows10操作系统、Intel Core i7-7700HQ CPU处理器、2.80 GHz、20 GB内存,算法由Java和Python实现。
数据集采用Study of Latinos(SOL)和Multi-Ethnic Study of Atherosclerosis(MESA)。这些数据集是利用腕带式的体能记录仪采集得到的,并且部分作为公开数据集,可以用于科学研究。其中,SOL的数据来自1887个受试者,包括物理活动和一般的诊断信息。MESA由2237个受试者7天的活动时间序列组成,因此共有28868天的活动数据,这两个数据集时序数据的采样周期为5 min。
4.2 评估标准
利用上文所述的预测模型,需要完成四种疾病的预测:正常(Normal)、睡眠呼吸暂停(Sleep Apnea)、高血压(Hypertension)失眠(Insomnia)。
在实验中,随机选择了600个受试者的活动时间序列作为测试数据集,其余数据用作训练数据。对表1所示的四种时间粒度下的act2vec模型,对超参数的设置如表2所示,其中w表示段内损失的窗口大小,N(T k)表示邻近片段数目,η表示正则化强度,d表示特征矩阵的维度。
表2 act2vec不同时间粒度下的超参数设置
4.3 结果分析
为了找到合适的act2vec特征表示的时间粒度,同时验证其特征表示的效果,将本文算法与SAXVSM、BOSS和BOSSVS三种时间序列特征表示模型作对比。同时,为了检验正则化对act2vec模型性能的影响,将模型中的正则化项即平滑损失函数去除,并在相同的实验环境下做了仿真实验。在上文提及过,由于时间粒度为一周时不存在邻近的时序片段的集合,因此week2vec无法添加平滑损失。
为了评估act2vec模型的特征表示效果,使用了一个简单的逻辑回归分类器进行分类(Logistic Regression Classifier,LRC)。从图4中可以看出act2vec方法性能明显优于其他三种基准时序数据表示模型,并且以天为时间粒度的模型的效果最佳,day2vec+Reg模型的准确率达到了83%,远远高于BOSS模型的59%;正则化显著地提升了hour2vec和day2vec的特征表示效果,并且正则化对于day2vec的准确率提升最大,达到了13%;当没有正则项时,除了day2vec外,包括基准时序序列表示模型在内的所有模型的ACC大致相同。
图4 特征表示模型性能对比
表3表示五种预测算法预测时间的对比,其中LRC算法的平均预测时间最短,带有预训练嵌入的SB-GRU平均预测时间最长。尽管带有预训练嵌入的SB-GRU平均预测时间最长,但是时间仅为0.186 s,准确率却得到了明显的提升。
表3 各预测模型平均预测时间对比 单位:s
为了评估所提出的预测模型在疾病预测方面的优势,采用半监督的训练方式,将SB-GRU与逻辑回归分类器LRC、CNN、GRU和Bi-GRU四种方法进行对比。同时,为了验证预训练嵌入的效果,将没有进行预训练的SB-GRU进行了比较,实验结果如下表。选取了准确性(Accuracy,ACC),精确性(Precise,Pre),召回率(Recall,Rec),特异性(Specificity,Spec)和F1 score作为实验的评价指标,ACC、Pre、Rec、Spec和F1这五种评价指标均在[0,1]之间取值,值越大预测效果越好。
如表4所示,总的来说,LRC预测表现最差,SBGRU模型表现优于其他的所有方法,并且加入预训练后模型的性能会得到进一步的提升。SB-GRU可以将模型预测准确率平均提升3.5%~14.3%。尤其是对睡眠呼吸暂停任务进行预测时,其准确率高于预训练的模型。预训练的加入会进一步提升模型的性能,对正常任务进行预测时,相比于SB-GRU,其准确率提升了13.3%。
表4 不同预测模型效果对比
在日常生活中,可获得的人体活动时序数据多,但是大部分的受试者所患疾病却不可知,在研究过程中,进行特征工程以学习时序数据特征的难度极大。因此,使用如act2vec无监督表示模型以学习数据的特征是有意义的。此外,在预测过程中,使用半监督的方式训练模型,可以获得更好的预测性能。
在验证了本文算法性能后,利用该算法在采集到的手环数据上进行实验,以进行疾病预测。将60%的数据用作训练集,剩下的用作测试集。无监督表示模型act2vec结合SB-GRU预测结果由图5混淆矩阵表示。其中x轴表示真实疾病,y轴表示预测结果。
图5 真实数据预测结果
从图5中可以看出,标签为正常的数据总数为119,92个数据被预测正确,8个、4个和15个样本被错误的预测为睡眠呼吸暂停、高血压及失眠,可以得出标签为正常的数据被预测正确的概率为77.3%。同理,标签为睡眠呼吸暂停、高血压和失眠的数据被预测正确的概率为78.3%、71.4%以及81.7%。总体而言,预测效果较好。
5 结束语
针对无法高效地从大量冗余数据中提取有效信息特征,进行疾病预测的问题,提出了一种称为act2vec的无监督表示学习模型,该方法从原始活动数据中学习时序数据的特征表示,通过分布式表示来挖掘可用于疾病预测任务的活动模式。考虑到数据的特征矩阵无法全面反映样本特性的问题,利用噪声估计转换构建表示学习损失函数,提取数据特征矩阵。引入所学习的特征矩阵构建堆叠双向GRU模型以进行疾病预测。2个数据集上的实验表明了所提方法的有效性。