0、手把手教你Deep Learning处理BCI生物数据

 前言:

本人学生党刚毕业,现在是一名科技公司的算法工程师,依然做BCI相关算法工作。公司较为开朗,鼓励工程师攥写博客,所以我才写下这一系列。自己也算是沉浸于BCI这种医工结合的领域多年,有幸跟随老师认识了我国BCI领域各个高校的大牛和课题组,学到了很多。在此博客系列中,我会把自己多年对于深度学习怎样处理BCI的各个数据进行阐述,若有其他同僚看到,欢迎互相交流学习,若有志于从事使用DL模型探索脑机接口的本硕生,请你们好好看完,好好学习,为自己的将来学得一门本领。在这第一篇博客中,我会阐述深度学习模型处理生物信号的三大问题,在此后文章中会对这些问题依次以项目为例,进行讲解。

一、深度学习:从入门到入门

还没毕业时,常有研一师弟问我,深度学习怎样学习,学好之后怎样处理我们的EEG数据。怎样学习深度学习已是老生常谈,打开知乎和b站有很多资料可以参考学习,总之五花八门,数不胜数。据此,对于小白(国内极少数高校本科开设人工智能专业+研一研究方向人工智能or脑机接口)怎样学习深度学习,我的推荐如下:

书:

深度学习圣经般的存在:花书两本李沐等大神编写的《动手学深度学习》+《深度学习》

[资料]深度学习(花书)带封面文字版PDF - 机器学习技术 - 经管之家(原人大经济论坛)

《动手学深度学习》纸质书样书 - 知乎

  

我个人建议这两本书中的配套项目都自己手打一边,先看《深度学习》,看完再看《动手学》,并且看的过程中是可以配合下面要讲的吴恩达的视频一起学习的。

视频:

b站 [双语字幕]吴恩达深度学习deeplearning.ai  [双语字幕]吴恩达深度学习deeplearning.ai_哔哩哔哩_bilibili

b站李宏毅深度学习

(强推)李宏毅2021/2022春机器学习课程_哔哩哔哩_bilibili

建议先看完吴恩达的再看李宏毅的,另外,有需要吴恩达全程课件笔记和课后习题的私信我,我不是卖资料的,可加我V,直接发。

项目代码:github

有人问我编程能力怎样提高,我的回答都是看高手写的代码,不是学习编程风格(有人对你讲编程优美好看的,比如你面试一些公司,面试官让你手搓代码,然后说你要注意编程简洁优美的,趁早去下家面试),而是学习人家的编程思路思想。无疑,Github高手如云,去学去动手敲代码吧。

论文查看:pubmed,AMiner Search

找JCR2区及其以上的,近三年的高水平的论文去看,去学习别人的预处理工作和建模思路。

小结:

说到这里,有人会问:脑电等生理信号可以用机器学习去搞的呀,为啥急头白脸去学Deep Learning呢。此话不假,不得不说的是,机器学习等算法至今早已趋于成熟,并且一些算法在我国一些大厂还用于集装箱检测等项目中。下面我们看一下机器学习包含的模型:

 由图可知,机器学习按照模型类型分为监督学习模型、无监督学习模型概率模型三大类(图来源于GoAI-机器学习专栏(69条消息) 机器学习知识点全面总结_GoAI的博客-CSDN博客)。在大的类别上,机器学习包含深度学习,深度学习是从机器学习这位老大哥上发展起来的,我当时在学习深度学习时,首先是把机器学习这三类模型都过了一遍,记了笔记,逐个实现了一遍模型,再去学习深度学习的。虽然现今机器学习和深度学习相差较大,但机器学习的思想仍可作为我们学习DL的领航者。这里推荐一个我当时学习机器学习的一位前辈:【sklearn机器学习】菜菜的sklearn机器学习完整版(中)_哔哩哔哩_bilibili

尽管机器学习模型已趋于成熟,但在2012年Kaggle大赛中Geoffrey Everest Hinton(深度学习教父,深度学习三大巨头之一)和他的学生Alex提出的AlexNet网络首次证明了神经网络学习到的特征可以超越手工设计的特征(机器学习的输入需要手工设计),所以近年来,随着硬件技术的长足发展和GPU/CPU的并行计算的实现,使得大规模神经网络的实现变为了可能。神经网络被证实在计算机视觉领域拥有杰出的处理能力,并在处理生物信号中仍具有高效的分类/预测能力。所以,我们应该把深度学习学好、做好。

那我在这里为什么题目是从入门到入门呢,因为DL学的越多,你会发现需要学习的就愈发的多,学无止境。

二、三座大山

我们这里确定了使用深度学习模型去处理EEG信号,那我们会遇到哪些问题呢,这里我总结了三大问题:

(1)第一座大山:数据导入

BCI数据五花八门,什么EEG、EMG、肌电、心电、眼电、脑力负荷等,而又因为采集这些数据的设备型号不同,自动保存成的数据格式就不同,常见的BCI信号可以保存为.m、.csv、.xlsx遇到这样的数据我心里就谢天谢地,再有已经打好的标签这还不手到擒来!

