Перейти к основному содержимому

Свёртка для последовательностей

Операция свёртки

Пусть x=[x1,x2,...xD]\mathbf{x}=[x_1,x_2,...x_D] - обрабатываемая последовательность значений из чисел. Например, это может быть последовательность температур прибора, снимаемая каждые 10 секунд.

Свёртка (convolution) обладает параметрами:

  • K=[K(n),K(n+1),...K(n1),K(n)]R2n+1K=[K(-n),K(-n+1),...K(n-1),K(n)]\in\mathbb{R}^{2n+1} (ядро свёртки, convolution kernel, обычно нечётное по размеру, но может быть и чётным),

  • смещение bRb\in\mathbb{R}.

Выходом операции свёртки будет последовательность yy с элементами, считаемыми по формуле

yj=i=nnK(i)xj+i+b,j=n+1,...Dn.y_j = \sum_{i=-n}^{n} K(i)x_{j+i}+b,\quad j=n+1,...D-n.

Таким образом, свёртка генерирует последовательность, каждый элемент которой получается за счёт одного и того же линейного преобразования с 2n+22n+2 параметрами.

Рассмотрим пример вычисления свёртки для следующих данных:

Тогда выходной ряд будет строится следующим образом:

Примеры свёрток

Рассмотрим частные виды свёрток. У всех смещение bb будет браться равным нулю.

  • K=[15,15,15,15,15]K=[\frac{1}{5},\frac{1}{5},\frac{1}{5},\frac{1}{5},\frac{1}{5}]: отвечает равномерному усреднению, сглаживает временной ряд.

  • K=[0.1,0.2,0.4,0.2,0.1]K=[0.1,0.2,0.4,0.2,0.1]: неравномерное усреднение, сглаживает временной ряд, когда у центральных элементов вклад больше.

  • K=[1,0,+1]K=[-1,0,+1]: вычисляет разностную производную Δxj=xj+1xj1\Delta x_j = x_{j+1}-x_{j-1}, т.е. скорость изменения наблюдаемой величины.

  • K=[+1,2,+1]K=[+1,-2,+1]: вычисляет разностную вторую производную Δxj=(xj+1xj)(xjxj1)\Delta x_j = (x_{j+1}-x_j)-(x_j-x_{j-1}), т.е. скорость изменения скорости наблюдаемой величины.

Автоматическая настройка

Раньше параметры свёрток подбирались вручную. Но если есть обучающая выборка, то эффективнее будет работать свёртка с автоматически настраиваемыми параметрами ядра и смещения - так операция будет лучше соответствовать данным и решаемой задаче.

Свойства свёртки

Свёртка извлекает один и тот же линейный признак в каждой позиции локально относительно позиции. Таким образом, свёртка обеспечивает свойство эквивариантности к сдвигу (translation equivariance). Это проиллюстрировано ниже, где слева показан линейный слой обычного многослойного персептрона, а справа - операция свёртки:

Как видим, свёртка предполагает существенно меньшее количество связей (sparse connections), что обеспечивает более быстрое вычисление и требует меньшее число параметров. Дополнительное уменьшение параметров обеспечивается общностью весов (parameter sharing). На рисунке справа одинаковые веса обозначены одним цветом.

Свёртку можно применять к входным данным разной длины, причем число оцениваемых параметров будет одним и тем же - 2n+22n+2.

На многопроцессорных вычислительных устройствах, таких как видеокарта, вычисления производятся не последовательно один за другим, а параллельно, поэтому свёртка, вычисляемая независимо для разных позиций считается очень быстро за счёт параллелизации.

Также можно обратить внимание, что выходная последовательность получается короче на 2n2n, чем входная, поскольку ядро свёртки упирается в начало и конец входной временной последовательности.

Обработка динамического временного ряда

Обработка динамического временного ряда специфична тем, что наблюдения x1,x2,...xtx_1,x_2,...x_t поступают последовательно, а будущие наблюдения еще неизвестны, когда нужно формировать выход yty_t. Для такого рода данных свёртке разрешается смотреть только на последние располагаемые nn наблюдений:

yt=i=0n1K(i)xti+b,y_t=\sum_{i=0}^{n-1} K(i)x_{t-i}+b,

а у самой свёртки остаются только n+1n+1 параметров K=[K(0),...K(n1)]K=[K(0),...K(n-1)] и bb. Пример действия такой свёртки показан ниже:

Такая свёртка может применяться для прогнозирования следующего элемента ряда:

yt=x^t+1y_t=\hat{x}_{t+1}

Извлечение сложных нелинейных признаков

Наслаивая свёртки друг на друга, можем извлекать более сложные признаки с расширенной областью видимости (receptive field), т.е. зависящими от более широкой окрестности значений, как показано ниже красным цветом:

На каждом слое действует свёртка со своими индивидуальными параметрами.

Нелинейные признаки

Чтобы извлекаемые признаки получались нелинейными, после каждой свёртки применяют нелинейную функцию активации (иначе суперпозиция линейных операций снова даст линейную операцию).

Суперпозиция свёрток с операциями нелинейности приводит к иерархичности признаковых представлений входной последовательности - более высокие слои будут извлекать более сложные признаки, зависящие от более широкой окрестности в данных.

Чтобы извлечь более разнообразные признаки, на каждом слое применяют не одну, а сразу несколько свёрток (каждая-со своими параметрами):

yj1=i=nnK1(i)xj+i+b1yj2=i=nnK2(i)xj+i+b2yjM=i=nnKM(i)xj+i+bM\begin{aligned} y^1_j &= \sum_{i=-n}^{n} K^1(i)x_{j+i}+b^1 \\ y^2_j &= \sum_{i=-n}^{n} K^2(i)x_{j+i}+b^2 \\ \cdots \\ y^M_j &= \sum_{i=-n}^{n} K^M(i)x_{j+i}+b^M \end{aligned}

Тогда каждая свёртка следующего (более высокого) слоя будет определяться как локальная линейная комбинация результатов всех свёрток предыдущего слоя, выполняя уже двумерную операцию:

zj=s=1Mi=nnK(s,i)yj+is+bz_j=\sum_{s=1}^M \sum_{i=-n}^n K(s,i)y^s_{j+i}+b

Графически это проиллюстрировано ниже: