基于强化学习的医疗诊断 Inquire and Diagnose: Neural Symptom Checking Ensemble using Deep Reinforcement Learning

将强化学习应用于医疗诊断的早期代表工作是发表在2016年人工智能领域顶级会议NIPS深度强化学习研讨会上的一篇工作(Inquire and Diagnose: Neural Symptom Checking Ensemble using Deep Reinforcement Learning),后续大部分基于强化学习进行医疗问诊的工作均基于该工作展开。其基本思想是将辅助诊断的问诊过程看成一个序列决策过程,每次只能向患者询问一个症状,然后根据当前搜集的症状进行诊断。整个问诊过程基于强化学习进行训练,依据诊断结果设定奖惩信号,并对问诊轮数进行惩罚。完成了基于强化学习的问诊与诊断模型训练过程。该工作将基于神经网络多轮交互的问诊与诊断模型称之为神经症状检查器(Neural Symptom Checker),其具体方法我们在下文中对该工作进行详细介绍。

目录

1. 摘要

2. 引言

3. 预备知识

4. 模型框架

4.1. 模型

4.2. 训练过程

5. 实验结果

5.1. 三种定性分析的场景

5.2. 局限性

6. 总结

参考文献


1. 摘要

这项工作提出了一种新的症状检查器(Symptom Checker):基于集成的神经网络模型学习症状问诊与疾病诊断。这个集成模型由几个负责不同解剖部位的小型解剖模型组成。与传统采用独立的单一模型方法相比,我们的集成方法获得了更显著的疾病预测精度。

2. 引言

在医疗系统中,必须解决的三个关键问题是:便捷、质量和成本。不幸的是,这三个问题往往彼此竞争,即改进一个问题会恶化其他问题。这种困境被称为健康医疗的铁三角。为了提高便捷和质量,同时降低成本,移动互联网和大数据分析等颠覆性技术是很有希望的解决方法。例如,在文献[6]中的调查显示,2012年,35%的美国成年人曾上网对自己的疾病进行自我诊断。自我诊断通常从在线搜索引擎开始。基于搜索的自我诊断通常会导致低质量的结果,以及一些未经证实的信息。

为了促进自我诊断(提高便捷),同时保持合理的质量,最近有工作提出了症状检查(Symptom Checking)的概念。症状检查过程首先向患者询问一系列有关其症状的问题,然后尝试诊断一些潜在的疾病。如Ledley和Lusted在文献[4]中所述,图1显示了典型症状检查器的逻辑组件,它由两个组件组成:医学知识(medical knowledge)和推理引擎(inference engine)。医学知识主要捕捉症状和疾病之间的关系,而推理引擎则根据与患者的多轮交互推断潜在的疾病

图1. 典型症状检查器的逻辑组件

在症状检查器的两个主要设计目标中,获得较高的疾病预测准确率无疑是其中之一。另一个目标是提供良好的用户体验,这需要一个用户友好的症状问诊过程。这一过程包括两个要求:首先,症状检查器和患者之间的交互必须是直观的。第二,问诊的轮数应该尽可能地少。如文献[6]中所述,由于可以从用户处获得的信息很少,现有症状检查器实现的准确性不高。除了存在某个典型的用户可能会迫不及待地回答太多问题之外,还缺少一些关键的实验室结果,例如用于准确预测疾病所需的生命体征和血液检查。因此,更现实的做法是,症状检查器会建议少量可能的疾病,然后将患者转介给相关医生,以便进行实验室检查和随访

在信息有限的情况下,为了达到合理的疾病预测精度,一些研究人员尝试使用贝叶斯推理和决策树方法[3]。之前的工作[1,2]基于信息增益理论,利用熵或不纯度函数(Impurity Functions)来选择症状。然而,这些工作通常采用某些贪婪或近似方案,因为计算信息增益的全局最大值是困难的,因此,这些方法不可避免地要在精度上进行折衷。

在本文中,我们提出了一种神经症状检查(Neural Symptom Checking)方法,该方法基于有限的患者数据进行问诊和诊断学习。与以往使用近似方案选择症状的工作不同,我们采用了强化学习(RL)框架,并将问诊和诊断策略形式化为马尔可夫决策过程。优化目标直接优化进行症状选择问诊患者的策略函数。此外,为了模拟不同医院科室的真实医生,我们为每个解剖部位训练了一个模型。然后将这些模型组合成一个集成模型。开始时,我们的症状检查器会指示用户选择感兴趣的解剖部位(例如,选择腹部来进行腹痛检查或选择头部来进行头痛检查),以便负责该部位的模型可以进行问诊。这种方法的好处在于,它不仅提高了模型的准确性,还提供了更好的用户体验。事实上,与相关工作相比,我们的疾病预测精度比现有方案有显著提高。

