Отладка нейронных сетей обычно включает в себя настройку гиперпараметров, визуализацию изученных фильтров и построение важных метрик. Не могли бы вы поделиться, какие гиперпараметры вы использовали?
- Какой у тебя размер партии?
- Какова ваша скорость обучения?
- Какой тип автоэнкодера вы используете?
- Вы пытались использовать автокодер 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 могут помочь отразить некоторые временные зависимости, которые можно найти в данных временных рядов, подобных этой. Надеюсь это поможет.