-
Notifications
You must be signed in to change notification settings - Fork 23
TRAINING RNNs AS FAST AS CNN
- 작성자: 10기 김지중
- 원논문: https://arxiv.org/pdf/1709.02755.pdf
- 문제의식
- 기존 RNN 계열의 아키텍쳐는 state 연산을 병렬적으로 진행하기 힘든 구조(recurrence에 대한 sequential dependency)
- 따라서 학습 / inference가 느리다.
- 제안
- SRU: Simple Recurrent Unit
- 대다수 연산이 recurrence에 대해 독립적이 되도록 재구조화.
- 그 결과 연산 속도가 Conv-layer와 비슷, LSTM에 비해 5~10배 빨라짐.
RNN의 특징
- sequential symbol들을 처리한다.
- 한 번의 step에서 하나의 symbol만 처리한다.
- 이전 step 연산 결과를 이용하여 다음 step을 계산함.
- 따라서 병렬 연산이 태생적으로 어렵다.
이러한 문제를 해결하기 위해, 본 논문에서는 이전 스텝에 대한 dependency를 최소화하고, 병렬 연산이 쉬운 아키텍처를 제시한다. 기존 방법론들이 그림1 의 왼쪽과 같이 모든 연산을 순차적으로 시행한다면, 본 논문의 SRU는 오른쪽과 같이 큰 연산들을 병렬처리 한 이후 작은 연산들을 sequential하게 수행하는 형태.
[그림1] 기존 RNN계열의 연산 수행과 SRU의 연산 수행
SRU의 장점
- 연산 시간의 단축
- 병렬연산을 늘리고 순차연산을 줄임
- 하드웨어 아키텍처에 알맞게 optimization이 가능
- 예를 들어 CUDA-level에서의 최적화가 가능
Gate 연산
- LSTM, GRU 등 대다수 RNN 계열에서는 정보의 흐름을 gating한다.
- vanishing & exploding gradient 문제를 완화하기 위해
- 구성: 1-layer + sigmoid
- 적용: point-wise multiplication between new input & gate output
- matrix multiplication에 비해 값싼 연산
본 논문에서는 값싼 gate 연산(point-wise multiplication)만 순차적으로 처리해주고, 나머지 값비싼 matrix multiplication은 병렬처리하는 것을 목표로 한다.
이런 기본 구조에 highway connection을 추가한다.
- forget gate와 유사한, reset gate를 추가한다.
reset gate를 포함한 최종적인 계산식은 아래와 같다.
LSTM과의 비교
-
SRU의 계산
-
매트릭스 연산 최적화
- 아래와 같이 모든 매트릭스 연산을 묶어서 할 수 있다.
* Q&A 매트릭스 사이즈는 같다. elementwise 연산을 해야 하니까.
-
element-wise 연산 최적화
- 하나의 커널 함수에 몰아넣는다.
- 그렇지 않으면 커널을 여러번 띄우게 되고, 데이터를 이동시키는 데서 비효율이 생긴다.
- 하나의 커널 함수에 몰아넣는다.
시퀀스 처리
SRU는 Quasi-RNN, KNN(Kernel Network), RCNN(Recurrent CNN) 등과 깊은 관련을 맺고 있다.
(이해 못함.)
cuDNN 최적화
cuDNN LSTM으로부터 많은 영향을 받았다.
(이해 못함.)
Representational power
축소된 RNN 모델들의 representational power에 대한 연구가 있었는데, 걔네들도 embedding 시퀀스에 대한 유사도 함수로 볼 수 있다는게 결론이었다. 레이어를 더 많이 쌓을 수록 non-linearity를 많이 거쳐서 high-order 시퀀스 유사도를 표현할 수 있었다고 한다. 실험 결과 SRU도 비슷하다고 한다.