Внутри ИИ

Интерпретируемый ИИ, или как я научился перестать беспокоиться и доверять ИИ

Методы создания надежных и беспристрастных приложений искусственного интеллекта

Общественное доверие - жизненно важное условие продуктивного использования искусственного интеллекта. - Сэр Марк Уолпорт

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

Все это пагубно сказывается на доверии, и это, по моему опыту, является одной из основных причин, по которым компании сопротивляются развертыванию ИИ на предприятии. Объяснение или интерпретация ИИ - горячая тема для исследований, поскольку современные алгоритмы машинного обучения - это черные ящики, и никто не понимает, как они работают. Более того, в настоящее время существует постановление ЕС, объясняющее ИИ, в соответствии с правом на объяснение GDPR. В этом сообщении блога я расскажу о нескольких методах, которые вы можете добавить в свой арсенал науки о данных, чтобы улучшить понимание модели.

Командный процесс анализа данных

Но прежде всего, какой процесс вы выполняете, чтобы создать и развернуть приложение AI? В Microsoft мы следуем гибкой и итеративной методологии, называемой Team Data Science Process (TDSP), которая черпает вдохновение из таких процессов, как CRISP-DM и KDD. В этом посте я подробно рассмотрю этапы моделирования и развертывания процесса.

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

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

  • Утечка данных: это происходит, когда функции или атрибуты в данных обучения и проверки непреднамеренно пропускают информацию, которая в противном случае не появилась бы во время вывода. Классическим примером этого является Конкурс KDD в 2008 году по раннему выявлению рака груди, где было обнаружено, что одна из характеристик (идентификатор пациента) сильно коррелировала с целевым классом.

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

Но что такое интерпретируемость?

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

Однако интерпретируемость означает разные вещи для разных людей:

  1. Для специалиста по данным это означает лучше понять модель, увидеть случаи, когда модель работает хорошо или плохо и почему. Это понимание помогает специалистам по обработке данных строить более надежные модели.
  2. Для заинтересованного лица бизнеса это означает более глубокое понимание того, почему система искусственного интеллекта приняла конкретное решение для обеспечения справедливости и защиты своих пользователей и бренда.
  3. Для пользователя это означает понять, почему модель приняла решение, и разрешить серьезную проблему, если модель допустила ошибку.
  4. Для эксперта или регулирующего органа это означает проверку системы ИИ и отслеживание процесса принятия решений, особенно когда что-то идет не так.

Когда вы говорите об интерпретируемости и понимании моделей, важно помнить об этих разных персонажах.

Модель Прозрачность

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

  1. Линейный, Монотонный: это наиболее интерпретируемые функции, поскольку изменения входных характеристик приводят к пропорциональному изменению целевой переменной в одном направлении (положительном или отрицательном). Это позволяет нам вычислять относительные показатели важности функций и коды причин. Коды причин полезны, чтобы понять, почему изученная модель предсказывает высокие или низкие значения для определенных входных данных. Он дает нам качественную оценку прогнозирующего влияния входных характеристик, то есть сильного, слабого, положительного или отрицательного.
  2. Нелинейный, монотонный. Большинство функций отклика, изученных алгоритмами машинного обучения, являются нелинейными. Монотонность гарантирует, что относительные изменения входных характеристик приводят к изменениям целевой переменной в одном направлении. Нелинейные, монотонные функции также можно интерпретировать, поскольку они позволяют нам вычислять относительные меры важности функций и коды причин.
  3. Нелинейный, немонотонный: это наиболее распространенные функции, изучаемые современными алгоритмами машинного обучения, и их труднее всего интерпретировать. Это связано с тем, что изменения входных переменных приводят к изменениям целевой переменной в любом направлении и с разной скоростью. Единственная интерпретируемая мера, которую мы можем вычислить для таких функций, - это относительная важность характеристик. Интерпретация таких функций является основной темой данной статьи.

Помимо важности функций

Давайте теперь рассмотрим конкретный пример. Проблема состоит в том, чтобы предсказать оценки по математике, чтению и письму для старшеклассников в США. Нам предоставляются исторические данные, которые включают такие характеристики, как пол, раса / этническая принадлежность (которая является анонимной), уровень образования родителей, наличие у ученика съели стандартный / бесплатный / субсидированный обед и уровень подготовки к тестам. На основании этих данных я обучил мультиклассовую модель случайного леса [исходный код].

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

Введите, Графики частичной зависимости (PDP)!

PDP показывают предельное влияние функций на прогнозируемый результат. В Python вы можете использовать реализацию в scikit-learn, которая ограничивает вас градиентными регрессорами / классификаторами. Лучшая реализация - PDPBox, разработанный Jiangchun Lee. Библиотека вдохновлена ​​ICEBox, реализацией PDP для R, и поддерживает все модели машинного обучения scikit-learn. Вы можете установить эту библиотеку следующим образом.

pip install pdpbox

Теперь давайте посмотрим, как работает PDP. График выше показывает влияние разных уровней образования на предсказание оценок A и F по математике. Если вы продвигаетесь слева направо по оси x, уровень образования родителей повышается, начиная со средней школы и заканчивая степенью магистра. Вы заметите, что влияние на прогнозирование уровня A увеличивается по мере повышения уровня образования родителей. Вы видите аналогичную тенденцию к снижению для класса F, т.е. чем более образован родитель, тем меньшее влияние он оказывает на прогнозирование оценки F. Этот анализ показывает, что уровень образования родителей является допустимой характеристикой. Вы можете сгенерировать приведенные выше графики на Python, используя следующий фрагмент кода.

from pdpbox import pdp
pdp_parent = pdp.pdp_isolate(model=math_model, dataset=df, model_feature=features, feature='parent')

Теперь давайте посмотрим на взаимодействие функций при прогнозировании оценки A по математике. Я выбрал здесь две самые важные особенности. Уровень образования родителей находится на оси Y, и по мере продвижения снизу вверх уровень образования увеличивается. Анонимизированная раса или этническая принадлежность учащегося отображается на оси абсцисс, где разные точки представляют разные расы - в этом исследовании есть 5 различных групп. Обратите внимание на цвета на тепловой карте: фиолетовый / синий означает слабое воздействие при прогнозировании степени A, а зеленый / желтый означает сильное воздействие.

Маргинализируя группу 0, вы можете увидеть, что по мере повышения уровня образования родителей влияние на прогнозирование уровня A также увеличивается. Это имеет смысл, поскольку показывает, что уровень образования имеет большее влияние на оценку, чем раса. Таким образом, модель хорошо усвоила эту корреляцию. Но что происходит с группой 5? Похоже, что независимо от уровня образования, если ученик принадлежит к группе 5, то это имеет сильное влияние на прогнозирование оценки А. Это выглядит подозрительно и демонстрирует -

  • проблема с данными, из-за которой может иметь место систематическая ошибка выборки,
  • проблема с моделью и / или
  • системная проблема в обществе

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

from pdpbox import pdp
pdp_race_parent = pdp.pdp_interact(model=math_model, dataset=df, model_features=features, features=['race', 'parent'])

Боковая панель на деревьях решений

Я хочу развенчать распространенное заблуждение о деревьях решений - что они чрезвычайно интерпретируемы. Давайте снова рассмотрим конкретный пример - Набор данных цветов ириса. Проблема состоит в том, чтобы предсказать, является ли данный цветок ириса сетозой, версиколором или вирджинией, основываясь на 4 характеристиках - длине и ширине лепестка, а также длине и ширине чашелистника. Я обучил простое дерево решений для этой задачи классификации [исходный код], и вы можете легко визуализировать обученную модель в scikit-learn, показанном выше. Спускаясь по разным ветвям дерева, вы можете увидеть, как функции влияют на решение модели, и это очень легко понять неспециалисту.

А теперь давайте посмотрим на более сложную проблему. Больница хочет использовать систему искусственного интеллекта для раннего выявления рака груди. Это пример, когда понимание модели имеет решающее значение, поскольку это ситуация жизни или смерти. В датасете нам дано 30 различных функций. Я снова обучил простое дерево решений для этой задачи двоичной классификации [исходный код]. Из визуализации ниже вы можете видеть, что по мере увеличения количества функций сложность дерева решений также увеличивается, и его становится намного труднее интерпретировать.

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

Пост-Hoc объяснения

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

Предположим, что обученная вами сложная модель изучает функцию принятия решений, как показано выше, чтобы отделить злокачественные клетки (красным цветом) от доброкачественных клеток (синим цветом). Подход к интерпретации этой сложной модели состоит в том, чтобы выбрать пример, который вы хотите объяснить. Затем обучите более простую линейную модель, которая аппроксимирует сложную модель вокруг этого экземпляра. Это означает, что мы используем более простую модель, чтобы объяснить этот один случай, рассматривая похожие случаи вокруг него. Таким образом, изученное представление достоверно локально, но не глобально. Этот метод апостериорного объяснения называется LIME и расшифровывается как Local Interpretable Model-agnostic Explanations. Он был предложен в 2016 году и с тех пор приобрел большую популярность (5343 звезды на Github по состоянию на 05.03.2019).

А теперь давайте посмотрим на это под другим углом. У нас есть данные о различных клетках рака молочной железы, которые мы хотим классифицировать, представленные на блок-схеме как x. Мы обучаем модель, которая изучает сложную функцию f, которая отделяет доброкачественные случаи от злокачественных. Затем мы обучаем простую линейную суррогатную модель g, которая объясняет один экземпляр x ’ путем аппроксимации сложной функции вокруг этой точки. Параметры, полученные с помощью этой более простой модели, являются объяснением. Математически это показано ниже.

