专栏首页caoqi95的记录日志DeepSleepNet - 基于原始单通道 EEG 的自动睡眠阶段评分模型

DeepSleepNet - 基于原始单通道 EEG 的自动睡眠阶段评分模型

这篇论文是 2017 年在 IEEE 神经系统与康复工程学报上发布的一篇关于睡眠分阶的论文。这篇论文的主要贡献有:

  • 开发了一种新的模型架构,该架构在第一层使用两个具有不同滤波器尺寸的 CNN 和双向 LSTM。CNN 可以训练学习滤波,以从原始单通道 EEG 中提取时不变特征,同时可以训练双向 LSTM 以将诸如睡眠阶段转换规则的时间信息编码到模型中。
  • 实施了一个两步训练算法,可以通过反向传播有效地端到端地训练模型,同时防止模型在大型睡眠数据集中出现分类不平衡问题(即,只学习分类大多数睡眠阶段)
  • 表明了在不改变模型架构和训练算法的情况下,该模型可以自动学习来自两个数据集的不同原始单通道 EEG 的睡眠阶段评分特征。这两个数据集具有不同的属性(例如,采样率)和评分标准(AASM 和 R&K),没有使用任何手工提取的特征。

本篇论文贴心地给出了实现代码:https://github.com/akaraspt/deepsleepnet

早期的睡眠评分阶段,主要依赖于专家制定的评分规则(评分规则主要有: AASM 和 R&K),然后对照 PSG 的记录结果来进行睡眠分阶。这个过程往往是冗长乏味的,十分耗时的。而 DeepSleepNet 模型是基于原始单通道 EEG 的自动睡眠阶段评分模型,完全不依赖与手工工程。

作者还提到,深度学习已经被用于睡眠分阶中,比如应用深度置信网络 (DBNs)从原始的 PSG 中学习特征表示;CNN 被用于与少量输入数据进行卷积操作从原始 FpzCz 脑电图通道中提取时不变特征。但是这些文献中都表示深度学习模型作用于手工提取的特征会比作用于原始数据的性能要好。作者认为这可能是因为这些作者没有考虑到时间信息(temporal information)- 这个睡眠专家在进行睡眠分阶时会用到的信息。

DeepSleepNet 模型的架构

从上图中可以看出,该模型包含两部分。第一部分是表征学习(representation),这部分被用来训练滤波,从每个时期的原始单通道 EEG 信号中提取时不变信息(time-invariant features);第二部分是序列残差学习(sequence residual learning),这部分被用来训练编码时态信息(temporal information),例如来自提取的特征中的 EEG 时期的一个序列的睡眠阶段转换规则。

表征学习

论文作者在第一部分使用了两个 CNN 结构,如下图所示,其中小的 CNN 结构对于捕捉时态信息(例如,当某些脑电图模式出现时)更有用,大的 CNN 结构更有利于捕捉频域信息(如,频域成分)。

假设单通道 EEG 中有

个 30-s EEG 时期:

,使用 2 个 CNN 结构从第

个 EEG 时期中提取第

个特征

的计算如下:

其中θ 表示模型的参数, ||操作表示联合操作,将两个 CNN 的输出结合起来。最后得到

,将会传入下一个序列残差学习部分。

序列残差学习

这部分也包含 2 个组成:一个双向的 LSTM 结构和一个快捷连接结构,如下图所示。

使用双向 LSTM 结构,是因为其能够从数据中学习到睡眠分阶准则。双向 LSTM 通过使两个 LSTM 独立处理前向和后向输入序列来扩展 LSTM。换句话说,前向和后向 LSTM 的输出不相互连接。因此,该模型能够利用过去和未来的信息。作者还在 LSTM 中使用窥孔连接(peephole connection),这允许 LSTM 的门控机制在修改之前检查它们当前的存储单元。

使用快捷方式连接将该部分的计算重新表示为残差函数。这使模型能够添加从 CNN 提取的特征,即先前从输入序列中学习到的时态信息。作者还在快捷方式连接中使用全连接层,将 CNN 中的要素转换为可以添加到 LSTM 输出的向量。

假设,来自 CNN 的特征为

,t = 1 ... N 表示 30-s EEG 时期的时间索引,序列残差学习定义如下:

