Есть ли различия в регуляризации в MLP между пакетными и индивидуальными обновлениями?

9

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

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

Формула, которую я имею для термина обновления (из курса Coursera ML), указывается как пакетное обновление, например, для каждого веса, после суммирования всех применимых дельт для всего тренировочного набора по распространению ошибок lambda * current_weightдобавляется также корректировка перед комбинированным дельта вычитается в конце пакета, где lambdaнаходится параметр регуляризации.

Моя реализация backpropagation использует обновления веса для каждого элемента. Я обеспокоен тем, что не могу просто скопировать пакетный подход, хотя он выглядит интуитивно понятным для меня. Работает ли меньший срок регуляризации для каждого элемента так же хорошо?

Например, lambda * current_weight / Nгде N - размер тренировочного набора - на первый взгляд это выглядит разумно. Я не смог найти ничего по этому вопросу, и мне интересно, если это потому, что регуляризация не работает так хорошо с обновлением для каждого элемента, или даже идет под другим именем или измененной формулой.

Нил Слэйтер
источник

Ответы:

2

Регуляризация важна и для каждого предмета обучения. Я бы предложил начать с базового подхода к проверке лямбды, независимо от того, проводите ли вы групповое или индивидуальное обучение. Это самый простой и безопасный подход. Попробуйте вручную с несколькими различными значениями. например, 0,001. 0,003, 0,01, 0,03, 0,1 и т. Д. И посмотрите, как ведет себя ваш набор проверки. Позже вы можете автоматизировать этот процесс, введя линейный или локальный метод поиска.

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

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

INSYS
источник
Да, я все еще собираюсь провести перекрестную проверку, чтобы проверить на предмет подгонки, мой вопрос более простой, чем этот - я не могу найти никаких ссылок на использование регуляризации с регулировкой веса на единицу в MLP вообще, и я обеспокоен, что есть хороший причина тому - например, он не работает в этом режиме обучения или нуждается в настройке. Crossvalidated вопрос является очень похож , хотя и дает мне больше уверенности в себе, спасибо. Страница алгоритма SGD, кажется, имеет другой, стохастический метод для введения регуляризации, который может быть немного продвинутым для меня, но это именно то, что я ищу.
Нил Слэйтер
Регуляризация важна и для каждого предмета обучения. Я бы все же предложил начать с базового подхода к проверке лямбды. Это самый простой и безопасный подход. Попробуйте вручную с несколькими различными значениями. например, 0,001. 0,003, 0,01, 0,03, 0,1 и т. Д. И посмотрите, как ведет себя ваш набор проверки. Позже вы можете автоматизировать этот процесс, введя линейный или локальный метод поиска.
insys
Если ваш комментарий выше был отредактирован и заменил первое предложение / вопрос в вашем ответе, то, я думаю, я мог бы принять его.
Нил Слэйтер
Спасибо за указание, я согласен. Отредактировал это в. Надеюсь, это более ясно.
insys
2

В дополнение к тому, что сказал insys :

Регуляризация используется при расчете обратного распространения для всех весов в вашем MLP. Следовательно, вместо вычисления градиента в отношении всех входных данных обучающего набора ( batch) вы используете только некоторые / один элемент (ы) ( stochastic or semi-stochastic). Вы закончите тем, что ограничите результат обновления в отношении одного элемента вместо всех, что также правильно.

Также, если я правильно помню, Эндрю Н.Г. использовал L2-regularization. /NВ lambda * current_weight / Nне является обязательным, он просто помогает перемасштабирования входа. Однако, если вы решите не использовать его, вам придется (в большинстве случаев) выбрать другое значение для lambda.

Вы также можете использовать алгоритм Grid-search, чтобы выбрать наилучшее значение lambda( гиперпараметр => тот, который вы должны выбрать).

Orelus
источник