DLAI-医疗人工智能笔记-全-

DLAI 医疗人工智能笔记(全)

001:欢迎来到AI医学诊断专项课程 🏥

在本节课中,我们将要学习AI在医学诊断领域的应用概述,了解整个专项课程的结构与核心学习目标。

欢迎来到AI医学诊断专项课程。如果你已经完成了深度学习专项课程或机器学习课程,并且正在寻找应用领域来深化你对AI的掌握,那么这是一个非常适合的专项课程。要成为一名真正优秀的机器学习实践者,最重要的事情之一就是获得将机器学习应用于多个用例的实践经验。本专项课程将引导你完成多个用例,涵盖AI在医学领域最重要的应用。

例如,给定一张胸部X光图像(即非结构化图像数据),你能训练一个神经网络来诊断患者是否患有肺炎吗?你将在本专项课程中学习如何做到这一点。或者,给定结构化数据(如患者的实验室结果),你能训练一个决策树来估计心脏病发作的风险吗?你同样会学习如何做到这一点。通过处理这些具体问题,你还会看到机器学习的许多实践方面,从如何处理不平衡数据集,到如何处理缺失数据,再到选择正确的评估指标。在机器学习中,我们通常默认使用分类准确率作为指标,但对于许多应用来说,这并非正确的指标。那么,你该如何选择更合适的指标呢?

即使你目前的工作不在医学领域,我认为你也会发现这些应用场景及其相关实践非常有用。也许本专项课程会让你对医学产生更浓厚的兴趣。如果你对医学感兴趣,那么这是一个绝佳的专项课程。AI在医学领域的应用正在全球范围内兴起,现在正是你加入并尝试产生巨大影响的好时机。也许你就是那个发明出拯救许多患者生命的方法的人。

让我们开始吧。在下一个视频中,我想向你介绍Pranav Rajpurkar。


欢迎回来。我很高兴这个专项课程将由Pranav Rajpurkar博士和我共同教授。我有幸在AI医学研究领域与他合作了数年。感谢你的介绍,与你合作非常愉快。

这是一个包含三门课程的专项课程。在第一门课程中,你将学习构建用于诊断的机器学习模型。诊断是关于识别疾病的过程。在第一门课程中,你将构建一个算法,用于查看胸部X光片并判断其是否包含疾病。你还将构建另一个算法,用于查看脑部MRI图像并识别其中肿瘤的位置。

既然第一门课程是关于诊断或识别疾病,那么第二门课程将关注预测患者未来的健康状况,这被称为预后。在第二门课程中,你将学习如何处理结构化数据。例如,假设你拥有患者的实验室数值和人口统计数据,并利用这些数据来预测某个事件的风险,例如死亡风险或心脏病发作风险。

最后,在第三门课程中,你将学习AI在治疗中的应用,即用于医疗护理过程以及信息提取(从医学文本中获取信息)。在第三门课程中,你将学习如何使用机器学习模型来估计特定治疗对患者的效果。你还将学习AI在文本处理中的应用,特别是用于诸如问答、从放射学报告中提取标签等任务。


在本AI医学诊断专项课程的第一门课中,你将学习AI在医学诊断中的应用。诊断是指确定哪种疾病或状况可以解释一个人的症状、体征和医学结果的过程。具体来说,你将学习如何构建和评估用于从医学图像中检测疾病的深度学习模型。

仅在第一个星期,你将构建一个能够解读胸部X光片以分类不同疾病类别的深度学习模型。在第二个星期,你将实施评估方法来衡量模型的质量。在第三个星期,你将使用图像分割技术来识别MRI扫描中脑肿瘤的位置和边界。

让我们开始吧。


本节课中我们一起学习了AI医学诊断专项课程的总体介绍、课程结构以及第一门课程的具体学习目标。我们了解到,该课程旨在通过构建实际的诊断模型(如分析X光片和MRI图像),并处理数据不平衡、评估指标选择等实际问题,来深化AI在医学领域的应用技能。

002:演示

在本节课中,我们将通过一个演示,直观了解您将在第一周构建的深度学习模型能做什么。该模型能够解读胸部X光片,以诊断不同的疾病。

胸部X光片简介

胸部X光片是全球最常进行的影像学检查,用于诊断和治疗多种疾病。

模型演示

以下是一个患者胸部X光片的示例。该患者肺部存在积液。

当您在作业1中完成模型训练后,您的模型将能够识别出此类异常。

让我们看看模型的实际运行效果。这里,我刚刚通过手机上的一个深度学习模型处理了这张胸部X光片图像。

模型处理了这张X光片,并识别出该患者的X光片存在异常。

更具体地说,当我向下滚动查看结果时,模型发现该患者肺部很可能存在积液。

这种病症被称为肺水肿。

进阶可视化

在课程3中,您将学习如何生成热力图。这些热力图能显示模型在图像的哪些区域找到了疾病的证据。

课程核心

在本课程中,您将学习并应用所有核心概念,使用真实数据来构建这样的模型。

总结

本节课我们一起预览了您将构建的AI医学诊断模型的能力,它能够从胸部X光片中识别出如肺水肿等异常。从下一节开始,我们将深入探讨构建此类模型所需的具体技术与步骤。

003:推荐先修条件 🎯

在本节课中,我们将了解学习本系列课程前需要具备哪些基础知识。掌握这些先修条件将帮助你更顺利地理解后续内容。

课程概述

本课程以及本专业系列中的其他课程,均不要求你具备任何医学背景。然而,在开始学习本课程及系列中的其他课程之前,我建议你熟悉以下三个先修条件。

先修条件详解

上一节我们介绍了课程的整体情况,本节中我们来看看具体需要哪些预备知识。以下是三个核心的先修条件:

  1. 深度学习基础
    课程假定你了解深度学习的基础知识。例如,你应该了解监督学习、卷积神经网络和损失函数的基本概念。一个简单的损失函数公式示例如下:
    Loss = -Σ (y_true * log(y_pred))

  2. Python编程能力
    你应该能够较为熟练地使用Python编写代码。因为在所有三门课程的作业中,你将使用Python来处理数据并构建机器学习模型。例如,你可能会用到类似以下的代码来加载数据:

    import pandas as pd
    data = pd.read_csv('medical_data.csv')
    
  3. 概率论知识
    课程中的概念讲解会假定你具备一定的概率论知识。例如,当提到“给定B时A的概率”时,你应该能识别出这是一个条件概率,其公式表示为 P(A|B)

总结

本节课中我们一起学习了开始AI医学诊断系列课程前需要满足的三个先修条件:深度学习基础、Python编程能力以及概率论知识。具备这些条件后,你就可以顺利开启本课程的学习之旅了。

004:医学影像诊断 🏥

在本节课中,我们将直接深入探讨如何构建一个用于胸部X光分类的深度学习模型。通过这个例子,你将学到的许多概念广泛适用于各种医学影像任务。

概述 📋

本周,我们将首先了解三个医学诊断任务的例子,在这些领域,深度学习已经取得了令人瞩目的成就。接着,我们将深入探讨构建医学影像AI模型的训练流程。最后,我们将学习在真实数据上评估这些模型性能的测试流程。

医学影像诊断实例

上一节我们介绍了本周的学习目标,本节中我们来看看深度学习在医学影像领域的具体应用实例。

实例一:皮肤病学 🩺

皮肤病学是处理皮肤相关问题的医学分支。皮肤科医生的一项任务是观察皮肤的可疑区域,以判断一颗痣是否是皮肤癌。早期检测可能对皮肤癌的治疗结果产生巨大影响。例如,一种皮肤癌如果在晚期才被发现,其五年生存率会显著下降。

在这项研究中,一个算法被训练用于判断皮肤组织区域是否癌变。

以下是该算法的训练与评估过程:

  • 训练过程:使用数十万张带有标签的图像作为输入,可以训练一个卷积神经网络来完成此任务。我们将在课程中详细探讨此类算法的训练。
  • 评估过程:算法训练完成后,可以在新的一组图像上,将其预测结果与人类皮肤科医生的预测结果进行比较评估。

