albert https://arxiv.org/pdf/1909.11942.pdf
主要几点:
1.词嵌入部分进行矩阵分解减少参数量
2.block参数共享较少参数,更好鲁棒性
3.改用sop学习句子顺序关系
4.去掉dropout,增加数据源
还有一点 ngram masking 意思就是之前任务中都是masking单个字,ngram相当于是短语,任务更难了。
1.矩阵分解
在bert模型中,词嵌入向量部分通过全连接方式学习, 设词汇量为V,词向量维度和隐藏层维度H是一样。那词嵌入矩阵大小为VH。例如bert中的场景下就是30522768=2400万参数,如果引入中间矩阵E进行因式分解。
那么由原来的 O(V * H) -> O(VE + EH)
假设中间矩阵大小为128 参数量就会变成,30522128 + 128768=400万,可见参数减少了6倍。
为啥这样操作呢?
下图原始词输入网络中是one-hot输入,如果当前词汇大小是30552,那个某一个字输入的就是一个30552长度,当前字index值为1,其他都是0。那么输入第一步是会去找当前字投影矩阵,更新也是一样,只会更新当前字index所在向量,因为其他位置都是0,学习更新的过程是离散的。并且可以看到下图左侧投影过程中其实字与字之间的关系是无法捕获的