Настройки нейронной сети для быстрого обучения - PullRequest
7 голосов
/ 24 мая 2010

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

Входные данные состоят из сериицелых чисел, которые могут подняться настолько высоко, насколько хочет пользователь, но большинство из них будет меньше 100 000, я бы подумал.Некоторым будет всего 1. Они представляют собой такие данные, как количество людей в проекте и стоимость проекта, а также сведения о сущностях базы данных и вариантах использования.

Всего 10 входов и 2 выхода (время и стоимость).Я использую Resilient Propagation для обучения сети.В настоящее время он имеет: 10 входных узлов, 1 скрытый слой с 5 узлами и 2 выходными узлами.Я тренируюсь, чтобы получить менее 5% ошибок.

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

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

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

Спасибо!

1 Ответ

10 голосов
/ 24 мая 2010

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

  • Вам необходимо нормализовать свои входные данные. Если один узел видит среднее значение 100 000, а другой только 0,5, вы не увидите равного влияния от двух входов. Вот почему вам нужно их нормализовать.
  • Только 5 скрытых нейронов для 10 входных узлов? Я помню, что где-то читал, что вам нужно как минимум удвоить количество входов; попробуйте более 20 скрытых нейронов. Это даст вашей модели нейронной сети возможность разработать более сложную модель. Однако, слишком много нейронов и ваша сеть просто запомнят набор обучающих данных.
  • Эластичное обратное распространение в порядке. Просто помните, что существуют другие алгоритмы обучения, такие как Левенберг-Марквардт.
  • Сколько учебных наборов у вас есть? Нейронным сетям обычно требуется большой набор данных, чтобы уметь делать полезные прогнозы.
  • Рассмотрите возможность добавления коэффициента импульса к вашему алгоритму силовых тренировок, чтобы ускорить процесс, если вы еще этого не сделали.
  • Онлайн-обучение имеет тенденцию лучше делать обобщенные прогнозы, чем периодическое обучение. Первый обновляет веса после выполнения каждого набора обучения по сети, а второй обновляет сеть после прохождения каждого набора данных. Это твой звонок.
  • Являются ли ваши данные дискретными или непрерывными? Нейронные сети, как правило, работают лучше с 0 с и 1 с, чем непрерывные функции. Если это первое, я бы рекомендовал использовать функцию активации сигмоида. Комбинация функций активации tanh и linear для скрытого и выходного слоев, как правило, хорошо справляется с постоянно меняющимися данными.
  • Вам нужен еще один скрытый слой? Может помочь, если ваша сеть имеет дело со сложным отображением поверхности ввода-вывода.
...