我正在研究睡眠阶段分类。我阅读了一些关于这个主题的研究文章,其中许多使用了 SVM 或集成方法。使用卷积神经网络对一维脑电信号进行分类是个好主意吗?
我对这种工作很陌生。如果我问错了什么,请原谅我?
使用 CNN 对一维信号进行分类是个好主意吗?
我猜一维信号是指时间序列数据,您假设值之间存在时间依赖性。在这种情况下,卷积神经网络 (CNN) 是可能的方法之一。处理此类数据最流行的神经网络方法是使用循环神经网络 (RNN),但您也可以使用 CNN 或Bradbury 等人 (2016)讨论的混合方法(准循环神经网络,QRNN),以及如下图所示。还有其他方法,例如单独使用注意力,如Vaswani 等人 (2017)描述的 Transformer 网络,其中有关时间的信息通过傅里叶级数特征传递。
使用RNN,您将使用一个将先前隐藏状态和当前输入值作为输入的单元格来返回输出和另一个隐藏状态,因此信息通过隐藏状态流动。使用 CNN,您将使用一定宽度的滑动窗口,这将在数据中看起来某些(学习的)模式,并将这些窗口堆叠在一起,以便更高级别的窗口可以在较低级别中寻找模式模式。使用这种滑动窗口可能有助于查找数据中的重复模式(例如季节性模式)等内容。QRNN 层混合了这两种方法。事实上,CNN 和 QRNN 架构的优势之一是它们比 RNN 更快。
您当然可以使用 CNN 对一维信号进行分类。由于您对睡眠阶段分类感兴趣,请参阅本文。它是一个称为 DeepSleepNet 的深度神经网络,使用一维卷积和 LSTM 层的组合将 EEG 信号分类为睡眠阶段。
这是架构:
网络有两个部分:
- 表征学习层: 这由两个并行的卷积网络组成。两个网络之间的主要区别在于内核大小和最大池窗口大小。左边的使用内核大小=(在哪里是信号的采样率)而右边的使用内核大小=. 这背后的直觉是,一个网络试图学习“精细”(或高频)特征,而另一个网络试图学习“粗略”(或低频)特征。
- 顺序学习层:来自卷积层的嵌入(或学习的特征)被连接并馈送到 LSTM 层以学习嵌入之间的时间依赖性。
最后有一个 5-way softmax 层将时间序列分类为对应于睡眠阶段的五类之一。
FWIW,我建议从这篇论文中查看时间卷积网络(我不是作者)。他们有一个巧妙的想法,将 CNN 用于时间序列数据,对时间顺序很敏感,并且可以对任意长的序列进行建模(但没有记忆)。
我想强调使用堆叠混合方法(CNN + RNN)来处理长序列:
您可能知道,一维 CNN 对时间步长的顺序不敏感(不超过局部尺度);当然,通过将大量卷积和池化层堆叠在一起,最终层能够观察到原始输入的更长子序列。但是,这可能不是模拟长期依赖关系的有效方法。虽然,与 RNN 相比,CNN 的速度非常快。
另一方面,RNN 对时间步的顺序很敏感,因此可以很好地建模时间依赖性。但是,众所周知,它们在建模非常长期的依赖关系方面很弱,其中时间步长可能具有时间依赖关系,时间步长在输入中很远。此外,当时间步数很高时,它们非常慢。
因此,一种有效的方法可能是以这种方式组合 CNN 和 RNN:首先我们使用卷积和池化层来降低输入的维数。这将为我们提供具有更高级别特征的原始输入的相当压缩的表示。然后我们可以将这个较短的一维序列提供给 RNN 进行进一步处理。因此,我们同时利用了 CNN 的速度以及 RNN 的表示能力。尽管与任何其他方法一样,您应该在您的特定用例和数据集上对此进行试验,以确定它是否有效。
这是此方法的粗略说明:
--------------------------
- -
- long 1D sequence -
- -
--------------------------
|
|
v
==========================
= =
= Conv + Pooling layers =
= =
==========================
|
|
v
---------------------------
- -
- Shorter representations -
- (higher-level -
- CNN features) -
- -
---------------------------
|
|
v
===========================
= =
= (stack of) RNN layers =
= =
===========================
|
|
v
===============================
= =
= classifier, regressor, etc. =
= =
===============================