Машинне навчання · Блок 7 · Тема 33

Активації та ініціалізація

Дві дрібниці, які ніхто не вважає моделлю: якою функцією зігнути суму і якими числами почати. Саме вони вирішують, чи глибока мережа навчиться взагалі.

У попередній темі ми розібрали зворотне поширення до останнього множення й побачили, чим воно закінчується: градієнт на вході в мережу — це добуток локальних похідних уздовж усього шляху. Backprop чесно перемножує те, що йому дали. А що саме йому дають, вирішують дві речі, яких у градієнті немає: функція активації в кожному вузлі й числа, з яких мережа стартує.

Це не налаштування «за смаком». Різниця між множником 0.25 і множником 1.0 на кожному шарі — це різниця між мережею, яка вчиться за пів хвилини, і мережею, якій потрібні тисячі років. Ми зараз порахуємо це буквально. Друга половина теми — ініціалізація — виглядає ще дрібнішою, і саме тому її найчастіше проґавлюють: мережа з неправильним стартом не падає з помилкою, вона просто мовчки не вчиться.

Наскрізний приклад лишається той самий, що в темах 08 і 32: дошка оголошень про вживані телефони, дві ознаки (вік акаунта продавця й відхилення ціни від типової для цієї моделі) і питання «чи шахрайське це оголошення». Усі числа в лекції пораховані саме на ній, і зошит теми друкує їх до останнього знака.

01 / НавіщоДві ручки поза градієнтом

Перше питання — навіщо активація взагалі потрібна. Відповідь доведена в темі 31 у чотири рядки, і повторювати доведення тут немає сенсу. Висновок такий: два лінійні шари поспіль — це матриця, помножена на матрицю, тобто знову одна матриця. Сто лінійних шарів згортаються в один. Мережа без нелінійності не має глибини взагалі: скільки б параметрів у ній не було, вона рахує рівно те, що рахує одна пряма. Активація — єдине, що робить стос шарів чимось більшим за суму шарів.

Але з цього не випливає, що годиться будь-яка нелінійна функція. Активація стоїть у двох потоках одночасно. Уперед крізь неї тече значення, і тут важлива форма функції. Назад крізь неї тече градієнт, і тут важлива вже не сама функція, а її похідна: у зворотному проході провина нейрона множиться на f′(z). Форму бачать усі, похідну — майже ніхто. А вирішує саме вона.

Чому це «поза градієнтом». Ваги мережа підбирає сама — на те й навчання. Але вибір активації й спосіб ініціалізації градієнтний спуск не оптимізує: їх задає людина до старту, і змінити їх посеред навчання не можна. Це параметри самої задачі оптимізації, а не її розвʼязку.

02 / КласикаСигмоїда й tanh: 0.25 проти 1.0

Історично першою прижилась сигмоїда (sigmoid, логістична функція). Вона плавно тисне будь-яке число у проміжок від нуля до одиниці:

σ(z) = 1 / (1 + e−z)   ·   σ′(z) = σ(z)·(1 − σ(z))

Похідна тут гарна тим, що виражається через саму функцію: якщо прямий прохід уже порахував a = σ(z), то похідна коштує одне множення, a·(1 − a). Тепер найважливіше число всієї теми. Добуток a(1 − a) для a з проміжку (0, 1) максимальний рівно посередині, при a = 0.5, і дорівнює 0.25. Це не «зазвичай», це стеля: похідна сигмоїди ніде не перевищує чверті. На краях вона падає до нуля — при z = 5 вона вже 0.0066.

tanh — та сама крива, розтягнута вдвічі й опущена в нуль: tanh(z) = 2σ(2z) − 1. Її вихід лежить у проміжку від −1 до 1, а похідна дорівнює 1 − tanh²(z) і в нулі досягає одиниці. Той самий розтяг, що зробив вихід симетричним, підняв стелю похідної вчетверо. Плюс до цього вихід tanh центрований навколо нуля, тоді як сигмоїда завжди додатна — а це означає, що всі ваги одного нейрона отримують градієнт однакового знаку й оптимізація йде зигзагом.

Порівняй обидві криві з їхніми похідними. Пунктир на нижньому графіку — рівень 0.25:

