RNN

2 minute read

Basics of Recurrent Neural Networks (RNNs)

time step마다 있는 출력을 다음 step의 입력으로 넣게 된다. RNN의 hidden state vector가 출력값을 계산해줘야 한다. $y_t$는 마지막 time step에만 계산해야 하는 경우도 있다. 매 time step마다 결과를 출력해야 하는 경우엔 매번 step마다 $y$를 출력해야 한다. 모든 time step에서 동일한 값을 공유한다가 가장 중요한 특징 RNN의 hidden state는 하이퍼파라미터 fully connected layer - RNN $y_t$를 구하기 위해선 linear transfer matrix($W_\mathit{hy}$) * Outlayer($h_t$)

입력은 하나 출력은 여러개(Image Captioning) 입력은 이미지, 출력은 이미지에 대한 설명

입력이 첫 번째 time step에서만 들어가기 때문에 RNN은 매 time step마다 들어가기 때문에 동일한 RNN 모델에 0으로 채워진 같은 사이즈의 벡터나 행렬이 들어가도록 한다.

Types of RNNs

One-to-one

Standard Neural Networks

many to one

마지막 time step에서 출력 sentiment Classification (감정 분석) Sequence of text -> Positive / Negative

many to many

Machine Translation 마지막 time step에서 번역된 문장을 순차적으로 예측

Many to Many

delay가 전형 존재하지 않는 형태 입력이 주어질 때마다 예측 수행 단어 별로 문장 성분/품사 예측 video classification on frame level (비디오가 시간순으로 이루어진 이미지 프레임이라고 했을 때 어떤 장면인지 분류)

Character-level Language Model

character level의 사전 구축 유니크한 캐릭터를 중복 없이 모으기 word embedding에서 배운 것처럼 one hot vector로 표현 주어진 캐릭터의 시퀀스를 예측

time step마다 input char와 $h-1$을 선형 결합 $h_t$ = tanh($W_\mathit{hh}$*$h_t - 1$ + $W_\mathit{hh}X_t + b$)

$h_0$는 모두 0인 벡터 RNN이 실행되지 않은 상태에서 $h_t - 1$이 필요할 때.

회사의 주식 데이터를 모아 다음날의 주식 가격을 예측

Backpropagation through time (BPTT)

처리해야 하는 문장의 길이가 길어지면 한정된 GPU 메모리에 담기지 못 할 수 있기 때문에 Truncation, 제한된 길이로 학습시키는 방법을 사용

Hidden state 벡터의 각각의 차원 하나를 고정하고 그 값이 time step이 진행됨에 따라 어떻게 변하는지 분석하여 RNN의 특성을 분석할 수 있다.

특정한 dimension의 hidden state 노드가 각각 다르게 영향을 끼친다. 여러 dimension 중에 하나의 dimension에서는 값이 “에 따라 양수, 음수 상태가 유지되고, if 조건문에서만 양수가 유지되는 경우도 존재. 특정 차원이 해당 역할을 담당하는 노드, 셀

Vanilla(Fully connected RNN), original RNN을 사용했을 때는 Vanishing / Exploding Gradient 문제가 발생 여러 time step 전에 있던 정보를 원하는 경우 backpropagation이 적절하게 동작해야 하지만 $W_\mathit{hh}$가 반복적으로 반영되여 같은 수가 계속적으로 곱해지면서 gradient가 기하급수적으로 커지거나, 작아지는 패턴

Long short-Term Memory (LSTM)

$C_t$는 기억해야 할 필요가 있는 모든 정보를 담고 있는 벡터 $h_t$는 현재 time step에서 예측값을 내는 out layer의 입력으로 사용되는 벡터 해당 time step에 직접적으로 필요한 정보만을 담은, $C_t$가 가지는 많은 정보에서 당장 필요한 정보만을 filtering한 정보

$h_t$는 다음 RNN의 hidden state 벡터로 넘어감과 동시에 위로 올라가 현재 time step의 예측을 수행

Gated Recurrent Unit (GRU)

GRU는 LSTM의 모델 구조를 경량화하여 적은 메모리, 빠른 계산이 가능하도록 만들었다. LSTM에서 $C_t$, $h_t$로 두 개 존재했던 벡터를 일원화하여 $h$만 존재한다는 것이 특징 전체적인 동작 원리는 LSTM과 비슷 GRU의 $h_t$는 LSTM의 $C_t$와 비슷한 역할 수행 GRU에서는 input gate만 사용. forget gate는 (1 - input gate) 값을 사용

RNN에서처럼 $W_\mathit{hh}$를 계속적으로 곱해주는 연산이 아니라 전 time step의 cell state vector에서 그때그때 서로 다른 값으로 이루어진 forget gate를 곱하고, 필요로 하는 정보를 곱셈이 아닌 덧셈으로 만들어주어 gradient vanishing 문제가 사라짐

RNN은 다양한 길이를 가질 수 있는 sequence에 특화된 유연한 형태의 구조 RNN은 구조가 간단하지만 실제로는 많이 사용되지 않음 LSTM, GRU 많이 사용 cell state vector 또는 hidden state vector를 각 time step에서 업데이트하는 과정이 덧셈에 기반한 연산이기 때문에 gradient vanishing / explosion 문제를 피하고 long term dependencies 문제를 해결

Categories:

Updated: