- RNN은 sequential data를 다루기 위해 도입 되었다.
- sequential data : 데이터의 값 뿐만 아니라 데이터의 '순서'도 중요한 의미를 갖는 데이터
- 단어(h->e->l->l->o), 문장, 시계열 등
- input 값으로 x0가 들어온다.
- x0가 셀 A를 거쳐 output h0이 된다.
(2-2) Hidden state
- x0가 셀 A를 거쳐 다음 셀 A로 전달 된다.
- 앞에서 살펴본 RNN의 구조 덕분에, output h1, h2 등은 그 전 셀들의 값을 반영하게 된다.
- 모델이 데이터의 '순서'를 이해하게 된다.
- RNN의 셀은 하나이다. 따라서 모든 셀이 파라미터를 공유한다.
- 'h->e'가 입력 되었을 때 'h->e->l->l->o'를 예측하게 하기
- Input 값으로 'h'가 들어온다.
- 'h'가 셀 A를 거쳐 output 'e'가 된다.
2-2) Hidden state
- 'h'가 셀 A를 거쳐 다음 셀로 전달 된다.
- Input 값으로 'e'가 들어온다.
- 'e'가 셀 A를 거쳐 output 'l'이 된다.
4-2) Hidden state
- 'l'이 셀 A를 거쳐 다음 셀로 전달 된다.
- 셀을 어떻게 설계하느냐에 따라 복잡도가 달라진다.
- 셀은 기본적으로 함수 연산이다.
- ht = f(h(t-1), xt)
- '현재의 Hidden state'는 '이전 단계의 Hidden state'와 '지금 단계의 입력 값'의 함수 연산을 통해 output인 ht를 출력한다.
- ht = tanh(W(h)h(t-1) + W(x)x(t))
- '현재의 Hidden state'는 '이전 단계의 Hidden state'와 매트릭스 W(h)를 곱해주고, '지금 단계의 입력 값'과 매트릭스 W(x)를 곱해준 후 둘을 더한 다음, 활성화 함수 tanh를 통해 output인 ht를 출력한다.
- LSTM
- GRU
- 셀의 복잡도가 높아지면 좋은 성능을 낼 수 있지만, 거기에 도달하기 까지 많은 학습 자원이 필요하다.
- 즉, 셀의 복잡도가 높아질수록 학습율은 감소한다.
- RNN < GRU < LSTM
- RNN에 데이터를 어떤 형식으로 입력하고, 어떤 출력값들을 취하느냐에 따라 굉장히 다양한 작업을 할 수 있다!
- 입력 1 - 셀 1 - 출력 1
- RNN이라고 볼 수 없다. 일반적인 NN이다.
- 입력 1 - 셀 3 - 출력 3
- ex) Input으로 이미지가 들어가서, Output으로 이미지를 설명하는 문장(여러 단어로 구성)이 나온다.
- 입력 3 - 셀 3 - 출력 1
- ex) Input으로 문장(여러 단어로 구성)이 들어가서, Output으로 감정(단어)가 나온다.
- 입력 3 - 셀 5 - 출력 3
- 셀 5개가 내놓는 5개의 출력 값 중 3개만 취하고, 2개는 무시한다.
- ex) Input으로 문장(여러 단어로 구성)이 들어가서, 문장의 입력이 다 끝나면 Output으로 번역된 문장(여러 단어로 구성)이 나온다.
- 입력 3 - 셀 3 - 출력 3
- 셀 3개가 내놓는 3개의 출력 값 중 3개를 모두 취한다.
- ex) Input으로 비디오(여러 이미지로 구성)가 들어가서, 각 Input으로 이미지가 들어갈 때 마다 각 이미지를 분석한 출력값이 나온다.