我们第一次用PyTorch,就用它从头开始在实现了Attention模型和dynamic teacher forcing,只用了几个小时。
PyTorch在教学的好处
上文提到的那门课,一个重要的目标就是让学生能读最近的论文,然后实现它们。
这非常重要,因为到目前为止,在一些学术界比较关注的领域,我们对深度学习应用的研究反倒很有限,因此,用深度学习解决很多现实世界问题的时候,不仅需要了解基础技术,还要能针对特定的问题和数据去实现定制化的深度学习模型。
PyTorch,就让学生们能充分利用普通Python代码的灵活性和能力,来构建、训练神经网络。这样,他们就能解决更广泛的问题。
PyTorch的另一个好处是,它能让学生们更深入地了解每个算法中发生了什么。用TensorFlow那样的静态计算图库,你一旦声明性地表达了你的计算,就把它发送到了GPU,整个处理过程就是一个黑箱。
但是通过动态的方法,你可以完全进入计算的每一层,清楚地看到正在发生的情况。我们认为学习深度学习的最佳途径就是通过编程、实验,动态的方法正是我们的学生所需要的。
令我们惊奇的是,我们还发现很多模型在PyTorch上训练比在TensorFlow上更快。这和我们所熟知的“静态计算图能带来更多优化,所以应该性能更好”恰恰相反。
在实践中我们看到,有些模型快一点,有些慢一点,每个月都不一样。问题的关键似乎在于以下两点:
PyTorch提高了开发人员的生产力和debug经验,因此可以带来更快的开发迭代和更好的实现;
PyTorch中更小、更集中的开发团队不会对每个功能都进行微优化,而是要寻求“大胜”。
为什么在PyTorch上构建一个新框架?
然而,对于课程的第一部分来说,PyTorch还远远谈不上是一个很好的选择。没有机器学习背景的人根本没法上手。
PyTorch没有Keras那样简单明了的API来训练模型,每个项目都需要几十行代码来实现一个神经网络的基础训练。另外,Keras的默认设置就挺有用,而PyTorch一切都需要详细设置。
不过,Keras还能更好。我们发现大家一直在Keras里犯相同的错误,例如不能在我们有需要时打乱数据,反之亦然。另外,很多新出的最佳实践并没有被纳入Keras,特别是在快速发展的自然语言处理(NLP)领域。
所以我们在想,能不能构建一个比Keras更好的东西,用来快速训练最棒的深度学习模型。
经过一些研究和探索后,我们做到了。我们构建的模型比用Keras构建的更快、更准确、更复杂,而且更少的代码写就。最近对多个领域论文进行的实现,都证明了这一点。
关键是创建一个OO分类,其中包含了所有重要的数据选择(例如预处理、增强、测试、训练和验证集、多类和单类的分类与回归等)以及模型架构的选择。
我们完成这个工作之后,就能在很大程度上自动找出模型与数据最佳的架构、预处理和训练参数。突然间,我们的工作效率大幅提升,而且很少犯错,因为一切都是自动化的。但是我们在每个阶段提供了定制化的能力,所以可以轻松尝试不同的方法。
随着工作效率的提升,我们能够尝试更多的技术,在这个过程中,我们发现了一些非常差的方法。例如,我们发现批量归一化(几乎所有最新CNN架构都用)和模型预训练及微调(每个项目也该用)的组合,可以让标准训练方式的精度下降500%。
我们稍后会逐步放出这个研究的详细情况。(我们还缺一个名字……)
— 完 —
诚挚招聘
量子位正在招募编辑/记者,工作地点在北京中关村。期待有才气、有热情的同学加入我们!相关细节,请在量子位公众号(QbitAI)对话界面,回复“招聘”两个字。
量子位 QbitAI
վ’ᴗ’ ի 追踪AI技术和产品新动态
“