archive
[7주차 (1)] Sequential Model -RNN 본문
1. Sequential Model
- RNN 은 주어지는 입력 자체가 Sequential
- Sequential 데이터 -> audio, video, 손의 모션 등
-Sequential 데이터 처리의 어려움 -> 우리가 얻고자 하는 데이터의 출력값은 "하나의 라벨값"일 때가 많음, 그러나 이는 정의상 입력의 길이를 가늠할 수가 없음, 즉 입력의 차원을 예측 불가능
-따라서 CNN을 사용할 수 없음, 몇 개의 입력이 들어오든 입력의 차원과 상관 없이 데이터를 처리할 수 있는 모델이 필요해짐
-기본적인 Sequential 모델 : Naive Sequential Model, 입력이 들어올 때 다음의 입력값을 예측하는 것 ex) 언어 모델
-첫 번째 입력 벡터는 아무 것도 고려하지 않아도 됨, 두 번째 입력 벡터는 첫 번째 입력 벡터도 함께 고려, 세 번째 입력 벡터는 첫 번째와 두 번째 입력 벡터를 모두 함께 고려
-즉, 입력이 늘어날 수록 가장 마지막에 입력된 벡터가 고려할 사항이 많아지는 구조
- 가장 쉬운 모델 구현 : Autoregresive model, past timespan을 고정시키는 것, 과거의 몇 개만 보는 것
- ex) 과거의 다섯 개만 고려하겠다
-Markov model (first-order autoregressive model)
-Markov assumption을 가지는 모델, 가장 큰 특징은 내가 가정하기에 나의 현재는 과거에만 의존적이다라는 것
-많은 정보를 버릴 수밖에 없는 모델임
-가장 큰 장점은 joint distribution을 표현하는 것이 굉장히 쉬워진다는 것
-Latent autoregressive model
-과거의 많은 정보를 고려해야하는데 그럴 수가 없음, 따라서 중간에 hidden state 를 삽입하고 이 hidden state는 과거의 모든 정보를 요약해서 가지고 있음, 따라서 최신 input data는 이 hidden state를 고려하면 되는 원리
-이전의 과거 요소 그 자체들을 보는 것이 아니라 summarized 된 정보를 참고하는 것 (hidden latent state)
-어떻게 latent state를 만드느냐에 따라서 성능이 달라짐
2. Recurrent Neural Networks
- Sequential Model을 가장 쉽게 구현할 수 있는 방법이 RNN
- MLP랑 하나의 차이점 -> 자기자신으로 돌아오는 길이 존재, 따라서 X(t)는 t-1이전의 state에도 dependant하게 됨
-중요한 사실은 Recurrent 구조를 가진 모델을 시간 순으로 풀게 된다면, 이는 아주 많은 입력을 가지는 Fully current 모델로 표현할 수 있게 된다. 각각의 네트워크의 파라미터를 공유하는 하나의 큰 네트워크가 형성된다
-특징
-Short-term dependancies : 과거에 얻어진 정보들이 summarized됨, 따라서 아주 먼 과거의 정보들이 살아남기 어려운 환경이 조성되는 단점이 있음
-따라서 Long-term dependancy를 잡는 것이 굉장히 어렵다는 단점이 있다는 것
-RNN 학습 : 네트워크를 풀게 되면, timeline만큼 커지게 됨
-시그모이드를 activation function으로 사용하는 경우에 vanishing 정보가 죽어버려서 그 다음으로 정보가 안 넘어가게 됨
-ReLU를 activation function으로 사용하게 되면 exploding gradient로 네트워크가 폭발, 학습이 안 됨
3. Long Short Term Memory
-가장 기본적인, 이전에 살펴본 RNN 모델 구조
-tangent hyperbolic을 activation function으로 가지는 기본 구조
-위 모델이 LSTM, 즉 Long term dependancy 문제를 해결해줄 수 있는 모델이다.
-input value인 x가 일반적으로 언어 모델이라면 단어가 됨, x는 단어를 워드 임베딩을 통해서 벡터화시킨 값
-h는 hidden state에 반영될 값들, 마지막h는 최종 결과물
-Previous cell state : LSTM 밖으로 나가진 않음, 내부에서만 흘러가고 이것이 결과론적로 말하면 timestamp의 정보들을 모두 취합해주는 역할
-LSTM의 입력으로 들어가게 되는, 아래로 흐르는 화살표는 previous cell state에서 합산된 이전 결과들의 summary 값
-시그모이드가 3개
-gate를 위주로 LSTM을 이해하면 좋음, LSTM은 3개의 gate로 이루어져있음, 아래에서 각각의 gate들에 대한 설명이 이어짐
-LSTM의 가장 큰 아이디어 : 중간에 흘러지는 Cell state, 즉 요약된 정보 (컨베이어벨트와 같음)
-누적되는 정보들을 잘 manipulation, 다음번으로 넘기는 과정이 가장 큰 아이디어, 이를 바로 gate로 구현
- Forget gate: 어떤 정보를 버릴 것인지 결정하는 게이트
-현재의 입력과 이전의 아웃풋을 입력으로 받아서 f(t)를 제작, 이는 입력값들의 가중치를 고려한 activation function 의 연산값을 활용하여 결정하고 제작하게 된다.
-Input gate: 현재의 입력이 들어왔을 때, 얘를 무작정 올리는 것이 아니라, 현재 입력 내의 어떤 정보를 올릴지 결정해서 최종적으로 올릴지 결정하는 gate
-올릴 정보를 알아야 함, 이는 따로 학습된 NN을 통해서 C-tilda를 만들어냄, 즉 cell state 예비군과 적절히 조합된 i(t)를 배출
-Update cell : i(t)를 f(t) 만큼 버릴 건 버리고 c-tilda를 가지고 i(t)만큼 곱해서 combine한 것을 새로운 정보로 올림
-Output Gate : 궁극적인 cell state를 배출, LSTM은 이 정보를 한 번 더 조작, 어떤 정보를 배출할 것인지 선별하여 밖으로 output 정보로 배출
4. Gated Recurrent Unit
-파이토치 등 ML 툴을 활용하다 보면 크게 세 가지로 RNN 실행, (1) Vanilla RNN 가장 기본적인 RNN, (2) LSTM, (3) ㅎ껴
- GRU: 게이트가 두 개밖에 없음, reset gate와 update gate
-cell state가 없고 hidden state가 바로 있는 구조, 즉 아웃풋 게이트가 필요없어지고, 히든스테이트가 곧 아웃풋임
-reset gate 는 forget gate와 비슷한 역할을 하게 된다.
-같은 task에 대해서 LSTM을 활용할 때보다 GRU를 활용할 때 성능이 올라가는 case들이 많음
-파라미터가 LSTM보다 작음, 더 작은 파라미터 수로 동일한 아웃풋을 내게 된다면 generalized performance가 올라간다는 것의 관점에 입각
-요즘엔 transformer가 나오게 되면서 많이 사용되진 않음, transformer가 더 성능이 좋음
본 포스트의 학습 내용은 부스트클래스 <AI 엔지니어 기초 다지기 : 부스트캠프 AI Tech 준비과정> 강의 내용을 바탕으로 작성되었습니다.
'ML_AI > 네이버 부클 AI 엔지니어 기초 다지기 : AI Tech 준비과정' 카테고리의 다른 글
[7주차 (3)] Sequential Model - Transformer - 2 (0) | 2024.06.08 |
---|---|
[7주차 (2)] Sequential Model - Transformer - 1 (0) | 2024.06.07 |
[코드 리뷰 프로젝트] 2레이어 인공신경망 구현 백업 (0) | 2024.06.06 |
[코드 리뷰 프로젝트] 경사하강법 구현 백업 (0) | 2024.06.06 |
[6주차 (4)] 최적화 - 2 (0) | 2024.06.02 |