【Pytorch Lighting】第 1 章:PyTorch Lightning adventure

 大家好,我是Sonhhxg_柒,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流

个人主页-Sonhhxg_柒的博客_CSDN博客 

欢迎各位→点赞 + 收藏⭐️ + 留言​

系列专栏 - 机器学习【ML】 自然语言处理【NLP】  深度学习【DL】

 foreword

✔说明⇢本人讲解主要包括Python、机器学习(ML)、深度学习(DL)、自然语言处理(NLP)等内容。

如果你对这个系列感兴趣的话,可以关注订阅哟

文章目录

是什么让 PyTorch Lightning 如此特别?

第一个…。

这么多框架?

PyTorch 与 TensorFlow

中庸之道——PyTorch  Lightning

– My Lightning adventure

了解 PyTorch Lightning 的关键组件

深度学习管道

PyTorch Lightning 抽象层

使用 PyTorch Lightning 制作 AI 应用程序

图像识别模型

迁移学习

NLP Transformer模型

Lightning Flash

使用 LSTM 的时间序列模型

具有自动编码器的生成对抗网络

结合 CNN 和 RNN 的自监督模型

用于对比学习的自我监督模型

部署和评分模型

扩展模型和生产力技巧

进一步阅读

概括


我们正在见证由人工智能AI ) 驱动的被普遍称为第四次工业革命)。自从大约 350 年前创造了蒸汽机以来,人类走上了工业化道路,我们看到了另外两次工业革命。大约 100 年前,我们看到电力带来了翻天覆地的变化,大约 50 年后,数字时代彻底改变了我们今天的生活方式。人工智能同样具有变革性的力量。我们所知道的关于世界的一切都在快速变化,并将继续以前所未有的速度发生变化,当然也没有人计划过。随着人工智能聊天机器人的出现,我们看到了我们联系客户服务的方式发生了变革;在我们如何观看电影/视频方面,AI 会推荐我们应该观看的内容;在我们的购物方式中,使用针对供应链优化的算法;使用自动驾驶技术如何驾驶汽车;通过将人工智能应用于蛋白质折叠等复杂问题来开发新药;通过在大量数据中发现隐藏模式,了解如何进行医疗诊断。支撑上述每项技术的是人工智能的力量。人工智能对我们世界的影响不仅仅是我们使用的技术;相反,它在我们如何与社会互动、我们如何工作以及我们如何生活方面更具变革性。正如许多人所说,人工智能是新的电力,为 21 世纪的引擎提供动力 在我们如何与社会互动、我们如何工作以及我们如何生活方面,它更具变革性。正如许多人所说,人工智能是新的电力,为 21 世纪的引擎提供动力 在我们如何与社会互动、我们如何工作以及我们如何生活方面,它更具变革性。正如许多人所说,人工智能是新的电力,为 21 世纪的引擎提供动力圣世纪。

人工智能对我们的生活和心理的巨大影响是该领域最近取得突破的结果深度学习( DL )。长期以来,科学家们一直梦想创造出模仿大脑的东西。大脑是一种迷人的自然进化现象。人类大脑的突触比宇宙中的星星还要多,正是这些神经连接使我们变得聪明,让我们能够做一些事情,比如思考、分析、识别物体、用逻辑推理和描述我们的理解。虽然人工神经网络ANN ) 的工作方式与生物神经元不同,但它们确实起到了启发作用。

在物种进化过程中,最早的生物是单细胞生物(如变形虫),大约在 40 亿年前首次出现,随后是小型多细胞物种,在大约 35 亿年的时间里盲目导航,没有方向感。当你周围的每个人都是盲人时,第一个发展出视力的物种通过成为最聪明的物种而比所有其他物种具有显着优势,而在进化生物学中,这一步(发生在大约 5 亿年前)被称为寒武纪大爆发. 这个单一事件导致物种进化的显着增长,导致了我们今天在地球上看到的一切。换句话说,尽管地球大约有 45 亿年的历史,但所有复杂的生命形式,包括人类大脑,都是在过去 5 亿年(仅占地球生命的 10%)中进化的,由单一进化事件主导,这反过来又导致有机体“看到”事物的能力。

