들어가며
딥러닝으로 이미지 분류 모델 돌려보신 분들은 아실 거예요~ CNN이 정말 신기하게도 어떤 피처가 중요한지 알아서 척척 학습한다는 거! 근데 막상 "왜 이 사진을 고양이라고 판단했어?"라고 물어보면... 답을 못 해요 ㅠㅠ 이게 바로 블랙박스 문제랍니다!!
오늘은 CNN이 어떻게 피처 중요도를 학습하는지, 그런데도 왜 블랙박스가 되는지, 그리고 이걸 해결하기 위한 SHAP가 뭔지 제대로 파헤쳐볼게요! 실무에서 바로 써먹을 수 있는 내용들이니까 끝까지 봐주세용~
CNN은 정말 똑똑하게 피처를 학습해요!
필터가 자동으로 피처를 찾아낸다고?
CNN의 핵심은 바로 필터(filter) 또는 커널(kernel)이에요. 요놈들이 이미지 위를 쭉~ 슬라이딩하면서 특정 패턴을 감지하는 거죠. 옛날에는 사람이 손수 "세로선 감지 필터", "가로선 감지 필터" 이런 식으로 만들었는데요, CNN은 요런 필터들을 학습 과정에서 자동으로 만들어내요!
예를 들어볼게요. 강아지 사진을 분류하는 CNN을 학습시킨다고 하면
- 첫 번째 레이어: 엣지, 색상 변화 같은 기초적인 피처 감지
- 중간 레이어: 귀 모양, 코 모양 같은 조금 복잡한 패턴 감지
- 마지막 레이어: "강아지"라는 복잡한 객체 인식
이렇게 층층이 쌓이면서 점점 더 추상적이고 복잡한 피처를 학습하는 거랍니다!
Feature Map이 뭐냐고요?
필터를 이미지에 적용하면 Feature Map (또는 Activation Map)이라는 게 나와요. 요게 바로 "이 위치에서 이 피처가 얼마나 강하게 나타나는가"를 보여주는 지도 같은 거예요!
예를 들어 세로선 필터를 고양이 사진에 적용하면, 고양이의 수염 부분에서 강하게 활성화되겠죠? 이런 식으로 CNN은 이미지의 중요한 부분을 자동으로 찾아내는 거랍니다 ^^
그런데 왜 블랙박스가 될까요?
복잡하게 얽힌 결정 과정
자, 여기서 문제가 생겨요! CNN이 피처를 잘 학습하는 건 맞는데... 그 과정이 너~~무 복잡해서 사람이 이해할 수가 없다는 거죠 ㅠㅠ
왜냐하면요
- 여러 층의 비선형 변환: ReLU 같은 활성화 함수를 거치면서 계속 비선형적으로 변환돼요
- 엄청난 파라미터 수: 수백만 개의 가중치가 복잡하게 상호작용해요
- 명확하지 않은 뉴런의 역할: 각 뉴런이 "정확히 뭘 하는지" 말하기 어려워요
특히 gradient descent로 학습하면서 각 뉴런이 "이건 내가 할게, 저건 너가 할게" 이렇게 명확하게 역할 분담을 하는 게 아니라, 다들 조금씩 여기저기 기여하는 식이 되어버려요. 그래서 나중에 보면 "어? 이 뉴런은 대체 뭘 보고 있는 거야?"라는 생각이 들게 되는 거죠!
진짜 문제는 설명 불가능
의료 영상 진단이나 자율주행 같은 중요한 분야에서는 "왜 그렇게 판단했는지" 설명할 수 없으면 큰일나요! 암 진단 AI가 "이 환자는 암이에요"라고 했는데 "왜요?"라고 물으면 "그냥요... 제가 학습한 결과요..."라고 하면 안 되잖아요 ^^;
이게 바로 블랙박스 문제가 심각한 이유랍니다!
| 특성 | 설명 |
|---|---|
| 피처 학습 능력 | CNN은 자동으로 중요한 피처를 학습함 ✅ |
| 성능 | 이미지 분류 같은 태스크에서 높은 정확도 ✅ |
| 해석 가능성 | 왜 그런 결정을 내렸는지 설명 불가능 ❌ |
| 신뢰성 확보 | 의료/금융 같은 중요 분야 적용 어려움 ❌ |
SHAP가 등장했다!
SHAP가 뭐길래?
SHAP는 SHapley Additive exPlanations의 약자예요! 게임 이론에서 나온 Shapley Value라는 개념을 머신러닝 모델 설명에 적용한 거랍니다.
간단히 설명하면요, 축구 경기에서 "각 선수가 팀 승리에 얼마나 기여했는가"를 계산하는 것처럼, 각 피처(또는 픽셀)가 모델의 예측에 얼마나 기여했는가를 수치로 계산해주는 거예요!
게임 이론? 그게 뭔데요?
Shapley Value는 원래 경제학자 Lloyd Shapley가 만든 개념이에요. 여러 플레이어가 협력해서 게임을 하는데, 각자의 기여도를 공정하게 나누는 방법이죠.
예를 들어볼게요:
- A, B, C 세 명이 협력해서 1000만원을 벌었어요
- A 혼자서는 100만원, B 혼자서는 200만원, C 혼자서는 150만원을 벌 수 있어요
- A+B는 500만원, B+C는 600만원, A+C는 400만원을 벌 수 있어요
- 그럼 1000만원을 셋이서 어떻게 나눠야 공정할까요?
Shapley Value는 모든 가능한 조합을 고려해서 각자의 기여도를 계산해요! SHAP도 똑같은 원리로, 모든 피처 조합을 고려해서 각 피처가 예측에 얼마나 기여했는지 계산하는 거랍니다 ^^
CNN에서는 어떻게 쓸까요?
이미지 분류에서 SHAP를 쓰면 이런 식이에요:
- CNN 모델이 "이건 강아지야!"라고 예측했어요
- SHAP는 "강아지라고 판단한 이유가 뭐냐면... 귀 부분(+0.3), 코 부분(+0.5), 꼬리 부분(+0.2) 때문이야!"라고 알려줘요
- 각 픽셀마다 기여도를 색깔로 표시해서 히트맵으로 보여줘요
요런 느낌으로 시각적으로 보여주니까 엄청 직관적이죠!
SHAP의 장단점
| 장점 | 단점 |
|---|---|
| Model-agnostic (어떤 모델에도 적용 가능) | 계산량이 많아서 느림 ⚠️ |
| 이론적으로 탄탄함 (게임 이론 기반) | 큰 이미지나 많은 피처에서는 더 느림 |
| 각 피처의 기여도를 수치화 | 인과관계가 아닌 상관관계만 보여줌 |
| 시각화가 직관적 | - |
실무에서는 어떻게 쓸까요?
Python으로 SHAP 써보기!
실제 코드를 볼까요? CNN 모델에 SHAP를 적용하는 건 생각보다 간단해요!
import shap
import numpy as np
from tensorflow import keras
# 1. CNN 모델 불러오기 (이미 학습된 모델이라고 가정)
model = keras.models.load_model('my_cnn_model.h5')
# 2. 배경 데이터 준비하기 (학습 데이터에서 랜덤 샘플링)
background = x_train[np.random.choice(x_train.shape[0], 100, replace=False)]
# 3. SHAP Explainer 만들기 (DeepExplainer를 많이 써요)
explainer = shap.DeepExplainer(model, background)
# 4. 설명하고 싶은 이미지 선택
test_image = x_test[42] # 42번째 테스트 이미지
# 5. SHAP values 계산하기!
shap_values = explainer.shap_values(test_image.reshape(1, -1))
# 6. 시각화하기
shap.image_plot(shap_values, test_image.reshape(1, -1))
요렇게 하면 끝! 정말 간단하죠?
결과 해석하는 법
SHAP 시각화를 보면 이런 걸 알 수 있어요:
- 빨간색 픽셀: 이 부분이 해당 클래스로 예측하는 데 긍정적으로 기여했어요!
- 파란색 픽셀: 이 부분은 오히려 다른 클래스로 예측하려고 방해했어요
- 흰색/회색 픽셀: 별로 중요하지 않은 부분이에요
예를 들어 개vs고양이 분류 모델에서, 강아지 사진의 귀 부분이 빨갛게 표시되면 "귀 모양이 강아지라고 판단하는 데 중요했구나!"라고 이해할 수 있는 거죠!
다른 XAI 기법들과 비교
| 기법 | 특징 | CNN 적용 |
|---|---|---|
| SHAP | 게임 이론 기반, model-agnostic | ✅ DeepSHAP 사용 |
| Grad-CAM | Gradient 기반, CNN 특화 | ✅ 빠르고 효율적 |
| LIME | Local approximation | ✅ 가능하지만 느림 |
| Saliency Maps | Gradient 시각화 | ✅ 간단하지만 노이즈 많음 |
실무에서는 Grad-CAM이랑 SHAP를 같이 쓰는 경우가 많아요! Grad-CAM으로 빠르게 확인하고, 중요한 케이스는 SHAP로 자세히 분석하는 식이죠 ^^
주의할 점들!
SHAP를 맹신하면 안 돼요
SHAP가 좋긴 한데 완벽하진 않아요! 주의할 점들이 있답니다:
- 인과관계 vs 상관관계: SHAP는 상관관계만 보여줘요. "이 피처가 중요하다" ≠ "이 피처가 원인이다"
- 계산 비용: 큰 이미지나 복잡한 모델에서는 엄청 느려요 ㅠㅠ
- 해석의 함정: 사람이 보기에 이상한 부분이 중요하다고 나올 수 있어요 (모델의 편향을 반영할 수도!)
언제 쓰는 게 좋을까요?
요런 상황에서 SHAP가 특히 유용해요:
- 의료 영상 진단: "어느 부위를 보고 병을 진단했는지" 설명 필요
- 금융 신용 평가: "왜 대출 거부했는지" 설명 의무
- 제조업 불량 검출: "어느 부분이 불량인지" 파악 필요
- 모델 디버깅: "모델이 이상한 패턴을 학습했는지" 확인
마무리하며
오늘은 CNN이 피처 중요도를 자동으로 학습하지만 블랙박스가 되는 이유, 그리고 이를 해결하는 SHAP에 대해 알아봤어요!
정리하자면요
- CNN은 똑똑해요: 필터를 통해 자동으로 중요한 피처를 학습해요
- 하지만 블랙박스예요: 복잡한 내부 구조 때문에 설명이 어려워요
- SHAP가 해결책이에요: 각 피처의 기여도를 계산해서 시각화해줘요
- 실무에서 유용해요: Python으로 간단하게 적용 가능해요!
딥러닝 모델의 성능도 중요하지만, 그 결정을 설명할 수 있다는 건 더욱 중요해요! 특히 실무에서는 "왜?"라는 질문에 답할 수 있어야 하니까요 ^^
다들 요 글 보시고 SHAP 한번 써보세요~ 생각보다 쉽고 재미있답니다!!
블랙박스 vs 설명가능 AI 비교

