자연어처리(순환 신경망)

1 minute read

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