Сарказм в коде
Объясняет сложно просто
Нетерпимость к хайпу
Техническая глубина
Привет, это снова я, Ник
Если вы впервые здесь, то позвольте представиться: я тот самый программист, который по выходным проводит время, издеваясь над нейросетями. Да, другие ходят на рыбалку или собирают марки, а я заставляю ChatGPT писать стихи в стиле Маяковского о квантовых компьютерах. Каждому своё.
Сегодня поговорим о том, что меня искренне веселит уже несколько лет. Почему, чёрт возьми, нейросети до сих пор иногда путают кошек и собак? Казалось бы, на дворе 2025-й, ИИ уже придумывает новые лекарства, пишет код лучше среднего программиста (не лучше меня, конечно, но я выше среднего) и даже генерирует такие реалистичные изображения, что фотографы начинают нервно курить в сторонке. И тут вдруг – бац! – и твоя супер-пупер нейросеть уверенно заявляет, что мопс с плоской мордой – это персидский кот.
«Видел одну кошку – видел их всех!» – Нейросеть, наверное
Давайте разберёмся по порядку. Компьютерное зрение – это не «зрение» в человеческом понимании. Когда мы смотрим на котика, мы видим... ну, котика! Нейросеть же видит массив пикселей, который она пытается классифицировать на основе того, чему её научили.
Представьте, что вы никогда в жизни не видели ни кошек, ни собак, и вам показывают тысячи фотографий, говоря: «Это кошка, а это собака». Через какое-то время вы начнёте выделять паттерны: «У кошек обычно треугольные уши, а у собак – более округлые», «Кошки часто меньше собак», «У собак языки обычно свисают изо рта» и т.д.
Вот примерно так же «учится» и нейросеть. Только вместо осознанных правил она создаёт математические модели на основе «признаков», которые сама выделяет из обучающих данных. И вот тут начинается самое интересное.
Проблема #1: Кривое зеркало обучающих данных
ИИ – это зеркало. И иногда оно кривое. (Да, это моя коронная фраза, и я буду её повторять, пока она не станет мемом).
Когда мы тренируем нейросеть на распознавание объектов, мы кормим её обучающими данными. И качество этих данных определяет, насколько хорошо она будет работать. Вот типичные проблемы:
-
Несбалансированные выборки – Представьте, что 80% фотографий кошек в вашем датасете – это снимки рыжих котов, лежащих на диване. Что произойдёт? Нейросеть может решить, что «быть рыжим и лежать на диване» – это ключевой признак кошачьей природы. И когда вы покажете ей чёрную кошку на дереве, она заколеблется: «Что это за странная кошко-не-кошка?»
-
Предвзятость аннотаторов – Люди, размечающие данные, тоже делают ошибки. Я как-то участвовал в проекте, где один из аннотаторов упорно помечал чихуахуа как «крысы». Технически он был не так уж неправ (шутка!), но для нейросети это была катастрофа.
-
Скрытые переменные – Иногда нейросеть находит корреляции, о которых мы даже не подозреваем. Классический пример: алгоритм учился распознавать волков и собак, но в итоге научился распознавать снег! Потому что большинство фотографий волков было снято на снежном фоне.
Проблема #2: Когда твоя нейросеть слишком умная и слишком глупая одновременно
Современные архитектуры нейросетей для компьютерного зрения – это настоящие монстры. Возьмём, к примеру, Vision Transformer (ViT) или недавнюю SOTA-модель от NVIDIA (не буду уточнять какую именно, потому что к моменту выхода этой статьи она уже устареет – вот такая скорость в мире ИИ).
Эти модели имеют миллиарды параметров и могут обрабатывать сложнейшие зависимости в данных. Но парадоксальным образом, чем сложнее модель, тем более странные ошибки она может совершать. Почему?
-
Переобучение – Когда у модели слишком много параметров относительно обучающих данных, она начинает «запоминать» примеры вместо того, чтобы выучивать общие правила. Это как студент, который вместо понимания физических законов просто запоминает ответы к задачам из учебника. На экзамене он провалится.
-
Проблема распределений – В реальном мире данные часто выглядят иначе, чем в обучающей выборке. Представьте, что мы тренировали нейросеть только на фотографиях, сделанных при дневном свете. А потом показываем ей ночную фотографию кота... и она говорит, что это носорог. С человеческой точки зрения это абсурд, но для нейросети это логично: она никогда не видела таких тёмных кошек.
-
Странные уверенности – Моя любимая особенность нейросетей: они часто ошибаются с вызывающей восхищение уверенностью. «Это собака, вероятность – 99,8%». И ты смотришь на фото, где явно изображён диван. Нет, серьёзно, это бывает.
Проблема #3: Кошки и собаки, которые слишком похожи
Давайте будем честны: некоторые породы кошек и собак действительно похожи. Взгляните на сиамского кота и хаски – оба с голубыми глазами и контрастным окрасом. Или на сфинкса и китайскую хохлатую – обе породы практически лысые.
Но человек обычно не путается. Почему? Потому что мы не только смотрим на текстуру шерсти или цвет глаз. Мы интуитивно понимаем «кошачесть» и «собачесть» – это комплекс признаков, включающий манеру движения, пропорции тела, выражение морды и т.д.
Нейросети пытаются выучить эти признаки, но им сложнее, потому что:
- Они обычно работают с одиночными кадрами, а не с видео
- Они не имеют врождённого понимания физики и биологии
- У них нет нашего эволюционного багажа (мы эволюционировали рядом с собаками и кошками миллионы лет)
Решение: Как заставить вашу нейросеть отличать Мурзика от Шарика
Если вы разрабатываете систему компьютерного зрения и у вас есть проблемы с различением кошек и собак (или любых других похожих классов), вот несколько советов:
-
Аугментация данных – Искусственно увеличьте разнообразие обучающей выборки, применяя различные преобразования: поворот, масштабирование, изменение яркости и контраста, добавление шума. Это поможет модели стать более устойчивой к вариациям во входных данных.
-
Сбалансированные выборки – Убедитесь, что у вас примерно одинаковое количество примеров для каждого класса и подкласса. Если у вас 1000 фото лабрадоров и 10 фото догов, модель будет хуже распознавать догов.
-
Контрастное обучение – Явно покажите модели пары похожих, но разных объектов (например, персидский кот vs мопс) и заставьте её научиться различать именно эти сложные случаи.
-
Ансамбли моделей – Иногда несколько «средних» моделей работают лучше, чем одна «супер-модель». Попробуйте создать ансамбль из нескольких нейросетей с разной архитектурой и обученных на разных подмножествах данных.
-
Не ждите чуда – Даже лучшие системы иногда ошибаются. Человек тоже может перепутать чихуахуа с крысой, если увидит её мельком и в темноте (я не про себя, конечно).
Чему нас учат эти пушистые ошибки?
Тот факт, что современные нейросети всё ещё иногда путают кошек и собак, напоминает нам о важных вещах:
-
ИИ не «видит» мир так, как мы – Для нас распознавание объектов – это нечто настолько естественное, что мы даже не задумываемся, как это происходит. Для машины это сложнейшая математическая задача.
-
Данные решают всё – Качество, разнообразие и репрезентативность данных определяют качество модели. Garbage in – garbage out, как говорится.
-
Разрыв между специализированным и общим интеллектом – Нейросеть может быть чемпионом мира по игре в го и при этом не понимать, что кошки обычно не лают. Различные аспекты интеллекта развиваются неравномерно.
Заключение: Будущее без ошибок?
Мы приближаемся к тому моменту, когда компьютерное зрение достигнет (и в некоторых задачах уже достигло) человеческого уровня. Но совершенства, вероятно, не будет никогда – как не бывает его и у людей.
У каждой технологии есть свои пределы. И это нормально. Важно понимать эти пределы и работать над их расширением, а не ожидать, что однажды утром мы проснёмся в мире, где алгоритмы никогда не ошибаются.
А пока что продолжайте показывать своим алгоритмам фотографии мопсов и спрашивать: «Это кот или собака?» И если алгоритм ответит, что это енот, не спешите его ругать. Может быть, он видит что-то, чего не видите вы.
Или, скорее всего, он просто глючит.
P.S. В процессе написания этой статьи я попросил GPT-4 классифицировать 100 случайных изображений кошек и собак. Он ошибся 7 раз. Когда я попросил свою племянницу (4 года) сделать то же самое, она ошибалась в 2% случаев. Так что... может быть, нам стоит начать обучать наши нейросети на четырёхлетних детях? Или это уже слишком далеко заходит?