참고 자료
이 글은 다음 자료들을 참고하여 작성되었어요
- Lundberg & Lee (2017), "A Unified Approach to Interpreting Model Predictions"
- Selvaraju et al. (2017), "Grad-CAM: Visual Explanations from Deep Networks"
- Christoph Molnar, "Interpretable Machine Learning"
- SHAP 공식 문서: https://shap.readthedocs.io
#딥러닝 #CNN #블랙박스 #설명가능AI #XAI #SHAP #머신러닝해석 #피처중요도 #인공지능 #컴퓨터비전 #이미지분류 #DeepLearning #ExplainableAI #ShapleyValue #모델해석 #AI설명가능성 #GradCAM #FeatureImportance #NeuralNetwork #Python머신러닝 #데이터사이언스 #AI개발 #딥러닝실무 #모델디버깅 #의료AI
'주식 예측 프로그램 > 머신러닝' 카테고리의 다른 글
| CNN으로 주식 예측이 가능할까? 딥러닝 초보자들이 꼭 알아야 할 진실 (0) | 2025.12.23 |
|---|---|
| 머신러닝 모델 돌릴 때 코드 짜면서 꼭 알아야 할 것들 (feat. 데이터 전처리의 함정들) (0) | 2025.12.23 |
| 머신러닝 모델 A to Z - 전통부터 최신까지 (0) | 2025.12.23 |