Не доверяйте нейросетям... проверяйте их!

Классификация и анализ методов верификации нейросетей

При эксплуатации нейросетей вида r=f(a,w) в ответственных системах необходимо соблюдение двух фундаментальных требований: повторяемость и проверяемость результата. Информация о требовании повторяемости на основе детерминированного ответа изложена в ранее опубликованной статье

Но с выполнением второго требования всё несколько сложнее.

Исходя из моих наблюдений за внешними проектами, при разработке этап проверки результатов нейросетей либо игнорируется, либо в нем допускаются существенные ошибки. В итоге всё нередко скатывается в «слепое» доверие к результатам ИИ, что создаёт значительные риски при внедрении в промышленную эксплуатацию.

Меня зовут Черкас Руслан. Я архитектор в СберЗдоровье — МедТех-компании №1 в России. В этой статье я поделюсь своими соображениями о верификации результата нейросети, существующих методах ее проведения, а также мыслями о том, что на мой взгляд следует применять, а что — избегать.

Примечание: За основу статьи взяты мои наработки, с которыми можно ознакомиться по ссылке

Требования к проверяемости результата и методы верификации

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

Именно поэтому центральной задачей становится не просто получение ответа от нейросети, а построение процесса его верификации.

Из практики, по источнику истины методы верификации можно разделить на несколько групп:

  • человек;

  • эксперимент;

  • формальная спецификация или конечный алгоритм;

  • нейросеть;

  • смешанный подход.

На специфике каждого из них остановимся подробнее. 

Человек

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

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

Безусловно, человек может ошибаться. Тем не менее, во многих критически важных сферах именно опыт и интуиция специалиста служат финальным и наиболее авторитетным критерием истины, позволяя принимать взвешенные решения в условиях неопределённости.

Вместе с тем, верификация ответа человеком затруднительна в runtime-процессах, требующих высокой скорости реакции или обработки огромных массивов данных — в таких сценариях ручная проверка становится «бутылочным горлышком» системы.

Формальная спецификация или конечный алгоритм

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

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

Примечание: Здесь необходимо сделать важное уточнение. Несмотря на то что детерминированная нейросеть сама по себе является конечным алгоритмом, она не может служить эталоном для проверки. Причина заключается в том, что сеть — это «чёрный ящик», обученный на ограниченном наборе данных и не обладающий всей полнотой истины. Её внутренняя логика непрозрачна и не гарантирует корректности на всём пространстве входных данных, что будет доказано ниже.

Таким образом, метод обеспечивает объективность и воспроизводимость, но применим только там, где правильный ответ поддается формализации.

Эксперимент

Эксперимент — это проверка нейросети наблюдаемой реальностью. Результат сверяется с тем, что происходит в физическом мире.

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

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

На мой взгляд, это наиболее полный и достоверный способ верификации.

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

Нейросеть

Переходим к недостоверным способам проверки.

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

Я сталкивался с несколькими попытками и способами валидации с помощью нейросетей.

  • «Эталонная» модель. Берется нейросеть, которую считают более точной (например, большего размера или обученная дольше), и на основе ее ответов выполняется оценка результатов проверяемой сети.

  • Ансамблевые методы. Усредняются ответы нескольких сетей, и полученное среднее считается эталоном для проверки каждой отдельной сети.

  • Кросс-валидация между архитектурами. Сравниваются ответы сетей разной архитектуры, и совпадение интерпретируется как подтверждение правильности.

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

  • Во-первых, если для проверки одной сети требуется другая, то почему бы не использовать эту «проверяющую» сеть в качестве основной? Это приводит к бесконечной рекурсии: возникает вопрос, кто будет проверять проверяющую сеть, и не логичнее ли сразу доверять более точной модели.

  • Во-вторых, если мы считаем одну из сетей эталоном, то её ответы по определению приравниваются к истине, что сводит верификацию к простому сравнению с заранее выбранным фаворитом, а не к объективной оценке. Таким образом, вместо верификации мы получаем лишь сопоставление двух вероятностных моделей без гарантии их соответствия реальности.

Смешанный подход

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

Причин несколько:

  • Потери независимости. Обученная на эталоне нейросеть — это лишь аппроксимация, а не сам эталон. Гарантии исходного источника утрачены.

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

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

Доказательство некорректности проверки через обученную сеть

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

Пусть T — истина, неизвестная нейросети напрямую, поскольку не имеет компактного описания (иначе задача решалась бы классическими методами без применения нейросетей).

Пусть N1 = learning(D1) и N2 = learning(D2), где:

  • D1 и D2 — конечные выборки из T;

  • N1 и N2 — результат обучения двух сетей.

причем: D1 ≠ D2, D1 ∪ D2 ≠ T, то есть каждая нейросеть видела только свой кусок истины и никогда не видела всю T целиком. 

Следовательно, процедура обучения в общем случае не гарантирует, что:

∀x:N1(x)= T(x)

∀x:N2(x)= T(x)

Теперь рассмотрим проверку N1 через N2 как требование:

∀x: N1(x) = N2(x)

Возьмем x' ∉ D1 ∪ D2, то есть x' не видела ни первая, ни вторая сеть в обучающих сэмплах. Для этой точки обе сети дают ответ, не подтвержденный истиной T.

При этом N1(x') может равняться N2(x'), но гарантий, что это значение равно T(x*), нет — T для этой точки неизвестна.

Следовательно:

(∀x: N1( x ) = N2( x )) ≠> (∀x: N1( x ) = T( x ))

Совпадение ответов двух нейросетей не является свидетельством истинности. Никакая нейросеть не может служить эталоном для другой.

Даже если N1(x') = N2(x'), это может быть случайное совпадение или системная ошибка обобщения, а не подтверждение истинного значения.

Графическое представление:

На графике мы видим следующее: обе нейросети (N1 и N2), обученные на одной истине (Т), дали идентичный результат в точке пересечения и при этом ошибочный относительно истины. Формально модели ошиблись и вернули результат TRUE при правильном FALSE. Последствия этой ошибки зависят от контекста применения.

Что в итоге

Внедрение нейросетей — это не только про обучение модели, но и про построение вокруг неё инфраструктуры доверия. Поэтому проверка результата не менее важна, чем его получение.

При этом надо четко понимать:

  • Использование одной нейросети для проверки другой аналогичной не дает достоверных результатов. Совпадение ответов не дает никаких гарантий корректности. Обе могут одинаково ошибаться в точках, не представленных ни одной из них при обучении. А где именно пролегают эти точки и какова истина — неизвестно. То есть проверка одной нейросети через другую — создание иллюзии контроля вместо реальной верификации.

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

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

А как вы верифицируете результаты работы нейросетей? Рассказывайте о своих подходах — будет полезно.