일반적인 신경망은?
완전 연결 네트워크나 컨브넷처럼 대부분의 신경망의 특징은 메모리가 없다는 점이다.
피드포워드 네트워크
신경망에 주입되는 입력은 개별적으로 처리되며 입력 간에 유지되는 상태가 없다. 이런 네트워크로 시퀀스나 시계열 데이터 포인트를 처리하려면 네트워크에 전체 시퀀스를 주입해야 한다. 즉 전체 시퀀스를 하나의 데이터 포인트로 변환해야 한다. 예를 들어 IMDB 문제에서 영화 리뷰 하나를 큰 벡터 하나로 변환하여 처리했다. 이런 네트워크를 피드포워드 네트워크라고 정의한다.
순환 신경망
이와는 반대로 사람이 문장을 읽는 것처럼 이전에 나온 것을 기억하면서 단어별로 또는 한눈에 들어오는 만큼씩 처리할 수 있다. 이는 문장에 있는 의미를 자연스럽게 표현하도록 도와준다. 생물학적 지능은 정보 처리를 위한 내부 모델을 유지하면서 점진적으로 정보를 처리한다. 이 모델은 과거 정보를 사용하여 구축되며 새롭게 얻은 정보를 계속 업데이트 한다.
이러한 과정을 극단적으로 단순화시키면 순환신경망(RNN, Recurrent Neural Network)이 된다. 순환신경망은 시퀀스의 원소를 순회하면서 지금까지 처리한 정보를 상태(State)에 저장한다. 순환신경망이란 내부에 루프(Loop)를 가진 신경망의 한 종류이다.
순환신경망의 특징
순환신경망은 해당 네트워크에 입력되는 시퀀스(데이터 포인트)가 한 번에 처리되지 않는 다는 것이 다르다. 즉 RNN은 크기가 (timesteps, input_features)인 2D 텐서로 인코딩된 벡터의 시퀀스를 입력받는다.
이러한 시퀀스는 타임스텝을 따라서 반복된다.
1) 각 타임스텝 t에서 현재 상태
2) ((input_features, ) 크기의) 입력을 연결하여 출력을 계산한다.
다음 이러한 출력을 다음 스텝의 상태로 설정한다. 첫 번째 타임스텝에서는 이전 출력이 정의되지 않으므로 현재 상태가 없다. 이때는 에트워크의 초기 상태(initial state)인 0벡터로 상태를 초기화한다.
이러한 정리내용을 Pseudocode로 표현해보자.
state_t = 0
for input_t in input_sequence:
output_t = f(input_t, state_t)
state_t=output_t
댓글 없음:
댓글 쓰기