순환 신경망의 다양한 형태들을 알아보쟈

Vanilla RNN

  • 이전 hidden state 정보를 받아서 현재 input 값과 계산을 한 뒤에, Tanh라는 activation function을 거쳐서 현재의 hidden statef를 만들어냄
  • 이와 같은 방식을 사용하다 보면 '기울기 사라짐' 문제가 발생함

 

Vanilla RNN의 문제점

  • '기울기 사라짐' 문제는 값이 조금만 커지거나 조금만 작아져도 미분 값이 0이 돼버리는 것
  • '장기 의존성' 문제는 앞쪽의 hidden state 정보들이 뒷 쪽에 있는 hidden state까지 얼마나 전달이 될까? 라는 의문에서 생겨난 문제

 

LSTM(Long Short-Term Memory models)

  • RNN의 '기울기 사라짐' 문제와 '장기 의존성' 문제를 보완하기 위해 나온 모델
  • h값 만 받는 것이 아닌 s라는 gate를 만들어서 문제를 해결함
  • 이전 정보를 얼마나 기억할지, 현재 정보를 얼마나 기억할지 구조를 만든 것
  • 이전 정보가 덜 중요하다 싶으면 조금만 기억하고, 이전 정보가 중요한 것이면 많이 기억하는 식으로 동작함
  • f : forget gate, i : input gate, o : output gate
  • sell state, hidden state를 가지고 다음 계산에 반영시킴
  • 장점 : 기존 RNN보다 좋은 성능을 가짐
  • 단점 : 오래 걸림
  • sigmoid : 항상 0과 1 사이의 값을 가져옴

 

GRU(Gated Recurrent Unit)

  • LSTM 계산이 너무 복잡하니까, 계산을 줄여보자 해서 나온 모델
  • r(t)가 0에 가까우면 이전 내용을 거의 반영하지 않겠다는 의미
  • r(t)가 1에 가까우면 이전 내용을 많이 반영하겠다는 의미
  • 다음으로 넘겨줄 h(t)를 만들 때는, 이전 정보를 살려서 더해주는 형태
  • u(t)가 0에 가까우면 이전 정보는 조금, 현재 정보는 많이 반영하겠다는 의미
  • u(t)가 1에 가까우면 이전 정보를 많이, 현재 정보를 조금 반영하겠다는 의미

 

RNN, LSTM, GRU의 근본적인 단점

  • many to many 번역 문제에서
  • 기본적인 RNN 형태에서는 출력 길이를 조절할 수는 있지만 들어오는 문장마다 가변적일 수는 없음
  • 순서를 고려하기 쉽지 않음
  • 이런 문제를 해결하기 위해 seq2seq(sequence-to-sequence)가 나옴

 

seq2seq(sequence-to-sequence)

  • LSTM 모델 두 개를 붙임
  • 앞에 붙은 LSTM 모델을 Encoder라고 하고, 뒤에 붙은 LSTM 모델을 Decoder라고 함
  • 입력 값에 대해 LSTM 모델을 통해서 분석을 한 뒤 거기에 대표되는 Context vector를 하나 만듦
  • Context vector 정보를 뒤에 붙은 LSTM 모델로 보내서 처리함
  • 이렇게 처리하기 때문에 input sequence의 개수와 output sequence의 개수가 달라도 상관없어짐(출력 길이에 구애받지 않음)
  • context vector를 받아서 처리하기 때문에 input vector의 순서가 중요하지 않음
  • 단점 : 어순을 판단하기 어려움

 

Attention Mechanism

  • seq2seq의 어순을 판단하기 어려운 문제점을 해결하기 위해 나옴
  • 어순 차이를 극복함
  • RNN 연산을 할 때 연산된 각각의 hidden state를 가지고 각각에 가중치를 구해서 hidden state각각에 가중치를 곱해서 더한 값을 context vector로 넘겨줌
  • RNN의 고질적인 문제는 현재 정보가 과거의 정보에 영향을 미치지 않는다는 것
  • 한 단어 한단어가 번역될 때마다 전체적인 문장에서 가중치를 구함으로서 어순과 상관없이 전체적인 문장을 고려할 수 있음

 

 

 

내용에 문제가 있으면 댓글로 알려주세요!

 

출처 : 인프런 - 실전 인공지능으로 이어지는 딥러닝 개념 잡기(딥러닝 호형)

+ Recent posts