네이버 부스트캠프/LEVEL-1

[부스트캠프][WK02 / Day9] Recurrent Neural Networks

1. 강의 내용

RNN (최성준 교수님)

1) Sequential Model

Sequential data의 가장 큰 어려움은 정의상 길이가 언제 끝날지 몰라 받아야하는 입력의 차원을 알 수 없습니다. 그래서 fully connected layer나 CNN을 활용하지 못합니다. 입력이 가변적이어서 발생하는 문제를 해결하기위해 정보의 개수를 한정($AR(\tau$)) 시킵니다. $\tau$ 시점 전 까지만 입력으로 넣어주는 것으로 $\tau$를 1로 하는 모델이 Markov model입니다. Markov model의 joint distribution을 표현하기 쉬워지는 장점이 있지만 1시점만 보기 때문에 많은 정보를 버리게 됩니다.

Latent autoregressive model은 중간에 hidden state가 들어가고 이것이 과거의 정보를 요약해 담고 있습니다. 이런 정보를 latent state라고 합니다.

2) RNN

RNN은 앞의 모델들과 다를게 거의 없지만 자기 자신으로 돌아오는 구조가 있다는 차이가 하나 있습니다.

 

RNN의 가장 큰 단점은 먼 과거의 정보가 살아남기 어렵고 바로 몇 시점 전의 정보만 잘 잡는 것인 Short-term dependencies 입니다. Long-term dependencies를 잡는 것이 어렵기 때문에 이러한 단점을 잡기 위해 나온 것이 LSTM입니다.

위의 그림에서 $W$라는 값이 계속 중첩되어 곱해지는데 여기서 Vanishing / exploding gradient가 발생하게 됩니다.

3) LSTM

 

Vanishing / exploding gradient 문제를 해결하기 위해 나온 모델이 LSTM입니다.

 

LSTM의 입력으로 들어가는건 이전의 출력값인 Previous hidden state와 밖으로 나가지 않는 Previous cell state, 현재 t시점의 입력 $X_t$ 입니다. 여기서 입력이 3개지만 실제로 밖으로 출력되는건 Output(hidden state) 하나밖에 없습니다.

 

LSTM은 크게 3개의 gate인 forget gate, input gate, output gate로 이루어져 있으며 Core idea는 t시점까지 들어온 정보를 요약한 cell state입니다.

forget gate는 어떤 정보를 버릴지 정하는 것으로 시그모이드 함수를 통과하기 때문에 $f_t$는 항상 0~1값을 가집니다.

 

input gate는 cell state로 어떤 정보를 올릴지 정하는 $i_t$와 현재 정보와 이전 출력값을 가지고 만들어지는 예비 cell state인 $\tilde{C_t}$로 이루어집니다.

 

update cell에서는 forget gate를 통해 나온 값을 이전의 cell state와 곱한 값과 input gate에서 나온 $i_t$ 와 $\tilde{C_t}$를 곱해 어느값을 올릴지 정한 값을 더해줘서 cell state를 업데이트해줍니다.

 

output gate는 업데이트된 cell state를 활용해서 output인 $h_t$를 만들어줍니다.

4) GRU

 

GRU는 reset gate와 update gate 두 개의 gate를 가지고 있으며 cell state는 존재하지 않고 hidden state만 가지고 있습니다. reset gate는 forget gate와 유사합니다. 동일 task에 대해 LSTM보다 GRU가 더 성능이 좋은 경우를 많이 볼 수 있습니다. 여기서 GRU가 파라미터의 개수가 더 적기 때문에 generalization이 더 잘된다는 사실을 볼 수 있습니다. 최근엔 transformer에 밀려 잘 쓰이지 않습니다.


Transformer (최성준 교수님)

Transformer는 일반적으로 sequential data를 다루는 방법론입니다. RNN처럼 sequential하게 입력이 들어가면 Omitted sequence, Permuted sequence 등을 모델링하기가 어렵습니다. 이를 해결하기 위해 Transformer가 등장합니다.

1) Transformer

Transformer는 재귀적인 구조가 없고 attention이라는 구조를 활용했습니다. Transformer는 처음에는 기계어 번역에서 사용되었지만 이미지 분류, 이미지 객체 검출, 이미지 생성 등 다양한 분야에서 활용되고 있습니다.

 

Transformer의 입력 sequence와 출력 sequence의 단어의 개수가 다를 수 있으며 입력과 출력의 도메인도 다를 수 있습니다. 또한 인코더와 디코더를 가지는데, 동일한 구조를 가지지만 네트워크 파라미터가 다르게 학습됩니다.

 

