Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

TechY

[논문 정리] A STRUCTURED SELF-ATTENTIVE SENTENCE EMBEDDING 본문

[논문 정리]

[논문 정리] A STRUCTURED SELF-ATTENTIVE SENTENCE EMBEDDING

hskimim 2020. 12. 15. 22:28

Transformer 논문에 나오는 self-attention을 먼저 제시한 논문인  A Structured Self-Attentive Sentence Embedding

논문과 이러한 모델이 multi-head attention 을 적용하였을 때, generalized pooling 을 제시한 논문, Enhancing Sentence Embedding with Generalized Pooling 을 간략하게 정리해보려 한다. 부족한 경험이지만, 논문을 하나씩 읽으면서 느끼는 것은 기발하고 훌륭한 아이디어를 내는 논문들은 정말 간단한 로직이라는 것이다. 논문을 읽으면서, 기존의 연구에 간단한 레이어를 통해 또 다른 많은 질문들을 제시하는 논문이라는 생각이 들었다. (그 결과가 transformer 아닐까)

 

 

Network Architecture

모델의 구조는 간단하다. 우선, bi-directional LSTM으로 모델을 fixed length hidden representation으로 표현한다. 이 때 모든 문장은 n 개의 단어 벡터들로 구성되어 있고, (sentence-length = n) word vector의 차원은 d 이다. bi-directional LSTM layer를 거치고 난 후, 각 방향의 context vector를 concatenate한 후의 차원은 [n, 2 * u] 가 된다. u는 LSTM 의 hidden diemsnio 이다 .

bi-directional LSTM

그 후, tanh 를 activation 으로 하는, layer 가 2개인 MLP 를 쌓고 softmax 값을 취해주면 self-attention layer가 된다. 이 때 최종 A 의 차원이 [1,n] 가 되게끔 한다.  이 때 각 paratmer W의 차원은 각각

- H : [2 * u, n]

- W_{s1} : [2 * u, d_{a}]

- W_{s2} : [d_{a}, r] 

- A : [n, r] (n 축에 대해 softmax)

- AH : [2 * u, r]

self-attention layer

 

이렇게 나온 Attention weight A 와 LSTM 의 양방향 벡터 H를 weighted sum 한 것이, self-attentive sentence embedding이 된다. 

 

추가적으로, attention weight 가 학습되지 못하고, 어떤 문장이든 비슷한 softmax 값을 출력하는 것을 방지하기 위해서, 아래와 같은 penalty term 을 loss 에 더해주었다. 원래 KL divergence 를 사용하려고 했었다고 하는데 (uniform distribution 과 같은 target distribution 과 KL loss의 역수(?) 를 계산하여 이를 penalty term 으로 추가) 기존의 loss 형태는 KL divergence 를 minimize 하는 것인데, 이 경우 maximize 문제가 되고, 실험 결과 A attention weight 벡터에 0값이 너무 많아 학습이 불안정할 것이라고 생각되 다음과 같은 식을 생각했다고 한다. 

 

penalization term

Enhancing Sentence Embedding with Generalized Pooling  논문에서는 multi-head attention의 경우에 어떻게 attention pooling 을 하는지에 대해 제안한다. (읽다 보니, multi head attention 의 이점에 대해서 갑자기 궁금해지는데 읽고 추후 포스팅을 올려야 겠다.) transformer 논문에서 했던 것과 같이 I 개로 나눈 multi head의 pooling 값을 다시 concatenate 해주어 v 벡터로 만들어주는 형태이다. 

generalized pooling

해당 논문에서는 3 가지 다른 penalty loss term을 소개한다. 해당 penalty term의 이유는 전 논문과는 다르게 multi-head attention 을 적용하였기 때문에, multi-head 간의 attention weight 가 서로 비슷해지는 redundancy 를 방지하기 위함이다. 이에 따라 각 multi-head에서 나오는 parameter 간의 diversity를 유도한다. 각 loss 에 주어지는 threshold 로 hyper-parameter에 속한다. lambda 값이 클 수록, 요구되는 diversity의 강도가 강할 것이며 1이면 이전의 논문과 같이 identity matrix를 적용한 것과 같다. 

 

첫 번째는 W_{s1}에 대한 것이다. 

두 번째는 Attention layer인 A에 대한 것이다. 

마지막으로 sentence embedding v 에 대한 것이다. 

 

self-attention 을 적용한 sentence embedding 기법에 대해 알아보았는데, 구조도 쉽고 무엇보다 결과값에 대한 해석이 가능해 구현을 진행해보는 것이 좋을 것 같다.