在如今这个时代,人工智能俨然已经成了一个大家耳熟能详的词汇。随着技术的发展,它在不断地降低计算机领域一些工作的门槛,甚至有时候我们能看到一个可能六年前还需要从头开始学习的职业,现在只需要能掌握一个专属的小模型就可以拥有不俗的工作能力了。
但实际上,一旦所研究的数据的规模到达增长到一定程度后,很多小语言模型都不再能够支撑这些学习强度了。鉴于此,从基础开始学大语言课程是很有必要的,正所谓要了解一个事物,最好的方式就是自己亲手构筑一个事物。
前瞻
在课程中,一共分为三种类型的知识:
-
有关于事物如何运作的机制:什么是transformer,如何实现一个transformer,模型并行是如何高效使用GPU的。
-
思维模式:怎么尽可能地让硬件发挥出其全部的性能,并认真地对待扩展
-
直觉:哪些数据和决策能够产生好的模型,但是只能学到一部分,因为那些在大多数规模上有效的数据集和决策,可能并不适用于更大规模。
在学习的过程中,有时候会不可避免的产生一种误解,就是很多时候会发现,只要适当地扩大规模,很容易就会把模型的准确率提升上去,这容易让我们误入把规模扩大后建立模型后就万事大吉了的理解。实际上,模型的准确率等于我们所构建的算法的效率乘以投入规模的乘积,忽视效率只看准确率,会让我们在使用的过程中浪费很多资源,有时候涉及到规模很大的模型时,这甚至会反过来成为我们的负担。
所以我们要树立一种正确的心态,即时常思考在给定的计算和数据预算下,一个人所能构建的最佳模型是什么样的,不管在什么样的场景下这种思维都能给予我们帮助,因为这意味着我们是在计算每单位资源的准确率,能保证我们尽量不迷失方向。
课程中一共有五个作业,每次作业都不提供代码框架,也就是说需要我们自己去了解代码的框架构筑应该是什么样的,虽然有类似于我们在github引用文件时的readme文件去引导,但是相关的设计决策以及命名函数和代码需要我们自己独立完成。这些作业所涉及到的资源都比较小,是可以直接用笔记本电脑在本地跑的,这其实是在传达另一种思想,就是在运行大型任务前,应该尽可能地用小的数据集和较小的资源去完成代码的原型设计,一方面能够节省资源的浪费,毕竟有很多错误是可以在本地测试出来的,另一方面则可以让我们发散自己的思维,思考一下该怎么构筑可能出现的问题。
对于每个作业来说,最基础的目标就是让一个完整流水线的基础目标运作起来,也就是说要实现一个分词器、模型架构和训练。分词器是一个可以在字符串和整数序列之间转换的东西,简单来说,它可以把字符串分解成若干片段并将整个片段映射到一个整数,起到一个解构器的作用。比较常见的是BPE分词器。
至于架构的方法有很多,这取决于你希望模型侧重于什么,比较常见的是注意力机制,通过动态分配不同权重来聚焦输入数据的关键部分,从而提升模型对重要信息的处理能力,这能提高模型的效率,毕竟人工智能最初的思想就是往人类的思维去靠近,那么注意力机制也是让模型学会抓住重点。
最后是我们熟悉的训练部分,我们需要用到优化器,调整学习率以及一系列超参数,再进行训练,也就是说需要我们去对待很多细节,这也是直接使用基础架构和使用精心设计的架构效率完全不一样的原因所在(我们很多时候在看文献时,会看到作者也很难去解释为什么这样的参数是好的,给不出有效的实验去证明,因为有时候我们也不知道为什么参数仅仅只是变了一点点整个模型的效率就可以提升许多)。
学习课程链接来自于B站教程:https://www.bilibili.com/video/BV1pAjUzYEaK/?spm_id_from=333.1007.top_right_bar_window_custom_collection.content.click&vd_source=867b8ecbd62561f6cb9b4a83a368f691