Наостанок, про другу частину доповіді Surya Ganguli - як теоретичне розуміння процесу оптимізації може допомогти на практиці, а саме, яку роль відіграють сідлові точки (перша частина ось тут, і вона абсолютно необов'язкова для читання далі).
Disclaimer: пост написаний на основі відредагованих логів чату closedcircles.com, звідси і стиль викладу, і уточнюючі питання.
Трохи нагадаю, що таке сідлові точки. У просторі нелінійних функцій є точки з нульовим градієнтом за всіма координатами - саме до них прагне градієнтний спуск.
Якщо градієнт має всі координати 0, вона може бути:
- Локальним мінімумом, якщо по всіх напрямках друга похідна позитивна.
- Локальним максимумом, якщо по всіх напрямках друга похідна негативна.
- Сідловою точкою, якщо за якимись напрямками друга похідна позитивна, а за іншими негативна.
Отже, нам розповідають хороші новини для градієнтного спуску в дуже багатовимірному просторі (яким є оптимізація терезів глибокої нейромережі).
- По-перше, переважна більшість точок з нульовим градієнтом - це сідлові точки, а не мінімуми.
Це можна легко зрозуміти інтуїтивно - щоб точка з нульовим градієнтом була локальним мінімумом або максимумом, друга похідна повинна бути одного знака по всіх напрямках, але чим більше вимірювань, тим більше шанс, що хоч по якомусь напрямку знак буде іншим.
І тому більшість складних точок, які зустрінуться - будуть сідловими.
- По-друге, зі зростанням кількості параметрів виявляється, що всі локальні мінімуми досить близько один до одного і до глобального мінімуму.
Обидва ці твердження були відомі і теоретично доведені для випадкових ландшафтів у великих вимірах.
У співпраці з лабою Yoshua Bengio їх вийшло експериментально продемонструвати і для нейромереж (теоретично поки не подужали).
Це гістограма значень cost function в локальних мінімумах, які вийшли багаторазовими спробами тренувань з різних точок - чим менше параметрів, тим менше розкид значень в локальних мінімумах. Коли параметрів багато, розкид різко зменшується і стає дуже близьким глобальному мінімуму.
Головний висновок - що локальних мінімумів боятися не потрібно, основні проблеми - з сідловими точками. Раніше, коли ми погано вміли тренувати нейромережі, ми думали, що це через те, що система скочується в локальний мінімум. Виявляється, ні, ми просто не могли вибратися з сідлової точки.
І ось вони придумали твік градієнтного спуску, який добре уникає сідлових точок. На жаль, у них там використовується гессіан.
Для неосвічених як я, гесіан - це матриця значень попарних других похідних в точці. Якщо думати про градієнт як про першу похідну для функції від багатьох змінних, гесіан - друга.
Олександр Власов ось написав хороший туторіал про так звані second order optimizations, до яких відноситься робота з гессіаном.
Зрозуміло вважати гессіан - страшно непрактично для сучасних нейромереж, тому я не знаю як їх рішення на практиці застосовувати.
Другий момент - це вони придумали якусь теоретично кошерну ініціалізацію, яка в разі просто лінійних систем вирішує проблему vanishing gradients і дає тренувати наскільки завгодно глибоку лінійну систему за однакову кількість градієнтних кроків.
І мовляв стверджується, що і для нелінійних систем це теж допомагає. Я, правда, поки не бачив згадок у літературі успішного використання цієї техніки.
Посилання на повні статті: про оптимізацію градієнтного спуску і про поліпшену ініціалізацію.
У цікавий час живемо.
