관련 용어
- 시퀀스
- 어떤 순서를 갖고 있는 데이터
- 예: 시계열 time series, 자연어 NL
- 메모리셀
- 타임 스텝에 걸쳐 어떤 상태를 보존하는 신경망의 구조
기본적인 신경망은 은닉층에서 활성화함수를 지나 나온 값은 출력층 방향(다음 은닉층 또는 출력층)으로만 향했다. 이런 형태의 신경망을 피드포워드 신경망 Feedforward Neural Network 라고 부른다.
그러나 RNN(Recursive Nerual Network)의 경우 활성화 함수를 지나 나온 값이 출력층 방향(다음 은닉층 또는 출력층)으로 보내짐과 동시에 다시 원래의 은닉층 계산의 입력값으로 보내지는 특징을 가지고 있다
이러한 특징 때문에 시퀀스 데이터를 다루기 위해선 RNN 계열 모델을 활용해야 한다
용어 정의
- 현재 시점
- 은닉 상태 값
- : 입력층의 가중치 행렬
- 이전 시점 의 가중치 행렬
- : 비선형 활성화함수
개념 정의
- 은닉층 :
- 출력층 :
- 를 계산할 때 주로 하이퍼볼릭 탄젠트 함수를 사용한다
각 벡터와 행렬의 크기
-
-
-
-
-
SimpleRNN
(둘중 하나로 표기)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
)와도 동일. RNN의 용량(capacity)을 늘린다고 보면 되며, 중소형 모델의 경우 보통 128, 256, 512, 1024 등의 값을 가진다.timesteps
= 입력 시퀀스의 길이(input_length
) 또는 시점의 수input_dim
= 입력의 크기(RNN 레이어로 한번에 들어가는 데이터의 갯수)(batch_size, timesteps, input_dim)
의 3D 텐서를 입력으로 받는다return_sequences=False
를 택하면 마지막 시점time step
에 대한 은닉 상태값만 출력된다RNN는 비교적 짧은 시퀀스sequence에 대해서만 효과를 보인다. 그 이유는 바닐라 RNN의 time step이 길어질수록, 앞의 정보가 뒤로 충분히 전달되지 못하는 현상이 발생되기 때문이다
LSTM은 은닉층 메모리셀에 입력,망각,출력 게이트를 추가하여 불필요한 기억을 지우고 기억할 것을 정하는 기능을 추가한 RNN이다.
삭제 게이트 forget gate
- 는 과거 정보를 얼마나 기억할 것인지 결정하는 게이트다. 시그모이드 함수의 출력 범위는 0 ~ 1 이기 때문에 그 값이 0이라면 이전 상태의 정보는 잊고, 1이라면 이전 상태의 정보를 온전히 기억하게 된다
- 수식
-
입력 게이트 input gate
- 는 현재 정보를 얼마나 기억할 것인지 결정하는 게이트이다. 이 값은 시그모이드 이므로 0 ~ 1 이지만 hadamard product를 하는 는 hyperbolic tangent 결과이므로 -1 ~ 1 이 된다. 따라서 결과는 음수가 될 수도 있다.
- 수식
-
-
셀 상태 cell state
- 수식
출력 게이트 output gate
- 최종적으로 얻은 cell state를 얼마나 출력시킬지 결정하는 게이트이다
- 는 최종 결과 를 위한 게이트이며, cell state의 hyperbolic tangent를 hadamard product한 값이 LSTM의 최종 결과가 된다.
- 수식
-
-
레퍼런스
- 아다마르곱 hadamard product/component-wise product
- 같은 크기의 행렬 이 있다고 하자
- 일때