医学领域深度学习模型训练的挑战!
发布日期:2022-03-11 作者:WLT 点击:
在医学数据集的训练算法过程中面临的诸多问题中,这三个是最常见的:多任务数据集规模不均衡。
对于这些问题,我会分享一些技巧来解决。类别不平衡挑战
在现实世界中,我们看到健康的人比患病的人多,这也体现在医学数据集上。并且健康和疾病类别的例子的数量是不均衡的。这反映了现实世界中疾病的发生频率。在医疗数据集和信用卡欺诈数据集,你可能会看到正常样本的数量是异常样本的一百倍。
这样一来,很容易被误认为是车型性能优异,其实不然。如果使用诸如accuracy_score accuracy之类的简单测量,就会发生这种情况。对于这类数据集,准确率并不是一个很好的衡量标准,因为标签倾斜严重,所以一个只输出正常标签的神经网络的准确率甚至可以略高于90%。解决方案:
我们可以定义更有用的指标,比如F1指标或& # 34;准确率/召回率& # 34;。准确度被定义为& # 34;真实病例数/(真实病例数加上假阳性病例数)& # 34;。当有很多错误的例子时,这是一个很好的措施。另一方面,召回率被定义为& # 34;真实案例数/(真实案例数+错误反例数)& # 34;。这是一个很好的措施,当有很多错误的反例。医疗域中的大多数模型都是这种情况。而我们往往需要同时考虑假阳性样本和假阴性样本的数量,这就是F1测量的作用。它实现了精度和召回率的平衡,由公式2 *(精度*召回率)/(精度+召回率)给出。
另一种处理阶级不平衡的流行技术是& # 34;重采样& # 34;。这是从大多数类(具有太多样本的类)中删除样本(称为欠采样)或向少数类添加样本(称为过采样)以实现两个类之间的平衡的行为。虽然它们可以通过使用复杂的重采样技术来解决,但它们有自己的缺点,如信息丢失和过拟合。多任务挑战
在现实世界中,预测健康或疾病通常是不够的。我们经常需要把医疗的数据分成多个类别或者标签。比如只从心律上检测心律不齐就没那么有市场了,对患者进行分析来确定哪种心律不齐更有价值。例如,症状可以是心房纤维性颤动、室上性心动过速或任何其他类型。
理论上,可以为每个需要分类的标签训练单独的神经网络模型,但是这对于编码来说是非常不切实际的。如果我们能够将所有这些分类模型结合到一个返回多个预测的单一深度神经网络中,将会更有价值。解决方案:
我们使用一种叫做& # 34;多类别分类& # 34;或者& # 34;多标签分类& # 34;方法来应对这一挑战,它们略有不同。在多类别中,数据样本的类别是互斥的,而在多标签中,数据样本可以属于多个类别。在医学领域,我们通常采用多标签分类,因为如果一个患者被诊断为肺不张(肺功能不全),并不意味着他/她不会出现心脏肥大。我们将模型最后一层的分数传递给Sigmoid激活函数。这将把最后一级的每个分数转换为0到1之间的值,而不考虑其他分数。
对于多标签分类,我们选择的损失函数变成了binary_crossentropy,其中每个标签都被视为一个独立的伯努利分布,因为我们使用了Sigmoid激活函数。如果需要多个类,Sigmoid激活函数可以替换为softmax激活函数,其损失函数设置为categorical _ crossentropy。数据集大小挑战
处理医学数据集的主要挑战是这些数据集的大小。除了好的架构,大规模的训练数据对模型的性能也有重要作用,疾病可用的患者数据数量往往不足。低数据集大小是高偏差和高方差的主要原因。这给模型的推广和优化带来了困难。解决方案:
为了解决模型优化的困难,我们使用一种叫做& # 34;学习& # 34;方法,在该方法中,我们使用从相关网络的较低层学习来训练较高层,而不需要它们从头学习。由于之前的训练,下层可以作为很好的特征提取器,所以我们可以根据数据集进行微调。这项技术优化速度更快,并减少了训练新模型所需的数据量。
为了解决模型泛化的困难,我们使用了一种叫做& # 34;数据增强& # 34;技术,在向模型提供数据之前,不是复制同一个例子,而是对例子进行一些随机的变换。通过这种方式,我们可以保持模型不变,例如大小或亮度的小变化。诸如水平或垂直翻转图像、改变图像的亮度或对比度以及在一定程度上旋转或缩放图像等做法有助于数据扩展。这种技术对于避免小数据集中的过度拟合非常有用。