Выбор вручную коэффициента обучения и штрафа регуляризации

Здравствуйте и вновь добро пожаловать на занятия по теме «Обработка данных: глубокое обучение на языке Python, часть 1».

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

Сначала обсудим коэффициент обучения. Как я недавно указывал, это должна быть малая величина, да и вы познакомились с несколькими примерами. Важным тут является выбор масштаба, на котором вы проверяете различные варианты. Например, если вы устанавливаете значение 0,1, вам нет необходимости пробовать значения 0,9, 0,8, 0,7 и так далее. Лучше всего использовать логарифмический масштаб с разницей на каждом шаге в 10 раз. К примеру, если вы попробовали значение 10-1 и оно оказалось чересчур большим, попробуйте значение, равное 10-2. Если и оно оказалось слишком большим – попробуйте значение 10-3 и так далее. Порой мне приходилось использовать такой малый коэффициент обучения, как 10-7.

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

С другой стороны, если ваша функция ошибок или затрат сходится слишком медленно, то, вероятно, коэффициент обучения слишком мал. Попробуйте увеличить его в 10 раз, чтобы обучение происходило быстрее. Хорошим приёмом здесь является отключение всех функций программы, кроме собственно градиентного спуска – то есть попробуйте отключить регуляризацию и всё остальное, после чего продолжайте снижать величину коэффициента обучения и смотрите, что получится. Чересчур большой коэффициент обучения всё испортит, а чересчур низкий – нет, просто обучение будет происходить медленнее. Если даже в этом случае ситуация не улучшается, то проблема, вероятно, в самом коде.

В курсе «Глубокое обучение, часть 2» мы обсудим создание нейронной сети с пакетами учебных данных, когда учебные данные имеют различный размер. В этом случае коэффициент обучения оказывается чувствительным к размеру пакета, поскольку функция затрат является суммой индивидуальных ошибок. Тогда при большом количестве данных функция затрат будет больше. Для её нормализации достаточно поделить её величину на N – количество используемых в данный момент учебных примеров. В таком случае коэффициент обучения может быть подобран независимо от размера пакета.

Подобно тому, как коэффициент обучения может быть выбран независимо от количества данных, штраф регуляризации также можно установить независимо от количества параметров, просто разделив сумму квадратов всех параметров на количество параметров. Заметьте, что я сам не всегда провожу такую нормализацию, но попробовать полезно, если что-то сразу не заработало.

Ранее я столкнулся с одной интересной проблемой – я забыл умножить штраф регуляризации на параметр регуляризации, что автоматически установило параметр, равным 1. Для той конкретной задачи, над которой я работал, такое значение было чересчур большим, так что частота появления ошибки колебалась вокруг случайной точки. Поэтому иногда полезно полностью отключить регуляризацию и сделать коэффициент очень малым, чтобы понять – ваша модель действительно работает, или в код закралась ошибка.

Понравилась статья? Поделить с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: