
RNN층은 기본적인 신경망의 은닉층(hidden layer)과 유사하다고 볼 수 있음.

차이점은 기본적인 은닉층엔 입력값이 한 번만 적용. 반면, RNN층은 하나의 RNN층이 순차적으로 입력되는 데이터에 반복(순환) 적용.
RNN은 순차적으로 입력되는 데이터를 분석하기에 적합한 알고리즘.

현재 단계에서 입력되는 data를 처리하기 위해, 전 단계에서 입력된 데이터들의 정보를 사용.
1) RNNs read input sequesce one by one
2) RNNs maintain an internal state, representing the semantics of input sequence processedso far
> step1. my
> step2. my name
> step3. my name is
....
Why?
예, my name is jaegyeong
다른 신경망과 같이 RNN에 입력되는 단어들 또한 저차원 벡터(dense vector)로 변환한 뒤 입력.
임베딩된 각 단어들의 정보가 순차적으로 RNN층에 입력.//
- 'my'의 벡터 정보(예, [1, 2, 0, 0 ... 2]가 RNN에 입력.
- 만약 예시 문장인 my name is jaegyeong의 단어들이 각각 10차원 벡터로 표현되었다면, input layer의 node 수는 10개.
- 여기서 input layer에 존재하는 10개의 node에는 my의 백터가 갖는 각각의 원소값이 들어가는 것
- RNN층(은닉층 중 하나라고 생각하면 편함)의 node 갯수는 사용자가 설정.
RNN층의 n개의 node에서 출력된 각각의 값들은 다음 층(hidden layer 또는 output layer에 바로 전달되는 것이 아님. name, is, jaegyeong를 순차적으로 모두 입력 받고 이들에 대한 결과값 하나만 다음 층으로 보냄.
- 이때, 두번째 단어인 'name'의 벡터 정보는 'my'처럼 RNN층에 벡터 값이 그대로 들어가지 않음.
'my'에 대한 RNN층의 출력값이 'name'의 벡터 정보와 함께 RNN층의 입력값으로 들어감.
- 이 과정을 통해 이전 단어의 정보를 계속 저장(주어진 문장에 포함되어 있는 모든 단어를 이렇게 수행)


최종적으로 RNN층에서 출력된 하나의 값만을 RNN층 이후의 layer로 전달.
1) 마지막 단어인 jaegyeong에 들어가고 나온 값(그림상, ht만을 다음 layer로 넘길 수도 있고,
2) 각 단어에서 나온 값을 모두(그림상, h0, h1, h2 ... ht) 보낼 수도 있음.

RNN을 활용한 감성분석이 정확도가 높은 이유.
주어진 문장을 바탕으로 긍/부정을 판단함에 있어, 단순히 특정 감성어의 등장만으로는 정확한 분류가 되지 않을 수 있기 때문.
예) It is not good
이때, target 단어의 앞/뒤 단어를 RNN을 통해 함께 파악해주면, 정확도가 더 높아지는 것.
추가 one-to-many의 관계도 있음(input이 아닌 output이 sequential한 경우).
예) input으로 사진 1장 -> output으로 사진과 관련된 문장(단어들의 sequence)