Ответ 1
Начните с небольшого числа итераций (более условно считать "эпохи" , а не итерациями. "Эпохи" относятся к числу итераций через весь набор данных, используемый для обучения сети). Под "маленьким" пусть говорят что-то вроде 50 эпох. Причина этого заключается в том, что вы хотите увидеть, как общая ошибка изменяется с каждым дополнительным циклом обучения (эпоха) - мы надеемся, что она снизится (подробнее об общей ошибке ниже).
Очевидно, вас интересует точка (количество эпох), где следующая дополнительная эпоха не вызывает дальнейшего уменьшения общей погрешности. Итак, начните с небольшого количества эпох, чтобы вы могли подойти к этой точке, увеличив эпохи.
Скорость обучения, с которой вы начинаете, не должна быть слишком тонкой или слишком грубой (очевидно, субъективная, но, надеюсь, у вас есть грубый смысл того, что является большой и небольшой скоростью обучения).
Затем вставьте несколько строк кода тестирования в ваш персептрон - на самом деле это всего лишь несколько хорошо написанных "печатных" заявлений. Для каждой итерации вычисляйте и показывайте дельту (фактическое значение для каждой точки данных в данных обучения минус прогнозируемое значение), затем суммируйте отдельные значения дельта по всем точкам (строкам данных) в данных обучения (я обычно беру абсолютное значение delta, или вы можете взять квадратный корень из суммы квадратов различий - не имеет большого значения. Назовите это суммарное значение "общая ошибка" - просто чтобы быть ясным, это полная ошибка (сумма ошибки в все узлы) за эпоху.
Затем отображает общую ошибку как функцию номера эпохи (т.е. число эпох по оси x, общая ошибка на оси y). Первоначально, конечно, вы увидите точки данных в верхнем левом углу, наклоняющиеся вниз и вправо, и с уменьшающимся наклоном
Пусть алгоритм тренирует сеть против данных обучения. Увеличить эпохи (например, 10 за каждый ход) до тех пор, пока вы не увидите кривую (общая ошибка против числа эпох) сгладить - то есть дополнительные итерации не приводят к уменьшению общей ошибки.
Таким образом, наклон этой кривой важен, а также ее вертикальное положение, т.е. сколько у вас полная ошибка и продолжает ли она двигаться вниз с более циклов обучения (эпох). Если после увеличения эпох вы в конечном итоге заметите увеличение ошибки, начните с более низкой скорости обучения.
Уровень обучения (обычно это доля от 0,01 до 0,2), безусловно, скажется на быстром обучении сети - т.е. он может быстрее перейти на локальный минимум. Это также может заставить вас перепрыгнуть через него. Итак, закодируйте цикл, который обучает сеть, скажем пять раз, используя фиксированное количество эпох (и одну и ту же начальную точку) каждый раз, но изменяя скорость обучения, например, от 0,05 до 0,2, каждый раз, увеличивая скорость обучения на 0.05.
Здесь важнее еще один параметр (хотя и не обязательно), "импульс" . Как следует из названия, использование момента импульса поможет вам получить достаточно подготовленную сеть быстрее. По сути, импульс является множителем для скорости обучения - пока коэффициент ошибок уменьшается, момент импульса ускоряет прогресс. Интуиция за импульсным термином "пока вы путешествуете к месту назначения, увеличивайте скорость". Типичные значения для момента импульса равны 0,1 или 0,2. В вышеприведенной схеме обучения вы, вероятно, должны поддерживать постоянство импульса при изменении скорости обучения.