写点什么

使用组织增量学习开发深度学习系统

作者: Ritesh Sinha

  • 2022-01-31
  • 本文字数:4641 字

    阅读完需:约 15 分钟

使用组织增量学习开发深度学习系统

简介:协作学习和数据共享的重要性

近年来,人工智能取得了长足发展。算力和图形处理单元的大幅进步使人工智能得以走向大众。


构建人工智能系统一直是一项颇具挑战性的任务。尽管今天的组织正在探索采用人工智能的路径,但他们经常需要作出决策,判断投资某项人工智能计划是否是正确的做法。


这往往会让我们设法围绕组织的需求构建一个实验性的人工智能系统,使我们可以在加大投资力度之前对其进行评估。在这里,系统应该以“实现”为中心。我们可以利用加速原型开发的可用工具和框架来做到这一点。


这种场景是有很大挑战性的,因为构建一个人工智能系统需要解决以下方面的问题:


  • 数据收集/注释:第一个重要的考虑因素是如何获取带注释的数据来训练机器学习模型。与此同时数据还不能泄露。匿名数据是一种替代方法,但需要相当大的投入。

  • 使用合适的算法训练模型:获得正确的算法来训练模型。

  • 与参与的合作伙伴共享模型:这解决了数据共享问题,因为我们共享的是模型而不是数据。

  • 向用户提供模型以获取反馈:训练模型后,需要有一种机制让用户可以评估和感受模型。简而言之,就是具备评估模型的能力。

  • 重用:使用先前训练的模型来快速学习。为了解决上述挑战,协作机器学习方法可以发挥很大作用。在本文中,我将讨论如何在数据共享起来非常困难的情况下使用协作机器学习方法,这种背景下可以使用模型共享和组织增量学习(Institutional Incremental Learning,IIL)来构建更好的模型。


这里的关键词是模型共享,而不是数据共享。重点是以最优化的方式使用资源,以足够快的速度构建深度学习模型系统,与此同时也需要解决围绕数据的安全问题。


在协作学习场景中,协作可以通过以下方式实现:


  1. 多个参与者/组织基于可用的私有数据训练模型,并将训练的参数传递给中央服务器。我们将其称为联邦学习。

  2. 多个参与者/组织逐步训练模型并将模型传递给下一个参与者。这一过程可以反复发生。这就是组织增量学习。

什么是组织增量学习?

这是模型训练中的一种协作方式。组织增量学习是指在称为节点的多个设备/服务器上训练机器学习(或深度学习)模型。以下是其主要特点:


  1. 节点有它们的本地数据样本版本。

  2. 算法对节点可用,而不是将数据发送到一台服务器。

  3. 解决数据隐私、安全问题。

  4. 参与者可以为生态系统发布他们的模型。

  5. 适用于多个领域,包括国防、电信、物联网、制药和医疗。组织增量学习是解决数据共享问题的很有前途的方法之一。使用这种方法,组织可以在安全的环境中训练模型,并且可以共享模型而无需共享宝贵的数据。


组织增量学习不同于联邦学习。在联邦学习中,所有参与者同时进行训练。这是存在挑战的,因为中心化服务器需要更新和维护模型,导致复杂的技术和通信需求。



图 1:组织增量学习的流程


了解组织增量学习之后,接下来我们实践一下。我们使用一个项目(Github上可用)来练习。项目使用的数据是提供有关胸部 X 光片信息的一个公共数据集。我们使用称为分片的深度学习目标检测技术来解决这个问题。这里选择的架构是以 resnet34 为骨干的 UNET。


可以使用预训练的模型来诊断胸部 X 光片中的问题。对于本地训练,我们可以使用这个模型作为预训练模型。这里所做的事情是很重要的,这就是所谓的增量学习,它使用了众所周知的迁移学习概念。这一特性让我们能获得更好的模型。


在训练过程结束之后,我们得到了一个可以与其他参与者共享的模型。如果模型已经足够好用了,我们就共享它,否则建议做更多训练。这里需要注意的重要一点是数据不必离开其所在主机。我们共享一个模型,它其实是一组参数,将图像作为输入并使用称为“前向传播”的技术输出结果。它不能用来构建那些帮助训练它的图像。这是一种不可逆的过程。该模型只知道它需要知道什么信息才能做出预测。


