
문장을 듣고 무엇을 의미하는지 알아야 서비스 제공이 가능하다.
문장을 듣고 이애한다는 것은 많은 문장을 이미 학습해 놓았다는 것이다.
문장의 의미를 전달하려먼 각 단어가 정해진 순서대로 입력되어야 한다.
과거에 입력된 데이터와 나중에 입력된 데이터 사이의 관계를 고려해야 하는 문제가 생긴다.
그렇기 때문에 시간적 개념이 들어간 데이터들을 해결하기 위해 순환신경망(RNN)이 고안되었다.
RNN은 여러개의 데이터가 순서대로 입력되었을 때 앞서 입력 받은 데이터의 연산 결과를 잠시 기억해 놓는 방식이다.
기억된 데이터를 가지고 다음 데이터로 넘어가면서 함께 연산한다.

앞에서 나온 입력에 대한 결과가 뒤에서 나오는 입력 값에 영향을 주는 것을 알 수 있다.
예를 들어 비슷한 두 문장이 입력되어도 앞에서 나온 입력 값을 구별 하여 출력 값에 반영 할 수 있다.
모든 입력 값에 이 작업을 순서대로 실행하므로 같은 층을 맴도는 것 처럼 보인다.

분석에 사용되는 특성들이 시간적, 순차적 특징을 지닌 데이터를 순차기반데이터라고 부른다.

(Vanilla) Recurrent Neural Network
Ht = Fw(Ht-1, Xt)
Ht = tanh(WhhHt-1 + WxhXt)
Yt = WhyHt

SimpleRNN(units =3,
input_shape = (4, 9))

다수입력 단일출력은 주로 문장을 읽고 뜻을 파악할 때에 활용한다.
model = Sequential()
model.add(SimpleRNN(units = output_size,
input_shape=(timesteps, features)))

단일입력 다수출력은 사진의 캡션을 만들 때에 주로 활용된다.
model = Sequential()
model.add(RepeatVector(number_od_times,
input_shape = input_shape))
num
