이 논문을 한마디로 설명하자면 CNN에서 convolution filter를 키워서 large receptive filed를 잘 설계하는 논문입니다.
1. 왜 ViT의 성능이 좋았나?
최근 ViTs를 CNN으로 대체할 수 있다는 논문들이 많이 나오고 있습니다. 이전에 ViT가 성능이 좋게 나온대는 multihead self-attention이 중요한 역할을 했는데요, 이것은 flexible, capable(less inductive bias), more robust to distortions, long-range dependecies를 잘 모델링한다는 장점을 가지고 있었습니다.
조금 더 설명하자면 Multihead self-attention은 각 패치 간의 연산을 통해 large region에 대한 infomation을 가집니다.
반면에 CNN은 작은 convolution kernel을 쌓는 방식으로 발전해왔고, VGG 이후부터는 이렇게 하는 것이 대중적으로 바뀌었습니다. 여기서 kernel이 작기 때문에 당연히 receptive field가 작을 수 밖에 없겠죠?
그래서 큰 커널을 사용하여 ViT, CNN의 갭을 줄여보고자 이 논문에서 RepLKNet을 제안했습니다. 이것은 CNN으로만 구성되어 있고, 31x31의 kernel사이즈를 가집니다.
Vit의 특징 : global
- self attention은 패치간의 연산이기 때문에 spacial 연산
- MLP는 하나의 패치 안에서의 channel별로의 연산
- 이런 특징들을 따라해서 MLP-Mixer같은 것이 나옴
Vit와 다르게 Swin transformer는 local
- Swin transformer은 결국 CNN의 conv가 local하게, attention도 local하게
global : vit, MLP-Mixer, Conv-Mixer
local : Swin, RepLKNet
Self Attention : shares the weight across the channel, dynamic weights(Q와 K 내적의 결과), ViT, Swin
Depthwise Conv : shares the weights across the spatial positions, static weights, ConvMixer, RepLKNet
3. CNN의 추세
- 퍼포먼스를 키우기 위해 모델을 scale up 할 때, depth, width, input resolution, bottleneck ratio, group width를 고려
- kernel size는 주로 무시
- RepVGG : Structural reparametrization, 각 필터를 더함
4. 논문에서 말하는 가이드 5가지
4-1. Depthwise convolution은 efficient하다
- mobilenet은 처음에 depthwise convolution 제시
- 커널이 커져도 depthwise conv를 사용하면 computation이 적게 늘어난다.
- depthwise convolution은 gpu에 적합하지 않다. edge tpu에서는 depthwise를 다 지운다
- DW 3x3은 9번 slide되고 나면 reuse를 안함
- reusability 줄어듬, 성능 떨어짐
- memory access cost 대비 computation이 떨어짐
- DW 30x30을 사용해서 재활용 100배함
- computation density
- 커널사이즈가 커지면, latency가 생각보다 그렇게 증가하지 않음
- 큰 커널이 파이토치에서 최적화가 안돼서 직접 cuda kernel을 optyimize해서 release
4-2. identity shortcut 중요한 역할
- shortcut이 있어야 큰 kernel에서 성능이 좋다
- shortcut은 local detail을 캡처
- 다양한 receptive field를 갖는 모델들의 앙상블로 볼 수 있다.
- 학습도 당연히 gradient가 direct로 내려와서 잘 된다.
4-3. structural reparametrization은 optimize를 돕는다.
- 학습할 때 가지고 있다가 사용할 때 합치는 것
- ViT는 small dataset에 약한데 convolution prior를 추가함으로써 이를 개선(3x3DW를 self attention 전에 넣기)
- kernel 사이즈 커지면, translation equivariance, local prior가 줄어들기 때문에 이것을 일부로 도입
- 그렇게 하면 small dataset에서도 generality loss 없이 잘 optimize
- ViT랑 마찬가지로 추가 데이터를 썼을 때 reparametrization 생략해도 됨.
- 따라서 데이터 적을 때 도움되고, local feature를 잘 뽑는다.
4-4. Large convolution은 down stream tasks를 boost한다.
- large kernel이 좋다
- effective receptive field(ERF)를 키움
- 특히 contextual information을 이해해야하는 데 ERF를 키워서 이해를 돕는다.
- shape bias를 키움(texture bias보다 , 사람처럼)
- ViT : shape bias가짐, CNN : texture bias
- CNN에서도 large kernel로 shape bias
5. 작은 feature map(7x7)에서 큰 kernel(13x13) 의미?
- 도움됨.
- translation equivariance 줄임
- ViT와 비슷한 효과, 각 포지션마다 곱해지는 weight가 다르기 때문에 더 큰 capacity 가진다.
- 2D relative positional embedding 효과, padding도 들어가기 때문에 absolute position 효과
- scale
- hyperparam 조절은 block 개수, channel 개수, channel 사이즈
- 모델 scale은 channel을 조절해서 할 수 있음, inverted bottleneck으로 채널을 중간에 1.5배 키움
- conclusion
- large kernel CNN은 large ERF, optimize 잘 됨
- 작은 거 쌓으면 안되는 이유
- ERF는 kernel size에 비례, layer 개수의 루트에 반비례
- depth가 증가하면 수렴이 잘 안됨
- resnet은 극복한 것 처럼 보이지만, 실제론 shallow한 network의 앙상블(실제론 ERF는 제한됨)
- shape bias는 ViT > CNN
- ERP의 영향을 받는 것 같다
- kernel 사이즈를 줄이니까 bias가 줄어든다
- ViT의 self attention이 global feature를 뽑기 때문에 shape bias가 생긴다
- dilated convolution으로 RF를 늘리면?
- representation capacity 떨어진다.
- 사이즈가 커지면, swin transform보다 성능 떨어진다.
- 최종 결론
- large kernels → ERF↑, 성능↑, downstream↑, scale up
- ERF에 관심을 가져야함
- Large covolution이 Multihead self-attention을 대신 할 수 있다.
- 이 연구가 self-attention 이해 도움
- RepLKNet은 큰 커널로 넓은 receptive field를 포착해서 ViT의 global한 성질을 이용할 수 있다.
- kernel 사이즈를 무시해왔지만 kernel사이즈가 중요하고 ERF에 관심을 가져야함
- depthwise convolution은 효율적이다(?)
- ViT와 같이 shape bias가 생겨서 더 잘 된다.