摘要
今天 fast.ai 发布了一个新的免费开源深度学习库 v1,名为fastai。该库构建在PyTorch v1(今天发布预览版)之上,为最重要的深度学习应用和数据类型提供了一个统一一致的 API。fast.ai 的最新研究突破都嵌入到了软件中,与其他深度学习库相比,显著提高了准确性和速度,同时需要的代码量大大减少。您今天就可以从 conda、pip 或GitHub下载它,或在Google Cloud Platform上使用。AWS 支持即将推出。
关于 fast.ai
fast.ai 的使命是让任何人都能利用最先进的深度学习能力。为了实现这一目标,我们做了三件事
研究如何快速可靠地将最先进的深度学习应用于实际问题
构建软件,使最先进的深度学习尽可能易于使用,同时方便研究人员探索假设进行定制
开设课程,让尽可能多的人能够使用研究成果和软件
您很可能已经熟悉我们的课程。数十万人已经学习了我们的面向程序员的深度学习实践课程,许多校友正在利用新技能在 Google Brain、OpenAI 和 Github 等组织中做出令人惊叹的工作。(他们中的许多人现在正积极为我们活跃的深度学习实践者讨论论坛以及更广泛的深度学习社区的其他成员贡献力量。)
您可能还听说过我们最近的一些研究突破(在我们学生和合作者的帮助下!),包括打破深度学习速度记录并实现了文本分类的全新最先进水平。
新的 fastai 库
至此,我们已经介绍了上面列出的三个领域中的研究和教学部分——那么软件呢?今天我们发布新的fastai 深度学习库的 v1.0 版,该库在过去 18 个月一直在开发中。fastai 构建在PyTorch之上,PyTorch 为我们的工作提供了基础。当我们在一年多以前宣布 fastai 的初步开发时,我们描述了 PyTorch 为我们提供的许多优势。例如,我们谈到了如何“使用常规 Python 代码的所有灵活性和功能来构建和训练神经网络”,以及“我们能够处理更广泛的问题”。PyTorch 团队在 fastai 的开发过程中给予了大力支持,包括贡献了关键的性能优化,这些优化使我们的软件实现了关键功能。
fastai 是第一个为所有最常用的深度学习应用(包括视觉、文本、表格数据、时间序列和协同过滤)提供统一一致接口的深度学习库。这对于实践者来说非常重要,因为这意味着如果您学会了如何使用 fastai 创建实用的计算机视觉模型,那么您也可以使用相同的方法来创建自然语言处理 (NLP) 模型,或我们支持的任何其他类型的模型。
Google Cloud Platform 从今天起,向所有客户提供 fastai v1 的实验性深度学习镜像,用于 Google Compute Engine,包括即开即用的 Notebook 和预装数据集。要使用它,只需访问 Google Cloud Marketplace 上的深度学习镜像页面并设置您的实例配置,将框架设置为 PyTorch 1.0RC,然后点击“部署”。就这样,您现在就拥有了安装有 Jupyter Lab、PyTorch 1.0 和 fastai 的虚拟机!要了解更多关于如何使用这些镜像的信息,请阅读 Google 的 Viacheslav Kovalevskyi 撰写的这篇博文。如果您想在支持 GPU 的 Jupyter Notebook 中使用 fastai,现在只需点击一下即可,这得益于今天发布的Salamander对 fastai 的支持。
还有来自 Bratin Saha(副总裁,Amazon Web Services)的好消息:“为了支持 fast.ai 使深度学习能力能够规模化应用的使命,fastai 库将很快在 AWS 的深度学习镜像和Amazon SageMaker中可用”。我们也非常感谢 Microsoft AI CTO Joseph Sirosh 的热情,他说:“在微软,我们有一个宏大的目标,就是让 AI 对每个组织都触手可及且有价值。我们很高兴看到 Fast.AI 帮助大规模普及深度学习,并利用云的力量。”
早期用户
GitHub 上的语义代码搜索
fast.ai 是Github协作工具的热情用户,而且许多 Github 团队成员也使用 fast.ai 工具——甚至Github 的 CEO 也在学习深度学习,使用的正是我们的课程!Hamel Husain,他是 Github 的高级机器学习科学家,过去两年一直在通过 fast.ai 学习深度学习,他说
“fast.ai 课程受到了 Github 的数据科学家和高管的欢迎,开启了 GitHub 数据素养的新时代。它让 GitHub 的数据科学家有信心解决机器学习中最先进的问题,这些问题之前被认为只有大型公司或拥有博士学位的人才能解决。”
Husain 和他的同事Ho-Hsiang Wu最近发布了一个新的实验性工具,用于语义代码搜索,该工具允许 Github 用户使用简单的英语问题查找有用的代码片段。在宣布该工具的一篇博文中,他们描述了如何从 Google 的 Tensorflow Hub 切换到 fastai,因为它“使我们能够轻松访问 AWD LSTM 等最先进的架构,以及具有随机重启的循环学习率等技术”。
Husain 在过去 12 个月一直在使用 fastai 库的预发布版本。他告诉我们
“我选择 fast.ai 是因为它具有模块化特性、实现了最先进技术的高级 API,以及显著减少计算量但具有相同性能特征的创新。语义代码搜索演示只是冰山一角,销售、市场和欺诈领域的同事目前正在利用 fastai 的力量为他们的业务领域带来变革。”
音乐生成
在我们上一期 fast.ai 深度学习课程中,有一位学生非常突出,她就是Christine McLeavey Payne,她的人生经历已然十分引人入胜:曾是旧金山交响乐室内乐团屡获殊荣的古典钢琴家,金融界的高性能计算专家,以及斯坦福大学的神经科学和医学研究员。从那时起,她的旅程变得更加有趣,如今她是著名的OpenAI研究实验室的研究员。在她最近的 OpenAI 项目中,她使用 fastai 帮助她创建了Clara:一个神经网络音乐生成器。以下是她生成的一些室内乐。Christine 说
“fastai 库是一个惊人的资源。即使在我刚开始接触深度学习时,只需几行代码就能轻松让一个 fastai 模型运行起来。那时候,我不理解幕后发生的最先进技术,但它们依然有效,这意味着我的模型训练得更快,并且达到了显著更高的准确率。”
Christine 甚至创建了一个名为人类还是机器的问答小测试,您可以亲自试试;看看您能否分辨出哪些曲目是由她的算法生成的!Clara 紧密基于她在 fast.ai 学生项目中进行的语言建模工作,并利用了 fastai 库对自然语言处理最新进展的支持。Christine 告诉我们
“直到最近我才真正体会到这些细节有多么重要,以及 fastai 库为我省去了多少工作。我只花了不到两周的时间就启动了这个音乐生成项目并取得了很好的初步结果。我确信如果没有 fastai,这种速度是不可能的。”
我们认为 Clara 是深度学习表现力强大的一个绝佳例子——在这种情况下,一个设计用于生成和分类文本的模型被用来生成音乐,修改相对较少。“我几乎完全使用了 fastai 语言模型(仅对生成采样做了很小的改动),并尝试了以“音符”或“和弦”编码方式写出音乐的方法”她在Twitter 上写道。结果备受欢迎,IBM Watson 的高级研究员 Vanessa M Garcia 在 OpenAI 的演示日上宣布这是她的首选。
fastai 用于艺术项目
建筑师兼投资人Miguel Pérez Michaus一直在使用 fastai 的预发布版本研究一个他称之为风格反转的艺术实验系统。这绝对是一个图胜千言的例子,所以与其试图解释它做什么,不如让您自己看看
Pérez Michaus 说他喜欢使用 fastai 进行设计,因为“我知道它可以带我去 [Google 的 Tensorflow 库] Keras 做不到的地方,例如,无论何时需要实现一些‘非标准’的事情”。作为早期采用者,他见证了该库在过去 12 个月里的发展
“我很幸运能看到 fastai 的 Alpha 版本不断发展,即使在那时,它的强大和灵活性也显而易见。此外,它对像我这样有领域知识但没有正式计算机科学背景的人来说完全可用。而且它还在不断变好。我对深度学习未来的一个非常谦逊的直觉是,我们需要对幕后发生的事情有更细致的理解,在这种环境下,我认为 fastai 将会大放异彩。”
fastai 用于学术研究
企业家Piotr Czapla 和 Marcin Kardas是n-waves的联合创始人,这是一家深度学习咨询公司。他们使用 fastai 开发了一种新颖的文本分类算法,用于波兰语,该算法基于 fast.ai 的面向程序员的前沿深度学习课程中展示的思想。波兰语对 NLP 来说是一个挑战,因为它是一种形态丰富的语言(例如,数、性别、有生命性以及格都浓缩在一个单词的后缀中)。Czapla 和 Kardas 开发的算法在波兰顶级的 NLP 学术竞赛中获得了第一名,基于这项新研究的论文将很快发表。根据 Czapla 的说法,fastai 库对他们的成功至关重要
“我喜欢 fastai 对没有成百上千台服务器可供支配的普通人来说也很好用。它支持快速开发和原型设计,并且包含了所有最佳的深度学习实践。”
课程和社区对他们也很重要
“fast.ai 的课程为我打开了深度学习的大门,并帮助我思考并建立关于深度学习如何真正运作的直觉。我的大部分问题的答案都能在论坛的某个地方找到,只需搜索一下即可。我喜欢课程笔记被整理成 Wiki 主题,以及其他学生正在创建课程的文本记录,以便更容易找到。”
示例:计算机视觉中的迁移学习
fast.ai 的研究成果已嵌入到 fastai 库中,因此您可以自动获得其益处。让我们来看一个例子,看看这意味着什么…
Kaggle 的猫狗大战比赛从一开始就是我们课程中最喜欢的部分之一,它代表了一类重要的问题:预训练模型的迁移学习。所以我们将看看 fastai 库在这项任务上的表现如何。
在我们构建 fastai 之前,我们大部分的研究和教学工作都使用了 Keras(以 Tensorflow 作为后端),并且我们至今仍是它的忠实粉丝。Keras 确实在如何使深度学习更容易使用方面开辟了道路,并且对我们产生了很大的启发。今天,它(出于很好的原因)是训练神经网络最流行的方式。在这个简短的例子中,我们将从我们认为最重要的三个指标来比较 Keras 和 fastai:所需代码量、准确性和速度。
以下是使用 fastai 进行两阶段微调所需的所有代码——不仅要编写的代码很少,要设置的参数也非常少
= data_from_imagefolder(Path('data/dogscats'),
data =get_transforms(), tfms=imagenet_norm, size=224)
ds_tfms= ConvLearner(data, tvm.resnet34, metrics=accuracy)
learn 6)
learn.fit_one_cycle(
learn.unfreeze()4, slice(1e-5,3e-4)) learn.fit_one_cycle(
让我们在这项任务上比较这两个库(我们尽力使我们的Keras 实现尽可能接近 fastai,尽管由于 Keras 不支持 fastai 提供的所有功能,它们并不完全相同)
fastai resnet34* | fastai resnet50 | Keras | |
代码行数(不含导入语句) | 5 | 5 | 31 |
第一阶段错误率 | 0.70% | 0.65% | 2.05% |
第二阶段错误率 | 0.50% | 0.50% | 0.80% |
测试时增强 (TTA) 错误率 | 0.30% | 0.40% | N/A* |
第一阶段时间 | 4:56 | 9:30 | 8:30 |
第二阶段时间 | 6:44 | 12:48 | 17:38 |
* Keras 不提供 resnet 34 或 TTA
(重要的是要理解,这些优于 Keras 的结果绝不意味着 Keras 不是一个优秀的软件。恰恰相反!如果你尝试使用几乎任何其他库来完成这项任务,你需要编写远多的代码,并且不太可能看到比 Keras 更好的速度或准确性。这就是我们在此比较中展示 Keras 的原因——因为我们钦佩它,而且它是我们所知的最强的基准!)
fastai 在 NLP 方面也表现出类似的强大性能。最先进的文本分类算法是ULMFit。以下是 ULMFiT 在流行的 IMDb 数据集上相对于之前顶级算法的相对错误率,如 ULMFiT 论文所示
fastai 是目前唯一提供此算法的库。由于该算法内置于 fastai 中,您可以使用与上面显示的猫狗大战类似的代码来复现论文结果。以下是您如何训练 ULMFiT 的语言模型
= data_from_textcsv(LM_PATH, Tokenizer(), data_func=lm_data)
data = RNNLearner.language_model(data, drop_mult=0.3,
learn =['lstm_wt103', 'itos_wt103'])
pretrained_fnames
learn.freeze()1, 1e-2, moms=(0.8,0.7))
learn.fit_one_cycle(
learn.unfreeze()10, 1e-3, moms=(0.8,0.7), pct_start=0.25) learn.fit_one_cycle(
幕后 - PyTorch v1
fastai 的一个关键组成部分是PyTorch提供的卓越基础,其 v1 (预览版) 也于今天发布。fastai 不是取代并隐藏 PyTorch 的 API,而是旨在扩展和增强它。例如,您只需创建一个执行标准 PyTorch 张量操作的函数,就可以创建新的数据增强方法;以下是 fastai 的 jitter
函数的完整定义
def jitter(c, size, magnitude:uniform):
return c.add_((torch.rand_like(c)-0.5)*magnitude*2)
另一个例子是,fastai 使用并扩展了 PyTorch 简洁且富有表达力的 Dataset 和 DataLoader 类来访问数据。当我们想添加对图像分割问题的支持时,就像定义这个标准的 PyTorch Dataset 类一样简单
class MatchedFilesDataset(DatasetBase):
def __init__(self, x:Collection[Path], y:Collection[Path]):
assert len(x)==len(y)
self.x,self.y = np.array(x),np.array(y)
def __getitem__(self, i):
return open_image(self.x[i]), open_mask(self.y[i])
这意味着当实践者想要更深入地研究他们的模型、数据和训练方法时,他们可以充分利用完整的 PyTorch 生态系统的所有丰富性。得益于 PyTorch 的动态特性,程序员可以使用标准的 Python 工具轻松调试他们的模型。在许多深度学习领域,PyTorch 是研究人员发布研究成果最常用的平台;fastai 使测试这些新方法变得简单。
幕后 - fastai
在接下来的几个月里,我们将发表学术论文和博文,详细介绍 fastai 库的关键部分,并发布一门新课程,引导学生了解该库是如何从头开发的。为了让您先睹为快,我们将在这里介绍几个有趣的方面,重点放在计算机视觉上。
我们非常关注的一点是速度。这就是为什么我们参加了斯坦福大学的DAWNBench快速准确模型训练竞赛的原因,在该竞赛中(与我们的合作者一起),我们在所有参加的类别中都获得了第一名。如果您想复现我们在单机 CIFAR-10 上的最佳结果,只需四行代码
= ([pad(padding=4), crop(size=32, row_pct=(0,1), col_pct=(0,1)),
tfms =0.5)], [])
flip_lr(p= data_from_imagefolder('data/cifar10', valid='test',
data =tfms, tfms=cifar_norm)
ds_tfms= Learner(data, wrn_22(), metrics=accuracy).to_fp16()
learn 25, wd=0.4) learn.fit_one_cycle(
大部分的奥秘都隐藏在那个 to_fp16()
方法调用之下。在幕后,我们遵循了英伟达关于混合精度训练的所有建议。据我们所知,没有其他库提供了如此简单的方式来利用英伟达的最新技术,与以前的方法相比,这可以带来两到三倍的性能提升。
我们非常关注的另一件事是准确性。我们希望您的模型不仅在训练数据上表现良好,而且在新的测试数据上也能表现良好。因此,我们从头构建了一个全新的计算机视觉库,该库使开发和使用数据增强方法变得容易,从而提高您的模型在未见过数据上的性能。新库使用一种新方法来最小化数据经过的损失性变换的数量。例如,看看下面的三张图片
左边是来自 CIFAR-10 数据集的原始低分辨率图像。中间是使用标准深度学习增强库对此图像进行缩放和旋转的结果。右边是使用 fastai v1 进行相同的缩放和旋转。正如您所见,使用 fastai,细节保留得更好;例如,看看右边图像中飞行员的窗户比中间图像清晰得多。这种数据增强应用方式的改变意味着使用 fastai 的实践者可以使用比其他库的用户多得多的增强方法,从而使模型具有更好的泛化能力。
这些数据增强甚至可以自动应用于非图像数据,例如边界框。例如,以下是 fastai 如何处理图像检测数据集的一个示例,它会自动跟踪每个边界框经过所有增强过程
fastai 库中随处可见这些周到的特性。在接下来的几个月里,我们将深入探讨其中许多特性,为那些对 fastai 幕后实现细节感兴趣的人提供更多信息。
鸣谢!
非常感谢 PyTorch 团队。没有 PyTorch,这一切都不可能实现。还要感谢 Amazon Web Services,他们赞助了 fast.ai 的第一位常驻研究员 Sylvain Gugger,他为 fastai v1 的开发做出了许多贡献。还要感谢 fast.ai 校友 Fred Monroe、Andrew Shaw和Stas Bekman,他们都做出了重要贡献;感谢 Yaroslav Bulatov,他为我们最近的 DAWNBench 项目做出了关键贡献;感谢 Viacheslav Kovalevskyi,他负责了 Google Cloud 集成;当然,还要感谢所有帮助社区和软件取得成功的学生和合作者。