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은 아래에 정리되어 있다.
2019/11/01 - [AI/논문정리] - 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을 두개로 나누는 것이다.
이렇게 나눈 것을 x1, x2로 명명한다.
이를 이용하면 forward(그림a), backward(그림b)는 다음과 같이 생겼다.
식으로 나타내면..
- y1 = x1 + F(x2)
- y2 = x2 + G(y1)
각 layer의 activation은 다음 layer의 activation으로부터 아래 식을 통해 다시 계산될 수 있다. (저장 노필요)
- x2 = y2 − G(y1)
- x1 = y1 − F(x2)
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이 더 좋은 성능을 보였다.
정리하자면, ResNet과 엄청나게 적은 차이의 성능을 보이며 메모리는 그것보다 훨씬 효율적으로 사용하게 되는 RevNet이 좋은 Architecture라고 생각된다. :)
(이미지는 논문의 것을 그대로 사용하여 본인이 직접 ppt를 작성하였습니다.)
'AI > 논문정리' 카테고리의 다른 글
Revisiting Self-Supervised Visual Representation Learning (0) | 2019.11.12 |
---|---|
i-REVNET: DEEP INVERTIBLE NETWORKS (0) | 2019.11.11 |
Discriminative Unsupervised Feature Learning with Convolutional Neural Networks (Exemplar-CNN) (1) | 2019.11.07 |
Unsupervised Learning of Visual Representations by Solving Jigsaw Puzzles (0) | 2019.11.06 |
How transferable are features in deep neural networks? (0) | 2019.11.04 |