문장을 듣고 무엇을 의미하는지 알아야 서비스 제공이 가능하다.
문장을 듣고 이애한다는 것은 많은 문장을 이미 학습해 놓았다는 것이다.
문장의 의미를 전달하려먼 각 단어가 정해진 순서대로 입력되어야 한다.
과거에 입력된 데이터와 나중에 입력된 데이터 사이의 관계를 고려해야 하는 문제가 생긴다.
그렇기 때문에 시간적 개념이 들어간 데이터들을 해결하기 위해 순환신경망(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