본문 바로가기
  • 데이터에 가치를 더하다, 서영석입니다.
공부하는 습관을 들이자/Deep Learning (NLP,LLM)

[딥러닝 자연어처리] 9-2. (05) 양방향 순환 신경망 - (07) 게이트 순환 유닛

by 꿀먹은데이터 2023. 12. 26.

딥러닝을 이용한 자연어처리 입문 #9-2. (05) 양방향 순환 신경망 -(07) 게이트 순환 유닛

  • 이전과 이후의 시점 모두를 고려해서 현재 시점의 예측을 더욱 정확하게 할 수 있도록 고안된 방법

  • 첫번째 메모리 셀 : 앞 시점의 은닉 상태를 전달받아 현재의 은닉 상태를 계산함
  • 두번째 메모리 셀 : 뒤 시점의 은닉 상태를 전달받아 현재의 은닉 상태를 계산함

[은닉층이 1개 더 추가된 양방향 순환 신경망]

from tensorflow.keras.models import Bidirectional 
timesteps = 10 
input_ dim = 5 
model = Sequential() 
model.wooddidirectional(Simgle9300filsden_its, return_sequences=True), input_shape=(timesteps, input_dim)))

model Sequential()
model.add(Bidirectional(SimpleRNN(hidden_units, return_sequences=True), input_shape=(timesteps, i
nput_dim)))
model.add(Bidirectional(SimpleRNN(hidden_units,
return_sequences=True)))
model.add(Bidirectional (SimpleRNN (hidden_units, return_sequences=True)))
model.add(Bidirectional(SimpleRNN(hidden_units, return_sequences=True)))

(06) 장단기 메모리

바닐라 RNN의 한계

시점이 길어질수록 앞의 정보가 뒤로 충분히 전달되지 못하는 현상이 발생함

이를 장기 의존성 문제라고 함

바닐라 RNN 내부 열어보기

  • 바닐라 RNN은 x_t와 h_{t-1}이라는 두개의 입력이 각각 가중치와 곱해져서 메모리 셀의 입력이 됨
  • 그리고 이를 하이퍼볼릭탄젠트 함수의 입력으로 사용하고 이 값은 은닉층의 출력인 은닉 상태가 됨

LSTM(Long Short-Term Memory)

전통적인 RNN의 단점을 보완한 RNN의 일종을 장단기 메모리(Long Short-Term Memory)라고 하며, 줄여서 LSTM이라고 함

  • 은닉층의 메모리 셀에 입력게이트, 망각 게이트, 출력 게이트를 추가하여 불필요한 기억을 지우고, 기억해야할 것들을 정함
  • LSTM은 RNN과 비교하여 긴 시퀀스의 입력을 처리하는데 탁월한 성능을 보임

1. 입력 게이트

  • 현재 정보를 기억하기 위한 게이트

2. 삭제 게이트

  • 기억을 삭제하기 위한 게이트
  • 시그모이드 함수를 지나면 0과 1사이의 값이 나오게 되는데, 이 값이 곧 삭제 과정을 거친 정보의 양
  • 0에 가까울수록 정보가 많이 삭제된 것이고 1에 가까울수록 정보를 온전히 기억한 것

3. 셀 상태

  • 입력게이트에서 선택된 기억을 삭제 게이트의 결과값과 더함
  • 삭제 게이트 - 이전 시점의 입력을 얼마나 반영할지를 의미함
  • 입력 게이트 - 현재 시점의 입력을 얼마나 반영할지를 결정함

4. 출력 게이트와 은닉 상태

  • 출력 게이트 - 현재 시점 t의 x값과 이전 시점 t-1의 은닉 상태가 시그모이드 함수를 지난 값
  • 해당 값은 현재 시점 t의 은닉 상태를 결정하는 일에 쓰이게 됨
  • 은닉상태의 값은 또한 출력층으로도 향함

(07) 게이트 순환 유닛

GRU : 2014 뉴욕대 조경현 교수님이 집필한 논문에서 제안된 방법

LSTM장기 의존성 문제에 대한 해결책을 유지하면서, 은닉 상태를 업데이트하는 계산을 줄임.

GRU : GRU에서는 업데이트 게이트와 리셋 게이트 두 가지 게이트만 존재함

  • GRU와 LSTM 중 어떤 것이 모델의 성능면에서 더 낫다라고 단정지어 말할 수 없음
  • 경험적으로 데이터 양이 적을 때는 매개 변수의 양이 적은 GRU가 조금 더 낫고,
  • 데이터 양이 많으면 LSTM이 더 낫다고 함

케라스에서의 GRU

model.add(GRU (hidden_size, input_shape=(timesteps, input_dim)))