Нейросеть — это сочетание нескольких деталей. Нейрон, который взвешивает входы; функция активации, которая изгибает сигнал; скрытые слои, которые складываются друг на друга; функция потерь, которая измеряет, насколько сеть ошиблась; и обратное распространение ошибки, которое распределяет ответственность в обратном направлении и исправляет веса. Мы покрутим каждую деталь своими руками, а в конце пройдём весь путь: соберём из этих деталей настоящую модель, оценим её и развернём.
y = ступенька(w₁x₁ + w₂x₂ + b)Rosenblatt, 1958
Когда одновременно пахнет фруктами и уксусом, нейрон получает оба сигнала с разной силой и складывает их. Если сумма превышает порог возбуждения, он посылает сигнал «приближайся». Сила синапса — это вес, порог возбуждения — смещение.
Каждый вход умножается на свой вес, всё складывается, добавляется смещение; если полученное z не меньше 0, на выходе 1, иначе 0. На плоскости одна прямая w₁x₁ + w₂x₂ + b = 0 отделяет «еду» от «не еды». Правило обучения перцептрона: каждый раз, встречая неверно классифицированную точку, немного сдвигать прямую в сторону этой точки.
Правило обучения перцептрона умещается в одну строку. Выбираем одну ошибочную точку: w ← w + η·(ответ − прогноз)·x. Если правильный ответ 1, а сеть сказала 0, прямая подтягивается к этой точке, в обратном случае — отталкивается. Если задача делится прямой, одно это правило рано или поздно правильно классифицирует все точки.
Задачу вроде XOR — «еда, только когда есть ровно один из двух запахов» — нельзя разделить никакой прямой. После того как в 1969 году Минский и Пейперт математически показали это ограничение, исследования нейросетей на время затихли. Решение — добавить ещё один слой, то есть скрытый слой. Но сначала посмотрим на функции, которые изгибаются плавно, а не ступенькой.
Функция активации получает взвешенную сумму z и определяет выход нейрона a. Только при наличии изгиба складывать слои имеет смысл, а форма градиента (производной) определяет скорость обучения.
При обратном распространении ошибки на каждом слое, через который мы проходим назад, градиент умножается на производную функции активации. Производная сигмоиды не превышает 0,25. Пройдя назад 10 слоёв, сигнал уменьшится как минимум в 0,25¹⁰ ≈ 0,00000095 раза. До первых слоёв сигнал «исправься» почти не доходит. Это и есть затухание градиента.
У ReLU производная на положительном участке ровно 1, поэтому сигнал не ослабевает, сколько бы слоёв мы ни прошли назад, а вычисление сводится к «сравнению с 0» и потому быстрое. Зато на отрицательном участке производная равна 0, и однажды выключившийся нейрон может уже не ожить. Варианты вроде Leaky ReLU, ELU и Swish — попытки закрыть эту брешь. Ни одна функция не лучшая всегда: выбор зависит от задачи и модели.
Точки (пиксели) → направления → стыки → формы. Из признаков предыдущего слоя следующий слой строит признаки на ступень крупнее.
4 признака предыдущего слоя (0.8, 0.1, 0.4, 0.0) взвешиваются весами (0.5, 0.3, 0.2, 0.1), и добавляется смещение 0.1.
Детекторы направлений и стыков на рисунке выше — правила, заранее заданные человеком для наглядности. В классическом машинном обучении признаки действительно проектировал человек. Глубокое обучение само выучивает веса таких детекторов из данных. Поэтому оно находит и признаки, о которых человек не подумал.
Какие признаки на самом деле возникают на каждом слое при работе с изображениями, мы увидим в 3-3 (Изображения и CNN).
Обучение — это уменьшение потерь. От того, что выбрать в качестве потерь, зависит, «чего будет бояться» модель.
(ответ − прогноз)². Основа для задач регрессии, где нужно угадать число. Применяется для прогноза непрерывных величин — цен на жильё, расходов домохозяйств, температуры. Эту функцию потерь использует панель обратного распространения ниже.
−log(вероятность, отданная правильному ответу). Основа для задач классификации. Если модель ошибается уверенно, штраф растёт неограниченно. Используется в паре с сигмоидой или софтмаксом на выходе.
Если на выходе сигмоида, градиент MSE равен 2(p − t)·p(1 − p). Если правильный ответ 1, а модель уверенно ошибается с p = 0.01, то p(1 − p) близко к 0, и градиент тоже почти 0. Ошибка большая, а сигнал «исправься» слабый. С перекрёстной энтропией производная сигмоиды аккуратно сокращается, и градиент равен просто p − t, то есть −0.99. Чем сильнее ошибка, тем сильнее исправление.
вход 2 → скрытый 3 → выход 1цель 1.00 · потери = (цель − выход)² · скорость обучения 0.1
Вход проходит по связям, и вычисляется выход. Первый выход — 0.41.
(1.00 − 0.41)² ≈ 0.35. Это MSE из раздела 5 выше.
Двигаясь от выхода назад, вычисляем ответственность (градиент) каждого веса.
Новый вес = старый − скорость обучения × градиент. Это и есть градиентный спуск.
Если нажать на ячейку веса, соответствующая связь выделится на рисунке, а блок «Шаг за шагом в числах» ниже покажет вычисление для этого веса.
Сначала на выходе определяется величина ошибки −2 × (цель − выход). Ответственность веса «скрытый→выход» — это она, умноженная на сигнал, пришедший по этому весу (значение скрытого нейрона). Для веса «вход→скрытый» нужно пройти назад ещё на шаг: умножаем на выходной вес v, чтобы передать ответственность скрытому нейрону, умножаем на h(1 − h) — насколько чувствителен был скрытый нейрон, — и умножаем на пришедший вход x. Это «умножить и передать назад» и есть цепное правило. Затухание градиента из раздела 2 возникает именно из-за этого умножения.
Если нажать «Только выходные (способ дрозофилы)», веса «вход→скрытый» фиксируются, и обучающий сигнал, приходящий сверху (аналогия с дофамином у дрозофилы), исправляет только выходные связи. Это сильно упрощённая аналогия со структурой обучения в грибовидном теле дрозофилы; вычисляется ли дофаминовый сигнал подобно градиенту, пока исследуется.
Если изобразить потери как рельеф, обучение — это спуск к самой низкой точке. Видя один и тот же градиент, разные оптимизаторы по-разному делают шаг.
Эта долина длинная по горизонтали и крутая по вертикали. SGD движется ровно на величину градиента, поэтому в крутом вертикальном направлении скачет вверх-вниз большими шагами (зигзаг), а при малой скорости обучения в пологом горизонтальном направлении ползёт черепашьим шагом (проверьте на «0.1 малая»). Моментум запоминает накопленную скорость, ускоряется в устойчивом направлении (по горизонтали), а зигзаги взаимно гасятся. Adam отдельно измеряет величину градиента по каждому направлению и подбирает длину шага, поэтому спускается по горизонтали и вертикали примерно с одинаковой скоростью.
«Шум мини-батча» — это колебания, возникающие, когда градиент считается лишь по части данных, как при реальном обучении. Если выбрать скорость обучения «большая», SGD перелетает через стенку долины и вылетает наружу. Ни один оптимизатор не побеждает всегда. Adam широко используют как надёжный вариант по умолчанию для большинства задач, но есть исследования, где в ряде задач глубокого обучения хорошо настроенный SGD лучше работал на новых данных [R12].
14 обучающих точек · 80 проверочных точеквход 1 → скрытый 48 (tanh) → выход 1, Adam
Самое надёжное средство — собрать больше данных. Когда данных мало, а модель большая, заучивать легко. Числа на этом рисунке — учебный эксперимент, вычисленный прямо на этой странице; генератор случайных чисел зафиксирован, чтобы при каждом запуске получался одинаковый результат.
Все детали, которые мы видели до сих пор, относятся к одному этапу — обучению. В реальной работе то, что до и после него, занимает больше. Пример — модель «поиска брака» на контрольном посту завода.
Из 200 проверенных изделий действительно бракованных — 20. Модель выдаёт для каждого изделия «вероятность брака». Попробуйте менять, начиная с какого значения изделие признаётся браком (порог).
Оба примера используют только библиотеки, предустановленные в Colab. Нажмите «Скачать блокнот (.ipynb)» и откройте его в Colab через Файл → Загрузить блокнот или скопируйте код и вставьте в ячейку нового блокнота.
Четыре этапа — прямой проход → потери → обратное распространение → обновление — перенесены в код как есть, без библиотек. На одних и тех же данных-спиралях обучаем и сравниваем вариант «без функции активации» и «скрытые слои tanh». Чтобы подставить свои данные, замените только X и y в месте кода с пометкой [Чтобы подставить свои данные].
Так делают на практике. Сравниваем три модели — без функции активации / ReLU / ReLU + дропаут + ранняя остановка — и сохраняем последнюю модель в файл (⑥ сохранение из раздела 9).
Это промпты, которые можно вставить в ИИ-помощника вроде ChatGPT, Qwen или Claude. Если нажать «Копировать», после промпта будет добавлен выбранный код. Замените текст в 〔 〕 на свою ситуацию.
Ответ ИИ — лишь отправная точка. Предложенные статьи, числа и функции библиотек обязательно проверяйте по первоисточникам и официальной документации. Если для конкурса или статьи вы пользовались помощью ИИ, укажите факт и объём использования согласно правилам организаторов и журнала.
Это тот же словарь, что и жёлтое пунктирное подчёркивание в тексте. Во всей серии используются одни и те же обозначения. Нажмите на название раздела, чтобы перейти к месту первого упоминания.
Аналогия — первый шаг к пониманию, но и семя заблуждения. Для аналогий с дрозофилой и мозгом указана сила. Прямая есть данные, что это действительно делает то же самое · Частичная похожи лишь некоторые свойства · Нет соответствие неизвестно
| Понятие | Бытовая аналогия | Аналогия с дрозофилой и мозгом | Где аналогия ошибается |
|---|---|---|---|
| Вес | Степень доверия, разная для каждого мнения | Частично Сила синапса | Реальные синапсы меняют силу в зависимости от времени и состояния организма, а сигнал — не непрерывное число, а электрические импульсы (спайки) |
| Смещение · порог | Планка, по которой принимается решение | Частично Порог возбуждения нейрона | Порог нейрона не фиксирован: он постоянно меняется из-за утомления и адаптации |
| Функция активации | Ручка громкости, которую нельзя выкрутить выше предела | Частично Кривая частоты разрядов в зависимости от силы стимула | Нейросеть выдаёт одно число, а нейрон посылает импульсы во времени |
| Скрытый слой | Менеджер среднего звена, который собирает и обобщает отчёты | Частично Клетки Кеньона грибовидного тела | Входные связи грибовидного тела в основном не меняются при обучении. Скрытые слои в глубоком обучении обучают все связи |
| Функция потерь | Бланк проверки экзамена | Частично Результат в виде сахара (награда) или удара током (наказание) | Дрозофила не вычисляет «насколько она ошиблась» одним числом |
| Обратное распространение ошибки | Разбор после аварии: кто виноват, с конца к началу | Нет Дофаминовый сигнал не вычисляется в обратном направлении по слоям | Делает ли мозг что-то похожее на обратное распространение ошибки другим способом, пока исследуется |
| Скорость обучения | Насколько сильно исправляешься после одного замечания | Частично Насколько меняется синапс после одного опыта | Величина изменений в мозге зависит от ситуации, внимания и повторения |
| Оптимизатор | Походка туриста, спускающегося с горы в тумане | Нет | Реальный рельеф потерь имеет миллионы измерений, и его нельзя охватить взглядом, как на рисунке |
| Переобучение | Абитуриент, заучивший только ответы на прошлогодние задания | Нет | Люди тоже заучивают, но обобщают иначе, чем нейросети |
| Дропаут | Команда, которая работает, даже если несколько человек отсутствуют | Нет Есть толкование, что это похоже на случайные сбои синаптической передачи, но доказательства слабые | При тестировании все нейроны включены. Члены команды отсутствуют не всегда |
E-1 Об авторе · E-2 Научные источники · E-3 Материалы к рисункам
Следующие материалы использованы как ориентир для структуры и содержания.
Практические рекомендации для преподавателей, наставников по OJT (обучению на рабочем месте) и тьюторов. Время указано ориентировочно — подстраивайте его под реальное занятие.
| Аудитория | Студенты и работающие специалисты, впервые изучающие нейросети. С базовыми знаниями Python — вплоть до практики в Colab, без них — до анимаций в основном тексте |
|---|---|
| Предварительные знания | Умножение и сложение, чтение графиков функций. О производной достаточно знать «производная = насколько меняется результат при небольшом изменении входа» |
| Цели обучения | ① Объяснять, что делают перцептрон, функция активации и скрытый слой ② Пошагово в числах проходить прямой проход → потери → обратное распространение → обновление ③ Распознавать переобучение и бороться с ним с помощью проверочных данных, ранней остановки и дропаута |
| Ориентировочное время | Чтение 40–50 мин · демонстрация анимаций 25 мин · практика в Colab 30 мин (код 1 — 10 мин, код 2 — 20 мин) |
Введение 5 мин (демонстрация неудачи на XOR из раздела 1) → демонстрация разделов 2·3 15 мин → панель разделов 5·6 15 мин → переобучение из раздела 8 10 мин → проверочные вопросы 5 мин.
Панель раздела 6 15 мин → разделы 8·9 25 мин (обсуждение ловушки точности на рабочих примерах) → практика с кодом 2 30 мин → «применение к данным нашей команды» по карточкам с промптами 20 мин.
Новичкам — только разделы 1·2·3·6; слушатели среднего уровня один раз вручную считают «Шаг за шагом в числах» из раздела 6, а затем сверяют с частью кода 1, отвечающей за обратное распространение.
| Раздел | Вопрос, на котором стоит остановиться | Совет по управлению |
|---|---|---|
| 1 Перцептрон | «Почему на XOR, как ни двигай прямую, всё равно остаются ошибочные точки?» | Сначала обучите на простой задаче и покажите успех, затем переключите на XOR |
| 2 Функции активации | «Где и чему равен максимум производной сигмоиды?» | Остановите на сигмоиде, передвиньте ползунок к 0 и убедитесь, что получается 0.25 |
| 3 Скрытые слои | «Мы сложили два слоя — почему слева всё ещё прямая?» | Уменьшите число нейронов до 4 и покажите, что правая сеть тоже не справляется |
| 4 Обучение представлений | «Почему □ распознаётся по 4 углам? На что посмотрел бы человек?» | Переключайте T и L по очереди и обратите внимание, что меняется только слой стыков |
| 5 Функция потерь | «Какая функция потерь сильнее требует исправиться, когда модель уверенно ошибается?» | Поставьте p = 0.01 и сравните два значения градиента |
| 6 Обратное распространение ошибки | «У какого веса градиент больше — у близкого к выходу или у далёкого?» | Медленно пройдите один цикл кнопкой «Следующий шаг», затем, меняя ячейки весов, читайте формулы |
| 7 Оптимизаторы | «Почему SGD идёт зигзагом?» | Переключите скорость обучения на «большая» и покажите, как SGD вылетает наружу |
| 8 Переобучение | «Если обучающие потери продолжают снижаться, это хорошая модель?» | Выключите всю регуляризацию и прогоните до конца, затем включайте по одной и сравнивайте |
| 9 Весь процесс | «Что дороже при контроле брака — пропуск или ложная тревога?» | Передвиньте порог на 0.2 и 0.8 и посмотрите, как точность (precision) и полнота меняются в противоположные стороны |
| Заблуждение | Верное объяснение | Что показать |
|---|---|---|
| Чем больше слоёв, тем умнее сеть — всегда | Без функции активации любое число слоёв равносильно одной прямой. А даже с ней при малом объёме данных возникает переобучение | Раздел 3, левый рисунок; раздел 8 |
| Нейросеть — точная копия мозга | Заимствован лишь каркас: слои, сила связей, пороги. Обратное распространение ошибки в мозге не подтверждено | Отметка «Нет» в общем разделе D |
| Низкие обучающие потери — значит, модель хорошая | Критерий — качество на новых данных (проверочных и тестовых) | Раздел 8, правый график |
| Высокая доля верных ответов — значит, модель хорошая | На несбалансированных данных даже ответ «всё годное» даёт высокую долю верных ответов. Смотрите вместе с точностью (precision) и полнотой | Раздел 9, порог 0.95 |
| Adam всегда лучший | Это лишь надёжный вариант по умолчанию. В некоторых задачах SGD + моментум бывает лучше | Раздел 7, скорость обучения «малая» |
Только одну прямую (в многомерном случае — одну плоскость). Потому что композиция нескольких линейных преобразований — это одно линейное преобразование (W₂W₁x = Wx). Пример — левый рисунок в разделе 3.
Производная сигмоиды не больше 0.25, поэтому, перемножаясь на каждом слое, градиент быстро уменьшается. У ReLU производная на положительном участке равна 1, и при проходе назад градиент не уменьшается. Однако на отрицательном участке она равна 0, поэтому могут появляться выключенные нейроны.
L = (1 − 0.41)² = 0.3481 ≈ 0.35. ∂L/∂y = −2 × (1 − 0.41) = −1.18. Это совпадает со значениями первого цикла на панели раздела 6.
Это переобучение. Возьмите модель из момента, когда проверочные потери были минимальны (ранняя остановка), включите дропаут и затухание весов или увеличьте объём данных.
Доля верных ответов 90%, полнота 0%. Не найдено ни одного бракованного изделия. Поэтому на несбалансированных данных нельзя смотреть только на долю верных ответов.
В коде 1 замените tanh на ReLU (две строки: функция активации и её производная). Меняя число скрытых нейронов на 4, 16, 64, сведите долю верных ответов на проверочных данных в таблицу и в трёх предложениях опишите лучшую настройку и причину.
Замените данные в коде 2 на свои рабочие данные (2 и более признаков, ответ 0/1). Разделите их на обучающие/проверочные/тестовые в пропорции 6:2:2 и сообщите долю верных ответов, точность (precision) и полноту на тестовых данных. Обоснованно оцените, подходит ли порог 0.5 для вашей задачи.
| Начинающим | Разделы 4·7 можно пропустить без потери связности. Раздел 6 смотрите вместе только один цикл с помощью кнопки «Следующий шаг» |
|---|---|
| Углублённо | Попросите вручную посчитать «Шаг за шагом в числах» из раздела 6, а затем сопоставить по одной со строками d1·d2·d3 кода 1. Обсудите, что будет, если добавить в раздел 7 уменьшение скорости обучения (расписание) |
| Что изучить дальше | Сансон Ан, конспект лекций «Наука о данных для бизнеса» (наука о данных в целом) · STEP [K-Digital] Обработка естественного языка с помощью ИИ (связано с 3-5·3-8) · STEP [K-Digital] Основы анализа финтех-данных (связано с 3-6) |
| Материалы для преподавателя | Критерии оценки проверочных вопросов и примеры ответов к заданиям — на странице ответов для преподавателей (3-2) |
Вы дочитали часть «3-2 Детали нейросети» до конца. Обитатели лаборатории подведут итог — каждый по словечку.