Получите локальные и глобальные объяснения для производственных моделей TensorFlow

Автор: Крис Роулз, Майкл Манн и Майкл Абель.

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

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

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

Весь код, использованный в этом посте, доступен здесь.

Таксономия методов объяснения

Обзор (апостериорных) методов объяснения модели и примеры различных техник.

Большинство методов объяснимости можно разделить по трем осям [источник]:

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

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

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

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

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

Развертывание интерпретируемых моделей в Google Cloud

Вы можете развернуть интерпретируемые модели на GCP с помощью Explainable AI и делать прогнозы с помощью команды gcloud beta ai-platform explain.

Шаги по обучению и прогнозированию с объяснениями:

  1. Обучите модель и разверните ее на GCP.
  2. Загрузите файл JSON, содержащий базовые значения функций (подробнее об этом ниже), в Cloud Storage Bucket.
  3. Создайте версию модели с помощью этого файла JSON и укажите explanation-method.
  4. Позвоните gcloud beta ai-platform explain, чтобы получить объяснения.

Ниже мы покажем эти шаги более подробно.

Для начала вам понадобится обученная и развернутая модель на платформе Google Cloud AI Platform (CAIP). Мы рассмотрим набор данных о такси Нью-Йорка. Вы можете ознакомиться с этим сообщением в блоге, чтобы узнать, как легко обучить модель на CAIP. На момент написания AI Explanations поддерживает только TensorFlow 1.x, поэтому независимо от модели, которую вы создаете, убедитесь, что вы используете TensorFlow 1.x. Когда у вас будет ваша модель в формате SavedModel, мы создадим новую модель на CAIP:

gcloud ai-platform models create taxifare

Прежде чем мы сможем развернуть нашу модель, мы должны настроить explanations_metadata.json файл и скопировать его в каталог модели. В этом файле JSON нам нужно сообщить AI Explanations имена входных и выходных тензоров, которые ожидает наша модель.

Кроме того, в этом файле нам нужно установить input_baselines, который сообщает службе объяснений, какими должны быть исходные данные для нашей модели. Понимание исходных условий важно для эффективного использования многих методов объяснения модели. Оба поддерживаемых метода, Sampled Shapley и Integrated Gradients, сравнивают прогнозы с базовыми значениями и прогнозами. Выбор подходящих базовых показателей важен, потому что по сути вы сравниваете прогноз модели с базовыми значениями. Чтобы узнать больше о базовых показателях, ознакомьтесь с Белой книгой Explainable AI.

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

Мы можем записать этот словарь Python в файл JSON:

# Write the json to a local file
with open(‘explanation_metadata.json’, ‘w’) as output_file:
    json.dump(explanation_metadata, output_file)
    # Copy the json to the model directory.

Затем в bash мы копируем файл JSON в каталог вашей модели, используя gsutil.

$ gsutil cp explanation_metadata.json $model_dir

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

gcloud beta ai-platform versions create $VERSION_IG \
  -- model $MODEL \
  --origin $model_dir \
  --runtime-version 1.15 \
  --framework TENSORFLOW \
  --python-version 3.5 \
  --machine-type n1-standard-4 \
  --explanation-method ‘integrated-gradients’ \
  --num-integral-steps 25

Используя флаг `объяснение-метод`, вы указываете метод объяснения - в настоящее время поддерживаются как integrated-gradients, так и sampled-shapley .

Примечание. При выборе между интегрированными градиентами и выборкой шейпли мы цитируем технический документ:

Интегрированные градиенты рекомендуются для нейронных сетей и дифференцируемых моделей в целом. Он предлагает вычислительные преимущества, особенно для больших пространств входных функций (например, изображений с тысячами входных пикселей). Выборочный Шепли рекомендуется для недифференцируемых моделей, что имеет место в моделях AutoML Tables, состоящих из мета-ансамблей деревьев и нейронных сетей.

Кроме того, для тех, кто интересуется, чем подход Sampled Shapley отличается от популярной библиотеки SHAP, мы также процитируем технический документ:

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

Теперь, когда наша модель развернута, мы можем получить локальные атрибуты из записной книжки Jupyter:

resp_obj = !gcloud beta ai-platform explain — model $MODEL \
           — version $VERSION_IG — json-instances=’taxi-data.txt’
response_IG = json.loads(resp_obj.s)
# Analyze individual example.
explanations_IG = response_IG[‘explanations’][0][‘attributions_by_label’][0]

Мы можем загрузить их в Pandas DataFrame и построить атрибуцию для отдельных примеров:

df = pd.DataFrame(explanations_IG)
df.head()

row = df.iloc[0] # First example.
row.plot(kind=’barh’)

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

df.mean(axis=0).plot(kind=’barh’, color=’orange’)

Для получения дополнительных сведений об использовании глобальной атрибуции Sampled Shapley см. Этот документ.

Вывод

Вот и все! В этом посте мы показали, как развертывать объяснимые модели на Google Cloud Platform с помощью Explainable AI. Инструмент Explainable AI позволяет пользователям получать локальные объяснения от развернутой модели. Эти объяснения можно комбинировать, чтобы обеспечить глобальную интерпретируемость. В дополнение к шагам, описанным выше, вы также можете воспользоваться инструментом Что-если для проверки и интерпретации вашей модели.

Дополнительные ресурсы