Інтерактив 1 · Активація та її похідна поруч

Угорі — сама функція, унизу — її похідна. Повзунок ставить точку z, у якій усе рахується.

максимум похідної
похідна в точці
пройде крізь 10 таких шарів
Головне число: у сигмоїди верхівка похідної впирається в 0.25 і не піднімається вище ніде — пунктирна лінія проходить рівно по маківці. У tanh та сама верхівка стоїть на 1.00. Стовпчик «пройде крізь 10 таких шарів» — це f′(z) у десятому степені: частка градієнта, що дійшла б до першого шару, якби всі десять шарів працювали в цій самій точці.

Порухай повзунок у нуль при вибраній сигмоїді: похідна 0.2500, крізь десять шарів проходить 9.5·10−7. Це найкращий можливий випадок — усі десять шарів працюють рівно в оптимальній точці. Перемкни на tanh: у нулі похідна 1.0000, крізь десять шарів проходить одиниця. Різниця між чвертю й одиницею на одному шарі здається дрібною. На десяти вона стає мільйонною.

03 / ЗатуханняЗатухання градієнта з числами

Тепер порахуймо це чесно. Із теми 32 ми знаємо, як провина переходить із шару на шар:

δ(l) = (W(l+1)T δ(l+1)) ⊙ f′(z(l))

На кожному переході відбуваються дві дії: множення на матрицю ваг і множення на похідну активації. Ваги можна підібрати так, щоб множення на матрицю приблизно зберігало довжину вектора (як саме — розділ 09). Тоді весь баланс лишається за похідною. Пройти від виходу до першого шару з L шарів означає помножитись на f′ рівно L разів:

‖δ(1)‖ ≈ (max f′)L · ‖δ(L)‖  →  для сигмоїди 0.2510 = 9.5·10−7

Один мільйонний. Градієнт, що приходить до першого шару, у мільйон разів слабший за той, що вийшов із функції втрат. Оцінка груба: вона припускає, що множення на матрицю ваг довжину вектора не змінює, а реальна матриця то трохи стискає вектор, то трохи розтягує. Але саме тому нижче й стоїть інтерактив із справжнім зворотним проходом: там виміряний множник тримається в межах від 0.22 до 0.26 при будь-якій глибині. Формула не бреше.

Прочитати «в мільйон разів слабший» легко, відчути — ні. Тому переведімо в кроки навчання. Крок градієнтного спуску зсуває вагу на η·∂L/∂w. Якщо останньому шару достатньо тисячі кроків, щоб дійти куди треба, то першому шару з утричі меншим... не втричі. Порахуймо точно: першому шару треба стільки ж кроків, поділених на множник затухання.

глибина L0.25L−1кроків першому шарупри 1 мс на крок
22.5·10−14 0004 секунди
53.9·10−3256 0004 хвилини
103.8·10−6262 000 0003 доби
153.7·10−92.7·10118.5 року
203.6·10−122.7·10148 700 років

Читається таблиця так: «останній шар навчився за тисячу кроків; щоб перший шар зрушив на стільки ж, потрібно ось стільки». На двох шарах різниця непомітна. На десяти замість секунди виходять три доби. На двадцяти — вісім тисяч років, тобто ніколи. Перші шари глибокої сигмоїдної мережі не вчаться повільно — вони не вчаться: до кінця навчання вони так і стоять із випадковими вагами, з яких стартували.

Це і є затухання градієнта (vanishing gradient) — та сама межа, яку тема 32 назвала головним обмеженням глибоких мереж. Тепер у неї є ціна в добах.

Нижче — не оцінка, а справжній зворотний прохід крізь L шарів по 24 нейрони. Стовпчики показують норму провини ‖δ‖ на кожному шарі; шкала логарифмічна, одна велика поділка — множник 10 000.

Інтерактив 2 · Куди дівається градієнт по дорозі до першого шару

Справжній зворотний прохід крізь L шарів. Праворуч — вихід мережі, ліворуч — вхід.

дійшло до 1-го шару
множник на шар
кроків першому шару замість 1000
Прожени повзунок від краю до краю: із сигмоїдою стовпчики падають сходами й на L = 20 перший шар отримує близько 10−12 від того, що отримав останній. Виміряний множник на шар тримається біля 0.25 — рівно те, що обіцяє формула, бо ваги тут підібрані так, щоб множення на матрицю довжину вектора зберігало. Із ReLU стовпчики стоять майже на одній висоті при будь-якій глибині.

Чому взагалі можна казати про «множник на шар», якщо на переході стоїть ще й матриця ваг? Тому що її підбирають саме так, щоб вона нічого не змінювала за модулем — про це розділ 09. Множення на добре відмасштабовану матрицю в середньому зберігає довжину вектора, тож увесь бюджет затухання лишається за похідною активації. Варто ваги зробити більшими — і додасться вибух градієнта; меншими — затухання прискориться. Дві половини цієї теми працюють на одну й ту саму величину.

Зверни увагу на tanh. Його стеля — одиниця, і здається, що затухання йому не загрожує. Насправді одиницю похідна tanh дає лише в нулі, а типовий нейрон працює не в нулі: виміряний множник тримається біля 0.9, і на двадцяти шарах до першого шару доходить приблизно пʼята частина того, що вийшло з останнього. Втрата помітна, але вона в пʼять разів, а не в мільйон. Стеля рятує від нуля, але не гарантує одиниці — саме тому tanh терпимий у неглибоких мережах і ненадійний у справді глибоких.

04 / ReLUReLU: похідна дорівнює одиниці

Тепер найпростіша функція в цій лекції. ReLU (rectified linear unit, випрямляч) просто обрізає все відʼємне:

ReLU(z) = max(0, z)   ·   ReLU′(z) = 1 при z > 0,   0 при z < 0

Похідна на додатній півосі дорівнює рівно одиниці — не «близько одиниці в найкращій точці», а одиниці скрізь, де z > 0. Помножити на одиницю двадцять разів — це помножити на одиницю. Ланцюг із розділу 03 перестає гаснути: градієнт, що вийшов із функції втрат, доходить до першого шару майже без утрат. У інтерактиві 2 перемкни активацію на ReLU й покрути глибину — стовпчики більше не падають.

Друга властивість не менш важлива, хоч і прозаїчна: ReLU не рахує експоненту. Сигмоїда й tanh на кожен нейрон вимагають exp, ReLU — одного порівняння з нулем. На мережі в мільярд нейронів це різниця в годинах машинного часу.

Третя властивість найтонша. ReLU не насичується згори: скільки б не був z, похідна лишається одиницею. У сигмоїди й tanh нейрон, який «занадто впевнений», перестає вчитись — його похідна впала до нуля. У ReLU впевненість не карається. Саме тому в 2010-х глибокі мережі раптом почали навчатись, і не через нову математику: змінили одну функцію в кожному вузлі. Так само в темі 30 сходинка робила перцептрон непридатним для градієнтного навчання — її похідна нульова всюди, ланцюг обривався на першій же ланці. ReLU — це та сама сходинка, у якої правий шматок нахилили під сорок пʼять градусів, і цього виявилось досить.

05 / СмертьМертвий ReLU

У ReLU є зворотний бік, і він жорсткіший, ніж здається з опису. Похідна на відʼємній півосі дорівнює нулю. Якщо нейрон опинився в стані z < 0 на всіх обʼєктах навчальної вибірки, назад крізь нього не проходить нічого. Градієнт по його вагах дорівнює нулю. Ваги не змінюються. Наступного кроку ситуація та сама. І наступного.

Це не тимчасове гальмування, як у сигмоїди, а замкнене коло: нейрон не оновлюється, бо не отримує градієнта, і не отримує градієнта, бо не оновлюється. Вийти з нього мережа не може ніколи. Нейрон помер — він назавжди перетворився на константу нуль і просто займає памʼять.

Схема 1 · Як помирає нейрон ReLU

Ліворуч — живий нейрон, праворуч — той самий після завеликого кроку. Точки — обʼєкти навчальної вибірки.

Що читати: живий нейрон має хоч один обʼєкт праворуч від нуля — по ньому й тече градієнт. Мертвий не має жодного, тож похідна дорівнює нулю на всій вибірці, градієнт по вагах теж нуль, і крок спуску нічого не змінює. Коло замикається саме на собі.

