![c402a30b6afe1003154fd10c69888421.png](https://i-blog.csdnimg.cn/blog_migrate/395fce46edcae487dc27ecbe195025c8.jpeg)
预计阅读时间:8分钟
ALBERT使用层级参数共享对BERT进行压缩,这个理论上是非常好理解的,但实现上却有一些细节需要考虑。走读albert pytorch版本的源码之时,觉得写得挺优雅,而且灵活,遂记录在此。
阅读本文前,可能需要先了解一些Albert基础知识以及Pytorch框架。
文本参考的源码版本
albert_pytorchgithub.comAlbert 源码整体和bert代码差异很小,为了实现灵活的参数共享,作者提出了一个Group的概念。 源码中将每一层都分到一个指定Group之中,一个Group包含了多个相邻的层,同一个Group里面的层是参数共享的,这个group个数由num_hidden_groups 参数决定,默认为1。即所有的层share同一个Transformer权重。
如num_hidden_groups 为2,num_hidden_layers为12,那么层分为两组。1~6层是第一组,7~12是第二组。
如num_hidden_groups 为3,num_hidden_layers为12 ,那么层分为三组。1~4为第一组,5~8为第二组,9~12为第三组。
以此类推...