Осмыслите сетевые Предсказания с помощью 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 определяет функции в вход изображении путем сегментации изображения в суперпиксели. Этот метод сегментации требует 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 класс падает. Сеть фокусируется на лице и ухе собаки, чтобы сделать своё предсказание золотого ретривера. Это согласуется с другими методами объяснения, такими как чувствительность к окклюзии или 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.

См. также

| | | |

Похожие темы