exponenta event banner

Понимание сетевых прогнозов с использованием LIME

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

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

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

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

  • Сегментирование изображения на элементы.

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

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

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

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

Можно сравнить результаты метода LIME с другими методами объяснения, такими как чувствительность к окклюзии или Grad-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 идентифицирует элементы входного изображения путем сегментирования изображения на суперпиксели. Для этого метода сегментации требуется инструментарий обработки изображений; однако, если у вас нет панели инструментов обработки изображений, вы можете использовать эту опцию "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 класс идет вниз. Сеть фокусируется на лице и ухе собаки, чтобы сделать свой прогноз золотистого ретривера. Это согласуется с другими методами объяснения, такими как чувствительность к окклюзии или Grad-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 с Grad-CAM

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

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

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

Метод LIME генерирует синтетические изображения на основе первоначального наблюдения путем случайного выбора некоторых признаков и замены всех пикселей в этих признаках средним пикселем изображения, эффективно удаляя этот признак. Увеличение числа случайных выборок до 6000 путем установки "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

Подобно градиентной карте, вычисленной Grad-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.

См. также

| | | |

Связанные темы