深度学习入门该用PyTorch还是Keras?热门公开课换框架背后的学问

简介:
本文来自AI新媒体量子位(QbitAI)

fdea140f9cfc041a66b9c532c1c8cbf7091c496f

你知道fast.ai么?

他们以提供零基础的深度学习课程而闻名,宣称:只要你有高中数学基础、一年的编程经验,就能通过七周的学习,具备一流的深度学习实践能力。

刚刚,他们宣布了一件事。

下一个fast.ai的课程,将完全基于一个使用PyTorch开发的框架,抛弃原来的TensorFlow和Keras框架。这是为什么?

bc3524a4077dae0267b03ca99c591d329a0e0a29

 Jeremy Howard

且听创始人Jeremy Howard详解缘由,也相当于分析了初学者该选择什么样的框架。量子位节选编译如下:

我们为什么开始尝试PyTorch?

当我们开发第二门课《面向程序员的前沿深度学习》的时候,原来选的TensorFlow和Keras框架开始让我们处处碰壁。

比如说,现在自然语言处理中最重要的技术,大概是attention模型。可是我们发现,当时在Keras上没有attention模型的有效实现,而TensorFlow实现没有文档、一直在改,还复杂得毫无必要。

结果是我们决定自己在Keras里做一个attention模型实现,花了好长时间,debug也非常难。

接下来,我们又开始研究dynamic teacher forcing的实现。要实现一个准确的神经网络翻译模型,dynamic teacher forcing是其中的关键,但我们无论是在Keras里还是TensorFlow里,都找不到这个模型的实现。

于是,我们又开始尝试自己搞,这次比attention模型还失败,根本就没做出来能用的。

这时候,PyTorch的第一个预发布版出现了。这个新框架不是基于静态计算图,而是一个动态的框架,这为我们带来了新的希望。它说,动态框架让我们在开发自己的神经网络逻辑时,只需要写普通的Python代码,像正常用Python一样去debug。

我们第一次用PyTorch,就用它从头开始在实现了Attention模型和dynamic teacher forcing,只用了几个小时。

PyTorch在教学的好处

上文提到的那门课,一个重要的目标就是让学生能读最近的论文,然后实现它们。

这非常重要,因为到目前为止,在一些学术界比较关注的领域,我们对深度学习应用的研究反倒很有限,因此,用深度学习解决很多现实世界问题的时候,不仅需要了解基础技术,还要能针对特定的问题和数据去实现定制化的深度学习模型。

PyTorch,就让学生们能充分利用普通Python代码的灵活性和能力,来构建、训练神经网络。这样,他们就能解决更广泛的问题。

PyTorch的另一个好处是,它能让学生们更深入地了解每个算法中发生了什么。用TensorFlow那样的静态计算图库,你一旦声明性地表达了你的计算,就把它发送到了GPU,整个处理过程就是一个黑箱。

但是通过动态的方法,你可以完全进入计算的每一层,清楚地看到正在发生的情况。我们认为学习深度学习的最佳途径就是通过编程、实验,动态的方法正是我们的学生所需要的。

令我们惊奇的是,我们还发现很多模型在PyTorch上训练比在TensorFlow上更快。这和我们所熟知的“静态计算图能带来更多优化,所以应该性能更好”恰恰相反。

在实践中我们看到,有些模型快一点,有些慢一点,每个月都不一样。问题的关键似乎在于以下两点:

PyTorch提高了开发人员的生产力和debug经验,因此可以带来更快的开发迭代和更好的实现;

PyTorch中更小、更集中的开发团队不会对每个功能都进行微优化,而是要寻求“大胜”。

3452a9bc940362a87d8f9b51ffb30dc751bc2fb0

为什么在PyTorch上构建一个新框架?

然而,对于课程的第一部分来说,PyTorch还远远谈不上是一个很好的选择。没有机器学习背景的人根本没法上手。

PyTorch没有Keras那样简单明了的API来训练模型,每个项目都需要几十行代码来实现一个神经网络的基础训练。另外,Keras的默认设置就挺有用,而PyTorch一切都需要详细设置。

不过,Keras还能更好。我们发现大家一直在Keras里犯相同的错误,例如不能在我们有需要时打乱数据,反之亦然。另外,很多新出的最佳实践并没有被纳入Keras,特别是在快速发展的自然语言处理(NLP)领域。

所以我们在想,能不能构建一个比Keras更好的东西,用来快速训练最棒的深度学习模型。

经过一些研究和探索后,我们做到了。我们构建的模型比用Keras构建的更快、更准确、更复杂,而且更少的代码写就。最近对多个领域论文进行的实现,都证明了这一点。

关键是创建一个OO分类,其中包含了所有重要的数据选择(例如预处理、增强、测试、训练和验证集、多类和单类的分类与回归等)以及模型架构的选择。

我们完成这个工作之后,就能在很大程度上自动找出模型与数据最佳的架构、预处理和训练参数。突然间,我们的工作效率大幅提升,而且很少犯错,因为一切都是自动化的。但是我们在每个阶段提供了定制化的能力,所以可以轻松尝试不同的方法。

随着工作效率的提升,我们能够尝试更多的技术,在这个过程中,我们发现了一些非常差的方法。例如,我们发现批量归一化(几乎所有最新CNN架构都用)和模型预训练及微调(每个项目也该用)的组合,可以让标准训练方式的精度下降500%。

我们稍后会逐步放出这个研究的详细情况。(我们还缺一个名字……)

本文作者:李林 问耕
原文发布时间:2017-09-10 
相关文章
|
7天前
|
存储 人工智能 PyTorch
基于PyTorch/XLA的高效分布式训练框架
基于PyTorch/XLA的高效分布式训练框架
15 2
|
7天前
|
机器学习/深度学习 API 语音技术
|
1月前
|
机器学习/深度学习 数据采集 PyTorch
使用PyTorch解决多分类问题:构建、训练和评估深度学习模型
使用PyTorch解决多分类问题:构建、训练和评估深度学习模型
使用PyTorch解决多分类问题:构建、训练和评估深度学习模型
|
22小时前
|
机器学习/深度学习 存储 PyTorch
PyTorch深度学习基础:张量(Tensor)详解
【4月更文挑战第17天】本文详细介绍了PyTorch中的张量,它是构建和操作深度学习数据的核心。张量是多维数组,用于存储和变换数据。PyTorch支持CPU和GPU张量,后者能加速大规模数据处理。创建张量可通过`torch.zeros()`、`torch.rand()`或直接从Python列表转换。张量操作包括数学运算、切片和拼接。在深度学习中,张量用于神经网络模型的构建和训练。理解张量对于掌握PyTorch至关重要。
|
3天前
|
机器学习/深度学习 并行计算 算法框架/工具
Anaconda+Cuda+Cudnn+Pytorch(GPU版)+Pycharm+Win11深度学习环境配置
Anaconda+Cuda+Cudnn+Pytorch(GPU版)+Pycharm+Win11深度学习环境配置
|
7天前
|
机器学习/深度学习 PyTorch API
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
从零开始学习深度学习:入门指南与实践建议
本文将引导读者进入深度学习领域的大门,从基础概念到实际应用,为初学者提供全面的学习指南和实践建议。通过系统化的学习路径规划和案例实践,帮助读者快速掌握深度学习的核心知识和技能,迈出在人工智能领域的第一步。
|
2月前
|
机器学习/深度学习 人工智能 PyTorch
Python 与人工智能的完美结合——解析 PyTorch 框架
【2月更文挑战第4天】本文将探讨 Python 在人工智能领域中的应用,以及介绍 PyTorch 框架。PyTorch 是一个基于 Python 的开源机器学习库,其强大的自动微分功能和易于使用的接口使其成为深度学习领域的热门选择。本文将从 PyTorch 的发展历程、工作原理以及示例代码等方面进行详细分析和解释。
|
2月前
|
机器学习/深度学习 PyTorch TensorFlow
Python中的深度学习:TensorFlow与PyTorch的选择与使用
Python中的深度学习:TensorFlow与PyTorch的选择与使用
|
2月前
|
机器学习/深度学习 PyTorch TensorFlow
深度学习模型加速:Pytorch模型转TensorRT模型
深度学习模型加速:Pytorch模型转TensorRT模型
99 0