Автоэнкодеры не могут выучить значимые функции


24

У меня есть 50000 изображений, таких как эти два:

пример данных пример данных2

Они изображают графики данных. Я хотел извлечь функции из этих изображений, поэтому я использовал код автоэнкодера, предоставленный Theano (deeplearning.net).

Проблема в том, что эти автоэнкодеры, похоже, не изучают никаких функций. Я попробовал RBM, и это то же самое.

Набор данных MNIST предоставляет хорошие функции, но мои данные, похоже, не дают никаких. Я прилагаю примеры ниже:

Фильтры, созданные на MNIST:

фильтр mnist

Фильтры, созданные путем обучения по моим данным:

фильтры из моих данных

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

Почему это не работает? Почему автокодеры не могут извлекать функции из этих изображений?

РЕДАКТИРОВАТЬ:

Для тех, у кого есть похожие проблемы. Решение было действительно простым, а причина действительно глупой. Я просто забыл перемасштабировать значения пикселей из кодировки RGB, чтобы они находились в диапазоне 0 - 1.

Изменение масштаба значений решило проблему.

Ответы:


15

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

  • Какой у тебя размер партии?
  • Какова ваша скорость обучения?
  • Какой тип автоэнкодера вы используете?
  • Вы пытались использовать автокодер Denoising? (Какие коррупционные ценности вы пробовали?)
  • Сколько скрытых слоев и какого размера?
  • Каковы размеры ваших входных изображений?

Анализ журналов обучения также полезен. Постройте график ваших потерь на реконструкцию (ось Y) в зависимости от эпохи (ось X). Ваша потеря реконструкции сходится или расходится?

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

Вот тот, который сходится: (мы хотим это)

Ванильный «без ограничений» может столкнуться с проблемой, когда они просто изучают отображение идентичности. Это одна из причин, по которой сообщество создало ароматы Denoising, Sparse и Contractive.

Не могли бы вы опубликовать небольшое подмножество ваших данных здесь? Я был бы более чем готов показать вам результаты одного из моих автоэнкодеров.

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

[0, 13, 15, 11, 2, 9, 6, 5]

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

Последующий ответ (с учетом данных.)

Вот фильтры из 1000 скрытых юнитов, однослойный автоэнкодер Denoising. Обратите внимание, что некоторые фильтры кажутся случайными. Это потому, что я прекратил обучение так рано, и у сети не было времени, чтобы изучить эти фильтры.

Вот гиперпараметры, с которыми я тренировался:

batch_size = 4
epochs = 100
pretrain_learning_rate = 0.01
finetune_learning_rate = 0.01
corruption_level = 0.2

Я прекратил предварительную подготовку после 58-й эпохи, потому что фильтры были достаточно хороши, чтобы размещать здесь. Если бы я был на вашем месте, я бы начал обучение с полного трехслойного автоэнкодера с накоплением с архитектурой 1000x1000x1000.

Вот результаты шага тонкой настройки:

validation error 24.15 percent
test error 24.15 percent

Таким образом, на первый взгляд, это кажется лучше, чем шанс, однако, когда мы смотрим на разбивку данных между двумя метками, мы видим, что он имеет точно такой же процент (75,85% прибыльных и 24,15% убыточных). Это означает, что сеть научилась просто отвечать «выгодно» независимо от сигнала. Я бы, вероятно, потренировал бы это в течение более длительного времени с большей сетью, чтобы увидеть, что происходит. Кроме того, похоже, что эти данные получены из некоторого базового набора финансовых данных. Я бы порекомендовал вам заглянуть в Recurrent Neural Networks после переформулирования вашей проблемы в векторы, как описано выше. RNN могут помочь отразить некоторые временные зависимости, которые можно найти в данных временных рядов, подобных этой. Надеюсь это поможет.


Размер моей партии - 20. Скорость обучения установлена ​​на 0,1. Я пробовал сократительные и шумоподавляющие автоэнкодеры безрезультатно. Я использую один скрытый слой. Я перепробовал все от 50 до 1000 нейронов. Я масштабирую изображения до 25x25 - чтобы они были даже меньше, чем у mnist. Во что бы то ни стало я вложил все свои данные в этот архив: не могли бы вы показать мне результаты ваших автоэнкодеров и эти данные?
b93dh44

Архив: mega.co.nz/...
b93dh44

Хорошо, я обучил сеть с этими данными. Смотрите редактирование в ответе.
Сабалаба

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

Не могу опубликовать мой код, потому что это моя компания, но я могу указать вам на этот учебник, в котором есть пример кода для создания автоэнкодера Denoising: deeplearning.net/tutorial/dA.html . Все рекомендации по гиперпараметрам сохранятся для этого кода.
Сабалаба

3

У меня недостаточно репутации, чтобы комментировать, поэтому я добавлю это в ответ. Я не знаю точную причину, однако:

  1. Шаблон в нижней левой области выглядит аналогично вашему второму примеру, а шаблон в правом нижнем углу очень похож на ваш первый пример при тщательном рассмотрении. Вопрос в том, насколько разнообразны ваши исходные данные? Если все 50 000 изображений являются вариациями одного и того же шаблона, этих 3 значимых карт характеристик, которые мы видим, может быть достаточно для автоэнкодера, чтобы объяснить и восстановить все ваши данные.

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


1. Я думаю, что эти данные очень разнообразны. Каждый из этих 50000 графиков немного отличается. Я думаю, что невозможно, чтобы автоэнкодер мог восстановить их все, основываясь только на 3 фильтрах. 2. Какие-либо советы для оценки ошибки реконструкции? Код, который я использую, выдает ошибку, но это действительно большое число, которое мало что мне говорит. Стоит ли сравнивать ошибку восстановления с размером входных данных или количеством скрытых слоев?
b93dh44
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.