Explainable AI Interpretability

# Explainable AI & Interpretability

## Introduction & Motivation

XAI: understand model decisions. LIME, SHAP, attention visualization. Applications: model debugging, regulatory compliance.

Motivation: Make black-box models interpretable.

Applications: Medical diagnosis explanation, fairness auditing.

---

## Core Concepts & Theory

### Feature Attribution

Identify important input features.

### Model-Agnostic Methods

Explanation independent of architecture.

### Attention Visualization

Highlight relevant regions.

### Counterfactual Explanations

What-if analysis.

---

## Mathematical Formulation

LIME Local Model:
$$\min_g \sum_i L(f(x_i), g(x_i)) + \Omega(g)$$

SHAP Value:
$$\phi_i = \frac{1}{|S|!|T|!} \sum_{S \subseteq T \setminus \{i\}} |S|!(|T|-|S|-1)![f(S \cup \{i\}) - f(S)]$$

Attention:
$$\alpha_{ij} = \frac{\exp(e_{ij})}{\sum_k \exp(e_{ik})}$$

---

## Advanced Theory & Extensions

### Integrated Gradients

Path-based attribution.

### Layer-wise Relevance Propagation

Decomposition-based explanation.

### Concept Activation Vectors

High-level feature interpretation.

---

## Computational Considerations

LIME: O(K·T) (K=samples, T=training).

SHAP: O(2^|S|) (exponential coalitions).

Attention: O(1) (pre-computed).

---

## Practical Implementation Strategies

### Local Interpretability

Focus on specific predictions.

### Feature Importance Ranking

Order features by contribution.

### Visualization Techniques

Heatmaps and saliency maps.

---

## Benchmark Datasets & Evaluation

ImageNet: Saliency benchmarks.

Medical images: Diagnostic explanation.

COMPAS: Fairness datasets.

---

## Key Challenges & Limitations

### Computational Cost

SHAP exponential complexity.

### Faithfulness

Explanation accuracy verification.

### User Study Validation

Explanation effectiveness assessment.

---

## Hyperparameter Tuning

LIME samples: 1000-10000.

SHAP background: 100-1000.

Threshold: 0.1-0.5.

---

## Real-World Applications & Case Studies

Medical AI: Diagnosis explanation.

Credit Scoring: Decision transparency.

Criminal Justice: Bias detection.

---

## Integration with Other Methods

XAI + bias detection; + model auditing.

---

## Summary & Key Takeaways

Explainable AI makes model decisions interpretable and trustworthy.

Principles:
1. Feature attribution: Importance identification.
2. Model-agnostic: Architecture independence.
3. Local explanation: Instance-specific reasoning.
4. Visualization: Visual interpretation.
5. Faithfulness: Explanation accuracy.

---

## Appendix: Practical Labs

### Lab 1: Feature Importance Ranking

import numpy as np

def compute_feature_importance(model_output, permuted_outputs):
 """Compute feature importance via permutation"""
 baseline = model_output
 importances = baseline - permuted_outputs
 return importances

np.random.seed(42)
baseline = 0.95
permuted = np.array([0.92, 0.93, 0.94, 0.91, 0.89])
importance = compute_feature_importance(baseline, permuted)
print(f"✓ Feature importance: {importance}")

### Lab 2: Attention Visualization

import numpy as np

def visualize_attention(image_features, attention_map, size=224):
 """Create attention-weighted visualization"""
 attention_map = np.resize(attention_map, (size, size))
 attention_map = (attention_map - attention_map.min()) / (attention_map.max() - attention_map.min())
 
 return attention_map

np.random.seed(42)
img = np.random.rand(224, 224, 3)
attn = np.random.rand(14, 14)
vis = visualize_attention(img, attn)
assert vis.shape == attn.shape, "Correct visualization shape"
print("✓ Attention visualization working")

### Lab 3: LIME Sampling

import numpy as np

def lime_sample_neighbors(x, num_samples=1000, kernel_width=0.25):
 """Sample neighbors for LIME local explanation"""
 distances = np.random.normal(0, kernel_width, num_samples)
 x_samples = x + distances
 
 # Exponential kernel weights
 weights = np.exp(-distances**2 / (2 * kernel_width**2))
 return x_samples, weights

np.random.seed(42)
x = np.array([0.5, 0.3, 0.8])
samples, weights = lime_sample_neighbors(x, num_samples=100)
assert samples.shape[0] == 100, "Correct sample count"
assert weights.shape == samples.shape[:1], "Correct weight count"
print("✓ LIME sampling working")

### Lab 4: Saliency Map Generation

import numpy as np

def compute_saliency_map(gradients, x_shape=(224, 224)):
 """Compute saliency map from gradients"""
 saliency = np.max(np.abs(gradients), axis=-1)
 saliency = np.resize(saliency, x_shape)
 saliency = (saliency - saliency.min()) / (saliency.max() - saliency.min())
 
 return saliency

np.random.seed(42)
grads = np.random.randn(14, 14, 3)
saliency = compute_saliency_map(grads)
assert saliency.shape == (224, 224), "Correct saliency shape"
assert np.all(saliency >= 0) and np.all(saliency <= 1), "Normalized saliency"
print("✓ Saliency map generation working")

---

Go deeper with CFSGPT

Get AI-powered deep-dives, save terms, and run advanced simulations — free account.

Create Free Account