Зачем нейросети слои: почему глубина решает там, где ширина бессильна
Букву «deep» в deep learning часто переводят как «глубокое обучение», но мало кто объясняет, откуда взялась глубина и зачем она нужна. Спойлер: один слой нейронов не умеет даже отличить кружок от крестика в простой задаче.
Глубина сети — это не понты ради количества: каждый новый слой видит мир чуть абстрактнее предыдущего.
Один слой нейронов умеет проводить только прямые границы. Чтобы понять что-то сложное, границы приходится складывать слоями.
Что значит «слой»
Нейроны в сети расставлены рядами. Первый ряд получает сырые данные (пиксели картинки, числа из таблицы), считает свои взвешенные суммы и передаёт результаты следующему ряду. Тот обрабатывает их и передаёт дальше. Каждый такой ряд — это слой. Сети с одним-двумя слоями называют мелкими, с десятками и сотнями — глубокими.
Знаменитый провал одного слоя
В 1969 году выяснилось, что одиночный слой (перцептрон) не способен решить элементарную задачу «исключающее ИЛИ» (XOR): выдать единицу, когда из двух входов ровно один равен единице. Причина геометрическая. Один слой умеет делить плоскость одной прямой линией: всё, что по одну сторону, — один класс, по другую — другой. Но точки XOR расположены крест-накрест, и никакой прямой их не разделить.
Это открытие на годы заморозило интерес к нейросетям. Спасло их понимание: добавьте скрытый слой между входом и выходом — и сеть сможет провести не прямую, а ломаную границу. Две линии вместо одной решают XOR без труда.
Глубина строит признаки лесенкой
Главная сила слоёв — в том, что каждый следующий работает не с сырыми данными, а с находками предыдущего. Возьмём распознавание лиц:
- Первый слой замечает простейшее — границы, пятна светлого и тёмного, наклонные линии.
- Средние слои собирают из линий детали: уголок глаза, дугу брови, край губ.
- Глубокие слои складывают детали в целые понятия: «глаз», «нос», а затем «лицо именно этого человека».
Получается иерархия: от примитивов — к сложным образам. Никто не программирует эти ступени вручную, сеть выстраивает их сама в процессе обучения. Именно поэтому глубокие сети так хороши с картинками, звуком и текстом — у этих данных тоже есть естественная иерархия от простого к сложному.
Почему нельзя просто взять слой пошире
Возникает соблазн: зачем много слоёв, давайте напихаем в один слой побольше нейронов. Теоретически очень широкий одиночный слой может приблизить почти любую функцию. Но на практике для сложных задач ему потребовалось бы астрономическое число нейронов, а обучить такую махину почти невозможно. Глубина даёт ту же выразительность экспоненциально дешевле: переиспользуя простые признаки в комбинациях, сеть достигает большего меньшими силами. Грубо говоря, проще объяснить понятие через понятия попроще, чем перечислять все случаи разом.
| Мелкая и широкая | Нужны гигантские слои, плохо обобщает |
| Глубокая | Строит признаки иерархией, эффективнее |
У глубины есть цена
Слишком глубокие сети раньше было трудно обучать: сигнал ошибки, пробираясь назад через десятки слоёв, ослабевал почти до нуля — проблема «затухающего градиента». Решили её специальными приёмами вроде «пропускающих» связей, которые позволяют сигналу перепрыгивать слои. Сегодня сети с сотнями слоёв — обычное дело.
Итог
Глубина нужна не для красивого названия. Слои позволяют сети строить смысл лесенкой — от линий к деталям и от деталей к понятиям. Один слой проводит одну границу; десятки слоёв учатся видеть мир так, как мы и ждём от искусственного интеллекта.