使用迁移学习做信号分类
来自系列: 时间序列数据的深度学习
本视频由浅入深地介绍了如何在时间序列数据上用深度学习技术做信号的分类。
第一部分中我们首先简单介绍一下深度学习,包括它的概念和工作流程等,并且演示了如何使用基于卷积神经网络的迁移学习来做心电图信号的分类。通过基于迁移学习的心电图分类的用例,我们可以看到为了使用CNN进行对于一维信号的迁移学习,我们首先把信号转化成一种时频表示。
出版年份: 2020 年 10 月 18 日
人工智能技术在图像和信号数据上的应用越来越广泛,所涉及行业包括通信电子、生物医疗和健康等。比如,在医疗和健康行业当中,人工智能技术在数字健康、生物信号分析和病人监测等领域有着广泛的应用。
时间序列是按时间顺序排列的一组数字序列,是最常见的信号形式。基于时间序列的人工智能技术可以做股票预测、音乐推荐和疾病诊断等。在本系列视频中,我们将使用真实的心电数据集演示MATLAB中的各种深度学习方法和框架在时间序列信号的分类当中的应用。
本视频将分为两部分。
l 第一部分中我们将首先简单介绍一下深度学习,包括它的概念和工作流程等。之后我们将演示怎样用迁移学习来做ECG信号,也就是心电图信号的分类。最后是一个小结。
l 第二部分中我们将首先介绍什么是小波散射,之后将聚焦在怎样使用小波散射技术也就是不变散射卷积网络做自动特征提取,和用长短期记忆网络也就是LSTM(Long Short-Term Memory)做心电图信号的分类。
深度学习是推动当前人工智能大趋势的关键技术。它的起源可以追溯到计算早期的人工智能,后来发展到机器学习,现在它被认为是机器学习的一个子集。
l 从上世纪50年代发展起来的人工智能技术包含任何能使机器模仿人类智能的技术;
l 之后80年代出现的机器学习是指机器能够从数据中学习任务,而不依赖于预定的方程式或模式
l 2010年左右出现的深度学习也是一种机器学习方法,具体是指利用多层神经网络直接从图像、文本或声音数据中学习表示和任务。
深度学习已经成为我们日常生活的一部分,其中流行的消费者应用包括
l 智能音箱中的语音识别
l 手机摄像头的面部检测
l 以及汽车自动驾驶系统等
在传统的或浅层的机器学习技术中,通常需要一个手动的特征提取步骤来从图像等数据中学习有区别的信息,也就是特征必须手动设计,分类器也必须手动选择。
在深度学习中,我们删掉了一些步骤。深度学习是一种端到端的机器学习技术,这意味着给一个网络原始数据和一个任务,比如来执行类似的分类,深度学习不仅能自动地学习模型,还能自动的学习特征,也就是其特征提取和建模步骤对用户是自动完成的。
深度学习和机器学习另一个区别是,深度学习算法随数据而扩展,而浅层学习则收敛。这意味着,当我们向网络中添加更多的示例和训练数据时,浅层学习方法将在一定的性能水平上停滞不前,而深层学习网络通常会继续改进。
在MATLAB Academy上提供了一些机器学习和深度学习的课程,感兴趣的同学可以去看一下。其中机器学习入门之旅和升读学习入门之旅都是免费提供给大家的。
让我们看看典型的机器学习和深度学习工作流中涉及的步骤。
l 第一步是访问和探索数据,包括从不同的数据源读取数据,比如不同格式的文件、数据库和传感器等。
l 第二步通常是预处理步骤。在这一步骤中,原始数据被处理或转换以供机器学习/深度学习算法使用。预处理操作包括清理杂乱的数据,比如去除离群值、插入缺失值等;应用各种数据简化和转换技术,仅保留最相关的信息;并利用领域知识,如图像特征,提取特征或预测因子等。
l 一旦数据经过预处理,就可以进行第三步,即开发预测模型。在这一步中,我们对于使用的机器学习和深度学习技术,以及该技术的各种参数,有很大的灵活性。典型的任务包括训练和比较多个模型、优化模型参数,和验证模型性能以确保鲁棒性等等。
l 最后一步是集成经过培训的模型并快速构建和精确部署它们。模型可以在嵌入式系统上运行、以及作为独立应用程序共享或部署在云上。
对于不同的数据类型,通常我们会选择不同的机器学习技术。比如对于数字数据,我们通常会采用传统的机器学习或者LSTM,对于图像数据,一般采用卷积神经网络CNN。对于时间序列或者文字数据,LSTM和CNN都可以被使用。
在这个示例中我们将演示如何利用预选训练好的CNN架构,快速开发一个分类器对ECG信号进行迁移学习。由于CNN的输入是图像,我们首先需要利用时频转换将一维信号转换成二维图像。
时频表示可以捕捉信号的时频内容。通常的时频表示包含:
l 短时傅里叶变化产生的频谱图 (Spectrogram),
l 梅尔频谱图,也就是为了模拟人耳听觉对实际频率的敏感程度,在频谱图加上了梅尔滤波函数
l 由连续小波变换产生的尺度图(scalogram)
l 和常数Q变换等等
在这个示例里,我们用的是尺度图。
利用CNN进行深度学习时,我们首先将原始信号做时频变换,产生原始信号的时频表示,然后将时频图做为输入来训练深度网络,训练出来的网络就是整个流程的输出。对于一个新的信号,通常先做时频转换,然后将它输入到训练好的模型里,输出对于新信号的分类。
在这个用例当中,我们还使用了迁移学习技术。它的基本思想是通过加载一个预训练好的网络,比如AlexNet,然后替换掉最后几层,用来学习特定于我们数据的特征。比如原始的AlexNet支持1000种分类,而现在我们的数据只包含三个分类。因此我们可以替换到最后几层让它变成一个支持3个分类的网络。较少的分类可以使网络进行更快地学习。之后我们可以训练网络、评估网络的准确定并进行部署。迁移学习比从空白开始构建学习网络要更省时省力。
下面我们来看一下MATLAB代码
l 基于连续小波变换的心电图分类,主要分成准备信号,生成小波时频表示和训练预训练的网络三个部分。
l 在准备信号部分,我们首先需要加载数据,可以看到在这个用例里数据是由162个采样信号组成,每个信号代表着以下某种心脏的健康程度: ARR指的心律失常,CHF是指充血性心力衰竭,NSR是心律正常。
l 我们可以通过Signal Analyzer App来可视化地探索信号的时间和频率信息。在我的另外一个视频:MATLAB中的信号处理Apps简介中做了详细介绍。这里就不做展开了。
l 接着,我们可以查看两种不同的心电图信号的时域信号图和频谱图。通过这些图可以看到,传统的时频分析下,两种信号的差别并不是非常明显。
l 我们利用连续小波变换以获得信号清晰的时频表现和增强的频谱细节。我们可以看到在连续小波变换生成的尺度图中,峰值分明;正常信号下,黄条线代表的峰值呈现规则分布,而心律失常信号下,峰值之间有时间隔大一些,有时小一点,并不是很均匀;另外,在心律失常表现的下半部分有一些活动,而正常信号没有。我么可以将这些表示保存为图像,并训练预配置的卷积神经网络。
l 为了生成信号的时频表示,我们首先创建一个滤波器组,在对每一个信号去做小波变换,我们具体是如何生成所有信号的时频表示的,请参看PrepareSignalData_cn.mlx 这个实时脚本。
l 之后我们利用imageDatastore 指向已标记数据的目录,并且将自动创建训练和测试集
l 第三部分是训练预训练的网络。我们将加载经过预训练的 Alexnet 网络. 这个网络可以通过附加功能管理器下载。为了减少网络能区分的种类,我们仅对最后几层进行重新训练。我们用新的 fullyConnectedLayer 和新的 classificationLayer 替换它们。当然,您还可以使用您还可以通过Deep Network Designer App 以图形方式执行此操作。
l 设置好解算器和初始学习率等参数后我们就可以开始训练了。
l 这是利用一个GPU训练的时频,我们可以看到随着迭代次数的增加,准确率趋于100%,而错误率趋于0.
l 最后我们通过在测试集上使用训练好的模型,并显示混淆矩阵来评价训练的模型。
总结一下,通过基于迁移学习的心电图分类的用例,我们可以看到为了使用CNN进行一维信号的迁移学习,我们首先把信号转化成一种时频表示。可以定制和训练您的神经网络,以便从这些表示中自动学习特征。最后,我们可以看到除去观察信号等操作,实现信号迁移学习的MATLAB代码量非常小,基本少于10行
这部分视频,我们主要介绍了深度学习的概念以及工作流程等。然后我们演示了如何使用迁移学习来做心电图信号的分类。在本视频的第二部分中,我们将介绍另外一种有效的利用不变散射卷积网络和LSTMs进行心电图分类的方法。在视频的第二部分当中见!