
Нейронні мережі: від перцептронів до глибокого навчання
Як шари простих функцій вивчають складні закономірності
Хід, якого ніхто не зрозумів
10 березня 2016 року, у другій грі серії з п’яти матчів у Сеулі, машина під назвою AlphaGo поставила чорний камінь на п’ятій лінії дошки. Хід був настільком дивним, що людські коментатори вважали його помилкою. Один професіонал сказав уголос, що початківця б лаяли за такий хід. Лі Седоль — 18-разовий чемпіон світу з гри Ґо — встав і вийшов із залу, щоб зібратися з думками.
Це не було помилкою. П’ятдесят ходів пізніше саме цей камінь — тепер відомий як «Хід 37» — став точкою повороту всієї гри. AlphaGo переміг. Лі Седоль, що вважається одним із найкращих гравців у світі, поступився в серії 4–1. І от що важливо: жодна людина не навчила AlphaGo цього ходу. Його не було в жодному підручнику. Машина відкрила його самостійно, зіграла мільйони партій проти самої себе й налаштувала мільярди крихітних внутрішніх чисел, доки не з’явилась закономірність, якої ніхто раніше не бачив.
Ґо має більше можливих позицій на дошці, ніж атомів у видимому Всесвіті. Це неможливо перебрати брутфорсом. Неможливо записати для цього правила. Єдиний спосіб грати на надлюдському рівні — навчитися цього, а тим, хто вчився, була нейронна мережа: стек простих математичних одиниць, які, отримавши достатньо даних і достатньо налаштувань, можуть знайти структуру, яку жодна людина не здатна повністю сформулювати.
Та самa машинерія — ті самі зважені суми, той самий цикл тренування, ті самі поштовхи градієнта — живить мовну модель, з якою ви розмовляєте, систему, що виявляє шахрайські операції з картами, і моделі, на які тепер спрямовують погляд квантові фонди на фінансових ринках. Цей урок про те, що насправді відбувається всередині цієї «скриньки».
Перцептрон: звідки все почалося
Кожна нейронна мережа — від простого спам-фільтра до GPT і AlphaGo — веде свій рід від однієї ідеї: перцептрона, винайденого Френком Розенблаттом у 1958 році. Це математична модель, вільно натхнена біологічним нейроном. Справжній нейрон отримує електричні сигнали через дендрити, накопичує їх у клітинному тілі та надсилає сигнал вздовж аксона лише якщо сукупний вхід перевищує порог. Перцептрон робить те саме, лише з числами замість напруги.
Перцептрон приймає вектор входів x, помножує кожен вхід на вивчену вагу w, підсумовує добутки, додає зсув (bias) b, що зсуває порог, і пропускає результат через функцію активації. Якщо результат перевищує планку, нейрон «спрацьовує»; інакше залишається тихим. Усе це — один компактний вираз: вихід = f(w·x + b).
Уявіть ваги як регулятори гучності. Кожен вхід приходить із певною «голосністю», і вага вирішує, наскільки цей вхід важливий саме для цього нейрона. Нейрон, що вчиться виявляти шахрайську угоду, може підняти вагу для «розміру транзакції відносно історії акаунту» і опустити вагу для «часу доби». Навчання, в самій його суті, — не якась гламурна річ, це просто налаштування цих регуляторів на правильні позиції.
Один перцептрон має жорстке обмеження: він може розділяти дані лише прямою лінією (або, у вищих вимірах, плоскою гіперплощиною). Він може відповісти на «ця точка вище чи нижче лінії?», але не на «ця точка всередині вигнутої області?». Історичний приклад — проблема XOR, закономірність, яку одиничний перцептрон доказово не може вивчити, обмеження, що допомогло заморозити фінансування AI на роки в 1970-х. Виходом, як виявилось потім, є майже абсурдно проста річ: укласти багато перцептронів у шари й вставити нелінійну активацію між ними. Зробіть це, і результуюча мережа зможе згинати, складати й вирізати простір у довільно складні форми.
Шари, глибина і чому «глибоке» навчання
Один нейрон — це регулятор. Корисна мережа — це тисячі їх, організовані в шари, що передають інформацію вперед, як ланцюжок відер.
- Вхідний шар — де входять ваші сирі характеристики: пікселі зображення, слова речення, або для торгової моделі — такі речі, як ціна, обсяг, волатильність і дисбаланс книги ордерів.
- Приховані шари — шари між ними, де відбувається справжня робота. Кожен шар бере виходи попереднього й перекомбіновує їх у нові, абстрактніші характеристики.
- Вихідний шар — фінальна відповідь: ймовірність, прогноз ціни, метка класу.
Слово «глибоке» у глибокому навчанні просто означає багато прихованих шарів. І глибина дає вам конкретну річ: ієрархію характеристик. У мережі для зображень перший шар виявляє краї, наступний зіставляє краї у форми, наступний зіставляє форми в об’єкти. Ніхто не програмував «детектор краю» чи «детектор ока» — ці концепції виникають у процесі тренування. Мережа винаходить власний проміжний словник.
Тут є прекрасний теоретичний результат — теорема про універсальне наближення: мережа з навіть одним прихованим шаром, за достатньої кількості нейронів, може наблизити будь-яку безперервну функцію з довільною точністю. Іншими словами, правильна мережа в принципі може представити будь-яку закономірність, що існує у ваших даних. Пастка — і вона велика — полягає в тому, що «в принципі» тут виконує важку роботу. Теорема обіцяє, що така мережа існує; вона нічого не каже про те, чи можете ви знайти її, чи маєте достатньо даних, щоб її зафіксувати, чи закономірність, яку ви шукаєте, взагалі реальна. У доменах зі слабким сигналом, як фінанси, саме цей розрив між «представимо» і «навчальне» — там, де більшість моделей йдуть помирати.
Функції активації: нелінійний секретний соус
Ось факт, що дивує людей: без функцій активації глибина марна. Якби кожен шар був простою зваженою сумою, то укладання десяти шарів було б математично ідентичним одному шару — ланцюг лінійних операцій згортається в одну лінійну операцію. Ви витратили б цілий стан обчислень на побудову вигадливо оздобленої прямої лінії. Функції активації — це нелінійний перегин, вставлений між шарами, який дозволяє мережі згинатись, і саме згинання робить її потужною.
Активації, які кожен практик повинен знати:
- Сигмоїда — σ(x) = 1/(1+e⁻ˣ). Стискає будь-який вхід у (0, 1), що природно читається як ймовірність. Чудова для бінарного виходу, але поганий вибір усередині прихованих шарів: для великих позитивних чи негативних входів крива стає плоскою, її градієнт наближається до нуля, і навчання зупиняється — проблема зникаючого градієнта.
- Tanh — виходи у (−1, 1) і центрована на нулі, що допомагає оптимізації. Все ще насичується на екстремумах, але менш жорстко, ніж сигмоїда.
- ReLU — f(x) = max(0, x). Сучасне стандартне значення для прихованих шарів. Смішно проста, дешева для обчислення й тримає здоровий градієнт для всіх позитивних входів. Її вада — «помираюча ReLU»: нейрон, штовхнутий у стан завжди виводити нуль, може стати назавжди неактивним.
- Leaky ReLU — f(x) = max(0.01x, x). Дозволяє малому потоку градієнта проходити для негативних значень, що не дає нейронам помирати.
- GELU — гладка, імовірнісна родичка ReLU, що є стандартом усередині трансформерів, як BERT і GPT.
Зворотне поширення й градієнтний спуск: як мережі навчаються
Наразі у нас є мережа, повна ваг. Але звідки походять правильні значення ваг? Ніхто не вписує їх — їх мільйони. Вони виявляються через цикл зворотного зв’язку, що в основі своїй є організованою спробою й помилкою, де бухгалтерію ведe математичний аналіз.
Крок перший — прямий прохід (forward pass): подайте приклад, дозвольте йому пройти через шари, і зчитайте прогноз. Крок другий — вимірити, наскільки прогноз був помилковим, використовуючи функцію втрат. Для прогнозу числа (ціни) середньоквадратична помилка (MSE) усереднює квадратичну різницю між прогнозом і істиною. Для класифікації крос-ентропія вимірює, наскільки далеко прогнозовані ймовірності сидять від правильної відповіді. Висока втрата означає «дуже помилковий»; вся ціль тренування — знизити це число.
Крок третій — хитра частина: зворотне поширення (backpropagation). Використовуючи правило ланцюга з математичного аналізу, алгоритм рухається назад від втрат через кожен шар і обчислює для кожної окремої ваги градієнт — відповідь на «якщо я трохи підштовхну цю одну вагу вгору, помилка зросте чи зменшиться, і наскільки?». Це той трюк, що розтопив зиму AI. Backprop, популяризований у 1980-х, зробив можливим ефективно розподілити «провину» серед мільйонів ваг замість того, щоб гадати.
Крок четвертий — градієнтний спуск: підштовхніть кожну вагу невеликим кроком у напрямку, що зменшує втрату, використовуючи правило w = w − α × ∂L/∂w. Уявіть, що ви стоїте на туманному схилі, намагаючись дійти до дна долини; вам не видно дна, але ви можете відчувати, куди веде спуск під ногами, тож робите крок туди і повторюєте. Швидкість навчання α — це довжина вашого кроку, і це, мабуть, найважливіший регулятор у всій системі. Занадто велика — і ви перескакуєте долину й вічно скакаєте навколо; занадто мала — і ви повзете вічність або застрягаєте в яму на півдорозі.
Два вдосконалення, які ви зустрінете майже негайно. Міні-batches: замість оновлення після кожного окремого приклада (шумно) чи лише після всього набору даних (повільно), ви оновлюєте після невеликого пакету — зазвичай 32 до 256 прикладів — що стабільно, дружньо до GPU й золота середина на практиці. І Adam: розумніший оптимізатор, що дає кожній вазі власний адаптивний крок і додає імпульс для згладжування шумних градієнтів. Adam — розумний стандартний вибір для початку майже будь-якого проєкту — хоча у фінансах, із його низьким співвідношенням сигнал/шум, вам все ще потрібно налаштовувати швидкість навчання, зменшення ваги й точку зупинки вручну.
Перенавчання: коли мережа запам’ятовує замість навчання
Ось режим збою, що руйнує більше фінансових моделей, ніж будь-який інший. Нейронна мережа настільки гнучкий підбирач функцій, що, отримавши шанс, вона повністю запам’ятає ваші тренувальні дані — включно з усім випадковим шумом, одноразовими флуктуаціями та збігами, що ніколи не повторяться. Вона показує прекрасні результати на даних, які вже бачила, і різко проваджується, зустрівши щось нове. Це перенавчання, і на ринках — де справжній сигнал слабкий, а шум приголомшливий — це стандартний результат, а не виняток. Інструменти, що з цим борються, називаються регуляризацією.
Dropout — найпопулярніший. На кожному кроці тренування кожен нейрон має ймовірність p (часто 0,2–0,5) бути тимчасово вимкненим. Змушена працювати навіть коли випадкові «товариші» постійно зникають, мережа вчиться розподіляти знання серед багатьох нейронів, а не ставити все на кількох крихких — ефект ансамблю, вбудований в одну модель. Під час прогнозу всі нейрони знову вмикаються, відповідно масштабовані.
Штрафи L1 і L2 додають «податок» на великі ваги до втрати. L2 (зменшення ваги, weight decay) знеохочує будь-яку одну вагу від стати надто великою, рівномірно розподіляючи вплив. L1 гостріший: він активно доводить непотрібні ваги повністю до точно нуля, виконуючи автоматичний вибір характеристик. У фінансовому наборі даних, де більшість зі ста характеристик — шум, L1 може тихо знайти ту дещицю, яка справді несе сигнал.
Батч-нормалізація перемасштабовує виходи кожного шару до стабільного середнього й дисперсії, що стабілізує тренування й дозволяє використовувати вищі швидкості навчання. Рання зупинка — найпростіший і найнадійніший захисник з усіх: спостерігайте за помилкою на резервному валідаційному наборі, і в момент, коли вона починає повзти вгору, тоді як тренувальна помилка продовжує падати, зупиніться — цей перехрест — точний момент, коли мережа перемикається з навчання закономірностей на запам’ятовування шуму.
CNN для закономірностей, RNN і LSTM для послідовностей
Прямі мережі прямого поширення (feedforward) обробляють кожен вхід як неструктурований мішок чисел. Але багато реальних даних мають структуру — зображення має просторову розкладку, серія цін має часовий порядок — і дві спеціалізовані архітектури безпосередньо використовують цю структуру.
Згорткові нейронні мережі (CNN) були побудовані для зображень. Замість з’єднання кожного пікселя з кожним нейроном, CNN зсуває маленькі фільтри по входу, полюючи на локальні закономірності — тут край, там текстура — і повторно використовуючи той самий фільтр всюди. Ранні шари ловлять краї; глибші шари зіставляють їх у форми та об’єкти. У фінансах дослідники спрямовували CNN на:
- Зображення свічкових графіків — переформульовуючи читання графіка як задачу візуального розпізнавання закономірностей.
- Теплові карти книги ордерів — виявлення дисбалансу попиту/пропозиції у знімках глибини ринку.
- 1D-згортки над сирими ціновими послідовностями — навчання коротких часових мотивів так, як CNN зображень навчається просторових.
Рекурентні нейронні мережі (RNN) побудовані для послідовностей. Вони обробляють один часовий крок за раз, несучи прихований стан — поточну пам’ять — від кожного кроку до наступного. Теоретично це робить їх ідеальними для часових рядів. На практиці ванільні RNN скалічені проблемою зникаючого градієнта на довгих послідовностях: сигнал з багатьох кроків тому зменшується до нуля на зворотному шляху, тож мережа просто забуває далеке минуле.
Мережі Long Short-Term Memory (LSTM) виправляють це невеликим набором навчальних ворот — забуття, входу та виходу — що вирішують на кожному кроці, що видалити з пам’яті, що записати й що зчитати. Це впорядкування дозволяє LSTM зберігати релевантну інформацію протягом сотень кроків, і саме тому вона стала робочим конем для моделювання фінансових часових рядів, де вчорашня подія все ще рухає сьогоднішню ціну.
import torch.nn as nn
class PricePredictor(nn.Module):
def __init__(self, input_dim, hidden_dim, num_layers):
super().__init__()
self.lstm = nn.LSTM(input_dim, hidden_dim,
num_layers, batch_first=True,
dropout=0.2)
self.fc = nn.Linear(hidden_dim, 1)
def forward(self, x):
out, _ = self.lstm(x)
return self.fc(out[:, -1, :])
На платформі, як GaiaEx, де WebSocket-потоки транслюють безперервні дані ціни й книги ордерів, LSTM може природно поглинати цю послідовність. Хоча галузь загалом уже рухається далі: трансформери — архітектура за сучасними мовними моделями — тепер відповідають чи перевершують LSTM на багатьох задачах послідовностей, використовуючи «увагу», щоб дивитись на всі часові кроки одразу, замість того щоб проходити їх по одному.
Що нейронні мережі не виправляють (особливо на ринках)
Нейронні мережі — вражаючі шукачі закономірностей. Але чесна освіта означає назвати, де вони ламаються — а в торгівлі вони ламаються дорого.
- Вони знаходять закономірності навіть коли жодних не існує. Дайте глибокій мережі шум, і вона впевнено підлаштується під нього. Ринки переважно шум, тож обов’язок доведення на вас — показати, що закономірність реальна й стійка, а не просто присутня в минулорічних даних.
- Вони — чорні скриньки. Модель може бути точною й все ж не здатною сказати вам чому. Коли вона раптово втрачає гроші, часто немає чіткого пояснення й очевидного виправлення. Для капіталу, що ризикує, «я не знаю, чому вона це зробила» — серйозна вразливість.
- Вони голодні й крихкі. Глибоке навчання блищить із мільйонами чистих прикладів. Фінансова історія коротка, нестаціонарна й шумна — режим, на якому натренувалась ваша модель, може просто перестати існувати, проблема, звана зсувом розподілу.
- Вони не перевершують простіші моделі безкоштовно. На табличних, характеристикових даних, поширених у фінансах, дерева з градієнтним бустингом, як XGBoost, часто перевершують нейронні мережі, будучи швидшими для тренування й легшими для інтерпретації. Складність — це вартість, а не чеснота.
- На них можна атакувати. Крихітні, навмисні пертурбації входу можуть перевернути вихід мережі — ворожий приклад (adversarial example) — що важливо будь-де, де супротивник може формувати те, що бачить ваша модель.
Апаратне забезпечення, інструменти та ваш шлях уперед
Тренування нейронних мереж навантажене арифметикою — переважно множеннями матриць — і апаратне забезпечення, на якому ви запускаєте це, змінює швидкість вашої ітерації з «за ніч» на «за каву».
GPU — стандарт. Їхні тисячі ядер усі виконують ту саму операцію на різних даних одночасно, що якраз відповідає формі математики нейронних мереж. Модель, що повзе 8 годин на CPU, може завершитись за 15 хвилин на сучасному GPU. NVIDIA домінує: споживчі карти (класу RTX) чудові для навчання, тоді як карти дата-центрів (A100, H100) і хмарні інстанси обробляють тренування продакшн-масштабу. TPU, спеціальні чіпи Google для тензорної математики, блищать на дуже великих моделях через Google Cloud, але GPU залишаються практичним стандартом для більшості практиків завдяки ширшій підтримці програмного забезпечення.
Вам не потрібно нічого купувати, щоб почати. Google Colab роздає безкоштовний час GPU, більш ніж достатньо для навчання й прототипування; орендуйте хмарні GPU на вимогу, коли ваші моделі зростають; купуйте спеціалізоване апаратне забезпечення лише коли тренуєтесь щодня, і хмарний рахунок це обґрунтовує.
Розумний шлях навчання звідси:
- Почніть із простої мережі прямого поширення на кількох сконструйованих характеристиках — швидка для тренування, легка для дебагу, чесний базовий рівень.
- Спробуйте 1D CNN на сирих цінових послідовностях і порівняйте безпосередньо з тим базовим рівнем.
- Побудуйте LSTM, що споживає послідовності свічкових даних з API GaiaEx.
- Вивчайте увагу й трансформери — все частіше архітектуру вибору для послідовностей.
- Понад усе, завжди зіставляйте вашу глибоку модель проти базового рівня градієнтного бустингу, як XGBoost. Якщо нейронна мережа не може перевершити простішу модель поза зразком на ваших табличних фінансових даних, відправляйте простішу модель у продакшн і рухайтесь далі.
Той самий цикл, що знайшов Хід 37 — прогноз, вимір помилки, підштовхування ваг, повторення — це цикл, що працює всередині кожної системи в цьому списку. Зрозумійте цей цикл, і ви зрозумієте глибоке навчання; решта — архітектура й інженерія над ним.