부스트캠프 AI Tech/DL Basic
[DL Basic] 07. Sequential Models - RNN
Angie
2022. 4. 25. 23:47
- summaryRNN은 short term dependency는 좋지만 long term dependency 나쁨 → LSTM이 등장GRU은 게이트 2개→parameter개수 줄어듦, LSTM보다 성능 good
- LSTM은 게이트 3개
- Sequential 모델이 뭐야?
Sequential Model
- 일상생활의 대부분 data
- 어려움
- 얻고싶은 건 하나의 라벨일 때가 많음
- 길이가 언제 끝날 지 모름 → 입력의 차원을 알 수 없음
Naive sequence model
- 입력이 들어왔을 때 다음번 예측
- 고려해야하는 vector의 수 점점 늘어남

Autoregressive model
- fix the timespan
- 과거에 볼 것 개수 고정

Markon model (first-order autoregressive model)
- 강화학습 MDP
- 내가 가정을 하기에 나의 현재는 과거에만 dependent
- 과거는 바로 이전 과거
- 내일의 수능 점수는 오늘 공부한거에만 dependent?
- 많은 정보를 버리게 됨
- joint distribution 표현이 굉장히 쉬워지는 장점

Latent autoregressive model
- hidden state가 과거의 정보를 summarize
- 다음 step은 hidden state 하나에만 dependent

Recurrent Neural Networks
- mlp와 같지만 자기 자신으로 돌아오는 구조 추가
- time step $t$에서의 $H_t$(hidden state)는 $X_t$에만 dependent 한 것이 아니라 이전 $t-1$에서 얻어진 state에 dependent

- RNN: 시간 순으로 푼다
- 내가 지금 time step $t$에서 보고 있는 건 $t-1$에서 전달된 정보
- 결국 입력이 굉장히 많은 fully connected layer로 표현가능
- time step을 fix하고 시간 순으로 풀게 되면 결국에는 각각의 네트워크의 parameter가 share하는 굉장히 input이 큰 네트워크 하나가 됨
Short-term dependencies
- 단점
- 과거에 얻어지는 정보들이 미래까지 살아남기가 어려움

Long-term dependencies
- 위의 단점을 극복하고자 LSTM이 등장!

- 네트워크를 풀게 되면 굉장히 크기가 커짐

- $W$, $U$: weight
- $\phi$ : nonlinear activation function
- 중첩되는 구조
- 똑같은 weight를 곱하고 nonlinear를 통과시킴
- if $\phi$가
- sigmoid라면? (0~1)
- 정보가 계속 줄어듦
- vanishing gradient
- ReLU라면?
- exploding gradient
- sigmoid라면? (0~1)
Long Short Term Memory
- Recurrent Neural Network
- $x$가 어떤 network를 통과해서 weight를 곱하고 그다음에 이전에서 나온 cell state를 합쳐서 concat 한 다음에 network를 통과해서 weight를 곱하고 nonlinear를 거쳐 나오는게 output, 다시 다음번에 들어가게 됨

- Long Short Term Memory
- Long Term dependency


- input: 단어. word embeding
- output: hidden state
- previous cell state: 내부에서만 흐름, 정보를 summarize
- previous hidden state: previous output
- 입력: previous hidden state + previous cell state, time step $t$번째 입력
- $\sigma$: gate들. 3개있다
Forget Gate
- Decide which information to throw away

- 입력: $x_t$ (현재 입력), $h_{t-1}$(이전의 output)
- $\sigma$(sigmoid)를 통과하기 때문에 $f_t$는 항상 0~1사이의 값을 가짐

Input Gate
- Decide which information to store in the cell state


- $i_t$: 어떤 정보를 저장할까?
- 이전에 previous hidden state와 현재 입력 $x_t$를 가지고
- cell state candidate
- 이전의 cell state와 현재 입력이 들어와서 다른 뉴럴 네트워크를 통해 하이퍼볼릭탄젠트를 통과해서 나오는 모든 값 (-1~+1) 정규화
- 현재 정보와 이전 출력 값을 가지고 만들어지는 cell state 예비군

Update cell
- update the cell state


- $f_t$(forget gate)만큼 이전 $C_{t-1}$을 곱하여 버릴 건 버리고
- $\tilde C_t$를 가지고 $i_t$만큼 곱해서 어느 값을 올릴 지 정해서
- 두 값을 combine 한 것을 새로운 cell state로 업데이트
Output Gate
- Make output using the updated cell state
- 어떤 값을 밖으로 내보낼지



- outputgate를 곱하여 next hidden state로 흘러가게 됨
Gated Recurrent Unit

- Simpler architecture with two gates (reset gate and update gate)
- reset gate $\approx$ forget gate
- No cell state, just hidden state
- hidden state가 곧 output, 다음번 input도 얘!