요새 비전분야에서도 transformer가 많이 활용되고 있어서 관련 논문들을 읽어보는데 의문인 부분들이 있어서 정리겸 블로그에 글을 써본다.
transformer의 encoder는 MHSA(multihead self-attention)만 사용하고, decoder는 MHSA, MHA 둘 다 사용한다. 그럼 여기에서 MHSA과 MHA의 차이가 뭔지 의문이 생긴다.
MHSA은 입력정보 주체가 하나다. 이 하나의 정보를 가지고 비교분석을 시행하는게 MHSA의 역할이고 곧 encoder의 역할이다.
예를 들어 CNN을 거치고 나온 feature vector정보가 transformer encoder 에 들어가면 MHSA는 입력받은 feature vector들만 가지고 비교분석을 시행한다.
MHA은 입력정보 주체가 두개다. 하나는 encoder로 부터 분석되고 나온 embedding이고 또 다른 하나는 decoder에 새로 입력되는 정보가 된다.
위 그림에서보면 오른쪽 아래에서 들어가는 정보가 decoder에 새로 입력되는 정보를 말한것이다.
이 때 MHA은 decoder에 새로 들어가는 정보와 encoder output embedding을 서로 pairwise비교분석 한다.
이 때 query는 decoder에 들어가는 정보가 되고, key와 value는 encoder output이 되는데 이는 이렇게 해석할 수 있다.
query는 영향을 받는 entity 이다. 따라서 decoder에 입력되는 정보가 encoder output 요소들과 하나하나 비교했을 때 각각으로 부터 어떤 영향을 받는지, 얼마나 관련이 있는지를 계산하게 된다.
key 는 영향을 주는 entity이다. decoder에 입력되는 정보에게 어떤 영향을 주는지, 얼마나 관련이 있는지를 계산하는데 사용하게 된다.
따라서 decoder가 어떤 역할을 하는지는 아래의 그림을 통해 설명하도록 하겠다.
위 그림은 DETR이라는 논문의 architecture인데 decoder에 object queries와 encoder output이 들어간다.
object queries들끼리의 유사도를 MHSA끼리 분석하고 그렇게 분석된 object queries가 encoder output과 얼마나 관련이 있는지를 따지게 된다. 이 논문에서 encoder 입력은 CNN의 7X7 feature map을 flatten 하여 49개의 feature vector로 입력했다. 즉 정리하자면 각각의 object query들은 49개의 image feature vector와 얼마나 관련이 있는지를 따지게 된다. 그 결과 해당 image feature vector안에 object가 있으면 유사도가 높게 나올것이고, image feature vector안에 object가 없다면 유사도가 낮게 나타날 것이다.
'연구' 카테고리의 다른 글
[ubuntu 명령어] 내가 보려고 정리하는 linux명령어 : vi (0) | 2021.03.25 |
---|---|
[이메일] 연구원으로써 해외연구원에게 메일로 연구관련 질문 보낼 때 (0) | 2021.03.10 |
[디버깅] 아무리 힘들어도 잊지 말아야 할 것 (0) | 2020.11.13 |
[개념정리] orthogonal 하다는 것의 의미? (0) | 2020.10.26 |