研究发现,该算法的表现与皮肤科医生相当。目前无需过多解读下图,在后续课程中,我们将学习如何使用此类曲线进行评估。你现在可以从该图表得出的主要结论是:算法的预测准确性与人类皮肤科医生的预测具有可比性。

总结 🎯

本节课我们一起学习了医学影像诊断的概述,并通过皮肤病学诊断的例子,初步了解了深度学习模型从训练到评估的基本流程。在接下来的课程中,我们将继续深入探讨其他医学影像任务以及模型构建的具体细节。

005:眼部疾病与癌症诊断 👁️🔬

在本节课中,我们将学习人工智能在眼科和病理学诊断中的具体应用案例。我们将探讨如何利用深度学习算法分析视网膜图像以诊断糖尿病视网膜病变,以及如何分析组织病理学图像来辅助癌症诊断。这些案例展示了AI如何应对医学数据中的常见挑战,如数据不平衡问题。

眼科诊断案例 👁️

上一节我们介绍了AI在医学影像分析中的潜力,本节中我们来看看一个具体的眼科应用实例。

我们的第二个例子是眼科学领域,它涉及眼部疾病的诊断与治疗。2016年一项著名的研究关注了视网膜眼底图像。这些图像拍摄的是眼睛的后部。这里要关注的一种疾病或病理是糖尿病视网膜病变。它是由糖尿病引起的视网膜损伤,是导致失明的主要原因。目前,检测糖尿病视网膜病变是一个耗时且需要人工操作的过程,需要训练有素的临床医生检查这些照片。

在这项研究中,研究人员开发了一种算法,通过观察此类照片来判断患者是否患有糖尿病视网膜病变。

这项研究使用了超过128,000张图像,其中只有30%的图像显示有糖尿病视网膜病变。我们将探讨这种数据不平衡问题,该问题在医学和许多其他领域的真实世界数据中非常突出,并且我们将了解一些应对这一挑战的方法。

与之前的研究类似,这项研究表明,最终算法的性能与眼科医生相当。在该研究中,使用了多位眼科医生的多数投票来设定参考标准或金标准。金标准是一组专家对正确答案的最佳猜测。在本周晚些时候的课程中,我们将探讨在此类医学AI研究中如何设定金标准。

组织病理学诊断案例 🔬

在了解了AI在眼科的应用后,我们接下来看看它在另一个关键医学领域——病理学中的作用。

我们的第三个例子是组织病理学领域,这是一个涉及在显微镜下检查组织的医学专业。病理学家的一项任务是观察称为全切片图像的组织扫描显微图像。

以下是病理学家在全切片图像中执行的一些关键任务:

  • 检测:识别图像中是否存在癌细胞。
  • 分割:勾勒出癌变区域的精确边界。
  • 分类:确定癌症的类型或亚型。

总结 📝

本节课中我们一起学习了AI在诊断眼部疾病(如糖尿病视网膜病变)和组织病理学图像分析中的实际应用。我们看到了深度学习算法如何利用大量图像数据达到与专家相当的性能水平,同时也认识了医学AI开发中需要解决的数据不平衡等现实挑战。这些案例清晰地展示了人工智能作为强大工具,在辅助医生进行更高效、准确诊断方面的巨大潜力。

006:构建并训练医学诊断模型 🏥

在本节课中,我们将学习如何构建一个用于医学影像分析的深度学习模型。具体来说,我们将探讨如何利用胸部X光片,通过单一模型来检测多种疾病。我们将逐步讲解训练胸部X光片解读模型的过程,并分析在此过程中可能遇到的关键挑战及其应对策略。

胸部X光片解读任务

上一节我们了解了深度学习在医学影像分类中的前沿应用。本节中,我们来看看具体的胸部X光片解读任务。

胸部X光片是医学中最常见的诊断成像程序之一,全球每年大约进行20亿次胸部X光检查。

胸部X光片解读对于检测多种疾病至关重要,包括每年影响全球数百万人的肺炎和肺癌。

