На сегодняшний день я хотел поиграть с выполнением Fast ICA поверх сверточных слоев.

Обратите внимание, что это для моей собственной учебной процедуры и просто средство для моей игры.

Статистически независимый

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

Когда у нас есть линейный график (что-то), похожий на левый, мы можем видеть, что существует положительная корреляция между двумя осями. Теперь с этим определением давайте взглянем на другое изображение.

Изображения из набора данных STL

Как видно выше, у нас есть 90 изображений из набора данных STL, и давайте попробуем сделать эти изображения статистически независимыми друг от друга. Для начала давайте посмотрим на матрицу ковариации / корреляции необработанных изображений.

Вверху → Матрица ковариации / корреляции для 90 изображений птиц
В центре → Матрица ковариации / корреляции для 90 изображений автомобилей
Внизу → Матрица ковариации / корреляции 45/45 изображений птиц и автомобилей.

Из приведенной выше матрицы мы видим, что некоторые изображения больше коррелируют с другими изображениями.

Сетевая архитектура

Синяя рамка → слой свертки
Розовая рамка → слой среднего вычитания
Зеленая рамка → отбеливающий слой ZCA
Красный ящик → слой FastICA

Имея в виду вышеупомянутую сетевую архитектуру, теперь давайте выполним некоторую «глубокую» ICA.

Обучите сеть, используя только изображения птицы, а последний слой имеет канал 1

После 200 итераций мы видим, что изображения птиц теперь выглядят как случайный черно-белый узор. Если присмотреться, можно увидеть какие-то очертания, но они совершенно незаметны.

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

Обучите сеть, используя только изображения птиц, но с тремя каналами в конце

Когда мы устанавливаем последний выходной канал как 3, мы можем видеть некоторые цвета, однако их значение кажется мне более случайным. Очевидно, что не похоже, что больше зеленого канала означает, что в изображении больше синих пикселей, поскольку есть несколько изображений, которые имеют много синих пикселей, но их изображение в пространстве функций не является зеленым.

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

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

Затем, когда мы строим ковариационную матрицу по каналам, мы видим, что, как ожидается, для второго канала большинство изображений в пространстве признаков не зависят друг от друга.

Обучите сеть с помощью изображений птиц и машин

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

Но опять же, изображения независимы друг от друга.

Обучите сеть с помощью изображений карточек и птиц с 3 каналами в конце и половинным размером пакета

К сожалению, в пространстве признаков изображения, похоже, не существует какого-либо порядка, кроме того, что он дает нам классно выглядящую матрицу ковариации, он бесполезен. (по крайней мере для меня).

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

И снова мы можем видеть, что большая часть шума содержится во втором канале, где сгенерированное пространство признаков представляет собой плоские черно-белые / серые изображения.

Обучите сеть с помощью обоих классов с помощью этикеток, используя KL Divergence

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

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

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

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

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

Интерактивный код

Для Google Colab вам потребуется учетная запись Google для просмотра кодов, а также вы не можете запускать сценарии только для чтения в Google Colab, поэтому сделайте копию на своем игровом поле. Наконец, я никогда не буду спрашивать разрешения на доступ к вашим файлам на Google Диске, просто к сведению. Удачного кодирования!

Чтобы получить доступ к коду для этого сообщения, нажмите здесь.

Заключительные слова

Было интересно посмотреть, какие результаты я получу с этими экспериментами, однако пока неясно, что именно он делает.

Если кто-то хочет рассмотреть производную дивергенции KL, см. Ниже.

Если будут обнаружены какие-либо ошибки, пожалуйста, напишите мне на [email protected], если вы хотите увидеть список всех моих писем, пожалуйста, просмотрите мой сайт здесь.

Ссылка

  1. numpy.argsort - Руководство по NumPy v1.15. (2018). Docs.scipy.org. Получено 21 октября 2018 г. с сайта https://docs.scipy.org/doc/numpy-1.15.1/reference/generated/numpy.argsort.html.
  2. Курт В. и Курт В. (2017). Объяснение расхождения Кульбака-Лейблера. Граф Байеси. Получено 22 октября 2018 г. с сайта https://www.countbayesie.com/blog/2017/5/9/kullback-leibler-divergence-explained.
  3. Набор данных STL-10. (2018). Cs.stanford.edu. Получено 22 октября 2018 г. с сайта https://cs.stanford.edu/~acoates/stl10/.
  4. Дивергенция, С. (2018). Вторая производная дивергенции Кульбака – Лейблера. Обмен математическими стеками. Получено 22 октября 2018 г. с сайта https://math.stackexchange.com/questions/1737397/second-derivative-of-kullback-leibler-divergence.
  5. Wolfram | Alpha: Делаем мировые знания вычислимыми. (2018). Wolframalpha.com. Получено 22 октября 2018 г. с сайта http://www.wolframalpha.com/input/?i=y+*+log(y%2Fx).
  6. Шерфген, Д. (2018). Калькулятор производных • С шагами !. Derivative-calculator.net. Получено 22 октября 2018 г. с сайта https://www.derivative-calculator.net/.