본문 바로가기
딥러닝공부

Processing Sequences Using RNNs and CNNs

by 부자독개 2020. 5. 24.
반응형

이번 챕터에서는 리커런트 뉴럴 네트웍 RNN에 대해서 알아보겠습니다.

 

미래를 예측 할수 있는 네트웍입니다.

 

주식의 가격과 같은 타임 시리즈의 데이타를 분석할 수 있습니다.

 

이번 챕터에서는 RNN의 기본적인 개념과 RNN을 어떻게 훈련시키는지 타임시리즈 데이타를 예측하는데 어떻게 사용되는지 그리고 이 네트웍의 두개의 주요한 문제점에 대해 알아보도록 하겠습니다.

 

우선 짚고 넘어가야 할 점은 RNN이 시퀀셜 데이타를 다룰수 있는 유일한 뉴럴넷은 아니라는 점입니다. 

CNN 구조를 가지는 Wavenet 또한 많은 시간 스텝의 시퀀스를 다룰 수 있고 이에 대해서는 뒤에서 더 언급하도록 하겠습니다. 

 

Recurrent Neurons and Layers

저희는 지금까지 피드포워드 뉴럴 네트웍에 대해서만 얘기를 해왔습니다. 피드 포워드란 인풋에서 부터 아웃풋까지 한방향으로만 진행되는 것을 의미 합니다.

 

RNN의 가장 큰 특징은 피드백구조와 같이 아웃풋 단에서 다시 인풋으로 들억나는 구조라는 것입니다.

여기서 특정 시간 t에서의 입력을 x(t)로 아웃풋을 y(t)로 정의하고 들어 가겠습니다.

RNN은 항상 입력으로 두가지를 받게되는데 y(t)를 출력으로 내기 위해 입력 x(t)와 y(t-1) 2가지를 받게됩니다. 

단, 맨처음의 스텝에서는 이전 출력이 없기 때문에 이때는 일반적으로 0으로 초기값을 설정하게 됩니다. 

 

그림 15-1을 보게되면 타임스텝에 맞춰 리커런트 뉴런을 펼처 놓은것을 볼수 있는데 여기서 주의할점은 뉴런개수가 타임이 증가함에따라 증가하는것은 아니라는 점입니다. 

 

 

그럼 15-2는 이제 리커런트 뉴런의 개수를 늘린 레이어의 모습을 보여주고 있으며 이제부터는 인풋과 아웃풋 모두 벡터가 되게 됩니다.

 

각각의 뉴런들은 두개의 웨이트 셋을 가지게 됩니다. 인풋 x에 대한 wx, 아웃풋 y(t-1)에 대한 wy입니다. 각각의 뉴런대신 층으로 이것들을 바라보면 웨이트의 백터들의 행렬이 되게 됩니다. Wx, Wy.

 

식 15-1은 하나의 인스턴스에 대한 출력에 관한 식입니다.

 

파이는 액티베이션 함수로 ReLU에 해당합니다. b는 바이어스입니다.

 

식 15-2는 하나의 인스턴스 대신 미니 배치수만큼의 인스턴스들에 대한 출력을 한번에 계산하는 모습을 보여주고 있습니다.

 

Y(t) 는 (미니배치개수, 뉴런의개수)

X(t) 는 (미니배치개수, 인풋 피처의 개수)

Wx 는 (인풋 피처의 개수, 뉴런의 개수)

Wy 는 (뉴런의 개수, 뉴런의 개수)

b 는 (뉴런의 개수)의 형태가 되게 됩니다.

 

Memory Cells 

리커런트 뉴런의 경우 과거의 모든 입력값과 현재의 입력값으로 출력이 결정되기 때문에 메모리의 형태를 띈다고 말할 수 있습니다. 뉴럴넷에서 시간 스텝에 따른 특정한 상태를 보존하는 부분을 메모리 셀, 더 간단하게는 그냥 셀이라고 부릅니다.

 

싱글 리커런트 뉴런 혹은 싱글 레이어는 매우 베이직한 셀이기 때문에 짧은 패턴에 대해서만 학습할 수 잇습니다. 뒤에서 더 자세히 나오겠지만 좀더 복잡하고 강력한 셀을 가지는 구조에서는 훨씬 긴 패턴을 학습 할 수 있습니다.

 

메모리 셀의 상태를 h(t) = f(h(t–1), x(t))로 가르키며 지금까지는 y(t)와 동일하다고 봤으나 좀더 복잡한 구조의 셀에서는 꼭 동일하지 않으므로 주의해야 합니다. 

 

Input and Output Sequences 

시퀀스 투 시퀀스의 경우 과거 N days의 주식가격들을 입력으로 넣고 과거로부터 하루씩 쉬프트된 가격들을 예측하게 함으로써 하루 미래에 해당하는 주식의 가격을 예측하게 할 수 있다.

 

시퀀스 투 백터의 경우 다른 출력값들이 나오기는 하지만 무시를 하고 마지막 출력값만을 사용하는 것으로 영화 리뷰와 관련된 단어들을 집어넣고 마지막에 -1 ~ +1까지 좋은지 나쁜지에 대한 점수를 매길 수도 있다.

 

반대로 하나의 입력만을 넣고 나머지는 0으로 채운후에 여러개의 아웃풋을 다룰 수도 있다. 예를 들어 이미지 하나를 넣고서 그와 관련된 캔셥을 아웃풋으로 뽑아내는 것이다.

 

마지막으로 인코더 디코더를 다룰 수 있다. 한국어 문장을 입력으로 넣고 인코더를 통해 그 문장을 하나의 특성벡터로 추출해 낸다. 그 특성벡터를 디코더의 입력으로 넣어주면 다른 나라의 언어로 된 문장으로 바꿔줄 수 있다. 16장에서 더 자세하게 다룬다고 한다.

 

Training RNNs

Forecasting a Time Series

두개의 랜덤 사인파를 더하고 노이즈를 더한 데이타셋을 준비한다. 

트레인 벨리 테스트의 개수는 위와 같다. 

 

우선 학습을 하기에 앞서 베이스라인을 정해둔다. 두가지 방법으로 첫번째는 50번째의 벨류를 그대로 예측값으로 쓴다. 두번째는 풀리 커넥티드 레이어를 통해 선형 에측을 하는것이다. 각각 0.02, 0.004의 민스케워 에러를 보인다.

 

싱글뉴런의 싱글레이어인 RNN으로 학습을 시켜본 결과는 0.014로 마지막값을 그대로 사용한 경우보다는 좋고 풀리커넥티드보다는 좋지않은 모습을 보인다. 하지만 풀리커넥티드의 경우 51개의 파라미터가 사용되지만 RNN의 경우 인풋과 히든에 대한 각각 1개의 파라미터 뿐이라는 점을 고려하면 꽤 좋은 결과를 보인다고 할 수 있다.

 

Deep RNNs 

층을 더 쌓은 모델에서는 MSE가 0.003으로 기존 fully보다 더 좋은 모습을 보인다.

 

Forecasting Several Time Steps Ahead

반응형

댓글