Свёртка для последовательностей
Операция свёртки
Пусть - обрабатываемая последовательность значений из чисел. Например, это может быть последовательность температур прибора, сни маемая каждые 10 секунд.
Свёртка (convolution) обладает параметрами:
-
(ядро свёртки, convolution kernel, обычно нечётное по размеру, но может быть и чётным),
-
смещение .
Выходом операции свёртки будет последовательность с элементами, считаемыми по формуле
Таким образом, свёртка генерирует последовательность, каждый элемент которой получается за счёт одного и того же линейного преобразования с параметрами.
Рассмотрим пример вычисления свёртки для следующих данных:
Тогда выходной ряд будет строится следующим образом:
Примеры свёрток
Рассмотрим частные виды свёрток. У всех смещение будет браться равным нулю.
-
: отвечает равномерному усреднению, сглаживает временной ряд.
-
: неравномерное усреднение, сглаживает временной ряд, когда у центральных элементов вклад больше.
-
: вычисляет разностную производную , т.е. скорость изменения наблюдаемой величины.
-
: вычисляет разностную вторую производную , т.е. скорость изменения скорости наблюдаемой величины.
Раньше параметры свёрток подбирались вручную. Но если есть обучающая выборка, то эффективнее будет работать свёртка с автоматически настраиваемыми параметрами ядра и смещения - так операция будет лучше соответствовать данным и решаемой задаче.
Свойства свёртки
Свёртка извлекает один и тот же линейный признак в каждой позиции локально относительно позиции. Таким образом, свёртка обеспечивает свойство эквивариантности к сдвигу (translation equivariance). Это проиллюстрировано ни же, где слева показан линейный слой обычного многослойного персептрона, а справа - операция свёртки:
Как видим, свёртка предполагает существенно меньшее количество связей (sparse connections), что обеспечивает более быстрое вычисление и требует меньшее число параметров. Дополнительное уменьшение параметров обеспечивается общностью весов (parameter sharing). На рисунке справа одинаковые веса обозначены одним цветом.
Свёртку можно применять к входным данным разной длины, причем число оцениваемых параметров будет одним и тем же - .
На многопроцессорных вычислительных устройствах, таких как видеокарта, вы числения производятся не последовательно один за другим, а параллельно, поэтому свёртка, вычисляемая независимо для разных позиций считается очень быстро за счёт параллелизации.
Также можно обратить внимание, что выходная последовательность получается короче на , чем входная, поскольку ядро свёртки упирается в начало и конец входной временной последовательности.
Обработка динамического временного ряда
Обработка динамического временного ряда специфична тем, что наблюдения поступают последовательно, а будущие наблюдения еще неизвестны, когда нужно формировать выход . Для такого рода данных свёртке разрешается смотреть только на последние располагаемые наблюдений:
а у самой свёртки остаются только параметров и . Пример действия такой свёртки показан ниже:
Такая свёртка может применяться для прогнозирования следующего элемента ряда:
Извлечение сложных нелинейных признаков
Наслаивая свёртки друг на друга, можем извлекать более сложные п ризнаки с расширенной областью видимости (receptive field), т.е. зависящими от более широкой окрестности значений, как показано ниже красным цветом:
На каждом слое действует свёртка со своими индивидуальными параметрами.
Чтобы извлекаемые признаки получались нелинейными, после каждой свёртки применяют нелинейную функцию активации (иначе суперпозиция линейных операций снова даст линейную операцию).
Суперпозиция свёрток с операциями нелинейности приводит к иерархичности признаковых представлений входной последовательности - более высокие слои будут извлекать более сложные признаки, зависящие от более широкой окрестности в данных.
Чтобы извлечь более разнообразные признаки, на каждом слое применяют не одну, а сразу несколько свёрток (каждая-со своими параметрами):
Тогда каждая свёртка следующего (более высокого) слоя будет определяться как локальная линейная комбинация результатов всех свёрток предыдущего слоя, выполняя уже двумерную операцию:
Графически это проиллюстрировано ниже: