2010-05-04 7 views
10

У меня проблема, которая пытается выяснить, как настроить параметры для моего персептронного алгоритма, чтобы он хорошо относился к невидимым данным.Параметр Настройка для алгоритма обучения перцептронов

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

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

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

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

ответ

13

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

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

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

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

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

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

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

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

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

+0

Это правильный ответ, но не ограничивайте свою скорость обучения и импульс ограниченным доменом (масштабированием). Создайте случайную сеть, поезжайте 0,01-0,99 с шагом 0,05. Если вы не можете избавиться от глобальных минимумов таким образом, убедитесь, что вы правильно нормализировали свои входы. Я большой поклонник журнала! – deepelement

3

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

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

1

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

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

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

Источник: Juszczak, P .; D. M. J. Tax и R. P. W. Dui (2002). «Масштабирование функций в описаниях векторных данных поддержки». Proc. 8-я Анну. Conf. Adv. School Comput. Изображения: 95-10.

Смежные вопросы