一位经过培训的放射科医生在解读胸部X光片时,会观察肺部、心脏以及其他区域,寻找可能提示患者患有肺炎、肺癌或其他病症的线索。

识别异常:以肿块为例

为了理解算法如何学习,我们先来看一种具体的异常情况:肿块。我们不先定义肿块是什么,而是直接观察图像。

以下是三张包含肿块的胸部X光片和三张正常的胸部X光片。

现在,展示一张新的胸部X光片,请你判断其中是否存在肿块。

你或许能正确识别出这张X光片包含肿块。图中所示的肿块,其外观可能与你之前看到的异常图像相似,而与正常图像不同。

你刚才的学习方式,与我们接下来要教算法检测肿块的方式非常相似。

作为参考,肿块的定义是:在胸部X光片上可见的、直径大于三厘米的病变或组织损伤。

接下来,我们将探讨如何训练我们的算法来识别肿块。

007:训练、预测与损失

在本节课中,我们将学习人工智能算法在医学影像诊断中的核心工作流程:如何通过训练学习,如何对新图像进行预测,以及如何通过损失函数来衡量和修正预测的误差。

训练过程

上一节我们了解了数据标注的重要性。本节中,我们来看看算法如何利用这些标注数据进行学习。

在训练过程中,算法会观察大量带有标签的胸部X光片。这些标签指明了图像中是否包含肿块。

算法通过学习这些图像及其对应的标签来获取知识。

最终,算法学会从输入的X光图像,生成一个关于图像是否包含肿块的输出。

这个算法可以有多种不同的名称。你可能听说过深度学习算法、模型、神经网络或卷积神经网络等术语。

预测与输出

算法以“分数”的形式产生输出。这些分数是图像包含肿块的预测概率。

例如,算法可能输出某张图像包含肿块的概率为 0.48,而另一张图像的概率为 0.51

在训练刚开始时,这些概率输出与期望的标签并不匹配。

假设“有肿块”的期望标签是 1,“正常”的期望标签是 0。可以看到,0.48 与 1 相差甚远,0.51 也与期望的标签 0 相差甚远。

损失函数

我们可以通过计算一个损失函数来衡量这种误差。

损失函数用于度量我们的输出概率与期望标签之间的误差。我们很快就会看到这个损失是如何计算的。

随后,一组新的图像和期望标签会呈现给算法。随着时间推移,算法学习产生更接近期望标签的分数。

注意观察,这个输出概率如何逐渐接近 1,而另一个输出概率如何逐渐接近 0。

核心概念总结

以下是本课涉及的核心概念:

  • 训练:算法通过观察带标签的 (图像, 标签) 对来学习模式。
  • 预测/输出:对于新图像,算法输出一个概率分数,公式可表示为 P(肿块|图像)
  • 损失函数:这是一个衡量预测输出 y_pred 与真实标签 y_true 之间差异的函数,例如二元交叉熵损失:Loss = -[y_true * log(y_pred) + (1 - y_true) * log(1 - y_pred)]

课程总结

本节课中,我们一起学习了AI医学诊断模型的基本训练流程。我们了解到,算法通过反复查看标注数据来学习,其输出是表示可能性的概率分数。在训练初期,这些预测往往不准确,而损失函数则像一把尺子,量化了预测的错误程度,并指导算法在后续的学习中不断调整,使预测结果越来越接近真实情况。

AI 医学诊断:P8:图像分类与类别不平衡

在本节课中,我们将学习医学图像分类任务,并探讨训练此类算法时面临的核心挑战之一:类别不平衡。我们将了解其成因,并学习应对此挑战的关键技术。


在之前的视频中,我们看到的医学AI示例通常涉及向算法展示数十万张图像。

这是图像分类的典型设置。图像分类是计算机视觉领域的核心任务,其流程是:输入一张自然图像,图像分类算法会输出图像中包含的物体是什么。你可能见过能够完成此任务的深度学习算法。

我们的胸部X光分类示例在许多方面与这种图像分类设置相似。