事实上,在人类中,我们大脑的 1/3 与视觉皮层有关。这远远超过任何其他感官。也许通过首先掌握“视觉”能力来解释我们的大脑如何进化为最聪明的。

借助图像识别的 DL 模型,我们终于可以让机器“看到”事物(李飞飞将其描述为机器学习 (ML) 的寒武纪大爆发这一事件将使 AI 完全走上不同的轨迹,其中一个有一天它可能真的可以和人类的智慧相媲美。

2012 年,DL 模型在图像识别方面实现了接近人类的准确度,从那时起,已经创建了许多框架,使数据科学家能够轻松地训练复杂模型。创建特征工程FE) 步骤、复杂的转换、训练反馈循环和优化需要大量的手动编码。框架有助于抽象某些模块并使编码更容易以及标准化。PyTorch Lightning 不仅是最新的框架,而且可以说是在正确的抽象级别和执行复杂研究的能力之间取得完美平衡的最佳框架。它是 DL 初学者以及希望将模型产品化的专业数据科学家的理想框架。在本章中,我们将了解为什么会出现这种情况,以及我们如何利用 PyTorch Lightning 的强大功能快速轻松地构建有影响力的 AI 应用程序。

在本章中,我们将介绍以下主题:

  • 是什么让 PyTorch Lightning 如此特别?
  •  —My Lightning adventure
  • 了解 PyTorch Lightning 的关键组件
  • 使用 PyTorch Lightning 制作 AI 应用程序

是什么让 PyTorch Lightning 如此特别?

所以,如果你作为一名数据科学家新手,你脑海中的问题是:我应该从哪个 DL 框架开始?如果您对 PyTorch Lightning 感到好奇,那么您可能会问自己:为什么我要学习这个而不是其他东西?另一方面,如果您是一位已经构建 DL 模型一段时间的专家数据科学家,那么您将已经熟悉其他流行的框架,例如 TensorFlow、Keras 和 PyTorch。那么问题就变成了:如果你已经在这个领域工作,为什么要切换到一个新的框架? 当您已经知道另一种工具时,是否值得努力学习不同的东西?这些都是公平的问题,我们将在本节中尝试回答所有这些问题。

让我们从 DL 框架的简要历史开始,以确定 PyTorch Lightning 在这种情况下的适合位置。

第一个…。

第一个DL模型于 1993 年在麻省理工学院MIT ) 实验室执行由DL教父Yann LeCun设计。这是用 Lisp 编写的,不管你信不信,它甚至包含卷积层,就像现代卷积神经网络CNN ) 模型一样。图中显示的网络演示在他的神经信息处理系统NIPS ) 1989 年题为“使用反向传播网络的手写数字识别”的论文中进行了描述。

以下屏幕截图显示了此演示的摘录:

【Pytorch Lighting】第 1 章:PyTorch Lightning adventure_第1张图片

图 1.1 - Yann LeCun 在 1993 年的 MIT 手写数字识别演示

Yann LeCun 他本人在他的博客文章中详细描述了第一个模型是什么,这在以下视频中显示:https ://www.youtube.com/watch?v=FwFduRA_L6Q 。

正如您可能已经猜到的那样,用 C 语言编写整个 CNN 并不容易。他们的团队花费了多年的手动编码努力来实现这一目标。

DL 的下一个重大突破出现在 2012 年,创建了 AlexNet,赢得了 ImageNet 竞赛。Geoffrey Hinton 等人的AlexNet论文。被认为是最有影响力的论文,在社区中被引用次数最多。AlexNet 在准确性方面开创了先河,让神经网络再次酷起来,并且是一个经过训练的海量网络优化的图形处理单元GPU )。他们还引入了许多重要的东西,例如 BatchNorm、MaxPool、Dropout、SoftMax 和 ReLU,我们将在稍后的旅程中看到这些东西。由于网络架构如此复杂和庞大,很快就需要一个专门的框架来训练它们。

这么多框架?

