자연어처리(순환 신경망)
RNN
- RNN은 시퀀스 데이터를 다루기에 적절한 알고리즘이다
- 시퀀스 데잍는 특정 순서가 가정될 수 있는 데이터
- 대표적인 것이 텍스트 데이터로서 각 단어는 예상되는 순서가 있다.
- 동생이 피자를 먹는다 -> 자연스러움
- 먹는다 동생이 피자를 -> 부자연스러움
RNN 작동 원리
텍스트 데이터에서는 앞 단어가 뒷 단어의 발생에 영향을 미친다.
예) 동생이 -> 피자를 -> 먹는다
state = 0
for input_t = input_sequence:
# 전의 단어와 새로운 단어를 넣어준다.
output_t = re(input_t,state)
# 새로운 단어를 넣어준다
state=ouput_t
-> 이로써 전의 단어가 앞의 단어에게 영향을 미치게 된다,
RNN의 문제점
- RNN은 은닉층의 가중치가 지속적으로 곱해지는 것이므로 가중치 절대값이 1보다 작으면 결국 매우 작은 값이 도출되고(그래디언트 손실), 1보다 크면 결국 매우 큰 값이 도출된다(그래디언트 폭주), 만약 1이라면 그래디언트가 유지된다.
LSTM
- LSTM은 과거 정보의 소실이 일어나지 않도록 한다.
- 네 가지 장치를 위한 연산이 각각 별도로 존재하기 때문에 RNN에 비하여 계산량이 많아 속도가 느린 점이 단점이다
- 긴 문장에서도 그래디언트 소실이 잘 일어나지 않는 것이 장점이 다. 즉, 정보의 소실이 많이 발생하지 않는다(오래된 과거의 정보를 더 잘 기억한다)
- 최근 GPU 등의 사용으로 연산속도가 빨라져 연산 시간에 대한 부담이 많 이 줄어들었다
GRU
- LSTM과 같이 다양한 게이트를 두지만 보다 단순화하여 계산량을 줄인다
- 비슷한 성능에 연산시간이 줄어 각광을 받았다
- 최근 GPU의 보급과 성능이 올라가면서 다시 LSTM으로 돌아가는 추세이다
연습문제
워드 임베딩을 사용한 다중 분류 모델에 순환신경망을 적용해 보시오
model_rnn = Sequential()
model_rnn.add(Embedding(max_words, 16))
model_rnn.add(SimpleRNN(8)) # LSTM, GRU
model_rnn.add(Dense(1, activation=
'sigmoid'))
Leave a comment