오늘은 XAI 분야에서 유명한 논문 중 하나인, LIME에 대해서 다뤄보고자 한다.
LIME은 Local Interpretable Model-Agnostic Explanations의 줄임말이다.
제목을 보면 이 모델의 특징을 잘 알 수 있는데,
1. Local한 부분을 이용한다.
2. Model-Agnostic 하다.
라는 큰 특징 2가지가 보인다.
원문은 다음과 같다(Ribeiro et al., 2016).
https://arxiv.org/abs/1602.04938
"Why Should I Trust You?": Explaining the Predictions of Any Classifier
Despite widespread adoption, machine learning models remain mostly black boxes. Understanding the reasons behind predictions is, however, quite important in assessing trust, which is fundamental if one plans to take action based on a prediction, or when ch
arxiv.org
LIME의 개요
LIME은 사람들이 이해할 수 있는 representation을 만드는 데에 집중하기 위해서, pixel 하나하나의 단위가 아닌, patch of pixels, 즉 superpixel을 이용한다. 그래서 이미지 속 superpixel들이 output에 기여하는 가중치를 찾는 것이 목표이다. 그림을 한 번 보자.

이런 식으로 pixel 뭉치들 (superpixel)이 하나의 feature 처럼 역할을 하면서, 최종 output에 대한 각각의 가중치를 찾아내는 것이다. 최종 output label에 대한 각각의 가중치는 Linear model를 fit 시켜서 찾아낸다.
여기서 Linear model이 나오는 이유가 있다. 우리는 model의 global한 decision boundary를 모른다. model classifier의 decision boundary는 neural network가 복잡해짐에 따라 같이 너무 복잡해지기 때문이다.
그래서 LIME은 국소적인 부분에 대해 (Local) non-linear한 decision boundary를, linear하게 근사시켜서 "Locally faithful" 한 explanation을 내는 것이다.
다음의 사진을 보자.

모델의 global한 decision boundary는 분홍색과 파란색의 경계이다. 하지만 우리는 이걸 알 수가 없다. 너무 complex하기 때문이다. 그래서 LIME은 이걸 모르는 대신, 일부 부위에서 linear model을 이용해서 approximate하는 전략을 취한다. 볼드 처리된 빨간 십자가 모양이 우리가 설명하고자 하는 하나의 image이다. 그리고 그 십자가를 이용해서 instance들을 sample한 뒤 (주변의 다른 십자가들), linear model을 통해 instance들의 가중치를 얻는 것이다. 이 instance들은 우리의 이미지를 설명하는 부분들이 된다.
이게 LIME의 개요이긴 한데, 바로 머리에 와닿지는 않을 것이다. LIME의 pseudo code와 method들을 보면서 하나하나 이해해보자.
LIME의 Method와 과정
Pseudo code를 line-by-line으로 따라가보면서, LIME이 어떻게 이뤄지는 지를 보려고 한다.

1. 일단 pseudo code에서 빠진 부분이 있는데, 바로 original image에서 superpixel을 얻는 방법이다. 이 "방법"은 pseudo code의 "Permute" 라고 되어있다. LIME에서는 SLIC(Simple Linear Iterative Clustering)과 같은 방법을 통해 원본 이미지를 superpixel들로 segmentation 한다. 이 superpixel들은 색이 비슷하고 거리가 가까운 pixel들끼리 모아놓은 "픽셀 뭉치" 들이다.
LIME에서는 individual pixel을 기준으로 하지 않고, 모든걸 이 superpixel을 기준으로 진행한다. 이 superpixel들은 이미지의 feature라고 생각하면 편하다.

2. 첫 줄부터 보자. 원래 이미지인 x를 model classifier인 f에 넣을 것이다. 그렇게 하면 label이 하나 나온다. 그 label을 y_bar 라고 한다. 이 label이 우리가 "관심있는" label이다.

