[ICLR 2022] Learning strides in convolutional neural networks

안녕하세요, 서른네 번째 X-Review입니다. 이번 논문은 2022년도 ICLR에 게재된 Learning strides in convolutional neural networks입니다. 바로 시작하도록 하겠습니다. 👽

1. Introduction

CNN은 이미지 분류, 오디오 패턴 인식, 텍스트 분류, 음성 인식 등 여러 task에서 적용되어 왔습니다. convolution layer는 resolution을 유지하면서 입력 feature를 high-level의 표현으로 변환할 수 있습니다. 하지만, 많은 task에서는 low-level high-resolution 정보(픽셀, waveform 같은)를 통해 여러 downsampling 과정을 거쳐 관련 없는 정보를 버리면서 최종적으로 high-level low-resolution 정보를 추출해냅니다. 이 때 pooling layer와 strided convolution과 점진적으로 input의 resolution을 줄이게 되는데요, 이 과정에는 3가지의 이점이 있습니다. 1) 먼저, feature가 task와 관련된 정보에만 집중하도록 만들어줍니다. 다시 말해 resolution이 줄게 되니 좀 더 focus할 수 있다는 의미로 중요한 feature에 집중하도록 한다는 것입니다. 2) low-pass filter와 같이 pooling layer는 shift invariance를 개선합니다. 즉, input이 조금 변화더라도 안정적인 output을 내도록 도와주는 역할을 합니다. 3) 줄어든 resolution은 FLOPs를 줄여주고 receptive field를 넓혀줍니다. 그럼 모델이 더 넓은 context를 고려해 task를 수행할 수 있겠죠.

Pooling layer는 일반적으로 두가지 단계로 분해될 수 있습니다. (1) 전체 input에 대해 densely하게 local 통계를 계산 (2) 이 통계를 정수 striding factor로 sub-sampling한다. 말을 좀 어렵게 했지만 일반적인 pooling 예를 들어 max pooling을 생각해본다면, local한 feature 영역 내의 값들 중 가장 max 값을 뽑는다는 과정을 저런 단어로 서술한 것입니다.

이전 연구들은 대부분 (1)을 개선하는데 집중해왔는데요, 정수 stride를 사용하면 resolution이 너무 빠르게 준다는 사실((2,2) striding은 75%를 감소시킴! )을 알고난 후로는 분수 stride를 사용하는 fractional max-pooling이 등장하였습니다. 유사하게 spectral pooling이라는 것도 제안되었는데 이건 input을 fourier domain에서 crop하는 방식이며, 이를 통해 low-frequency를 강조하면서 분수 stride로 downsampling하였습니다. 이 spectral pooling에 대해서는 아래 method 부문에서 자세히 설명하도록 하겠습니다.

이렇게 분수 stride를 사용하는 것은 정수 stride를 사용하는 것보다 downsampling layer를 디자인할 때보다 더 flexible하지만, 이미 search space가 엄청 컸었는데 이걸 더 키우게 됩니다. 다시 말해 최적의 하이퍼파라미터는 search space내에서 찾게 되는데 stride가 정수에서 분수로 바뀌게 되면 더 고려해야 할 search space가 커지가 된다는 의미입니다. 이렇게 stride를 학습 가능한 파라미터가 아니라 사전에 사람이 설정해야 하는 하이퍼파라미터라면 최적의 convolution architecture를 찾는 것이 어렵습니다. 꽤나 많은 실험을 거쳐야겠죠.

본 논문에서는 DiffStride라고 하는, network를 학습할 때 stride도 동시에 학습하는 downsampling layer입니다. 앞에서 잠깐 언급했던 spectral pooling에서 영감을 받아 frequency domain에서 crop하는 방식을 통해 downsampling합니다. 하지만, 이 spectral pooling은 미리 설정한 하이퍼파라미터 stride 값을 가지구 설정된 고정된 크기의 bbox를 crop하는 방식이었지만 본 논문에서 제안하는 DiffStride는 이 crop box 크기를 역전파를 통해 학습한다는 차이점이 존재합니다.

이 DiffStride를 ResNet18에 적용해본 결과 CIFAR, ImageNet 데이터셋에서 본 모델이 cross-validation를 통해 결정된 stride를 적용한 모델보다 성능이 가장 좋았다고 합니다. 이제 아래 method단에서 DiffStride에 대해 보다 자세히 알아보도록 하겠습니다.

2. Methods

먼저, spatial pooling, spectral pooling에 대한 배경지식에 대해 살펴도로록 하겠습니다.

2.1 Notations

x ∈ R^{H \times W}일 때 Discrete Fourier Transform (DFT) y = F(x)C^{H \times W}는 fixed된 basis filter집합에 의해 얻어집니다.

DFT 변환은 linear하며 inverse DFT는 conjugate(켤레)로 얻어집니다. 실수 값 신호 x의 푸리에 변환은 Hermitian-symmetry하므로, width 차원에 대한 양의 반 주파수로부터 신호x를 재구성할 수 있으며, 음의 주파수는 생략할 수 있습니다.

음 다시 말해 Hermitian-symmetry하다는 것은 복소수 함수의 대칭성을 의미하는데요 예를 들어 H(-jw) = H*(jw) / H(jw) = H*(-jw) 라는 것입니다. (DFT의 도함수는 inverse DFT / inverse DFT의 도함수는 DFT) time domain에 대한 푸리에 변환은 frequency 영역의 복소수 함수 형태가 되는데 이 주파수 영역의 복소수 함수는 반드시 헤르미트 대칭성을 갖게 됩니다. 결국 헤르미트 대칭성을 갖는 함수의 푸리에 변환은 실수 함수가 된다는 것이겠죠.

즉, 푸리에 표현 y를 입력으로 받는 loss L : C^{H \times W} → R 를 고려했을 때 x에 대한 loss의 기울기는 inverse DFT를 통해 구할 수 있습니다. 식으로 표현하면 아래와 같습니다.

앞으로 나오는 notation은 다음과 같습니다.

  • ㅇ : 두 텐서 사이의 element-wise product
  • L : total num of convolutional layer (각 layer는 l로 indexing)
  • [.]는 floor operation, ⊗는 두 벡터 사이의 outer product.
  • S는 stride parameters, sg는 stop gradient

2.2 Downsampling in convolutional neural networks

CNN에서 downsampling하는 기본 메카니즘에는 strided convolution이 있으며 혹은 average, max pooling과 같은 풀링 연산이 있죠. 이 두 strided convolution과 pooling을 통한 downsampling은 입력의 global 구조로부터 이점을 얻지 못하고 중요한 정보를 버릴 수 있습니다. 또, 정수 stride를 사용하기 대문에 stride가 (2, 2)인 2D convolution은 입력 차원이 75%감소하는 것과 같이 해상도가 급격히 감소한다는 단점이 있습니다. 또, stride 조함수가 downsampling layer 수에 따라 기하급수적으로 증가하면서 최적의 stride를 탐색하기 어렵습니다.

2.3 Spectral pooling

이제 2015년에 제안된 spectral pooling에 대해 살펴보도록 하겠습니다. 이 spectral pooling은 본 논문의 저자가 영감을 받은 pooling 연산입니다. 자연 신호 에너지는 일반적으로 주파수 영역에 균일하게 분포되어 있지 않고 대부분 low-frequency에 집중되어 있습니다. spectral pooling은 이런 점을 고려하여 spatial pooling의 정보 손실을 줄이는 동시에 정수가 아닌 분수 downsizing factor를 사용할 수 있습니다. 또 spatial/temporal convets의 단점으로 알려진 aliasing 없이 low-frequency를 보존할 수 있다고 합니다. aliasing은 간단히 말해 고주파 성분을 저주파로 변환할 때 발생하는 현상으로 이전 신호에는 나타나지 않은 성분이 생기는, 즉 신호의 왜곡이 되는 현상으로 보면 되겠습니다. 정리하자면, aliasing 없이 low-frequency를 보존할 수 있다는 의미는 기본적으로 고주파 신호를 낮은 주파수로 다운샘플링할 때 발생하는 신호 왜곡 현상을 방지할 수 있다는 것을 의미합니다.

input x ∈ R^{H \times W}과 stride S = (S_h, S_w)를 고려하는데, 먼저 DFT는 y=F(x)∈ C^{H \times W}로 계산되고, 단순화를 위해 이 행렬 중심이 0(zero) 주파수인 DC 성분(신호의 평균값)이라고 가정합니다. 즉, DFT(이산 푸리에 변환)을 통해 입력 x를 주파수 영역으로 변환하면 output으로 H x W크기의 복소수 행렬이 나오게 되고, 그 행렬의 중심 (H/2, W/2) 는 신호의 평균이라고 가정하는 것입니다.

그 다음 크기가 [latex]H / S_h [/latex] x [latex]W / S_w [/latex]인 bbox를 사용해서 이 output 행렬의 중심을 crop해내어 \tilde{y}C^{[H/S_h] \times [W / S_w]}를 생성해냅니다. 마지막으로 이 output은 inverse DFT를 통해서 다시 spatial domain으로 변환시킵니다. 식으로는 \tilde{x} = F ^{-1}(\tilde{y})R^{[H/S_h] \times [W / S_w]}가 되겠죠. !

실제로 입력 x는 H x W x C shape같이 multi channel을 가지며 이때 모든 채널에 동일한 crop이 적용됩니다. 또 이 x는 앞에서 잠깐 언급했던 Hermitian symmetry 덕분에 DFT 계수의 양의 실수만 계산되기 때문에 연산과 메모리를 절약되며, 일반적인 spatial pooling은 정수 stride값이 필요한 것과 달리 spectral pooling은 오직 output만 정수값으로 해주면 되기 때문에 더 세밀한 downsampling을 할 수 있습니다. 또, spectral pooling은 전체 입력에 대해 low-pass filter역할을 해서 low-frequency 즉, 일반적으로 관련이 높은 좋은 정보만 유지하고 aliasing을 방지한다는 장점이 있지만, spatial pooling과 유사하게 spectral pooling은 hyperparameter S(stride값)를 세팅해야 한다는 단점이 여전히 존재합니다. 이 경우 search space가 stride가 정수값인 spatial pooling인 경우보다 몇배 몇십배는 더 커지게 되겠죠.

2.4 DiffStride

본 논문은 최적의 stride parameter를 찾는 것이 어렵다는 문제를 해결하기 위해 speactral pooling에서 역전파를 통해 stride를 학습할 수 있는 새로운 downsampling layer인 DiffStride를 제안합니다. x ∈ R^{H \times W}를 downsample하기 위해 DiffStride는 spectral pooling과 유사하게 fourier domain에서 crop을 수행합니다. 하지만, spectral pooling과 같이 고정된 크기의 bbox를 사용하는것이 아닌 역전파를 통해 box 크기를 학습하도록 하였습니다.

학습 가능한 box W는 input shape, smoothness factor R과 stride에 의해 파라미터화되며, 이 mask W는 width 축과 height 축을 따라 서로 다른 두 개의 1D masking 함수의 외적으로 설계됩니다. 이는 입력 데이터의 가로축과 세로축을 따라 각각 다른 가중치를 할당하여 box를 설계하기 위함이라고 생각하면 되며, 위 fit1의 우측 하단을 보시면 됩니다. 이런 1D mask는 nlp에서의 self-attention model에서 attention 범위를 학습하기 위해 도입된 adaptive attention span을 따른 것이라고 하며, spectral pooling과 동일하게 Hermitian symmetry으로 인해 양(+)의 주파수만 고려하고 주파수 0(zero)를 중심으로 mask를 미러링합니다. (0을 중심으로 미러링한다는 의미는 세로 방향의 mask를 만들 대 0을 중심으로 대칭되게 만든다는 것) 두 width, height mask는 아래와 같이 정의됩니다.

위 식에서 S = (S_h, S_w)는 stride고 R은 smoothness를 제어하는 하이퍼파라미터입니다. 저자는 두 1D mask사이의 외적을 통해 2D 미분가능한 mask W를 생성합니다.

이렇게 생성된 W는 두 가지 방식으로 사용되는데요, (1) low-pass filtering을 수행하는 element-wise product를 통해 입력에 fourier representation 적용 (2) mask가 0인 경우 fourier 계수를 crop

첫 번째 단계는 stride S에 대해서 미분이 가능하지만, 두 번째인 crop단계는 미분불가능하기 때문에 crop하기 전 mask에 stop gradient 연산을 적용합니다. 이렇게 하면 미분 가능한 연산인 low-pass filtering을 통해 stride로 gradient가 흐를 수 있지만, crop단계에는 gradient가 흐르지 않습니다. 마지막으로 spectral pooling과 동일하게 inverse DFT를 통해 spatial domain으로 다시 변환됩니다. 방금 설명드린 모든 단계는 argorithm 1을 통해서 다시 살펴볼 수 있으며, fit1에 도식화되어있습니다.

추가로 학습 중에는 stride S = (S_h, S_w)가 [1, H) x [1,W) 범위 안으로 유지되도록 하였습니다. 만약 입력이 multi-channel이라면 모든 채널에 대해 동일한 stride S를 학습하여 채널 간의 균일한 spatial 차원을 보장합니다.

spatial, spectral pooling에서는 일반적으로 stride가 spatial 축을 따라 묶이는 경향이 있었는데요 이를 DiffStride에서도 적용하여 하나의 학습 가능한 stride를 공유함으로써 구현할 수 있었습니다. 하지만 실험 결과, width 축 및 height 축에 대해 특정 stride를 학습하는 것이 더 유용했다고 합니다.

그리구 각 downsampling layer에 하이퍼파라미터 R(smoothness factor)를 추가하는 것은 stride를 하이퍼파라미터로 제거하려는 목표와 상충된 것이 아닌가 하는 의문이 들 수 있습니다. 저자는 따라서 모든 layer에 단일 R 값을 사용하도록 하였고 이 R의 영향이 크지 않다는 사실을 실험을 통해 발견하였습니다.

2.4.1 Residual block with DiffStride

l번째 layer의 output만 (l+1)번째 layer의 input으로 넣는 시스템과 달리 ResNet은 skip connection이 존재합니다.

ResNet은 (1) 입력 channel 차원과 spatial resolution을 유지하는 identity block과 (2) strided convolution으로 spatial resolution을 줄이면서 output channel 차원은 증가시키는 shortcut block이 존재합니다. (위 fig-(a) 참고) 본 논문에서는 이런 shortcut block의 strided convolution을 일반 바닐라 convolution으로 대체한 다음 DiffStride를 적용하였습니다. 또, main branch와 residual branch간의 DiffStride stride를 share하도록 하여 각각의 output이 동일한 spatial dimension을 가지도록 해 원래처럼 main branch output과 residual branch output끼리 sum할 수 있게 하였습니다. (그림 fig2-(b) 참고)

2.4.2 Regularizing computation and memory cost with DiffStride

이 섹션에서는 convolution layer의 computation cost와 memory usage가 관련있기 때문에 DiffStride 알고리즘을 통해 이런 복잡성을 조절하고 최적화하는 부분을 설명합니다.

일반적인 2D convolution의 computation은 input image의 shape에 따라 결정되죠. kernel size가 k^2이고 C’가 output channel일 때 computation cost는 k^2 \times C \times C’ \times H \times W이며 memory usage는 C’ \times H \times W입니다.

