Проблемът от миналия час
В практикума пробвахме w = 1.8, 2.0, 2.2 и гледахме коя дава по-малка загуба. С един признак това е поносимо. С десет признака вариантите стават милиони, а съвременните мрежи имат милиарди параметри. Нужен е начин да намираме минимума, без да пробваме всичко.
Идеята: търкаляне надолу
Представете си, че сте на хълм в гъста мъгла и трябва да слезете. Виждате само земята под краката си. Разумната стратегия е: усетете накъде е наклонът, направете стъпка натам, повторете.
Градиент
Наклонът на функцията на загубата в дадена точка — накъде и колко стръмно расте. Стъпката се прави в обратната посока.
ново w = старо w − скорост_на_обучение · наклонЗащо стъпките сами намаляват
Близо до минимума наклонът е малък, значи и стъпката е малка. Далече от минимума наклонът е голям и алгоритъмът бърза. Това е приятно свойство, което не се налага да се програмира допълнително.
Скоростта на обучение
Скорост на обучение (learning rate)
Число, което умножава стъпката. Задава се от нас и е най-важната настройка при обучението.
- Твърде малка — обучението пълзи. Хиляди итерации, а загубата почти не мърда.
- Твърде голяма — алгоритъмът прескача минимума и се мята от единия склон на другия. Загубата расте вместо да пада или става
NaN. - Точно колкото трябва — загубата пада бързо в началото и постепенно се успокоява.
Първото нещо, което се проверява
Когато обучението „не работи“, в над половината случаи причината е скоростта на обучение. Начертайте загубата по итерации — кривата веднага показва кой от трите случая е.
Целият алгоритъм
- Започни със случайни стойности на параметрите.
- Пресметни предсказанията за (част от) данните.
- Пресметни загубата — колко се различават от истината.
- Пресметни наклона на загубата спрямо всеки параметър.
- Премести всеки параметър малко в посока надолу.
- Повтори, докато загубата спре да намалява.
Един алгоритъм за всичко
Точно тези шест стъпки обучават и права през осем точки, и езиков модел с милиарди параметри. Разликата е в размера, не в идеята.
Къде се обърква
Локален минимум
Ако хълмът има трапчинка встрани от най-ниската точка, топчето може да заседне в нея. При простите модели това не се случва (кривата има само един минимум), при невронните мрежи се случва — но на практика се оказва, че повечето локални минимуми са достатъчно добри.
Плоски места
Там, където наклонът е почти нула, стъпките стават мънички и обучението спира да напредва, без да е стигнало добро решение. Срещу това има подобрени варианти на алгоритъма — най-известният се нарича Adam и е това, което ще срещнете като optimizer="adam".
Партиди
При милиони примери е скъпо да се смята загубата върху всички при всяка стъпка. Затова се взима случайна партида (batch) от няколкостотин примера. Посоката става малко неточна, но стъпките са много по-бързи — общо погледнато се печели.