Theano、Caffe 和 Torch可以说是帮助数据科学家创建深度学习模型的第一波深度学习框架。虽然 Lua 是某些编程语言的首选(Torch 最初是用 Lua 编写的 LuaTorch),但许多其他语言是基于 C++ 的,可以帮助在 GPU 等分布式硬件上训练模型并管理优化过程。当该领域本身是新的且不稳定时,它主要由学术界的 ML 研究人员(通常是博士后)使用。数据科学家应该知道如何使用梯度下降代码编写优化函数,并使其在特定硬件上运行,同时还能操作内存。显然,业内人士无法轻易使用它来训练模型并将其投入生产。

模型训练框架的一些示例如下所示:

【Pytorch Lighting】第 1 章:PyTorch Lightning adventure_第2张图片

图 1.2 – 模型训练框架

Google 的 TensorFlow 通过恢复为基于 Python 的抽象函数驱动框架成为该领域的游戏规则改变者,非研究人员可以使用该框架进行试验,同时保护他们免受在硬件上运行 DL 代码的复杂性。紧随其后的是 Keras,它进一步简化了深度学习,任何知识渊博的人都可以用四行代码训练一个深度学习模型。

但可以说,TensorFlow 没有很好地并行化。它也更难在分布式 GPU 环境中进行有效训练,因此社区认为需要一个新框架——某种东西它结合了基于研究的框架的强大功能和 Python 的易用性。PyTorch 诞生了!自首次亮相以来,该框架就席卷了 ML 世界。

PyTorch 与 TensorFlow

看着在 PyTorch 和 TensorFlow 竞争的 Google Trends 上,你可以说 PyTorch 在最近几年已经从 TensorFlow 手中接过,几乎已经超越了它。

摘录自谷歌趋势可以在这里看到:

【Pytorch Lighting】第 1 章:PyTorch Lightning adventure_第3张图片

图 1.3 – 谷歌趋势中 PyTorch 与 TensorFlow 的社区兴趣变化

虽然有些人可能会说 Google Trends 不是判断 ML 社区脉搏的最科学方法,但您也可以看看许多有影响力的 AI 参与者,它们工作量很大,例如 Facebook、Tesla 和 Uber,它们默认使用 PyTorch 框架管理他们的 DL 工作负载并显着节省计算和内存。

不过,在 ML 研究社区中,Tensorflow 和 PyTorch 之间的选择非常明确。获胜者是毫无疑问的 PyTorch!

【Pytorch Lighting】第 1 章:PyTorch Lightning adventure_第4张图片

图 1.4 – TensorFlow 与 PyTorch 在顶级 AI 会议上发表论文的趋势

这两个框架都会有他们的铁杆粉丝,但 PyTorch 被认为在分布式 GPU 环境中更高效,因为它具有固有的架构。以下是使 PyTorch 优于 TensorFlow 的其他一些因素:

  • 提供更高的稳定性。
  • 易于构建的扩展和包装器。
  • 更全面的领域库。
  • 静止的TensorFlow 中的图形表示并不是很有帮助。轻松地训练网络是不可行的。
  • PyTorch 中的动态张量改变了游戏规则,使其易于训练和扩展。

中庸之道——PyTorch  Lightning

我很少遇到像 PyTorch Lightning 一样令人兴奋的东西!这个框架是 William Falcon 的心血结晶,他的博士导师是(猜猜是谁)..Yann LeCun!这就是它的原因站出来:

  • 编码不仅很酷,而且还允许您进行认真的 ML 研究(与 Keras 不同)。
  • 它具有更好的 GPU 利用率(与 TensorFlow 相比)。
  • 它具有 16 位精度支持(对于不支持张量处理单元TPU ) 的平台非常有用,例如 IBM Cloud)。
  • 它也有一个非常好的收藏以Lightning Flash 形式的最先进SOTA ) 模型存储库。
  • 它是第一个原生框架能力和自我监督学习SSL )。

简而言之,PyTorch Lightning 让制作 DL 模型和执行快速实验变得既有趣又酷,同时不会通过从数据科学家那里抽象出核心数据科学方面而使核心数据科学方面变得愚蠢,并且始终为深入研究 PyTorch 敞开大门你想要!

