我是一名消化内科医生,平日的工作是消化内镜的诊疗,统计学是爱好,近年来,我常常在思考我们以前在研究生时学的统计学和现在火得一塌糊涂的人工智能有什么联系,我们年轻医生有没有可能利用这方面的知识为研究增添亮点。
任正非曾说过,人工智能就是统计学。我们医生在做临床研究的时候,会接触到诸如t检验、方差分析、各种回归建模等常见的统计方法,这些方法在医咖会的SPSS全套教程中都有详细的讲解。那么这些统计学方法可以和高大上的人工智能扯上关系吗?
今年6月,国内的《中华消化杂志》还专门设了一期人工智能的专栏,然而这些综述罗列了一些列的研究成果与晦涩的概念,理解门槛较高。我试试从一个一线临床医生的角度谈谈我对传统医学统计学到人工智能的理解,因水平有限,文章不会涉及太多的公式原理,只讲自己一些较为通俗的理解。
传统医学统计学:P值的局限
环顾各式各样医学统计学的书籍,你会发现到处都是无效假设、备择假设、α、β、P值这些绕得要死的概念,前一天或许你还清清楚楚背了下来,不用几天,又不记得具体含义了。之所以这些概念那么绕口,我认为是因为医学统计学所涉及的大都属于“频率学派”的内容,其基石是假设检验,而这假设检验又是需要用到绕口的反证法。
举个简单的例子,甲发明了一种新药物,想了解它是否对治疗感冒有效,于是找了100个人吃药,作为药物组,另100个人吃安慰剂,作为对照组。甲的试验发现药物组的治疗有效人数是60个,对照组是40个,60%对40%,所以甲认为是有效的;
乙也发明了一种药物,也做了同样的试验,发现有效率分别是60%和50%。乙看了甲的试验结果想了想,反正药物组有效率都差不多,只是对照组的结果有点区别而已,那我的药物也是有效的。
看到这里,有一定统计学基础的你肯定知道单看百分比是不对的,需要进行卡方检验。通过简单的SPSS操作,可以知道甲组试验的卡方值为8,P=0.005,乙组的的卡方值为2.02,P=0.155。
我们设定无效假设(H0):新药物和安慰剂无治疗差异;备择假设(H1):新药物和安慰剂有治疗差异;设定显著性水平α为0.05;那么P=0.005的意思就是说,假设H0真的成立的话,甲要重复1000次的话才能有5次得到新药物无效的结果,P值远远小于0.05,这么低概率的事件肯定是不成立的,所以拒绝H0,接受H1,认为新药物是有效的。
对于乙来说,假如H0成立的话,它的试验重复100次就有15-16次出现H0的结果了,这个概率还是挺高的,高于α,所以就不拒绝H0了,也就是说差异无统计学意义,暂不能认为乙的新药物是有效的。
注意,p值并不能描述无效假设和备选假设本身为真的概率,p值只描述样本与无效假设的相悖程度,P=0.05代表100次试验才出现5次无效假设的结果。这个概率实在太小了,所以我们认为无效假设是假的。
那么我们有没有什么方法可以知道出现无效假设和备择假设的概率是多少呢?有没有可能知道每个试验个体有多少概率会对药物有效呢?机器学习或许能打开你新的思路。
机器学习:从另一个角度看logistic回归
什么是机器学习?卡内基梅隆大学(Carnegie Mellon University)的Tom Michacl Mitchell教授在其1997年出版的《Machine Learning(机器学习)》一书中对机器学习给予了非常专业的定义:如果一个程序可以在特点任务上,随着经验的增加,效果也可以随之增加,则称这个程序可以从经验中学习。
这一关于机器学习的定义在学术界内被广泛引用。打个比方,机器学习就像一群要准备高考的学生,他们的名字分别是“logistic回归”、“决策树”、“随机森林”、“支持向量机”、“神经网络”等等,他们各有各的独特的解题技巧,但都有一个共同的特点:你给的训练试卷越多、越有代表性,那么他们在高考的表现就越好。
在这群学生中,就数小罗同学(logistic回归)最熟悉最经典了,他是我们病例对照研究中的常客。在传统医学统计学方面,他可以帮我们筛选预测变量、校正混杂因素、算出OR值,从机器学习的角度,他还可以帮我们做预测、判别。
先插一句:什么是回归?回归实际上就是“最佳拟合”。根据已有的数据拟合出一条最佳的直线、曲线、超平面或函数等,用于预测其它数据的目标值。然后你在给出一个x,就能得到一个y值。
我们回顾一下医咖会SPSS教程《SPSS操作:多项测量指标的ROC曲线分析》,案例收集了85例肺癌患者,259例非肺癌患者,结局变量为二分类变量:是否患肺癌;预测变量有5个:年龄、性别、BMI、COPD病史、吸烟史,这次的统计任务就是通过这5个预测变量,推算患肺癌概率。
概率P为结局变量,取值范围在0-1;5个预测变量参照线性回归模型的结构:β0+β1X1+……βpXp,取值范围在负无穷到正无穷。结局变量和预测变量是无法直接联系起来的,需要经过Logit变换,以下也就是logistic回归模型的表达:
Logit P=β0+β1X1+……βpXp
Logit P=ln [P/(1-P)]
一通转换操作下来,可以得到P=1/1+e-β0+β1X1+……βpXp,这也是鼎鼎大名的sigmoid函数,在后面的神经网络还会提到。
Sigmoid函数
公式中的β0、β1这些系数通过极大似然估计得到的,通过这个公式就可以算出每个个体得肺癌的概率。我们按照教程,可以看到每个案例个体后都生成了一个概率值。
但这还远远不是机器学习的体现,因为这个简单的教程中缺少了训练集与测试集的划分,还有模型的评价。这个数据有300多个案例,小罗同学全拿来做训练,但缺少了最终的考试,平时训练的成绩再好也说明不了什么。
所以最好划分出70%的训练集,30%的测试集,评价测试集的成绩。看到这里,你或许会想,这怎么和目前流行的临床预测模型那么像?其实,现在遍地开花的临床预测模型培训班也正是从机器学习领域中吸取了一部分精华。
这就是小罗同学在二分类任务中的体现,作为机器学习中经典的分类器,他常常被用来和其他同学比较。
深度学习:神经网络的蓬勃发展
刚才说过,机器学习这个班上有各色各样的同学。小罗同学是个规规矩矩的学生,每道题他都能清清楚楚地说出它的每个系数、每个概率是怎么算出来的。而大神同学(神经网络)似乎只注重结果不注重过程,给他一份试卷,他或许可以做得很好,但是他就是讲不清楚他为什么这么做,久而久之,人们觉得他脑子像个黑箱(可解释性差),考试全凭直觉。
但是大神有个很厉害的技能,他会反复对每个错题都仔细核对,纠正做题方法(损失函数)。有时这会取得很好的效果,但有时他把一些无关因素都当做做错题的原因(过拟合),例如握笔的力度太轻了,让人哭笑不得。20世纪40年代,大神同学就已经来到了机器学习这个班上,比小罗同学都早30年,但是就是因为他古怪的性格一直被歧视。直到21世纪初至今,随着大数据的涌现和计算机能力的提升,他的能力突然呈爆发性增长,成为班里最瞩目的一个学生,甚至独创了“深度学习”这个门派。
神经网络是模拟神经元的创造出来的,然而我们医生群体理解起来还是略困难,笔者试图翻了几本有关机器学习和深度学习的书籍也没有找到通俗易懂的解释,这里借用周志华《机器学习》中的定义:神经网络是由具有适应性的简单单元组成的广泛并行互连的网络,它的组织能够模拟生物神经系统对真实世界物体所作出的交互反应。
要在短的篇幅说清楚神经网络是很困难的,简单来说神经网络分成3个部分:输入层、隐藏层和输出层;以上述肺癌的数据为例,输入层就是5个预测变量,输出层就是是否患肺癌。隐藏层和每层的节点可以有很多,典型的深度学习模型就是很深层的神经网络。
隐藏层中的节点就如同神经元,一方面处理输入的信息,一方面进一步加工输出到输出层,他们之间通过权重w联系。输入层的信息来到节点会进行加总,通过激活函数(譬如sigmoid函数)传到下一层。在迭代训练的过程中,上次训练输出的预测值会与真实值对比,产生损失函数(Loss Function)逆向传播,重新调整隐藏层每个神经元的权重参数与激活的阈值。所以神经网络的学习就是不断调整权重的过程。[我的理解:隐藏层就是找到一些节点并通过每一个病例的数据想办法把输入层即肺癌的5个预测变量与输出层即是否肺癌联系起来,而这种节点之间通过隐秘而伟大的函数联系起来]
这么高大上的算法,SPSS很早就有了,打开分析菜单栏就可以看到神经网络选项,里面有两个简单的神经网络:多层感知器和径向基函数,里面的隐藏层只能设置一到两个,
具体的操作可以参考张文彤老师的《SPSS统计分析高级教程》。R语言中也有多个关于神经网络的学习包,包括nnet、AMORE、neuralnet和RSSNS包,可以创建更复杂的神经网络。
那么这个高大上的算法是不是就比经典的logistic回归预测得更好呢?有兴趣的同学可以回到刚才的肺癌数据集中,用SPSS跑一遍。你会发现,神经网络在这个数据集中表现得并不怎么好,有时甚至还不如logistic回归。
再回顾国内外的文献,也有些研究试图用神经网络预测临床事件,它们有的发现效果不如logistic回归,有的则发现神经网络模型的AUC会稍高,但如果深究下去,这种AUC的差异很可能是没有统计学意义的。造成这个现象的原因有很多,包括数据本身的分布性质、样本量不够、收集的预测变量代表性不足、模型的过拟合等等。
其实神经网络并不一定适用于普通的数据分析。我们临床研究中的数据集,一般都在几百例左右,稍大一点的多中心研究可能达到数千例,预测变量也不会很多。对于这种级别的数据量,神经网络设置1-3个隐藏层就差不多了,再多也难以提高预测准确率,反而增加了过拟合的风险。
相比之下,图像识别领域中的神经网络结构动辄数十上百层结构,实在不是一个级别。在大数据时代到来之前,人们觉得神经网络不好解释,预测能力也不怎么好,它被冷落也是情理之中了。
人工智能:从数据分析到工程领域
2016年,AlphaGo的横空出世把人工智能的概念带到千家万户。与此同时,越来越多的人工智能技术应用在医疗领域:病理图片的识别、CT病灶的分割、眼底疾病的诊断等等,在我们的消化内镜领域也出现了很多诸如肠道息肉的目标识别、息肉类型的分类、早癌病灶范围的发现及分割等等,就在2019年初,奥林巴斯公司官方宣传他们已经开发出具有AI功能的内窥镜了,很快就能进入量产。这些技术和上面提到的神经网络有什么联系呢?
有没有想过,其实图片也是数据的一种呢?譬如一张2.5cm*3.5cm的标准一寸黑白照片,若分辨率为300dpi,就可以理解成295×413像素点。
现在我们手上有1000张一寸照片,想做AI程序分辨照片里的人是男是女。为了便于理解,换成我们常用的表格,那么这个数据集就有1000行,295×413列,然而输入的图像是一个矩阵,不能平铺成这么多列,所以及计算的方法也和上文提到的不一样了。对于这种规模的数据,经典的logistic回归和简单的神经网络恐怕是捉襟见肘了。这时候更高级的神经网络——卷积神经网络出现了,我们开始从数据分析走到工程领域。
我尝试从一个医生的角度来谈谈卷积神经网络的工作原理。决定是否得肺癌的原因(预测变量)有很多,但有些重要有些不重要,我们临床研究会利用多因素分析去提取重要的预测变量。同样的,我们也需要从照片中295×413个像素点(预测变量)提取或总结出重要的特征,来判断照片里的是男还是女。
如下图所示,输入的图像是一个矩阵,经过中间的框框运算处理,就得到了新的特征图(卷积的过程)。新的特征图我们通过一定的函数运算(譬如取矩阵内最大值、最小值等)最终得出一个分数(池化的过程),这个分数经过激活函数的转化就可以成为一个0-1的概率表示了。如果预测错了,里面的权重就会根据损失函数自动调整,重新再来,直到找到合适的权重。当然,大部分卷积神经网络都是有很多层的,远远不是这么简单[我的理解:这还是个函数问题,假如你熟悉一点编程,会发现和那些函数中间件类似,数据通过这些函数中间件进入下一个函数,只不过这些中间件之间也构成网络联系并且更复杂。另外卷积就是提取特征量,抽象化以便模式识别的过程吧]
现在AI图像识别领域中已经涌现出非常多优秀的复杂的卷积神经网络了,譬如U-net用于CT图像的病灶识别,Segnet用于消化道早癌的识别等等。对于一般的研究者来说,我们可以站在巨人的肩膀上,收集好数据,利用并优化好合适的神经网络模型,那么一个AI程序或许就能产生了。
大时代下的小医生该何去何从
医生单靠个人力量是无法开展一个像样的AI研究的。
其一,AI程序的质量非常依赖高质量的原始数据,就拿华西医院2019年8月在GIE上发表了一篇关于食道早癌AI图像识别程序的文章来说,里面就收集了1480张早癌图片,5191张正常图片,这是一个很大的工作量。
其二,术业有专攻,本来就很繁忙的临床医生没有时间专攻AI技术。要运用好这些高级神经网络模型,需要学习python语言和tensorflow、Keras、Torch等主流深度学习框架,这比学习SPSS和R语言难得多。这个学习难度就像是要程序员重新学医一直学到能上台做手术一样。所以,医工结合是开展AI研究的最好方式。
[我的理解:这点很重要,现在很多所谓大小咖利用这一点在网络上卖课程,比如什么R语言及机器学习、JS人工智能等等,不要以为花个千八百的听了个课程就能向专家迈进发文章了,先搞懂一些基本常识然后和真正的人工智能专家合作是上策,除非你确实非常喜欢理科]
或许你会问,我只是个在基层医院的小医生,手里没这么多数据,也找不到人和我合作,那这个AI技术又和我有什么关系呢?或许这个例子可以给你启发:90后的中南大学特聘教授齐冲冲专业研究领域是矿业工程,同时还致力于将人工智能以及机器学习的技术应用于矿业领域,所发表的论文不少与机器学习/神经网络相关。
有人评论,或许这些论文应用的人工智能技术在专业AI人士角度是微不足道的,但在矿业工程领域却是很大的创新,这就是跨行业的降维打击。同样的,AI技术在未来会下沉到更多的医生群体,去填补这个领域的空白。
这么想来,近几年的临床预测模型火爆是有一定的时代背景的,说不定未来会有更多的结合了机器学习、深度学习的医学研究方法出现。让我们成为跨学科的人才,一起去迎接这个崭新的时代吧!
本文荟萃自医咖会 李健民医师,只做学术交流学习使用,不做为临床指导,本文观点不代表数字日志立场。