코린이의 공부일기

[Boost Camp] WEEK 2.Day4 RNN과 LSTM 본문

BOOST CAMP_정리

[Boost Camp] WEEK 2.Day4 RNN과 LSTM

SOJUNG 2021. 8. 16. 11:22

*Sequential Model

이전데이터가 들어왔을 때 다음 데이터를 찾아보는 것

첫번 째 데이터는 아무것도 Condition 되어있지 않다.

-> 두번 째 데이터는 1번째 데이터에 condition

세번 째는 1,2번째에 condition

 

 

그래서 점점 Data가 갈수록 고려해야할 Data가 많아진다.

 

위의 어려움 때문에 나는 과거 2개의 Data에만 dependent하는 모델 -Autoregressive model

=past Timespan 을 고정하는 것

 

Markov 모델은 사실 말이되지 않는다 

ex> 수능은 그 전날 공부한 것으로 점수가 결정된다 -> 말이 될 수 없다.

Markov model -> 많은 정보를 버릴 수 밖에 없다.

 

많은 과거들의 Data을 반영하는 것, 그렇다고 이전의 과거만 condition한다면 제대로된 모델이 나올 수 없다

그래서 나온 모델이 Latent autogressive model

이 모델은 하나의 과거에 condition하는 것처럼 보이지만 그 하나의 과거가 이전의 모든 과거들을 summarize해서 하나의 hidden state로  반영하는 것!

 

Recurrent Neural Network(RNN) 정의

 

 

출처 : http://www.goldenplanet.co.kr/blog/2021/04/27/%EB%B9%85%EB%8D%B0%EC%9D%B4%ED%84%B0-%EA%B3%B5%EB%B6%80-%ED%95%9C-%EA%B1%B8%EC%9D%8C-rnn%EC%88%9C%ED%99%98-%EC%8B%A0%EA%B2%BD%EB%A7%9D%EC%9D%B4%EB%9E%80/

 

입력값을 받아 출력값을 만들고 이출력을 다시 입력값으로 받는 형태로 Time step별로 입력, 출력 ,가중치를 나타낸다.

즉 내부의 순환 구조에 의해서 현재 정보에 이전 정보가 쌓이는 형태로 정보 표현이 가능한 알고리즘이다.

-> 정보가 끊임없이 갱신되는 구조

Recurrent Neural Network 단점 

 

- short- term dependencies

짧은 몇 주기(short term) 전의 정보들은 잘 반영이 되지만

꽤 이전의 정보(Long term)들은 반영이 되지 않는다.

가장 맨 처음의 정보 h0의 정보는 h1-> h2-> h3 ... 로 가면 갈수록 계속된 sigmoid(activation function)을 통해서 squashing 되며 -> 정보손실이 발생된다.

*Relu(activation function)을 사용하면 h가 n번째가 될 때 값이 exploding하며 네트워크가 터지는 현상이 일어난다.

 

 

Long Short Term Memory(LSTM)

 

Cell state

하나의 컨베이너 벨트라고 생각! -> 어떠한 정보가 유용한지/유용하지 않은지

잘조작해서 다음 state로 넘겨주는 역할

 

Forget Gate는 sigmoid Function을 사용하여 이정보가 유용한 정보인지/ 유용하지 않은 정보 인지 판단

= 이전의 cell state에서 뭘 살리고 버릴지

 

Input Gate에서는 (I t)식에서 previous hidden state와 현재의 입력 Xt를 가지고 어떠한 정보를 cell state에 추가할지 안할지 

 

Update cell -이전에 나온 두 값을 combine해서 올릴것/ 안 올릴것 지정하여 cell state에 올린다.

Output Gate - 그대로 cell state을 output 으로 뽑아낼 수 있지만 LSTM에서는 output gate로 어떤 값을 밖으로 내보낼지 한번 더 지정한다.

 

이렇게 LSTM은 이 4가지를 통해 이전의 summarize한 정보들과 현재정보들과 잘 섞어서 새로운 cell state에 update하며 updata cell에서는 이 두개의 값에서 어떤 것을 또 올릴지 updata한다.