然而,存在一些额外的挑战,使得训练医学图像分类算法更具难度。我们接下来将介绍这些挑战。

我们将讨论在医学图像上训练算法面临的三个关键挑战:类别不平衡挑战、多任务挑战和数据集规模挑战。

针对每个挑战,我们将介绍一到两种应对技术。


上一节我们概述了医学图像分类面临的三大挑战。本节中,我们首先深入探讨类别不平衡挑战。

以下是类别不平衡挑战的具体描述。

在医学数据集中,非疾病(正常)样本和疾病样本的数量并不相等。这反映了疾病在现实世界中的患病率或频率。

在现实中,尤其是在对健康人群进行X光检查时,正常样本的数量远多于肿块样本。

在医学数据集中,你可能会看到正常样本的数量是肿块样本的一百倍之多。


本节课中,我们一起学习了医学图像分类的基本框架,并重点探讨了类别不平衡这一核心挑战。我们了解到,由于疾病在真实世界中的低患病率,医学数据集中正常样本的数量可能远多于疾病样本,这给模型训练带来了困难。在后续课程中,我们将继续学习应对多任务挑战和数据集规模挑战的方法。

009:二元交叉熵损失函数

在本节课中,我们将要学习二元交叉熵损失函数,并探讨其在处理类别不平衡数据时可能遇到的问题及其解决方案。

问题引入:类别不平衡的影响

上一节我们介绍了医学诊断中常见的类别不平衡问题。当训练数据中大多数样本都是正常(阴性)时,这会为学习算法带来一个难题。

这会导致模型开始为所有样本预测一个非常低的患病概率,从而无法有效识别出真正患病的样本。

损失函数分析

让我们看看如何将这个问题追溯到我们用于训练算法的损失函数。我们也将了解在存在不平衡数据时,如何修改这个损失函数。

二元交叉熵损失函数

这个损失函数被称为二元交叉熵损失。它用于衡量一个输出值在0到1之间的分类模型的性能。

以下是其数学公式:

公式:
L = -[y * log(p) + (1 - y) * log(1 - p)]
其中:

  • y 是真实标签(0或1)。
  • p 是模型预测该样本属于类别1的概率。

损失计算示例

让我们通过例子来看看这个损失函数是如何计算的。

示例一:患病样本(阳性)

假设我们有一个胸部X光片,其中包含肿块,因此其标签 y = 1。算法预测其患病的概率 p = 0.2

以下是计算过程:

  • 由于标签 y = 1,我们使用公式中的第一项 -log(p)
  • 损失 L = -log(0.2) ≈ 0.70

因此,算法在这个特定样本上获得的损失约为0.70。

示例二:健康样本(阴性)

现在看一个非肿块的样本,其标签 y = 0。算法预测其患病的概率 p = 0.7

以下是计算过程:

  • 由于标签 y = 0,我们使用公式中的第二项 -log(1-p)
  • 首先计算 1 - p = 1 - 0.7 = 0.3
  • 损失 L = -log(0.3) ≈ 0.52

因此,算法在这个健康样本上获得的损失约为0.52。

总结

本节课中我们一起学习了二元交叉熵损失函数。我们了解了其数学定义,并通过具体示例演示了如何为阳性和阴性样本计算损失。在下一节中,我们将基于此理解,探讨如何针对类别不平衡问题调整损失函数,以帮助模型更好地学习识别少数类(患病)样本。

010:类别不平衡对损失计算的影响 📊

在本节课中,我们将要学习类别不平衡问题如何影响模型训练中的损失计算,并探讨一种名为“加权损失”的解决方案。

我们已经了解了损失如何应用于单个样本。本节中我们来看看它如何应用于一批样本。这里我们有六个正常样本和两个肿块样本。

请注意,这里的P2、P3、P4是患者ID。在训练尚未开始时,假设算法为所有样本输出的概率均为0.5。

随后可以计算每个样本的损失。对于一个正常样本,我们将使用 -log(1 - 0.5),计算结果为0.3。对于一个肿块样本,我们将使用 -log(0.5),计算结果同样为0.3。