3. 그 다음은 superpixel을 몇 개까지 sample할 건지를 골라야 한다. 그게 n이다. 그리고 원본 이미지를 permute 할 것이다 (위의 1번 항목 참조)
원본 이미지를 permute해서, 우리는 n개의 permuted 된 image를 만들 것이다. 지금부터 원본 이미지를 permute하는 과정을 알아보자.
3.1 맨 처음에 SLIC으로 얻은 superpixel들의 목록이 있을 것이다. 예를 들어, [superpixel1, superpixel2, superpixel3 ...] 이렇게.
그걸로 binary vector를 만들 건데, superpixel1이 이미지에 있으면 1, 없으면 0 이런식으로 binary vector를 만든다.
예를 들어, superpixel1만 있는 permuted된 이미지를 만들고 싶으면, [1, 0, 0 ...] 의 binary vector 형태가 될 것이다.
pseudo code에도 볼 수 있듯이 이 superpixel들은 random으로 고른다.
3.2 이렇게 얻은 n개의 binary vector를 원본 이미지에 곱해서 "Masking" 해주면, 여러 개의 permuted된 이미지가 생긴다(어떤 superpixel이 있냐 없냐를 기준으로 하는).
그래서, 다시 pseudo code로 돌아가면, 원본 이미지를 permute해서 p_i를 얻는 과정까지 했다. (Line 3)

4. 이제 이 부분인데, 얻은 permuted image들을 다시 모델에 넣는다. 그러면 모델은 이 permuted image가 어떤 label일지, 여러 label들에 대해서 확률값을 내놓을 것이다. 그러면 우리는, 우리가 "관심있는" label인 원본 이미지의 label, 즉 y_bar에 대한 p의 확률값 (또는 label)만 가져갈 것이다.
예를 들어, 원본 이미지가 강아지가 기타를 치는 사진이라고 해보자. 이 원본 이미지를 넣었을 때 model이 "dog" 라는 label을 냈다고 가정해보자. "dog"가 우리가 관심있는 label이다.
그리고 원본 이미지를 permute해서 기타만 segmentation된 permuted image가 있다고 가정해보자. 그러면 이걸 다시 모델에 넣으면 "guitar" label의 확률이 가장 높을 것이고, "dog" label에 대한 확률값도 어느 정도 나올 것이다. 우리는 여기서 가장 높은 확률값이 guitar에 대한 확률값임에도 불구하고 이걸 버리고, dog label에 대한 확률값만 쓸 것이다. 이게 pseudo code의 obs이다.
그리고 원본 label과 permuted 된 lable의 거리를 잰다 (얼마나 가까운지).

5. 위에서 구한 거리를 이용해서 similarity score를 구한다. 이 similarity score는 기존에 우리가 가지고 있던 dist, 즉 거리값을 weight로 바꿔준다. 이 과정은 exponential kernel을 이용해서 이루어진다. 이렇게 나온 weight는, perturbed image p_i에 대한 weight이다 (원본 이미지와 가까우면 높은 가중치를 준다).

6. pseudo code에 Pick() 이라고 적혀있는데, 가장 중요한 K개의 superpixel을 솎아내는 과정이다. 5번 과정까지 하면,

각 perturbed image와 그에 해당하는 가중치들을 쭉 얻게 될 것이다. 여기서 K-LASSO 방법을 사용하여 가장 가중치가 높은 K개의 superpixel들을 뽑아낸다.
7. 이렇게 얻은 K개의 superpixel을 이용해, 그리고 simscore을 가중치로 사용해서 linear model을 다시 fit한다.

Linear model을 fit하는 과정은,

다음과 같은 weighted least sqaures regression을 푸는 것과 같다. 위의 Loss를 minimize하면 된다.
요약
LIME의 과정을 매우 간단하게 요약해보면 다음과 같다.

LIME의 Loss
우리는 방금 위에서 LIME의 loss 중 일부분을 보았다. Local한 부분의 linear model의 loss 부분을 본 것이다. 제대로 정리하자면, LIME의 총 objective는 다음과 같다.

여기서 소문자 g는 local, interpretable model chosen from a family G이다. 다시 말해, 쓸 수 있는 모델의 종류 G (decision tree, linear model, 등등등)에서 하나 뽑아온 모델 g이다.
오메가(g)는 뽑아온 모델 g의 complexity이다.
저자들은 이것을 Fidelity-Interpretability Trade-off라고 부르는데, 이는 복잡한 g 모델을 사용할 수록 loss term이 낮아지지만, 반대로 간단한 g 모델을 사용하면 loss term이 올라가기에, 어느 정도의 trade-off가 존재한다는 뜻이다.
추가 설명 of LIME

