RNN (예 : LSTM 및 GRU)의 경우 계층 입력 은 시간 단계 목록이며 각 시간 단계 는 기능 텐서입니다. 즉, 다음과 같은 입력 텐서를 가질 수 있습니다 (Pythonic 표기법으로).
# Input tensor to RNN
[
# Timestep 1
[ temperature_in_paris, value_of_nasdaq, unemployment_rate ],
# Timestep 2
[ temperature_in_paris, value_of_nasdaq, unemployment_rate ],
# Timestep 3
[ temperature_in_paris, value_of_nasdaq, unemployment_rate ],
...
]
따라서 각 단계마다 여러 기능을 가질 수 있습니다. 내 생각에 날씨는 시계열 기능입니다. 내가 사는 곳은 시간의 함수입니다. 따라서 날씨 정보를 각 타임 스텝에서 기능 중 하나로 인코딩하는 것이 합리적입니다 (흐림 = 0, 맑은 = 1 등의 적절한 인코딩 사용).
시계열이 아닌 데이터가있는 경우 LSTM을 통해 전달하는 것은 의미가 없습니다. 어쨌든 LSTM은 작동하지만, 그렇게해도 훈련 시간당 손실이 높고 정확도가 떨어질 수 있습니다.
또는 추가 계층을 통해 이러한 종류의 "추가"정보를 LSTM 외부의 모델에 도입 할 수 있습니다. 다음과 같은 데이터 흐름이있을 수 있습니다.
TIME_SERIES_INPUT ------> LSTM -------\
*---> MERGE ---> [more processing]
AUXILIARY_INPUTS --> [do something] --/
따라서 보조 입력을 LSTM 출력에 병합하고 거기서부터 네트워크를 계속합니다. 이제 모델은 단순히 다중 입력입니다.
예를 들어 특정 응용 프로그램에서 LSTM 출력 시퀀스의 마지막 출력 만 유지한다고 가정 해 봅시다. 길이가 10 인 벡터라고 가정 해 봅시다. 보조 입력은 인코딩 된 날씨 (스칼라) 일 수 있습니다. 병합 계층은 보조 날씨 정보를 LSTM 출력 벡터의 끝에 간단히 추가하여 길이 11의 단일 벡터를 생성 할 수 있습니다. 그러나 마지막 LSTM 출력 타임 스텝을 유지할 필요 는 없습니다 . LSTM이 100 개의 타임 스텝을 각각 출력 한 경우 10 개의 벡터로 구성된 기능을 사용하면 보조 날씨 정보를 계속 확인할 수 있으며 각각 11 개의 데이터 포인트로 구성된 100 개의 타임 스텝이 생성됩니다.
기능적 API 에 대한 Keras 문서 에는 이에 대한 개요가 있습니다.
다른 경우에는 @horaceT가 지적한 것처럼 LSTM을 일시적이지 않은 데이터에 대해 조건을 지정할 수 있습니다. 예를 들어, 주어진 위치에서 내일 날씨를 예측하십시오. 이 경우 다음은 각각 긍정적 / 부정적 세 가지 제안입니다.
RNN의 내부 / 숨겨진 상태를 효과적으로 "설정"하기 때문에 컨디셔닝 데이터가 첫 번째 타임 스텝에 포함되도록하십시오. 솔직히 말해서, 나는 여러 가지 이유로 이렇게 하지 않을 것입니다 : 컨디셔닝 데이터는 나머지 기능과 같은 모양이어야하며 상태 저장 RNN을 생성하는 것을 어렵게 만듭니다 (데이터를 공급하는 방법을 실제로 조심스럽게 추적하는 관점에서) 네트워크로), 네트워크는 충분한 시간 (예를 들어, 긴 트레이닝 시퀀스, 또는 긴 예측 시퀀스) 등으로 컨디셔닝 데이터를 "잊어 버릴"수있다.
시간 데이터 자체의 일부로 데이터를 포함하십시오. 따라서 특정 시간 단계의 각 특징 벡터에는 "대부분"시계열 데이터가 포함되지만 각 특징 벡터의 끝에 컨디셔닝 데이터가 추가됩니다. 네트워크가이를 인식하는 법을 배우게됩니까? 아마도 그럼에도 불구하고 시퀀스 데이터를 비 순차 정보로 오염시켜 더 어려운 학습 작업을 만들고 있습니다. 그래서 나는 또한 이것을 권장하지 않습니다 .
아마도 가장 좋은 방법은 0에 RNN의 숨겨진 상태에 직접 영향을 미치는 것입니다. 이것은 Karpathy 와 Fei-Fei 와 Vinyals et al . 이것이 작동하는 방식입니다.
- 엑스⃗
- v⃗ =Wx⃗ +b⃗ Wb⃗
- v⃗
이 접근 방식은 비 일시적 입력에 대한 RNN의 조건을 적절하게 조정하고 모양 문제를 자연스럽게 해결하며 추가 비 일시적 정보로 입력 시간 단계를 오염시키지 않기 때문에 "이론적으로"가장 정확합니다. 단점은이 접근 방식에 종종 아키텍처의 그래프 수준 제어가 필요하므로 Keras와 같은 상위 레벨 추상화를 사용하는 경우 고유 한 레이어 유형을 추가하지 않으면 구현하기가 어렵다는 것을 알게됩니다.