본문 바로가기
ML & DL/책 & 강의

[밑시딥2] CHAPTER 5 순환 신경망(RNN)

by 공부하는 무니 2023. 7. 21.
반응형

지금까지 살펴본 신경망은 feed forward 신경망이었다. 흐름이 단방향인 신경망을 의미한다. 이러한 feed forward신경망은 구성이 단순하여 구조를 이해하기 쉽고, 그래서 많은 문제에 응용할 수 있지만 시계열 데이터를 잘 다루지 못한다는 단점이 있다. 더 정확히 feed forward 신경망에서는 시계열 데이터의 패턴을

충분히 학습할 수 없다. 따라서 순환 신경망(Recurrent Neural Network, RNN)이 등장하게 된다.

5.1 확률과 언어 모델

RNN 이야기를 시작하기 전, word2vec을 복습해보자.

5.1.1 word2vec을 확률 관점에서 바라보다

word2vec의 CBOW모델을 복습해보자. 

그리고 맥락이 주어졌을 때 타깃이 해당 중심 단어가 될 확률은 아래와 같다.

지금까지는 맥락을 좌우대칭으로 생각해왔었는데. 이번에는 맥락을 왼쪽 윈도우만으로 한정해서 생각해보자.

경우 CBOW 모델이 타깃을 출력할 확률은 아래와 같다.

확률을 이용하면 CBOW 모델이 다루는 손실 함수는 아래와 같이 유도할 있다.

CBOW 모델을 학습한다는 것은 손실 함수를 최소화하는 가중치 매개변수를 찾는 것이다. 그러한 가중치 매개변수를 찾게 되면 맥락으로부터 타깃을 정확하게 추측할 있다. CBOW 모델의 학습 목적은 맥락으로부터 타깃을 추측하는 것이고, 학습의 부산물로 단어의 의미가 인코딩된단어의 분산 표현 얻을 있다.

위 확률을 어디에 이용할 수 있을까? 여기서 '언어 모델'이 등장한다.

5.1.2 언어 모델

언어 모델은 단어 나열에 확률을 부여한다. "you say goodbye"라는 단어 시퀀스에는 높은 확률(ex. 0.092)을 출력하고, "you say good die"에는 낮은 확률(ex. 0.000000000032)을 출력하는 방식.

언어 모델은 기계 번역, 음성 인식 등 다양하게 응용할 수 있다. 

음성 인식 시스템: 사람의 음성으로부터 몇 개의 문장을 후보로 생성하고, 언어 모델을 사용하여 자연스러운 문장을 선별한다. ex. 핵인싸 회계사 "나 대학교 때 핵인싸였지~"

언어 모델을 수식으로 설명해보자. w1, w2, ... wm이라는 m개 단어가 순서대로 출현할 확률은 P(w1, ..., wm)이다.

이 동시확률을 사후 확률을 사용하여 다음과 같이 분해할 수 있다.

5.1.3 CBOW 모델을 언어 모델로?

word2vec의 CBOW 모델을 언어 모델에 적용해보자.

 

맥락을 왼쪽 2개의 단어로 한정하여 근사적으로 나타냈다. 위 식에서는 맥락의 크기를 2로 설정했지만, 이 맥락의 크기는 임의로 설정할 수있다. 

문제1. 긴 맥락이 필요한 문제

CBOW 모델의 맥락 크기를 충분히 키우면 문제가 해결될까? 아니다.

 

문제2. 맥락 안의 단어 순서가 무시되는 문제

CBOW모델에서는 (you, say), (say, you)라는 맥락을 똑같이 취급하기 때문에 맥락 안의 단어 순서가 무시된다.

 

문제3. 맥락의 단어 순서를 고려해도 매개변수가 증가

오른쪽처럼 맥락의 단어 벡터를 은닉층에서 concatenate하는 방식을 생각할 수 있는데, 이 방식은 실제 확률론적 언어 모델에서 사용된다. 그러나 이 경우 매개변수가 많이 늘어나게 된다. 

위 문제점들을 해결하기 위해 RNN이 등장한다.

5.2 RNN이란

RNN: Recurrent Neural Network

'Recurrent': 라틴어 '몇 번이나 반복해서 일어나는 일' -> RNN: 순환하는 신경망, 순환 신경망

5.2.1 순환하는 신경망

'닫힌 경로'가 있어야 데이터가 같은 장소를 반복해서 순환할 수 있다. -> RNN의 특징은 순환하는 닫힌 경로가 있다는 것이다. 

RNN을 구체적으로 살펴보자.

 

5.2.2 순환 구조 펼치기

순환구조를 펼치면 아래와 긴 신경망이 된다. 

각 계층에서 수행하는 계산은 아래와 같다.