我想它通过允许更多的能力来做数据科学,同时自动化大部分“工程”部分,达到了完美的平衡。这是 TensorFlow 终结的开始吗?对于这个问题的答案,我们将不得不拭目以待。

My Lightning adventure

得到从 PyTorch Lightning 开始非常容易。您可以使用 Anaconda 发行版在本地设置您的环境或使用云选项例如Google Colaboratory ( Google Colab )、Amazon Web Services ( AWS )、Azure 或 IBM Watson工作室开始。(建议您使用云环境来运行一些更复杂的模型。)本书中的大部分代码都是在 Google Collab 或 Anaconda 上使用 Python 3.6 和 Mac OS 运行的。请在其他系统上对您的环境进行适当的更改以进行安装。

可以在 Jupyter 笔记本环境中使用pip安装 PyTorch Lightning,如下所示:

pip install pytorch-lightning

除了导入 PyTorch Lightning(第一个导入语句可以在以下代码片段中看到)之外,以下导入块显示通常是代码一部分的语句:

import pytorch_lightning as pl
import torch
from torch import nn
import torch.nn.functional as F
from torchvision import transforms

火炬包用于定义张量和对张量执行数学运算。torch.nn包用于构建神经网络,这就是nn的意思torch.nn.functional包含包括激活和损失函数在内的函数,而torchvision.transforms是一个单独的库,提供常见的图像转换。安装 PyTorch Lightning 框架和所有包后,您应该会看到完成日志,如以下屏幕截图所示:

【Pytorch Lighting】第 1 章:PyTorch Lightning adventure_第5张图片

图 1.5 – PyTorch Lightning 的安装结果

安装 PyTorch Lightning 后,您可以检查 PyTorch 和 Torch 的版本

【Pytorch Lighting】第 1 章:PyTorch Lightning adventure_第6张图片

图 1.6 – 验证安装

而已!现在,你们都准备好了开始你的闪电冒险!

了解 PyTorch Lightning 的关键组件

在我们跳之前在构建 DL 模型之前,让我们修改一个深度学习项目遵循的典型管道。

深度学习管道

让我们修改用于 DL 网络架构的典型 ML 管道。这是它的样子:

【Pytorch Lighting】第 1 章:PyTorch Lightning adventure_第7张图片

图 1.7 – 深度学习管道

一个深度学习管道通常涉及以下步骤。我们将继续在整本书中看到它们,将它们用于解决问题的各个方面:

  1. 定义问题
    • 设定明确的任务和预期目标。
  2. 资料准备
    • 这一步包括找到正确的数据集来解决这个问题,摄取并清理它。对于大多数 DL 项目,这涉及到数据工程师在图像、视频或文本语料库中工作以获取数据集(有时通过网页抓取),然后将它们分类为大小。
    • 大多数 DL 模型需要大量数据,而模型还需要对图像的微小变化(例如裁剪)具有弹性。为此,工程师通过创建原始图像或黑白B/W ) 版本的裁剪或反转它们等来扩充数据集。
  3. 建模
    • 这个将首先涉及 FE 并定义我们想要构建什么样的网络架构。
    • 例如,在数据科学家创建新的图像识别模型的情况下,这将涉及定义具有三层卷积的 CNN 架构,可以定义步长、滑动窗口、梯度下降优化、损失函数等。
    • 对于 ML 研究人员来说,这一步可能涉及定义新的损失函数,以更有用的方式测量准确度,或者通过使用提供相同准确度的较低密度网络的模型训练来执行一些魔法,或者定义分布良好的新梯度优化或收敛更快。
  4. 培训
    • 现在来了有趣的一步。在数据科学家定义了 DL 网络架构的所有配置后,他们需要训练模型并不断调整它,直到它实现收敛。
    • 对于海量数据集(这是 DL 中的常态),这可能是一场噩梦般的练习。数据科学家必须兼任 ML 工程师,通过编写代码将其分发到底层 GPU 或中央处理单元CPU ) 或 TPU,管理内存和时代,并不断迭代充分利用计算能力的代码。较低的 16 位精度可能有助于更快地训练模型,因此数据科学家可能会尝试这样做。
    • 或者,可以使用分布式倾盆大雨梯度下降来更快地优化。如果您发现自己对这些术语感到喘不过气来,请不要担心。许多数据科学家都经历过这一点,因为它与统计的关系较少,而与工程的关系更多(这就是我们将看到 PyTorch Lightning 如何拯救的地方)。
    • 其他分布式计算的主要挑战是能够充分利用所有硬件并准确计算分布在各种 GPU 中的损失。做数据并行(将数据批量分发到不同的 GPU)或模型并行(将模型分发到不同的 GPU)并不简单。
  5. 部署工程
    • 后模型已经训练过了,我们需要接受它到生产。ML 操作MLOps ) 工程师通过创建可在其环境中工作的部署就绪格式文件来工作。
    • 此步骤还涉及创建一个应用程序编程接口API )与终端应用程序集成以供消费。有时,如果模型预计具有大量工作负载,它还可能涉及创建基础架构来为传入流量大小的模型评分。

