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