이 사진을 다시 보자. 처음에는 permutation된 이미지를 생성하는거랑, local에서 intepretable한 linear model을 만드는 행위랑 이떻게 연결시켜서 이해해야할 지 감이 잘 안 올 것이다.
위의 볼드체의 빨간 색 십자가가 원본 이미지, 그리고 근처의 일반적 빨간 십자가들이 permutation된 이미지들이다. 우리는 이 샘플들에 원본과 얼마나 유사한지에 대한 가중치를 부여하고, 이를 이용해서 linear model을 만든다. 이 linear model은 적어도 "빨간 십자가 주변에서는 원래의 classifier f를 잘 흉내내기" 때문에 "locally faithful" 하다고 할 수 있는 것이다.
GPT 신의 설명을 들여다보면,

이렇게 되는 것이다.
Results
저자들은 논문에서 SP-LIME도 소개하는데, diverse set of representation들을 선택함으로써 local view를 벗어나 global view도 얻을 수 있다고 한다.
장점:

단점:

단점으로는 local에서만 믿을 만하다는 점, 이미지를 permutation하는 과정에 너무 의존한다는 점, computation 문제가 있다는 점, superpixel이 의미 없는 애들일 수 있다는 점, 그리고 random하게 permutation하기 때문에 매번 시행마다 결과가 달라질 수 있다는 점들이 있다.
단점이 꽤 많은데, 이러한 단점들을 다루거나 도메인 확장을 한 후속 연구들도 꽤 많은 편이다.
SP-LIME
KL-LIME
QLIME
MPS-LIME
등등이 있다.
간단한 테스트
실제 코드 구현을 통해 간단한 테스트를 해보았는데, 잘되진 않았던 것 같다.
https://github.com/ShinyJay2/Explainable-AI/tree/main/LIME
Explainable-AI/LIME at main · ShinyJay2/Explainable-AI
Implementations of XAI. Contribute to ShinyJay2/Explainable-AI development by creating an account on GitHub.
github.com




'Explainable AI' 카테고리의 다른 글
[논문리뷰] SHAP (SHapley Additive exPlanations) (1) | 2025.04.08 |
---|---|
[논문리뷰] Layer-wise Relevance Backpropagation (LRP) (0) | 2025.03.26 |
[논문리뷰] SmoothGrad: Removing noise by adding noise (0) | 2025.03.26 |
[논문리뷰] Saliency Map (0) | 2025.03.26 |
[논문리뷰] Activation Maximization (0) | 2025.03.25 |
오늘은 XAI 분야에서 유명한 논문 중 하나인, LIME에 대해서 다뤄보고자 한다.
LIME은 Local Interpretable Model-Agnostic Explanations의 줄임말이다.
제목을 보면 이 모델의 특징을 잘 알 수 있는데,
1. Local한 부분을 이용한다.
2. Model-Agnostic 하다.
라는 큰 특징 2가지가 보인다.
원문은 다음과 같다(Ribeiro et al., 2016).
https://arxiv.org/abs/1602.04938
"Why Should I Trust You?": Explaining the Predictions of Any Classifier
Despite widespread adoption, machine learning models remain mostly black boxes. Understanding the reasons behind predictions is, however, quite important in assessing trust, which is fundamental if one plans to take action based on a prediction, or when ch
arxiv.org
LIME의 개요
LIME은 사람들이 이해할 수 있는 representation을 만드는 데에 집중하기 위해서, pixel 하나하나의 단위가 아닌, patch of pixels, 즉 superpixel을 이용한다. 그래서 이미지 속 superpixel들이 output에 기여하는 가중치를 찾는 것이 목표이다. 그림을 한 번 보자.

이런 식으로 pixel 뭉치들 (superpixel)이 하나의 feature 처럼 역할을 하면서, 최종 output에 대한 각각의 가중치를 찾아내는 것이다. 최종 output label에 대한 각각의 가중치는 Linear model를 fit 시켜서 찾아낸다.
여기서 Linear model이 나오는 이유가 있다. 우리는 model의 global한 decision boundary를 모른다. model classifier의 decision boundary는 neural network가 복잡해짐에 따라 같이 너무 복잡해지기 때문이다.
그래서 LIME은 국소적인 부분에 대해 (Local) non-linear한 decision boundary를, linear하게 근사시켜서 "Locally faithful" 한 explanation을 내는 것이다.
다음의 사진을 보자.

