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