在本地训练模型后,模型以及指标将与其他参与实体共享。这样一来,就是组织来决定是否使用特定模型,组织不需要被任何人强迫去使用它们。这样就真正实现了去中心化机器学习,其中模型不仅经过了训练,而且是由用户自行决定是否使用。


组织增量学习有助于解决灾难性遗忘问题。这是因为当我们用新数据训练模型时,训练不是从头开始的;它从最后一个合作者完成训练过程的时间点开始。然后下一个合作者要求训练过程使用一个先前可用的模型作为下一次训练迭代的起点。以这种方式,神经网络就能从新信息中学习,但这不会破坏它。


上述过程可以帮助解决灾难性学习问题。当模型在被使用之前在本地训练时,它会再次看到数据。即使先前的训练迭代已经使模式忘记了这一点,最后一次迭代也应能确保将其保留在需要的地方。因此,最后一次在本地训练模型以防止灾难性遗忘是一个好主意。


现在我们来具体研究这个过程的各个部分。本文中,我会通过一个使用组织增量学习的项目来演示这一过程。该项目的重点是利用这些概念尽量用最高效的方式帮助解决数据共享问题。下一节是具体内容。

用例

本案例是建立一个可以使用胸部 X 光片检测肺炎的系统。这里使用的数据集是 BIMCV COVID-19+,它提供关于 X 光片中病灶的信息以及这种病灶的位置。


这是由一个接口支持的,因为有一些指标来支持数据是一回事,但是用一种方法来查看并感受结果完全是另一回事。有了一个用户界面后,我们就可以“看到”或“感受到”深度学习模型。我的项目提供了一个可以做预测的脚本来解决这个问题。


从技术上讲,我们正在寻找的是 X 光片内称为边界框和相关条件的矩形区域。这里提供的数据集带有边界框注释。这些边界框代表显示肺炎病灶的区域。表示此信息的另一种方式是语义分片。由于数据提供者使用边界框提供了信息,模型也应该通过边界框返回诊断结果。

目标检测

上述问题属于计算机视觉的范畴,进一步可以细分为目标检测领域。目标检测因其在各个领域的广泛适用性而成为了一个热门主题。用于目标检测的一些流行方法/算法包括 R-CNN、Faster R-CNN、Single Shot Detector 和 YOLO。


目标检测算法很复杂,因为它有两个任务要解决:检测什么目标,目标在哪里。模型通常只有一个任务要解决,例如分类或回归,但在目标检测场景中,它需要预测条件是什么,以及这个条件出现在图像的什么位置。一般来说,这是通过预测边界框和与该边界框相关的条件来完成的。


还有一种进行边界框检测的方法是使用分片。边界框方法非常流行,但它们似乎不适用于较小的目标。在这个实现中,我们采用了基于分片的目标检测。

使用的架构/库

U-Net:U-Net 是为生物医学图像分片而开发的卷积神经网络。U 形架构包含特定的编码器-解码器方案:编码器减少每一层的空间维度并增加通道。解码器增加空间维度,同时减少通道。U-Net 在生物医学图像分片中很流行。


Resnet34:Resnet(或称残差神经网络)是卷积神经网络,使用跳跃连​​接进行残差学习。深度残差学习在学习深度架构网络方面效果更好。


fastai是一个深度学习库,为从业者提供了一些高级组件,可以快速轻松地在标准深度学习领域提供最出色的结果,并为研究人员提供可以混合和匹配以构建新方法的底层组件。它的目标是在不影响易用性、灵活性或性能的情况下同时做这两件事。


scikit-image(或称 skimage)是许多图像处理和计算机视觉算法的集合。基于 U-Net 架构的模型以像素形式输出结果。Skimage 可以帮助将像素信息转换为边界框。

方法:

项目有两个主要模块,train.py 和 inference.py。


