[DL] RNN
단어예측도 Dense 레이어로 학습이 가능하다. 딥러닝 모델에는 숫자만 입력이 가능하기 때문에 단어마다 서로 다른 숫자로 치환해서 넣어준다. 원핫인코딩을 해도 좋다.
그런데 Dense 레이어에 바로 이렇게 숫자로 치환된 단어들을 넣어주면 단어들의 순서 정보가 사라진다는 문제점이 있다. 이에 대한 해결책이Simple RNN
레이어! 이처럼 순서가 중요한 데이터를 학습시키기 위해서는Simple RNN
을 사용한다.
1. Simple RNN 레이어 (Simple Recurrent Neural Network)
- 단어들을 하나씩 순서대로 넣는 것을 구현하기 위해 쓰는 레이어
- 첫 번째 단어를 집어넣고 예측결과를 뽑고, 첫 예측결과의 일부를
hidden state(h1)
형태로 두번째 단어의 input과 합산하여 두번째 결과를 예측할 때 사용하고, … (input 문장 끝날 때까지 반복) - 레이어 하나씩 진행할 때마다 나오는 예측결과값을
hidden state
형태로 쓸 수도 있고, 안 쓸 수도 있다. (내 선택) - 최종적으로 원하는 값은 마지막 레이어의 최종 예측값.
2. RNN의 응용
RNN은 sequence 데이터 학습에 좋은 성능을 내는 만큼 많은 분야에서 응용되고 있다.
1) 응용분야
- 이미지 - 이미지에도 순서 개념이 있을 수 있다.
- 단어 예측
- 음성 예측
- 주식 가격 에측
2) RNN 적용하기
(1) Vector → Sequence 예측
Example) Image captioning: 이미지를 input matrix로 입력하여 자막생성
(2) Sequence → Vector 예측
Example) 문장의 감정분석: 문장을 input하여 해당 글이 긍정/부정 글인지 판별
(3) Sequence → Sequence 예측
- Encoder to Decoder 모델
- Sequence to Vector to Sequence 모델
- 중간에 생성되는 vector는 다차원의 복잡한 행렬
Example) 번역기: 한글 문장을 input으로 넣어 영어 문장으로 번역하여 추출
3. LSTM
Simple RNN에는 치명적인 문제점이 있다! 바로
Diminishing Gradient
가 생기는 문제점이다. 이에 대한 해결책인LSTM
을 알아보자!
1) Diminishing Gradient
- Simple RNN에서 학습이 진행될수록 문장 앞쪽에 있던 단어들에 대한 정보를 잊게 된다. 즉, 학습 초반에 input으로 넣어준 단어들에 대한 중요도가 낮아지게 된다. 만약 문장의 중요한 정보를 담고 있는 단어가 문장 앞쪽에 있다면 모델의 정확도가 떨어질 수 밖에 없다.
- 한국어라면 중요한 의미를 담고 있는 동사가 문장의 뒷쪽에 있어서 영향이 덜 하지만, 영어의 경우 동사가 문장 앞쪽에 오기 때문에 이러한 문제는 더 커진다.
- 이러한 Simple RNN의 문제점을 보완한 해결책이 LSTM 레이어이다!
2) LSTM (Long Short Term Memory)
- LSTM은 output으로
hidden state
외에cell state
도 함께 내뿜는다. cell state
는 장기기억의 역할을 한다.- LSTM 내부에는 3개의 gate가 유기적으로 작동한다.
forget gate
: 중요하지 않은 정보를 지우는 곳input gate
: 중요한 정보를 장기기억으로 보내는 곳output gate
: hidden state(output)를 연산하는 곳
- Tensorflow에서 LSTM을 쓰는 방법 (코드 1줄이면 완성!)
tf.keras.layers.LSTM(노드갯수, input_shape=(data 1개의 shape))
- LSTM보다 간단한 레이어인
GRU
레이어도 있다.- 연산과정이 간단하고 output이 1개라서 LSTM보다 속도가 빠르다.
Leave a comment