Open eubinecto opened 4 years ago
먼저, self-attention이라는 개념이 등장하게된 배경을 생각해보자.
self-attention은, 주어진 입력에 "상황"을 부여하기 위해 사용하는 또 다른 encoder라고 볼 수 있다.
못생긴 그림 | 설명 |
---|---|
먼저, encoder-decoder 구조에서 encoder의 목적을 다시 한번 생각해보자. encoder는 주어진 입력 벡터에 어떠한 처리를 통해 "상황"이 담긴 벡터를 출력하는 것이 목표다. | |
예를 들어, 인코더로 RNN기반 모델을 사용하게 되면, t에서의 "상황"을 t=0에서부터 t=1까지에 대한 "기억"으로 인코딩을 할 수가 있다. | |
https://github.com/eubinecto/k4ji_ai/issues/39#issuecomment-699163305 | 처음 어텐션 메커니즘을 제안한 논문의 경우, 입력에 RNN(encoder)으로 상황을 부여하고 그 상황을 또 다른 RNN (decoder)이 "align"을 할때, 어텐션을 적용해보자고 제안한 것. |
self-attention은, encoder에 입력 벡터가 들어가기전, 입력 벡터와 입력 벡터 자신 사이의 어텐션을 구해서, encoder의 입력 자체에 "상황"을 인코딩하는 방법이다. |
transformer에서 self-attention은 정확히 그 용도로 쓰인다. 단지 encoder로 RNN 구조를 attention 메커니즘만으로 완전하게 대체했다는 것이 다른 것.
transformer architecture | transformer architecture- simplified |
---|---|
self-attention을 시각화 해보면, seq-seq(동일한) 유사한 정도를 나타내는 것이라고 self-attention을 이해할 수 있을 것 같다.
figure 5, pg. 15 |
---|
파라미터에 대한 이름을 짓기 위해서, Information Retrieval (검색) 에서의 Query, Key, Value의 개념에 대한 비유를 한 것 같다.
예를 들어, 데이터 베이스에
가 저장되어 있고, 사용자가 이 데이터 베이스만을 검색할 수 있는 검색엔진에서
해당 쿼리를 검색했다면 , 검색엔진은 어떤 것을 계산을 해야하는가? 우선적으로 동일한 query에 대하여, 각 key와 query사이의 유사도를 생각해보아야 한다.
즉,
이런 식으로 각각의 유사도를 먼저 구해야 사용자에게 어떤 정보를 먼저 보여주어야 할지 결정할 수 있다. (ranking을 할 수 있다).
만약 이런 ranking과 함께, 각 key들의 상대적 유사도를 파악하고 싶다면, 각 유사도 점수를 모든 유사도 점수에 대하여 정규화 하면 된다.
즉,
그렇다면 query에 대한 답은 어떻게 구해야 할까? 두가지 방법이 있다.
첫번째로는, 그냥 1등 문서를 보여주는 방식이 있고 :
두번째로는, 모든 key와의 상대적 유사도를 알고 있으므로, query에 대한 답을 모든 value의 weighted sum을 통해 보여줄 수 있다.
이 두번째 방법이, self-attention의 방법과 매우 유사한 방법이라고 볼 수 있겠다.
Rasa algorithm whiteboard - attention 2 | 설명 |
---|---|
단, IR analogy와 다른 점은, K, Q, V는 결국엔 항상 동일한 벡터라는 것. (self-attention이기 때문) | |
sim(query, key)로 단순히 dot product를 쓰게 될 경우, 사실상 최적화해야하는 weight가 없다. | |
하지만 이를 위해 Q,K, V각각을 선형변환하는 가중치 행렬 (Mq,Mk, Mv)을 추가하면, 학습해야하는 가중치를 introduce할 수 있다. | |
이 구조를 도식화하면 다음과 같이 그려볼 수 있다. Linear 부분이 선형변환. 이러한 구조의 네트워크를 "self-attention block"이라고 부른다. | |
모든 구조가 연속적으로 연결되어 있으므로, 오차역전파법으로 Mq,Mk, Mv 를 최적화 할 수 있다. |
다시 k4ji로 돌아가라!
좋은 자료 공개해 주셔서 감사합니다. 결국 Self Attention을 오차역전파로 학습이 가능하다고 설명해 주셨는데, 의도가 지도학습이 맞는 것이겠죠? 그렇다면 Self Attention의 오차역전파를 위한 Label과 Loss에 대한 이야기가 빠져있어서 그 부분에 대해서 한 수 배우고 싶습니다.
오차역전파를 위한 Label과 Loss는 어떻게 되는 것일까요? 감사합니다.
이 공식에서, 이 그림에서, Q, K, V가 의미하는 것이 무언인지 이해를 못하겠다. transformer의 encoder에 들어가는 입력벡터는 분명 하나인데, 왜 입력이 3개나 되는가?
contents