딥러닝을 이용한 자연어처리 입문 #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)))
'공부하는 습관을 들이자 > Deep Learning (NLP,LLM)' 카테고리의 다른 글
[딥러닝 자연어처리] 10. (1) 워드 임베딩 ~ 7) 자모 단위 한국어 fast text 학습하기 (0) | 2024.01.01 |
---|---|
[딥러닝 자연어처리] 9-3. (08) 케라스의 SimpleRNN과 LSTM 이해하기- (11) 문자 단위 RNN (0) | 2023.12.28 |
[딥러닝 자연어처리] 9-1. (01) 순환 신경망 (Recurrent Neural Network) (0) | 2023.12.25 |
[딥러닝 자연어처리] 8-6. (08) 케라스의 함수형 API - (10)다층 퍼셉트론으로 텍스트 분류하기 (0) | 2023.12.22 |
[딥러닝 자연어처리] 8-5. (6) 기울기 소실과 폭주 - 07) 케라스 훑어보기 (0) | 2023.12.20 |