티스토리 뷰

 

"해당 포스팅은 Stanford CS224N - 2019 winter 강좌를 정리한 내용입니다." 


 Transformer 를 이해하기 위해서 오랜만에 다시 찾은 CS224N. 13번째 강의는 BERT, ElMo 등을 비롯한 transformer 모델이 어떻게 등장하게 됐는지부터 시작해서 transformer 모델의 구조, 그리고 대표적인 모델인 BERT에 대해서 좀 더 자세히 알아본다. 

 

1. 기존 word vectors 의 한계 

이전에 배웠던 word vector 모델로는 Word2vec, GloVe, fastText 등이있다. Pre-trained word vector model 이 배운 Voabulary 에 대해서 각 단어마다 매칭되는 word vector 가 있고, index를 사용해서 필요한 단어의 word vector 를 불러올 수 있다고 배웠음. 여기서 중요한 건, 1 단어 → 1 개의 고정된 word vector 를 가진다는 것.  

 

이 방식에는 2가지 근본적인 문제가 있다.

 

  • 같은 단어라도 어떤 문맥에 등장하냐에 따라 의미가 미묘하게 달라질 수 있는데, 주어진 문맥과 상관없이 항상 똑같은 word vector 를 얻게 된다. (예를 들어 hollywood star 가 어떤 문맥에서는 가수일수도, 배우일 수도 있음. word disambiguation 과 관련된 문제) 
  • 같은 단어라도 different semantics 를 가지고, different syntactic behavior (명사와 동사가 같은 형태일 때)에, different register /connotation 을 가질 수 있는데 이 차이를 반영하지 않고, 항상 고정된 word vector 만 사용한다. 

이런 문제들 때문에 1개의 단어가 1개의 word vector 를 가지는 접근 방식이 정말 옳을 건지에 대한 의문을 가지게 됐고, 그게 바로 static word vector 에서 dynamic word vector 로 방향을 틀게 되는 이유! 즉, 단순히 어떤 단어의 사전적 의미보다는 'context' 안에서의 의미가 더 중요하고 알고싶다고 생각하게 된거지..! 

 

가만.. 이거 이거.. 원래 우리가 갖고있던 solution 아냐? LSTM language model 에서 output hidden states 가 이미  input word meaning + context 를 represent 하는는 거라고 할 수 있지 않나? 

2. TagLM (2017) - Transformer 열풍의 서막 ("Pre-ELMo")

앞선 문제들을 통해서 우리가 원하는 것은 word meaning in context 이고, LSTM language model 에서의 output hidden state 가 이것을 나타낼 수 있다는 힌트를 얻었다.  

 

이것을 바탕으로 TagLM 모델은 NER task 를 수행하기 위해서 pre-trained word vector + pre-trained language model 두 가지 모두를 사용하는 방법을 제시한다. TagLM 전에는 target task 를 배우기 위해 pre-trained word vector 만을 사용하는 방식이었음. 여기에서 TagLM 의 핵심은 바로 pre-trained language model 이다

 

아래 그림은 Tag LM 의 간략한 구조. 회색 부분은 기존의 방식을 그대로 따른 것이고, 주황색 부분이 Tag LM 에서 제시한 새로운 solution. 주요 골자는 word meaning 을 represent 할 때, word vector 뿐만이 아니라 LSTM 의 output hidden state 까지concatenate 해서 함께 사용하는 것. 그러기 위해서는 enormous unlabeled corpus 를 가지고 사전학습한 word embedding model 과 language model 이 필요하다. 

 

아래 그림은 Tag LM 의 구조를 조금 더 자세히 보여주는데, 왼쪽 아래, 동시에 오른쪽 그림부터 시작한다. Training 이 어떻게 이루어지는지 살펴보자. 

  1. 은 기존의 word embedding 과 유사. pre-trained word vector model 에서 word vector 을 얻는다. 그리고 이것을 RNN 에 통과시켜 를 얻는다. 
    ①번은 pre-trained language model (bi-LM) 에서 token representation 을 LSTM 에 통과시킨다. Backward LM 와 forward LM 의 output 을 concatenate 해서 를 얻는다. 이 때 사용되는 bi-LM  은 사전학습된 것으로 frozen layers 를 사용한다. 
  2.  + 를 concatenate 한 뒤, bi-RNN 그리고 feed forward layer 등을 거쳐 NER prediction 을 ouptut 한다. 

3. ELMo 의 등장 (2018) 

2018년에 등장한 ELMo 모델은 Tag LM 이랑 상당히 유사하지만 몇가지를 보안하고 발전시킨 모델이라고 할 수 있다. 예를 들어서, Tag LM 은 Bi-LM 의 top layer 만을 사용해서 word representation 에 사용했는데 엘모는 LSTM 의 모든 레이어를 다 사용한다 (weighted sum of layers at each position ↔ top layer). 여기에 task 타입에 따라서 또 다른 가중치를 줬다는 것도 차이점이다. 

 

아래 이미지를 Tag LM 과 비교해보면 Bi-LM 부분만 ELMo representation 으로 바뀌었음. 

이 때 ELMo 의 등장이 엄청나게 획기적이었던 이유는 이런 방식이 NER 뿐만이 아니라 어떤 NLP task 에 적용해도 performance improvements 를 가져왔다는 것에 있다. ELMo 등장 이전에는 image processing 에서 쓰이는 ResNet 처럼 사전학습된 모델이 task type 과 관계없이 일정한 성능을 내는 통일된 모델이나 구조가 없었는데 드디어 NLP 에도 이런 모델이 등장했다는 점에서 획기적인 연구인 것! 

 

기타) ELMo 의 biLSTM language model layer 은 lower layer 일 수록 lower-level syntax 와 같이 단순한 feature 를, 그리고 higher layer 수록higher-level semantics 를 캐치한다고 한다. 

 

