Настройка параметров для алгоритма обучения Perceptron - PullRequest
11 голосов
/ 04 мая 2010

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

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

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

Что касается количества итераций, я не совсем уверен, как определить идеальное число.

В любом случае, любая помощь будет оценена. Спасибо.

Ответы [ 3 ]

13 голосов
/ 04 мая 2010

Начните с небольшого количества итераций (на самом деле более обычным считается 'эпох' , а не итераций - 'эпох' относится к числу итераций по всему набору данных, используемых для обучения сети ). Под «маленьким» скажем, что-то около 50 эпох. Причина этого заключается в том, что вы хотите видеть, как общая ошибка меняется с каждым дополнительным циклом обучения (эпоха) - возможно, она снижается (подробнее об «общей ошибке» ниже).

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

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

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

Затем выводит общую ошибку как функцию числа эпохи (т. Е. Числа эпох по оси x, общей ошибки по оси y). Первоначально, конечно, вы увидите точки данных в верхнем левом углу, отклоняющиеся вниз и вправо с уменьшающимся наклоном

Пусть алгоритм обучает сеть по данным обучения. Увеличивать эпохи (например, 10 за цикл) , пока не появится кривая (общая ошибка по сравнению с числом эпох) сгладить - то есть дополнительные итерации не ' t вызывает уменьшение общей ошибки.

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

Скорость обучения (обычно от 0,01 до 0,2) определенно повлияет на скорость обучения сети, т. Е. Она может быстрее привести вас к локальному минимуму. Это также может заставить вас перепрыгнуть через него. Итак, закодируйте цикл, который обучает сеть, скажем, пять раз, используя фиксированное количество эпох (и одну и ту же отправную точку) каждый раз, но изменяя скорость обучения, например, от 0,05 до 0,2, каждый раз увеличивая скорость обучения на 0,05.

Здесь важен еще один параметр (хотя и не обязательный): 'импульс' . Как следует из названия, использование термина «импульс» поможет вам быстрее получить адекватно обученную сеть. По сути, импульс - это множитель скорости обучения - пока частота ошибок уменьшается, срок импульса ускоряет прогресс. Интуиция, лежащая в основе члена импульса, равна «, пока вы путешествуете к месту назначения, увеличьте свою скорость ». Типичные значения для члена импульса - 0,1 или 0,2. В приведенной выше схеме тренировки вы, вероятно, должны поддерживать постоянный импульс при изменении скорости обучения.

3 голосов
/ 06 мая 2010

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

Теоретически для простых случаев можно показать, что изменение n (скорости обучения) в соответствии с 1 / t (где t - количество представленных примеров) должно работать хорошо, но на самом деле я обнаружил, что на практике лучший способ сделать это - найти хорошее высокое значение n (самое высокое значение, которое не приводит к расхождению в обучении) и низкое значение n (этот показатель сложнее понять, зависит от данных и проблемы), и затем пусть n изменяется линейно с течением времени от высокого n до низкого n.

1 голос
/ 28 сентября 2013

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

Нормализация данных до нулевого среднего, единицы измерения или между 0-1 или любой другой стандартной формы может помочь в выборе значения скорости обучения. Как упоминал Даг, скорость обучения в диапазоне от 0,05 до 0,2 обычно работает хорошо.

Также это поможет ускорить сходимость алгоритма.

Источник: Juszczak, P .; D.M.J. Tax и R.P.W. Dui (2002). Msgstr "Масштабирование объектов в описаниях опорных векторных данных". Proc. 8-го числа Conf. Adv. Школа Компут. Снимки: 95–10.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...