Adore__

[BoostCourse DL] Sequential Models-RNN 본문

AI Learner/NLP

[BoostCourse DL] Sequential Models-RNN

3_GreenHeart 2023. 4. 19. 16:57
728x90

Source : [BoostCourse 딥러닝 기초 다지기]의 자료를 사용하였습니다.

 

 

 

CNN은 입력 이미지를 내가 원하는 형태로 바꿔주는 것이었다.

- classification: one-hot vector

- detection : 각각의 영역에 있는 bounding box

- semantic segmentation : 이미지의 픽셀별로 속하는 class 찾기

 

하지만 RNN은 입력 자체가 sequential data이다.

sequential data를 처리함에 있어서 가장 큰 어려움은, 하나의 라벨로 정의될 수 없다는 것이다.

글자가 입력으로 들어올 때, 그 길이가 언제 끝날지 모른다. 내가 받아들여야 하는 입력의 차원을 알 수 없기때문에 CNN을 사용할 수 없다.

즉, 몇개의 입력이 들어오든 이 모델을 돌릴 수 있어야한다.

 

이를 위한 다양한 모델 방법이 있다.

 

 

 

Autoregressive Model


이전 입력으로부터 다음 입력에 대한 예측을 하는 것이다 (Language model)

하지만 차례를 거듭할수록 고려해야하는 입력값의 수가 늘어난다. (과거에 고려해야 하는 정보량 증가)

naive 방법

 

따라서 가장 간단한 방법은 정해진 갯수만큼의 과거 데이터를 보는 것이다. (Fix the past timespan)

 

autoregressive model

 

 

▪️ Markov Model (first-order Autogressive model) 또는 MLP

 

Autoregressive Model에서 제일 쉬운 방법이다.

'나의 현재는 바로 전 과거에만 의존한다.'를 전제하는 모델이다.

이 모델의 가장 큰 장점은, Joint Distribution을 표현하기 쉽다는 점이다.

Markov Model

 

하지만 우리가 시험을 볼 때 바로 전날에 공부한 것에 점수가 결정될까? 그러면 얼마나 좋을까 :) 이는 말이 안된다. 

따라서 이 Markov Model은 과거의 많은 데이터를 버리는 한계가 존재한다.

 

 

▪️Latent Autoregressive Model

중간에 hidden state가 있고, 이는 과거의 정보를 요약한다. 그리고 다음번 time state는 이 hidden state에만 의존한다.

이로서 과거의 여러 정보를 활용하여 학습할 수 있다.

 

Latent Autoregressive Model

 

 

 

 

Recurrent Neural Network


앞의 MLP와 비슷하지만, 자기 자신으로 돌아오는 구조가 하나 추가된다.

한 단계의 hidden state는, 과거 x(t)에만 의존하는 것이 아니라 현재 나의 이전 t-1에서 얻어진 self state에도 의존하는 것이다.

 

RNN

 

RNN은 recurrent 구조를 가지기때문에 상당히 복잡해 보이지만, 이 recurrent 구조를 시간순으로 풀어보면 각 시간별 model이 쭈욱 나열된 fully connected layer로 표현될 수 있다.

 

 

▪️Short-term dependency

RNN의 가장 큰 단점이다. 과거의 전반적인 정보들을 모두 고려해야하는데, RNN처럼 고정된 기법으로 계속해서 넘기다보면 아주 오래전의 정보는 손실될 수밖에 없다.

 

short term dependency로 인한 vanishing/exploding gradient 문제

 

위 식을 보면 h0, h1, h2로 갈수록 동일한 곱셈절이 계속해서 넘어가게 된다.

만약 Sigmoid 함수를 사용하게 되면 x값이 매우 커져서 gradient가 0으로 소멸되는 문제가 생기고, ReLU함수를 사용하면 Wt가 제곱배수로 h0에 곱해지기때문에 값이 너무 커져서 네트워크가 폭발할 수 있다.

 

이러한 문제를 실생활에서 생각해보자.

예를 들어 질문에 대답을 예측하는 모델에게 아주 긴 질문을 던졌다고 해보자. 이때 처음부터 내가 말한 내용이 고려되어 질문에 대한 대답을 할 수 있어야 하는데, 단순히 10초 전에 말한 내용만 고려하게 된다면 전혀 이상한 답을 할 될 것이다.

 

 

따라서 Long-term dependency를 잡는 것이 아주 중요한 과제가 된다. -> LSTM 등장

 

 

 

 

 

Long Short-term Memory


다음은 LSTM 구조이다.

LSTM

이 각각의 구성요소를 자세히 살펴보자

 

 

- X : 입력. 단어를 쓸 경우, 단어 하나마다 벡터로 표현되어 들어갈 수 있다.

- h : output (hidden state)으로서, 다음번 단어의 분포나 확률을 찾을 수 있다.

- Previous cell state : LSTM 네트워크 밖으로 나가진 않고, 내부에서 과거의 정보를 취합해서 요약해주는 역할을 한다.

- Previous hidden state (output) : 이 정보는 위로 나가기도 하지만, 아래로 흘러간다. 따라서 다음번 t+1의 previous hidden state로 넘어간다.

 

따라서 정리해보면, t번째 cell에 들어오는 정보는 다음과 같다.

1. 이전 t-1에서 넘어온 previous cell state

2. t-1에서 넘어온 previous hidden state(output)

3. t 단계에서 들어오는 input X

 

 

LSTM은 3가지의 Gate로 나뉠 수 있다. 그리고 각 gate마다 정보를 조작한다.

 

- Forget Gate : 이전에서 넘어오는 output 중, 어떤 것을 버릴지 결정한다.

- Input Gate : 현재 들어온 입력 (input X와 previous hidden state)에서 어떤 정보를 올릴지 말지 결정한다. 여기서 Ct가 현재 정보와 이전 출력값의 정보로 만들어지는 cell state의 후보라고 할 수 있다. 그러면 이것과 이전 정보가 요약된 previous cell state를 잘 섞어서 새로운 cell state에 update 해주어야 한다.

 

 

- update cell : 이전에 버릴 건 버리고, 현재를 기준으로 쓸 건 써서 cell state를 update 해준다.

- Output Gate : 이를 그대로 output로 보낼 수 있지만, 한번 더 조작해서 어떤 값을 밖으로 보낼지 결정한다.

 

 

▪️ Gate Recurrent Unit (GRU)

차이점

- 여기서는 Gate가 2개밖에 없다. ( reset gate, update gate)

- LSTM에서는 output을 보낼때 update cell에서 받은 값을 한번 더 조작하는 과정이 있었지만, GRU은 바로 내보낸다.

- cell state가 없고 hidden state만 존재한다.

 

 

 

GRU가 적은 parameter를 갖고 있다는 관점에서 좋지만,

현재는 Transformer가 나오면서 그렇게 많이 사용되지는 않는다.

'AI Learner > NLP' 카테고리의 다른 글

[BoostCourse DL] Sequential Model - Transformer  (0) 2023.05.13
Comments