이번에 소개할 논문은 PyramidNet, Deep Pyramidal Residual Networks 입니다. 저자는 Kaist대학의 Dongyoon Han님입니다. 한국 대학교가 등장하니 가슴이 벅차 오르네요..!!
일반적으로 CNN 모델은 pooling layer에서 memory 사용을 감소하고 고차원의 특징을 추출하기 위한 down-sampling 연산을 수행하고, filter 수를 급격히 증가시킵니다. 이는 고차원 정보의 다양성을 증가시키기 때문에 모델의 성능을 향상시킵니다. PyramidNet은 down-sampling을 수행할 때, filter 수를 급격히 증가시키는 대신에, 가능한한 모든 위치에서 점진적으로 filter수를 증가시킵니다. 그리고 이 방법은 모델의 일반화 성능을 증가시킵니다. 또한 ResNet 구조에 적용했을 때, 성능을 향상시키는 새로운 residual unit을 제안합니다. 최종적으로 제안된 Pyramid Net은 ResNet의 성능을 뛰어 넘습니다.
PyramidNet
PyramidNet은 ResNet 기반으로 성능을 향상시킨 모델입니다. 둘의 차이점은 pooling layer에서 feature map의 filter 수를 증가시키는 대신에, Pyramid Net은 모든 layer에서 filter수를 증가시킵니다. 그래고 새로운 residual unit을 적용합니다.
1. Original ResNet
기존 ResNet에서 feature map의 filter 수를 나타내는 수식입니다.
$D_k$는 k번째 residual unit의 feature map의 차원(=filter 수)을 의미합니다. n(k)는 k번째 residual unit이 속해있는 그룹입니다. 해당 그룹은 동일한 피쳐맵 크기를 갖습니다. 예를 들어, n(k)=1은 첫 번째 그룹을 의미합니다. 여기에는 단 하나의 conv layer만을 포함합니다. 3차원의 입력 이미지를 받아 16차원의 feature map을 생성합니다. 그리고 residual unit을 거칠 때마다, feature map의 크기는 감소하고 차원 수는 2배로 증가합니다.
2. Additive PyramidNet and Multiplicative PyramidNet
PyramidNet은 어떻게 feature map의 차원수를 증가시키냐에 따라 두 가지로 나뉩니다.
(a) additive PyramidNet
additive PyramidNet은 feature map의 차원 수가 선형하게 증가합니다.
N은 residual unit 전체 수를 나타냅니다. a는 widening factor 입니다. k가 1씩 증가할 때 마다 a/N만큼 차원 수가 증가합니다. N이 4일때, 최종 feature map 차원 수는 16 + (n-1)a/3 이 됩니다.
ImageNet과 CIFAR dataset 둘 다 additive PyramidNet이 multiplicative Pyramid보다 성능이 더 좋았습니다.
(b) multiplicative PyramidNet
multiplicative PyramidNet은 feature map 차원수가 기하학적으로 증가합니다.
3. PyramidNet architecture
PyramidNet의 구조입니다. WRN과 비슷하네요. widening factor인 a로 feature map의 차원 수를 조절합니다.
4. Building Block
residual block은 다양하게 구성할 수 있습니다. PyramidNet은 다양한 residual block을 실험하고 가장 성능이 좋은 (d)를 사용합니다.
input 크기와 output 크기가 다르면 residual block을 이용할 수 없습니다. 둘의 크기를 맞추기 위해 zero-padded identity-mapping shortcut을 사용합니다. 저자는 zero-padded identity-mapping shortcut이 residual net + plain net을 혼합하는 효과가 있다고 추측합니다. 흥미롭네요ㅎㅎ 아래에 관련 내용을 요약해놨습니다.
논문에서 다양한 residual block 으로 실험 합니다. 실험 결과를 요약해봤습니다.
(1) residual unit에서 addition 이후 ReLU를 적용하면 성능저하가 발생합니다. ReLU는 negative 값을 0으로 만듭니다. 따라서 short connection은 항상 non-negative 값만 다음 계층으로 전달합니다. ReLU를 residual block 내로 옮겨서 문제를 해결합니다.
(2) residual block에서 많은 수의 ReLU는 오히려 성능을 저하시킵니다. 첫 번째 ReLU를 제거하는 것을 추천합니다. 그리고 conv 사이에만 relu를 추가하는 것이 성능이 제일 좋았습니다.
(3) BN은 빠른 수렴을 위해 값을 정규화하여 활성화함수로 전달합니다. 이 BN은 residual unit의 성능을 향상시키는데에 사용할 수 있습니다. residual block의 마지막에 BN을 배치하면 성능이 향상됩니다. 놀랍네요...
Performance Evaluation
1. CIFAR-100 dataset
2. ImageNet
흥미로운 내용
논문에서 흥미로운 내용을 모아봤습니다ㅎㅎ
1. ResNet은 얇은 신경망의 앙상블로 생각할 수 있습니다. residual block을 제거했을 때 적은 성능 저하가 발생했지만, VGGnet에서 layer를 제거했을 때는 성능 저하가 큽니다. 이를 통해서 ResNet은 얇은 신경망의 앙상블로 생각해볼 수 있다고 합니다.
2. down-sampling 연산을 하는 layer를 제거하면 성능 저하가 크게 발생합니다.
3. identity-mapping shortcut은 parameter를 갖고 있지 않기 때문에 overfitting 발생 가능성을 감소합니다. 따라서 identity-mapping이 효과가 좋다네요. Pre-activation ResNet과는 다른 관점으로 identity-mapping이 좋다는 것을 설명합니다.
4. zero-padded shortcut은 residual network와 plain network를 혼합한 효과를 나타낸다고 추측합니다.
참고자료