肿块样本对总损失的贡献为 0.3 * 2 = 0.6。而正常样本对总损失的贡献为 0.3 * 6 = 1.8。因此可以注意到,损失的主要贡献来自于正常样本,而非肿块样本。

所以,算法在优化更新时,会侧重于正确分类正常样本,而相对较少地关注肿块样本。在实践中,这无法产生一个性能良好的分类器。这就是类别不平衡问题。

解决类别不平衡问题的方法是修改损失函数,为正常类和肿块类分配不同的权重。W_P 是我们分配给阳性(肿块)样本的权重,W_N 是分配给阴性(正常)样本的权重。

接下来,我们看看当赋予阳性样本更高权重时会发生什么。我们希望更重视肿块样本,使它们对总损失的贡献能与正常样本相当。

以下是权重的选择方法:

  • 我们选择 6/8 作为肿块样本的权重。
  • 我们选择 2/8 作为正常样本的权重。

😊

然后你可以看到,如果汇总肿块样本的总损失,我们得到0.45,这等于此处正常样本的总损失。

在一般情况下,分配给阳性类的权重将是 阴性样本数量 / 总样本数量。在我们的案例中,即 6个正常样本 / 8个总样本

分配给阴性类的权重将是 阳性样本数量 / 总样本数量,即 2 / 8

通过这样设置 W_PW_N,我们可以使所有样本中,来自阳性类和阴性类的损失贡献相同。这就是使用权重修改损失的核心思想,这种方法被称为 加权损失,用于解决类别不平衡问题。


本节课中我们一起学习了类别不平衡如何导致模型在训练时忽略少数类,并通过引入加权损失的方法,调整不同类别样本在损失计算中的权重,从而让模型能够平等地学习所有类别。核心公式是:阳性类权重 = 阴性样本数 / 总样本数阴性类权重 = 阳性样本数 / 总样本数

AI 医学诊断:P11:重采样实现类别平衡 🧬

在本节课中,我们将学习另一种处理类别不平衡问题的方法:重采样。我们将探讨其基本思想、具体实现步骤,并了解其如何影响模型训练。


上一节我们介绍了通过加权损失函数来处理类别不平衡。本节中,我们来看看另一种直观的方法——重采样。

重采样的核心思想是:通过调整训练数据集的构成,使得正常(阴性)样本和肿块(阳性)样本的数量在训练时达到平衡。

以下是重采样的具体实现步骤:

首先,我们将数据集中的样本按类别分组。假设正常组有6个样本,肿块组有2个样本。

接着,我们从这两个组中进行采样,目标是构建一个包含等量正负样本的新数据集。具体做法是:从肿块(阳性)类中抽取一半样本,从正常(阴性)类中也抽取一半样本。

这意味着,在新的数据集中:

  • 我们可能无法包含所有的正常类样本。
  • 我们可能会对肿块类样本进行重复采样,即同一个样本可能出现多次。

使用这个重采样后的平衡数据集,如果我们像之前一样计算损失函数(标准的二元交叉熵损失),可以看到,即使不使用任何权重,肿块样本和正常样本对总损失的贡献也是相等的。


重采样方法有多种变体,例如对多数类(正常类)进行欠采样,或对少数类(肿块类)进行过采样。这些方法都属于重采样技术的范畴,是解决数据不平衡问题的有效工具。


本节课中,我们一起学习了重采样技术。我们了解到,通过从原始不平衡数据中构建一个类别平衡的训练集,可以让模型在训练时平等地看待不同类别的样本,从而有效应对类别不平衡带来的挑战。

012:多任务学习 🧠

在本节课中,我们将探讨医学图像分类中的另一个挑战:多任务学习。我们将了解如何让一个模型同时学习识别多种疾病,以及这背后的原理和实现方法。


多任务学习的挑战与动机

上一节我们介绍了二分类任务,即判断图像中是否存在肿块。然而,在现实世界中,我们通常需要同时关注多种疾病的诊断。