数据收集:我们在 BIMCV COVID-19+数据集上训练分片模型。数据以 DICOM 格式和用逗号分隔的文件提供,其中包含边界框和标签信息。


数据预处理:由于分片模型需要特定格式的数据,因此我们从 DICOM 格式中提取图像并创建具有可用边界框和条件信息的蒙版图像。


模型训练:使用一个基于 PyTorch 构建的 fastai 框架的通用脚本。它提供了各种参数,如学习率、epoch 数、使用模型、训练目录、模式(全部或部分)。“使用模型”参数支持增量学习部分。调用训练脚本时,可以提供训练脚本在训练开始之前加载的模型参考(路径)。


因此,从先前的训练迭代中学到的成果会保留下来(解决灾难性学习问题)。默认情况下,我们提供了一个可用的模型。该模型使用迁移学习方法,使用一个预训练的 resnet34 模型。


通过这种方式,我们就可以应用最佳人工智能实践。一旦合作者训练了模型并将模型提供给其他参与方,他们就可以使用该模型进行预测或训练。


进行预测:一旦训练好的模型可用,我们就可以在脚本“inference.py”的帮助下使用它进行预测。这是一个非常复杂的过程,其中会发生以下事情:


  • 将模型加载到内存中。

  • 将图像加载到内存中以进行预测/推理。

  • 模型处理图像,返回蒙版图像。

  • 调整蒙版图像的大小。

  • 从蒙版图像中获得与它们相关的概率和边界框。

  • 在图像上绘制概率和相应的边界框。

  • 将预测图像保存在输出目录中。在此步骤中,如果边界框信息可用,则还会执行带有注释数据的原始图像的生成步骤。这在最终用户拥有图像信息且(或)他想查看模型如何执行的情况下是很有用的。

输出:

下面是在图像上生成的输出示例。除了边界框,它还提供标签信息。


图 2:用于预测的图像


上图显示,应用与该图像相关的条件后,出现了“典型”类型的肺炎病灶与其位置。该数据集通过四个标签提供信息:“正常”“典型”“非典型”和“不确定”。


确定标签和相关的边界框坐标需要一个中间步骤。训练后的模型逐个像素地提供信息,然后使用 skimage 将其转换为边界框。下面是一个相同的例子。左图包含原始边界框,右图包含像素信息。



图 3:模型提供每个像素的输出,然后在 skimage 库的帮助下将其转换为边界框


原始信息:当真实信息可用时,推理脚本会生成带有标签和边界框的图像。


图 4:带有原始信息的图像

适用性:

此应用程序通过仅共享模型来支持组织增量学习。当协作者训练并与协作者共享模型时,他们无需共享数据。通过这一模型,信息会与协作者共享,允许后者获取与图像关联的标签信息。这样学习就能持续下去。这里的另一个优点是任何人都不会强迫协作者使用特定的模型。他们可以灵活地


  • 使用默认模型上可用的数据训练他们的模型。

  • 加载其他用户提供的模型并得出结论。

  • 加载其他用户提供的模型并使用他们的数据集对其进行微调。这在分片模型非常常用的医学领域特别有用,并且这种方法有可能解决数据隐私问题。

增量学习的好处:

我们观察到了组织增量学习的各种好处,例如:


  • 解决数据安全问题。

  • 在不共享数据的情况下实现协作。无需访问所有数据即可获得更好的模型。

  • 易于实现。与另一种称为联合学习的方法相比,这种方法更容易实践。

  • 灵活选择模型。在这里,参与者不需要局限于特定的模型,他们可以选择自己想要的模型。与联邦学习系统相比,这种方法实现起来很简单。前者有一个复杂的技术要求,需要一个中央服务器扮演裁判的角色,并确保模型随着参与节点的更新而保持更新。这带来了复杂的工程挑战。


因此我们可以看到,在使用组织增量学习解决数据共享问题的同时,我们可以很容易地构建目标检测系统并提供给用户。这个项目已经准备就绪,并支持组织增量学习。借助 fastai 库,我们可以轻松开发支持其他架构的模型,例如 resnet50。


