ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 6강 Attention
    과외 수업 자료/인공지능 기초 2023. 7. 25. 15:08

    Attention 은 현재 NLP, Computer Vision 등 다양한 task에서 많이 채택되어 사용되고 있다.

    Attention 이 무엇인지에 대해서 간단하게 알아보도록 하자.

     

    < Attention ? >

    NLP: 집중할 단어를 결정하는 방식

    Computer Vision: 인간의 visual attention 현상을 구현하는 신경망 기법

     

    즉, 문장이나 이미지에서 우리가 설계한 모델이 더 중요한 부분을 집중적으로 볼 수 있도록 하는 방법이다.

    출처: Attention Mechanism (floydhub.com)

    < Attention in NLP >

    현재 우리가 vision task에서 사용하고 있는 attention 기법이 처음 사용되었던 분야는 NLP 분야이다.

    위 그림은 NLP 에서의 seq2 seq이다.

    Encoder에서 각각의 단어들이 embedding 되어 LSTM에 input으로 사용되고 최종적으로 Context Vector를 얻게 된다.

    그 후 context vector는 decoder의 input으로 사용되어 각 단어들에 해당되는 다른 언어로 translate 됨을 확인할 수 있다.

    위와 같은 방식의 학습은 length 가 짧은 문장에서는 쉽게 번역을 하며 강력한 성능을 보인다. 그러나 문장의 length 가 길어지게 되면 문제가 발생한다.

     

    발생하는 문제들로는 크게 세 가지가 있다.

    1. Long term dependency

    2. Vanishing gradient

    3. Limitation of fixed context vector

    이와 같은 문제를 해결하기 위해서 제안된 것이 attention이다.

    출처: [DL] Attention 파헤치기 - Seq2Seq부터 Transformer까지 (1) (tistory.com)

    Decoder 가 특정 시점의 단어를 출력할 때 encoder의 정보 중 연관성이 있는 부분에 주목하여 adaptive context vector를 만든다. 은닉 상태의 값을 통해 encoder에서 attention을 계산한 후, decoder 의 각 step 마다 계산된 attention 을 입력으로 넣어주어 특정 단어를 강조해 준다.

    < Attention in Computer Vision >

    특정 부분을 강조해 주는 attention 은 computer vision에서도 유용하게 쓰인다.

    출처: 그냥 식탁에 두던 약, 제형별 보관법이 따로 있다 < 생활건강 < 기사본문 - 캔서앤서(cancer answer)

    위 사진을 예를 들어 생각해 보자.

    해당 사진의 label이 약이라고 한다면 우리는 사진을 약이라고 구별하기 위해서 손이 아닌 약으로 시선이 집중되게 될 것이다. 이와 같은 사람의 시선을 neural network로 구현하고자 하는 것이 computer vision에서의 attention이다.

    Attention을 통해 중요한 feature 에는 집중하고, 중요하지 않은 feature는 억제시켜 준다.

    즉, 이미지에서 어디에 집중해야 하는지를 model에게 알려주는 용도로 사용되는 것이다.

     

    이제 computer vision에서 많이 사용되는 attention mechanism에 대해서 간략하게 알아보도록 하자.

    < Channel Attention >

    Channel attention 이란 pooling을 통해 spatial 정보를 제거한 channel 정보만 남은 feature에서 중요한 channel에 attention을 주는 방식이다. 즉 우리가 convolution 을 통해 얻은 feature map 중 어느 channel 에 attention 을 주어야 하는가? 를 찾는다고 생각하면 편할 것 같다.

    위 그림에서의 channel attention module 은 CBAM에서 제안된 방법이다.

    C x H x W의 feature map F를 max pooling과 average pooling 을통해 C x 1 x 1의 형태로 바꾸어 준다.

    이렇게 얻은 각각의 feature map 들은 shared MLP를 통과한 후 sum 해준다.

    그 후 sigmoid를 적용하여 최종적인 channel attention map을 얻게 된다.

    이를 수식으로 표현하면 아래와 같다.

    cbam에서의 channel attention 수식

    CBAM에서 사용된 channel attention 방식을 소개하였지만 channel을 진행하는 방식은 더 다양하다.

    CBAM 에서의 channel attention code (pytorch)

    < Spatial Attention >

    Spatial Attention 은 channel attention 과는 반대로 channel 정보가 아닌 spatial 정보에 집중하는 방법이다.

    feature map에서 어느 위치에 중요한 정보가 있는지에 집중하도록 한다.

    위 spatial attention module 역시 cbam에서 제안된 module이다.

    C x H x W의 feature map F를 max pooling과 average pooling을 통해 1 x H x W로 형태로 바꾸어 준다.

    그 후 해당 feature map을 7 x 7 convolution layer의 input으로 사용한 뒤 sigmoid를 적용하여 최종 spatial attention map을 얻는다.

    이를 수식으로 표현하면 아래와 같다.

    Spatial attention 역시 cbam에서 제안한 moudel 말고도 다양한 방법이 존재한다.

    CBAM 에서의 spatial attention code (pytorch)

    < Self Attention >

    Self attention 은 transformer의 등장과 함께 최근 가장 많이 사용되고 있는 attention 기법이다.

    기존의 CNN 은 inductive bias 가 존재한다.

    Inductive bias 란 새로운 데이터에 대해 좋은 성능을 내기 위해 model에 사전적으로 주어지는 가정을 의미한다.

    CNN에서의 inductive bias를 locality와 translation invariance이다.

    Locality 연산을 할 때, 이미지 전체에서 convolution filter 가 이미지의 특정 영역만 보고 특징을 추출할 수 있다는 가정
    Translation invariance Input 과 동일하게 계속해서 관계가 유지된다는 가정

    이러한 inductive bias는 CNN 이 vision task에서 좋은 성능을 가질 수 있음에 많은 기여를 하였다.

    그러나 global pattern을 학습하기 어렵다는 문제점이 존재한다.

    위와 같은 문제점을 개선하기 위해서 vision transformer 가 제안되었다.

    ViT는 attention 구조만을 사용하며 데이터 전체를 보고 attention 할 위치를 정하는 메커니즘이다.

    그렇기 때문에 global pattern을 학습하기 어렵다는 CNN의 문제점을 개선할 수 있었지만 CNN 보다 많은 데이터를 필요로 하며 불충분한 데이터양으로 학습을 하게 되는 경우 CNN보다 일반화 성능이 떨어진다는 문제점을 가지고 있다.

     

    ViT에서 핵심인 self-attention 은 query와 유사한 값을 가지는 key를 찾아서 그 값 value를 얻는 과정이다.

    출처: [ViT] Vision Transformer란? (tistory.com)

    self-attention의 수식은 아래와 같다.

    SELF-ATTENTION DOES NOT NEED O(n^2) MEMORY, single query self attention

    Single query의 경우 attention의 결과로 value vector의 weighted sum을 얻는다. 이때 weight는 query와 key의 내적의 softmax값이다.

    이때 q는 sequence data의 각 위치에 대해서 별도로 나오게 되므로 각 q에서 해당 수식을 반복하게 된다.

    self attention code (pytorch)

    < Cross Attention >

    Cross attention 은 self attention과 매우 유사하지만 query, key, value에서의 차이점이 존재한다.

    self-attention에서는 query, key, value 로 모두 값은 값을 사용한다. (query == key == value)

    cross attention 에서는 key, value의 값은 같은 값을 사용하지만 query는 다른 값을 사용한다. (query!= key == vlaue)

    Slide 1 (sogang.ac.kr)

    cross attention의 경우 Multi scale 또는 multi modal 등과 같이 fusion 하는 연구에서 주로 사용된다고 한다.

    input의 출처가 다르다는 것 외에는 self-attention mechanism과 동일하다.

    key, value 값을 통해 어떻게 attention을 해줄지를 설정하게 되는데 이에 따라 특정 inductive bias를 가해줄 수 있다.

    Slide 1 (sogang.ac.kr)
    CrossViT: Cross-Attention Multi-Scale Vision Transformer for Image Classification (thecvf.com)


    이번에는 attention에 대해서 간단히 알아보았다.

    이외에도 다양한 attention 방법들이 있어 task에 더 알맞고 효율적으로 작동하는 방법을 선택하여 사용하면 모델의 성능에 많은 기여를 하게 될 것이라 생각한다.

    특히 self-attention 은 transformer 기반의 모델들에 핵심이므로 확실하게 공부를 하고 이해하는 것이 중요할 것 같다.

Designed by Tistory.