综上所述,本文的贡献有两个方面:1)我们将症状检查形式化为一个序列决策问题,并应用深度强化学习来解决这个问题。2) 我们提出了一个集成神经网络模型,能够自适应地选择一系列症状来问诊患者。

3. 预备知识

在本节中,我们首先为症状检查设定一些符号。让\mathcal{I}\mathcal{D}\mathcal{P}分别表示症状、疾病和解剖部位的集合。表1显示了本研究中使用的解剖部位集合\mathcal{P}。当给定一个部位p\in \mathcal{P}时,我们使用\mathcal{D}_p\subseteq \mathcal{D}来表示当前部位p所包含的疾病集合。对于两个解剖部位pq,两个部位的疾病集合有可能重叠,即\mathcal{D}_p\cap \mathcal{D}_q \neq \O。例如,食物过敏可发生在颈部、胸部、腹部等部位。此外,我们使用\mathcal{I}_p\subseteq \mathcal{I}表示部位p中涉及的一组症状。同样,对于两个解剖部位pq,两个部位的症状集合也有可能重叠\mathcal{I}_p\cap \mathcal{I}_q \neq \O。 

表1. 解剖部位的集合\mathcal{P}

头部(head)颈部(neck)手臂(arm)
胸部(chest)腹部(abdomen)背部(back)
盆部(pelvis)臀部(buttock)腿部(leg)
皮肤(skin)一般症状(general symptoms)

我们将问诊和诊断过程视为AI智能体与患者进行交互的序列决策问题。在每个时间步,AI智能体问诊患者的某一个特定症状i\in \mathcal{I}。然后,患者用true或false回复AI智能体,指示患者是否患有症状i。同时,AI智能体可以整合患者在多个时间步中的答复,以决策后续问诊。在该过程结束时,如果AI智能体能够通过有限的问诊次数正确预测疾病,则AI智能体将收到一个奖励信息(每个额外的问诊轮数都会从奖励中引入一个惩罚)。AI智能体的目标是使奖励最大化。换句话说,我们的目标是在有限的问诊轮数下,在诊断过程结束时正确预测患者的疾病d\in \mathcal{D}