组织增量学习在某些情况下是很有用的,尤其是在医学领域。该框架可以支持以下用例:


  • 脑肿瘤检测

  • 胸部 X 光片中的肺炎检测

  • 腹部扫描


作者介绍:


Ritesh Sinha 是一位首席数据科学家,在交付涉及制造和医疗保健领域的 AI 端到端项目方面拥有丰富经验。除了计算机视觉之外,他还拥有自然语言处理方面的经验,并且他设计了一个高效的搜索系统,可以使用 spacy 挖掘医学期刊数据。他是一名导师,定期举办网络研讨会和大师班。他还撰写了有关制造分析挑战的白皮书。他目前在 HCL Technologies Ltd.工作。


原文链接:


Developing Deep Learning Systems Using Institutional Incremental Learning

2022-01-31 08:006389

评论

发布
暂无评论
发现更多内容

【c++图论学习】洛谷P1396营救

贤鱼很忙

c++ 算法 10月月更

跟着卷卷龙一起学Camera--双摄03

卷卷龙

ISP camera 10月月更

读书笔记 | 你最终能走多远,取决于见识

宇宙之一粟

读书笔记 10月月更

【一Go到底】第十六天---跳转控制goto&return

指剑

Go golang 10月月更

可能的二分法

掘金安东尼

算法 10月月更

「数仓建设篇」数仓主题域与主题划分实战

大数据阶梯之路

面试 数仓主题 数仓建设

我用【c++】写出了会说话的学生考勤系统

贤鱼很忙

c++ 10月月更

跟着卷卷龙一起学Camera--双摄05

卷卷龙

ISP camera 10月月更

Python还不会用日志模块?本文给你答案

芥末拌个饭吧

python 3.5+ logging模块 10月月更

Go做Web开发,有哪些必懂的概念和底层原理呢?

王中阳Go

Java php Go Web 10月月更

flask sqlalchemy使用简述

芥末拌个饭吧

sqlalchemy python 3.5+ 10月月更

Docker搭建私有镜像仓库与WordPress

okokabcd

Docker

Linux 中 Grep 命令的常见示例,非常全面!

wljslmz

Linux grep 10月月更

STM32L0 系列 EEPROM 读写,程序卡死?

矜辰所致

EEPROM STM32L051 10月月更

Python进阶(二十四)Python中函数的参数定义和可变参数

No Silver Bullet

Python 函数 可变参数 10月月更

PUTTY-0.75 下载安装及SSH远程连接方法

Yeats_Liao

后端 putty 10月月更

还不会配置Python虚拟环境?看这篇就懂了

芥末拌个饭吧

后端 配置管理 python 3.5+ 10月月更

谈谈PHP switch case和其他语言的区别

芥末拌个饭吧

php Go 10月月更

跟着卷卷龙一起学Camera--双摄04

卷卷龙

ISP camera 10月月更

长安链源码分析之网络模块 net-liquid(2)

如何提高项目的稳定性和开发效率呢?

王中阳Go

数据库 算法 框架 函数 10月月更

适用于 Linux 的 Windows 子系统(WSL)安装指南

Yeats_Liao

后端 wsl 10月月更

CorelDRAW 2019 软件应用项目(一)

张立梵

设计师 CorelDRAW 2022 10月月更

2022-10-15:给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。 你可以按 任意顺序 返回答案。 要求时间复杂度O(N)。 输入: nums = [1,1,1

福大大架构师每日一题

算法 rust 福大大

网络协议与传输媒体

急需上岸的小谢

10月月更

Ubuntu Server 20.04 LTS下载及安装教程

Yeats_Liao

ubuntu 后端 10月月更

【c++图论例题学习】洛谷 P3366最小生成树

贤鱼很忙

10月月更

朋友圈高性能复杂度分析

许四多

【一Go到底】第十六天---函数

指剑

Go golang 10月月更

协同开发时,如何科学的使用Git紧急修复线上bug?

王中阳Go

git 敏捷开发 团队协作 10月月更 git使用规范

长安链源码分析之网络模块net-liquid(1)

使用组织增量学习开发深度学习系统_AI&大模型_InfoQ精选文章