본문 바로가기

머신러닝/[딥러닝을 이용한 자연어 처리]

Self Attention & RNN

학습목표

문장을 표현하는 방법중 Self Attention과 RNN에 대해서 알아봅시다.

핵심키워드

  • Self Attention
  • Recurrent Neural Network

학습하기

  자 CBoW, RN(Skip-bigram), CNN까지 봤었는데, CNN도 이제 단점이 있죠. 아주 긴 문장을 학습하려면, Conv layer를 굉장히 많이 쌓아야지 처음 등장한 단어랑 마지막에 등장한 단어의 관계를 학습시킬 수 있겠죠. RN의 경우에는 너무 많은 계산을 하게 될거구요. 그럼 이 두 개를 잘 합쳐서 일반화시켜보자 이겁니다. 필요하면 연결해서 보고, 필요없으면 안보고. 그걸 위해 Self Attention이 나왔습니다. 

 그 이전에 RN과 CNN을 다시 한 번 위의 그림으로 확인해봅시다. RN은 전체 토큰과 다 페어를 만들어서 비교를 하고, CNN은 일정 부분의 토큰과 페어를 만들어서 비교를 하고. 뭐 SUM처리를 할지 AVERAGE처리를 할지는 별개구요. 쨋든 이 같이보는 구간이 달라지는 거지 하는 짓은 둘이 뭐 비슷해요. 그럼 이걸 CNN을 할 때, Weight를 달아줄 수는 없나. 그걸 자동으로 학습시킬 수는 없나. 이게 Attention 아이디어입니다.

 위 그림에서는 알파가 그 Weight function이 되겠죠. 결국 CNN과 RN을 잘 믹스한 느낌인데, 뭐 굉장히 그럴듯합니다. 결과도 그렇구요. 응용으로 Multi head attention, Multi hop attention... 이 있습니다. Self attention이 좋은데 단점이 없지는 않습니다. 계산 복잡도가 좀 높겠죠. 문장이 들어오면 모든 토큰에 대해서 Weight를 학습시키고 그 모든 값들을 MatMul을 통해 Merge해서 Representation을 찾고... 뭐 이런 방식이니까요.

 그런데 RNN은, 이런 측면에서 장점을 갖겠죠. 어떤 문장의 토큰이 순차적으로 들어오면 그걸 실시간으로 축약하거든요. Memory를 갖는 모델이기 때문에, 계속해서 앞의 토큰들을 참조할 수 있는 방법입니다. 물론 이것도, 한정된 벡터 사이즈에 계속 압축을 해야하니까, 정보의 손실이 생깁니다. 그래서 Bidrection LSTM도 써보고 그렇습니다. 또 앞의 데이터가 뒤의 데이터에 영향을 미친다는 그 측면때문에, 계산 병렬성이 좀 어려워지죠. 뭐 그래도, 유명하기 때문에 사용성은 충분히 좋습니다.

'머신러닝 > [딥러닝을 이용한 자연어 처리]' 카테고리의 다른 글

Questions  (0) 2020.04.10
Summary  (0) 2020.04.09
CBoW & RN & CNN  (0) 2020.04.07
How to represent sentence & token?  (0) 2020.04.06
Overview  (0) 2020.04.05