Изучите сетевые предсказания Используя LIME

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

Глубокие нейронные сети являются очень комплексными, и их решения может быть трудно интерпретировать. Метод LIME аппроксимирует поведение классификации глубокой нейронной сети с помощью более простого, большего количества поддающейся толкованию модели, такой как дерево регрессии. Интерпретация решений об этой более простой модели обеспечивает понимание решений о нейронной сети [1]. Простая модель используется, чтобы определить важность функций входных данных как прокси для важности функций к глубокой нейронной сети.

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

Deep Learning Toolbox обеспечивает imageLIME функция, чтобы вычислить карты важности функции, определенной методом LIME. Алгоритм LIME для изображений работает:

  • Сегментация изображения в функции.

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

  • Классификация синтетического продукта отображает с глубокой сетью.

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

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

Можно сравнить результаты метода LIME с другими explainability методами, такими как чувствительность поглощения газов или CAM градиента. Для примеров того, как использовать эти связанные методы, смотрите следующие примеры.

Загрузите предварительно обученную сеть и изображение

Загрузите предварительно обученную сеть GoogLeNet.

net = googlenet;

Извлеките входной размер изображений и выходные классы сети.

inputSize = net.Layers(1).InputSize(1:2);
classes = net.Layers(end).Classes;

Загрузите изображение. Изображение имеет ретривера по имени Шерлок. Измените размер изображения к сетевому входному размеру.

img = imread("sherlock.jpg");
img = imresize(img,inputSize);

Классифицируйте изображение и отобразите эти три класса с самой высокой классификационной оценкой в заголовке изображений.

[YPred,scores] = classify(net,img);
[~,topIdx] = maxk(scores, 3);
topScores = scores(topIdx);
topClasses = classes(topIdx);

imshow(img)
titleString = compose("%s (%.2f)",topClasses,topScores');
title(sprintf(join(titleString, "; ")));

GoogLeNet классифицирует Шерлока как golden retriever. Понятно, сеть также определяет высокую вероятность Labrador retriever класс. Можно использовать imageLIME понять, который части изображения сеть используют, чтобы принять эти решения классификации.

Идентифицируйте области изображения сетевое использование для классификации

Можно использовать LIME, чтобы узнать, какие части изображения важны для класса. Во-первых, посмотрите на предсказанный класс golden retriever. Какие части изображения предлагают этот класс?

По умолчанию, imageLIME идентифицирует функции во входном изображении путем сегментации изображения на суперпиксели. Этот метод сегментации требует Image Processing Toolbox; однако, если у вас нет Image Processing Toolbox, можно использовать опцию "Segmentation","grid" сегментировать изображение на квадратные функции.

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

map = imageLIME(net,img,YPred);

Отобразите изображение Шерлока с наложенной картой LIME.

figure
imshow(img,'InitialMagnification',150)
hold on
imagesc(map,'AlphaData',0.5)
colormap jet
colorbar

title(sprintf("Image LIME (%s)", ...
    YPred))
hold off

Карты показывают, какие области изображения важны для классификации golden retriever. Красные области карты имеют более высокую важность — когда эти области удалены, счет к golden retriever класс понижается. Сеть фокусируется на поверхности собаки и ухе, чтобы сделать его предсказание золотистого ретривера. Это сопоставимо с другими explainability методами как чувствительность поглощения газов или CAM градиента.

Сравните с результатами различного класса

GoogLeNet предсказывает счет 55% для golden retriever класс, и 40% для Labrador retriever класс. Эти классы очень похожи. Можно определить, какие части собаки более важны для обоих классов путем сравнения карт LIME, вычисленных для каждого класса.

Используя те же настройки, вычислите карту LIME для Labrador retriever класс.

secondClass = topClasses(2);
map = imageLIME(net,img,secondClass);
figure;
imshow(img,'InitialMagnification',150)
hold on
imagesc(map,'AlphaData',0.5)
colormap jet
colorbar

title(sprintf("Image LIME (%s)",secondClass))
hold off

Для Labrador retriever класс, сеть более фокусируется на носу и глазах собаки, а не ухе. В то время как обе карты подсвечивают лоб собаки, сеть решила, что ухо собаки и затем указывает на golden retriever класс, в то время как глаз и нос собаки указывают на Labrador retriever класс.

Сравните LIME с CAM градиента

Другое изображение interpretability методы, такие как CAM градиента сверхдискретизировало получившуюся карту, чтобы произвести сглаженную тепловую карту важных областей изображения. Можно произвести подобно выглядящие карты с imageLIME, путем вычисления важности квадратных или прямоугольных функций и повышающей дискретизации получившейся карты.

Чтобы сегментировать изображение на сетку квадратных функций вместо неправильных суперпикселей, используйте "Segmentation","grid" пара "имя-значение". Сверхдискретизируйте вычисленную карту, чтобы совпадать с разрешением изображения с помощью бикубической интерполяции установкой "OutputUpsampling","bicubic".

Чтобы увеличить разрешение первоначально вычисленной карты, увеличьте число функций к 100 путем определения "NumFeatures",100 пара "имя-значение". Когда изображение является квадратным, это производит 10 10 сетка функций.

Метод LIME генерирует синтетические изображения на основе исходного наблюдения путем случайного выбирания некоторых признаков и заменяющий все пиксели в тех функциях со средним пикселем изображения, эффективно удаляя ту функцию. Увеличьте число случайных выборок к 6 000 установкой "NumSamples",6000. Когда вы увеличиваете число функций, увеличивание числа выборок обычно дает лучшие результаты.

По умолчанию imageLIME функционируйте использует дерево регрессии в качестве его простой модели. Вместо этого подбирайте модель линейной регрессии с регрессией лассо установкой "Model","linear".

map = imageLIME(net,img,"golden retriever", ...
    "Segmentation","grid",...
    "OutputUpsampling","bicubic",...
    "NumFeatures",100,...
    "NumSamples",6000,...
    "Model","linear");

imshow(img,'InitialMagnification', 150)
hold on
imagesc(map,'AlphaData',0.5)
colormap jet

title(sprintf("Image LIME (%s - linear model)", ...
    YPred))
hold off

Подобно карте градиента, вычисленной CAM градиента, метод LIME также строго идентифицирует ухо собаки как значительное к предсказанию golden retriever.

Отобразите только самые важные функции

Результаты LIME часто строятся путем показа только самых важных немногих функций. Когда вы используете imageLIME функция, можно также получить карту функций, использованных в расчете и расчетной важности каждой функции. Используйте эти результаты определить четыре самых важных суперпиксельных функции и отобразить только четыре самых важных функции в изображении.

Вычислите карту LIME и получите карту функции и расчетную важность каждой функции.

[map,featureMap,featureImportance] = imageLIME(net,img,YPred);

Найдите индексы лучших четырех функций.

numTopFeatures = 4;
[~,idx] = maxk(featureImportance,numTopFeatures);

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

mask = ismember(featureMap,idx);
maskedImg = uint8(mask).*img;

figure
imshow(maskedImg);

title(sprintf("Image LIME (%s - top %i features)", ...
    YPred, numTopFeatures))

Ссылки

[1] Рибейру, Марко Тулио, Сэмир Сингх и Карлос Гуестрин. “‘Почему я должен Доверять Вам?’: Объяснение Предсказаний Любого Классификатора”. В Продолжениях 22-й Международной конференции ACM SIGKDD по вопросам Открытия Знаний и Анализа данных, 1135–44. Сан-Франциско Калифорнийские США: ACM, 2016. https://doi.org/10.1145/2939672.2939778.

Смотрите также

| | | |

Похожие темы