У меня есть модель машинного обучения (а именно, автоэнкодер), которая пытается изучить разреженное представление входного сигнала с помощью простого штрафного члена l1, добавленного к целевой функции. Это действительно работает для продвижения разреженного векторного представления в том смысле, что большинство элементов в изученном векторном представлении являются нулями. Однако мне нужно, чтобы разреженность была структурирована таким образом, чтобы ненулевые элементы были «разбросаны»/распределены/однородны по вектору. Конкретно, для данного входного сигнала моя модель создает разреженное представление, которое выглядит следующим образом:
Текущий разреженный код: [...,0,0,0,0,0,0,0,0,0,0,0,
0.2,0.3,0.5,0.9,0.3,0.2,0.1
,0,0,0,0,0,0,0,0,0,0,0,0,...]
Вы можете оценить, что большинство элементов нулевые, с небольшими кластерами ненулевых элементов. Вместо этого я хочу, чтобы разреженность была такой, чтобы ненулевые элементы «отталкивались» друг от друга, и, следовательно, сделать так, чтобы все ненулевые элементы были окружены по крайней мере 1 или более нулями и несколькими или отсутствовали ненулевыми элементами. являются соседними по вектору; конкретно, это должно выглядеть примерно так:
Желаемый разреженный код: [...,0,0,0,0,0,
0,2,0,0,0,0,
0,9,0,0,0,0,
0,5,0,0,0,0,0,0,
0,7,0,0,0,
0,4,0,0,
0,6,...]
В последнем разреженном коде количество ненулевых элементов может быть таким же, как и в первом, но каждый ненулевой элемент отделен друг от друга некоторым количеством нулей.
Есть ли прямой штраф за целевую функцию, который я могу использовать, чтобы вызвать эту форму разреженности?