ГоловнаСтаттіQuantum Mechanics

Quantum Tunneling: Passing Through Walls

Despite lacking sufficient energy to overcome a potential barrier classically, particles can sometimes pass through it due to the inherent wave-like properties of matter. This phenomenon, known as quantum tunneling, is governed by probability and offers fascinating insights into the behaviour of subatomic particles.

mysimulator teamОновлено — червень 2026≈ 12 хв читання▶ Відкрити симуляцію

Мережа – це функція, яку можна диференціювати

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

a⁰ = x // вхід z¹ = W¹ a⁰ + b¹ a¹ = φ(z¹) // прихований шар 1 z² = W² a¹ + b² a² = φ(z²) // прихований шар 2 z³ = W³ a² + b³ ŷ = σ(z³) // вихід L = loss(ŷ, y) // одне число Нелінійність – не декор. Видаліть її, і весь стовпчик руйнується: композиція лінійних трансформацій є однією лінійною трансформацією, а сто тисяч шарів матимуть точно таку ж виразність, як один. Саме φ купує все.

a⁰ = x                                  // the input
z¹ = W¹ a⁰ + b¹      a¹ = φ(z¹)          // hidden layer 1
z² = W² a¹ + b²      a² = φ(z²)          // hidden layer 2
z³ = W³ a² + b³      ŷ  = σ(z³)          // output
L  = loss(ŷ, y)                          // a single number
жива демонстрація · пов'язана симуляція● LIVE

Правило ланцюга, застосоване в економічному напрямку

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

Ключовим є поширення однієї проміжної величини, зазвичай позначеної δ — чутливості втрат до преактивації шару z:

δᴸ = ∂L/∂zᴸ = ∇_ŷ L ⊙ σ'(zᴸ) // вихідний шар δˡ = (Wˡ⁺¹ᵀ δˡ⁺¹) ⊙ φ'(zˡ) // кожен попередній шар ∂L/∂Wˡ = δˡ (aˡ⁻¹)ᵀ // градієнт ваг ∂L/∂bˡ = δˡ // градієнт упереджень Уважно прочитайте середню лінію, оскільки це вся алгоритм: щоб отримати сигнал помилки для шару, візьміть сигнал помилки від шару зверху, просуньте його назад через транспоновану матрицю ваг цього шару і модуляцію її похідною активації цього шару. Прохід вперед передає активації вгору по W; зворотний прохід передає помилки вниз по Wᵀ. Градієнт кожного ваги — просто зовнішній добуток прибулого на виході сигналу помилки та активації, що входить у його вхід.

δᴸ = ∂L/∂zᴸ = ∇_ŷ L ⊙ σ'(zᴸ)              // output layer

δˡ = (Wˡ⁺¹ᵀ δˡ⁺¹) ⊙ φ'(zˡ)                 // every earlier layer

∂L/∂Wˡ = δˡ (aˡ⁻¹)ᵀ                        // gradient of the weights
∂L/∂bˡ = δˡ                                // gradient of the biases

Активації та градієнт, що згасає

Сигмоїд, φ(z) = 1/(1 + e^(−z)), був класичним вибором, і його похідна є причиною того, чому глибокі мережі протягом багатьох років вважалися непіддатливими до навчання. Ця похідна – φ(z)(1 − φ(z)), має максимальне значення 0.25 при z = 0 та падає майже до нуля, коли нейрон насичується. Кожен шар зворотного поширення множить сигнал помилки цим фактором – таким чином, через десять сигмоїдних шарів градієнт масштабується не більше ніж на 0.25¹⁰ ≈ 10⁻⁶ навіть у найкращому випадку. Це проблема зникаючого градієнту: ранні шари отримують практично жодного сигналу та ніколи не вчаться.

φ(z) = 1/(1+e^-z) φ'(z) = φ(1−φ) ∈ (0, 0.25] насичується φ(z) = tanh(z) φ'(z) = 1 − tanh²z ∈ (0, 1] центрований до нуля φ(z) = max(0, z) φ'(z) = 1 якщо z > 0 ∈ {0, 1} ReLU інакше 0 може вмерти φ(z) = max(αz, z) φ'(z) = 1 або α різновидність ReLU з α ≈ 0.01 ReLU вирішує це силою: для будь-якого позитивного вхідного значення його похідна дорівнює точно 1, тому сигнал помилки проходить не зменшуючись, незалежно від того, скільки шарів він перетинає. Його власна патологія – вмираючий ReLU — це нейрон, який постійно пригнічено негативним значенням, має нульовий градієнт назавжди і ніколи не може відновитися — яку й виправляє різновидність ReLU та її родичі, надаючи невеликий нахил у негативному боці.