Убиває нейрони завелика швидкість навчання. Один крок із великим η здатен зсунути ваги так далеко, що весь нейрон вилітає в відʼємну зону. Порахуймо на нашій дошці оголошень. Мережа 2 → 64 → 1 з ReLU, ініціалізація He, 300 епох повного градієнтного спуску, і єдине, що ми міняємо, — швидкість навчання:

крок ηмертвих нейронівчастка шарувтрататочність
0.10 з 640 %0.2630.915
10 з 640 %0.2230.929
517 з 6427 %0.2210.924
1035 з 6455 %0.2380.924
2038 з 6459 %0.4230.870
5061 з 6495 %0.5410.865
10064 з 64100 %4.5130.837

Таблицю варто читати повільно, бо в ній є пастка. При η = 5 сімнадцять нейронів із шістдесяти чотирьох уже мертві — а метрики чудові, точність 0.924. Мережа працює на решті сорока семи й нічого не підозрює. Ти б цього не помітив. При η = 10 мертва вже більшість шару, і точність усе ще 0.924: шістдесятичотирьох нейронів для цієї задачі просто забагато, тому втрата половини непомітна. І тільки в останньому рядку катастрофа стає видимою — усі 64 нейрони мертві, мережа видає константу, і точність 0.837 дорівнює рівно частці чесних оголошень у вибірці. Модель не навчилась нічому, вона вгадує більшість.

Чому це небезпечно. Мертві нейрони не дають ні помилки, ні попередження, ні провалу метрики — доки їх не більшість. Мережа просто мовчки стає вужчою, ніж ти думаєш. Перевірка одна й коштує один рядок коду: прогнати навчальну вибірку й порахувати, у скількох нейронів max(z) по всіх обʼєктах не перевищує нуля. Зроби це хоч раз після навчання — у практиці теми ми саме так і рахували.

06 / РодинаLeaky ReLU, ELU, GELU

Усі наступні функції лікують одну й ту саму хворобу — нульову похідну ліворуч від нуля. Ідея в кожної одна: не давати похідній стати рівно нулем.

Leaky ReLU замість нуля лишає ліворуч невеликий нахил: max(αz, z) з α близько 0.01. Похідна ліворуч дорівнює 0.01 — мало, але не нуль, і замкнене коло розривається: нейрон, який зайшов у відʼємну зону, отримує тонкий струмочок градієнта й може повернутись. Ціна — нульова, обчислень стільки ж.

ELU (exponential linear unit) робить те саме плавно: z праворуч і ez − 1 ліворуч. Функція неперервна разом із похідною, а вихід при великих відʼємних z прямує до −1, тобто середнє активацій зміщується ближче до нуля. Мінус один: ліворуч знову зʼявляється експонента з її ціною.

GELU (gaussian error linear unit) множить вхід на ймовірність того, що стандартна нормальна величина менша за z: GELU(z) = z·Φ(z). Виходить майже ReLU, але з мʼяким переходом і невеликим провалом нижче нуля. Її похідна доходить до 1.129 при z = 1.41 і приймає відʼємні значення на проміжку від −2 до 0 — тобто там сигнал не просто слабшає, а міняє знак. Саме GELU стоїть у трансформерах, і в інтерактиві 1 її варто покрутити окремо: це єдина з шести функцій, у якої похідна більша за одиницю.

Таблиця 1 · Шість активацій одним поглядом

Максимум похідної — це стеля множника, з яким градієнт проходить крізь один шар.

функціяформулапохіднамаксимум похідноїколи брати
sigmoid1 / (1 + e−z)a·(1 − a)0.25лише на виході бінарної класифікації
tanh2σ(2z) − 11 − a²1.00неглибокі мережі, рекурентні шари
ReLUmax(0, z)1 або 01.00вибір за замовчуванням для прихованих шарів
Leaky ReLUmax(0.01z, z)1 або 0.011.00коли ReLU помирає, а крок зменшувати не хочеться
ELUz або ez − 11 або ez1.00коли важлива гладкість і нульове середнє
GELUz·Φ(z)Φ(z) + z·φ(z)1.129трансформери й великі мовні моделі
Чесно про різницю: між рядками 3–6 вона невелика. Перехід із сигмоїди на ReLU змінює порядки; перехід із ReLU на GELU дає відсоток-два якості на великих моделях і нічого не дає на маленьких. Починай із ReLU й міняй її лише тоді, коли порахував мертві нейрони й побачив проблему.

