The Reversible Residual Network : Backpropagation Without Storing Activations (RevNet)

|

Aidan N. Gomez, Mengye Ren, Raquel Urtasun, Roger B. Grosse
(Submitted on 14 Jul 2017)
arXiv:1707.04585

해당 논문은 ResNet의 변종인 RevNet에 관한 내용이다. ResNet 논문은 Deep Residual Learning for Image Recognition (ResNet) 여기에서 볼 수 있다.


현재 대부분의 Neural Network는 backpropagation을 사용하여 훈련된다. 사실 backpropagation은 네트워크의 activation들을 메모리에 저장해야하며 이는 네트워크 속 units의 수에 비례하는 비용이 든다 (= 큰 네트워크일수록 cost가 크다는 뜻). 이는 네트워크가 더욱 wide해지고 deep해질 수록 메모리를 많이 사용하게됨에 따라 bottleneck 현상을 초래할 수 있다.

2019/11/10 - [AI/딥러닝 기초] - [개념정리] Bottleneck (병목현상)이란?

그래서 저자들은 아주 적은 수의 non-reversible layer를 제외하고 메모리에 activation을 저장하지 않으면서 backpropagation을 할 수 있는 방법을 찾아낸다. 그것이 바로 RevNet(Reversible Residual Network)이다.


우선 각 layer의 unit들을 두 개의 그룹으로 나누어준다. 이는 channel을 두 개로 나누는 것이다. 이렇게 나눈 것을 \(X_1\), \(X_2\)로 명명한다.

이를 이용하면 forward(그림a), backward(그림b)는 다음과 같이 생겼다. 식으로 표현하면..

  • \[Y_1 = X_1 + F(X_2)\]
  • \[Y_2 = X_2 + G(Y_1)\]

각 layer의 activation은 다음 layer의 activation으로부터 아래 식을 통해 다시 계산될 수 있다. (저장 노필요)

  • \[X_2 = Y_2 − G(Y_1)\]
  • \[X_1 = Y_1 − F(X_2)\]


[Note!!!] Residual block 과 다르게 reversible block은 무조건 stride 1을 이용해야 한다. 그렇지 않으면 layer가 정보를 버리게되어 reversible하지가 않게 되기 때문이다.


[Computational overhead]

일반적으로 \(N\) connection을 가진 네트워크에서 backprop의 연산량은 \(3N\)정도이다. 그러나 RevNet의 경우 backward pass 동안에 다시 계산되어야하므로 \(N\)이 추가된 \(4N\)이며 이는 보통의 backprop보다 33%나 더 필요하다는 뜻이다.


[Comparisons]


[Architectural Details]


[ResNet vs. RevNet]

CIFAR-10과 ImageNet 실험 결과에 따르면 RevNet은 ResNet보다 아주 조금 성능이 뒤떨어졌다. 하지만 정말 아주 조금의 성능차였고 CIFAR-100의 어떤 경우에는 RevNet이 더 좋은 성능을 보였다. 정리하자면, RevNet은 ResNet과 엄청나게 적은 차이의 성능을 보이며 메모리는 그것보다 훨씬 효율적으로 사용하는 모델이다.


다 읽고..

일반적으로 ResNet을 많이 쓰는 현대에서 메모리 효율을 따져야하는 경우가 생긴다면 RevNet은 그와 비슷한 성능을 보이는 아주 좋은 대안이라고 생각한다. 그러나 사실상 요즘은 메모리가 점점 커지는 추세라 딱히 크게 메모리 효율을 따져야하는 경우는 별로 없을 것 같다. 그러나 임베디드 같은 경우에는 메모리가 중요하므로 사용하면 좋을 것 같다.

Comments