Я только что узнал о регуляризации как о подходе к управлению перетеканием, и я хотел бы включить эту идею в простую реализацию обратного распространения и многослойного персептрона (MLP), которую я собрал.
В настоящее время, чтобы избежать чрезмерной подгонки, я проверяю и сохраняю сеть с лучшими показателями на данный момент по набору проверки. Это работает нормально, но добавление регуляризации помогло бы мне в том, что правильный выбор алгоритма регуляризации и параметра заставил бы мою сеть более систематически сходиться на модели, отличной от наложения.
Формула, которую я имею для термина обновления (из курса Coursera ML), указывается как пакетное обновление, например, для каждого веса, после суммирования всех применимых дельт для всего тренировочного набора по распространению ошибок lambda * current_weight
добавляется также корректировка перед комбинированным дельта вычитается в конце пакета, где lambda
находится параметр регуляризации.
Моя реализация backpropagation использует обновления веса для каждого элемента. Я обеспокоен тем, что не могу просто скопировать пакетный подход, хотя он выглядит интуитивно понятным для меня. Работает ли меньший срок регуляризации для каждого элемента так же хорошо?
Например, lambda * current_weight / N
где N - размер тренировочного набора - на первый взгляд это выглядит разумно. Я не смог найти ничего по этому вопросу, и мне интересно, если это потому, что регуляризация не работает так хорошо с обновлением для каждого элемента, или даже идет под другим именем или измененной формулой.
источник
В дополнение к тому, что сказал insys :
Регуляризация используется при расчете обратного распространения для всех весов в вашем MLP. Следовательно, вместо вычисления градиента в отношении всех входных данных обучающего набора (
batch
) вы используете только некоторые / один элемент (ы) (stochastic or semi-stochastic
). Вы закончите тем, что ограничите результат обновления в отношении одного элемента вместо всех, что также правильно.Также, если я правильно помню, Эндрю Н.Г. использовал
L2-regularization
./N
Вlambda * current_weight / N
не является обязательным, он просто помогает перемасштабирования входа. Однако, если вы решите не использовать его, вам придется (в большинстве случаев) выбрать другое значение дляlambda
.Вы также можете использовать алгоритм Grid-search, чтобы выбрать наилучшее значение
lambda
( гиперпараметр => тот, который вы должны выбрать).источник