Обнаружение изменений скорости (с учетом текущей позиции xy) с помощью RNN / LSTM - PullRequest
2 голосов
/ 22 января 2020

Как бы я подходил к изменениям скорости обучения, используя RNNs / LSTM с заданными координатами x, y непрерывных данных? (Я должен использовать рекуррентный слой, так как это подзадача более крупной сквозной модели, которая также выполняет другие задачи)

Пример обучающих данных:

x,y,speed_changed

0,0,0

0,0.1,0

0,0.2,0

0,0.3,0

0,0.5,1

0,0.6,0

0,0.7,0

...

Итак До сих пор я создавал LSTM с отслеживанием состояния и обучал его по одному предмету на партию. После этого я сбрасываю состояние LSTM каждый раз, когда происходит изменение скорости, поэтому я узнаю, что сегмент имел одинаковую скорость (сегменты могут иметь разную длину).

Как использовать такую ​​модель в производстве тогда, поскольку сегменты имеют разную длину?

Или есть ли лучший способ обучить рекуррентные net на таких данных? Возможно обнаружение аномалии? (Я хочу избежать фиксированного размера пакета (например, окно из 3 кадров))

1 Ответ

1 голос
/ 05 февраля 2020

Структура RNN и LSTM не позволит вам сделать это напрямую, и это причина того, почему - Функция активации для RNN: h (t) = Tanh (W * h (t-1) + U * x (t) + Bias) Обратите внимание, что W, U и Bias одинаковы - независимо от того, сколько временных интервалов вы используете для RNN. Поэтому, учитывая некоторый X-вектор, выходной сигнал будет функцией p1 * X1 + p2 * X2 и т. Д., Где X1 - это X в вашем примере, а X2 - Y.

Однако - чтобы обнаружить изменение скорости - вам нужен другой расчет. Изменение скорости указывает, что между временными интервалами 1 и 2 и между временными интервалами 2 и 3 было пройдено различное расстояние: SQRT ((X1 (t) -X1 (t-1)) ^ 2 + (X2 (т) -X2 (т-1)) ^ 2). Это означает, что вам нужна функция активации, которая каким-то образом учитывает X1 * X1 - и это невозможно в RNN или LSTM.

Однако вы можете достичь того, что вам нужно, косвенно, используя пользовательские функция активации, которая вычисляет пройденное расстояние за последний период времени. Взгляните на эту ссылку . Используя вашу пользовательскую функцию активации, вы можете вставить вектор X1 (t), X2 (t), X1 (t-1), X2 (t-1) и рассчитать расстояние D. При t = 1 вы можете использовать 0 как X1 (t = 0) и X2 (t = 0).

Ваша пользовательская функция активации должна выглядеть следующим образом: D = (X1 (t) - X1 (t-1)) ^ 2 + (X2 (t) -X2 (t-1)) ^ 2. Таким образом, если скорость одинакова между таймфреймами, вы будете подавать RNN с постоянными значениями D, поэтому вы ожидаете, что RNN достигнет весов, которые будут имитировать функцию D (t) - D (t-1).

...