Глава 0. Искусственный нейрон — интерактивная разминка
Если термины вроде backprop, feature map или residual звучат как чужой язык — начните здесь.
Ниже не «новая теория», а медленный разбор того, что дальше в книге идёт быстрее.
Эта глава — разминка с интерактивом в тексте: не отдельная лаба, а «прочитал абзац — сразу потрогал» демо ниже. Можно пощупать нейроны — у каждого свои ползунки w и b, на графике видно, как меняется ответ. Клик по кривой — подать другой вход.
Словарь на одну страницу
| Термин | Простыми словами |
|---|---|
| Нейрон | Крошечная функция: принимает числа, выдаёт одно число |
| Вес | Насколько сильно вход влияет на результат |
| Смещение (bias) | Порог «с какого уровня сигнал считается заметным» |
| Слой | Группа нейронов, считающих ответ параллельно |
| Функция активации | Нелинейный «фильтр» после суммы — без неё сеть = один большой линейный калькулятор |
| Обучение | Подбор весов, чтобы ошибка на примерах уменьшалась |
| Цель (y*) | Правильный ответ из данных — сравниваем с предсказанием, на вход сети не подаётся |
| Класс | Метка «какая категория» вместо одного числа; на выходе — вероятности по классам |
| Градиентный спуск | Идём в сторону, где ошибка падает быстрее всего — как спуск с холма в долину |
| Backprop | Дельты ошибки считаем от выхода к входу — кому из весов сколько «виновато»; ŷ на вход не подаём |
0.1. Один нейрон: вход → сумма → активация → выход
Самый маленький кирпичик сети:
вход x → z = w·x + b → y = act(z) → выход y
- x — что подали (температура, яркость пикселя, любое число).
- w — насколько вход важен.
- b — сдвиг порога.
- act — что делаем с суммой: обрезаем отрицательное (ReLU), сжимаем в 0…1 (сигмоида) и т.д.
Пощупайте: карточка нейрона — ползунки w и b. Клик по графику — другой x. Смотрите, как двигается точка и меняется y.
0.2. Несколько нейронов в одном слое
Один вход x можно развести на несколько нейронов. Каждый смотрит на тот же x, но с своим весом — получаются разные ответы.
Это уже не «одна формула», а набор признаков: один нейрон чувствителен к большим x, другой — к малым, третий — к средним.
У каждого нейрона — своя карточка с w и b. На карточке сразу видно его y. Жирная линия на графике — сумма всех. Тонкие — каждый по отдельности (можно выключить).
0.3. Второй и третий слой: цепочка
Добавляем скрытый слой и выходной:
x → [скрытые нейроны] → y
Скрытый слой берёт вход и строит промежуточные признаки. Выходной — сводит их в один ответ (например «да / нет»).
Каждый новый слой комбинирует то, что сделали предыдущие. Формула становится гибче — можно аппроксимировать более сложные зависимости.
Скрытые нейроны — карточки с w,b. Выходной — ползунки vᵢ (насколько слушать каждый скрытый). Жирная кривая — ответ всей сети.
0.4. Зачем обучение: вход, предсказание, цель
Выше вы вручную крутили w и b и смотрели, как меняется кривая. В реальной задаче крутить миллион ползунков нельзя — нужен автоматический подбор.
Что на входе, что на выходе
вход x ──→ сеть (w, b, …) ──→ предсказание ŷ
↕ сравниваем
цель y* (правильный ответ из данных)
| Откуда | Что это | |
|---|---|---|
| x | Подаём мы (признак, пиксель, температура) | Вход сети |
| ŷ | Считает сеть из x и текущих весов | Предсказание |
| y* | Берём из данных (эталон, разметка) | Цель — то, чему хотим научить |
Цель не подаётся на вход нейрона. Сеть видит только x. Цель нужна снаружи — чтобы измерить ошибку и понять, куда двигать веса.
Результат обучения — не новая формула, а найденные числа: w, b, v и т.д. После обучения вы сохраняете веса и дальше подаёте новые x — сеть выдаёт ŷ без цели.
Частая путаница: что такое «цель»?
Цель y* — это не «хочу такие веса». Вы никогда не говорите сети: «пусть w₁ = 0,42». Веса подбирает алгоритм сам.
Цель — это ответ на один вопрос: «при этом входе x правильный выход должен быть столько-то y*».
| На демо сейчас | В реальной задаче |
|---|---|
| Один пример: x = 1,15 → y* = 0,40 | Тысячи примеров: (x₁, y*₁), (x₂, y*₂), … |
| Учим попасть в цель в этой точке | Учим попадать на всех примерах сразу |
| Кривая ŷ(x) на графике побочный эффект — видно, как веса влияют на всю функцию | Та же кривая — итог: сеть «запомнила» закономерность |
Аналогия. Ученик (сеть) решает задачу (x). Пишет ответ ŷ. Учитель сверяет с ключом (y*) — ключ ученику не показывают, только для проверки. После сотен задач привычки ученика (веса) меняются так, что ответы совпадают с ключом. На экзамене дают только x — без ключа.
Что крутите ползунком «цель» на демо: меняете правильный ответ для текущего x, как будто в учебнике другая задача. Сеть заново подстраивает веса, чтобы ŷ ≈ y* при этом x. На графике красный кружок — куда должна попасть зелёная кривая в этой точке x (вертикальная линия). В остальных x цель не задана — кривая там «живёт своей жизнью».
Что обучаем в итоге? Не форму, не цель — параметры w, b, v, c. Они и есть «память» сети. Сохранили — подаёте любой новый x, получаете ŷ. Цель нужна только пока учим.
Четыре шага
- Пример: пара (x, y*) — «при таком входе правильный ответ такой».
- Ошибка L = (ŷ − y*)² — насколько промахнулись.
- Градиент — кому из весов «виноват» больше: ∂L/∂w, ∂L/∂b, …
- Градиентный спуск — чуть сдвигаем каждый вес против градиента. Повторяем тысячи раз.
Почему «обратное» и что именно распространяется
Название путает. Разберём по шагам — это неочевидно, но логично.
Что НЕ происходит. Вы не берёте ŷ с выхода и не подаёте его снова на вход сети. Вход x остаётся тем же. Цель y* тоже не идёт внутрь нейрона — она нужна только снаружи, чтобы посчитать L.
Что происходит. После того как посчитали L, идём по той же цепочке вычислений, но в обратном порядке — от выхода к входу — и на каждом звене спрашиваем:
«Если чуть сдвинуть этот сигнал или вес — насколько изменится L?»
Эти «насколько» и есть дельты (градиенты): ∂L/∂ŷ, ∂L/∂h, ∂L/∂w, … Их как раз распространяют назад: от ошибки к весам.
вперёд (счёт ответа): x → скрытые h → ŷ → сравнить с y* → L
назад (счёт вины): L ← ∂L/∂ŷ ← ∂L/∂v, ∂L/∂c ← ∂L/∂h ← ∂L/∂w, ∂L/∂b
(от конечного слоя к начальному)
Порядок по слоям:
| Этап | Направление | Что делаем |
|---|---|---|
| Счёт градиентов | Конец → начало | Сначала выходной слой (v, c), потом скрытые (w, b) |
| Обновление весов | Все сразу | После одного прохода назад: каждый w := w − η·∂L/∂w |
Не «подкрутили выход — пересчитали — подкрутили вход». Один проход вперёд, один назад, один шаг по всем весам.
Связь Δw и ΔL. Не перебираем случайные Δw и смотрим, что вышло. Математика сразу даёт направление:
Δw ≈ −η · ∂L/∂w
Смысл: «если сдвинуть w в эту сторону — ошибка уменьшится». На демо справа это видно как L(w) — холм, по которому катится точка.
Итого одной фразой: обратное — потому что дельты считаем от конца к началу; распространение ошибки — потому что число L «размазывается» по слоям: каждому весу достаётся своя доля вины.
Режим «1 нейрон» — слева ŷ(x), справа L(w): оранжевая точка катится по «холму» ошибки.
Режим «Мини-сеть» — слева ŷ(x), блок backprop с числами ∂L/∂… (дельты от выхода к входу), справа L по шагам.
Кнопка «Шаг обучения» сдвигает все веса; «Авто» — много шагов, пока ŷ не приблизится к цели.
От числа к классу
В регрессии цель — число y*. В классификации цель — метка: «это класс 1» или «класс 2». Один выход уже неудобен — нужно два (по одному на класс) и правило: кто больше, тот и победил.
Ниже — упрощённая задача: по числу x понять, в каком диапазоне оно лежит.
| Диапазон x | Класс |
|---|---|
| 0,2 … 0,5 | Класс 1 |
| 0,6 … 0,7 | Класс 2 |
| между ними и по краям | ни один (серые точки на демо) |
Сеть не может отличить классы одной прямой на весь x — нужны скрытые нейроны с изломами (ReLU): каждый «смотрит» на свой участок оси. Их комбинация даёт горб p₁ или p₂ только в своей полосе. На демо тонкие линии — это скрытые hᵢ(x).
Обучаем на 12 примерах (цветные и серые точки) — mini-batch. Два выхода независимы (сигмоиды): вне полос оба могут быть низкими. Внизу демо — 18 весов сети (4 скрытых + 2 выхода).
Проверьте ползунком x: в полосе 1 — высокая p₁; в полосе 2 — высокая p₂; между полосами и за x>0,7 — «вне классов», оба p низкие.
0.5. Мост к свёртке: окно по картинке
В гл. 2 свёртка бегает окном 3×3 по пикселям. Это тот же нейрон:
- 9 входов — яркости в окне;
- 9 весов — ядро (kernel), крутите на карточках;
- 1 выход — отклик в этой позиции.
Цель — карта справа «эталон»: где должен быть сильный отклик (край, пятно). Обучение подбирает 9 весов, чтобы зелёная кривая на графике совпала с красной целью.
Пресет — другая картинка и другой эталон. Позиция — какое окно смотрим на строке. Авто — ядро учится, ошибка на правом графике падает.
0.6. Ещё разминка
0.6.1. Три точки — одна кривая
В §0.4 учились на одном примере (x, y*). В жизни примеров много: сеть должна пройти через все красные точки сразу. Ошибка — средняя по всем точкам; backprop на каждом шаге суммирует градиенты и обновляет веса один раз.
Ползунком x смотрите, как кривая ведёт себя между точками. Авто — сеть из 6 скрытых ReLU подстраивается под все три цели.
0.6.2. XOR: зачем нужен скрытый слой
Классическая задача: два входа x₁, x₂ (0 или 1), выход 1 только когда входы разные. Одним нейроном без скрытого слоя это невозможно — нужна нелинейная «склейка». Таблица истинности справа: зелёная ячейка — сеть угадала, красная — ещё нет.
Карта слева — оттенок по ŷ в плоскости (x₁, x₂). После обучения углы 0/1 и центр 1/1 должны разойтись.
0.7. Куда дальше
| Здесь | В основной книге |
|---|---|
| Один нейрон | Гл. 1: почему миллион входов в Dense не взлетел |
| Много нейронов / слои | Гл. 2–3: свёртка и частоты |
| Градиентный спуск | Гл. 4: почему градиент затухает в глубине |
| Классы по диапазону x | Гл. 1, 7: классификация, softmax |
| Несколько точек / XOR | Гл. 1: batch, нелинейность, скрытые слои |
| Ядро по картинке | Гл. 2, 7–9: детекция и карты признаков |
Другой тип обучения — глава 0b: награды вместо y*, лабиринт, Q-learning.
Если после этой главы термины в основном тексте всё ещё давят — напишите, какие слова непонятны: можно добавить такие же интерактивы точечно.