생각하는감자

LSTM, GRU 본문

NLP

LSTM, GRU

토킹감쟈 2023. 1. 7. 16:59

Vanishing Gradient 문제

RNN의 구조에는 gradient 가 사라진다는 치명적인 문제점이 있다. 대부분의 연산이 곱셈으로 이루어져 있으며 처음 sequence에 해당하는 단어의 정보를 그다음 time step에 넘어가서도 계속 가지고 있으면서 새로운 input을 받고 그 단어의 정보 또한 누적하여 축적한다고 생각하면 쉬운데, 이렇게 되면 전체 input sequence의 첫 부분에 해당하는 정보가 sequence의 마지막 부분에 도달하면 변질되거나 사라지는 경우가 있다. 즉, 오래 전의 정보를 제대로 활용할 수 없다는 문제가 있다는 것이다.

예를 들어,

Jane walked into the room. John walked in too. It was late in the night. Jane said hi to            .

위의 문장을 보았을 때 빈칸에 들어갈 단어가 John이라는 것은 쉽게 알아차릴 수 있다. 하지만, RNN 입장에서는 John이라는 단어는 빈칸보다 한참 전에 입력되었으므로 John이라는 답을 맞히기 위해서는 처음 John이 입력된 time step 이후 동안 John에 관한 정보를 가지고 있을 수 있어야 한다. 

 

LSTM은 정보를 오랫동안 보관할 수 없는 RNN의 구조를 발전시켜 Short-Term Memory를 길게 만들었다 하여 Long Short-Term Memory이다.

 

 

LSTM의 구조

LSTM 구조

LSTM 내부에는 4개의 상호작용하는 layer들이 있다.

 

위의 그림에서 Ct는 Cell state vector이고, 아래의 연한 초록색의 ht는 hidden state vector이다. cell state 정보가 아무 변화 없이 쭉 흐를 수 있는 구조를 통해 Long-term dependency를 해결하고자 한다. 

위에 언급한 4개의 layer는 forgate gate, input gate, gate gate, ouput gate가 있으며, 이 중에서 gate gate만 tanh를 통과하고 나머지는 sigmoid를 통과한다. Sigmoid를 통과함으로 인해 값이 0~1 사이로 정해지며 기존에 곱해지는 대상의 값을 어느 정도 discount해주는 효과가 발생한다. 만일 그 값이 0.7이면 해당 값의 70%만 사용하겠다는 의미인 것이다. 따라서 Sigmoid는 binary classification의 최종결과를 나타내는 데에 잘 사용된다. 

 

forget gate

이전 time step에서 넘어온 cell state 정보를 얼마나 흘려보낼지에 대한 수문이 존재한다. 예를 들어 sigmoid를 통과한 벡터가 [0.7 0.2]라고 한다면 해당  time step 전 단계에서 넘겨준 유의미하다고 생각된 2차원짜리 벡터를 지금 현재 input을 가지고 판단해 보니 전단계 벡터에서 첫 번째 dimensiondmf 70%만 살리고 2번째 dimension은 20%만 살리겠다는 역할을 한다. 이는 과거의 정보 중 일정 부분을 버리기 때문에 forget gate라고 칭한다. 

곱셈 연산을 통해 정보의 일정 부분을 가져오고 덧셈연산을 통해 cell state를 update 시킨다고 생각하면 되겠다. 수식으로 나타내면 다음과 같다.

 

cell state에 추가할 정보를 생성하고 여기에 input gate를 통해 일부를 버리는 과정이다. tanh함수를 통과하여 나오는 g가 바로 해당 cell에서 덧셈연산을 해주어야 하는 벡터인 것이다.

 

forget gate를 통과하여 변환된 것에 덧셈 연산을 통해 cell state를 update 시킨다. 즉, 버릴 것은 버린 과거에서 넘어온 cell state에 현재 정보를 더하여 현재의 cell state를 생성하는 것으로 이해할 수 있다. tanh는 -1 ~ 1 사이의 값으로 변환해주는 함수이며 zero-centered라는 특징을 가지고 있다. 이를 통해 현재 time step의 meaningful 한 state vector를 만드는 역할을 한다.

 

output gate를 통과시켜 현재 time step에서의 hidden state를 생성한다. 이후 해당 hidden state는 다음 time step으로 넘겨주고 필요한 경우 output 쪽이나 다음 레이어로 넘겨주게 된다.

 

 

LSTM에 대한 더욱 자세한 내용은 아래의 블로그를 참고하면 좋을 것 같다. 헷갈리는 부분이 있거나 아직 잘 이해하지 못한 부분이 있을 때마다 반복해서 읽고 있는 블로그이다:)))

https://colah.github.io/posts/2015-08-Understanding-LSTMs/

 

Understanding LSTM Networks -- colah's blog

Posted on August 27, 2015 <!-- by colah --> Humans don’t start their thinking from scratch every second. As you read this essay, you understand each word based on your understanding of previous words. You don’t throw everything away and start thinking

colah.github.io

 

GRU - Gated Recurrent Unit

GRU 는 LSTM을 변형한 형태이다. forget gate와 input gate를 하나의 update gate로 통합하였다. 또한, cell state와 hidden state를 병합하므로 LSTM 모델보다 간단한 형태를 가진다.

'NLP' 카테고리의 다른 글

Tokenization  (0) 2023.01.12
seq2seq with Attention  (0) 2023.01.12
RNN의 여러가지 형태  (0) 2023.01.06
Word Embedding (3) - GloVe  (0) 2023.01.05
Word Embedding (2) - Word2Vec  (0) 2023.01.05