PyTorch Lightning 抽象层

PyTorch 闪电框架使构建整个 DL 模型以帮助数据科学家变得容易。这是如何实现的:

  • LightningModule类用于定义模型结构、推理逻辑、优化器和调度器细节、训练和验证逻辑等。
  • Lightning Trainer抽象出循环、硬件交互、拟合和评估模型等所需的逻辑。
  • 您可以将 PyTorch DataLoader直接传递给培训师,也可以选择定义LightningDataModule以提高可共享性和重用性。

使用 PyTorch Lightning 制作 AI 应用程序

在本书中,你将看到我们如何构建各种使用 PyTorch Lightning 轻松高效地构建各种类型的 AI 模型。借助具有行业范围应用和实际优势的动手示例,您不仅会接受 PyTorch Lightning 的培训,还会接受不同深度学习系列的整个范围的培训。

图像识别模型

我们将在第 2 章中以图像识别模型的形式创建我们的第一个 DL 模型,开始我们的旅程,开始使用第一个深度学习模型。图像识别是深度学习框架的典型身份,通过使用 PyTorch Lightning,我们将了解如何使用 CNN 构建图像分类模型。

迁移学习

深度学习模型众所周知,在收敛之前需要在大量 epoch 上进行训练,从而在此过程中消耗大量 GPU 计算能力。在第 3 章,使用预训练模型的迁移学习中,您将学习一种已知的技术作为迁移学习TL ),通过从大型预训练架构(例如用于图像分类的 ResNet-50 或用于文本分类的 BERT)中迁移知识,无需付出太多努力即可获得良好的结果。

NLP Transformer模型

我们将还可以查看自然语言处理NLP ) 模型并了解 DL 如何生成文本可以对大量文本数据进行分类。您将在第 3 章“使用预训练模型的迁移学习”中了解如何使用著名的预训练 NLP 模型,包括 Transformer,并轻松适应您的业务需求。

Lightning Flash

这DL 模型的创建还涉及相当复杂的特征工程管道过程,以及同样繁琐的训练和优化步骤。大多数数据科学家通过采用赢得 Kaggle 比赛或有影响力的研究论文的 SOTA 模型开始他们的旅程。在第 4 章,Lightning Flash 的现成模型中,您将了解 Lightning Flash 等开箱即用的实用程序如何通过为标准任务(如对象检测或文本分类)提供标准网络架构的存储库来提高生产力、音频或视频。我们将很快建立视频分类和音频文件自动语音检测的模型。

使用 LSTM 的时间序列模型

预测预测时间序列中的下一个事件是行业内的常青挑战。在第 5 章,时间序列模型中,您将了解我们如何使用具有长短期记忆LSTM ) 网络架构的递归神经网络RNN )在 PyTorch Lightning 中构建时间序列模型。

具有自动编码器的生成对抗网络