이런 계산 복잡도는 입려 크기의 선형 함수입니다. (입력 크기가 증가하면 계산 비용 및 메모리 사용량 선형적으로 증가)

DiffStride의 맥락에서 보자면 각 layer의 input shape은 이전 layer의 stride에 의해 결정됩니다. 따라서 stride를 조절함으로써 입력 크기를 제어할 수 있죠. 이런 접근 방식은 모델을 학습하면서 시간 및 공간적 효율성을 직접적으로 높일 수 있습니다. 그래서 저자는 regularization term을 추가함으로써 모델을 조정하도록 하였습니다. 본 학습 loss는 다음과 같습니다.

람다는 regularization 가중치입니다.

3. Experiments

3.1 Image Classification

Experimental setup

실험에서는 오디오와 이미지에 대한 classification task에 대해 DiffStride를 평가하고 있지만, 본 리뷰에서는 이미지에 대한 실험만 다루도록 하겠습니다.

실험에서는 비교를 위해 동일한 architecture를 유지하고 strided convolution을 바닐라 convolution으로 대체한 다음 DiffStride를 적용하였습니다.

실험에서는 ResNet18 architecture를 사용하였는데, ResNet18의 3개의 shortcut block에 대해 6개의 stride를 [1, 3] 범위에서 초기에 무작위로 sampling하였습니다. 기존 resnet18은 [2, 2, 2]의 stride 값을 갖고 있는데 이와 비교하도록 하기 위함입니다. 또 이렇게 무작위로 sampling함으로써 하이퍼파라미터에 대한 아키텍처의 민감성을 확인할 수 있고, DiffStride가 stride를 학습해 나가면서 잘못된 초기화 오류로부터 벗어날 수 있는지를 확인할 수 있겠습니다.

실험 데이터셋은 CIFAR10, 100, ImageNet에서 수행되었습니다.

Results

먼저 CIFAR데이터셋에 대한 실험 결과는 table 3에서 ImageNet에 대한 실험 결과는 table4에서확인할 수 있습니다.

Strided Convolution이 기존의 원본 resnet18 모델이며, spectral 이라고 명시되어 있는 것이 spectral pooling을 사용한 것이고 DiffStride가 본 논문에서 제안된 pooling 모듈을 사용한 ResNet18 모델입니다.

실험 결과를 보면 stride가 실제로 중요한 하이퍼파라미터임을 확인할 수 있는데요, table3의 CIFAR100데이터셋에서의 실험을 보면 일반 strided conv의 경우 최악의 init stride와 최상의 init stride 성능 결과과 꽤 많이 차이납니다. 이에 반해 spectral poolling은 stride가 fixed되어 있음에도 불구하고 잘못 초기화된 stride에 대해 robust한 결과를 보입니다. 하지만, DiffStride는 전반적으로 초기화 오류에 더 robust하며 CIFAR10, 100, ImageNet 데이터셋에서 일관되게 더 높은 정확도로 수렴함을 보입니다. 즉 초기화를 어떻게 하든간에 성능 편차가 작습니다.

Learning dynamics and equivalence classes

Fig3(a)는 stride의 초기화로 (2, 2, 2)를 사용한 베이스라인에 대해 epoch에 따른 stride 변화를 확인한 그래프입니다. 그래프를 보시면 모든 stride가 초기 stride에서 벗어나면서 빠르게 수렴하고 shallow layer(하늘 주황 선)에서는 더 많은 정보를 유지하도록 하고 deep layer(보라, 갈색 선)에서는 더 급격히 downsample하도록 하는 경향을 보입니다.

Fig3(b)는 다양한 초기화에 따른 stride의 분포를 보여주는데요, DiffStride를 사용한 경우 다양하게 초기화를 해도 비슷한 성능이 도출되는 결과를 table3, 4에서 확인했었습니다. 하지만 (b)의 결과를 보면 초기 stride에 따라 stride가 다양한 값을 갖는 다는 것을 볼 수 있습니다. 즉, 다양한 초기화가 비슷한 성능을 내지만 네트워크 구성 측면에서는 상당한 차이를 보인다고 결론낼 수 있겠습니다.

