前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >DeepSleepNet - 基于原始单通道 EEG 的自动睡眠阶段评分模型

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

作者头像
caoqi95
发布2019-03-28 11:26:59
2.9K0
发布2019-03-28 11:26:59
举报

这篇论文是 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 中有

N
N

个 30-s EEG 时期:

\{\mathbf{x}_1, \mathbf{x}_2..., \mathbf{x}_N\}
\{\mathbf{x}_1, \mathbf{x}_2..., \mathbf{x}_N\}

,使用 2 个 CNN 结构从第

i
i

个 EEG 时期中提取第

i
i

个特征

\mathbf{a}_i
\mathbf{a}_i

的计算如下:

\mathbf{h}^{s}_i = CNN_ \left ( \theta _{s}\right ) (\mathbf{x}_i)
\mathbf{h}^{s}_i = CNN_ \left ( \theta _{s}\right ) (\mathbf{x}_i)
\mathbf{h}^{l}_i = CNN_ \left ( \theta _{l}\right ) (\mathbf{x}_i)
\mathbf{h}^{l}_i = CNN_ \left ( \theta _{l}\right ) (\mathbf{x}_i)
\mathbf{a}_i = \mathbf{h}^{s}_i || \mathbf{h}^{l}_i
\mathbf{a}_i = \mathbf{h}^{s}_i || \mathbf{h}^{l}_i

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

\{\mathbf{a}_1, \mathbf{a}_2..., \mathbf{a}_N\}
\{\mathbf{a}_1, \mathbf{a}_2..., \mathbf{a}_N\}

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

序列残差学习

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

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

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

假设,来自 CNN 的特征为

\{\mathbf{a}_1, \mathbf{a}_2..., \mathbf{a}_N\}
\{\mathbf{a}_1, \mathbf{a}_2..., \mathbf{a}_N\}

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

\mathbf{h}^{f}_t,\mathbf{c}^{f}_t = LSTM_ \left ( \theta _{f}\right ) (\mathbf{h}^{f}_{t-1},\mathbf{c}^{f}_{t-1},\mathbf{a}_t)
\mathbf{h}^{f}_t,\mathbf{c}^{f}_t = LSTM_ \left ( \theta _{f}\right ) (\mathbf{h}^{f}_{t-1},\mathbf{c}^{f}_{t-1},\mathbf{a}_t)
\mathbf{h}^{b}_t,\mathbf{c}^{b}_t = LSTM_ \left ( \theta _{b}\right ) (\mathbf{h}^{b}_{t+1},\mathbf{c}^{b}_{t+1},\mathbf{a}_t)
\mathbf{h}^{b}_t,\mathbf{c}^{b}_t = LSTM_ \left ( \theta _{b}\right ) (\mathbf{h}^{b}_{t+1},\mathbf{c}^{b}_{t+1},\mathbf{a}_t)
\mathbf{o}_t = \mathbf{h}^{f}_t || \mathbf{h}^{b}_t + FC_\theta(\mathbf{a}_t)
\mathbf{o}_t = \mathbf{h}^{f}_t || \mathbf{h}^{b}_t + FC_\theta(\mathbf{a}_t)

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 时是众所周知的梯度爆炸问题。每当超过预定阈值时,该技术使用它们的全局范数将梯度重新缩放为较小的值。通过根据所有受试者的时间顺序排列原始训练集来获得序列训练集。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.11.18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • DeepSleepNet 模型的架构
    • 表征学习
      • 序列残差学习
      • 训练算法
        • 预训练过程
          • 微调过程
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档