最近在给新徒弟讲授预训练模型的过程中,发现了初学者的几个误区,分别是:
- 在整个学习过程中,重理论轻代码,忽略了将论文和代码进行对齐,而由于代码中往往包括了一些论文中不曾讲到的细节,所以也未曾达到全面细致的理解。
- 在学习代码过程中,重阅读轻调试,在遇到代码中无法理解的点时束手无策,而导致遗留了很多无法理解的难点。
- 在阅读代码过程中,重模型轻数据,过于注重深度学习模型,却忽略了数据的建模和加工,以BERT模型为例,忽略了预训练数据的创建过程。
对于以上问题,针对性的解决方案分别是:
- 代码要与论文对齐(code align to paper),具体来说就是先找到两者一致的内容,然后将论文中不存在或者不一致的点也逐一列举出来,并思考它的作用。
- 一静不如一动,也就是说阅读代码的时候,遇到难点时通过动态调试的方法进行学习,可使用Pycharm、vscode等工具进行调试学习,如果不方便使用,也可以使用最朴素的print语句进行调试学习。为了方便理解,举个齿轮转动的例子,如果想要真正理解该过程,就需要让其转动起来,而不是只是静静的观测齿轮。
- 对于每个代码文件都认真学习,并且在学习过程中尽量先看单个文件,看完之后再阅读其他文件。
.
基于上述原因,特意对预训练模型中的经典模型代码进行详尽的介绍,具体来说是首先对整个代码框架进行高屋建瓴的解释,然后再逐个代码文件进行全局到局部的讲解,如果在讲解过程中遇到难点,通过举例+图示的方法来帮助理解,希望能够帮助初学者掌握学习经典模型的高效方法论。
咱们首个讲解的代码是BERT,代码链接为https://github.com/google-research/bert,论文链接为https://arxiv.org/abs/1810.04805,希望大家能够先预习再学习,效果更佳。