Regularizing the complexity

이제 마지막으로 regularizing에 따른 복잡도를 살펴보도록 하겠습니다. loss 식 6에서 regularization weight에 관한 하이퍼파라미터였던 람다의 값을 0.1에서 10 사이로 변화시키면서 학습해본 결과를 fig4에서 확인할 수 있습니다. (x축이 regularization term, y축이 정확도)

그림에서 빨간색 점은 random stride를 갖는 resnet18 모델이며, 파란색 점은 랜덤으로 stride를 초기화하고 (왜 기존 설정인 2, 2, 2로 안하고 랜덤으로 했는지는 모르겠네욤 😶) DiffStride를 적용한 모델입니다. 파란색 점들이 동일한 acc 선상에서 빨간색 점보다 더 왼쪽에 있는 것으로 보아 DiffStride가 동일한 혹은 그 이상의 성능을 유지하면서 더 낮은 computation cost를 갖는 것을 볼 수 있습니다.

Limitations

마지막으로 DiffStride의 한계점에 대해 서술하고 마무리하도록 하겠습니다. Spectral domain에서의 pooling이 strided convolution보다 computation cost가 높다는 한계점이 있다고 하는데요, 이는 DFT와 inverse DFT를 계산해내야 하기 때문에 발생한다고 합니다. 하지만 이런 비용을 완하하기 위해 Fourier domain에서 convolution channel에 대한 element-wise multiplication과 summation으로 대체할 수 있다고 합니다.

더불어, DenseNets에서는 DiffStride의 이점이 보이지 않았다고 합니다. 이에 대해서는 stride 범위를 [1, 3]으로 두고 sampling할 때 downsampling layer 수가 제한이 되어 있어서 stride 구성이 제한되기 때문이라고 추측하고 있습니다.

Author: 정 윤서

3 thoughts on “[ICLR 2022] Learning strides in convolutional neural networks

  1. 안녕하세요. 리뷰 잘 읽었습니다.
    본문에 적힌 DiffStride도 spectral pooling과 같이 정수가 아닌 분수 값을 가질 수 있나요?
    또 저자가 기존 네트워크에서 주로 쓰이지 않던 spectral pooling을 어떠한 Motivation으로 삼았는지 궁금합니다.
    감사합니다.

  2. 안녕하세요. 좋은 리뷰 감사합니다.

    저번 리뷰도 비슷하지만 이번 리뷰도 마찬가지로 하이퍼파라미터를 자동으로 찾아주는 느낌의 논문인 것 같네요. search space가 작아진다는 관점에서 나중에 유용하게 사용될 수 있는 방법론인 것 같습니다.

    간단히 궁금한 점이 있는데, Figure 3의 (b)의 결과를 보면 초기 stride에 따라 stride가 다양한 값을 갖는 다는 것을 볼 수 있다고 하셨는데, 저는 그러한 점이 잘 안보여서 더욱 이해하고자 질문 드립니다. (b) 그래프의 y축은 무엇을 의미하나요? 그리고 distribution of learned strides를 저는 각 strides의 구성값 distribution이라 이해했는데 이게 맞을까요?

    감사합니다.

  3. 안녕하세요, 정윤서 연구원님. 좋은 리뷰 감사합니다.
    stride를 분수로 쓸 수 있는 것과 stride를 학습한다는 개념, 모델 중간에 푸리에 변환-역변환을 하는것까지 진짜 평소에는 생각지도 못한 관점의 논문이네요. 재밌게 봤습니다.
    혹시 그럼 저자들이 논문에서 수많은 실험을 거쳐서 만들어낸 최적의 백본에 대해서도 언급을 하나요? 저자들이 제안한 방법론을 이용하여 최적의 성능을 내는 모델에 대한 언급이 있는지 궁금합니다.
    감사합니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다