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