RNN (순환신경망)

마팍·2021년 4월 27일
0

RNN (Recurrent Neural Network): 순환신경망

1. 정의

Rucurrent란 '재발한다', '주기적으로 일어난다', '순환한다' 라는 뜻이다.
순환한다는 뜻은, 어느 한 지점에서 시작한 것이, 시간을 지나 다시 원래 장소로 돌아온다는 뜻이다. 그러하기 위해선 '닫힌 경로'가 필요하다. 경로가 사방으로 열려있으면 순환한다는 것이 불가능할것이다. 닫힌 경로, 즉, 순환하는 경로가 있어야 데이터가 같은 장소를 왕래할수있다.

이것이 바로 RNN의 특징이다. 순환하는 경로를 따라 데이터가 끊임없이 순환되기 때문에 과거의 정보를 기억하는 동시에 최신 데이터로 갱신될 수 있다.

아래의 그림을 살펴보자.

RNN은 위와같은 경로를 따라 데이터를 계층 안에서 순환시킬 수 있다.
Input Data Xt에서 t는 시각을 뜻한다. 이는 시계열 데이터 (X0, X1,...,Xt)가 RNN계층에 입력됨을 표현한 것이다. 그리고 그 입력에 대응하여 ht가 출력된다.

화살표를 따라가보면 출력이 2개로 분기되는것을 볼 수 있다. 여기서 말하는 분기란 같은 것이 복제되어 분기함을 의미한다. 그리고 이렇게 분기된 출력 중 하나가 자기 자신에 입력된다.

2. 순환 구조 펼치기


뭔가 복잡해보여도 간단하다.
5-6의 그림을 시계열에 따라 펼친것을 표현한것 뿐이다.
X0이 RNN을 거쳐 h0로 출력되면, 그 출력값은 다시 RNN으로 입력되고 X1과 섞여 h1이 기록되는 과정이 t번 반복되는 것이다.

위 그림을 공식으로 표현하면 아래와 같다.

W는 가중치(Weight)를 뜻한다. 공식을 보면 가중치값이 2개: Wh와 Wx가 있는 것을 확인할 수 있다.
Wx는 X를 받아 출력 h로 변환시키기 위한 가중치이고,
Wh는 RNN의 출력을 다음 시각의 출력으로 변환시키기 위한 가중치이다. (b는 편향, 즉, bias다.)

위의 식은 행렬 곱을 계산하고, 그 합을 tanh함수를 이용해 변환한다. 그 결과가 시각 t의 출력 ht가 된다. 이 ht는 다른 계층을 향해 위쪽으로 출력됨가 동시에, 다른 시각의 RNN계층을 향해 오른쪽으로 출력된다.

그런데 이 식을 보면, 현재의 출력(ht)은 직전의 출력(ht-1)에 기초해 계산됨을 알 수 있다. 다른 관점으로 보면, RNN은 h라는 '상태'를 가지고 있으며, 위의 식의 형태로 갱신된다고 해석할 수 있다. 그렇기 때문에 RNN계층을 '상태를 가지는 계층' 혹은 '메모리가 있는 계층'이라고 한다.

3. BPTT (Back Propagation Through Time)

위에서 봣듯이 RNN 계층은 가로로 펼친 신경망으로 간주할 수 있다. 따라서 RNN의 학습도 보통의 신경망과 같은 순서로 진행할 수 있다.

하나의 RNN안에서 순환을 하더라도 옆으로 시계열을 따라 펼쳐놓으면 결국 일반적인 신경망과 비슷하므로 일반적인 오차역전파를 적용할 수 있다. 여기서의 오차역전파법은 '시간 방향으로 펼친 신경망의 오차역전파법'이라는 뜻으로 BPTT라고 한다.

4. Truncated BPTT

Truncate는 "길이따위를 자르다, 줄이다" 라는 뜻이다. 그럼 TBPTT는 잘린 BPTT라는 뜻이다.
TBPTT는 큰 시계열 데이터를 취급할때 쓰인다. 너무 길어진 신경망을 적당한 지점에서 잘라내어 여러개의 신경망으로 만든다는 아이디어다. 그리고 잘라진 신경망에서 BPTT를 수행한다.

TBPTT는 잘라진 순서대로 입력해 학습한다.

profile
데린이입니다.

0개의 댓글