반응형
Sequential Model
- 시퀀셜 데이터는 인풋의 길이가 정해지지 않아서 차원을 정해놓기가 어렵다.
- 따라서, 몇개의 입력데이터가 들어오는지 상관없이 모델은 작동을 해야함
- 만약에 이전의 데이터를 바탕으로 다음의 데이터를 예측해본다하자.
- 첫번째 데이터는 아무것도 고려못하고, 2번째는 첫번째거를, 세번째는 1,2번째를 등등 나아갈수록 고려해야하는 데이터가 점점 많아짐
- Autoregressive Model
- 과거에 볼 데이터의 길이를 정해두는 것!
- Markov model
- 내가 가정을 하기에 나의 현재는 과거에만 의존한다는 것. 이때 과거는 바로 직전
- 실제로는 말이안됨. 오늘이 수능이면 전날 공부한 것에만 의존한다?
- 이는 많은 정보를 잃게 됨. 하지만 joint distribution을 설명하기에 엄청 쉬워진다(나중에 더 설명할 예정)
- Latent autoregressive model
- 과거의 모든 정보를 고려할 수 없으니 중간에 hidden state(과거의 정보를 요약한것)를 넣어둠
- 다음번 timestep은 이전의 hidden state만 고려하면 됨
Recurrent Neural Network
- MLP랑 다 같지만 추가로 자기자신으로 돌아오는 구조가 하나있음.
- timestamp t에서 hidden state는 x_t에만 의존적인 것이 아니라 t-1의 cell_state에도 의존적임
- rnn의 recurrent 구조는 시간순으로 보면 입력이 굉장히 많은 fully connected layer로 표현할 수 있다.
- 각각의 네트워크가 파라미터를 공유하는 하나의 네트워크로도 볼 수 있다.
- short-term dependencies
- 과거의 정보가 다 취합해서 미래에 고려해야하는데 rnn은 하나의 fixed rule로 정보들을 취합하기 때문에 과거의 정보가 미래까지 살아남기가 어렵다. 그래도 최근정보까지는 반영이 가능
- 그래서 rnn은 short-term dependencies는 잘 잡을 수 있다. 하지만, long-term dependencies는 너무 이전의 결과이기 때문에 잘 잡지 못한다.
- h_0에서 h_4까지 가게 되면 중첩되는 구조가 들어가있다. 똑같은 구조를 계속 통과시키게 됨
- 여기서 시그모이드를 추가하게 되면 계속 같은 값을 사용하는게 아니라 값을 작게 바꿔버릴 수 있음. 계속 작게 바꿔버리면 값이 죽어버림(vanishing)
- 활성화함수에서 시그모이드인 경우 vanishing 문제(정보가 죽어버림) , relu일 경우 weight를 곱하는게 계속 반복되기 때문에 exploding gradient(학습할때 네트워크 폭발)하여 학습이 불가함.
- 이러한 이유로 rnn을 할때 relu를 잘 안씀
Long Short Term Memory(LSTM)
- X_t : 입력(언어모델이라면 단어가 될 것임. 단어를 5만개를 쓴다면 embedding된 벡터일수도)
- H_t : 아웃풋,hidden state(아웃풋을 적용해서 다음번 단어의 확률를 찾겠다하면 언어모델일 것임)
- Previous cell state : 지금까지 t-1까지의 입력정보를 summarize한 것
- Previous hidden state : 지금까지 t-1까지의 출력정보를 summarize한것
- Previous hideen state, Previois cell state, input 세 개가 입력값으로 작용함.
- 나가는 것도 3개로 보이지만 실제로는 t의 hidden state 하나
- Forget gate, input gate, output gate 총 3개의 게이트를 가지고 있음
- cell state가 중요하다(timestep t까지의 입력정보를 summarize한 것)
- Forget Gate : 어떤 것을 잃어버릴지 선택하는 게이트
- 시그모이드를 사용하기에 0~1사이의 값을 가짐
- f_t는 이전의 cell_state에서 어떤 것을 버릴지 정함
- Input Gate : 현재의 입력에서 어떤 정보를 올릴지 말지 정함
- i_t는 이전의 pre_hidden state와 현재 입력 중에 어떤 정보를 추가할지
- C_t는 이전의 pre_cell state와 현재 입력 중에 다른 네트워크를 통해 tanh를 통과해서 나오는 -1~1 사이의 값(input과 pre_hidden state를 통해 만들어지는 cell state의 예비후보!)
- Update cell : 버릴건 버리고 변환된 어느값을 올릴지 선택하는 cell(새로운 cell로 업데이트함)
- Output gate : update cell을 조작하여 어떤 값을 밖으로 내보낼지 정함
GRU(Gated Recurrent Unit)
- 2개의 gate만으로 lstm과 비슷한 기능을 수행함
- cell_state가 없고 hidden_state와 input만 존재
- 적은 파라미터로 동일한 아웃풋을 내면 일반화 성능이 올라가기에 gru가 더 뛰어나다는 견해가 있음(하지만 transfomer가 더 잘됨)
본 내용은 네이버 커넥트 재단의 교육 컨텐츠를 참고하였습니다.
반응형
'Study > AI' 카테고리의 다른 글
[AI] 추천시스템 기초 (0) | 2023.04.02 |
---|---|
[AI] 다양한 최적화 방법 (0) | 2023.03.26 |
[AI] Convolutional Neural Networks(CNN) (0) | 2023.03.26 |
[Pytorch] 모듈과 데이터셋 + 데이터로더 (0) | 2023.03.19 |
[Pytorch] 파이토치 기초 (0) | 2023.03.19 |