例如,一张胸部X光片可能需要同时评估是否存在肿块肺炎肺水肿。一种简单的方法是针对每种疾病训练一个独立的模型。但或许我们可以让一个模型学会所有这些任务。

这样做的一个优势是,模型可以学习到对识别多种疾病都有用的共同特征,从而更高效地利用现有数据。这种设置被称为多任务学习

接下来,我们看看如何训练一个算法来同时学习所有这些任务。


数据与模型架构的调整

为了实现多任务学习,我们需要对数据和模型架构进行调整。

数据标签的调整

在二分类中,每个样本只有一个标签(例如,0表示无肿块,1表示有肿块)。在多任务学习中,每个样本将拥有多个标签,每个标签对应一种疾病。

以下是标签格式的示例:

  • 0 表示该疾病不存在。
  • 1 表示该疾病存在。

例如,一个样本的标签可能是 [0, 1, 0],这表示:

  • 第一个标签 0无肿块
  • 第二个标签 1有肺炎
  • 第三个标签 0无肺水肿(肺水肿指肺部积液过多)。

模型输出的调整

相应地,模型的输出层也需要改变。它不再只输出一个概率值,而是为每种疾病输出一个独立的概率。

例如,一个三任务模型的输出可能是三个概率值:

  • P(mass)
  • P(pneumonia)
  • P(edema)


损失函数的修改

要训练这样的多任务模型,我们还需要将损失函数从二分类设置修改为多任务设置。

在二分类中,我们通常使用二元交叉熵损失。对于一个任务,其公式为:

Loss = -[y * log(p) + (1 - y) * log(1 - p)]

其中:

  • y 是真实标签(0或1)。
  • p 是模型预测该类别为1的概率。

在多任务学习中,我们需要计算所有任务的损失总和。假设我们有 K 个任务,总损失是每个任务二元交叉熵损失的平均值或总和。

以下是多任务损失函数的通用公式:

Total Loss = (1/K) * Σ_{i=1}^{K} [-y_i * log(p_i) - (1 - y_i) * log(1 - p_i)]

其中:

  • K 是任务总数。
  • y_i 是第 i 个任务的真实标签。
  • p_i 是模型预测第 i 个任务为正类的概率。

通过最小化这个总损失,模型可以同时学习优化所有疾病的诊断性能。


总结

本节课中,我们一起学习了医学图像诊断中的多任务学习

我们首先了解了其动机:让一个模型共享特征,以同时诊断多种疾病,从而提高数据利用效率。接着,我们探讨了如何调整数据标签和模型输出层以适应多任务。最后,我们学习了如何修改损失函数,将多个二分类任务的损失结合起来,以指导模型的训练。

多任务学习是构建高效、全面医学AI诊断系统的重要技术之一。

013:多任务损失、数据集规模与CNN架构

在本节课中,我们将学习如何为多任务学习设计损失函数,探讨数据集规模带来的挑战,并了解适用于医学影像分析的卷积神经网络架构。

多任务损失函数

上一节我们介绍了多任务学习的基本概念。本节中,我们来看看如何为多任务学习设计损失函数。

我们修改损失函数,使其能够分别计算与每种疾病相关的误差。新的损失可以表示为多个疾病损失的总和。这被称为多标签损失或多任务损失。

以下是针对八个示例计算出的损失。第一项表示使用此预测概率和此标签计算出的与肿块类别相关的损失。类似地,这里是与肺炎类别相关的损失,由模型输出和此标签计算得出。我们将各个损失函数组件给出的三个损失相加。

处理类别不平衡

在多任务设置中,我们同样需要考虑如何处理类别不平衡问题。

我们可以再次应用之前介绍过的加权损失。但这次,我们不仅有为正负标签分配的权重,而且权重是针对特定类别的正标签和特定任务(疾病)的负标签分配的。这意味着,对于肿块、肺炎或水肿,其正类别的权重可能各不相同。

这解决了多任务学习中的第二个挑战。

数据集规模的挑战

接下来,我们看看第三个挑战,即数据集规模问题。

卷积神经网络架构