RNN은 h라는 '상태'를 가지고 있으며, RNN 계층은 '상태를 가지는 계층' 혹은 '메모리가 있는 계층'이라고 한다.

5.2.3 BPTT

순환 구조를 펼친 후의 RNN에 순전파를 수행하고, 역전파를 수행하여 원하는 기울기를 구할 수 있다. RNN에서의 역전파는 '시간 방향으로 펼친 신경망의 오차역전파법'이라는 뜻으로 BPTT(Backpropagation Through Time)이라고 한다. 

이 BPTT를 이용해 RNN을 학습시킬 수 있지만, 먼저 긴 시계열 데이터를 학습할 때의 문제를 해결해야 한다.

시계열 데이터의 시간 크기가 커지는 것에 비례하여 BPTT가 소비하는 컴퓨팅 자원도 증가하고, 시간 크기가 커지면 역전파 시 기울기가 불안정해진다. 

5.2.4 Truncated BPTT

큰 시계열 데이터를 취급할 때 신경망 연결을 적당한 길이로 끊고, 이 잘라낸 작은 신경망에서 오차역전파법을 수행한다. 이를 Truncated BPTT 기법이라고 한다. 

Truncated BPTT는 순전파의 연결은 그대로 유지하고, 역전파의 연결만 끊는다. 

이제 Truncated BPTT 방식으로 RNN을 학습시켜보자. 가장 먼저 데이터를 RNN계층에 입력한다. 

먼저 순전파를 수행하고, 그다음 역전파를 수행한다. 이렇게 원하는 기울기를 얻는다. 이어서 다음 블록의 입력 데이터를 입력해 오차역전파법을 수행한다.

여기서도 마찬가지로 순전파를 수행한 다음 역전파를 수행하는데, 중요한 점은 이번 순전파 계산 때 앞 블록의 마지막 은닉 상태 h9를 가져온다는 것이다. 이렇게 순전파는 계속 연결된다.

같은 요령으로 다음 블록도 학습을 수행한다. RNN 학습의 흐름은 아래와 같게 된다.

5.2.5 Truncated BPTT의 미니배치 학습

-

5.3 RNN 구현

앞으로 할 구현의 흐름: 먼저 RNN의 한 단계를 처리하는 RNN이라는 클래스를 구현, RNN 클래스를 이용해 T개 단계를 한꺼번에 수행하는 계층을 TimeRNN이라는 이름의 클래스로 완성.

5.3.1 RNN 계층 구현

목표: RNN 한 단계를 처리하는 RNN 클래스 구현

RNN 순전파는 아래와 같다.

여기서 우리는 데이터를 미니배치로 모아 처리한다. 따라서 형상이 중요하다.

위를 바탕으로 RNN 클래스의 초기화와 순전파 메서드를 구현해보자.

RNN 역전파를 구현해보자.

 

5.3.2 Time RNN 계층 구현

Time RNN 계층: T개의 RNN 계층으로 구성됨

  • 초기화와 순전파

  • 역전파

5.4 시계열 데이터 처리 계층 구현

5.4.1 RNNLM 전체 그림

목표: RNN 사용한 언어모델 RNNLM 완성

  • 다음 단어를 예측하고 있다.
  • RNNLM 지금까지 입력된 단어를기억하고, 그것을 바탕으로 다음에 출현할 단어를 예측한다. 

5.5 RNNLM 학습과 평가

5.5.1 RNNLM 구현

5.5.2 언어 모델의 평가

5.5.3 RNNLM 학습 코드

  • 학습을 진행할수록 퍼플렉서티가 낮아진다.
  • 그러나 현재 모델로는 말뭉치에는 대응할 없다. -> 다음 장에서 개선

5.5.4 RNNLM Trainer 클래스

5.6 정리

  • RNN 순환하는 경로가 있고, 이를 통해 내부에은닉 상태 기억할 있다.
  • RNN 순환 경로를 펼침으로써 다수의 RNN 계층이 연결된 신경망으로 해석할 있으며, 보통의 오차역전파법으로 학습할 있다(=BPTT).
  • 시계열 데이터를 학습할 때는 데이터를 적당한 길이씩 모으고, 블록 단위로 BPTT 의한 학습을 수행한다(=Truncated BPTT).
  • Truncated BPTT에서는 역전파의 연결만 끊는다.
  • Truncated BPTT에서의 순전파의 연결을 유지하기 위해 데이터를순차적으로 입력해야 한다.
  • 언어 모델은 단어 시퀀스를 확률로 해석한다.
  • RNN 계층을 이용한 조건부 언어 모델은 (이론적으로는) 그때까지 등장한 모든 단어의 정보를 기억할 있다.
반응형

댓글