正式地,我们可以使用强化学习术语[7]来描述上述过程。AI智能体在时间步t接收一个状态s_t;然后根据策略\pi从离散动作集合\mathcal{A}中选择一个动作。在我们的公式中,\mathcal{A}=\mathcal{I}\cup \mathcal{D}。根据AI智能体当前选择的动作a_t \in \mathcal{A},它会收到一个奖励信号r_t。如果a_t \in \mathcal{D}并且a_t预测了正确的疾病,则r_t=1,或当a_t重复出现时,r_t=-1;其他情况下,r_t=0。AI智能体尝试最大化折扣回报R_t=\sum\nolimits_{​{t}'=t}^{\infty} {\gamma}^{​{t}'-t}{​{r_{t}'}},其中,r \in [0,1]为折扣因子。当选择的动作a_t \in \mathcal{D}时,症状检查过程终止。

状态-动作Q值函数[7]被定义为{Q^\pi }({\rm{s}},a) = \mathbb{E}[{R_t}|{s_t} = s,{a_t} = a,\pi ],指在状态s下执行行动a以及策略\pi的预期回报。由于Q值可以使用动态规划分为当前奖励和下一步Q值,因此可以
重写为以下递归定义:{Q^\pi }({\rm{s}},a) = \mathbb{E}_{​{s}'}[r+\gamma \mathbb{E}_{​{a}'\sim\pi({s}')} [{Q^\pi }({\rm{s'}},a')] | s,a,\pi ]。然后,将最优Q值被定义为{Q^* }({\rm{s}},a) = {max}_{\pi}Q^\pi(s, a)。同样,可以证明最优Q值服从Bellman方程:{Q^* }({\rm{s}},a) = \mathbb{E}_{​{s}'}[r+\gamma {max}_{​{a}'} | s,a ]。最后,最优确定性策略可以定义为{\pi^* }({\rm{s}}) = argmax_{a \in \mathcal{A}}Q^*(s,a)

4. 模型框架

由于状态和动作空间通常是高维的,因此状态-动作Q值函数的表示通常会遇到了状态空间爆炸问题(the state explosion problem)。为了解决这个问题,Mnih等人[5]提出了一种深度Q网络(DQN)结构,作为Q函数的函数逼近器。DQN本质上是一个参数为\theta的神经网络表示Q(s,a;\theta)。在本文中,我们使用DQN作为我们的模型。我们将在以下小节中详细介绍如何使用DQN进行症状检查。

4.1. 模型

为了模仿医院拥有不同专业知识的真实医生,我们将模型设计为不同解剖部位的集成模型:\mathcal{M}=\{m_p | p \in \mathcal{P}\}。集合\mathcal{P}中有11个解剖部位,如表1所示。专门用于症状检查的每个模型m_p都是DQN。表2呈现了一个解剖模型m_p的神经网络结构。每个模型由四个全连接层组成,并且每个全连接层都配有ReLU激活函数。

 表2. 每个解剖模型m_p的神经网络结构

每个模型m_p接受由模型问诊的症状状态组成的状态s。形式上,我们将状态编码方案描述如下:首先,每个症状i\in\mathcal{I}_p可以是以下状态之一:true、false和unknown。我们可以使用三元素的one-hot向量b_i\in\mathbb{B}^3对症状i的状态进行编码。其次,症状的状态根据如下规则确定:如果患者对我们模型问诊的症状回答“yes”,则该症状被标记为“true”。另一方面,如果用户回答“no”,则症状标记为“false”。我们模型未问诊的症状被标记为"unknown"。最后,状态s将所有症状状态连接成一个布尔向量,即s=[b_1^T,b_2^T,...,b_{|\mathcal{I}_p|}^T]^T

给定一个状态s,我们模型m_p输出每个动作a\in\mathcal{A}_p的Q值。在我们的定义中,每个动作a有两种类型:问诊动作(a\in\mathcal{I}_p)或诊断动作(a\in\mathcal{D}_p)。如果输出最大Q值对应于一个问诊动作,那么我们模型向患者问诊相应的症状,获得答复,并进入下一个时间步。根据我们的状态编码方案,答复被合并到下一个状态s_{t+1}中。否则,最大Q值对应于诊断动作。在后一种情况下,我们的模型预测最大Q值对应的疾病,然后终止。

值得注意的是,为了处理不同大小的症状空间,我们可以设定每个隐藏层的宽度可以调节。更具体地说,宽度乘以一个系数w。我们在第5章节(实验结果)中会描述w的具体设置。

4.2. 训练过程

由于每个模型m_p是独立的,我们可以同时训练11个不同的模型m_p,每个模型负责一个解剖部分p。更具体地说,我们使用Mnih等人提出的DQN训练算法[5]。损失函数定义为L_j(\theta_j)=\mathbb{E}_{s,a,r,s'}[(y_j-Q(s,a;\theta_j))^2],其中,目标y_j=r+\gamma max_{a'}Q(s',a';\theta^-)由一个单独的参数为\theta^-的目标网络[5]Q(s',a';\theta^-)进行评估。变量j是训练迭代的索引。为了提高训练的稳定性和收敛性,对目标网络进行多次训练迭代。参数\theta可以通过标准反向传播算法进行更新。

在使用DQN算法对每个解剖模型m_p进行训练后,由于患者给出的每个初始症状都可能映射到多个解剖部位,因此我们需要为每个症状选择一个具有代表性的解剖部位模型。算法流程1中描述了该症状模型映射过程。首先,假设\mathcal{C}是给定初始症状i的一组候选解剖部位集合。最初,候选集\mathcal{C}为空。然后,对于每个解剖部位p,我们检查p的症状集是否包含症状i(算法流程第6行)。如果是,则p包含在候选集\mathcal{C}中。在候选集合\mathcal{C}形成后,我们测试症状i\mathcal{C}中每个解剖部分对应模型m_p的训练精度(算法流程第12行)。然后,我们选择训练精度最高的模型作为症状i的代表解剖部位(算法流程第18行)。当算法完成时,它返回一个集合\mathcal{R},其中包含初始症状和代表性模型之间的所有映射关系。

算法流程1. 症状模型映射过程

分配了所有症状-模型映射关系后,当患者向AI智能体提供初始症状i时,我们通过查找集合\mathcal{R}来选择代表性模型m_{repr}。实际的问诊和诊断过程由基础m_{repr}执行。这一概念类似于专家混合,我们为不同的解剖部位训练几名专家,然后将这些专家结合起来进行有效的问诊和诊断。

5. 实验结果

由于隐私法(如健康保险携带和责任法案;HIPAA)和考虑,真实的临床数据可能无法公开,甚至匿名的临床数据也无法在研究人员之间共享。这些政策可能会阻碍医疗保健和机器学习研究。

为了弥合有限可用数据和数据驱动方法之间的鸿沟问题,我们提出了一种生成仿真临床数据的方法。

我们首先按照如下方案组成疾病集:首先,我们选择SymCat的症状-疾病数据库作为我们的目标,因为它包含801种疾病,并且每种疾病都用其症状分布进行注释。然后,我们执行了两个预处理步骤,从SymCat数据库中排除一些疾病:第一,我们删除了疾病控制和预防中心(CDC)数据库中未包含的疾病;第二,我们观察到SymCat疾病库中包含了一些主从关系疾病。因此,我们通过查询UMLS医学数据库确定了所有这些关系,并删除了所有父类疾病,以提供细粒度的疾病预测。例如,皮肤病、萎缩性皮肤病和牛皮癣都包含在SymCat疾病库中。由于皮肤病是一个统称,比其他两种疾病更通用,因此我们删除了皮肤病。这两个预处理步骤总共排除了151种疾病。剩下的650种疾病构成了我们仿真数据集中的疾病集。

接下来,我们定义了四个实验任务,并组成了相应的任务相关疾病集。这四项实验任务被设计为包括不同数量的疾病(从小到大),以测试我们集成模型的可扩展性。在第一项任务中,我们为每个解剖部位选择了CDC记录中疾病频率最高的25种疾病。对于其他三项任务,我们分别选择了前50、75和100种疾病。如表3所示,这一选择标准导致我们的四项任务共有73、136、196和255种疾病。请注意,由于一种疾病可能会导致多个解剖部位出现症状,因此将11个解剖部位的11组疾病结合起来,产生的疾病数量会大大减少(例如,73<11\times25)。

表3. 解剖部位集成模型的和单一模型的实验结果对比

在每个任务的训练过程中,我们生成了如下仿真数据:我们首先从任务相关的疾病集中统一采样一种疾病(例如,对于第一个任务,我们从其73种疾病集中采样)。然后,给定一种选定的疾病,我们从SymCat的症状分布中取样一组症状,形成与该疾病相关的综合患者记录。模型训练的mini-batch是从此类病历抽样128份。对于所有任务,我们进行了1000万次批量迭代进行训练。

为了测试模型疾病预测的准确性,我们使用上述仿真数据生成过程对每个任务分别生成了一个测试数据集。对于任务相关疾病集中的每种疾病,我们使用SymCat的分布采样了10000个患者记录。因此,任务一中我们生成了730000个样本的测试数据集。其他任务的测试集也是类似地生成过程。

表3展示了我们提出模型的实验结果。第一列显示了我们为每个解剖部位选择的疾病数量。第二列显示了11个解剖部位中的疾病总数。解剖部位集成模型(Anatomical Model)中展示了我们提出集成模型的准确率和平均问诊轮数。单一模型(Monolithic Model)中展示了基于单一模型进行所有疾病诊断产生的相同统计结果。从表中可以看出,我们的集成模型比传统的单一模型方法获得了更高的准确率

值得注意的是,如表3所示,在我们的解剖部位集成模型中,问诊的平均轮数在5至7左右。而单一模型的平均问诊轮数仅为1到3。这些简短的问诊序列表明,单一模型通常基于初始症状预测疾病,然后只有很少的样本需要额外问诊症状来进行疾病预测。我们假设,由于症状空间大,单一模型在学习有用的候选症状以问诊患者时遇到困难,导致疾病预测准确率低。我们的目标是在未来进一步研究这种维度灾难问题。

图2展示了每个解剖部位疾病数量增加时的准确率趋势。我们可以看到,当一个部位的疾病越多时,模型实现的疾病预测准确率越低。与单一模型相比,我们的解剖部位集成模型具有更好的可扩展性。虽然第一项任务只考虑73种疾病,但第一项任务的训练模型足以诊断常见疾病,因为73种疾病几乎覆盖了CDC所有记录的一半。值得注意的是,所有CDC记录都包含在651种疾病中,因此73种疾病可以最大限度地扩大覆盖范围。

图2. 不同疾病规模任务上的Top5准确率对比

5.1. 三种定性分析的场景

除了对我们的方法进行定量分析外,我们还对训练好的模型进行了定性分析,如下所示。对于每个训练实例,我们生成了一个问诊-答复对序列,以检查所问诊的症状是否对训练后模型进行疾病预测有意义。在对100个问诊-答复对序列进行采样后,我们总结了训练模型在三种与人类行为相似的场景。

第一种场景是,两名患有完全不同疾病的患者可能在开始时主动提供相同的症状。然而,基于对我们问诊的答复,训练后模型可以正确诊断每个患者所患的疾病。表4的上面两行展示了两对这样的例子。例如,在表4的第一行,以头痛为初始症状的两名抽样患者的目标疾病分别是癫痫和偏头痛。第四列展示了我们的模型预测的top5类疾病。这种情况表明,对问诊的答复确实会影响最终的疾病预测。值得注意的是,训练后模型仍然可以获得足够的信息来推断偏头痛病例的结果,即使所有对问诊的答复都是否定的。由于这种情况发生在一些抽样案例中,我们将在最后一个场景中进一步讨论其细节。

第二种场景是,两名患有相同疾病的患者可能在开始时主动提供不同的症状。一个可能的原因是,不同的患者对症状的严重程度有不同的看法。虽然初始症状不同,但训练后模型能够通过问诊这两名患者的不同症状序列来准确诊断同一疾病。表4的下面两行显示了两对这样的例子。例如,在表4的第四行,目标疾病为椎间盘突出症的两名样本患者初始提供的症状分别为下体疼痛和髋部疼痛。第四列显示了两个样本病例中训练后模型诊断出的最有可能疾病是椎间盘突出症。这种情况反映出,训练后模型可以接受不同的初始条件(不同的初始症状)以达到相同的疾病预测。

表4. (上面两个样例对)两个患有完全不同疾病的患者最初提供了相同症状,但是我们模型对不同疾病进行了准确诊断。(下面两个样例对)两个患有相同疾病的患者最初提供了不同症状,但是我们模型对相同疾病进行了准确诊断。

最后一种场景是,除了最初的症状,即主诉外,患者可能没有其他任何症状。在这种情况下,当医生问诊患者其他症状时,回答总是否定的。这导致在我们的上下文中,所有对问诊的答复都是否定的。然而,训练后模型可以在获得每个否定答复后增强对正确疾病的推断。图3说明了两个抽样案例的现象。以图3a为例,除淋巴水肿外,样本患者没有训练模型问诊的任何症状。但正确疾病冠状动脉粥样硬化的Q值在每次问诊后都会增加。该场景表明,训练后模型可以诊断只提供了一种症状的患者。

图3. 每轮问诊后的Q值变化曲线

5.2. 局限性

虽然训练后模型可以处理人类实践中的一些常见场景,但文本方法的训练后模型有一个非常重要的局限性:它只考虑症状。一些类似的疾病需要根据身体检查或实验室检查结果进行鉴别诊断,以区分它们。表5显示了训练模型未能正确预测的两个示例。例如,在表5的第一行,患有慢性背痛(Chronic back pain)、腰痛、椎间盘突出症、椎管狭窄、扭伤或劳损,或影响颈部的疼痛障碍的患者总是患有背部、颈部和下背部疼痛等症状,导致模型无法正常诊断。在表5的第二行,肾结石(Kidney stone)似乎远离目标疾病和其他四大诊断。然而,事实上,肾结石患者有时会经历腰痛。

6. 总结

我们已经证明,本文所提出的神经症状检查器可以模仿医生进行问诊和诊断的行为。我们未来工作的一个方向是开发能够推荐更复杂诊断任务的方法,包括身体检查和实验室检查。另一个方向是在不降低诊断准确率的情况下覆盖更多疾病(解决可扩展性问题)。

参考文献

[1] R. Kohavi. Scaling up the accuracy of naive-bayes classifiers: A decision-tree hybrid. In Proceedings of the Second International Conference on Knowledge Discovery and Data Mining (KDD-96), Portland, Oregon, USA, pages 202–207, 1996.
[2] I. Kononenko. Inductive and bayesian learning in medical diagnosis. Applied Artificial Intelligence, 7(4):317–337, 1993.
[3] I. Kononenko. Machine learning for medical diagnosis: history, state of the art and perspective. Artificial Intelligence in Medicine, 23(1):89–109, 2001.
[4] R. Ledley and L. Lusted. Reasoning foundations of medical diagnosis symbolic logic, probability, and value theory aid our understanding of how physicians reason. Science, 130(3366):9–21, 1959.
[5] V. Mnih, K. Kavukcuoglu, D. Silver, A. Graves, I. Antonoglou, D. Wierstra, and M. A. Riedmiller. Playing atari with deep reinforcement learning. CoRR, abs/1312.5602, 2013.
[6] H. L. Semigran, J. A. Linder, C. Gidengil, and A. Mehrotra. Evaluation of symptom checkers for self diagnosis and triage: audit study. BMJ, 351, 2015.
[7] R. Sutton and A. Barto. Reinforcement learning: An introduction, volume 116. Cambridge Univ Press, 1998.

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AIMasterStar

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值