对于许多医学影像问题,首选的架构是卷积神经网络,也称为ConvNet或CNN。这些网络专为处理X光片等2D图像而设计,但其变体也适用于医学信号处理或CT扫描等3D医学影像。

以下是几种广泛流行的卷积神经网络架构:

  • Inception
  • ResNet
  • DenseNet
  • ResNeXt
  • EfficientNet

这些架构由各种构建模块组成。在医学问题中,标准做法是在目标任务上尝试多种模型,以找出效果最佳的架构。

总结

本节课中,我们一起学习了多任务学习的损失函数设计,了解了如何通过加权损失处理多任务中的类别不平衡问题,并认识了数据集规模带来的挑战。最后,我们介绍了适用于医学影像分析的几种主流卷积神经网络架构,为后续的模型选择奠定了基础。

014:小规模训练集下的工作方法 🏥

在本节课中,我们将探讨一个在医学影像分析中常见的挑战:当数据量有限时,如何应用需要大量数据训练的深度学习模型。我们将重点介绍一种名为“迁移学习”的有效策略。

挑战:数据饥渴的模型

上一节我们介绍了各种深度学习架构。这些架构的共同挑战是它们都是“数据饥渴型”的,通常需要像图像分类数据集那样数百万的示例才能达到最佳性能。

在医学问题中,我们通常无法获得数百万的示例。那么,我们如何在这种情况下仍然应用这些强大的技术呢?

解决方案:预训练与微调

一种解决方案是预训练网络。其核心思想是分两步走。

第一步:预训练

首先,让网络观察自然图像(例如包含企鹅、猫或狗的图片),并学习识别这些物体。这个过程旨在让网络学习通用的图像特征。

第二步:微调

然后,将这个已训练网络作为起点,用于学习医学影像任务。具体做法是复制其已学习的特征。网络可以在此基础上,进一步训练以观察胸部X光片,并识别疾病的存在与否。

这个过程的原理在于,当网络学习第一个任务(识别猫狗)时,它会学到一些通用的特征,这些特征将有助于它在医学任务上的学习。例如,识别企鹅边缘的特征,可能同样有助于识别肺部的边缘,而这对于诊断某些疾病是有帮助的。

当我们把这些特征迁移到新网络后,网络就拥有了一个更好的起点来学习胸部X光判读这个新任务。第一步称为预训练,第二步称为微调

网络层级的理解

通常认为,网络的早期层捕获的是低层次的、可广泛泛化的图像特征(如物体的边缘)。而后期层捕获的则是更高层次或更特定于某个任务的细节。

例如,早期层可能学习物体的边缘,这对后续的胸部X光判读可能有用。但后期层可能学习如何识别企鹅的头部,这部分知识对胸部X光判读可能就没有直接用处了。

微调策略

因此,当我们在胸部X光数据上微调网络时,我们不必微调所有迁移过来的特征。我们可以冻结浅层学习到的特征,只微调更深层的网络权重。

在实践中,有两种最常见的设计选择:

  1. 微调所有层。
  2. 只微调后期层或最后一层,而不微调早期层。

以下是两种策略的简单示意:

# 策略1:微调所有层
for param in model.parameters():
    param.requires_grad = True  # 所有参数均可更新

# 策略2:仅微调最后一层(示例)
for param in model.parameters():
    param.requires_grad = False  # 先冻结所有参数
for param in model.fc.parameters():  # 假设最后一层是全连接层 ‘fc’
    param.requires_grad = True  # 仅解冻最后一层

总结

本节课中,我们一起学习了应对医学影像小规模数据集的挑战。我们介绍了预训练与微调的方法,这种方法也被称为迁移学习。其核心是先在大型自然图像数据集上训练模型,学习通用特征,然后将这些特征作为起点,在较小的医学数据集上进行针对性调整。通过理解网络不同层级的功能,我们可以选择冻结部分层、只微调特定层,从而更高效地利用有限的数据,提升模型在医学诊断任务上的性能。

posted @ 2026-03-26 08:18  布客飞龙II  阅读(0)  评论(0)    收藏  举报