🔴 Сложный ⏱️ 60 минут

Искусственные нейронные сети

📋 Содержание урока

Искусственные нейронные сети 🧠

Останови на секунду и оглянись на путь, который ты уже прошёл. Производные и градиенты — урок за уроком ты учился находить направление, в котором функция убывает быстрее всего. Матрицы и линейная алгебра — ты научился думать о данных как о векторах и о преобразованиях данных как об умножении на матрицу. Теория вероятностей и статистика дали язык, на котором формулируется неопределённость и правдоподобие. Блок оптимизации — градиентный спуск, momentum, Adam (уроки 285 и 293) — научил тебя, как подбирать параметры модели автоматически, шаг за шагом уменьшая ошибку. А блок классических моделей — линейная и логистическая регрессия, деревья решений, случайный лес, градиентный бустинг (уроки 310–318) — показал, как эти инструменты складываются в работающие алгоритмы предсказания.

Сегодня всё это соединяется в единую картину. Искусственная нейронная сеть — это не какая-то принципиально новая, оторванная от всего пройденного конструкция, которую нужно осваивать с нуля. Это то же самое, что ты уже знаешь, собранное вместе и повторённое много раз. Один искусственный нейрон, как ты увидишь через несколько абзацев, — это буквально линейная регрессия (уроки 310–311) в частном случае или логистическая регрессия (урок 313) в другом частном случае: та же взвешенная сумма входов $w^\top x + b$, тот же сигмоид $\sigma(z)$, та же кросс-энтропия. Обучение сети — это градиентный спуск и Adam из уроков 285 и 293, применённые не к трём-четырём параметрам, а к миллионам. А организация нейронов в слои — это последовательность матричных умножений, прямиком из курса линейной алгебры. Ты уже владеешь каждым отдельным кирпичиком этого здания; сегодняшний урок показывает, как из этих кирпичиков строится нейросеть.

Это неслучайное совпадение и не педагогический приём — это отражение того, как на самом деле устроено глубокое обучение изнутри. Когда специалист по Data Science настраивает архитектуру сети, выбирает функцию потерь или дебажит, почему обучение застряло, он опирается ровно на тот математический фундамент, который ты выстраивал весь этот курс. Градиенты подскажут, почему сеть с сотней слоёв внезапно перестаёт обучаться (проблема затухающих градиентов, к которой мы ещё вернёмся в блоке про обратное распространение ошибки). Линейная алгебра подскажет, почему обучение на GPU в тысячи раз быстрее обучения на CPU — потому что умножение матриц идеально распараллеливается. Кросс-энтропия и сигмоида из логистической регрессии окажутся буквально последним слоем практически любой классифицирующей сети. Ничего из пройденного не окажется лишним — наоборот, именно сейчас всё это "включается" и начинает работать вместе.

С сегодняшнего урока начинается блок Deep Learning — 25 уроков, которые проведут тебя от одного искусственного нейрона до сверточных сетей для изображений, рекуррентных архитектур для последовательностей и трансформеров, на которых построены современные языковые модели. Это не случайное продолжение курса, а его кульминация: тот самый момент, ради которого имело смысл разбираться в матанализе, линейной алгебре и оптимизации так глубоко и так тщательно. Нейронные сети сегодня распознают лица на фотографиях, переводят текст между языками почти без потери смысла, диагностируют заболевания по снимкам не хуже опытных врачей, генерируют изображения и тексты, управляют беспилотными автомобилями и играют в го на уровне, недостижимом для человека. За каждым из этих достижений — ровно та математика, к которой ты сейчас готов.

Сегодняшний урок — обзорный и вводный. Мы не будем обучать сеть градиентным спуском (это отдельная большая тема уроков 330 и далее — метод обратного распространения ошибки, backpropagation), не будем разбирать конкретные архитектуры вроде сверточных или рекуррентных сетей (это уроки 335 и далее). Сегодняшняя задача — понять, из чего вообще состоит нейронная сеть и почему она устроена именно так: откуда взялась идея искусственного нейрона, почему без нелинейности сеть бесполезна независимо от её размера, как отдельные нейроны складываются в слои и целую сеть, и почему глубина сети — не просто "больше параметров", а механизм построения иерархии всё более сложных признаков. Это фундамент, без которого невозможно осмысленно двигаться дальше.

История

Идея искусственного нейрона появилась не в инженерной лаборатории, а на стыке нейрофизиологии и математической логики. В 1943 году нейрофизиолог Уоррен МакКаллок (Warren McCulloch) и совсем ещё молодой логик Уолтер Питтс (Walter Pitts), которому на момент публикации было всего двадцать лет, опубликовали статью «A Logical Calculus of the Ideas Immanent in Nervous Activity» — «Логическое исчисление идей, присущих нервной деятельности». Их цель была не построить работающую программу распознавания образов (компьютеров в современном смысле тогда попросту не существовало), а показать нечто более абстрактное: сеть из предельно упрощённых, бинарных моделей нейронов — каждый из которых либо "молчит", либо "срабатывает", если сумма входящих сигналов превышает порог, — способна в принципе вычислить любую логическую функцию, которую можно выразить в терминах "И", "ИЛИ", "НЕ". Модель МакКаллока-Питтса не умела обучаться — веса связей задавались вручную, а не подбирались по данным, — но она впервые формально показала: сеть из простых пороговых элементов обладает вычислительной мощностью логической схемы. Это была скорее теорема математической логики, чем инженерное изобретение, но именно она заложила саму идею — сеть из простых узлов, каждый из которых суммирует входы и сравнивает сумму с порогом.

Следующий важный шаг сделал психолог и нейрофизиолог Фрэнк Розенблатт (Frank Rosenblatt) полтора десятилетия спустя. В 1958 году в Корнеллской авиационной лаборатории он представил персептрон (perceptron) — первую модель искусственного нейрона, которая не просто вычисляла заранее заданную функцию, а умела обучаться: подстраивать веса связей на основе примеров, постепенно уменьшая число ошибок. Розенблатт продемонстрировал и физическое воплощение идеи — Mark I Perceptron, устройство с матрицей фотоэлементов на входе (имитирующей сетчатку глаза) и электромоторами, которые физически подкручивали резисторы, кодирующие веса связей, по мере обучения. Анонс произвёл настоящий фурор: газета New York Times в 1958 году процитировала слова о том, что перед публикой — "зародыш электронного компьютера, который, как ожидается, сможет ходить, говорить, видеть, писать, воспроизводить себя и осознавать собственное существование". Подробно об истории и устройстве самого персептрона — включая знаменитое ограничение, которое едва не похоронило всю область на десятилетие, — пойдёт речь уже в следующем уроке (327); сегодня важно другое: именно с анонса Розенблатта 1958 года понятие "обучающейся нейронной сети" вошло в общественное и научное сознание.

Между этими двумя вехами и современным глубоким обучением лежат десятилетия взлётов, разочарований ("зим искусственного интеллекта") и новых прорывов — алгоритм обратного распространения ошибки, ставший практичным в середине 1980-х, взрывной рост вычислительных мощностей и объёмов данных в 2000–2010-х, победа сети AlexNet в конкурсе распознавания изображений ImageNet в 2012 году, ознаменовавшая начало современной эры глубокого обучения. Каждая из этих вех заслуживает отдельного разговора, и в последующих уроках блока мы вернёмся к ним по мере того, как будем углубляться в устройство сетей. Но фундаментальная идея, с которой всё началось в 1943 и 1958 годах, — простой узел, суммирующий взвешенные входы и сравнивающий сумму с порогом, — не изменилась. Изменилось то, как эти узлы соединяют в сети, как их обучают и на каком масштабе данных и вычислений это делают.

Биологическое вдохновение: от нейрона к формуле

Интуиция

Название "нейронная сеть" — не маркетинговая метафора, а прямая отсылка к тому, с чего началось размышление МакКаллока и Питтса: к биологическому нейрону, базовой клетке нервной системы. Прежде чем переходить к формулам, полезно понять — очень упрощённо, — что происходит в настоящем нейроне, потому что именно эта картина стала исходным источником вдохновения для искусственной модели.

Биологический нейрон получает сигналы от других нейронов через дендриты — разветвлённые отростки, которые собирают электрохимические импульсы, поступающие через синапсы (точки контакта между нейронами). Каждый входящий сигнал имеет свою "силу" — она определяется тем, насколько эффективен конкретный синапс в передаче сигнала (это свойство синапса называется синаптической эффективностью или весом связи, и именно эта аналогия дала название "весам" в искусственной модели). Все сигналы, приходящие по разным дендритам, стекаются в тело клетки (сому), где они складываются, интегрируются в единый суммарный электрический потенциал. Если этот суммарный потенциал превышает некоторый порог возбуждения, нейрон "срабатывает" — генерирует электрический импульс (потенциал действия), который распространяется по аксону — длинному отростку — и передаётся дальше, другим нейронам, через их дендриты. Если порог не превышен, нейрон остаётся в состоянии покоя и ничего не передаёт дальше.

Здесь необходима сразу же важная оговорка, и лучше сделать её прямо сейчас, до того как мы перейдём к математике: современные искусственные нейронные сети не пытаются точно скопировать биологию. То, что описано выше, — это уже сильно упрощённая, "школьная" версия того, как на самом деле работает нейрон. Настоящий нейрон обрабатывает сигналы не одним числом, а сложной пространственно-временной динамикой электрических импульсов; в мозге человека около 86 миллиардов нейронов, и каждый из них образует в среднем тысячи синапсов с другими нейронами — связность, которую ни одна современная искусственная сеть даже отдалённо не воспроизводит по масштабу и структуре. Более того, никто до сих пор точно не знает, как мозг на самом деле "обучается" на биохимическом уровне — механизм, который мы разберём чуть ниже (градиентный спуск через обратное распространение ошибки), почти наверняка не имеет прямого биологического аналога: у мозга нет известного механизма, который бы вычислял градиент ошибки и "рассылал" его назад по сети связей так, как это делают искусственные сети. Связь между биологией и искусственными нейросетями — это связь вдохновения и грубой аналогии на уровне общей архитектурной идеи, а не связь инженерной копии и оригинала. Держи это в уме на протяжении всего блока: когда ты слышишь фразу "нейросеть работает как мозг", это красивое упрощение для популярной аудитории, а не техническое утверждение.

Формальное определение

Упрощённая биологическая модель нейрона (концептуальная, не формула). Нейрон получает набор входных сигналов через дендриты, каждый сигнал масштабируется силой соответствующего синапса; тело клетки суммирует (интегрирует) все входящие масштабированные сигналы в единый потенциал; если этот суммарный потенциал превышает порог возбуждения, нейрон генерирует импульс, который передаётся дальше по аксону к другим нейронам. Три стадии — сбор и масштабирование входов → суммирование → пороговое решение о передаче сигнала дальше — это ровно та абстрактная схема, которую в следующем разделе мы переведём на строгий язык математики.

Разбор примеров

Пример 1 (масштаб несовпадения — зачем нужна оговорка про упрощение). Возьми для сравнения небольшую искусственную сеть, которую мы построим ниже в этом уроке, — скажем, архитектуру с 784 входами, двумя скрытыми слоями по 128 и 64 нейрона и выходным слоем на 10 нейронов (мы вернёмся к этому конкретному примеру в разделе про архитектуру). Всего в такой сети около 109 тысяч обучаемых параметров — уже внушительное число по меркам "модели, которую можно посчитать на бумаге". Но человеческий мозг содержит порядка 86 миллиардов нейронов, а число синаптических связей между ними оценивается в диапазоне от 100 триллионов до нескольких сотен триллионов — на много порядков больше, чем в любой практически используемой сегодня искусственной сети. Даже самые крупные современные модели с сотнями миллиардов параметров остаются на несколько порядков меньше связности одного человеческого мозга. Разрыв в масштабе — ещё одна причина не относиться к фразе "нейросеть как мозг" буквально.

Пример 2 (почему упрощение всё равно оказалось полезным). Хотя настоящий нейрон работает несравнимо сложнее — с непрерывной динамикой мембранного потенциала во времени, с десятками типов нейромедиаторов, с влиянием соседних глиальных клеток, — упрощённая модель "взвешенная сумма плюс порог" оказалась невероятно полезной именно потому, что она дифференцируема и её можно оптимизировать математически. Биологический нейрон не оптимизируется градиентным спуском — эволюция и синаптическая пластичность работают совершенно иными, куда более медленными и запутанными механизмами. Искусственный нейрон, наоборот, специально спроектирован так, чтобы каждый его параметр можно было бы подстроить, вычислив производную функции ошибки по этому параметру, — то есть тем самым методом, который ты изучал в блоке оптимизации курса (уроки 285, 293). Отказ от биологической точности в пользу математической управляемости — не недостаток, а сознательный инженерный выбор, который и сделал глубокое обучение практически применимым.

Пример 3 (что осталось от биологии в языке предметной области). Несмотря на то что искусственная модель — это лишь грубая аналогия, из биологии в терминологию нейросетей перешло довольно много слов, и полезно сразу зафиксировать словарь на будущее: "вес" (weight) — аналог силы синапса; "активация" нейрона — аналог того, сработал нейрон или нет; "слой" сети — очень условный аналог групп нейронов, обрабатывающих информацию на схожем "уровне"; сама область называется "нейронными сетями", хотя точнее было бы называть их "сетями узлов, вдохновлённых упрощённой моделью нейрона". Эта терминология останется с тобой на весь блок Deep Learning, и полезно с самого начала понимать, откуда она взялась и что в ней метафора, а что — строгая математика.

Почему это важно

Понимание того, что искусственная нейронная сеть — это инженерная абстракция, вдохновлённая биологией, но не копирующая её, задаёт правильные ожидания на весь блок курса. Это избавляет от двух противоположных заблуждений сразу: от переоценки нейросетей ("они думают как человеческий мозг, значит скоро станут разумными в человеческом смысле") и от недооценки строгости модели ("это же просто грубая аналогия с биологией, значит там нет настоящей математики"). На самом деле всё наоборот: чем дальше мы уходим от расплывчатой биологической метафоры к точным формулам в следующем разделе, тем понятнее становится, почему нейросети работают, — и вся сила метода в этой самой математической строгости, а вовсе не в сходстве с живым мозгом.

Искусственный нейрон: математическая модель

Интуиция

Переведём трёхстадийную биологическую схему — "собрать входы с учётом их значимости → просуммировать → принять пороговое решение" — на язык, которым ты уже свободно владеешь после уроков про линейную и логистическую регрессию. У искусственного нейрона есть набор числовых входов $x_1, x_2, \dots, x_n$ — это те самые признаки объекта, с которыми ты работал весь курс, начиная с урока про конструирование признаков (feature engineering, урок 325). Каждому входу соответствует число, отражающее его значимость, — вес $w_i$, прямой аналог "силы синапса". Нейрон умножает каждый вход на соответствующий вес и складывает результаты — это и есть "сбор и суммирование сигналов" тела клетки, переведённые на язык арифметики. К сумме добавляется ещё одно число — смещение (bias) $b$, которое сдвигает порог срабатывания и не зависит ни от одного входа напрямую. Наконец, получившееся число пропускается через функцию активации $f$, которая играет роль "порогового решения": решает, насколько сильно нейрон "отзывается" на данную комбинацию входов.

Если это описание кажется знакомым — это неслучайно. Взвешенная сумма входов плюс смещение, $z = w^\top x + b$, — это в точности та же формула, которую ты уже считал вручную в уроке про линейную регрессию (310) и уроке про логистическую регрессию (313), только там она называлась "предсказанием" или "логитом". Искусственный нейрон не изобретает новую арифметику — он берёт ту самую линейную комбинацию признаков, которую ты уже прекрасно знаешь, и добавляет к ней один дополнительный шаг: нелинейное преобразование через функцию активации. Именно этот шаг мы подробно разберём в следующем разделе; сейчас важно зафиксировать саму структуру нейрона.

Формальное определение

Искусственный нейрон. Пусть на вход подан вектор признаков $x = (x_1, x_2, \dots, x_n)$. Нейрон вычисляет взвешенную сумму входов со смещением — логит, или предактивацию:

$$z = w_1 x_1 + w_2 x_2 + \dots + w_n x_n + b = w^\top x + b$$

где $w = (w_1, \dots, w_n)$ — вектор обучаемых весов, а $b$ — обучаемое смещение. Затем логит пропускается через функцию активации $f$, дающую итоговый выход нейрона (активацию):

$$a = f(z) = f(w^\top x + b)$$

Веса $w$ и смещение $b$ — это ровно те параметры, которые подбираются в процессе обучения; сам вход $x$ и выбор функции $f$ фиксированы заранее (архитектурные решения).

Разбор примеров

Пример 1 (вычисление одного нейрона вручную). Пусть нейрон получает на вход $x = (2, 3)$, веса $w = (0{,}5,\ -1)$, смещение $b = 1$, а активация — сигмоида $\sigma(z) = 1/(1+e^{-z})$ из урока 313. Считаем логит: $z = 0{,}5\cdot2 + (-1)\cdot3 + 1 = 1 - 3 + 1 = -1$. Применяем активацию: $a = \sigma(-1) = 1/(1+e^{1}) \approx 1/(1+2{,}718) \approx 0{,}269$. Ровно так же, шаг за шагом, ты считал вероятность в уроке 313 — единственное отличие в том, что там результат назывался "предсказанной вероятностью", а здесь — "выходом (активацией) нейрона". Это одна и та же арифметика под разными именами.

Пример 2 (нейрон с активацией-тождеством — это линейная регрессия). Возьми один вход $x_1$, вес $w_1$, смещение $b$, и в качестве функции активации выбери тождественную функцию $f(z) = z$ (то есть буквально никакого преобразования). Тогда $a = f(w_1 x_1 + b) = w_1 x_1 + b$ — это в точности формула линейной регрессии с одним признаком из урока 310, $y = w_1 x_1 + b$. Один искусственный нейрон с линейной активацией — это не "похоже на" линейную регрессию, это она и есть, записанная другими словами.

Пример 3 (нейрон с сигмоидой — это логистическая регрессия). Возьми вектор входов $x$, веса $w$, смещение $b$, и в качестве $f$ выбери сигмоиду $\sigma$. Тогда $a = \sigma(w^\top x + b)$ — это ровно формальное определение логистической регрессии из урока 313, $p = \sigma(w^\top x + b)$. Обученный на данных с кросс-энтропией (тот же принцип, что в уроке 313), такой нейрон — это законченная модель бинарной классификации, ничем не отличающаяся от той, которую ты уже строил на sklearn. Разница появится только тогда, когда мы соединим много таких нейронов в слои, — а до тех пор один нейрон с сигмоидой и один вызов LogisticRegression() вычисляют одну и ту же функцию.

Почему это важно

То, что ты, возможно, ожидал увидеть как совершенно новую тему, на поверку оказывается частным случаем уже знакомой математики: линейная регрессия — это нейрон с линейной активацией, логистическая регрессия — это нейрон с сигмоидой. Это не совпадение и не педагогическая натяжка — это прямое устройство предмета: нейронная сеть — это способ комбинировать много таких моделей одновременно, обучая их все совместно на общую задачу. Понимание одного нейрона как обобщения уже известных моделей — это тот самый мост, по которому весь классический ML-фундамент курса переносится прямиком в глубокое обучение.

Почему без нелинейности сеть не работает

Интуиция

Раз один нейрон с линейной активацией — это просто линейная регрессия, возникает соблазнительная идея: что, если сложить много таких нейронов в несколько слоёв? Может быть, увеличивая число слоёв, можно получить сколь угодно сложную модель — даже не задумываясь о выборе функции активации, просто складывая линейные преобразования одно за другим? Интуиция подсказывает, что "больше слоёв" должно означать "мощнее модель". Но здесь кроется одна из самых важных и одновременно самых недооценённых истин глубокого обучения: если на каждом слое использовать только линейное (или вовсе никакое) преобразование, то сколько бы слоёв ты ни добавил — хоть десять, хоть тысячу, — итоговая сеть будет вычислять ровно ту же самую функцию, что и один-единственный линейный слой. Глубина без нелинейности — иллюзия сложности, за которой не стоит никакой дополнительной вычислительной мощности.

Покажем это строго, а не на словах, — ровно так, как в курсе принято доказывать утверждения, а не принимать их на веру.

Доказательство

Композиция линейных слоёв остаётся линейной. Пусть на вход подан вектор $x$, и есть $L$ слоёв, каждый из которых применяет только линейное преобразование (матрица весов $W^{(l)}$ и вектор смещения $b^{(l)}$, без всякой нелинейности):

$$z^{(1)} = W^{(1)} x + b^{(1)}, \qquad z^{(2)} = W^{(2)} z^{(1)} + b^{(2)}, \qquad \dots, \qquad z^{(L)} = W^{(L)} z^{(L-1)} + b^{(L)}$$

Подставим первое выражение во второе:

$$z^{(2)} = W^{(2)}\bigl(W^{(1)} x + b^{(1)}\bigr) + b^{(2)} = \bigl(W^{(2)} W^{(1)}\bigr) x + \bigl(W^{(2)} b^{(1)} + b^{(2)}\bigr) = W' x + b'$$

где $W' = W^{(2)} W^{(1)}$ и $b' = W^{(2)} b^{(1)} + b^{(2)}$ — снова линейная (точнее, аффинная) функция от $x$, той же самой формы, что и один слой. По индукции это верно для любого числа слоёв $L$: как бы глубоко ни была устроена сеть, если ни на одном слое нет нелинейности, вся сеть целиком эквивалентна одному-единственному линейному слою $z^{(L)} = W_{\text{эфф}}\, x + b_{\text{эфф}}$ с некоторой эффективной матрицей весов и смещением, которые можно заранее перемножить и сложить.

Разбор примеров

Пример 1 (числовая проверка коллапса двух слоёв в один). Пусть $x = (2, 3)$, первый слой $W^{(1)} = \begin{pmatrix}1 & 2\\ 0 & 1\end{pmatrix}$, $b^{(1)} = (1, -1)$, второй слой $W^{(2)} = \begin{pmatrix}2 & 0\\ 1 & 1\end{pmatrix}$, $b^{(2)} = (0, 2)$, обе активации — тождественные. Считаем шаг за шагом: $z^{(1)} = W^{(1)} x + b^{(1)} = (1\cdot2+2\cdot3,\ 0\cdot2+1\cdot3) + (1,-1) = (8,3)+(1,-1) = (9, 2)$. Затем $z^{(2)} = W^{(2)} z^{(1)} + b^{(2)} = (2\cdot9+0\cdot2,\ 1\cdot9+1\cdot2) + (0,2) = (18,11)+(0,2) = (18, 13)$. Теперь посчитаем эффективные параметры по формуле доказательства: $W' = W^{(2)}W^{(1)} = \begin{pmatrix}2&0\\1&1\end{pmatrix}\begin{pmatrix}1&2\\0&1\end{pmatrix} = \begin{pmatrix}2&4\\1&3\end{pmatrix}$, $b' = W^{(2)}b^{(1)}+b^{(2)} = (2\cdot1+0\cdot(-1),\ 1\cdot1+1\cdot(-1)) + (0,2) = (2,0)+(0,2) = (2,2)$. Проверка одним шагом: $W'x+b' = \begin{pmatrix}2&4\\1&3\end{pmatrix}\begin{pmatrix}2\\3\end{pmatrix}+(2,2) = (2\cdot2+4\cdot3,\ 1\cdot2+3\cdot3)+(2,2) = (16,11)+(2,2) = (18,13)$. Результат совпал с двухшаговым вычислением до последней цифры — два линейных слоя действительно эквивалентны одному, независимо от того, насколько сложными кажутся промежуточные матрицы.

Пример 2 (XOR — задача, которую линейная сеть не решит ни при какой глубине). Возьмём классическую задачу "исключающее ИЛИ" (XOR): два бинарных входа $x_1, x_2 \in \{0,1\}$, целевое значение $y=1$, если $x_1 \ne x_2$, и $y=0$, если $x_1 = x_2$ — те же четыре точки $(0,0)\to0$, $(0,1)\to1$, $(1,0)\to1$, $(1,1)\to0$, которые ты уже встречал в уроке 318 в контексте того, почему дереву решений с глубиной 1 не хватает мощности отделить эти точки друг от друга. По доказательству выше, сеть из линейных слоёв любой глубины эквивалентна одному линейному слою — а один линейный нейрон (в точности как в логистической регрессии, урок 313, задание 27) может провести только линейную разделяющую границу, прямую линию на плоскости $(x_1, x_2)$. Но точки $(0,0)$ и $(1,1)$ (класс 0) и точки $(0,1)$ и $(1,0)$ (класс 1) расположены так, что никакая прямая линия не может отделить их друг от друга — они физически перемешаны на плоскости. Сколько бы линейных слоёв ни поставить друг за другом, результат остаётся одной и той же прямой линией, и XOR остаётся нерешаемым — не потому что не хватило слоёв, а потому что нелинейности не было вовсе.

Пример 3 (та же задача — решается двумя нейронами с нелинейной активацией). Добавим единственный скрытый слой из двух нейронов с пороговой (ступенчатой) активацией $f(z) = 1$, если $z > 0$, и $f(z)=0$ иначе — простейшая возможная нелинейность. Первый скрытый нейрон с весами $w=(1,1)$, $b=-0{,}5$ вычисляет фактически "ИЛИ": для $(0,0)$ логит $-0{,}5 \to 0$; для $(0,1)$ и $(1,0)$ логит $0{,}5 \to 1$; для $(1,1)$ логит $1{,}5 \to 1$. Второй скрытый нейрон с весами $w=(1,1)$, $b=-1{,}5$ вычисляет "И": для $(1,1)$ логит $0{,}5 \to 1$, для всех остальных трёх точек логит отрицательный $\to 0$. Выходной нейрон с весами $(1, -1)$ по выходам этих двух скрытых нейронов и смещением $-0{,}5$ вычисляет "первый скрытый нейрон сработал, а второй — нет": для $(0,0)$ — $h_1{=}0,\,h_2{=}0 \Rightarrow z=-0{,}5 \to 0$ (верно); для $(0,1)$ и $(1,0)$ — $h_1{=}1,\,h_2{=}0 \Rightarrow z=0{,}5 \to 1$ (верно); для $(1,1)$ — $h_1{=}1,\,h_2{=}1 \Rightarrow z=-0{,}5 \to 0$ (верно). Всего два нейрона и одна нелинейность — и задача, недоступная линейной сети любой глубины, решена точно на всех четырёх точках.

Почему это важно

Это, пожалуй, самый концептуально важный факт всего вводного урока блока: глубина сети сама по себе ничего не даёт без нелинейной функции активации на каждом скрытом слое. Именно нелинейность — а не число слоёв само по себе — превращает нейронную сеть из переусложнённой записи линейной регрессии в модель, способную выучивать сколь угодно сложные зависимости (при достаточной ширине и глубине сеть с нелинейными активациями способна приблизить практически любую непрерывную функцию — это утверждение известно как теорема универсальной аппроксимации, и мы вернёмся к ней подробнее в одном из следующих уроков блока). Выбор конкретной функции активации — сигмоида, гиперболический тангенс, ReLU и её варианты — станет темой отдельного урока 329 этого блока; сегодня же важно зафиксировать сам принцип: без нелинейности сеть из любого числа слоёв не может выучить ничего сложнее линейной регрессии, и именно поэтому функция активации — не опциональная деталь, а обязательный компонент каждого скрытого слоя.

Слои и архитектура сети

Интуиция

Один нейрон — даже с нелинейной активацией — ограничен: он может провести лишь одну разделяющую границу определённой формы (для линейной комбинации внутри — гиперплоскость, как в логистической регрессии, урок 313). Чтобы получить XOR-пример из предыдущего раздела, потребовалось уже два нейрона, объединённых в промежуточный (скрытый) слой, и третий нейрон, комбинирующий их выходы. Эта идея масштабируется: нейронная сеть — это множество нейронов, организованных в последовательные слои, где выход каждого слоя становится входом следующего.

Стандартная терминология выделяет три типа слоёв. Входной слой (input layer) не выполняет вычислений — это просто способ подать признаки объекта $x$ в сеть, число "нейронов" входного слоя равно числу признаков. Скрытые слои (hidden layers) — один или несколько слоёв между входом и выходом, где происходит вся содержательная обработка: каждый нейрон скрытого слоя вычисляет взвешенную сумму выходов предыдущего слоя, добавляет смещение и применяет нелинейную активацию. Выходной слой (output layer) выдаёт финальный ответ сети — один нейрон с сигмоидой для бинарной классификации (в точности логистическая регрессия урока 313 поверх признаков, которые сеть выучила сама), $K$ нейронов с softmax для классификации на $K$ классов (в точности многоклассовая логистическая регрессия того же урока 313), или один нейрон без активации (либо с тождественной активацией) для задачи регрессии (в точности линейная регрессия урока 310, только опять же поверх выученных признаков). Слово "глубокое" в "глубоком обучении" (deep learning) означает именно наличие нескольких скрытых слоёв — чем их больше, тем "глубже" сеть.

Формальное определение

Слой как матричная операция. Пусть $a^{(0)} = x$ — вектор входных признаков. Каждый следующий слой $l = 1, \dots, L$ вычисляется как

$$a^{(l)} = f^{(l)}\!\left(W^{(l)} a^{(l-1)} + b^{(l)}\right)$$

где $W^{(l)}$ — матрица весов слоя $l$ (строка $j$ этой матрицы — веса $j$-го нейрона слоя, применённые ко всем выходам предыдущего слоя), $b^{(l)}$ — вектор смещений нейронов слоя, а $f^{(l)}$ — функция активации, применяемая к каждой координате поэлементно. Вся сеть — это композиция таких слоёв, $a^{(L)} = f^{(L)}\bigl(W^{(L)} \dots f^{(1)}(W^{(1)}x+b^{(1)})\dots + b^{(L)}\bigr)$, где $a^{(L)}$ — итоговое предсказание сети. Именно из-за нелинейности $f^{(l)}$ на промежуточных слоях эта композиция не сворачивается в один линейный слой, в отличие от того, что мы доказали в предыдущем разделе для чисто линейного случая.

Разбор примеров

Пример 1 (полный прямой проход по маленькой сети). Рассмотрим сеть: входной слой из 2 признаков, скрытый слой из 2 нейронов с активацией ReLU ($f(z)=\max(0,z)$), выходной слой из 1 нейрона с сигмоидой. Пусть $x=(1,2)$, веса скрытого слоя $W^{(1)}=\begin{pmatrix}0{,}5 & -1\\ 1 & 1\end{pmatrix}$, $b^{(1)}=(0,-1)$. Логиты скрытого слоя: первая строка $0{,}5\cdot1+(-1)\cdot2+0=-1{,}5$; вторая строка $1\cdot1+1\cdot2-1=2$. Значит $z^{(1)}=(-1{,}5,\ 2)$. Применяем ReLU: $a^{(1)}=(\max(0,-1{,}5),\ \max(0,2))=(0,\ 2)$ — первый скрытый нейрон "не сработал" (обнулился), второй — сработал со значением 2. Веса выходного слоя $W^{(2)}=(2,\ 0{,}5)$, $b^{(2)}=-1$: $z^{(2)} = 2\cdot0 + 0{,}5\cdot2 + (-1) = 0+1-1=0$. Финальная активация — сигмоида: $a^{(2)} = \sigma(0) = 0{,}5$. Сеть предсказала вероятность ровно $0{,}5$ — на границе принятия решения; вся процедура — это последовательность из двух шагов "матрица на вектор плюс смещение, затем поэлементная нелинейность", ничего сверх того.

Пример 2 (счёт параметров — сеть для распознавания цифр). Рассмотрим архитектуру, характерную для задачи распознавания рукописных цифр (изображение $28\times28$ пикселей, развёрнутое в вектор из 784 чисел): входной слой 784, первый скрытый слой 128 нейронов, второй скрытый слой 64 нейрона, выходной слой 10 нейронов (по числу цифр от 0 до 9, с softmax). Число обучаемых параметров каждого слоя — это число весов (произведение размеров соседних слоёв) плюс число смещений (равное числу нейронов текущего слоя). Первый слой: $784\times128 = 100\,352$ веса плюс $128$ смещений — итого $100\,480$. Второй слой: $128\times64=8\,192$ веса плюс $64$ смещения — итого $8\,256$. Третий (выходной) слой: $64\times10=640$ весов плюс $10$ смещений — итого $650$. Суммарно: $100\,480+8\,256+650 = 109\,386$ обучаемых параметров — и это ещё довольно скромная по современным меркам сеть. Именно про подбор всех этих 109 тысяч чисел одновременно градиентным спуском пойдёт речь в уроке про обратное распространение ошибки (330); сегодня достаточно увидеть, откуда берётся само это число.

Пример 3 (архитектура как матричная алгебра, а не абстракция). Обрати внимание, что вся формула слоя, $a^{(l)} = f^{(l)}(W^{(l)} a^{(l-1)} + b^{(l)})$, — это буквально то же умножение матрицы на вектор с последующим сложением векторов, которое разбиралось в курсе линейной алгебры. Именно поэтому нейронные сети так естественно и эффективно обучаются на графических процессорах (GPU): GPU изначально проектировались для параллельной обработки массивов чисел (изначально — для рендеринга графики), а умножение матриц — ровно та операция, которую GPU выполняет параллельно на тысячах ядер одновременно, вместо последовательного перебора элементов один за другим на CPU. Библиотеки вроде NumPy, PyTorch или TensorFlow позволяют записать прямой проход из примера 1 буквально в несколько строк:

import numpy as np

def relu(z):
    return np.maximum(0, z)

def sigmoid(z):
    return 1 / (1 + np.exp(-z))

x = np.array([1, 2])
W1 = np.array([[0.5, -1], [1, 1]])
b1 = np.array([0, -1])
W2 = np.array([2, 0.5])
b2 = -1

a1 = relu(W1 @ x + b1)          # скрытый слой: [0, 2]
z2 = W2 @ a1 + b2               # выходной логит: 0
a2 = sigmoid(z2)                # финальный выход: 0.5

Это не псевдокод "для понимания" — это практически дословно то, что происходит внутри keras.Sequential или torch.nn.Linear, только записанное явно, без обёртки библиотеки. К этим инструментам мы вернёмся подробно в следующих уроках блока.

Почему это важно

Организация нейронов в слои — не произвольное архитектурное решение, а прямое следствие того, что один нейрон ограничен в выразительной способности, а последовательность нелинейных преобразований — нет. Понимание слоя как операции "матрица × вектор + вектор, затем поэлементная нелинейность" сразу даёт три практических следствия: во-первых, число параметров сети растёт как произведение размеров соседних слоёв, а не как их сумма, — отсюда быстрый рост числа параметров с ростом ширины сети; во-вторых, вычисления внутри сети идеально ложатся на параллельные вычисления GPU именно потому, что это матричная алгебра; в-третьих, "глубина" и "ширина" сети — два независимых архитектурных рычага (число слоёв и число нейронов в каждом слое), выбор которых определяет, какие функции сеть в принципе способна выучить, — с этим напрямую связана тема следующего раздела.

Иерархия признаков: от рёбер к объектам

Интуиция

До сих пор мы говорили о нейронной сети как об одной формуле, которая пропускает вход через последовательность матричных операций и нелинейностей. Но у многослойности есть содержательный смысл, выходящий за рамки чистой математики: каждый слой сети строит новое представление данных на основе представления, выданного предыдущим слоем, и эти представления с глубиной становятся всё более абстрактными. Это прямое продолжение идеи конструирования признаков из урока 325 — только там ты вручную придумывал и кодировал новые признаки (час дня, отношение этажа к общему числу этажей, средний интервал между покупками), а здесь сеть придумывает такие признаки сама, подбирая веса каждого слоя градиентным спуском так, чтобы итоговое предсказание было как можно точнее.

Лучше всего эта идея иллюстрируется на примере распознавания изображений — исторически первой и самой наглядной области триумфа глубокого обучения. Если подавать в сеть исходные пиксели фотографии и анализировать, на что реагируют нейроны разных слоёв уже обученной сети, обнаруживается устойчивая закономерность. Нейроны самого первого скрытого слоя, ближайшего ко входу, реагируют на предельно простые локальные паттерны — перепады яркости в определённом направлении, то есть, грубо говоря, края и грани объектов на разной ориентации. Нейроны следующего слоя комбинируют выходы первого слоя и начинают реагировать на чуть более сложные структуры — простые формы: углы, изгибы, простые текстуры, составленные из комбинаций краёв разной ориентации. Ещё через слой нейроны реагируют уже на комбинации форм, складывающиеся в узнаваемые части объектов — глаз, колесо, оконная рама. И, наконец, самые глубокие слои, ближе к выходу, комбинируют части в целые объекты — лицо, автомобиль, здание. Каждый слой не изобретает эту иерархию по чьей-то явной инструкции — он выучивает её самостоятельно, потому что именно такая иерархическая организация признаков оказывается наиболее полезной для минимизации итоговой ошибки предсказания.

Формальное определение

Иерархическое представление признаков. Композиция слоёв $a^{(L)} = f^{(L)}\bigl(W^{(L)}\, f^{(L-1)}(\dots f^{(1)}(W^{(1)}x+b^{(1)}) \dots)+b^{(L)}\bigr)$ означает, что представление данных на слое $l$, вектор $a^{(l)}$, — это нелинейная функция представления на слое $l{-}1$, а не исходного входа $x$ напрямую. Каждый дополнительный слой добавляет ещё один уровень нелинейной композиции, и при обучении на данных, обладающих естественной композиционной структурой (простые локальные паттерны комбинируются в более сложные, более глобальные), ранние слои сети склонны выучивать признаки, специфичные для низкоуровневых, локальных закономерностей входа, а поздние слои — признаки, специфичные для высокоуровневых, глобальных, задаче-ориентированных закономерностей.

Разбор примеров

Пример 1 (визуализация иерархии на реальных свёрточных сетях). Одна из самых наглядных иллюстраций этого явления — работа Мэттью Зейлера и Роба Фергюса 2014 года (Zeiler & Fergus, "Visualizing and Understanding Convolutional Networks"), в которой авторы разработали технику, позволяющую увидеть, на какие именно визуальные паттерны реагирует каждый нейрон обученной сети для распознавания изображений. Результат оказался поразительно устойчивым: нейроны первого слоя реагировали на простые цветовые градиенты и края разной ориентации — почти неотличимо от классических фильтров выделения краёв, известных в компьютерном зрении задолго до нейросетей; нейроны второго-третьего слоёв реагировали на текстуры, сетки, простые повторяющиеся узоры; нейроны средних слоёв — уже на части объектов (колёса, мех животных, оконные решётки); а нейроны последних слоёв, ближе к выходу, реагировали на целые узнаваемые категории объектов — собак определённой породы, лица, клавиатуры. Подробнее об этих архитектурах и о том, как именно устроен свёрточный слой, который делает такую визуализацию возможной, — в уроке 335 и последующих этого блока; сегодняшний пример показывает, что иерархия признаков — не гипотетическая идея, а экспериментально подтверждённый и многократно воспроизведённый факт.

Пример 2 (иерархия против ручного конструирования признаков урока 325). Вспомни, как в уроке 325 для предсказания цены квартиры ты вручную создавал признак is_top_floor (последний ли этаж) или floor_ratio (отношение этажа к общему числу этажей) — потому что ты, как человек с доменным знанием, догадывался, что эти комбинации исходных признаков полезны для предсказания. Нейронная сеть, обучаемая на сырых, необработанных данных (в пределе — на сырых пикселях изображения), выполняет концептуально ту же самую работу — конструирует новые, более информативные признаки из исходных, — но делает это автоматически, находя такие комбинации, которые минимизируют функцию потерь, вместо того чтобы полагаться на догадку человека. Это не значит, что конструирование признаков становится бесполезным навыком — на табличных данных, как показал урок 318 про градиентный бустинг, хорошо спроектированные вручную признаки часто всё ещё дают преимущество, — но в задачах вроде распознавания изображений, речи или естественного языка, где сырые данные (пиксели, звуковые волны, символы текста) сами по себе почти неинтерпретируемы напрямую человеком, способность сети выучить иерархию признаков самостоятельно оказалась революционной.

Пример 3 (та же идея за пределами изображений — текст). Иерархическая организация признаков — не специфика зрения, а общее свойство глубоких сетей, обученных на структурированных, композиционных данных. В задачах обработки текста ранние слои сети, работающей с последовательностью символов или отдельных слов, как правило выучивают представления, чувствительные к морфологии и локальному контексту — окончаниям слов, простым словосочетаниям; более глубокие слои начинают отражать синтаксическую структуру предложения — какие слова являются подлежащим, какие — сказуемым; самые глубокие слои современных языковых моделей оперируют уже представлениями, отражающими смысл целых фраз и отношения между идеями в тексте. Мы подробно вернёмся к архитектурам для текста и последовательностей дальше в этом блоке курса, но сама закономерность — простое в начале, сложное и абстрактное в конце — universal-паттерн глубокого обучения, не привязанный к конкретному типу данных.

Почему это важно

Иерархия признаков — это, пожалуй, главная содержательная причина, по которой глубокое обучение вытеснило классическое машинное обучение в задачах, где данные плохо поддаются ручному конструированию признаков: изображения, звук, необработанный текст. Вместо того чтобы человеку-эксперту догадываться, какие именно комбинации пикселей полезны для распознавания кошки на фотографии (задача практически неподъёмная вручную — попробуй явно описать формулой, чем отличается ухо кошки от уха собаки на уровне значений пикселей), достаточно предоставить сети достаточно данных, достаточно слоёв и достаточно вычислительных ресурсов — и она построит подходящую иерархию признаков сама, управляемая единственным сигналом: минимизацией ошибки предсказания. Именно эта идея — глубина как механизм автоматического построения всё более абстрактных признаков, а не просто "больше параметров ради большей мощности", — станет центральной темой всего дальнейшего блока курса, от многослойных сетей (328) до сверточных архитектур для изображений (335 и далее).

Практика: 30 заданий

Базовые задания (1–10)

Задание 1: Нейрон получает вход $x=(1, 4)$, веса $w=(2, 0{,}5)$, смещение $b=-3$. Найди логит $z = w^\top x + b$.


Задание 2: Для нейрона из задания 1 (логит $z=1$) найди активацию, если функция активации — сигмоида $\sigma(z)=1/(1+e^{-z})$.


Задание 3: Нейрон с логитом $z=-2$ использует активацию ReLU, $f(z)=\max(0,z)$. Найди выход нейрона.


Задание 4: Нейрон с логитом $z=3{,}5$ использует активацию ReLU. Найди выход нейрона.


Задание 5 (МО): Нейрон использует тождественную функцию активации $f(z)=z$, единственный вход $x_1$, вес $w_1=3$, смещение $b=2$. Какой уже известной тебе модели эквивалентен этот нейрон?


Задание 6 (МО): Нейрон использует сигмоиду как активацию и обучается на данных бинарной классификации минимизацией кросс-энтропии. Какой уже известной тебе модели эквивалентен этот нейрон?


Задание 7: Перечисли три типа слоёв нейронной сети и одной фразой опиши роль каждого.


Задание 8: Сеть без единой нелинейной функции активации состоит из пяти линейных слоёв. Эквивалентна ли она одному линейному слою?


Задание 9: В скрытом слое сети 5 нейронов, на вход слою подаётся вектор из 3 признаков. Сколько весов (без учёта смещений) в этом слое?


Задание 10 (МО): Дендриты, тело клетки и аксон биологического нейрона соответствуют каким трём компонентам искусственного нейрона?

Средние задания (11–20)

Задание 11: Нейрон с входом $x=(2,-1,3)$, весами $w=(1,2,-1)$ и смещением $b=0{,}5$ использует сигмоиду. Найди логит $z$ и выход $a$.


Задание 12: Два линейных слоя: $W^{(1)}=\begin{pmatrix}1&0\\1&1\end{pmatrix}$, $b^{(1)}=(0,1)$, $W^{(2)}=\begin{pmatrix}1&1\end{pmatrix}$, $b^{(2)}=-1$, оба без нелинейности. Найди эффективные $W'$ и $b'$ композиции этих двух слоёв.


Задание 13: Используя результат задания 12, проверь эквивалентность на конкретном входе $x=(2,3)$: посчитай выход двумя способами — послойно и через эффективные $W',b'$.


Задание 14 (МО): Объясни, почему сеть из десяти слоёв с активацией ReLU на каждом слое не сворачивается в один линейный слой, в отличие от примеров 12–13.


Задание 15: Скрытый слой сети получает на вход 10 признаков и состоит из 20 нейронов; следующий (выходной) слой состоит из 3 нейронов. Посчитай общее число обучаемых параметров сети (веса и смещения обоих слоёв).


Задание 16: Реши задачу "ИЛИ" ($x_1,x_2\in\{0,1\}$, $y=1$, если хотя бы один вход равен 1, иначе $y=0$) одним нейроном с пороговой активацией $f(z)=1$, если $z>0$, иначе $0$. Подбери веса $w_1,w_2$ и смещение $b$.


Задание 17 (МО): Объясни, почему задачу из задания 16 можно решить одним нейроном, а задачу XOR из раздела про нелинейность — нельзя, независимо от подбора весов одного нейрона.


Задание 18: Сеть: входной слой 4 признака, скрытый слой 6 нейронов с ReLU, выходной слой 2 нейрона с softmax. Дан вход после скрытого слоя $a^{(1)}=(0, 2, 0, 1, 3, 0)$ (после ReLU часть нейронов уже обнулилась). Веса выходного слоя $W^{(2)}=\begin{pmatrix}1&0&1&0&1&0\\0&1&0&1&0&1\end{pmatrix}$, $b^{(2)}=(0,0)$. Найди логиты выходного слоя.


Задание 19: Используя результат задания 18 ($z=(3,3)$), примени softmax и найди вероятности обоих классов.


Задание 20 (МО): В сети для распознавания изображений нейроны первого скрытого слоя реагируют на края и градиенты яркости, а нейроны последнего скрытого слоя — на целые объекты. Опиши, что, скорее всего, "видят" нейроны слоя посередине.

Продвинутые задания (21–30)

Задание 21: Для трёх линейных слоёв ($f=$ тождество на всех) с $W^{(1)}=\begin{pmatrix}2&0\\0&1\end{pmatrix}$, $b^{(1)}=(1,0)$, $W^{(2)}=\begin{pmatrix}1&1\\0&2\end{pmatrix}$, $b^{(2)}=(0,-1)$, $W^{(3)}=\begin{pmatrix}1&0\end{pmatrix}$, $b^{(3)}=0$, найди эффективные $W'$ и $b'$ всей композиции.


Задание 22: Датасет для задачи "И" ($x_1,x_2\in\{0,1\}$, $y=1$ только для $(1,1)$) и датасет XOR имеют одинаковое число точек каждого класса (по 2 точки в каждом классе для сбалансированного варианта, если считать $y{=}1$ у "И" только одну точку — рассмотри вместо этого признак линейной разделимости). Объясни формально, почему "И" линейно разделима, а XOR — нет, через понятие выпуклой оболочки точек одного класса.


Задание 23 (МО): Сеть с одним скрытым слоем из 100 нейронов и линейной (тождественной) активацией на этом скрытом слое, но с нелинейной активацией только на выходном слое. Является ли такая сеть более выразительной, чем один нейрон с той же выходной нелинейностью, применённой напрямую к исходным признакам?


Задание 24: Реши задачу XOR альтернативным набором весов, отличным от примера в уроке: используй скрытые нейроны "НЕ И" (NAND) и "ИЛИ" вместо "ИЛИ" и "И". Подбери веса и проверь на всех четырёх точках.


Задание 25: Архитектура 512-256-128-64-1 (регрессия, один выходной нейрон без активации). Посчитай общее число обучаемых параметров всей сети.


Задание 26 (МО): Объясни разницу между "шириной" и "глубиной" сети и приведи по одному примеру, как изменение каждого из этих параметров влияет на выразительную способность (независимо от типа функции активации).


Задание 27: Дан скрытый слой с активацией сигмоида. При каком условии на веса этого слоя выход одного конкретного нейрона слоя окажется приблизительно равен линейной функции от входа в узком диапазоне значений логита?


Задание 28: Сеть-классификатор на 4 класса использует выходной слой из 4 нейронов с softmax. Логиты $z=(2, 2, 2, 2)$ (все одинаковые). Чему равна каждая из четырёх вероятностей и почему это иллюстрирует "нейтральное" состояние сети до обучения?


Задание 29: Объясни, почему предсказание сети из одного линейного слоя на $n$ признаках и предсказание сети из десяти линейных слоёв на тех же $n$ признаках обучаются к одному и тому же итоговому пространству возможных функций, несмотря на то что во втором случае обучаемых параметров формально гораздо больше.


Задание 30 (МО): Своими словами, опираясь на весь материал урока, объясни, почему фраза "нейросеть работает как мозг человека" технически неточна, но при этом сама идея искусственного нейрона всё равно оказалась чрезвычайно продуктивной.

Частые ошибки

Ошибка 1. Считают, что нейронные сети буквально симулируют работу человеческого мозга и "думают" так же, как человек.

Как выглядит: утверждения вроде "нейросеть распознала кота, потому что подумала как человек" или ожидание, что более глубокая сеть автоматически станет "разумной" в человеческом смысле, если добавить достаточно слоёв.

Почему возникает: название "нейронная сеть" и биологическая метафора из раздела про дендриты, тело клетки и аксон создают впечатление технической, а не вдохновляющей аналогии.

Как правильно: искусственный нейрон — предельно упрощённая математическая абстракция (взвешенная сумма плюс нелинейность), а не работающая модель биологического нейрона; сеть обучается градиентным спуском, минимизируя конкретную функцию потерь на конкретных данных, а не "размышляет" в человеческом смысле слова.

Ошибка 2. Считают, что увеличение числа слоёв само по себе всегда увеличивает мощность модели, даже без нелинейной активации на каждом слое.

Как выглядит: попытка "углубить" сеть, добавляя линейные (без активации) слои подряд, в надежде на рост точности.

Почему возникает: интуитивно кажется, что "больше слоёв = больше параметров = мощнее модель", без учёта того, что композиция линейных преобразований математически сворачивается в одно линейное преобразование (доказано в разделе про необходимость нелинейности).

Как правильно: каждый скрытый слой должен включать нелинейную функцию активации; без неё дополнительные слои не добавляют выразительной способности сверх одного линейного слоя, сколько бы их ни было.

Ошибка 3. Путают функцию активации скрытых слоёв с функцией активации выходного слоя, считая, что во всей сети должна использоваться одна и та же функция.

Как выглядит: использование сигмоиды на выходном слое многоклассовой классификации вместо softmax, или, наоборот, попытка применить softmax на скрытом слое "для единообразия".

Почему возникает: на этом вводном уроке функция активации ещё не разбиралась детально по типам (это тема урока 329), и кажется естественным использовать одну и ту же функцию всюду.

Как правильно: выбор активации скрытых слоёв (например, ReLU) обычно продиктован удобством обучения (свойствами градиента), а выбор активации выходного слоя — типом задачи: сигмоида для бинарной классификации, softmax для многоклассовой, тождественная функция (без активации) для регрессии — те же соответствия, что уже были в логистической и линейной регрессии уроков 310 и 313.

Ошибка 4. Считают "искусственный нейрон" принципиально новой концепцией, никак не связанной с моделями, изученными в предыдущих уроках курса.

Как выглядит: ощущение, что весь пройденный материал по линейной и логистической регрессии "не пригодился" и нейросети нужно изучать с чистого листа.

Почему возникает: новая терминология (нейрон, слой, активация, архитектура) визуально выглядит как отдельная от классического ML область знаний.

Как правильно: один искусственный нейрон с тождественной активацией — это линейная регрессия, а с сигмоидой — логистическая регрессия (оба факта разобраны с числовыми примерами в разделе про искусственный нейрон); нейронная сеть — это способ комбинировать множество таких уже знакомых моделей вместе, а не принципиально новая математика.

Ошибка 5. Ожидают, что для разбора нейронных сетей достаточно интуиции без строгой математики, потому что "это же просто как мозг работает".

Как выглядит: пропуск формул и доказательств (вроде доказательства коллапса линейных слоёв) в пользу одних только качественных, словесных объяснений.

Почему возникает: обилие популярных, упрощённых объяснений нейросетей в интернете и медиа создаёт впечатление, что тема не требует точной математики.

Как правильно: за каждым архитектурным решением в нейросетях стоит конкретная, проверяемая математика — коллапс линейных слоёв доказывается матричной алгеброй, устройство нейрона — это уже знакомые формулы линейной и логистической регрессии, иерархия признаков подтверждена экспериментально (Zeiler & Fergus, 2014); без этой строгости невозможно осознанно отлаживать реальные модели дальше в блоке курса.

Ошибка 6. Считают персептрон Розенблатта (1958) и современную многослойную нейронную сеть одним и тем же понятием.

Как выглядит: использование слов "персептрон" и "нейронная сеть" как полных синонимов в любом контексте.

Почему возникает: персептрон исторически стал первой обучаемой моделью искусственного нейрона, и его название иногда по инерции переносят на все последующие архитектуры.

Как правильно: персептрон — это конкретная историческая модель (один слой, пороговая активация, специфичный алгоритм обучения), которую подробно разбирает следующий урок (327); современная многослойная сеть — гораздо более общее понятие, включающее множество скрытых слоёв, разные функции активации и обучение градиентным спуском, а не только персептронное правило обучения.

Главное запомнить

  • Искусственный нейрон — упрощённая математическая модель, вдохновлённая биологическим нейроном (дендриты → взвешенные входы, тело клетки → суммирование, аксон и порог → функция активации), но современные нейросети сознательно не копируют биологию буквально.

  • Формула нейрона: логит $z=w^\top x+b$ (взвешенная сумма входов плюс смещение), затем активация $a=f(z)$ — те же самые взвешенная сумма и сигмоида, что уже встречались в линейной (310) и логистической (313) регрессии.

  • Нейрон с тождественной активацией — это в точности линейная регрессия; нейрон с сигмоидой, обучаемый кросс-энтропией, — это в точности логистическая регрессия.

  • Без нелинейной функции активации на скрытых слоях композиция любого числа линейных слоёв математически сворачивается в один линейный слой — доказано напрямую через матричную алгебру ($W'=W^{(2)}W^{(1)}$, $b'=W^{(2)}b^{(1)}+b^{(2)}$ и по индукции для любого числа слоёв).

  • Именно нелинейность (например, ReLU или сигмоида) на скрытых слоях позволяет сети решать задачи вроде XOR, которые принципиально не поддаются ни одному линейному нейрону или композиции линейных слоёв.

  • Сеть организована в слои: входной слой подаёт признаки, скрытые слои строят и комбинируют признаки, выходной слой выдаёт финальное предсказание (сигмоида для бинарной классификации, softmax для многоклассовой, без активации — для регрессии).

  • Каждый слой — это матричная операция $a^{(l)}=f^{(l)}(W^{(l)}a^{(l-1)}+b^{(l)})$, поэтому вычисления в сети идеально распараллеливаются на GPU, а число параметров слоя растёт как произведение размеров соседних слоёв.

  • Глубина сети даёт иерархию признаков: ранние слои выучивают простые локальные паттерны (например, края изображения), поздние слои комбинируют их во всё более сложные и абстрактные признаки (формы → части объектов → целые объекты) — это экспериментально подтверждённое явление, а не просто теоретическое ожидание.

  • Искусственный нейрон появился как теоретическая модель МакКаллока и Питтса в 1943 году (логическое исчисление, без обучения) и стал обучаемым в персептроне Розенблатта 1958 года — с этого момента начинается вся история практических нейронных сетей.

  • Сегодняшний урок — фундамент всего блока Deep Learning: персептрон (327), многослойные сети (328), функции активации (329) и обратное распространение ошибки (330) прямо опираются на понятия нейрона, слоя и нелинейности, разобранные здесь.

Связь с темами курса

Что нужно было знать до этого урока

Сегодняшний урок опирается на весь предыдущий путь курса сразу, и это не преувеличение. Из линейной регрессии (уроки 310–311) взята сама структура взвешенной суммы входов плюс смещение — формула искусственного нейрона с тождественной активацией дословно совпадает с формулой линейной регрессии. Из логистической регрессии (урок 313) взята сигмоида, softmax и кросс-энтропия — нейрон с сигмоидой на выходе и логистическая регрессия вычисляют одну и ту же функцию, а многоклассовый выходной слой с softmax — это прямое повторение многоклассовой логистической регрессии того же урока. Из конструирования признаков (урок 325) взята сама идея о том, что качество предсказания сильно зависит от качества признаков, — только там признаки создавались вручную, а здесь мы увидели, что скрытые слои сети выполняют концептуально ту же работу автоматически. Из блока оптимизации (уроки 285, 293) заимствован сам принцип обучения — подбор параметров через минимизацию функции потерь, — который в следующих уроках блока будет применён к сети с тысячами и миллионами параметров одновременно. А из линейной алгебры взята операция "умножение матрицы на вектор", лежащая в основе вычисления каждого слоя сети.

Что изучить дальше

Следующий урок (327) переходит к детальному разбору персептрона Розенблатта — первой исторической модели обучаемого искусственного нейрона, включая точный алгоритм подстройки весов по ошибкам и знаменитое ограничение линейной разделимости, которое ты уже увидел сегодня на примере XOR. Урок 328 покажет, как персептрон расширяется до полноценной многослойной сети (multilayer perceptron, MLP) — архитектуры, которую мы сегодня описали в общем виде через формулу слоя $a^{(l)}=f^{(l)}(W^{(l)}a^{(l-1)}+b^{(l)})$. Урок 329 детально разберёт разные функции активации — сигмоиду, гиперболический тангенс, ReLU и её варианты, — сравнивая их математические свойства и то, как выбор активации влияет на скорость и устойчивость обучения. А дальше в блоке — обратное распространение ошибки (330), инициализация весов (331), батч-нормализация (332), регуляризация через dropout (333) и, наконец, конкретные архитектуры: свёрточные сети для изображений, рекуррентные сети и трансформеры для последовательностей и текста.

Где это нужно в жизни

📸 Компьютерное зрение. От распознавания лиц в смартфонах до автоматической разметки медицинских снимков — все современные системы компьютерного зрения построены на многослойных нейронных сетях, где иерархия признаков (от краёв до объектов), разобранная сегодня, реализуется через специализированные свёрточные слои.

🗣️ Обработка естественного языка. Переводчики, голосовые ассистенты и большие языковые модели — все они представляют собой глубокие нейронные сети, где тот же самый принцип — слои, комбинирующие простые признаки во всё более абстрактные представления смысла, — реализован для последовательностей символов и слов вместо пикселей.

🏥 Медицинская диагностика. Нейросети, обученные на рентгеновских снимках, МРТ и гистологических изображениях, выучивают собственную иерархию визуальных признаков заболеваний, зачастую находя паттерны, не описанные явно ни в одном медицинском учебнике.

🚗 Автономный транспорт. Беспилотные автомобили используют нейронные сети для одновременного распознавания дорожной разметки, пешеходов, других автомобилей и дорожных знаков — множество параллельных иерархий признаков, обученных на миллионах часов записанного видео.

🎮 Игровой ИИ и генеративные модели. От систем, играющих в го и шахматы на сверхчеловеческом уровне, до моделей, генерирующих изображения и тексты по запросу, — в основе всех них лежит ровно тот строительный блок, который разобран сегодня: искусственный нейрон, организованный в глубокие слои с нелинейными активациями.

Интересные факты

  • Уолтеру Питтсу, соавтору первой модели искусственного нейрона 1943 года, на момент публикации было всего двадцать лет; он был во многом самоучкой — сбежал из дома подростком и изучал математическую логику самостоятельно по книгам в публичной библиотеке, прежде чем стать соавтором одной из самых влиятельных статей в истории вычислительной техники и нейронауки.

  • Слово "перцептрон" (персептрон) образовано от английского "perception" — "восприятие": Розенблатт разрабатывал свою модель прежде всего как модель зрительного восприятия, вдохновляясь идеей сетчатки глаза, — отсюда матрица фотоэлементов на входе Mark I Perceptron 1958 года.

  • Визуализация иерархии признаков, о которой шла речь в этом уроке (края → формы → части объектов → объекты), была не просто теоретической идеей: исследование Zeiler & Fergus 2014 года экспериментально подтвердило её, разработав технику, которая буквально "показывает", на какие визуальные паттерны реагирует каждый отдельный нейрон уже обученной сети, слой за слоем.

  • Несмотря на впечатляющие достижения современных нейросетей, ни одна из них по числу параметров и близко не приближается к связности человеческого мозга (порядка ста триллионов синапсов против сотен миллиардов параметров у самых крупных современных моделей) — разрыв в несколько порядков, который наглядно показывает, что успех глубокого обучения объясняется не масштабным копированием биологии, а эффективностью самой математической конструкции.

Лайфхаки

  • Когда встречаешь незнакомую архитектуру нейросети, первым делом мысленно разложи её на уже знакомые части: линейный слой — это взвешенная сумма из линейной регрессии, выходной слой с сигмоидой или softmax — это логистическая регрессия; почти всегда сложная архитектура оказывается комбинацией уже понятных тебе кирпичиков.

  • Если сомневаешься, зачем в конкретном месте архитектуры стоит функция активации, задай себе вопрос "а что будет, если её убрать?" — и вспомни доказательство коллапса линейных слоёв из этого урока: без нелинейности слой становится избыточным матричным преобразованием, не добавляющим выразительной мощности.

  • Считая число параметров сети (полезный навык для оценки размера модели в памяти и на диске), считай отдельно веса каждого слоя как произведение размеров соседних слоёв, а смещения — отдельно, по числу нейронов слоя; суммируй по всем слоям, как в примерах этого урока.

  • Не пытайся представить нейросеть как буквальную модель мозга при отладке реальных моделей — думай о ней как о параметризованной, дифференцируемой функции, которую обучают минимизировать конкретную функцию потерь; такой взгляд гораздо продуктивнее для практической работы, чем биологическая метафора.

  • Прежде чем переходить к следующим урокам блока про обучение сети (backpropagation, урок 330), убедись, что ты уверенно можешь вручную посчитать прямой проход (forward pass) через маленькую сеть на бумаге, как в примерах этого урока, — без этого навыка понимание обратного распространения ошибки будет держаться на вере, а не на понимании.

  • Экспериментируй с крошечными сетями (2–3 нейрона, как в примерах с XOR в этом уроке) на бумаге или в NumPy, прежде чем переходить к библиотекам вроде Keras или PyTorch — интуиция, наработанная на подобных вручную посчитанных примерах, переносится на сети любого масштаба.

Ты только что перешагнул черту, к которой вёл весь курс: от определения производной до градиентного спуска, от умножения матриц до логистической регрессии — каждый навык, который казался тогда самостоятельной темой, сегодня оказался частью одной большой картины. Искусственный нейрон — это не новая, чуждая конструкция, а твоя собственная логистическая регрессия, поставленная рядом с сотнями таких же и организованная в слои. Дальше в этом блоке ты увидишь, как персептрон Розенблатта превращается в обучаемую сеть, как обратное распространение ошибки эффективно считает градиент по миллионам параметров одновременно, и как из этих простых строительных блоков вырастают архитектуры, которые видят, слышат и пишут. Добро пожаловать в Deep Learning — ты давно к этому готов.

Понял тему? Закрепи в боте! 🚀

Попрактикуйся на задачах и получи персональные рекомендации от AI

💪 Начать тренировку
💬 Есть вопрос? Спроси бота!