h 和 c 是 LSTM 的隐藏单元状态的向量。

训练算法

预训练过程

第一步是使用类平衡训练集对模型的表征学习部分执行受监督的预训练,以使模型不会过度适应大多数睡眠阶段。这可以在算法的第 1-8 行中看到。具体地,从模型中提取两个 CNN,然后用 softmax 层堆叠。值得注意的是,这个 softmax 与模型中的最后一层不同。该堆叠的 softmax 层仅在该步骤中用于预训练两个 CNN,其中在预训练结束时丢弃其参数。将这两个以 softmax 堆叠的 CNN 表示为预模型。然后使用称为 Adam 的基于小批量梯度的优化器以及学习率 lr,使用类平衡训练集训练预模型。在预训练结束时,丢弃 softmax 层。通过复制原始训练集中的少数群体睡眠阶段来获得类平衡训练集,使得所有睡眠阶段具有相同数量的样本。

微调过程

第二步是使用序列训练集对整个模型执行监督微调。这可以在算法第 9-19 行中看到。该步骤是将阶段转换规则编码到模型中以及对预先训练的 CNN 执行必要的调整。具体地,将初始模型的两个 CNN 的参数 θs 和 θl 替换为来自预模型的参数 θs 和 θ1 后得到模型。然后使用具有两种不同学习速率 lr1 和 lr2 的小批量 Adam 优化器,使用序列训练集训练模型。由于 CNN 部分已经过预训练,因此我们对 CNN 部分使用较低的学习速率 lr1,对序列残差学习部分使用较高的学习速率 lr2,以及 softmax 层。作者发现,当使用相同的学习速率来微调整个网络时,预先训练的 CNN 参数被过度调整为序列数据,这些数据不是类平衡的。因此,在微调结束时,模型开始过度适应大多数睡眠阶段。因此,在微调期间使用两种不同的学习速率。此外,作者使用启发式梯度裁剪技术来防止爆炸梯度,这在训练诸如 LSTM 的 RNN 时是众所周知的梯度爆炸问题。每当超过预定阈值时,该技术使用它们的全局范数将梯度重新缩放为较小的值。通过根据所有受试者的时间顺序排列原始训练集来获得序列训练集。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 基于 CNN 的中文对话情感分析

    这是 Data Mining 这门课的期末项目,主要记录一下中文文本的处理方式与 CNN 作用于文本特征的原理,网络训练调参和与其他模型的对比就不详细记录了。

    caoqi95
  • BERT - 用于语言理解的深度双向预训练转换器

    最近被 Google 的 BERT (Bidirectional Encoder Representations from Transfoemers)模型给刷屏...

    caoqi95
  • SleepNet - 通过深度学习实现的自动睡眠分阶系统

    前面总结了 DeepSleepNet 这篇论文,其是在原始的 EEG 数据上搭建 CNN 和 LSTM 混合模型来实现自动睡眠分阶任务的。而 SleepNet ...

    caoqi95
  • 干货 | 深度学习在携程攻略社区的应用

    ? 携程攻略社区是携程旗下的旅游攻略类社区,致力于为旅行者提供出行指南和资讯服务。依托携程2.5亿用户总量,社区日活跃用户超过500万,并汇集3000万条真实...

    携程技术
  • CentOS7上编译Android系统

    kongxx
  • redis 入门理念

    平凡的学生族
  • DeepLearningNotes

    f(\frac{x_1+x_2}{2})\leq{\frac{f(x_1)+f(x_2)}{2}}

    DuncanZhou
  • PHP超级全局变量【$GLOBALS,$_SERVER,$_REQUEST等】用法实例分析

    咱们这次就来聊聊$GLOBALS&$_SERVER&$_REQUEST这三个超级全局变量。首先是$GLOBALS,它是PHP的一个超级全局变量组,在一个PHP脚...

    砸漏
  • Android模拟器中替换系统应用的方法

    drunkdream
  • Java---实现运行任意目录下class中加了@MyTest的空参方法(实现图形界面)

    因为上个代码,总是要输入完整的绝对路径,比较麻烦,于是,就写了这个小程序,直接进入文件对话框选择需要运行的class文件。

    谙忆

扫码关注云+社区

领取腾讯云代金券