Нейронные сети — разная скорость обучения для каждого веса

У меня есть несколько вопросов относительно теории градиентного спуска нейронных сетей.

Первый вопрос: допустим, у нас есть 5 весов, по одному для каждой из 5 функций. А теперь мы хотим вычислить градиент. Как алгоритм внутренне это делает? Берет ли он первый вес (=W1) и пытается его немного увеличить (или уменьшить), а когда это сделано, переходит ко второму весу? Или он делает это по-другому и более эффективно, меняя одновременно более 1 веса?

Второй вопрос: если функция 1 намного важнее, чем функция 2, поэтому одно и то же изменение (в %) W1 оказывает большее влияние на потери по сравнению с W2, не лучше ли иметь разную скорость обучения для каждого веса? Если у нас есть только одна скорость обучения, мы устанавливаем ее, принимая во внимание только наиболее значимый вес, верно?


person Solmyros    schedule 04.06.2020    source источник


Ответы (1)


На вопрос 1:

Это просто градиентный спуск. Вы не качаете веса независимо друг от друга: вы складываете свои веса в вектор/матрицу/тензор W, вычисляя и увеличивая delta_W, который сам является (соответственно) вектором/матрицей/тензором. Как только вы узнаете это приращение, вы примените его ко всем весам одновременно.

На вопрос 2:

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

Что касается «важности», которую вы описываете:

поэтому одно и то же изменение (в %) W1 оказывает большее влияние на потери по сравнению с W2, не лучше ли иметь разную скорость обучения для каждого веса

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

person Ash    schedule 04.06.2020