生成对抗网络GAN ) 模型是最引人入胜的方面之一DL的应用程序,并且可以创建现实生活中根本不存在的人或地点或物体的逼真图像。在第 6 章,深度生成模型中,您将学习如何使用 PyTorch Lightning,轻松制作 GAN 模型,以创建逼真的动物、食品或人的假图像。

结合 CNN 和 RNN 的自监督模型

应用程序DL 模型不仅限于使用 GAN 创建精美的假图像。我们甚至可以让机器描述电影中的场景或询问有关图像内容的信息性问题(例如图片中的人或他们在做什么)。这种模型架构被称为半监督模型并且,在第 7 章,半监督学习中,您将学习 CNN-RNN 架构(其中RNN代表递归神经网络)的混合体,可用于教机器如何编写情景诗歌。在同一章中,我们还将了解如何从头开始训练模型并使用 16 位精度和其他操作技巧来加速模型以确保顺利训练。

用于对比学习的自我监督模型

如果机器可以创建逼真的图像或编写类似人类的描述,他们不能自学吗?自我监督模型旨在让机器学习如何执行低标签或根本没有标签的复杂任务,从而彻底改变我们可以用人工智能做的一切。在第 8 章,自监督学习中,您将了解 PyTorch Lightning 如何为自监督模型提供原生支持。您将学习如何教机器执行对比学习CL),它可以纯粹通过表示学习来区分没有任何标签的图像。

部署和评分模型

每个 DL 模型可以训练有朝一日被生产化并用于在线预测的梦想。这部分 ML 工程需要数据科学家熟悉自己具有各种模型文件格式。在第 9 章,部署和评分模型中,您将学习如何在可与语言无关的可移植模型中部署和评分模型借助 Pickle 和开放式神经网络交换ONNX ) 格式,在生产环境中与硬件无关。

扩展模型和生产力技巧

最后,PyTorch Lightning 的功能不仅限于在定义的架构上创建新模型,还包括使用新的研究推进 SOTA。在第 10 章,扩展和管理培训中,我们将看到一些使此类新研究成为可能的功能,以及如何通过提供故障排除技巧和快速提示来提高生产力。我们还将关注扩展模型训练的各种方法。

进一步阅读

以下是 PyTorch Lightning 的一些链接,您发现它们非常有用:

  • 官方文档:https ://pytorch-lightning.readthedocs.io/en/latest/?_ga=2.177043429.1358501839.1635911225-879695765.1625671009 。
  • GitHub 来源:https ://github.com/PyTorchLightning/pytorch-lightning 。
  • 如果您在代码中遇到任何问题,可以通过在 GitHub 上提出问题来寻求帮助。Pytorch Lightning团队通常反应迅速:https ://github.com/PyTorchLightning/lightning-flash/issues 。
  • 您可以在 PL 社区频道上寻求帮助。PyTorch Lightning 社区正在快速发展并且非常活跃。

概括

您可能是探索深度学习领域的初学者,看看它是否适合您。您可能是一名高级学位的学生,试图在 ML 方面进行研究以完成您的论文或发表论文。或者,您可能是一位在训练 DL 模型并将其投入生产方面拥有多年经验的专家数据科学家。PyTorch Lightning 让每个人都可以在 DL 中做几乎任何事情。

它通过提供对复杂性的包装器,结合了 PyTorch 的原始功能(提供效率和严谨性)和 Python 的简单性。你可以随心所欲地做一些创新工作(正如你将在本书后面看到的那样),同时你也可以获得许多开箱即用的神经网络架构,让你不必重新发明轮子(稍后您还将了解)。它与 PyTorch 完全兼容,并且可以轻松重构代码。它也可能是第一个为数据科学家角色设计的框架,而不是其他角色,例如 ML 研究员、ML-Ops 工程师或数据工程师。

我们将从一个简单的深度学习模型开始我们的旅程,并将在每一章中继续将我们的范围扩展到更高级和更复杂的模型。你会发现它涵盖了所有著名的模型,让你拥有深度学习技能,从而对你的组织产生影响。因此,让我们在下一章中使用您的第一个 DL 模型进行下一步。

你可能感兴趣的:(DL,with,Pytorch,Lighting,pytorch,人工智能)