여기서 이해해야 하는 3가지가 있습니다. 첫 번째, n개의 단어가 어떻게 인코더에서 한번에 처리가 되는지 알아야 합니다. 두 번째, 디코더와 인코더 사이에 어떤 정보를 주고받는 지를 이해해야 합니다. 세 번째, 디코더가 어떻게 generation을 할 수 있는 지를 이해해야 합니다.

2) Encoder

인코더는 self-attention과 Feed forward neural network로 구성되어 있으며 self-attention은 인코더와 디코더에 모두 들어있습니다. 맨 처음에는 단어를 특정 숫자의 벡터로 변경해야 합니다. 변경된 벡터가 self-attention을 통해서 넘어갈 때 하나의 벡터(단어)만 활용하는것이 아니라 모든 벡터를 같이 고려하여 벡터(단어)간의 관계를 학습니다.

 

(1) 위의 self-attention 구조에서는 주어진 단어에 대한 벡터를 통해 3개의 Query, Key, Value라는 벡터들을 만들어냅니다.

(2) Score 벡터는 i번째 단어가 나머지 n개의 단어와 얼마나 관계가 있는지 정하는 벡터로 인코딩하고자 하는 벡터(단어)에 대한 query벡터와 나머지 모든 벡터(단어)에 대한 key벡터를 구해 내적합니다.

(3) 이렇게 구한 Score 벡터를 key벡터의 dimension의 루트 값으로 나눠서 정규화해줍니다.

(4) 정규화된 값을 softmax에 넣어 attention weights를 구해줍니다.

(5) 최종적으로 위에서 구한 attention을 각각의 단어의 임베딩에서 나오는 value벡터과 weighted sum을 한것이 해당 단어의 인코딩 벡터가 됩니다.

 

query와 key벡터는 내적을 해야 하기 때문에 항상 차원이 동일해야 하지만 value벡터는 weighted sum만 하면 되기 때문에 차원이 같을 필요가 없습니다. transformer는 n개의 단어를 한 번에 처리해야 하기 때문에 길이가 길어짐에 따라 처리할 수 있는 한계가 있습니다. 하지만 이로인해 더 flexible하고 많은 것을 표현할 수 있는 모델을 만들 수 있습니다.

3) Multi-head attention

Multi-head attention은 앞의 attention과정을 여러번 하는 것입니다. 하나의 단어에 대해 n개의 attention을 반복하게 되면 n개의 인코딩 벡터가 나옵니다. 이렇게되면 입력과 출력의 차원을 맞춰줘야 합니다. 즉, 임베딩된 dimension과 인코딩되어 self-attention으로 나오는 벡터가 같은 차원이어야 합니다. 따라서 linear map을 추가해서 동일한 차원으로 맞춰줍니다. 하지만 실제 구현한 것을보면 이렇게 되어있지 않습니다.

 

3) Position encoding

Position encoding은 입력에 특정 값을 더해주는 것으로 sequencial한 정보가 포함되어있지 않은 transformer 모델에 sequencial한 정보를 추가해주기 위해 사용됩니다. 값은 pre-defined 값으로 더해줍니다.

 

5) Decoder

 

Encoder에서 Decoder로 정보를 보낼 때, Key와 Value를 보내게 됩니다. 그 이유는 출력하고자 하는 단어들에 대해 attention을 만들려면 인풋에 해당하는 단어들의 key 벡터와 value 벡터가 필요하기 때문입니다. 결국 디코더에 들어가는 단어들로 만들어진 query 벡터와 encoder에서 받은 key 벡터와 value 벡터를 가지고 최종 값을 구하게 되는데, 출력값은 autoregressive 하게 출력됩니다.

 

학습시에는 입력과 출력의 정답을 알고 있기 때문에 masking을 해주어 이전 단어들만 참고하고 뒤의 단어는 참고하지 않도록 해줍니다. 다음으로 Q, K, V를 사용해 Attention 해준 뒤 마지막으로 단어들의 분포를 만들어 그중 샘플링하는 식으로 결과를 구합니다.

6) etc

이미지를 분류하는 Vision Transformer (VIT), 글을 통해 이미지를 생성하는 DALL-E 등의 vision 모델들에도 Transformer가 사용됩니다.


2. 과제 수행 과정 / 결과물 정리

LSTM, Multi-head attention 일부 구현 및 선택과제 해설을 듣고 구현중


3. 피어세션 정리

https://hackmd.io/-yJOcP4jTuCiAzDdssnu_A?view


4. 학습 회고

평소 관심있게 공부하던 NLP 관련 모델의 강의여서 조금 더 수월하게 들을 수 있었습니다. 트랜스포머는 강의에서 간략하게 소개되어 논문 리뷰 형식으로 피어셋ㄴ에서 간단히 진행하였습니다.