Deep Learning

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

알 수 없는 사용자 2022. 5. 17. 20:24
728x90

RNN(Recurrent Neural Network)은 인공 신경망으로, 이름 답게 유닛간의 연결이 순환적 구조를 갖는 특징을 갖고 있다. 

RNN은 입력과 출력을 시퀀스 단위로 처리하는 시퀀스(Sequence) 모델로 순방향 신경망과 달리 내부의 메모리를 이용해 시퀀스 형태의 입력을 처리할 수 있다.

순방향 신경망은 입력층에서 출력층 한 방향으로 진행하지만, RNN은 은닉층의 노드에서 활성화 함수를 통해 나온 결과값을 출력층 방향으로도 보내면서, 다시 은닉층 노드의 다음 계산의 입력으로 보내는 특징을 갖고있습니다.

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

출처 : https://wikidocs.net/22886

은닉층 셀은 각 시점에서 바로 이전 시점에서의 은닉층 셀에서 나온 값을 자신의 입력으로 사용한다.

셀이 출력층 방향 또는 다음 시점의 자신에게 보내는 값을 은닉 상태(hidden state)라고 한다. 

출처 : https://wikidocs.net/22886

위 그림처럼 RNN은 입력과 출력의 길이를 다르게 설계 할 수 있어 다양한 용도로 사용할 수 있다.

출처 : https://wikidocs.net/22886
출처 : https://wikidocs.net/22886

RNN 수식은 위 사진과 같다.

은닉층 값을 계산하기 위해서는 주로 하이퍼볼릭탄젠트 함수(tanh)가 사용된다.

f는 비선형 활성화 함수 중 하나인데 이진 분류의 경우 로지스틱 회귀, 다중 분류의 경우는 소프트맥스 함수를 사용한다.

# 라이브러리 호출
# 모델 생성
from tensorflow.keras.layers import SimpleRNN
model.add(SimpleRNN(hidden_units))

# 추가 파라미터 사용
# model.add(SimpleRNN(hidden_units, input_shape=(timesteps, input_dim)))
# model.add(SimpleRNN(hidden_units, input_length=M, input_dim=N))

hidden_units = 은닉 상태의 크기. 셀이 다음 시점의 셀과 출력층으로 보내는 값의 크기(output_dim)와도 동일. 보통 128, 256, 512, 1024 등의 값을 가진다.
timesteps = 입력 시퀀스의 길이(input_length)
input_dim = 입력의 크기