gusdlf93 / Paper_Survey

4 stars 1 forks source link

[2021 ICCV Spotlight] LAMBDANETWORKS: MODELING LONG-RANGE INTERACTIONS WITHOUT ATTENTION #3

Open gusdlf93 opened 2 years ago

gusdlf93 commented 2 years ago

람다 넷은 트랜스포머와 유사하게, 정해진 필터를 사용하는 것이 아니라, 학습과정에서 필터를 만드는 것이 목적입니다.

image

우선 람다라는 개념은 self-attention의 frame work을 대체하기 위해서 만들어졌다고 주장하고 있습니다. 람다 네트워크는 간단하게 보면 convolution + Self attention으로 이뤄진 네트워크입니다.

기존의 Convolution은 필터라는 정해진 크기의 trainable parameter로 학습을 진행했는데, 람다 네트워크에서는 filter를 만드는 과정에서 "정해진 크기"라는 사람의 inductive bias를 제거하면서도 좋은 성능을 내기 위해서 position lambda와 Content lambda를 추가합니다.

아래 그림은 Lambda Net 구현 코드입니다. *람다 네트워크를 구현한 깃허브들 중에서 가장 스타가 많은 lucidrains 님의 코드를 기반으로 설명을 드릴 꺼라 논문이랑 완벽히 같은지는 잘 모르겠습니다.

image

position lambda는 두 가지 방법으로 구현을 할 수 있는데

  1. 연산량을 줄인 버전 이미지 크기의 거의 절반 정도 되는 커다란 크기의 Convolution Filter를 사용해서 Convolution Filter 내부에서 Depthwise Convolution을 진행합니다.

  2. 연산량을 많이 쓰는 버전 각 채널별로 이미지 크기에 2배(x축, y축)에 달하는 Trainable Parameter를 추가하는데, 필터 같은 개념을 적용하지 않고서, 단순히 학습가능한 파라미터를 추가함으로써 학습하도록 합니다. -> Attention을 대체했다고 주장하는 부분으로 보입니다. matrix multiplication에서 similarity를 구하지 말고, 그냥 weight로 찍어누르면 되지 않느냐? 라는 의미로 들립니다. 그리고 이렇게 학습을 하면 적은 데이터에서 과연 학습이 가능한 것인가? 에 대해서는 애매한거 같습니다.

그리고 이 과정에서 각 Trainable Parameter는 position 정보를 추가해줍니다.

1번은 연산량을 줄이기 위해서 일반적인 CNN의 Convolution Filter를 사용하였습니다. 2번은 Trainable Parameter가 스스로 학습에 필요한 정보들을, 상관관계들을 학습하길 바라는 것으로 보입니다.

content lambda는 se net과 거의 유사한데, Feature map들끼리 내적을 통해서 Channel 정보만을 남기고, 이렇게 남겨진 것을 Content Lambda라고 부르며, Position Lambda와 더해주는 용도입니다.

개인적인 생각으로는, content lambda는 거의 의미가 없다고 생각을 했습니다. 아무리봐도 squeeze and excitation의 하위 개념으로써 보여지고, 차라리 se를 position lambda 뒤에 residual로 붙이는게 더 좋지 않았을까 생각이 됬습니다.

아니나 다를까, 해당 부분은 Table 9를 참고하시면 알 수 있겠지만 Content lambda는 성능에 0.3%의 영향밖에 주지 않습니다.

개인 적인 생각 : convolution + attention을 position lambda를 통해서 구현을 하는데, 학습 가능한 파라미터들로 filter를 구성하고 위치 정보를 더한게 전부가 아닌가 생각이 됩니다.

전체 코드에서 shape이 변하는 형태를 보시면 이해가 좀 편하실 거 같습니다. 내적이 이뤄지는 부분들을 우측으로 정렬하였기 때문에, 실제 변수의 위치와 주석은 다를 수 있습니다. 구현 방법이 바뀜으로써, 연산량을 상당량 줄였다고 주장하는데, 어떻게 줄였는지는 잘 모르겠습니다.