-
순환 신경망 예제 [RNN]인공지능 2022. 11. 16. 18:33
RNN을 구현하는 방법
- Keras에서 간단하게 구현할 수 있는 함수를 제공해주고 있다. --> layer_simple_rnn()
layer_simple_rnn() 함수는 3가지의 인자 값을 요구한다.
1) batch_size : 한 번에 학습하는 데이터의 개수를 의미함
2) timesteps : 입력 시퀀스의 갯수
3) input_dim : 각 입력 시퀀스의 차원
여기서 input_dim을 제외하고는 값을 주지 않아도 None으로 대체된다는 특징이 있다.
위 레이어에는 총 2가지 모드로 사용할 수 있다.
1) 출력을 3차원으로 하여 연속적으로 사용하는 모드
- return_sequences 값을 True로 주면 된다. ("이 레이어의 현재 상태 값을 다음 출력 값에 영향을 미쳐야겠다" 라고 인식한다.)
2) 출력을 2차원으로 하는 모드
- 아무런 속성 없이 input_dim만 입력해주면 된다. (기본 모드)# 영화 감상평 분류 예제
# 01 (데이터)
1. 내장 데이터를 받아오는데 상위 1만개의 단어만 고려해 정수 리스트로 변환하고 train-datasets과 test-datasets로 나눈다.
2. pad_sequences 함수로 재각각인 문장들의 길이를 설정해준 문장 당 500개의 단어로 맞춰준다. 반면에 500개의 단어가 안되는 문장들은 0으로 대체해 인위적으로 채워준다.# 02 (모델 구축)

embedding : 각 단어 index들을 벡터화 시켜준다.
simple_rnn : RNN 모델을 두번 통과시켜준다.
dense : 학습을 위한 조밀분류계층을 추가시켜준다.
sigmoid : 출력 값을 확률로 변환해준다. 즉, 출력 값을 0과 1사이로 돌려준다. (ex: 긍정/부정)# 03 (학습결과)

학습 결과 3번째 학습을 마쳤을 때 85%의 정확도가 나왔지만 높은 정확도라고 할 수 없고, 과적합도 보이는 것 같다.
이 처럼 긴 문장을 처리하는데 단순 RNN은 한계점이 있다.
RNN은 이전 시간대에서 본 입력 값의 정보들을 유지할 수 있어야 한다. 하지만 RNN층이 길게 쌓이게 되면 처음에 봤던 기억은 점차 사라지게 되면서 경사소멸문제가 발생한다.
(경사소멸문제 : 장기적인 기억이 불가능해 생기는 문제점)'인공지능' 카테고리의 다른 글
합성곱 신경망(Convolution Neural Network) (0) 2022.11.20 경사하강법 [Optimizer] (0) 2022.11.17 순환 신경망에 대해서 [RNN] (0) 2022.11.16 머신러닝 - 1 (0) 2022.01.12