)
001欢迎来到AI医学诊断专项课程 在本节课中我们将要学习AI在医学诊断领域的应用概述了解整个专项课程的结构与核心学习目标。欢迎来到AI医学诊断专项课程。如果你已经完成了深度学习专项课程或机器学习课程并且正在寻找应用领域来深化你对AI的掌握那么这是一个非常适合的专项课程。要成为一名真正优秀的机器学习实践者最重要的事情之一就是获得将机器学习应用于多个用例的实践经验。本专项课程将引导你完成多个用例涵盖AI在医学领域最重要的应用。例如给定一张胸部X光图像即非结构化图像数据你能训练一个神经网络来诊断患者是否患有肺炎吗你将在本专项课程中学习如何做到这一点。或者给定结构化数据如患者的实验室结果你能训练一个决策树来估计心脏病发作的风险吗你同样会学习如何做到这一点。通过处理这些具体问题你还会看到机器学习的许多实践方面从如何处理不平衡数据集到如何处理缺失数据再到选择正确的评估指标。在机器学习中我们通常默认使用分类准确率作为指标但对于许多应用来说这并非正确的指标。那么你该如何选择更合适的指标呢即使你目前的工作不在医学领域我认为你也会发现这些应用场景及其相关实践非常有用。也许本专项课程会让你对医学产生更浓厚的兴趣。如果你对医学感兴趣那么这是一个绝佳的专项课程。AI在医学领域的应用正在全球范围内兴起现在正是你加入并尝试产生巨大影响的好时机。也许你就是那个发明出拯救许多患者生命的方法的人。让我们开始吧。在下一个视频中我想向你介绍Pranav Rajpurkar。欢迎回来。我很高兴这个专项课程将由Pranav Rajpurkar博士和我共同教授。我有幸在AI医学研究领域与他合作了数年。感谢你的介绍与你合作非常愉快。这是一个包含三门课程的专项课程。在第一门课程中你将学习构建用于诊断的机器学习模型。诊断是关于识别疾病的过程。在第一门课程中你将构建一个算法用于查看胸部X光片并判断其是否包含疾病。你还将构建另一个算法用于查看脑部MRI图像并识别其中肿瘤的位置。既然第一门课程是关于诊断或识别疾病那么第二门课程将关注预测患者未来的健康状况这被称为预后。在第二门课程中你将学习如何处理结构化数据。例如假设你拥有患者的实验室数值和人口统计数据并利用这些数据来预测某个事件的风险例如死亡风险或心脏病发作风险。最后在第三门课程中你将学习AI在治疗中的应用即用于医疗护理过程以及信息提取从医学文本中获取信息。在第三门课程中你将学习如何使用机器学习模型来估计特定治疗对患者的效果。你还将学习AI在文本处理中的应用特别是用于诸如问答、从放射学报告中提取标签等任务。在本AI医学诊断专项课程的第一门课中你将学习AI在医学诊断中的应用。诊断是指确定哪种疾病或状况可以解释一个人的症状、体征和医学结果的过程。具体来说你将学习如何构建和评估用于从医学图像中检测疾病的深度学习模型。https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/dlai-ai-med/img/2d79eb2476970bbd39d11ed06f25e44b_1.png仅在第一个星期你将构建一个能够解读胸部X光片以分类不同疾病类别的深度学习模型。在第二个星期你将实施评估方法来衡量模型的质量。在第三个星期你将使用图像分割技术来识别MRI扫描中脑肿瘤的位置和边界。让我们开始吧。本节课中我们一起学习了AI医学诊断专项课程的总体介绍、课程结构以及第一门课程的具体学习目标。我们了解到该课程旨在通过构建实际的诊断模型如分析X光片和MRI图像并处理数据不平衡、评估指标选择等实际问题来深化AI在医学领域的应用技能。002演示在本节课中我们将通过一个演示直观了解您将在第一周构建的深度学习模型能做什么。该模型能够解读胸部X光片以诊断不同的疾病。胸部X光片简介胸部X光片是全球最常进行的影像学检查用于诊断和治疗多种疾病。模型演示以下是一个患者胸部X光片的示例。该患者肺部存在积液。当您在作业1中完成模型训练后您的模型将能够识别出此类异常。让我们看看模型的实际运行效果。这里我刚刚通过手机上的一个深度学习模型处理了这张胸部X光片图像。模型处理了这张X光片并识别出该患者的X光片存在异常。更具体地说当我向下滚动查看结果时模型发现该患者肺部很可能存在积液。这种病症被称为肺水肿。进阶可视化在课程3中您将学习如何生成热力图。这些热力图能显示模型在图像的哪些区域找到了疾病的证据。课程核心在本课程中您将学习并应用所有核心概念使用真实数据来构建这样的模型。总结本节课我们一起预览了您将构建的AI医学诊断模型的能力它能够从胸部X光片中识别出如肺水肿等异常。从下一节开始我们将深入探讨构建此类模型所需的具体技术与步骤。003推荐先修条件 在本节课中我们将了解学习本系列课程前需要具备哪些基础知识。掌握这些先修条件将帮助你更顺利地理解后续内容。课程概述本课程以及本专业系列中的其他课程均不要求你具备任何医学背景。然而在开始学习本课程及系列中的其他课程之前我建议你熟悉以下三个先修条件。先修条件详解上一节我们介绍了课程的整体情况本节中我们来看看具体需要哪些预备知识。以下是三个核心的先修条件深度学习基础课程假定你了解深度学习的基础知识。例如你应该了解监督学习、卷积神经网络和损失函数的基本概念。一个简单的损失函数公式示例如下Loss -Σ (y_true * log(y_pred))Python编程能力你应该能够较为熟练地使用Python编写代码。因为在所有三门课程的作业中你将使用Python来处理数据并构建机器学习模型。例如你可能会用到类似以下的代码来加载数据importpandasaspd datapd.read_csv(medical_data.csv)概率论知识课程中的概念讲解会假定你具备一定的概率论知识。例如当提到“给定B时A的概率”时你应该能识别出这是一个条件概率其公式表示为P(A|B)。总结本节课中我们一起学习了开始AI医学诊断系列课程前需要满足的三个先修条件深度学习基础、Python编程能力以及概率论知识。具备这些条件后你就可以顺利开启本课程的学习之旅了。004医学影像诊断 在本节课中我们将直接深入探讨如何构建一个用于胸部X光分类的深度学习模型。通过这个例子你将学到的许多概念广泛适用于各种医学影像任务。概述 本周我们将首先了解三个医学诊断任务的例子在这些领域深度学习已经取得了令人瞩目的成就。接着我们将深入探讨构建医学影像AI模型的训练流程。最后我们将学习在真实数据上评估这些模型性能的测试流程。医学影像诊断实例上一节我们介绍了本周的学习目标本节中我们来看看深度学习在医学影像领域的具体应用实例。实例一皮肤病学 皮肤病学是处理皮肤相关问题的医学分支。皮肤科医生的一项任务是观察皮肤的可疑区域以判断一颗痣是否是皮肤癌。早期检测可能对皮肤癌的治疗结果产生巨大影响。例如一种皮肤癌如果在晚期才被发现其五年生存率会显著下降。https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/dlai-ai-med/img/bac29315741bc498eaa08554fa98ac7b_1.png在这项研究中一个算法被训练用于判断皮肤组织区域是否癌变。https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/dlai-ai-med/img/bac29315741bc498eaa08554fa98ac7b_1.pnghttps://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/dlai-ai-med/img/bac29315741bc498eaa08554fa98ac7b_3.png以下是该算法的训练与评估过程训练过程使用数十万张带有标签的图像作为输入可以训练一个卷积神经网络来完成此任务。我们将在课程中详细探讨此类算法的训练。https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/dlai-ai-med/img/bac29315741bc498eaa08554fa98ac7b_3.png评估过程算法训练完成后可以在新的一组图像上将其预测结果与人类皮肤科医生的预测结果进行比较评估。https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/dlai-ai-med/img/bac29315741bc498eaa08554fa98ac7b_5.pnghttps://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/dlai-ai-med/img/bac29315741bc498eaa08554fa98ac7b_5.png研究发现该算法的表现与皮肤科医生相当。目前无需过多解读下图在后续课程中我们将学习如何使用此类曲线进行评估。你现在可以从该图表得出的主要结论是算法的预测准确性与人类皮肤科医生的预测具有可比性。https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/dlai-ai-med/img/bac29315741bc498eaa08554fa98ac7b_7.png总结 https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/dlai-ai-med/img/bac29315741bc498eaa08554fa98ac7b_7.png本节课我们一起学习了医学影像诊断的概述并通过皮肤病学诊断的例子初步了解了深度学习模型从训练到评估的基本流程。在接下来的课程中我们将继续深入探讨其他医学影像任务以及模型构建的具体细节。005眼部疾病与癌症诊断 ️在本节课中我们将学习人工智能在眼科和病理学诊断中的具体应用案例。我们将探讨如何利用深度学习算法分析视网膜图像以诊断糖尿病视网膜病变以及如何分析组织病理学图像来辅助癌症诊断。这些案例展示了AI如何应对医学数据中的常见挑战如数据不平衡问题。眼科诊断案例 ️上一节我们介绍了AI在医学影像分析中的潜力本节中我们来看看一个具体的眼科应用实例。我们的第二个例子是眼科学领域它涉及眼部疾病的诊断与治疗。2016年一项著名的研究关注了视网膜眼底图像。这些图像拍摄的是眼睛的后部。这里要关注的一种疾病或病理是糖尿病视网膜病变。它是由糖尿病引起的视网膜损伤是导致失明的主要原因。目前检测糖尿病视网膜病变是一个耗时且需要人工操作的过程需要训练有素的临床医生检查这些照片。在这项研究中研究人员开发了一种算法通过观察此类照片来判断患者是否患有糖尿病视网膜病变。https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/dlai-ai-med/img/b4ec260c7f0f822f9fe3704ea31d51ce_1.pnghttps://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/dlai-ai-med/img/b4ec260c7f0f822f9fe3704ea31d51ce_1.png这项研究使用了超过128,000张图像其中只有30%的图像显示有糖尿病视网膜病变。我们将探讨这种数据不平衡问题该问题在医学和许多其他领域的真实世界数据中非常突出并且我们将了解一些应对这一挑战的方法。https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/dlai-ai-med/img/b4ec260c7f0f822f9fe3704ea31d51ce_3.png与之前的研究类似这项研究表明最终算法的性能与眼科医生相当。在该研究中使用了多位眼科医生的多数投票来设定参考标准或金标准。金标准是一组专家对正确答案的最佳猜测。在本周晚些时候的课程中我们将探讨在此类医学AI研究中如何设定金标准。https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/dlai-ai-med/img/b4ec260c7f0f822f9fe3704ea31d51ce_3.pnghttps://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/dlai-ai-med/img/b4ec260c7f0f822f9fe3704ea31d51ce_5.png组织病理学诊断案例 在了解了AI在眼科的应用后我们接下来看看它在另一个关键医学领域——病理学中的作用。我们的第三个例子是组织病理学领域这是一个涉及在显微镜下检查组织的医学专业。病理学家的一项任务是观察称为全切片图像的组织扫描显微图像。https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/dlai-ai-med/img/b4ec260c7f0f822f9fe3704ea31d51ce_5.pnghttps://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/dlai-ai-med/img/b4ec260c7f0f822f9fe3704ea31d51ce_7.png以下是病理学家在全切片图像中执行的一些关键任务检测识别图像中是否存在癌细胞。分割勾勒出癌变区域的精确边界。分类确定癌症的类型或亚型。总结 https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/dlai-ai-med/img/b4ec260c7f0f822f9fe3704ea31d51ce_7.png本节课中我们一起学习了AI在诊断眼部疾病如糖尿病视网膜病变和组织病理学图像分析中的实际应用。我们看到了深度学习算法如何利用大量图像数据达到与专家相当的性能水平同时也认识了医学AI开发中需要解决的数据不平衡等现实挑战。这些案例清晰地展示了人工智能作为强大工具在辅助医生进行更高效、准确诊断方面的巨大潜力。006构建并训练医学诊断模型 在本节课中我们将学习如何构建一个用于医学影像分析的深度学习模型。具体来说我们将探讨如何利用胸部X光片通过单一模型来检测多种疾病。我们将逐步讲解训练胸部X光片解读模型的过程并分析在此过程中可能遇到的关键挑战及其应对策略。胸部X光片解读任务上一节我们了解了深度学习在医学影像分类中的前沿应用。本节中我们来看看具体的胸部X光片解读任务。https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/dlai-ai-med/img/d0daa85d9e3a48b4da0133d94012b1b0_1.png胸部X光片是医学中最常见的诊断成像程序之一全球每年大约进行20亿次胸部X光检查。https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/dlai-ai-med/img/d0daa85d9e3a48b4da0133d94012b1b0_2.pnghttps://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/dlai-ai-med/img/d0daa85d9e3a48b4da0133d94012b1b0_3.png胸部X光片解读对于检测多种疾病至关重要包括每年影响全球数百万人的肺炎和肺癌。https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/dlai-ai-med/img/d0daa85d9e3a48b4da0133d94012b1b0_5.png一位经过培训的放射科医生在解读胸部X光片时会观察肺部、心脏以及其他区域寻找可能提示患者患有肺炎、肺癌或其他病症的线索。https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/dlai-ai-med/img/d0daa85d9e3a48b4da0133d94012b1b0_7.pnghttps://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/dlai-ai-med/img/d0daa85d9e3a48b4da0133d94012b1b0_8.png识别异常以肿块为例https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/dlai-ai-med/img/d0daa85d9e3a48b4da0133d94012b1b0_10.png为了理解算法如何学习我们先来看一种具体的异常情况肿块。我们不先定义肿块是什么而是直接观察图像。https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/dlai-ai-med/img/d0daa85d9e3a48b4da0133d94012b1b0_12.pnghttps://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/dlai-ai-med/img/d0daa85d9e3a48b4da0133d94012b1b0_13.png以下是三张包含肿块的胸部X光片和三张正常的胸部X光片。现在展示一张新的胸部X光片请你判断其中是否存在肿块。你或许能正确识别出这张X光片包含肿块。图中所示的肿块其外观可能与你之前看到的异常图像相似而与正常图像不同。你刚才的学习方式与我们接下来要教算法检测肿块的方式非常相似。作为参考肿块的定义是在胸部X光片上可见的、直径大于三厘米的病变或组织损伤。接下来我们将探讨如何训练我们的算法来识别肿块。007训练、预测与损失在本节课中我们将学习人工智能算法在医学影像诊断中的核心工作流程如何通过训练学习如何对新图像进行预测以及如何通过损失函数来衡量和修正预测的误差。训练过程https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/dlai-ai-med/img/d10da0d8661ef0f470b9f8b54c0437eb_1.png上一节我们了解了数据标注的重要性。本节中我们来看看算法如何利用这些标注数据进行学习。在训练过程中算法会观察大量带有标签的胸部X光片。这些标签指明了图像中是否包含肿块。算法通过学习这些图像及其对应的标签来获取知识。https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/dlai-ai-med/img/d10da0d8661ef0f470b9f8b54c0437eb_1.png最终算法学会从输入的X光图像生成一个关于图像是否包含肿块的输出。这个算法可以有多种不同的名称。你可能听说过深度学习算法、模型、神经网络或卷积神经网络等术语。https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/dlai-ai-med/img/d10da0d8661ef0f470b9f8b54c0437eb_3.pnghttps://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/dlai-ai-med/img/d10da0d8661ef0f470b9f8b54c0437eb_3.png预测与输出算法以“分数”的形式产生输出。这些分数是图像包含肿块的预测概率。例如算法可能输出某张图像包含肿块的概率为0.48而另一张图像的概率为0.51。在训练刚开始时这些概率输出与期望的标签并不匹配。假设“有肿块”的期望标签是1“正常”的期望标签是0。可以看到0.48 与 1 相差甚远0.51 也与期望的标签 0 相差甚远。损失函数我们可以通过计算一个损失函数来衡量这种误差。损失函数用于度量我们的输出概率与期望标签之间的误差。我们很快就会看到这个损失是如何计算的。随后一组新的图像和期望标签会呈现给算法。随着时间推移算法学习产生更接近期望标签的分数。注意观察这个输出概率如何逐渐接近 1而另一个输出概率如何逐渐接近 0。https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/dlai-ai-med/img/d10da0d8661ef0f470b9f8b54c0437eb_5.png核心概念总结以下是本课涉及的核心概念训练算法通过观察带标签的(图像, 标签)对来学习模式。预测/输出对于新图像算法输出一个概率分数公式可表示为P(肿块|图像)。损失函数这是一个衡量预测输出y_pred与真实标签y_true之间差异的函数例如二元交叉熵损失Loss -[y_true * log(y_pred) (1 - y_true) * log(1 - y_pred)]。课程总结https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/dlai-ai-med/img/d10da0d8661ef0f470b9f8b54c0437eb_5.png本节课中我们一起学习了AI医学诊断模型的基本训练流程。我们了解到算法通过反复查看标注数据来学习其输出是表示可能性的概率分数。在训练初期这些预测往往不准确而损失函数则像一把尺子量化了预测的错误程度并指导算法在后续的学习中不断调整使预测结果越来越接近真实情况。AI 医学诊断P8图像分类与类别不平衡在本节课中我们将学习医学图像分类任务并探讨训练此类算法时面临的核心挑战之一类别不平衡。我们将了解其成因并学习应对此挑战的关键技术。https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/dlai-ai-med/img/5937c9e9bdd7a8181af246f3eba69057_1.png在之前的视频中我们看到的医学AI示例通常涉及向算法展示数十万张图像。https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/dlai-ai-med/img/5937c9e9bdd7a8181af246f3eba69057_1.png这是图像分类的典型设置。图像分类是计算机视觉领域的核心任务其流程是输入一张自然图像图像分类算法会输出图像中包含的物体是什么。你可能见过能够完成此任务的深度学习算法。我们的胸部X光分类示例在许多方面与这种图像分类设置相似。然而存在一些额外的挑战使得训练医学图像分类算法更具难度。我们接下来将介绍这些挑战。https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/dlai-ai-med/img/5937c9e9bdd7a8181af246f3eba69057_3.pnghttps://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/dlai-ai-med/img/5937c9e9bdd7a8181af246f3eba69057_3.png我们将讨论在医学图像上训练算法面临的三个关键挑战类别不平衡挑战、多任务挑战和数据集规模挑战。针对每个挑战我们将介绍一到两种应对技术。https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/dlai-ai-med/img/5937c9e9bdd7a8181af246f3eba69057_5.png上一节我们概述了医学图像分类面临的三大挑战。本节中我们首先深入探讨类别不平衡挑战。以下是类别不平衡挑战的具体描述。在医学数据集中非疾病正常样本和疾病样本的数量并不相等。这反映了疾病在现实世界中的患病率或频率。在现实中尤其是在对健康人群进行X光检查时正常样本的数量远多于肿块样本。在医学数据集中你可能会看到正常样本的数量是肿块样本的一百倍之多。https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/dlai-ai-med/img/5937c9e9bdd7a8181af246f3eba69057_7.pnghttps://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/dlai-ai-med/img/5937c9e9bdd7a8181af246f3eba69057_7.png本节课中我们一起学习了医学图像分类的基本框架并重点探讨了类别不平衡这一核心挑战。我们了解到由于疾病在真实世界中的低患病率医学数据集中正常样本的数量可能远多于疾病样本这给模型训练带来了困难。在后续课程中我们将继续学习应对多任务挑战和数据集规模挑战的方法。009二元交叉熵损失函数在本节课中我们将要学习二元交叉熵损失函数并探讨其在处理类别不平衡数据时可能遇到的问题及其解决方案。问题引入类别不平衡的影响https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/dlai-ai-med/img/5bcf84a50759e43a0e453fc28eccb9f5_1.png上一节我们介绍了医学诊断中常见的类别不平衡问题。当训练数据中大多数样本都是正常阴性时这会为学习算法带来一个难题。这会导致模型开始为所有样本预测一个非常低的患病概率从而无法有效识别出真正患病的样本。损失函数分析让我们看看如何将这个问题追溯到我们用于训练算法的损失函数。我们也将了解在存在不平衡数据时如何修改这个损失函数。二元交叉熵损失函数这个损失函数被称为二元交叉熵损失。它用于衡量一个输出值在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。总结https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/dlai-ai-med/img/5bcf84a50759e43a0e453fc28eccb9f5_3.png本节课中我们一起学习了二元交叉熵损失函数。我们了解了其数学定义并通过具体示例演示了如何为阳性和阴性样本计算损失。在下一节中我们将基于此理解探讨如何针对类别不平衡问题调整损失函数以帮助模型更好地学习识别少数类患病样本。010类别不平衡对损失计算的影响 在本节课中我们将要学习类别不平衡问题如何影响模型训练中的损失计算并探讨一种名为“加权损失”的解决方案。我们已经了解了损失如何应用于单个样本。本节中我们来看看它如何应用于一批样本。这里我们有六个正常样本和两个肿块样本。请注意这里的P2、P3、P4是患者ID。在训练尚未开始时假设算法为所有样本输出的概率均为0.5。随后可以计算每个样本的损失。对于一个正常样本我们将使用-log(1 - 0.5)计算结果为0.3。对于一个肿块样本我们将使用-log(0.5)计算结果同样为0.3。https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/dlai-ai-med/img/a3d5d130c9e6541eb346ed91961ad870_1.pnghttps://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/dlai-ai-med/img/a3d5d130c9e6541eb346ed91961ad870_1.png肿块样本对总损失的贡献为0.3 * 2 0.6。而正常样本对总损失的贡献为0.3 * 6 1.8。因此可以注意到损失的主要贡献来自于正常样本而非肿块样本。所以算法在优化更新时会侧重于正确分类正常样本而相对较少地关注肿块样本。在实践中这无法产生一个性能良好的分类器。这就是类别不平衡问题。https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/dlai-ai-med/img/a3d5d130c9e6541eb346ed91961ad870_3.png解决类别不平衡问题的方法是修改损失函数为正常类和肿块类分配不同的权重。W_P是我们分配给阳性肿块样本的权重W_N是分配给阴性正常样本的权重。https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/dlai-ai-med/img/a3d5d130c9e6541eb346ed91961ad870_3.pnghttps://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/dlai-ai-med/img/a3d5d130c9e6541eb346ed91961ad870_5.png接下来我们看看当赋予阳性样本更高权重时会发生什么。我们希望更重视肿块样本使它们对总损失的贡献能与正常样本相当。https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/dlai-ai-med/img/a3d5d130c9e6541eb346ed91961ad870_5.png以下是权重的选择方法我们选择6/8作为肿块样本的权重。我们选择2/8作为正常样本的权重。https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/dlai-ai-med/img/a3d5d130c9e6541eb346ed91961ad870_7.pnghttps://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/dlai-ai-med/img/a3d5d130c9e6541eb346ed91961ad870_7.png然后你可以看到如果汇总肿块样本的总损失我们得到0.45这等于此处正常样本的总损失。https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/dlai-ai-med/img/a3d5d130c9e6541eb346ed91961ad870_9.pnghttps://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/dlai-ai-med/img/a3d5d130c9e6541eb346ed91961ad870_9.png在一般情况下分配给阳性类的权重将是阴性样本数量 / 总样本数量。在我们的案例中即6个正常样本 / 8个总样本。分配给阴性类的权重将是阳性样本数量 / 总样本数量即2 / 8。通过这样设置W_P和W_N我们可以使所有样本中来自阳性类和阴性类的损失贡献相同。这就是使用权重修改损失的核心思想这种方法被称为加权损失用于解决类别不平衡问题。https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/dlai-ai-med/img/a3d5d130c9e6541eb346ed91961ad870_11.pnghttps://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/dlai-ai-med/img/a3d5d130c9e6541eb346ed91961ad870_11.png本节课中我们一起学习了类别不平衡如何导致模型在训练时忽略少数类并通过引入加权损失的方法调整不同类别样本在损失计算中的权重从而让模型能够平等地学习所有类别。核心公式是阳性类权重 阴性样本数 / 总样本数阴性类权重 阳性样本数 / 总样本数。AI 医学诊断P11重采样实现类别平衡 在本节课中我们将学习另一种处理类别不平衡问题的方法重采样。我们将探讨其基本思想、具体实现步骤并了解其如何影响模型训练。上一节我们介绍了通过加权损失函数来处理类别不平衡。本节中我们来看看另一种直观的方法——重采样。重采样的核心思想是通过调整训练数据集的构成使得正常阴性样本和肿块阳性样本的数量在训练时达到平衡。以下是重采样的具体实现步骤首先我们将数据集中的样本按类别分组。假设正常组有6个样本肿块组有2个样本。https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/dlai-ai-med/img/022b3655870fdb5102fb0bccc28067ad_1.png接着我们从这两个组中进行采样目标是构建一个包含等量正负样本的新数据集。具体做法是从肿块阳性类中抽取一半样本从正常阴性类中也抽取一半样本。https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/dlai-ai-med/img/022b3655870fdb5102fb0bccc28067ad_1.png这意味着在新的数据集中我们可能无法包含所有的正常类样本。我们可能会对肿块类样本进行重复采样即同一个样本可能出现多次。使用这个重采样后的平衡数据集如果我们像之前一样计算损失函数标准的二元交叉熵损失可以看到即使不使用任何权重肿块样本和正常样本对总损失的贡献也是相等的。重采样方法有多种变体例如对多数类正常类进行欠采样或对少数类肿块类进行过采样。这些方法都属于重采样技术的范畴是解决数据不平衡问题的有效工具。https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/dlai-ai-med/img/022b3655870fdb5102fb0bccc28067ad_3.pnghttps://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/dlai-ai-med/img/022b3655870fdb5102fb0bccc28067ad_3.png本节课中我们一起学习了重采样技术。我们了解到通过从原始不平衡数据中构建一个类别平衡的训练集可以让模型在训练时平等地看待不同类别的样本从而有效应对类别不平衡带来的挑战。012多任务学习 在本节课中我们将探讨医学图像分类中的另一个挑战多任务学习。我们将了解如何让一个模型同时学习识别多种疾病以及这背后的原理和实现方法。多任务学习的挑战与动机https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/dlai-ai-med/img/831bce28681d8cd932b4db191497003f_1.png上一节我们介绍了二分类任务即判断图像中是否存在肿块。然而在现实世界中我们通常需要同时关注多种疾病的诊断。例如一张胸部X光片可能需要同时评估是否存在肿块、肺炎和肺水肿。一种简单的方法是针对每种疾病训练一个独立的模型。但或许我们可以让一个模型学会所有这些任务。这样做的一个优势是模型可以学习到对识别多种疾病都有用的共同特征从而更高效地利用现有数据。这种设置被称为多任务学习。接下来我们看看如何训练一个算法来同时学习所有这些任务。数据与模型架构的调整为了实现多任务学习我们需要对数据和模型架构进行调整。数据标签的调整在二分类中每个样本只有一个标签例如0表示无肿块1表示有肿块。在多任务学习中每个样本将拥有多个标签每个标签对应一种疾病。以下是标签格式的示例0表示该疾病不存在。1表示该疾病存在。例如一个样本的标签可能是[0, 1, 0]这表示第一个标签0无肿块。第二个标签1有肺炎。第三个标签0无肺水肿肺水肿指肺部积液过多。模型输出的调整相应地模型的输出层也需要改变。它不再只输出一个概率值而是为每种疾病输出一个独立的概率。例如一个三任务模型的输出可能是三个概率值P(mass)P(pneumonia)P(edema)https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/dlai-ai-med/img/831bce28681d8cd932b4db191497003f_3.png损失函数的修改要训练这样的多任务模型我们还需要将损失函数从二分类设置修改为多任务设置。在二分类中我们通常使用二元交叉熵损失。对于一个任务其公式为Loss -[y * log(p) (1 - y) * log(1 - p)]其中y是真实标签0或1。p是模型预测该类别为1的概率。在多任务学习中我们需要计算所有任务的损失总和。假设我们有K个任务总损失是每个任务二元交叉熵损失的平均值或总和。以下是多任务损失函数的通用公式Total Loss (1/K) * Σ_{i1}^{K} [-y_i * log(p_i) - (1 - y_i) * log(1 - p_i)]其中K是任务总数。y_i是第i个任务的真实标签。p_i是模型预测第i个任务为正类的概率。通过最小化这个总损失模型可以同时学习优化所有疾病的诊断性能。总结本节课中我们一起学习了医学图像诊断中的多任务学习。我们首先了解了其动机让一个模型共享特征以同时诊断多种疾病从而提高数据利用效率。接着我们探讨了如何调整数据标签和模型输出层以适应多任务。最后我们学习了如何修改损失函数将多个二分类任务的损失结合起来以指导模型的训练。https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/dlai-ai-med/img/831bce28681d8cd932b4db191497003f_5.png多任务学习是构建高效、全面医学AI诊断系统的重要技术之一。013多任务损失、数据集规模与CNN架构在本节课中我们将学习如何为多任务学习设计损失函数探讨数据集规模带来的挑战并了解适用于医学影像分析的卷积神经网络架构。多任务损失函数上一节我们介绍了多任务学习的基本概念。本节中我们来看看如何为多任务学习设计损失函数。我们修改损失函数使其能够分别计算与每种疾病相关的误差。新的损失可以表示为多个疾病损失的总和。这被称为多标签损失或多任务损失。以下是针对八个示例计算出的损失。第一项表示使用此预测概率和此标签计算出的与肿块类别相关的损失。类似地这里是与肺炎类别相关的损失由模型输出和此标签计算得出。我们将各个损失函数组件给出的三个损失相加。https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/dlai-ai-med/img/f2eddfc848b7c27e9c92c3896d5d5289_1.pnghttps://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/dlai-ai-med/img/f2eddfc848b7c27e9c92c3896d5d5289_1.png处理类别不平衡在多任务设置中我们同样需要考虑如何处理类别不平衡问题。我们可以再次应用之前介绍过的加权损失。但这次我们不仅有为正负标签分配的权重而且权重是针对特定类别的正标签和特定任务疾病的负标签分配的。这意味着对于肿块、肺炎或水肿其正类别的权重可能各不相同。这解决了多任务学习中的第二个挑战。https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/dlai-ai-med/img/f2eddfc848b7c27e9c92c3896d5d5289_3.png数据集规模的挑战接下来我们看看第三个挑战即数据集规模问题。https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/dlai-ai-med/img/f2eddfc848b7c27e9c92c3896d5d5289_3.pnghttps://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/dlai-ai-med/img/f2edc848b7c27e9c92c3896d5d5289_5.pnghttps://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/dlai-ai-med/img/f2eddfc848b7c27e9c92c3896d5d5289_5.png卷积神经网络架构对于许多医学影像问题首选的架构是卷积神经网络也称为ConvNet或CNN。这些网络专为处理X光片等2D图像而设计但其变体也适用于医学信号处理或CT扫描等3D医学影像。https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/dlai-ai-med/img/f2eddfc848b7c27e9c92c3896d5d5289_7.png以下是几种广泛流行的卷积神经网络架构https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/dlai-ai-med/img/f2eddfc848b7c27e9c92c3896d5d5289_7.pngInceptionResNetDenseNetResNeXtEfficientNet这些架构由各种构建模块组成。在医学问题中标准做法是在目标任务上尝试多种模型以找出效果最佳的架构。https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/dlai-ai-med/img/f2eddfc848b7c27e9c92c3896d5d5289_9.png总结https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/dlai-ai-med/img/f2eddfc848b7c27e9c92c3896d5d5289_9.png本节课中我们一起学习了多任务学习的损失函数设计了解了如何通过加权损失处理多任务中的类别不平衡问题并认识了数据集规模带来的挑战。最后我们介绍了适用于医学影像分析的几种主流卷积神经网络架构为后续的模型选择奠定了基础。014小规模训练集下的工作方法 在本节课中我们将探讨一个在医学影像分析中常见的挑战当数据量有限时如何应用需要大量数据训练的深度学习模型。我们将重点介绍一种名为“迁移学习”的有效策略。挑战数据饥渴的模型https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/dlai-ai-med/img/c0e54ecdbbf44604ee7ac2ff63c83cae_1.png上一节我们介绍了各种深度学习架构。这些架构的共同挑战是它们都是“数据饥渴型”的通常需要像图像分类数据集那样数百万的示例才能达到最佳性能。在医学问题中我们通常无法获得数百万的示例。那么我们如何在这种情况下仍然应用这些强大的技术呢https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/dlai-ai-med/img/c0e54ecdbbf44604ee7ac2ff63c83cae_3.png解决方案预训练与微调一种解决方案是预训练网络。其核心思想是分两步走。第一步预训练首先让网络观察自然图像例如包含企鹅、猫或狗的图片并学习识别这些物体。这个过程旨在让网络学习通用的图像特征。第二步微调然后将这个已训练网络作为起点用于学习医学影像任务。具体做法是复制其已学习的特征。网络可以在此基础上进一步训练以观察胸部X光片并识别疾病的存在与否。这个过程的原理在于当网络学习第一个任务识别猫狗时它会学到一些通用的特征这些特征将有助于它在医学任务上的学习。例如识别企鹅边缘的特征可能同样有助于识别肺部的边缘而这对于诊断某些疾病是有帮助的。https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/dlai-ai-med/img/c0e54ecdbbf44604ee7ac2ff63c83cae_5.png当我们把这些特征迁移到新网络后网络就拥有了一个更好的起点来学习胸部X光判读这个新任务。第一步称为预训练第二步称为微调。网络层级的理解通常认为网络的早期层捕获的是低层次的、可广泛泛化的图像特征如物体的边缘。而后期层捕获的则是更高层次或更特定于某个任务的细节。例如早期层可能学习物体的边缘这对后续的胸部X光判读可能有用。但后期层可能学习如何识别企鹅的头部这部分知识对胸部X光判读可能就没有直接用处了。微调策略https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/dlai-ai-med/img/c0e54ecdbbf44604ee7ac2ff63c83cae_7.png因此当我们在胸部X光数据上微调网络时我们不必微调所有迁移过来的特征。我们可以冻结浅层学习到的特征只微调更深层的网络权重。在实践中有两种最常见的设计选择微调所有层。只微调后期层或最后一层而不微调早期层。以下是两种策略的简单示意# 策略1微调所有层forparaminmodel.parameters():param.requires_gradTrue# 所有参数均可更新# 策略2仅微调最后一层示例forparaminmodel.parameters():param.requires_gradFalse# 先冻结所有参数forparaminmodel.fc.parameters():# 假设最后一层是全连接层 ‘fc’param.requires_gradTrue# 仅解冻最后一层总结https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/dlai-ai-med/img/c0e54ecdbbf44604ee7ac2ff63c83cae_9.png本节课中我们一起学习了应对医学影像小规模数据集的挑战。我们介绍了预训练与微调的方法这种方法也被称为迁移学习。其核心是先在大型自然图像数据集上训练模型学习通用特征然后将这些特征作为起点在较小的医学数据集上进行针对性调整。通过理解网络不同层级的功能我们可以选择冻结部分层、只微调特定层从而更高效地利用有限的数据提升模型在医学诊断任务上的性能。