В приведенном выше уравнении x’_i - это двоичная переменная, которая используется для выборки экземпляров вокруг выбранного экземпляра, а M представляет количество упрощенных входных функций. Таким образом, LIME - это метод атрибуции аддитивных признаков.

Скотт М. Лундберг и другие на NeurIPS 2017 предложили структуру, которая объединяет различные методы атрибуции аддитивных признаков, включая LIME. В документе значения SHAP (что означает Аддитивное объяснение Шэпли) использовались в качестве единой меры важности функции. В 2017 году была выпущена Python-реализация SHAP, объединяющая LIME и другие методы, такие как DeepLIFT и интерпретаторы деревьев. Библиотека также набирает популярность с момента ее выпуска (3909 звезд на Github по состоянию на 03.03.2019). Вы можете установить SHAP следующим образом.

pip install shap

Теперь что касается проблемы обнаружения рака груди, я обучил классификатор случайного леса [исходный код], получив среднюю точность 100% на тестовом наборе выдержки - см. Кривую PR ниже.

Чтобы объяснить эту модель, я выбрал случай злокачественного новообразования, чтобы просмотреть объяснение дерева SHAP. Модель предсказала, что этот случай будет злокачественным с вероятностью 0,9. Базовая частота злокачественных новообразований в этом наборе данных составляет 0,6251. Объяснение, предоставленное SHAP, показано ниже, где положительное влияние обозначено красным цветом, а отрицательное - синим. Вы можете увидеть, как различные значения характеристик повышают достоверность базового прогноза до 90%. К особенностям, оказавшим наибольшее положительное влияние, относятся: наихудшая площадь, наихудшие точки вогнутости и средние точки вогнутости.

Аналогичное объяснение можно получить и для доброкачественного случая. Я выбрал доброкачественную клетку, для которой модель предсказывала это со 100% уверенностью, то есть с вероятностью 0%, что это злокачественная. Из объяснения ниже вы можете увидеть, как различные значения признаков снизили базовую вероятность злокачественного новообразования с 0,6251 до 0. Признаки с наибольшим отрицательным воздействием - это наихудшие вогнутые точки, средний периметр и наихудший радиус. Это объяснение великолепно, поскольку оно дает нам гораздо более глубокое понимание того, как модель пришла к окончательному прогнозу.

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

import shap
shap.initjson();
explainer = shap.TreeExplainer(rf_model)
shap_values = explainer.shap_values(X_test)
# Explanation for malignant case
shap.force_plot(explainer.expected_value[1], shap_values[1][0,:], X_test.iloc[0,:])
# Explanation for benign case
shap.force_plot(explainer.expected_value[1], shap_values[1][1,:], X_test.iloc[1,:])

Вы также можете использовать SHAP для визуализации среднего влияния каждой из функций на прогнозирование целевых классов. Это показано на графике слева внизу. Вы можете видеть, что две наиболее важные характеристики - это наихудшие точки вогнутости и средние точки вогнутости. График справа показывает взаимодействие между этими двумя функциями при прогнозировании класса злокачественных новообразований.

SHAP также можно использовать для объяснения моделей глубокого обучения черного ящика. Ниже приведен пример SHAP, объясняющий сверточную нейронную сеть, обученную на наборе данных MNIST. Для объяснения прогнозов использовалась реализация SHAP DeepLIFT. Красные пиксели указывают на большое влияние на предсказание цифры. Интересно отметить, что модель DeepExplainer подобрала несколько хороших объяснений - например, пустая середина для цифры 0 и отсутствие связи между двумя вертикальными линиями для цифры 4. В репозитории SHAP есть более интересные примеры.

MOAR Tools!

В этой статье я едва коснулся поверхности, и есть другие методы интерпретации, которые вы можете применить, например:

  • создание текстовых пояснений с использованием языковых моделей RNN
  • использование карт значимости, чтобы объяснить, на чем фокусируется модель
  • используя репрезентативное обучение и качественно визуализируя его с помощью таких методов, как t-SNE

Я добавил много ресурсов на эту страницу Github для дальнейшего чтения.

Проблемы с прозрачностью

Я хочу закончить одной оговоркой. В интересной статье Адриана Веллера он утверждает, что прозрачность ИИ должна быть средством достижения цели, а не самой целью. Доктор Веллер опирается на теорию многоагентных игр, чтобы показать, что большая прозрачность может привести к неблагоприятному глобальному исходу для всех и подвергнуть ИИ злоупотреблениям со стороны злоумышленников. Само собой разумеется, что системы ИИ должны быть безопасными и защищенными от враждебных атак. Это снова еще одна активная область исследований, заслуживающая отдельного сообщения в блоге!

Спасибо, что нашли время прочитать эту статью. Надеюсь, вам понравилось.

Обновление [4 ноября 2020 г.]: я написал книгу по Интерпретируемому ИИ с помощью Manning Publications с дополнительными методами интерпретируемости, которые вы можете добавить в свой арсенал.