07 / ВихідЩо ставити на вихід

Тут ховається найчастіша помилка новачків, і причина в тому, що правила для прихованих шарів і для виходу — протилежні. У прихованих шарах активацію обирають за похідною: щоб градієнт проходив. На виході її обирають за формою: щоб число на виході означало те, що треба задачі. Похідна там уже не критична, бо це остання ланка ланцюга, і множитись багато разів вона не буде.

Таблиця 2 · Вихідний шар під задачу

Активація виходу, функція втрат і те, як читати відповідь.

задачанейронів на виходіактиваціявтратаяк читати
Бінарна класифікація1сигмоїдабінарна крос-ентропіяймовірність класу 1
Багатокласова, класи взаємовиключніKsoftmaxкатегорійна крос-ентропіярозподіл: сума по класах дорівнює 1
Багато міток одночасноKсигмоїда на кожному окремосума бінарних крос-ентропійK незалежних ймовірностей
Регресія1жодноїMSE або MAEсаме число
Три типові помилки: поставити ReLU на вихід регресії, коли відповідь буває відʼємною — модель не зможе видати відʼємне число взагалі; поставити softmax на регресію — виходи почнуть сумуватись в одиницю, і модель фізично не зможе видати нічого, крім часток; поставити softmax там, де мітки не взаємовиключні, — тоді дві правильні відповіді конкуруватимуть між собою замість того, щоб бути правильними обидві.

Softmax — це узагальнення сигмоїди на K класів. Він бере K чисел, підносить кожне в експоненту й ділить на суму всіх: softmax(z)ₖ = ezₖ / Σⱼ ezⱼ. Результат — набір додатних чисел, що сумуються в одиницю, тобто справжній розподіл імовірностей. Головне слово тут — сумуються: підняти ймовірність одного класу можна лише опустивши інші. Для задачі «одна правильна відповідь із десяти» це саме те, що треба. Для задачі «які з десяти тегів підходять цій статті» це шкода: теги не змагаються.

Окреме питання — чому сигмоїда, яку ми щойно вигнали з прихованих шарів за похідну 0.25, спокійно живе на виході. Причина в тому, що там вона не множиться багато разів, а ще й скорочується: у парі з крос-ентропією її похідна зникає повністю, і градієнт виходу дорівнює простій різниці «прогноз мінус правда» — це виведено в темі 31. Стеля 0.25 шкодить тільки тоді, коли її підносять у степінь глибини.

А для регресії на виході не має стояти нічого. Ціна телефона — це число від нуля до нескінченності, а не ймовірність; будь-яка тиснуча функція обріже його зверху. Порожній вихідний шар — не забутий крок, а свідомий вибір. Виняток лише один: якщо відповідь за змістом не може бути відʼємною, іноді ставлять softplus. Але навіть тоді частіше вчать модель на логарифмі відповіді й лишають вихід лінійним.

08 / СиметріяЧому нулі не працюють

Друга половина теми. Мережа стартує з якихось чисел, і найприродніша ідея — почати з нулів. У лінійній регресії так і роблять, і все працює. У нейромережі це руйнує все.

Візьмімо мережу 2 → 2 → 1 з попередньої теми, обнулімо в ній усі девʼять параметрів і зробімо один прохід на обʼєкті x = (1.0, −0.5) з правильною відповіддю y = 1. Прихований шар рахує z = 0, активація дає a = 0. Вихід теж нуль, сигмоїда перетворює його на ŷ = 0.5, провина виходу δ⁽²⁾ = 0.5 − 1 = −0.5. А далі все розсипається:

∂L/∂wj(2) = δ(2)·aj = (−0.5)·0 = 0   ·   δj(1) = δ(2)·wj(2)·f′ = (−0.5)·0·f′ = 0