모델의 global한 decision boundary는 분홍색과 파란색의 경계이다. 하지만 우리는 이걸 알 수가 없다. 너무 complex하기 때문이다. 그래서 LIME은 이걸 모르는 대신, 일부 부위에서 linear model을 이용해서 approximate하는 전략을 취한다. 볼드 처리된 빨간 십자가 모양이 우리가 설명하고자 하는 하나의 image이다. 그리고 그 십자가를 이용해서 instance들을 sample한 뒤 (주변의 다른 십자가들), linear model을 통해 instance들의 가중치를 얻는 것이다. 이 instance들은 우리의 이미지를 설명하는 부분들이 된다.
이게 LIME의 개요이긴 한데, 바로 머리에 와닿지는 않을 것이다. LIME의 pseudo code와 method들을 보면서 하나하나 이해해보자.
LIME의 Method와 과정
Pseudo code를 line-by-line으로 따라가보면서, LIME이 어떻게 이뤄지는 지를 보려고 한다.

1. 일단 pseudo code에서 빠진 부분이 있는데, 바로 original image에서 superpixel을 얻는 방법이다. 이 "방법"은 pseudo code의 "Permute" 라고 되어있다. LIME에서는 SLIC(Simple Linear Iterative Clustering)과 같은 방법을 통해 원본 이미지를 superpixel들로 segmentation 한다. 이 superpixel들은 색이 비슷하고 거리가 가까운 pixel들끼리 모아놓은 "픽셀 뭉치" 들이다.
LIME에서는 individual pixel을 기준으로 하지 않고, 모든걸 이 superpixel을 기준으로 진행한다. 이 superpixel들은 이미지의 feature라고 생각하면 편하다.

2. 첫 줄부터 보자. 원래 이미지인 x를 model classifier인 f에 넣을 것이다. 그렇게 하면 label이 하나 나온다. 그 label을 y_bar 라고 한다. 이 label이 우리가 "관심있는" label이다.

3. 그 다음은 superpixel을 몇 개까지 sample할 건지를 골라야 한다. 그게 n이다. 그리고 원본 이미지를 permute 할 것이다 (위의 1번 항목 참조)
원본 이미지를 permute해서, 우리는 n개의 permuted 된 image를 만들 것이다. 지금부터 원본 이미지를 permute하는 과정을 알아보자.
3.1 맨 처음에 SLIC으로 얻은 superpixel들의 목록이 있을 것이다. 예를 들어, [superpixel1, superpixel2, superpixel3 ...] 이렇게.
그걸로 binary vector를 만들 건데, superpixel1이 이미지에 있으면 1, 없으면 0 이런식으로 binary vector를 만든다.
예를 들어, superpixel1만 있는 permuted된 이미지를 만들고 싶으면, [1, 0, 0 ...] 의 binary vector 형태가 될 것이다.
pseudo code에도 볼 수 있듯이 이 superpixel들은 random으로 고른다.
3.2 이렇게 얻은 n개의 binary vector를 원본 이미지에 곱해서 "Masking" 해주면, 여러 개의 permuted된 이미지가 생긴다(어떤 superpixel이 있냐 없냐를 기준으로 하는).
그래서, 다시 pseudo code로 돌아가면, 원본 이미지를 permute해서 p_i를 얻는 과정까지 했다. (Line 3)

4. 이제 이 부분인데, 얻은 permuted image들을 다시 모델에 넣는다. 그러면 모델은 이 permuted image가 어떤 label일지, 여러 label들에 대해서 확률값을 내놓을 것이다. 그러면 우리는, 우리가 "관심있는" label인 원본 이미지의 label, 즉 y_bar에 대한 p의 확률값 (또는 label)만 가져갈 것이다.
예를 들어, 원본 이미지가 강아지가 기타를 치는 사진이라고 해보자. 이 원본 이미지를 넣었을 때 model이 "dog" 라는 label을 냈다고 가정해보자. "dog"가 우리가 관심있는 label이다.
그리고 원본 이미지를 permute해서 기타만 segmentation된 permuted image가 있다고 가정해보자. 그러면 이걸 다시 모델에 넣으면 "guitar" label의 확률이 가장 높을 것이고, "dog" label에 대한 확률값도 어느 정도 나올 것이다. 우리는 여기서 가장 높은 확률값이 guitar에 대한 확률값임에도 불구하고 이걸 버리고, dog label에 대한 확률값만 쓸 것이다. 이게 pseudo code의 obs이다.
그리고 원본 label과 permuted 된 lable의 거리를 잰다 (얼마나 가까운지).

