Лого на 91. НЕГ „Проф. Константин Гълъбов“

Избираем модул · Урок 12

Градиентно спускане

Алгоритъмът, с който се обучава почти всичко: търкаляне надолу по хълма на загубата. Стъпка на обучение, локални минимуми и защо понякога нищо не се получава.

Проблемът от миналия час

В практикума пробвахме w = 1.8, 2.0, 2.2 и гледахме коя дава по-малка загуба. С един признак това е поносимо. С десет признака вариантите стават милиони, а съвременните мрежи имат милиарди параметри. Нужен е начин да намираме минимума, без да пробваме всичко.

Идеята: търкаляне надолу

Представете си, че сте на хълм в гъста мъгла и трябва да слезете. Виждате само земята под краката си. Разумната стратегия е: усетете накъде е наклонът, направете стъпка натам, повторете.

стойност на теглото wзагубаминимум
Кривата показва загубата при различни стойности на теглото. Всяка стъпка е една итерация на обучението.

Градиент

Наклонът на функцията на загубата в дадена точка — накъде и колко стръмно расте. Стъпката се прави в обратната посока.

ново w = старо w − скорост_на_обучение · наклон

Защо стъпките сами намаляват

Близо до минимума наклонът е малък, значи и стъпката е малка. Далече от минимума наклонът е голям и алгоритъмът бърза. Това е приятно свойство, което не се налага да се програмира допълнително.

Скоростта на обучение

Скорост на обучение (learning rate)

Число, което умножава стъпката. Задава се от нас и е най-важната настройка при обучението.

  • Твърде малка — обучението пълзи. Хиляди итерации, а загубата почти не мърда.
  • Твърде голяма — алгоритъмът прескача минимума и се мята от единия склон на другия. Загубата расте вместо да пада или става NaN.
  • Точно колкото трябва — загубата пада бързо в началото и постепенно се успокоява.

Първото нещо, което се проверява

Когато обучението „не работи“, в над половината случаи причината е скоростта на обучение. Начертайте загубата по итерации — кривата веднага показва кой от трите случая е.

Целият алгоритъм

  1. Започни със случайни стойности на параметрите.
  2. Пресметни предсказанията за (част от) данните.
  3. Пресметни загубата — колко се различават от истината.
  4. Пресметни наклона на загубата спрямо всеки параметър.
  5. Премести всеки параметър малко в посока надолу.
  6. Повтори, докато загубата спре да намалява.

Един алгоритъм за всичко

Точно тези шест стъпки обучават и права през осем точки, и езиков модел с милиарди параметри. Разликата е в размера, не в идеята.

Къде се обърква

Локален минимум

Ако хълмът има трапчинка встрани от най-ниската точка, топчето може да заседне в нея. При простите модели това не се случва (кривата има само един минимум), при невронните мрежи се случва — но на практика се оказва, че повечето локални минимуми са достатъчно добри.

Плоски места

Там, където наклонът е почти нула, стъпките стават мънички и обучението спира да напредва, без да е стигнало добро решение. Срещу това има подобрени варианти на алгоритъма — най-известният се нарича Adam и е това, което ще срещнете като optimizer="adam".

Партиди

При милиони примери е скъпо да се смята загубата върху всички при всяка стъпка. Затова се взима случайна партида (batch) от няколкостотин примера. Посоката става малко неточна, но стъпките са много по-бързи — общо погледнато се печели.