reference
RNN (Recurrent Neural Network)
CNN을 포함한 피드 포워드 신경망(Feed Forward Neural Network)은 비순환 방향 그래프로서 정보는 오직 한 방향만으로 흐르며, 하나의 입력은 항상 동일한 출력값을 생성하게 된다.
또한 이전 상태에 대한 기억이나 시간에 대한 개념이 없다.
하지만 Recurrence는 이전 노드 또는 자기 자신 노드(현재 노드)에 다시 연결할 수 있으며, 시간과 이전상태를 기억한다.
은닉층의 메모리 셀은 각각의 시점(time step)에서 바로 이전 시점에서의 은닉층의 메모리 셀에서 나온 값을 자신의 입력으로 사용하는 재귀적 활동 진행한다. 즉, 현재 시점 t에서의 메모리 셀이 갖고있는 값은 과거의 메모리 셀들의 값에 영향을 받게 된다.
여기서 메모리 셀이 가지고 있는 값을 은닉 상태(hidden state)라 한다.
t 시점의 메모리 셀은 t-1 시점의 메모리 셀이 보낸 은닉 상태값을 t 시점의 은닉 상태 계산을 위한 입력값으로 사용한다.
RNN에 대해 수식으로 표현하면 다음과 같다.
Input sequence : $x = (x_1, ..., x_T)$
Hidden vector sequence : $h = (h_1, ..., h_T)$
Output vector sequence : $y = (y_1, ..., y_T)$
Hidden vector update function : $h_{t} = f(W_{x} x_{t} + W_{h}h_{t−1} + b)$
Output vector update function :$y_{t} = f(W_{y}h_{t} + b)$
(f() : activation function)
BRNN (Bidirectional Recurrent Neural Network)
BRNN(Bidirectional Recurrent Neural Network)은 RNN의 한계(이전 정보만을 사용하여 현재 상태 예측)를 극복하기 위해 개발된 모델이다.
RNN과 다르게 BRNN은 과거의 상태와 미래의 상태 모두를 사용하여 현재 상태를 예측한다.
BRNN은 기본적으로 두 개의 메모리셀을 사용하게 된다. (1. 과거의 은닉상태로 현재 은닉상태 계산, 2. 미래의 은닉상태로 현재 은닉 상태를 계산)
그런데, 여기서 문제가 발생한다.
RNN은 시퀀스의 길이가 길어질수록 Vanishing Gradients 문제가 발생할 가능성이 커지는데, 이는 BRNN에서도 마찬가지이다.
이를 해결하기 위해 나온 모델이 LSTM(Long Short-Term Memory)이다.
LSTM (Long Short-Term Memory)
우선, LSTM은 gradient의 정보를 보존할 수 있다. LSTM(Long short-term memory)로 구성된 Hidden Layer들은 오랜 기간에 걸쳐 정보를 저장하고 접근할 수 있다.
LSTM는 3개의 게이트(입력 게이트, 망각 게이트, 출력 게이트)로 구성되어 있다. 은닉층의 메모리 셀에 존재하는 각 게이트들은 불필요한 기억을 지우고, 기억해야할 것들을 정하게 된다.
입력 게이트(Input gate)는 새로운 정보가 셀 상태에 얼마나 많은 영향을 미칠지를 결정한다. (현재 상태를 저장하는 게이트)
망각 게이트(Forget gate)는 시간이 지남에 따라 셀과 셀 사이의 영향을 조절한다. (기억을 삭제하기 위한 게이트)
출력 게이트(Output gate)는 셀 상태가 다음 상태와 출력에 얼마나 많은 영향을 미칠지를 결정한다. (은닉 상태를 결정하는 게이트)
LSTM의 3개의 게이트
σ : sigmoid funtion
$W_{xi}, W_{xg}, W_{xf}, W_{xo}$ : weights from $x_t$ to gate
$W_{hi}, W_{hg}, W_{hf}, W_{ho}$ : weights from $h_{t-1}$ to gate
$b_{i}, b_{g}, b_{f}, b_{o}$ : bias
$$i_{t}=σ(W_{xi}x_{t}+W_{hi}h_{t-1}+b_{i})$$
현재 시점 t의 x 값과 입력 게이트 가중치 $W_{xi}$를 곱한 값 + 이전 시점 t-1의 은닉 상태가 입력 게이트 가중치 $W_{hi}$를 곱한 값을 더하여 sigmoid 함수를 지난다.
$$g_{t}=tanh(W_{xg}x_{t}+W_{hg}h_{t-1}+b_{g})$$
현재 시점 t의 x 값과 입력 게이트 가중치 $W_{xg}$를 곱한 값 + 이전 시점 t-1의 은닉 상태가 입력 게이트 가중치 $W_{hg}$를 곱한 값을 더하여 hyperbolic tangent 함수를 지난다.
$$f_{t}=σ(W_{xf}x_{t}+W_{hf}h_{t-1}+b_{f})$$
현재 시점 t의 x값($W_{xf}x_{t}$)과 이전 시점 t-1의 은닉상태($W_{hf}h_{t-1}$)가 sigmoid 함수를 지나면서, 0~1 사이의 값으로 바뀌는데, 이 때 0에 가까울 수록 정보가 많이 삭제, 1에 가까울 수록 정보를 유지하게 된다.
$$C_{t}=f_{t}∘C_{t-1}+i_{t}∘g_{t}$$
입력 게이트에서 구한 $i_{t}, g_{t}$의 entrywise product(같은 크기의 두 행렬이 있을 때 같은 위치의 성분끼리 곱하는 것)를 진행한다.
즉, 삭제 게이트($f_{t}$)는 이전 시점($C_{t-1}$)의 입력을 얼마나 반영할지를 의미하고, 입력 게이트($i_{t}$)는 현재 시점의 입력($g_{t}$)을 얼마나 반영할지를 결정하게 된다.
출력 게이트는 현재 시점 t의 x값과 이전 시점 t-1의 은닉 상태가 시그모이드 함수를 지난 값이다
이는 현재 시점 t의 은닉 상태를 결정하는 일에 쓰인다
$$h_{t}=o_{t}∘tanh(c_{t})$$셀 상태의 값 ($c_{t}$)이 tanh을 지나 -1~1 사이의 값이 되고, 해당 값은 출력 게이트의 값 ($o_{t}$)과 entrywise product를 진행하면서 은닉 상태가 된다. 이 때의 값은 다시 출력층으로 향하게 된다. ($o_{t}$의 식에 $W_{ho}h_{t-1}$ 존재)
'🤖 ai logbook' 카테고리의 다른 글
[NLP/자연어처리/Python] text classification 실습 (0) | 2023.07.08 |
---|---|
[NLP/자연어처리] BERT & GPT & ChatGPT (0) | 2023.07.05 |
[NLP/자연어처리] 트랜스포머(Transformer) (0) | 2023.07.04 |
[NLP/자연어처리] seq2seq 인코더-디코더 및 어텐션 모델 (Seq2Seq Encoder-Decoder & Attention Model) (0) | 2023.07.04 |
[cs231n/Spring 2023] Lecture 4: Neural Networks and Backpropagation (0) | 2023.07.01 |
[NLP/자연어처리] 정보 검색 & 단어 임베딩(Information Retrieval & Word Embedding) (0) | 2023.07.01 |
[NLP/자연어처리] 감정 분석 & 문장에 대한 확률 (Sentiment Classification & Probabilities to Sentences) (0) | 2023.06.29 |
[NLP/자연어처리] 언어 모델에서의 나이브베이즈 (Naive Bayes as a Language Model) (0) | 2023.06.28 |