Градієнт по вагах другого шару дорівнює нулю, бо активації першого шару нульові. Градієнт по вагах першого шару дорівнює нулю, бо ваги другого шару нульові. Оновиться рівно один параметр — зсув вихідного нейрона, бо в нього вхід завжди одиниця. Мережа скотиться до найкращої константи й застрягне на ній назавжди.

Ми перевірили це в зошиті на дошці оголошень: мережа 2 → 64 → 1 з нульовим стартом після 400 епох має всі ваги рівно нульові, втрату 0.4452 і точність 0.837. Число 0.4452 не випадкове — це ентропія розподілу міток, тобто втрата ідеальної константи. Та сама мережа з ініціалізацією He дає втрату 0.2211 і точність 0.929.

Тепер важливий нюанс, який відрізняє розуміння від зазубрювання. Нулі — це окремий, найгірший випадок ширшої проблеми. Припустімо, ми стартували не з нулів, а з однакових ваг: усі дорівнюють 0.5. Тепер градієнти не нульові — але обидва нейрони прихованого шару бачать той самий вхід із тими самими вагами, тому рахують те саме число, отримують ту саму провину й ту саму поправку.

Схема 2 · Симетрія, яку нічим не зламати

Один крок спуску на обʼєкті x = (1.0, −0.5), y = 1, η = 0.5. Ліворуч — однакові ваги, праворуч — нулі.

Числа справжні: ліворуч обидва нейрони після кроку мають ті самі 0.6032 і 0.4484 — шар із двох нейронів працює як один. Праворуч усі градієнти дорівнюють нулю, і після кроку ваги ті самі, що були. Обидві мережі мають девʼять параметрів і жодного корисного.

Це симетрія, і градієнтний спуск її не ламає: він однаково рухає однакові речі. Шар із тисячі однакових нейронів рахує рівно те саме, що один нейрон. Отже, вимога до ініціалізації перша й головна: ваги мають бути різними, причому випадковими — бо будь-який регулярний візерунок ризикує виявитись новою симетрією. Зсуви при цьому спокійно ставлять нулями: вони не творять симетрії, бо симетрію ламають уже самі ваги.

09 / МасштабXavier і He

Отже, випадкові. Лишилось питання — наскільки великі. І тут виявляється, що завеликі ваги псують справу не гірше за нулі, тільки з іншого боку.

Нехай нейрон приймає 100 входів, кожен зі стандартним відхиленням 1, а ваги ми взяли з розподілу зі стандартним відхиленням 1. Зважена сума складається зі ста доданків, тож її стандартне відхилення дорівнює 10. Типовий нейрон працює в точці |z| ≈ 10, де сигмоїда давно насичена: у нашому розрахунку 69 % обʼєктів дають |z| > 4, а середня похідна падає до 0.039 замість 0.207 при добре підібраному масштабі. Мережа з великих ваг починає навчання вже в стані затухання — вона стартує з насичення. А в мережі з ReLU великі ваги дають дзеркальну біду: активації ростуть від шару до шару, і на десятому шарі числа виходять за межі того, що взагалі можна складати без втрати точності.

Правильну відповідь дає одна вимога, і вона формулюється одним реченням: дисперсія виходу шару має дорівнювати дисперсії його входу. Тоді сигнал не гасне й не вибухає, скільки б шарів не було. Розпишімо, що з цього випливає.

крок 1 · дисперсія зваженої суми
Var(z) = nin · Var(w) · Var(a)

Сума n_in незалежних доданків, кожен з яких — добуток ваги на вхід. Дисперсії незалежних доданків додаються, тому попереду стоїть множник n_in — кількість входів нейрона.

крок 2 · вимагаємо рівності
nin · Var(w) = 1  →  Var(w) = 1 / nin

Це ініціалізація Xavier (вона ж Glorot). Ваги беруть із нормального розподілу із середнім нуль і дисперсією 1/n_in. Чим ширший шар, тим менші стартові ваги — і це логічно: більше доданків у сумі, менший внесок кожного.

крок 3 · поправка на ReLU
Var(w) = 2 / nin

ReLU обнуляє все відʼємне, а це рівно половина значень симетричного розподілу. Після неї середній квадрат активації вдвічі менший, ніж був до неї. Щоб компенсувати втрачену половину, дисперсію ваг беруть удвічі більшою. Це ініціалізація He, і двійка в ній — це саме та половина сигналу, яку зʼїдає ReLU.