ELMo 를 필두로 사전학습된 LM 을 사용하는 모델이 대거 등장하는데, 대표적으로 ULMfit (by fast.ai - 리서치 그룹), GPT (by OpenAI - 일론 머스크가 이사로 있었다가 지금은 Microsoft 한테 후원받는 사기업) 그리고 BERT (by Google AI) 등이 2018년부터 줄줄이 등장한다. 이중에서도 특히 GPT, BERT 모델은 transformer 구조를 사용하는 모델이다. Transformer 에 대해서 좀 더 자세히 배워볼까? 

 

 

4.  "Attention is all you need" - Transformer 

Transformer 의 핵심은 단연 attention mechanism 이다. 어떻게 등장하게 된건지 살펴보자. 

 

애초에 RNN 은 앞서 등장한 sequences 를 고려해서 예측값을 output 해야하는 NLP 에 적합한 모델이다. 그런데 그런 RNN 조차도 문장이 길어질 수록 long range dependencies 를 학습하기 어렵다는 단점이 있었고, 이를 극복하기 위해 LSTM 이나 GRU 등이 등장했지만 여전히 같은 한계가 있었다. 여기서 attention 이 등장하는데, attention 의 역할을 정의하면 한 마디로 "attention gives us access to any state."  즉, current word (혹은 state) 로부터 얼마나 거리가 멀던 간에 두 vector 의 dot-product* 를 이용해서 attention weight 를 구하는 것이기 때문에 어떤 state 든지, 문장 길이에 상관없이 모두 접근 가능하다. 

* 좀 더 자세히 얘기하면, scaled dot-product 즉 query/ key vector 의 길이로 normalize 된 dot-product 를  attention 으로 사용한다.

Corresponding value ($V_{i}$) 에 weighting 하는 것. 어떻게 ? softmax over query * key similqary 를 통해서 ! 

Transformer 모델의 특징은 이러한 attention layer 가 LSTM layer 등을 완전히 대체한다는 점이다. RNN / LSTM 등의 모델은 애초에 previous hidden state 를 current state 에 반영하기 위해 고안된 모델인데, attention 덕분에 any state 에 접근할 수 있다면 굳이 parallel computing 에 적합하지 않은 LSTM 을 쓸 필요가 없어지는 것! 

 

기존 sequence to sequence model 에 비교하면 여전히 encoder 와 decoder 로 이루어졌다는 점은 공통적이지만, recurrent layer 를 완전히 없애버리고 attention layer 만으로 이걸 대체한다는 게 핵심이라고 할 수 있다. Transformer 에는 결정적 중요한 2가지 attention layer 이 있는데 encoder-decoder 간 attention layer, 그리고 encoder 안의 self-attention layer 가 있다. 

 

 

여기서 self-attention layer 를 살펴보면 단순히 하나의 attention이 아니라 multi-head attention 이라는 것을 써서 다각도로 attention 을 학습한다고 한다. 맞는 비교일지는 모르겠지만, CNN 에서 하나의 filter (혹은 kernel) 은 한 가지의 pattern만을 학습하기 때문에 여러개를 겹쳐셔 쓰는 것과 같은 원리 아닐까? 어쨌든 각각의 attention head 에서 얻은 output 을 concatenate 해서 linear layer 로 보낸다고 한다. 

 

이전에 Transformer 전체 architecture 를 봤으니까, 이제 좀 더 자세히 들어가서 이 전체를 구성하는 transformer block 하나만 살펴보자. 각각의 transformer block 은 아래 이미지처럼 multi-head attention + feed forward 로 이루어져있다. Residual connection 이 있는 것도 특징. RNN 과 비교해보면, RNN 은 단어들을 순차적으로 통과하며 previous features 를 carry 하는 거였는데 (recurrent feature), transformer 에서는 각 position 의 단어가 다른 단어들을 attend 할뿐이라는 것. 

 

Sub-word encoding 을 사용함 

5. BERT - Masked language modeling 

BERT 의 특징은 기존의 uni-directional 이나 bi-directional context 를 사용했던 모델들과 달리 directionality 가 없는 LM 이라는 것이다. 다른 LM 은 training 과정에서 next word prediction 을 쓰는 반면, BERT 는 무작위로 k 개의 단어를 문장에서 mask 한 후, 그 단어들을 prediction 하는 것이다. 그렇기 때문에 왼쪽에서 오른쪽으로 혹은 오른쪽에서 왼쪽으로 문맥을 사용하는 방식이 아니라, 주어지는 entire token 을 가지고 maksed token 을 prediction 하는 undirectional 모델이다. 

ELMo, GPT 와 BERT 차이점 - directionality 유무 

이렇게 한 이유가 unidirectional 이나 bidirectional model 의 한계때문이라고 설명하는데 솔직히 이해 잘 안 감.. 어쨌든 bidrectional model 의 경우, 첫번째 단어를 인코딩할 때 2번째 layer 부터 "words can see themselves" 라고 하는데 이게 왜 문제가 되는지 잘 모르겠다.. 

 

BERT 또 하나의 특징은, masked word prediction 뿐만이 아니라 sentence A 와 sentece B 가 주어질 때, A 다음에 B 가 오는것인지 (1), 아니면 두 문장이 전혀 관계가 없는 문장인지 (0) classify 하는 task 가 있다는 것이다. 2개의 task 는 즉, 2개의 loss function 을 의미한다. 그리고 이것때문에 BERT 에게 주어지는 input sentences 는 2개로, 각 문장마다 임의로 masking 된 token 이 포함되어 있다. 

이렇게 사전 학습된 모델은 final prediction layer 인 top layer 만 task 에 따라서 바꿔서 fine tuning 하면 된다. 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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
글 보관함