본문 바로가기
IT 와 Social 이야기/NLP 자연어처리

[딥러닝을이용한 자연어 처리 입문] 0901 순환 신경망(Recurrent Neural Network, RNN)

by manga0713 2021. 5. 20.

번역기를 생각해보면 입력은 번역하고자 하는 문장. 즉, 단어 시퀀스임. 출력에 해당되는 번역된 문장 또한 단어 시퀀스임. 이러한 시퀀스들을 처리하기 위해 고안된 모델들을 시퀀스 모델이라고 함. 그 중에서도 RNN은 딥 러닝에 있어 가장 기본적인 시퀀스 모델임

 

 

1. 순환 신경망(Recurrent Neural Network, RNN)

 

- 은닉층의 노드에서 활성화 함수를 통해 나온 결과값을 출력층 방향으로도 보내면서, 다시 은닉층 노드의 다음 계산의 입력으로 보내는 특징을 가지고 있음

 

[ 이미지 출처 : simplilearn.com - RNN Tutorial for Beginners ]

 

- 은닉층에서 활성화 함수를 통해 결과를 내보내는 역할을 하는 노드를 셀(cell, 메모리 셀, RNN 셀)이라고 함

- 셀은 은닉층의 메모리 셀에서 나온 값을 자신의 입력으로 사용하는 재귀적 활동을 함

- 셀이 출력층 방향으로 또는 다음 시점 t+1의 자신에게 보내는 값을 은닉 상태(hidden state)라고함. 다시 말해 t 시점의 메모리 셀은 t-1 시점의 메모리 셀이 보낸 은닉 상태값을 t 시점의 은닉 상태 계산을 위한 입력값으로 사용함

- RNN은 입력과 출력의 길이를 다르게 설계 할 수 있으므로 다양한 용도로 사용할 수 있음

 

 

  • 일 대 다(one-to-many) : 모델은 하나의 이미지 입력에 대해서 사진의 제목을 출력하는 이미지 캡셔닝(Image Captioning) 작업에 사용할 수 있음
  • 다 대 일(many-to-one) : 입력 문서가 긍정적인지 부정적인지를 판별하는 감성 분류(sentiment classification), 또는 메일이 정상 메일인지 스팸 메일인지 판별하는 스팸 메일 분류(spam detection)에 사용할 수 있음
  • 다 대 다(many-to-many) : 입력 문장으로 부터 대답 문장을 출력하는 챗봇과 입력 문장으로부터 번역된 문장을 출력하는 번역기 등에 사용할 수 있음

- RNN의 은닉층 연산을 벡터와 행렬 연산으로 이해할 수 있음

- 만약, 은닉층이 2개 이상일 경우에는 은닉층 2개의 가중치는 서로 다름

 

 

3.  파이썬으로 RNN 구현하기

 

 

2. 케라스(Keras)로 RNN 구현하기

 

 

4. 깊은 순환 신경망(Deep Recurrent Neural Network)

 

- 다수의 은닉층

 

 

5. 양방향 순환 신경망(Bidirectional Recurrent Neural Network)

 

- 이전 시점의 데이터뿐만 아니라, 이후 시점의 데이터도 힌트로 활용하기 위해서 고안된 것

 

 

6. 점검 퀴즈

 

- RNN을 제대로 이해했는지 퀴즈를 통해서 확인해보세요! 모델에 대한 설명이 다음과 같을 때, 총 파라미터 개수를 구해보세요.

  1. Embedding을 사용하며, 단어 집합(Vocabulary)의 크기가 5,000이고 임베딩 벡터의 차원은 100입니다.
  2. 은닉층에서는 Simple RNN을 사용하며, 은닉 상태의 크기는 128입니다.
  3. 훈련에 사용하는 모든 샘플의 길이는 30으로 가정합니다.
  4. 이진 분류를 수행하는 모델로, 출력층의 뉴런은 1개로 시그모이드 함수를 사용합니다.
  5. 은닉층은 1개입니다.

 

nlp_0901_recurrent neural network 순환 신경망.ipynb
0.01MB

 

- 출처 : [딥러닝을이용한 자연어 처리 입문] 0901 순환 신경망(Recurrent Neural Network, RNN)