Получете местни и глобални обяснения за производствени модели TensorFlow

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

Съвременното машинно обучение и AI показаха впечатляващи резултати за решаване на много сложни проблеми. По-сложните проблеми обаче често означават по-сложни данни, което неизбежно води до по-сложни модели. Истинското разбиране защо даден модел прави определена прогноза може да бъде толкова сложно, колкото и самият първоначален проблем!

Това може да бъде проблематично, тъй като много от тези системи за машинно обучение са засегнали случаи на употреба, вариращи от медицински интервенции, автономен транспорт, наказателно правосъдие, управление на риска и много други области на обществото. В много случаи полезността и справедливостта на тези AI системи е ограничена от нашата способност да ги разбираме, обясняваме и контролираме. Като такива, значителни усилия и изследвания са положени за отключване на черната кутия на мощни, но сложни ML модели, като дълбоки невронни мрежи.

Обяснимият AI се отнася до колекция от методи и техники, които позволяват на човека да разбере защо даден модел дава конкретни резултати. Обяснимостта на модела е ключова тема, която преподаваме на нашите клиенти в Лабораторията за напреднали решения на Google Cloud и в тази публикация показваме как да използваме Обяснимия AI на Google Cloud за внедряване на интерпретируеми и включващи модели за машинно обучение.

Целият код, използван в тази публикация, е достъпен тук.

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

Преглед на (post hoc) методи за обяснение на модела и примери за различни техники.

Повечето методи за обяснение могат да бъдат разделени по три оси [„източник“]:

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

Post-hoc методите включват използване на обучен модел и данни, за да се разбере защо се правят определени прогнози. В някои случаи пост-хок методите могат да бъдат приложени към модели, които също имат присъща обяснимост.

В тази публикация ще се съсредоточим върху възможността за обяснение на post-hoc модела, тъй като много усъвършенствани методи, като градиентно усилване и невронни мрежи, се разбират най-добре с помощта на такива методи.

Модел-агностик срещу модел-специфичен. Агностичност на модела означава, че методът на обяснимостта може да се приложи към всеки модел, докато методът, специфичен за модела, може да се използва само с определени типове модели. Например, ако методът работи само с невронни мрежи, той ще се счита за специфичен за модела. Обратно, ако методът на обяснимост третира обучения модел като черна кутия, тогава той ще се счита за агностичен на модела.

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

Внедряване на интерпретируеми модели в Google Cloud

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

Стъпките за обучение и прогнозиране с обяснения са

  1. Обучете модел и го разположете на GCP.
  2. Качете JSON файл, който съдържа базови стойности на функции (повече за това по-долу) в контейнер за съхранение в облак.
  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, което казва на услугата за обяснения какъв трябва да бъде входът на базовата линия за нашия модел. Разбирането на базовите линии е важно за ефективното използване на много техники за обяснение на модела. И двете поддържани техники, Sampley Shapley и Integrated Gradients, сравняват прогнозите с базовите стойности на характеристиките и прогнозите. Изборът на подходящи базови линии е важен, защото по същество сравнявате как прогнозата на модела се сравнява с базовите стойности. За да прочетете повече за базовите линии, вижте Обяснимата бяла книга за 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

Използвайки флага `explanation-method`, вие определяте метода на обяснение — в момента се поддържат както integrated-gradients, така и sampled-shapley.

Забележка: Когато избираме между интегрирани градиенти и извадка на Shapley, ние цитираме бялата книга:

Интегрираните градиенти се препоръчват за невронни мрежи и диференцируеми модели като цяло. Той предлага изчислителни предимства, особено за големи входни функционални пространства (напр. изображения с хиляди входни пиксели). Извадката на Shapley се препоръчва за недиференцируеми модели, какъвто е случаят с моделите на AutoML Tables, състоящи се от мета-ансамбли от дървета и невронни мрежи.

Освен това, за тези, които се чудят как подходът Sampled Shapley се различава от популярната библиотека SHAP, ние също цитираме бялата книга:

Има много начини за прилагане на стойностите на Shapley, които се различават по начина, по който препращат към модела, данните за обучение и контекста на обяснението. Това води до множество стойности на Shapley, използвани за обяснение на прогнозата на модела,
което е донякъде жалко, като се има предвид свойството за уникалност на Shapley. Задълбочено обсъждане на тази тема може да се намери в „Многото стойности на Шепли за обяснение на модела“ от Мукунд Сундарараджан и Амир Найми. Нашите методи попадат в категорията Baseline Shapley и поддържат множество едновременни базови линии в различни модалности на входни данни.

Сега, когато нашият модел е разгърнат, можем да получим локалните атрибути от тетрадка на 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’)

За повече информация относно използването на извадкови глобални приписвания на Shapley, моля, вижте този документ.

Заключение

Това е! В тази публикация показахме как да разположим обясними модели в Google Cloud Platform с помощта на Explainable AI. Инструментът Explainable AI позволява на потребителите да получат локални обяснения от внедрен модел. Тези обяснения могат да се комбинират заедно, за да осигурят глобална интерпретируемост. В допълнение към стъпките по-горе, можете също да разгледате „инструмента Какво-Ако“, за да проверите и интерпретирате вашия модел.

Допълнителни ресурси

  • „Обяснение на моделни прогнози с Google AI Platform“
  • „Откриване на измами и обясним AI“
  • „Бяла книга за обяснение на Google AI“
  • „Интерпретируемият ML на Кристофър Молнар“