φ(z) = 1/(1+e^-z)     φ'(z) = φ(1−φ)      ∈ (0, 0.25]   saturates
φ(z) = tanh(z)        φ'(z) = 1 − tanh²z   ∈ (0, 1]      zero-centred
φ(z) = max(0, z)      φ'(z) = 1 if z > 0   ∈ {0, 1}      ReLU
                                 else 0                  can die
φ(z) = max(αz, z)     φ'(z) = 1 or α       leaky ReLU, α ≈ 0.01

Ініціалізація – це не деталі

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

Xavier / Glorot   Var(W) = 2 / (fan_in + fan_out)   for tanh, sigmoid
He / Kaiming      Var(W) = 2 / fan_in                for ReLU
                  (the factor 2 compensates for ReLU zeroing half
                   the activations, which halves the variance)

Від градієнтів до навчання

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

SGD w -= lr * g Моментum v = μ*v + g ; w -= lr * v μ ≈ 0.9 Adam m = β₁*m + (1−β₁)*g β₁ ≈ 0.9 v = β₂*v + (1−β₂)*g² β₂ ≈ 0.999 (коригування упередження m̂, v̂ на 1−βᵗ) w -= lr * m̂ / (sqrt(v̂) + ε) ε ≈ 1e-8 Швидкість навчання залишається найважливішим гіперпараметром: занадто велика і втрата розбіжність або осцилює, занадто мала і навчання зупиняється на рівні. І коли мережа відмовляється вчитися взагалі, перше, що потрібно перевірити, це не архітектура, а градієнти самі по собі — порівняйте кілька аналітичних градієнтів із центральним кінцевою різницею, (L(w+ε) − L(w−ε)) / 2ε, на невеликій мережі з подвійною точністю. Реалізація зворотного поширення із помилкою знаку або відсутнім транспозуванням виглядає точно так само, як і погано налаштована, і лише перевірка градієнтів розрізняє їх.

SGD          w -= lr * g
Momentum     v = μ*v + g            ;  w -= lr * v          μ ≈ 0.9
Adam         m = β₁*m + (1−β₁)*g                             β₁ ≈ 0.9
             v = β₂*v + (1−β₂)*g²                            β₂ ≈ 0.999
             (bias-correct m̂, v̂ by 1−βᵗ)
             w -= lr * m̂ / (sqrt(v̂) + ε)                     ε ≈ 1e-8

Часті запитання

Чи є зворотне поширення (backpropagation) однаковою величиною з градієнтно-випадним зниженням (gradient descent)?

Ні. Зворотне поширення обчислює градієнт втрат відносно кожного вагу в одному зворотньому проході, що коштує приблизно стільки ж, як один прямий прохід. Градієнтно-випадне зниження (або SGD, Adam, momentum) є окремим кроком, який використовує ці градієнти для оновлення ваг. Ви можете поєднати зворотне поширення з будь-яким оптимізатором.

Що таке проблема зникаючих градієнтів (vanishing gradient problem)?

Під час зворотного проходу помилка множиться на похідну активації в кожному шарі. Коефіцієнт ухилу сигмоїди ніколи не перевищує 0,25 і наближається до нуля, коли одиниця насичується, тому через багато шарів добуток зменшується до нуля, і ранні шари перестають навчатися. ReLU уникає цього, оскільки його похідна дорівнює 1 для позитивних вхідних даних.

Чому я не можу ініціалізувати всі ваги рівними нулю?

Тому що тоді кожна нейрон у шарі обчислює однакову вихідну величину та отримує один і той самий градієнт, тому вони залишаються ідентичними назавжди — шар ніколи не порушує симетрії та фактично містить одну одиницю. Ваги повинні бути випадковими та масштабованими (Xavier для tanh, He для ReLU), щоб забезпечити, що варіація сигналу не розривається та не стискається через шари.

Спробуйте наживо

Усе, що вище, працює прямо у вашому браузері — відкрийте Neural Network — Backpropagation і змінюйте параметри під час роботи. Нічого не встановлюється, нічого не завантажується на сервер, уся модель живе в одній вкладці.

▶ Відкрити симуляцію Neural Network — Backpropagation

Що ви знайшли?

Додати кроки відтворення (опційно)