Параметр, настраивающийся для Perceptron изучение алгоритма

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

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

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

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

В любом случае любая справка ценилась бы.Спасибо.

11
задан doug 29 September 2017 в 04:23
поделиться

2 ответа

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

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

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

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

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

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

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

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

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

13
ответ дан 3 December 2019 в 07:11
поделиться

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

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

3
ответ дан 3 December 2019 в 07:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: