Блок нейромереж починається з розчарування, і воно корисне. Слово «нейрон» обіцяє щось нове й трохи таємниче, а всередині виявляється конструкція з двох дій, обидві з яких ти вже робив: помножити ознаки на коефіцієнти й подивитись, по який бік нуля вийшло. Ця тема присвячена одній клітині — і головне, що з неї треба винести, звучить майже образливо: у клітині немає нічого нового. Нове почнеться, коли їх зʼєднають.
Приклад той самий, що й у трьох попередніх темах, — дошка оголошень про вживані телефони з теми 08. Цього разу нас цікавить конкретний різновид шахрайства: приманка із заниженою ціною. Продавець ставить за телефон помітно менше, ніж він коштує, збирає передоплати й зникає. Тому з дошки ми беремо ті оголошення, де ціна не перевищує довідкову, — таких 569, і серед них 104 приманки. Ознак буде рівно дві, щоб межу було видно на площині: ціна оголошення й довідкова ціна — скільки такий апарат такої моделі, року, стану й памʼяті коштує за каталогом. Обидві в тисячах гривень.
01 / ІдеяЗвідки взявся нейрон
У 1943 році Воррен Мак-Каллок і Волтер Піттс описали живу нервову клітину як логічний елемент: на вхід приходять сигнали від інших клітин, вони підсумовуються, і якщо сума перевищила поріг — клітина спрацьовує. У 1958-му Френк Розенблат додав до цієї схеми головне: ваги, які можна налаштувати даними. Його перцептрон (perceptron) був не програмою, а машиною Mark I Perceptron із фотоелементами на вході й моторизованими змінними резисторами замість ваг. Мотор крутив резистор — модель училась.
А тепер чесно про аналогію, бо вона наробила більше шкоди, ніж користі. Штучний нейрон не є моделлю живої клітини. Справжній нейрон передає не число, а послідовність імпульсів у часі; має складну геометрію дендритів, де сигнали взаємодіють нелінійно ще до підсумовування; його поведінка залежить від десятків типів іонних каналів і від хімії середовища. Спільним лишається одне речення: «багато входів, один вихід, вихід залежить від зваженої суми». Це рівно та подібність, яка є між літаком і птахом.
02 / КлітинаЗважена сума й поріг
Штучний нейрон робить дві дії, і жодної більше. Перша — зважена сума входів:
Розберімо кожен символ окремо. x1…xn — ознаки одного обʼєкта, у нас це два числа: ціна й довідкова ціна в тисячах гривень. w1…wn — ваги, по одній на ознаку: наскільки сильно й у який бік ця ознака штовхає рішення. Знак ваги важливіший за її величину: додатна вага означає «більше цієї ознаки — більше підстав сказати так», відʼємна — навпаки. b — зсув (bias), одне число, яке додається завжди; воно задає, наскільки охоче нейрон каже «так», коли всі ознаки нульові. z — результат, який ще не є відповіддю: це просто число на прямій, від великого відʼємного до великого додатного.
Друга дія — активація: число z пропускають крізь функцію, яка перетворює його на відповідь. У перцептрона Розенблата це порогова функція, вона ж сходинка:
Підставмо справжні числа. Візьмімо ваги w1 = −1.00 для ціни, w2 = +0.50 для довідкової й b = 0. Словами це правило звучить так: «оголошення підозріле, якщо ціна нижча за половину довідкової». Оголошення № 527 з нашої вибірки — Beta 12 Pro 2023 року, стан «задовільне», 512 гігабайтів, ціна 3 100 грн, довідкова 10 990 грн:
І контрольний приклад, оголошення № 554 — Beta 12 Pro 2022 року, стан «добре», 128 гігабайтів, ціна 8 780 грн при довідковій 8 830 грн:
Схема 1 · Один нейрон на одному оголошенні
Ті самі числа, що в розрахунку вище: два входи, дві ваги, зсув, сума й поріг. Нижче — той самий нейрон на чесному оголошенні.
Геометрія тут проста й варта того, щоб її запамʼятати. Рівність w1x1 + w2x2 + b = 0 — це рівняння прямої на площині. По один її бік z додатне, по інший — відʼємне. Отже, один нейрон із порогом ділить площину ознак навпіл прямою й каже «так» усьому, що з одного боку. У трьох ознаках це буде площина, у багатьох — гіперплощина, але суть та сама: пряма межа й два боки.
03 / ВпізнаванняЦе вже знайома модель
Тепер найважливіший абзац теми. Замінімо сходинку на сигмоїду — функцію σ(z) = 1 / (1 + e−z), яка плавно переводить будь-яке число в проміжок від нуля до одиниці. Що вийде?
Це дослівно формула логістичної регресії з теми 17. Не «схожа на неї», не «окремий випадок» — та сама формула, символ у символ, з іншими іменами літер. Там ми називали w коефіцієнтами, а b вільним членом; тут ті самі числа звуться вагами й зсувом. Підставмо наше шахрайське оголошення: z = +2.395, а σ(2.395) = 0.916 — модель каже «з імовірністю 91.6 % це приманка». Для чесного: σ(−4.365) = 0.013, тобто 1.3 %. Порівняй із порогом 0.5 — і отримаєш точнісінько ту саму відповідь, що дала сходинка.
Це не збіг і не педагогічний фокус. Один нейрон — це лінійна модель з функцією на виході, і вибір функції визначає, яку саме знайому модель ти отримаєш:
| Активація | Що виходить із одного нейрона | Де ми це вже бачили |
|---|---|---|
| немає (тотожність) | лінійна регресія: ŷ = w·x + b | тема 15 |
| сигмоїда | логістична регресія: ймовірність класу | тема 17 |
| сходинка | перцептрон Розенблата: жорстке «так» або «ні» | ця тема |
Різниця між сходинкою й сигмоїдою здається косметичною, а насправді вона вирішальна, і ми до неї повернемось у розділі 9. Поки що досить помітити: сигмоїда має похідну, сходинка — ні. Саме тому логістичну регресію можна навчати градієнтним спуском, а перцептрон доводилось навчати чимось іншим.
Найкорисніше, що дає це впізнавання, — інтуїція. Нейрон не «розпізнає» й не «вирішує». Він проводить пряму площиною ознак, і всі його вміння вичерпуються тим, куди цю пряму поставити. Покрути ваги самотужки й подивись, як межа їздить дошкою:
Інтерактив 1 · Ваги, зсув і межа рішень
569 оголошень дошки: по горизонталі ціна, по вертикалі довідкова ціна, обидві в тисячах гривень. Рожеві — приманки, бірюзові — чесні. Пряма — межа z = 0, рожевим залито півплощину, де нейрон каже «приманка».
04 / ПравилоПравило навчання Розенблата
Ваги ми щойно крутили руками. Розенблат запропонував правило, яке робить це саме, — і воно на диво просте. Ніякої функції втрат, ніяких похідних, ніякого градієнта. Одне речення:
Формально зручно позначити класи як y = +1 (приманка) і y = −1 (чесне), а відповідь нейрона — знаком z. Тоді помилка — це випадок, коли знаки y і z різні, а виправлення таке:
Тут η (ета) — швидкість навчання: маленьке додатне число, яке задає, наскільки різко ми виправляємось. Логіка виправлення прозора. Якщо правильна відповідь +1, а нейрон дав −1, значить z замале — додаємо до ваг сам вхід, і наступного разу z на цьому прикладі буде більшим рівно на η·(x·x + 1), тобто гарантовано зросте. Якщо навпаки — віднімаємо. Правило не питає «наскільки погано», воно питає лише «у який бік».
Чотири кроки руками
Візьмімо 14 оголошень із дошки, крок η = 0.08 і навмисно невдалий старт: w₁ = 0.80, w₂ = 0.20, b = −6.00. Таке правило означає «підозрілими є дорогі оголошення» — гіпотеза, протилежна до правильної. Подивімось, як воно виправляється.
Оголошення: ціна 1.45, довідкова 5.49, правильна відповідь y = +1.
Виправляємо: до кожної ваги додаємо η·y·x, до зсуву — η·y.
Наступне оголошення: ціна 1.54, довідкова 5.38, y = +1.
Помилка та сама, але z уже не −3.742, а −1.071. Межа повзе в потрібний бік.
Оголошення: ціна 1.92, довідкова 2.06, y = −1 (чесне).
Ваги не змінюються. Жодного оновлення, жодного «трохи підправимо про всяк випадок». Це принципова риса правила: правильна відповідь не дає сигналу взагалі.
Оголошення: ціна 5.46, довідкова 5.65, y = −1.
Тут y = −1, тому вхід не додається, а віднімається. Вага ціни вперше пішла вниз — до відʼємних значень, куди їй і треба.
Чим це відрізняється від градієнтного спуску. У темі 16 ми мали функцію втрат, рахували її похідну по кожному параметру й робили крок проти градієнта. Тут немає функції втрат узагалі: немає числа, яке б спадало від кроку до кроку, немає поверхні, якою ми спускаємось. Є правило виправлення, яке спрацьовує лише на помилках. Формально воно збігається зі стохастичним градієнтним спуском для однієї конкретної втрати — max(0, −y·z), — але Розенблат вивів його за десять років до того, як цей звʼязок помітили, і виводив із зовсім інших міркувань.
Схема 2 · Як межа повертається за чотири епохи
Ті самі 14 оголошень і той самий старт. Кожна панель — стан ваг у певний момент; підпис показує, скільки з 14 оголошень нейрон класифікує хибно саме з цими вагами.
Один прохід по всіх прикладах називають епохою. Правило проганяють епоху за епохою, доки в черговій епосі не станеться жодного виправлення. Це і є критерій зупинки, і він точний: якщо ваги не змінились за цілу епоху, вони вже не зміняться ніколи. Прожени це сам, приклад за прикладом:
Інтерактив 2 · Правило Розенблата, приклад за прикладом
Ті самі 14 оголошень, крок η = 0.08. Поточне оголошення обведене; підсвічений рядок праворуч показує, що саме зараз виконується.
05 / ЗбіжністьТеорема збіжності
У 1962 році Розенблат опублікував — а незалежно від нього й у чіткішій формі довів Альберт Новіков — твердження, яке зробило перцептрон сенсацією. Формулюється воно так:
Доведення тут не наводимо, але корисно знати, від чого залежить оцінка кількості кроків. Вона обмежена величиною (R / γ)2, де R — найбільша довжина вектора ознак у вибірці, а γ (гамма) — запас: відстань від найближчої точки до найкращої розділювальної прямої. Читається це так: чим тісніше класи притиснуті один до одного, тим довше правило шукатиме межу. Від кількості прикладів оцінка не залежить взагалі, і це справді дивовижно.
Тепер про слово «якщо», бо воно тут головне. Теорема нічого не обіцяє на нероздільних даних. І не «працює гірше» — а не зупиняється: правило вічно виправляється на тих самих суперечливих прикладах, ваги стрибають туди-сюди, критерій «епоха без виправлень» не настає ніколи. На практиці цикл обривають за кількістю епох і беруть те, що вийшло, — але «те, що вийшло» може бути гіршим за проміжний стан, який був сто кроків тому.
06 / РоздільністьЛінійна роздільність: І та АБО
Лінійно роздільними називають дані, для яких існує пряма (площина, гіперплощина), що ділить класи без жодної помилки. Геометрично це означає: якщо намалювати опуклу оболонку кожного класу — найменший опуклий контур, що містить усі точки класу, — то ці два контури не перетинаються. Наша дошка з двома ознаками виявилась роздільною, і саме тому в інтерактиві 1 досяжний нуль помилок.
Найкоротший спосіб відчути межу можливого — логічні функції на чотирьох точках. Входи x₁ і x₂ приймають значення 0 або 1, тож усіх різних прикладів рівно чотири. Функція І має видати одиницю лише на (1, 1), функція АБО — усюди, крім (0, 0). Обидві реалізуються одним нейроном, і ваги для них можна написати руками:
| x₁, x₂ | І: z = x₁ + x₂ − 1.5 | ŷ | АБО: z = x₁ + x₂ − 0.5 | ŷ |
|---|---|---|---|---|
| 0, 0 | −1.5 | 0 | −0.5 | 0 |
| 0, 1 | −0.5 | 0 | +0.5 | 1 |
| 1, 0 | −0.5 | 0 | +0.5 | 1 |
| 1, 1 | +0.5 | 1 | +1.5 | 1 |
Обидві функції мають ваги w₁ = w₂ = 1, і відрізняються лише зсувом: −1.5 проти −0.5. Це рівно те, що ми бачили в інтерактиві 1: ваги задають нахил межі, зсув її пересуває. Нахил тут однаковий — діагональ під 45 градусів до осей; вона просто стоїть у різних місцях квадрата.
Схема 3 · І та АБО — одна пряма, два положення
Чотири можливі входи як точки квадрата. Заповнена точка — відповідь 1, порожня — 0. Рожева зона — половина площини, де z ≥ 0.
07 / XORXOR і зима напрямку
Тепер третя функція, і саме на ній історія зламалась. Виключне АБО (XOR, «або те, або те, але не обидва») має видавати одиницю на (0, 1) і (1, 0) та нуль на (0, 0) і (1, 1). Одиниці стоять по одній діагоналі квадрата, нулі — по іншій. Спробуй знайти пряму, яка їх розділить:
Інтерактив 3 · Пряма, якої не існує
Чотири точки й одна пряма, яку ти повертаєш і зсуваєш як завгодно. Перемкни функцію — і порівняй, що досяжно на І, на АБО і на XOR.
Перебір переконує, але не доводить. Доведення поміщається у три рядки. Нехай пряма w₁x₁ + w₂x₂ + b справді реалізує XOR:
З першої вимоги b < 0, отже −b > 0. Разом із кроком 2 це дає w₁ + w₂ + b > 0. А четверта вимога каже, що ця сама величина менша за нуль. Обидва бути не можуть.
Це не «перцептрон погано вчиться на XOR» і не «потрібно більше даних». Потрібної прямої немає в природі, і жодний алгоритм навчання її не знайде. Причина суто геометрична: відрізок між точками (0, 0) і (1, 1) перетинає відрізок між (0, 1) і (1, 0). Опуклі оболонки класів мають спільну точку — центр квадрата, — а такі класи прямою не розділити ніколи.
Що з цього зробила історія. У 1969 році Марвін Мінський і Сеймур Пейперт випустили книжку «Перцептрони», де ретельно описали, чого одношарова конструкція не вміє, — і XOR був найнаочнішим прикладом. Книжка була математично бездоганною, але прочитали її ширше, ніж вона твердила: як вирок усьому напрямку, а не одному шарові. Наслідком стала перша «зима» штучного інтелекту — фінансування досліджень нейромереж різко скоротилось і не відновлювалось приблизно до середини 1980-х, поки не поширився алгоритм зворотного поширення помилки, який дозволив навчати кілька шарів одразу.
08 / Два шариДва нейрони й третій над ними
Найцікавіше, що вихід був відомий одразу, і Мінський із Пейпертом його теж описували. XOR не розділити однією прямою — але двома можна. Побудуймо розвʼязок руками з тих функцій, які ми вже реалізували в розділі 6.
Придивись до XOR ще раз: одиницю треба видати там, де хоча б один вхід одиничний і не обидва одразу. Це дослівний опис конструкції з трьох нейронів:
- Нейрон h₁ — це АБО: z = x₁ + x₂ − 0.5. Відповідає «хоча б один вхід одиничний».
- Нейрон h₂ — це НЕ-І: z = −x₁ − x₂ + 1.5. Відповідає «не обидва одразу».
- Нейрон y — це І над h₁ і h₂: z = h₁ + h₂ − 1.5.
Перші два нейрони утворюють прихований шар: вони дивляться на ті самі вхідні дані, але кожен проводить свою пряму. Третій дивиться вже не на ознаки, а на відповіді перших двох — і проводить пряму в новому просторі, де координатами є h₁ і h₂. Підставмо всі чотири входи:
| x₁, x₂ | h₁ = АБО | h₂ = НЕ-І | z = h₁ + h₂ − 1.5 | y | XOR |
|---|---|---|---|---|---|
| 0, 0 | 0 | 1 | −0.5 | 0 | 0 |
| 0, 1 | 1 | 1 | +0.5 | 1 | 1 |
| 1, 0 | 1 | 1 | +0.5 | 1 | 1 |
| 1, 1 | 1 | 0 | −0.5 | 0 | 0 |
Схема 4 · Два нейрони плюс третій дають XOR
Ліворуч — схема зʼєднань із конкретними вагами на ребрах. Праворуч — та сама конструкція на площині: дві прямі вирізають смугу, у якій лежать обидві одиниці.
Зверни увагу, що саме тут сталося. Ми не змінили жодного нейрона: усі три — такі самі зважені суми з порогом, як у розділі 2. Ми змінили лише спосіб їх зʼєднати, і множина функцій, які конструкція здатна описати, миттєво розширилась із півплощин до опуклих областей, а якщо додати ще один шар — до обʼєднань таких областей, тобто майже до будь-яких. Ось де закінчується один нейрон і починається мережа.
Він не зупиняється на нероздільних даних. Це головне. Реальні дані роздільними бувають рідко: досить одного помилково розміченого рядка, щоб збіжність зникла. Наша дошка стала роздільною лише після того, як ми звузили задачу до заниженої ціни; поверни в неї приманки з завищеною ціною — і клас шахрайства перетвориться на смугу, всередині якої лежать чесні оголошення з двох боків. Це та сама структура, що й у XOR, тільки на реальних даних, і жодна пряма з нею не впорається.
Він не дає ймовірностей. Сходинка видає нуль або одиницю, і все. Немає числа, яке можна порівняти з порогом, немає ROC-кривої, немає можливості сказати «покажи модератору двадцять найпідозріліших». Логістична регресія з теми 17 — той самий нейрон з іншою активацією — дає все це задарма.
Він чутливий до порядку прикладів і не має «найкращої» відповіді. Перемішай навчальну вибірку — отримаєш іншу пряму, бо правило зупиняється на першій, яка не помиляється. Жодного критерію якості серед розділювальних прямих у нього немає.
Він не узагальнюється на глибину. Правило вимагає знати правильну відповідь для того самого нейрона, який навчається. Для прихованого шару такої відповіді не існує, і правило туди просто не поширюється. Сходинка до того ж має нульову похідну скрізь, де вона взагалі визначена, тому й градієнтний спуск на ній не працює — доведеться міняти активацію.
10 / ДаліЩо далі
Підсумок теми в пʼятьох рядках. Штучний нейрон — це зважена сума входів плюс зсув, пропущена крізь одну функцію; біологічна аналогія поверхнева й нічого не пояснює. Зі сигмоїдою один нейрон дослівно дорівнює логістичній регресії, зі сходинкою — перцептронові Розенблата. Правило Розенблата виправляє ваги лише на помилках і не має ані функції втрат, ані градієнта. Воно гарантовано сходиться, якщо дані лінійно роздільні, — і не сходиться взагалі, якщо ні. А лінійна роздільність ламається на чотирьох точках XOR, і це не недолік навчання, а межа самої форми «одна пряма».
Місток до наступної теми ти вже перейшов у розділі 8. Ми поставили три нейрони й отримали те, чого один не міг, — але ваги виписали руками, знаючи відповідь. Тема 31 починається саме з цього місця: як зробити з нейронів шар, чому між шарами обовʼязково потрібна нелінійна активація (доведення там займає три рядки й пояснює, чому наша сходинка не випадкова), як виміряти помилку числом і як розподілити провину між шарами зворотним поширенням. Усе, що тут виглядало ручною роботою, там стане алгоритмом.
practice.ipynb ми пишемо
перцептрон з нуля десятком рядків, навчаємо його на тих самих оголошеннях і
дивимось, як спадає кількість виправлень; звіряємо результат зі
sklearn.linear_model.Perceptron; повертаємо на дошку завищені
приманки й бачимо, як лічильник помилок стрибає вічно; порівнюємо з
LogisticRegression на тих самих даних і збираємо XOR із трьох
нейронів ручними вагами.Далі в темі
Теорію прочитано. Тепер закріпи її на практиці.