✅RNN(Recurrent Neural Network)
- 시계열 데이터를 처리하기에 좋은 뉴럴 네트워크
시계열 데이터: 시간 순서에 따라 관측된 데이터
- 예) 음성 인식, 음악 생성기, DNA 염기서열 분석, 번역기, 감정 분석
- CNN이 이미지 구역별로 같은 weight(가중치)를 공유한다면, RNN은 시간 별로 weight를 공유한다. 즉, 과거와 현재는 같은 weight를 공유한다.
✅First Order System
- 현재 시간의 상태가 이전 시간의 상태와 관련이 있다고 가정한다.
- X : 상태(시세, 날씨, 점수)
t : 시간 → Xt : t일 때의 상태
- x0 → x1 → x2의 경우, x0이 x2에 직접 영향을 미치는 것은 아니다.
- 이 시스템은 외부 입력 없이 자기 혼자서 돌아간다 : autonomous system

- 현재 시간의 상태(Xt)가 이전 시간의 상태(Xt-1)와, 현재의 입력(ut)에 관계가 있는 경우
상태: x 입력: u

외부 입력이 있는 시스템도 있다. 이것도 first order system이라고 한다.
✅First Order System의 State-Space Model

- Xt를 관측 가능한가? 모든 시간 t에서 모든 상태 Xt가 관측 가능한가? → 일부만 관측 가능하다.
- 각 시간에서 관측 가능한 상태만 모은 것: 출력(output) yt



- 어떤 시스템을 해석하기 위한 3요소: 입력(u), 상태(x), 출력(y)

- RNN과 ANN의 가장 큰 차이 : 셀프 피드백이 있고 없고의 차이
✅State-Space Model as RNN

- 상태 Xt가 의미하는 것은: hidden layer의 state
- 앞의 그림에서 상태 Xt는 이전까지의 상태와 이전까지의 입력을 대표할 수 있는 압축본'이라고 할 수 있다'.
- 상태 Xt는 시계열로 들어오는 입력들을 '최대한 상세히 표현할 수 있어야 한다'.


hidden state를 거치게 해서
마지막 state에서 I, like에서 오는 정보도 와서 압축본이라고 할 수 있다고 한 것.

second order는 전전 상태의 것도 영향을 주지만 RNN에서는 잘 사용하지 않는다.

우리는 함수 f와 h를 근사하기 위해서 뉴럴 네트워크를 사용한다.

아래 구조는 잘 기억해 두자

이때, 초기 조건(X0)이 필요하다. 초기 조건은 랜덤하게 또는 제로로 해주면 된다.
✅RNN: Training
- ANN, CNN에서처럼 back-propagation(역전파)을 이용한다.
- Back-propagation through time(BPTT)라고 한다고 알아두기
✅RNN: Problem Types
- many-to-many 번역. 잘 사용하지는 않는다.
- many-to-one 예측 I like eating 다음 pizza 예측
- one-to-many 생성 I 주면 이후 문장 만들기
- Sequence-to-sequence(seq2seq) = many-to-one + one-to-many


- 셀프 피드백 룹이 여러 개 될 수도 있지만 학습 시간이 늘어나기에 정해야 하는 하이퍼파라미터 중 하나이다.
출처 : 메타코드M '딥러닝 자연어처리 RNN 개념을 30분안에 정리해드립니다ㅣ서울대 AI박사과정'
https://www.youtube.com/watch?v=Hn3GHHOXKCE