В PyTorch есть несколько функций для настройки скорости обучения, каждая из которых имеет свои плюсы и минусы.
Зачем нам корректировать скорость обучения?
Гиперпараметр скорость обучения определяет скорость или скорость, с которой модель обучается.
Советы по повышению скорости обучения:
- Начните со значения вроде 0,1 и постепенно уменьшайте до 0,01, 0,001,….
- Если модель работает хорошо при таком значении, как 0,01, проверьте также такие значения, как 0,02, 0,03,….
- Используйте регуляторы скорости обучения.
- Подобные действия могут привести к хорошей скорости обучения вашей модели.
Настройка скорости обучения в PyTorch
У нас есть несколько функций в PyTorch для настройки скорости обучения:
- ЛямбдаLR
- МультипликативныйLR
- СтепЛР
- MultiStepLR
- ЭкспоненциальныйLR
- УменьшитьLROnPlateau
- и многое другое…
Теперь мы увидим каждый метод,
ЛямбдаLR
Устанавливает скорость обучения каждой группы параметров на начальную скорость обучения, умноженную на заданную функцию.
Здесь мы используем лямбда-функции для установки скорости обучения.
Код описан четко, наблюдайте, как скорость обучения увеличивается с каждой эпохой.
МультипликативныйLR
Умножьте скорость обучения каждой группы параметров на коэффициент, указанный в указанной функции.
Итак, это похоже на LambdaLR, но для дальнейших шагов оно будет умножаться на последнюю скорость обучения.
Итак, когда начальная скорость обучения = 0,1 (кэш = 0,1)
тогда для первой эпохи lr = 0,1 * 0,9 = 0,09 (кэш = кеш * фактор (0,9))
то для второй эпохи lr = 0,09*0,9 = 0,081 …….
СтепЛР
Снижает скорость обучения каждой группы параметров по гамме каждые эпохи step_size.
Итак, Learning_rate приспосабливается к Learning_rate*gamma после каждого шага.
Если step_size = 20, gamma = 0,1, initial_lr = 0,1, то
lr = 0,1, если эпохи‹20
lr = 0,1*0,1 = 0,01, если эпохи ≥20 и эпохи ‹40
lr = 0,01*0,1 = 0,001, если эпохи ≥ 40 и эпохи ‹60 ……
MultiStepLR
Уменьшает скорость обучения каждой группы параметров по гамме, как только число эпох достигает одной из вех.
Итак, если эпохи‹2 lr = 0,1
если эпохи ≥2 и эпохи ‹ 5 lr = 0,1*gamma = 0,1*0,1 = 0,01
если эпохи ≥5 и эпохи ‹ 9 lr = 0,01*gamma = 0,01*0,1 = 0,001
если эпохи ≥ 9 lr = 0,001*гамма = 0,001*0,1 = 0,0001
ЭкспоненциальныйLR
Снижает скорость обучения каждой группы параметров по гамме каждую эпоху.
Это похоже на StepLR, когда step_size = 1, для каждой эпохи скорость обучения уменьшается.
УменьшитьLROnPlateau
- Это самый популярный регулятор скорости обучения .
- Это отличается от остальных наивных регуляторов скорости обучения.
- В этом методе скорость обучения корректируется, когда указанные показатели не улучшаются.
- Этот настройщик считывает количество метрик, и если для «терпения» количества эпох не наблюдается улучшения, скорость обучения снижается.
После 5 эпохи потери начинают расти, поэтому после 5 эпох (терпение = 5) без уменьшения потерь скорость обучения автоматически снижается до 0,001.
Существуют более сложные планировщики скорости обучения, например,
- Косинусный отжигLR.
- ЦиклическийLR.
- OneCycleLR.
- Косинусный отжиг теплых перезапусков.
Но самые важные и популярные объясняются.
Ссылки:
- Официальная документация PyTorch.
- Канал Python Engineer на YouTube.
- Переполнение стека……..
Празднуйте свои маленькие победы.