그 다음 하나의 출력값을 뽑을 때, 한번 더 어떠한 값을 밖으로 내보낼지 결정하고 뽑힌 Data는 next hidden state로 흘러들어간다.

 

 

*Gated Recurrent Unit 

Gate 가 2개이며 -reset gate and update gate

GRU에서는 Hidden state는 즉 output gate이다.

-> LSTM보다 GRU가 성능이 더 좋다.

적은 parameter로 같은 결과물을 내서 generalization performace가 좋다.

 

*Sequential Model Problem

Sequence Data는 완벽하게 같은 순서로 이루어져있지 않고 유동성이 있기 때문에

이전의 Data로 순차적으로 학습하는 RNN에서는 어려움이 많다.

그래서 고안된 방법이 Transformer구조이다.

 

 

 

Transformer

 

Transformer은 RNN의 재귀적은 구조가 없고 attention이라 불리우는 구조를 활용한 모델이다.

 

어떠한 문장(불어) input-> 영어 output

 

Transformer model은 1개이지만 

입력 sequence와 출력 sequence의 단어가 다를 수 있다.

입력 sequence와 출력 sequence의 도메인도 다를 수 있다.

encoder부분은 재귀적으로 움직이지 않고 한번에 n개 단어를 처리한다.

 

Q, 어떻게 encoder가 한번에 n개의 데이터(단어) 를 처리할까?

-Encorder의 내부

만일 입력 값으로 3개의 단어 즉 3개의 벡터가 주어졌을 때,

 

주어진 입력 벡터 갯수 만큼 z도 그만큼 출력한다.

이 과정에서  벡터 ->벡터로 나올 때 self attention을 적용한다.

self attention이란?

단순히 x 1번째 벡터만 고려해서 z 1 번째 벡터가 나오는 것이 아니라 x2, x3 벡터도 고려해서 z 1벡터가 출력된다.

(= 즉 z는 나머지 x벡터를 dependent해서 출력한다.)

But Feed-forward 는 independent하다.

 

여기서 it이 어떠한 단어와 관계가 있는지 꼭 확인해야한다.

(=즉 어떠한 문장이 주어졌을 때 단어들 끼리 어떻게 interaction한지 확인 해봐야한다.)

 

각 단어(Thinking, Machines)마다 3개의 벡터를 만들어낸다.

(Queries, Keys, Values)

 

각각의 단어마다 score vector을 생성해준다.

EX> 'Thinking' vector의 score을 구하기 위해선 내가 encoding 하고자하는 queries vector와 나머지 모든 n개의 데이터의 key vector을 구해 내적을한다.

=  이 단어가 나머지 단어들과 얼마나 interaction한지 결정한다.

 

 

score을 구했다면 normalization을 통해 8(key vector의 크기 제곱근)으로 나누어준다.

-> 다음으로 softmax을 취해줌.(attention rate)

softmax의 점수는 각각의 단어가 현재 위치에서 얼마나 표현될 지를 결정한다.

 

 

Thinking 단어의 encoding된 값 : 각각의 단어의 Embedding에서 나오는 value vector와 softmax점수를 곱해주며 weighted sum을 진행한다.

연산의 이유는 집중하고자 하는 단어를 유지하고, 관련 없는 것을 사라지게 하기 위함이다.

 

주의 - Queries vector와 keys vector는 항상 차원이 같아야한다 - 내적 해줘야하기 때문에

하지만 value vector은 차원이 달라도됨 - weighted sum(가중치의 합)만 해주면 되니까

Number of words-> 2개의 단어가 있고 4차원이다 라는 뜻으로 해석

 

 

왜 이게 잘 될까?(교수님의 의견)

이미지 하나가 주어졌을 때 input이 fix되어있으면 출력이 고정되어있다.

transformer하나의 input이 고정되어있어도 encoding하려는 단어와 옆에있는 단어에따라 encoding된 값이 달라진다.

입력이 고정되더라도 옆의 입력들이 달라지면 출력이 달라진다. 즉 더 많은 computational하다.

-> 더 많은 메모리가 필요하다.

 

 

-transformer은 NLP뿐 아니라 CV에서도 적용가능

이전에는 단어들의 squence로 나누었다면 이미지에서는 어떠한 영역에서 나눈다.

 

Comments