如果遇到.cdt、.gdf、.bdf、.sample格式的数据该怎们办呢,如果遇到的数据没有标签怎么办呢。所以首先数据导入python环境中是第一大问题,如果导不进去,我们如何做数据分析和数据清洗等预处理工作呢?导不进去,或者导入错误,比如数据维度置换了,通道去了别的维度,或者导入的不全,浪费了样本,这都是不可取的。至于没有标签,我们就先做数据分析,分析他的实验范式和实验评价标准,我们自己写代码,给他打上标签!

(2)第二座大山:模型搭建和数据输入

在搭建神经网络模型之前我们需要选择适合于我们数据任务类型的模型,比如你使用的数据是脑电运动想象(MI)数据,去做四分类,但是你选用的是回归模型,那结果可想而知。选择适合的模型之后,我们需要对样本数据的输入形状(Input.shape)做一个探讨,就是shape怎样输入才能使得结果最好,这里面对的问题如下所示:

1.数据需不需要升维?

(batch_size,input_channels,len(data))3维 VS 4维(batch_size,input_channels,,H,W)

2.数据需要填充的怎样填充最好?

import pandas as pd
import numpy as np

data = pd.read_csv(A01T.csv)

data = np.pad(data,((0,0),(0,0),(0,400)),'constant') #数据第三维度后面填充400个0,填充方式'连续'

data_leftright = np.pad(data,((0,0),(0,0),(200,200)),'constant')#数据第三维度前后各填充200个0,填充方式'连续'

* 上面代码展示了两种填充方式:len(data)后面填充 VS len(data)前后填充

* 数据填充 VS 模型填充

3.len(data)填充 VS len(data)不填充

我这几年查看相关论文,很遗憾的看到,这些论文只说明了自己数据是怎样输入的,例如16*16输入到Conv2d中或者一个60s的数据片段共750个数据点输入到Conv1d中,但是他们都未说明为何以这种形状(shape)作为输入。这在一定程度上可以察觉到:很多提出的新的模型,以及在模型上可行的一些创新,都只是服务于他们私人数据的奴隶,模型泛化能力差。

(3)第三座大山:模型调参和结果可视化

好了,模型我们建立完了,数据最佳输入形状找好了,我们现在要用数据去训练模型了,不可避免地,我们的模型需要大量的时间去调参。在经过了艰苦而快乐的调优之后,我们需要用一些专业的可视化方法将我们最终的结果导出来,这活既要干的利索也要做的漂亮,因为这些图我们后面要拿来写论文写专利的。

三 总结:

前面的三座大山,在之后我的博客中我会依次以真实的项目和模型配套代码等形式依次阐述,最后我想再写上Deep Learning 几位领航者的谶语,希望各位,在深度学习这条路学习、工作多年之后,再回来看到这些大佬说的话,会有所感悟。

“目前深度学习在社会各个应用领域仍是有监督学习,但我相信在未来无监督学习仍是重要的,并且GANs这一个网络也是非常棒的研究。“                                ————Geoffrey Everest Hinton

“多读论文,但别读太多。”                                                       ————Geoffrey Everest Hinton

“当你有个好的想法时,但别人都认为你是个白痴,或者认为你喝多了,那它就是一个绝好的想法,只要你能坚持”                                                                    ————Geoffrey Everest Hinton

“之前人们的工作都是在计算机上进行编程,我们现在要做的工作是训练计算机让他自己思考,但二者同样重要”                                                                            ————Geoffrey Everest Hinton

“深度学习拥有强大的生命力,它是人类社会的第二种新的电力,只是大多数人还没意识到而已”

                                                                                                    —————————Andrew Ng

“深度学习自学也可以成才”                                                                       ———— Pieter Abbeel

"我认为,在系统开发初期,加入安全性问题是非常重要的,我们发现当系统建立之后,再引入安全性是很难的,如果我们现在开始预见机器学习的安全问题,就可以一开始确保这些算法的安全性"                                                                                                            ————Lan Goodfellow

AI教父Geoff Hinton和深度学习的40年 - 知乎

Geoffrey Everest Hinton(反向传播、受限玻尔兹曼机等创建者,被誉为深度学习教父,现任Google副总裁, 2018 年图灵奖获得者

除了吴恩达,你还需要了解的14位数据科学领域最具影响力人物 - 知乎

 

Andrew Ng(吴恩达,美国斯坦福大学计算机系的副教授,师从机器学习的大师级人物 Michael I. Jordan,Coursera公司创始人,百度首席科学家)

Pieter Abbeel( 2021 ACM 计算机奖(ACM Prize in Computing)金牌获得者,现任美国加州大学伯克利分校教授,博导师从吴恩达)

终于有人把生成对抗网络(GAN)讲明白了_hzbooks的博客-CSDN博客

                    Lan Goodfellow(兰·古德费罗,生成对抗网络GAN创建者,吴恩达助教)

猜你喜欢

转载自blog.csdn.net/mantoudamahou/article/details/131976820