Что такое autoencoder:
http://en.wikipedia.org/wiki/Autoencoder Sparse autoencoder - разновидность этой модели, обычно для случая overcomplete feature set.
Описание и все необходимые формулы приведены в документе, который легко гуглится:
Andrew Ng "Sparse autoencoder. CS294A Lecture notes"
Эксперименты показывают, что основная проблема в этой модели - необходимость ручного подбора "хороших" метапараметров модели "required rho" и "sparsity beta". В случае неудачи появляются артефакты back prop'а вплоть до расходимости.
Вторая проблема - достаточно медленная сходимость.
В конце концов, появилась такая идея теста.
Наша цель - для заданного набора входных векторов построить словарь элементарных признаков, удовлетворяющих нескольким критериям.
Во-первых, любое из изображений (в рамках задачи) строится как линейная комбинация элементарных признаков с весами (feature extraction и representation).
Во-вторых, вектор весов признаков в среднем сильно разрежен, то есть содержит большое количество нулей (sparsity).
Нам нужна тестовая задача, для которой априори известно точное решение.
Вот простейший вариант.
Путь мы работаем с изображениями 8*8 пикселей.
Ограничим изображения случаем двух градаций яркости. При этом autoencoder, само собой, будет подбирать feature с любыми градациями. Каждое изображение будет получаться как результат пуассоновского процесса: задаем вероятность того, что очередной пиксель имеет яркость 1 как p(1), и змейкой проходим по всем пикселям. В результате у нас получится набор тренировочных и тестовых рандомных изображений. Так как число вариантов очень велико (2 в степени 64), то вероятность появления двух одинаковых изображений чрезвычайно мала.
Задаем размер словаря признаков как 64. Набор признаков, который точно подходит под задачу - это 64 единичных векторов. То есть каждая из 64 feature - это картинка 8*8 с единственным единичным пикселем. Это не единственное решение, хотя и лучшее.
Результирующие feature визуализируем так. Если компонента вектора положительна, то отрисовываем зеленым, если отрицательна - то красным. В идеале мы должны увидеть 64 красных квадратиков с 1 зеленым пикселем в каждом в разных местах.
Вот что получилось в результате одного из прогонов алгоритма:
То есть неплохо, хотя можно лучше.
Есть сильные подозрения, что в модели не хватает какого-то критерия, который заставил бы алгоритм "схлопнуть" многокомпонентные фичи.
Вдобавок, явно не хватает тренировочных образцов.