本文带来各类奇怪的IT百科知识。
文章目录
Reformer要解决的问题
Reformer怎么解决以上三个问题
Reformer时间、空间复杂度汇总
我们接下来详解以上三个改进
一. hash近似Attention
二. 可逆网络
三. 可逆网络分块
四. 总结一下:Reformer确实在内存、性能优化方面明显改进:提出或借鉴的方法比较有意思。
如有不对地方:欢迎指出:谢谢。
参考链接:
论文:https://arxiv.org/abs/2001.04451
Reformer要解决的问题
attention的内存、计算复杂度是文本长度L的平方复杂度即O(L* L):self-attention每个位置都要看整句的其他每个位置:, 这在超长文本时:比如文章:是不可接受的。传统transformer一般是按512长度分块:这样损失了块与块之间的互信息。
原生transformer训练是需要的内存是层数的倍数:因为反向传播是需要存储每层的结果来求误差的梯度:。
feed-forward层的维度一般远大于模型的维度:一般是两倍::这样feed-forward层反向传播空间复杂度要求大很多。
Reformer怎么解决以上三个问题
基于局部近似hash的近似attention把复杂度从O(L * L)降低到O(L * log(L))
可逆网络解决训练的内存是层数倍数的问题:可逆网络由于后面层可以推出前面层:所以:只用保存最后一层即可:。
可逆网络分块计算:复杂度可以从