5. 위에서 구한 거리를 이용해서 similarity score를 구한다. 이 similarity score는 기존에 우리가 가지고 있던 dist, 즉 거리값을 weight로 바꿔준다. 이 과정은 exponential kernel을 이용해서 이루어진다. 이렇게 나온 weight는, perturbed image p_i에 대한 weight이다 (원본 이미지와 가까우면 높은 가중치를 준다).

6. pseudo code에 Pick() 이라고 적혀있는데, 가장 중요한 K개의 superpixel을 솎아내는 과정이다. 5번 과정까지 하면,

각 perturbed image와 그에 해당하는 가중치들을 쭉 얻게 될 것이다. 여기서 K-LASSO 방법을 사용하여 가장 가중치가 높은 K개의 superpixel들을 뽑아낸다.
7. 이렇게 얻은 K개의 superpixel을 이용해, 그리고 simscore을 가중치로 사용해서 linear model을 다시 fit한다.

Linear model을 fit하는 과정은,

다음과 같은 weighted least sqaures regression을 푸는 것과 같다. 위의 Loss를 minimize하면 된다.
요약
LIME의 과정을 매우 간단하게 요약해보면 다음과 같다.

LIME의 Loss
우리는 방금 위에서 LIME의 loss 중 일부분을 보았다. Local한 부분의 linear model의 loss 부분을 본 것이다. 제대로 정리하자면, LIME의 총 objective는 다음과 같다.

여기서 소문자 g는 local, interpretable model chosen from a family G이다. 다시 말해, 쓸 수 있는 모델의 종류 G (decision tree, linear model, 등등등)에서 하나 뽑아온 모델 g이다.
오메가(g)는 뽑아온 모델 g의 complexity이다.
저자들은 이것을 Fidelity-Interpretability Trade-off라고 부르는데, 이는 복잡한 g 모델을 사용할 수록 loss term이 낮아지지만, 반대로 간단한 g 모델을 사용하면 loss term이 올라가기에, 어느 정도의 trade-off가 존재한다는 뜻이다.
추가 설명 of LIME

이 사진을 다시 보자. 처음에는 permutation된 이미지를 생성하는거랑, local에서 intepretable한 linear model을 만드는 행위랑 이떻게 연결시켜서 이해해야할 지 감이 잘 안 올 것이다.
위의 볼드체의 빨간 색 십자가가 원본 이미지, 그리고 근처의 일반적 빨간 십자가들이 permutation된 이미지들이다. 우리는 이 샘플들에 원본과 얼마나 유사한지에 대한 가중치를 부여하고, 이를 이용해서 linear model을 만든다. 이 linear model은 적어도 "빨간 십자가 주변에서는 원래의 classifier f를 잘 흉내내기" 때문에 "locally faithful" 하다고 할 수 있는 것이다.
GPT 신의 설명을 들여다보면,

이렇게 되는 것이다.
Results
저자들은 논문에서 SP-LIME도 소개하는데, diverse set of representation들을 선택함으로써 local view를 벗어나 global view도 얻을 수 있다고 한다.
장점:

단점:

단점으로는 local에서만 믿을 만하다는 점, 이미지를 permutation하는 과정에 너무 의존한다는 점, computation 문제가 있다는 점, superpixel이 의미 없는 애들일 수 있다는 점, 그리고 random하게 permutation하기 때문에 매번 시행마다 결과가 달라질 수 있다는 점들이 있다.
단점이 꽤 많은데, 이러한 단점들을 다루거나 도메인 확장을 한 후속 연구들도 꽤 많은 편이다.
SP-LIME
KL-LIME
QLIME
MPS-LIME
등등이 있다.
간단한 테스트
실제 코드 구현을 통해 간단한 테스트를 해보았는데, 잘되진 않았던 것 같다.
https://github.com/ShinyJay2/Explainable-AI/tree/main/LIME
Explainable-AI/LIME at main · ShinyJay2/Explainable-AI
Implementations of XAI. Contribute to ShinyJay2/Explainable-AI development by creating an account on GitHub.
github.com




'Explainable AI' 카테고리의 다른 글
[논문리뷰] SHAP (SHapley Additive exPlanations) (1) | 2025.04.08 |
---|---|
[논문리뷰] Layer-wise Relevance Backpropagation (LRP) (0) | 2025.03.26 |
[논문리뷰] SmoothGrad: Removing noise by adding noise (0) | 2025.03.26 |
[논문리뷰] Saliency Map (0) | 2025.03.26 |
[논문리뷰] Activation Maximization (0) | 2025.03.25 |