В этом примере показано, как использовать локально поддающиеся толкованию объяснения модели агностические (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
класс.
Другое изображение 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.
DAGNetwork
| googlenet
| occlusionSensitivity
| imageLIME
| gradCAM