제안 배경
- 트랜스포머에 사용되는 데이터와 모델의 크기를 대략적으로 계산해보자면 트랜스포머 레이어가 대략 2GB 정도 소요하고 embedding크기가 1024인 64K 토큰에 배치 사이즈가 8인 Activations를 계산해보자면 역시 2GB가 소요된다. 또한, 실제로 버트를 파인튜닝하기 위해서는 사용된 데이터가 17GB인 걸 감안하면 한 개의 GPU에서 충분히 올릴 수 있는 크기의 사이즈이다. 하지만 이는 다음과 같은 트랜스포머의 메모리 사용을 감안하지 않은 것이다.
- 레이어의 개수가 N개가 될 때 필요로 하는 메모리 역시 N 배가 된다.
- Feed Forward 레이어의 깊이가 어텐션 activations의 깊이보다 훨씬 크다.
- 어텐션 시퀀스의 연산 복잡도가 O(L2) 이다.
- 이는 논문에서 제안하는 다음 세 가지의 기법을 통해서 해결이 가능하다.
- Reversible Layers
- FeedForward Chunking
- LSH attention
메카니즘
LSH Attention
-
Reversible Network이란?

-
Residual Network의 단점인, 역전파 시에 중간 결과를 전부 저장하여 메모리가 커지는 문제점을 해결하기 위해서 제안된 모델

y1=F(x2)+x1y2=G(x1)+x2
x1=y1−F(x2)x2=y2−G(x1)
-
위의 식은 Residual Block과 상당히 유사하지만, 바로 input 값을 복원하기 위해 연산을 바로 적용하여 Back Computation이 가능하다는 장점이 있다. 따라서, Residual Block 처럼 중간 결과를 저장할 필요가 없게 된다.
-
Reversible Transformer
- 입력값 x를 복사하여, Reversible Network를 통과한 결과값 y_1, y_2를 평균값을 내어 결과를 반환한다.
Y1=X1+Attention(X2)Y2=X2+FeedForward(Y1)
FeedForward Chunking
- feedforward 레이어는 멀티헤드 어텐션을 적용하고 나온 결과를 확장해주는 리니어 레이어 1개와 다시 원래 차원으로 축소해주는 리니어 레이어 1개로 총 두개로 이루어져있다. 따라서 매우 연산량이 크다.
- 하지만, 어텐션과는 다르게 feedforward 레이어는 시퀀스에서 토큰의 위치가 독립적이므로여러개의 청크로 나눠서 계산 될 수 있다.
Reference
[Paper Review] Reformer: The Efficient Transformer
Reformer: The Efficient Transformer
💡Illustrating the Reformer