Двійка — місце, де найлегше помилитись і найважче помітити помилку. Xavier виводили для симетричних активацій на кшталт tanh, які нічого не обнуляють. Якщо взяти Xavier під ReLU, дисперсія множитиметься на 0.5 щошару: на десяти шарах сигнал ослабне приблизно в тисячу разів. Не катастрофа, як у випадку малих ваг, але й не «однаково». Перевір це сам:

Інтерактив 3 · Пʼять способів почати — три різні долі

Дисперсія активацій на десяти шарах по 64 нейрони з ReLU. Вертикальна шкала логарифмічна: одна поділка — множник 105.

множник на шар
Var на 10-му шарі
нулів серед активацій 10-го шару
Три долі на одній картинці: усі пʼять кривих намальовані завжди, вибрана підсвічена. «Малі» падають прямою вниз на двадцять три порядки, «великі» такою самою прямою вгору на тринадцять, He йде горизонтально. Xavier — четверта, проміжна доля: не падає прямовисно, але за десять шарів утрачає близько трьох порядків, бо його множник дорівнює 0.5, а не 1. Рядок «нулів серед активацій» пояснює двійку в He: ReLU обнуляє приблизно половину значень при будь-якому масштабі ваг.

Останній рядок інтерактиву варто прочитати уважно. Частка нулів тримається біля 50 % для всіх ненульових способів ініціалізації — і це не залежить від масштабу ваг узагалі, бо множення на число не змінює знак. Саме ця стала половина й перетворюється на двійку в формулі He. А ініціалізація нулями дає 100 % нулів на всіх шарах: мережа мертва ще до першого кроку навчання.

Практично. У всіх бібліотеках це вже зроблено за тебе: PyTorch і Keras ініціалізують лінійні шари за замовчуванням чимось із родини Xavier/He. Знати формули треба не щоб їх набирати, а щоб розуміти два випадки: коли ти пишеш шар власноруч і коли мережа з чужого репозиторію не вчиться, а причина — невідповідність ініціалізації й активації.

10 / ДаліКуди далі

Підсумок теми — пʼять рядків:

Далі курс іде двома продовженнями, і обидва спираються саме на цю тему. Тема про оптимізатори бере градієнт, який ми щойно навчились доводити до першого шару, і питає, що з ним робити: чистий крок, момент, адаптивна швидкість, Adam. Там зʼясується, що адаптивні методи частково лікують і залишкове затухання, бо нормують крок на власну історію градієнта — але лише частково, і саме тому активація лишається важливішою за оптимізатор. Тема про регуляризацію зайде з іншого боку: dropout, weight decay і нормалізація по батчу. Остання прямо продовжує розділ 09 — вона робить те саме вирівнювання дисперсії, тільки не один раз на старті, а на кожному кроці навчання, і саме тому мережі з нею значно менш чутливі до ініціалізації.

А головний висновок теми варто сформулювати ширше за нейромережі. Двічі в цій лекції ми бачили один і той самий сюжет: величина, яка множиться сама на себе багато разів, або гасне до нуля, або вибухає, і третього не дано — рівно одиниця досягається тільки навмисним проєктуванням. Похідна активації множиться L разів у зворотному проході. Дисперсія активацій множиться L разів у прямому. Обидві половини теми — про те, як утримати добуток біля одиниці. Побачивши цю схему один раз, ти впізнаватимеш її у всьому глибокому навчанні: у залишкових зʼєднаннях, у нормалізаціях, у трюках із масштабуванням уваги.

Далі в практиці. У practice.ipynb ти намалюєш усі шість активацій разом із похідними, зміряєш норму градієнта на кожному з десяти шарів для сигмоїди, tanh і ReLU (затухання буде видно таблицею), порахуєш мертві нейрони при семи різних кроках навчання, порівняєш пʼять ініціалізацій за дисперсією активацій по шарах і нарешті навчиш ту саму мережу двічі — з нулів і з He. Перша не зрушить із місця жодною вагою.

Далі в темі

Теорію прочитано. Тепер закріпи її на практиці.