부스트캠프 AI Tech 5기 최성준 교수님의 강의를 바탕으로 작성하였음.
sequential data
문장, 대화, 동영상 등 순서나 시간의 개념이 존재하는 data를 말한다.
이러한 sequential data를 처리하기 위해서는 어떤 모델이 필요할까?
우선 이전에 배웠던 CNN의 경우, 고정적인 input, output size를 필요로 한다. 그러나 대화, 음성 등의 sequential data는 매 입력의 길이가 다를 것이다. 또한 CNN에서는 순서 정보를 고려하지 않기 때문에, CNN으로 이러한 sequential data를 처리하는데에는 한계가 존재한다.
sequential model
data의 순서 정보를 고려하려면 다음과 같이 timestep t에서의 ouput을 고려하기 위해 이전에 들어왔던 모든 input을 고려하는 sequntial model이 필요하다.
Autoregressive model
Autoregressive mdoel의 경우 고려할 과거 정보의 개수를 지정한다. (현재로터 N개의 이전 정보만 고려)
Markov model
first-order autoregressive model이라고도 한다.
나의 현재는 바로 전 과거에만 dependent하다는 가정을 갖고 시작한다.
물론 말이 안되는 가정이다. ( 내 수능 점수는 수능 전날 공부량에만 영향을 받는다??)
그러나 이 가정으로 인해 joint distribution 계산이 매우 편해진다.
$$ P(x_1,x_2,...,x_T)=P(x_T\mid x_{T-1})P(x_{T-1}\mid x_{T-2})\cdot \cdot \cdot P(x_2\mid x_1)P(x_1) = \prod_{t=1}^{T}P(x_T\mid x_{t-1}) $$
Latent autoregressive model (LARM)
markov의 경우 계산상의 이점은 크지만 이전의 많은 정보들을 무시하고 바로 전 단계의 input만을 고려하므로, 정보 손실이 크다는 단점이 존재한다.
이러한 정보 손실을 막기 위해 과거의 정보들에 대한 summarize를 담고 있는 hidden state를 추가한 Latent autogressive model의 구조를 알아보자.
latent autoregressive model에서 output xhat은 과거 어떤 특정 시점의 state가 아니라, 과거의 정보들을 summarize하는 hidden state(Latent staet)에 의존한다.
RNN : Recurrent Neural Network Model
현재 input과 이전 hidden state를 이용해서 현재의 hidden state를 update하고 ouput을 출력한다.
식으로 표현하면 아래와 같다.
$$h_t = \varnothing (W^{T}h_{t-1}+U^Tx_t) $$
RNN의 단점은 Long-term dependency를 가져가지 못한다는 것이다.
위에서 나타낸 식을 확장해보면,
위와 같이 거리가 가까운 h1, h0의 경우 activation function을 한 번만 거치므로 정보가 많이 살아남지만, h4와 h0에서는 4 layer를 거쳐야 하고, 이 때문에 정보가 상대적으로 많이 변형(소실)된다.
이러한 문제를 보완할 수 있는 모델이 바로 아래의 LSTM이다.
LSTM : Long Short Term Memory
RNN의 특별한 한 종류로, 위에서 살펴본 vanilla RNN의 long tterm dependency 문제를 해결하기 위해 고안된 모델이다.
hidden state만 이용해 output을 냈던 기존 모델과 달리 Cell state를 추가로 가진다.
이 Cell state가 LSTM의 핵심 아이디어인데, cell state는 컨베이어 벨트와 같이 모듈 내에서 작은 Linear interaction만을 적용시키면서 흘러간다. 따라서 정보가 전혀 바뀌지 않고 그대로 흐르게 할 수도 있다. (정보 소실의 문제 해결)
이 cell state에 정보를 추가하고 없애는 것은 gate 구조에 의해 제어된다.
전체적인 구조 : 3개의 입력, 3개의 출력을 갖는 구조이다.
이전 cell state, 이전 hidden state, 현재 Input을 이용해 다음 cell state와 다음 hidden state를 update하고, output을 출력한다.
위에서 hidden state는 과거 정보를 summarize 한다고 했었다. 여기서도 마찬가지의 역할을 하고, next hidden state가 곧 Output이다.
cell state는 hidden state처럼 output이 되어 밖으로 나가지 않고 내부에서만 전달된다. 이전 정보를 기억하며 새로운 정보를 추가로 취합한다.
LSTM의 3가지 gate 구조에 대해 알아보자.
1. Forget gate : 이전 정보들 중 얼마나 잊을지(forget 할 지) 결정하는 Gate
$$f_t = \sigma (W_f\cdot [h_{t-1}, x_t]+b_f)$$
이전 hidden state와 현재 input x를 이용해 forget_t 를 계산한다. 시그모이드 값을 통과했으므로 0에서 1사이 값이 될 것이다. 이 값은 이전 cell state와 곱해진다,
즉 이전 cell state를 얼마나 "forget"할 지 결정하는 값인데, 만약 이 값이 0이라면 c_t-1*0=0이 되어 이전 cell state는 하나도 기억되지 못하고, 1이라면 c_t-1은 그대로 전부 전달될 것이다.
2. Input gate : 새 정보중 얼마나 Cell에 누적할지 결정하는 Gate
$$i_t = \sigma(W_f\dot[h_{t-1},x_t]+b_f) $$
$$\widetilde{C}_t = tanh(W_C\dot[h_{t-1},x_t]+b_C)$$
이전 hidden stae(과거 정보)와 현재 input을 취합해 tanh layer를 거쳐 새로운 cell state 후보를 만든다.
i_t는 이 후보 cell state값을 얼마나 cell state에 전달할지 결정한다.
3. Output gate : 무엇을 output으로 내보낼지 결정
$$O_t = \sigma(W_O[h_{t-1},x_t] +b_O)$$
$$h_t = O_t*tanh(C_t)$$
들어온 입력을 취합해 sigmoid를 거쳐 output을 결정한다.
이 output과 cell state를 tanh layer에 넣어 만든 값을 곱해 우리가 원하는 부분을 output으로 내보낸다.
GRU : Gated Recurrent Unit
LSTM의 변형 모델으로, forget gate와 input gate를 하나의 "update gate"로 합치고, hidden state와 cell state를 합치는 등 Long term dependency를 가져가면서도 LSTM보다 더 단순한 구조를 갖는다.
더 단순한 구조, 즉 적은 파라미터로 같은 성능을 낼 수 있으므로 Generalize performance가 좋다.
$$z_t = \sigmoid(W_z[h_{t-1},x_t])$$
$$r_t = \sigmoid(W_r[h_{t-1},x_t])$$
$$\widetilde{h_t} = tanh(W\cdot [r_t*h_{t-1},x_t])$$
$$h_t = (1-Z_t)*h_{t-1}+z_t*\widetilde{h_t}$$
'Boostcamp v5' 카테고리의 다른 글
Docker 실습 01 (0) | 2023.06.03 |
---|---|
[week05] cGAN 실습 (0) | 2023.04.08 |
[week04] ResNet34 실습 (0) | 2023.04.01 |