일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- XGBoost
- Explainable AI
- data science
- Machine Learning
- lime
- Gradient Boosting Machine
- Back-propagation
- deep learning
- Gradient Tree Boosting
- Today
- Total
Kicarussays
Deep SHAP (DeepLIFT + Shapley value) 작동 방식 본문
SHAP 설명 포스팅: https://kicarussays.tistory.com/32
DeepLIFT 설명 포스팅: https://kicarussays.tistory.com/33
LIME 설명 포스팅: https://kicarussays.tistory.com/29
Deep SHAP은 SHAP과 DeepLIFT를 적절히 조합하여 모델의 Explainer를 산출하는 메소드입니다.
작동방식을 설명하기 위해 간단한 예시 하나를 봅시다.
아주 단순한 Neural network 입니다. input으로 $y = (y_1, y_2)$를 받고, $f_1, f_2$에 해당하는 은닉층을 지나 최종적으로 $f(y)$를 산출합니다. 이 단순한 모델로부터 output을 1로 고정하고, 1에 해당하는 output을 산출하기 위해 각 layer의 노드들이 어떤 contribution score를 갖는지 계산하는 것이 DeepLIFT 였습니다. 이 모델로부터 DeepLIFT 수행 과정을 수식으로 살펴보면 다음과 같습니다.
이 수식을 토대로 Deep SHAP의 작동방식을 살펴보도록 합시다.
(13), (14)번 식
output layer ($f_3$)로 진입하기 직전의 layer에 해당하는 $f_1, f_2$로부터 산출된 $x_1, x_2$의 $f(y)$에 대한 각각의 contribution score ($\phi_i (f_3, x)$)를 구합니다.
- contribution score로 Shapley value를 채택합니다. 단순히 output layer와 그 직전 layer에 대해서 산출합니다.
- 아무래도 직전 layer의 노드 수가 적어야 Shapley value를 구하는 계산량이 줄어들 것입니다. 이러한 부분을 고려해서 모델을 구성하는 것이 필요할 것으로 보입니다.
- Shapley value 계산식
- 이 식에서 $|F|$는 직전 layer의 노드 개수에 해당할 것입니다. Shapley value를 구하기 위해 수행해야 하는 계산이 총 $2^{|F|}$라는 것을 감안하면, 노드 수가 왜 적어야 하는지 이해가 될 것입니다.
(15), (16)번 식
직전 layer에서 Shapley value를 계산한 다음, DeepLIFT의 Chain rule을 활용하여 전체 모델에 대한 Contribution score를 모두 구합니다.
Kernel SHAP은 LIME의 Loss 함수와 kernel 함수를 직접 조정하였고, 해당 Loss, kernel 함수를 사용했을 때 산출된 Explainer의 coefficient들이 Shapley value와 일치한다는 것을 증명했습니다. 이와 달리, Deep SHAP은 별다른 수리적 메커니즘 적용 없이 단순히 모델의 끝 단에서만 Shapley value를 구하고, 나머지는 DeepLIFT의 방식을 그대로 따라갔습니다.
물론 DeepLIFT 자체가 수리적으로 합리적인 알고리즘이긴 하지만, Shapley value와 DeepLIFT 사이의 간극을 수리적으로 메꾸는 시도가 없었다는 점이 아쉬운 부분 중 하나인 것 같습니다.