더북(TheBook)

그림과 같이 첫 번째 입력(x1)이 들어오면 첫 번째 기억(h1)이 만들어지고, 두 번째 입력(x2)이 들어오면 기존 기억(h1)과 새로운 입력을 참고하여 새 기억(h2)을 만듭니다. 입력 길이만큼 이 과정을 얼마든지 반복할 수 있습니다. 즉, RNN은 외부 입력과 자신의 이전 상태를 입력받아 현재 상태를 갱신합니다.

RNN은 입력과 출력에 따라 유형이 다양합니다.

1. 일대일: 순환이 없기 때문에 RNN이라고 말하기 어려우며, 순방향 네트워크가 대표적 사례입니다.

2. 일대다: 입력이 하나이고, 출력이 다수인 구조입니다. 이미지를 입력해서 이미지에 대한 설명을 문장으로 출력하는 이미지 캡션(image captioning)이 대표적 사례입니다.

3. 다대일: 입력이 다수이고 출력이 하나인 구조로, 문장을 입력해서 긍정/부정을 출력하는 감성 분석기에서 사용됩니다.

 

다대일에 대한 모델은 파이토치에서 다음과 같이 구현합니다. 다음은 예시 코드이며, 7장에서 다루는 모든 예제가 다대일 구조를 사용하므로 전체 예제를 통해 사용 방법을 확인할 수 있습니다.

self.em = nn.Embedding(len(TEXT.vocab.stoi), embeding_dim) ------ 임베딩 처리
self.rnn = nn.RNNCell(input_dim, hidden_size) ------ RNN 적용
self.fc1 = nn.Linear(hidden_size, 256) ------ 완전연결층
self.fc2 = nn.Linear(256, 3) ------ 출력층
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.