# 10.2 Piksel İlişkilendirmesi (Pixel Attribution)

Piksel ilişkilendirme yöntemleri, bir sinir ağı tarafından yapılan belirli bir görüntü sınıflandırmasında hangi piksellerin önemli olduğunu vurgular. Aşağıdaki görüntü, bir açıklama örneğidir:&#x20;

<figure><img src="https://2544487293-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FFwj3Lgpiv5AroGHyRyJZ%2Fuploads%2FSyzDlGeMlH6NZrlaEHsY%2Fimage.png?alt=media&#x26;token=a0156330-fcc0-4ffd-ba05-a07624dba1ce" alt=""><figcaption><p><strong>Figür 10.8:</strong> Piksel katkıları ile renklendirilen bir saliency haritası.</p></figcaption></figure>

Bu bölümde daha sonra bu görüntüde neler olduğunu göreceksiniz. Piksel ilişkilendirme yöntemleri çeşitli isimler altında bulunabilir: duyarlılık haritası, dikkat haritası, piksel ilişkilendirme haritası, gradyan tabanlı ilişkilendirme yöntemleri, özellik önemi, özellik ilişkilendirmesi ve özellik katkısı.

Piksel ilişkilendirme, özellik ilişkilendirme özel bir durumudur, ancak görüntüler için uygulanır. Özellik ilişkilendirmesi, bireysel tahminleri açıklarken, her bir giriş özelliğini, tahmini ne kadar değiştirdiğine (negatif veya pozitif yönde) göre açıklar. Bu özellikler giriş pikselleri, tabular veriler veya kelimeler olabilir. **SHAP**, **Shapley değerleri** ve **LIME**, genel özellik ilişkilendirme yöntemlerine örnektir.

Sinir ağlarının çıktısının bir tahmin vektörü olarak tanımlandığını varsayıyoruz ve bu vektör uzunluğu 𝐶  olarak ifade edilir. Örneğin, regresyon durumunda  $$C = 1$$ olabilir. Görüntü $$I$$ için sinir ağının çıktısı $$S(I)=\[S\_1 ​ (I),…,S\_C ​ (I)]$$ olarak adlandırılır. Bu yöntemler, giriş olarak $$𝑥 ∈ 𝑅^p$$  alır (görüntü pikselleri, tablo verileri, kelimeler vb. olabilir) ve açıklama olarak her bir 𝑝  giriş özelliği için bir önem skoru döndürür: $$R^c=\[R\_1^c,\ldots,R\_p^c]$$ . Buradaki 𝑐, $$f(x) = x \* e^{2 pi i \xi x}$$$$S\_C(I)$$'nin 𝑐-inci çıktısı için önemi ifade eder.

Piksel ilişkilendirme yöntemleri kafa karıştırıcı şekilde çeşitlidir. Ancak, iki ana yöntem türü olduğunu bilmek bu çeşitliliği anlamaya yardımcı olur:

**Kapsama veya Bozma (Occlusion/Perturbation) Tabanlı Yöntemler:** SHAP ve LIME gibi yöntemler modelden bağımsızdır (model-agnostic) ve genellikle belirli piksellerin kaldırılması veya değiştirilmesinin tahmini nasıl etkilediğini analiz eder.

**Gradyan tabanlı:** Birçok yöntem, tahminin (veya sınıflandırma skorunun) giriş özelliklerine göre gradyanını hesaplar. Bu gradyan tabanlı yöntemler (ki bunlardan birçok farklı türü vardır) genellikle gradyanın nasıl hesaplandığı konusunda farklılık gösterir.

Her iki yaklaşımın ortak noktası, açıklamanın giriş görüntüsüyle aynı boyutta olması (veya en azından anlamlı bir şekilde üzerine yansıtılabilmesi) ve her bir piksele, o pikselin bu görüntünün tahmini veya sınıflandırması için olan önemini ifade eden bir değer atanmasıdır.

Piksel ilişkilendirme yöntemleri için başka bir faydalı kategorilendirme ise temel (baseline) sorusudur:

Sadece gradyana dayalı yöntemler, bir pikseldeki bir değişikliğin tahmini değiştirip değiştirmeyeceğini söyler. Örnekler arasında Vanilla Gradient ve Grad-CAM yer alır. Sadece gradyan tabanlı bir ilişkilendirmenin yorumu şu şekildedir: Eğer pikselin renk değerlerini artıracak olsaydım, tahmin edilen sınıf olasılığı artar mı (pozitif gradyan için) yoksa azalır mı (negatif gradyan için)? Gradyanın mutlak değeri ne kadar büyükse, bu pikseldeki bir değişikliğin etkisi o kadar güçlüdür.

Yol-ilişkilendirme (Path-attribution) yöntemleri, mevcut görüntüyü bir referans görüntüyle karşılaştırır. Bu referans görüntü tamamen gri bir görüntü gibi yapay bir "sıfır" görüntü olabilir. Gerçek tahmin ile temel (baseline) tahmin arasındaki fark, piksellere bölüştürülür. Temel görüntü, birden fazla görüntüden, yani bir görüntü dağılımından da oluşabilir. Bu kategori, Deep Taylor ve Integrated Gradients gibi modele özgü gradyan tabanlı yöntemleri ve LIME ile SHAP gibi modelden bağımsız yöntemleri içerir. Bazı yol-ilişkilendirme yöntemleri “tamamlayıcıdır”, yani tüm giriş özellikleri için önem skorlarının toplamı, görüntünün tahmini ile referans görüntünün tahmini arasındaki farka eşittir. SHAP ve Integrated Gradients buna örnek olarak gösterilebilir.

Yol-ilişkilendirme yöntemlerinde yorumlama her zaman temel görüntüye kıyasla yapılır: Gerçek görüntü ile temel görüntünün sınıflandırma skorları arasındaki fark, piksellere atfedilir. Referans görüntü (veya dağılımı) seçimi, açıklama üzerinde büyük bir etkiye sahiptir. Genel varsayım, “nötr” bir görüntü (veya dağılımı) kullanmaktır. Tabii ki, kendi favori selfie’nizi kullanmanız da mümkündür, ancak bunun bir uygulama bağlamında anlamlı olup olmadığını sorgulamanız gerekir. Yine de, bu proje üyeleri arasında etkileyici bir hamle olabilir.

Bu noktada, bu yöntemlerin nasıl çalıştığına dair sezgisel bir açıklama vermek genelde uygun olurdu, ancak birçok başka yöntemin takip ettiği genel tarifeyi çok güzel gösterdiği için Vanilla Gradient yöntemine doğrudan başlamak daha iyi olacaktır.

#### 10.2.1 Vanilla Gradient (Saliency Maps)

Vanilla Gradient yöntemi, Simonyan ve arkadaşları tarafından 2013 yılında önerilmiş ve ilk piksel ilişkilendirme yöntemlerinden biri olmuştur. Eğer geriye yayılım (backpropagation) hakkında bilgi sahibiyseniz, bu yöntemin fikri oldukça basittir. (Yazarlar bu yöntemi “Image-Specific Class Saliency” olarak adlandırmışlardır, ancak "Vanilla Gradient" ismini daha çok tercih ediyorum). Bu yöntemde, ilgilendiğimiz sınıf için kayıp fonksiyonunun, giriş piksellerine göre gradyanı hesaplanır. Bu işlem, giriş özellikleriyle aynı boyutta bir harita verir ve bu haritada negatiften pozitife değişen değerler bulunur.

Bu yöntemin tarifesi şu şekildedir:

1. İlgili görüntü için ileri geçiş (forward pass) gerçekleştirin.
2. İlgilendiğiniz sınıfın skorunun, giriş piksellerine göre gradyanını hesaplayın:

$$
E\_{grad}(I\_0)=\frac{\delta{}S\_c}{\delta{}I}|\_{I=I\_0}
$$

Gradyanları Görselleştirin. Gradyanları aşağıdaki iki şekilde görselleştirebilirsiniz: mutlak değerlerini göstererek etkilerin büyüklüğünü vurgulayabilirsiniz ya da negatif ve pozitif katkıları ayrı ayrı vurgulayarak, piksel değerlerindeki değişimlerin sınıf skorunu nasıl artırıp azalttığını gösterebilirsiniz.&#x20;

Daha resmi bir açıklama olarak, bir görüntü 𝐼 ve bir evrişimli sinir ağı düşünelim. Bu ağ, sınıf 𝑐  için görüntüye $$S\_C(I)$$ bir skor atar. Bu skor, görüntü 𝐼 ile son derece doğrusal olmayan bir fonksiyondur. Gradyan kullanmanın arkasındaki fikir, bu skoru birinci dereceden bir Taylor açılımı ile yaklaşık olarak ifade etmektir:

$$
S\_c(I)\approx{}w^T{}I+b
$$

Burada 𝑤 , skorumuzun türevini temsil eder

$$
w = \frac{\delta S\_C}{\delta I}|\_{I\_0}
$$

Şimdi, gradyanların geri yayılımını nasıl gerçekleştireceğimiz konusunda bir belirsizlik vardır, çünkü ReLU (Rectifying Linear Unit) gibi doğrusal olmayan birimlerin işlevi "işareti" kaldırır. Bu nedenle, geri yayılım yaparken pozitif veya negatif bir aktivasyonu atamamız gerektiğini bilemeyiz. ASCII sanatı becerilerimi kullanarak, ReLU fonksiyonu şu şekilde görünür: `_/` ve şu şekilde tanımlanır: $$X\_{n+1}(x)=max(0,X\_n)$$. Bu ifade $$X\_n$$ katmanından $$X\_{n-1}$$ katmanına geçişi gösterir. Yani, bir nöronun aktivasyonu sıfır olduğunda, hangi değeri geri yaymamız gerektiğini bilemeyiz. Vanilla Gradient yönteminde bu belirsizlik şu şekilde çözülür:

$$
\frac{\delta f}{\delta X\_n} = \frac{\delta f}{\delta X\_{n+1}} \cdot \mathbf{I}(X\_n > 0)
$$

Burada, ( $$I$$ ) eleman bazında tanımlanan bir gösterge fonksiyonudur. Bu fonksiyon, alt katmandaki aktivasyon negatif olduğunda sıfır, pozitif veya sıfır olduğunda ise bir değerini alır. Vanilla Gradient, ( $$n+1$$ ) katmanına kadar geri yayılmış olan gradyanı alır ve ardından, bir alt katmandaki aktivasyonun negatif olduğu yerlerde gradyanları sıfıra ayarlar.

Şimdi $$X\_n = X\_{n+1} = ReLU(X\_{n+1})$$ katmanlarımızın olduğu örneğe bakalım. $$X\_n$$'de tanımlı  varsayımsal aktivasyonumuz şu şekilde tanımlanmıştır:

$$
\begin{pmatrix}
1 & 0 \\
-1 & -10 \\
\end{pmatrix}
$$

$$X\_{n+1}$$'de tanımlı gradyanımız şu şekildedir&#x20;

$$
\begin{pmatrix}
0.4 & 1.1 \\
-0.5 & -0.1  \\
\end{pmatrix}
$$

O halde $$X\_n$$'deki gradyanlarımız ,

$$
\begin{pmatrix}
0.4 & 0 \\
0 & 0  \\
\end{pmatrix}
$$

**10.2.1.1 Vanilla Gradientin Problemleri Problems with Vanilla Gradient**

Vanilla Gradient, Avanti ve arkadaşlarının (2017) çalışmasında açıklandığı gibi bir doygunluk problemine sahiptir. ReLU kullanıldığında ve aktivasyon sıfırın altına düştüğünde, aktivasyon sıfıra sabitlenir ve artık değişmez. Aktivasyon doygun hale gelir. Örneğin: Katmana gelen girdiler, ağırlıkları −1 ve −1 olan iki nörondan ve bir bias değeri 1'den oluşmaktadır. ReLU katmanından geçerken, eğer her iki nöronun toplamı <1 ise, aktivasyon nöron1 + nöron2 olacaktır. Eğer toplam 1’den büyükse, aktivasyon 1'de sabitlenecek ve doygun olacaktır. Ayrıca bu noktada gradyan sıfır olacak ve Vanilla Gradient, bu nöronun önemli olmadığını söyleyecektir.\
Ve şimdi, sevgili okuyucularım, başka bir yöntemi, neredeyse ücretsiz olarak öğrenin: DeconvNet.

#### 10.2.2 DeconvNet

Zeiler ve Fergus (2014) tarafından önerilen **DeconvNet**, Vanilla Gradient yöntemine neredeyse tamamen benzerdir. DeconvNet’in amacı, bir sinir ağını tersine çevirmek ve filtreleme, havuzlama ve aktivasyon katmanlarının ters işlemlerini önermektir. Makaleye baktığınızda yöntem Vanilla Gradient’ten çok farklı görünebilir, ancak ReLU katmanının terslenmesi dışında, DeconvNet temelde Vanilla Gradient yaklaşımına denktir.

Vanilla Gradient, DeconvNet’in bir genellemesi olarak görülebilir. Ancak DeconvNet, ReLU üzerinden gradyanı geri yaymak için farklı bir seçim yapar:

$$
R\_n=R\_{n+1}\mathbb{1}(R\_{n+1}>0)
$$

Burada $$R\_n$$  ve  $$R\_{n+1}$$ ​ katman yeniden yapılandırmaları ve 1 gösterge fonksiyonudur. Katman 𝑛 n'den katman 𝑛 − 1'e geri yayılım yaparken, DeconvNet ileri yayılımda katman 𝑛'deki hangi aktivasyonların sıfırlandığını “hatırlar” ve katman 𝑛 − 1'de bunları sıfır olarak ayarlar. Katman 𝑥'teki negatif değere sahip aktivasyonlar katman 𝑛 − 1'de sıfıra ayarlanır. Daha önceki örnek için gradyan $$X\_n$$ şu hale gelir:

$$
\begin{pmatrix}
0.4 & 1.1 \\
0 & 0  \\
\end{pmatrix}
$$

#### 10.2.3 Grad-CAM

Grad-CAM, CNN kararları için görsel açıklamalar sağlar. Diğer yöntemlerin aksine, gradyan tamamen görüntüye geri yayılmaz, ancak (genellikle) son evrişim katmanına geri yayılır ve bu sayede görüntünün önemli bölgelerini vurgulayan kaba bir lokalizasyon haritası oluşturur.

Grad-CAM, Gradient-weighted Class Activation Map'in kısaltmasıdır. Adından da anlaşılacağı gibi, sinir ağlarının gradyanına dayanır. Grad-CAM, diğer teknikler gibi, her nörona ilgi duyulan karar için bir önem skoru atar. Bu ilgi duyulan karar, sınıf tahmini olabilir (çıkış katmanında bulduğumuz) ancak teorik olarak sinir ağındaki herhangi bir başka katman da olabilir. Grad-CAM, bu bilgiyi son evrişim katmanına geri yayar. Grad-CAM, farklı CNN'lerle kullanılabilir: tam bağlantılı katmanlarla, altyazı (captioning) gibi yapılandırılmış çıktılar ve çoklu görev çıktıları için, ayrıca pekiştirmeli öğrenme (reinforcement learning) için de kullanılabilir.

Grad-CAM'e sezgisel bir değerlendirme ile başlayalım. Grad-CAM'in amacı, bir konvolüsyon katmanının belirli bir sınıflandırma için bir görüntünün hangi bölümlerine "baktığını" anlamaktır. Hatırlatma olarak, bir CNN'nin ilk konvolüsyon katmanı, görüntüleri giriş olarak alır ve öğrenilmiş özellikleri kodlayan özellik haritaları (feature maps) çıktılar. Daha yüksek düzeydeki konvolüsyon katmanları da aynı işlemi yapar, ancak önceki konvolüsyon katmanlarının özellik haritalarını giriş olarak alır. CNN'nin nasıl karar verdiğini anlamak için, Grad-CAM son konvolüsyon katmanlarının özellik haritalarında hangi bölgelerin aktifleştirildiğini analiz eder. Son konvolüsyon katmanında k tane özellik haritası vardır ve bunlara $$A\_1, A\_2, \dots, A\_k$$ diyelim. Evrişimli sinir ağının belirli bir sınıflandırmayı nasıl yaptığını özellik haritalarından nasıl "görebiliriz"? İlk yaklaşımda, her bir özellik haritasının ham değerlerini görselleştirebilir, özellik haritaları üzerinde ortalama alabilir ve bunu görüntümüzün üzerine bindirebiliriz. Bu, özellik haritalarının tüm sınıflar için bilgi kodladığı için faydalı olmayacaktır, ancak biz belirli bir sınıfa ilgi duyuyoruz. Grad-CAM, ilgi duyduğumuz sınıf ccc'ye ne kadar önemli olduğunu karar vermek zorundadır. Özellik haritaları üzerinde ortalama almadan önce her bir özellik haritasının her pikselini gradyan ile ağırlıklandırmamız gerekir. Bu, ilgi duyulan sınıfa pozitif veya negatif yönde etki eden bölgeleri vurgulayan bir ısı haritası (heatmap) verir. Bu ısı haritası, negatif değerleri sıfıra ayarlamak anlamına gelen ReLU fonksiyonundan geçirilir. Grad-CAM, ReLU fonksiyonunu kullanarak tüm negatif değerleri kaldırır, çünkü yalnızca seçilen sınıf ccc'ye katkıda bulunan bölümlerle ilgileniyoruz, diğer sınıflarla değil. Burada "piksel" kelimesi yanıltıcı olabilir çünkü özellik haritası (pooling birimleri nedeniyle) görüntüden daha küçüktür ancak orijinal görüntüye geri yansıtılır. Daha sonra, görselleştirme amacıyla Grad-CAM haritasını \[0,1] aralığına ölçeklendirir ve orijinal görüntünün üzerine bindiririz.

Grad-CAM için tarifi (recipe) inceleyelim. Amacımız, şu şekilde tanımlanan lokalizasyon haritasını bulmaktır:

$$
L^c\_{Grad-CAM} \in \mathbb{R}^{u\times v} = \underbrace{ReLU}*{\text{Pick positive values}}\left(\sum*{k} \alpha\_k^c A^k\right)
$$

Burada u açıklamanın genişliği, v yüksekliği ve c ilgilenilen sınıftır.

1. Girdi görüntüsünü konvolüsyonel sinir ağı üzerinden ileri yayılım yapın.
2. İlgilenilen sınıf için ham skoru elde edin, bu da softmax katmanından önceki nöronun aktivasyonu anlamına gelir.
3. Diğer tüm sınıf aktivasyonlarını sıfırla.
4. İlgilenilen sınıfın gradyanını tam bağlantılı katmanlardan önceki son konvolüsyon katmanına geri yay: $$\frac{\delta{}y^c}{\delta{}A^k}$$
5. Her bir özellik haritası “pikselini” sınıf için gradyanla ağırlıklandırın. İndeksler i ve j, genişlik ve yükseklik boyutlarını ifade eder:                                                   $$\alpha\_k^c = \overbrace{\frac{1}{Z}\sum\_{i}\sum\_{j}}^{\text{global average pooling}} \underbrace{\frac{\delta y^c}{\delta A\_{ij}^k}}\_{\text{gradients via backprop}}$$                                                                                                   Bu, gradyanların küresel olarak havuzlandığı anlamına gelir.
6. Gradyanla piksel bazında ağırlıklandırılmış olarak, özellik haritalarının ortalamasını hesaplayın.
7. Ortalama alınmış özellik haritasına ReLU uygulayın.
8. Görselleştirme için: Değerleri 0 ile 1 arasındaki aralığa ölçeklendirin. Görüntüyü ölçeklendirip orijinal görüntünün üzerine bindirin.
9. Guided Grad-CAM için ek adım: Isı haritasını yönlendirilmiş geri yayılım ile çarpın.

#### 10.2.4 Guided Grad-CAM

Grad-CAM açıklamasından, lokalizasyonun çok kaba olduğunu tahmin edebilirsiniz, çünkü son konvolüsyonel özellik haritaları, giriş görüntüsüne kıyasla çok daha kaba bir çözünürlüğe sahiptir. Buna karşılık, diğer ilişkilendirme teknikleri, giriş piksellerine kadar tamamen geri yayılır. Bu nedenle çok daha ayrıntılıdırlar ve bir tahmine en çok katkıda bulunan bireysel kenarları veya noktaları gösterebilirler. Her iki yöntemin birleştirilmesine **Guided Grad-CAM** denir. Ve bu süper basittir. Bir görüntü için hem Grad-CAM açıklamasını hem de Vanilla Gradient gibi başka bir ilişkilendirme yönteminden açıklamayı hesaplarsınız. Grad-CAM çıktısı daha sonra ikili lineer interpolasyon (bilinear interpolation) ile yukarı ölçeklendirilir, ardından her iki harita da eleman bazında çarpılır. Grad-CAM, piksel bazında ilişkilendirmeharitasının belirli bölümlerine odaklanan bir mercek gibi çalışır.

#### 10.2.5 SmoothGrad

Smilkov ve arkadaşları (2017) tarafından önerilen **SmoothGrad** fikri, gradyan tabanlı açıklamaları daha az gürültülü hale getirmek için gürültü ekleyip bu yapay olarak gürültülü gradyanlar üzerinde ortalama almayı amaçlamaktadır. SmoothGrad, bağımsız bir açıklama yöntemi değildir, herhangi bir gradyan tabanlı açıklama yöntemine bir uzantıdır.

**SmoothGrad** şu şekilde çalışır:

1. İlgi duyulan görüntünün üzerine gürültü ekleyerek birden fazla versiyonunu oluşturun.
2. Tüm görüntüler için piksel ilişkilendirme haritaları oluşturun.
3. Piksel ilişkilendirme haritalarını ortalayın.

Evet, bu kadar basit. Peki bu neden işe yarar? Teori, türevin küçük ölçeklerde büyük dalgalanmalar göstermesidir. Sinir ağlarının, gradyanları düzgün tutmak için eğitim sırasında hiçbir teşviki yoktur, hedefleri görüntüleri doğru sınıflandırmaktır. Birden fazla harita üzerinde ortalama almak, bu dalgalanmaları “düzleştirir”:

$$
R\_{sg}(x)=\frac{1}{N}\sum\_{i=1}^n{}R(x+g\_i),
$$

Burada $$g\_i\sim{}N(0,\sigma^2)$$, Normal dağılıma sahip gürültü vektörler. İdeal gürültü seviyesi girdi resim ve ağa dayanır. Yazar %10 ile %20 arasında gürültü seviyesi öneriyor ki bu da $${\sigma}/(x\_{max}-x\_{min})$$ değerinin 0.1 ile 0.2 arasında olması anlamına geliyor. $$x\_{min}$$ ve  $$x\_{max}$$ limitleri resmin minimum ve maksimum piksel değerlerine ilişkilendirme yapmaktadır. Diğer parametre ise örneklem sayısı olan n'dir; bu değerin üstünde azalan getiriler bulunduğundan n = 50 kullanılması önerilmiştir.

#### 10.2.6 Örnekler

Bu haritaların nasıl göründüğüne ve yöntemlerin kalitatif olarak nasıl karşılaştırıldığına dair bazı örnekler görelim. İncelenen ağ VGG-16 (Simonyan ve ark., 2014 85) olup, ImageNet üzerinde eğitilmiş ve bu nedenle 20.000'den fazla sınıfı ayırt edebilmektedir. Aşağıdaki görüntüler için en yüksek sınıflandırma skoruna sahip sınıf için açıklamalar oluşturacağız.

Bunlar, görüntüler ve sinir ağı tarafından yapılan sınıflandırmalarıdır:&#x20;

<figure><img src="https://2544487293-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FFwj3Lgpiv5AroGHyRyJZ%2Fuploads%2FpnupTSbQLyp0TVUchHBD%2Fimage.png?alt=media&#x26;token=3ba5e0e2-837b-45f2-a16c-82c12cd15dfe" alt=""><figcaption><p><strong>Figür 10.9:</strong> Greyhound olarak sınıflandırılan bir köpek, çorba kasesi olarak sınıflandırılan bir ramen çorbası ve yılan balığı olarak sınıflandırılan bir ahtapot görüntüleri.</p></figcaption></figure>

Sol taraftaki, Interpretable Machine Learning kitabını koruyan asil köpek, %35 olasılıkla “Greyhound” olarak sınıflandırıldı (görünüşe göre “Interpretable Machine Learning kitabı” 20k sınıftan biri değildi). Ortadaki görüntü, lezzetli ramen çorbası gösteriyor ve doğru şekilde %50 olasılıkla “Çorba Kasesi” olarak sınıflandırıldı. Üçüncü görüntü, okyanus dibinde bir ahtapot gösteriyor ve yüksek bir olasılıkla %70 ile yanlış şekilde “Yılan Balığı” olarak sınıflandırıldı.

Ve bunlar sınıflandırmayı açıklamayı amaçlayan piksel ilişkilendirmeleridir:

<figure><img src="https://2544487293-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FFwj3Lgpiv5AroGHyRyJZ%2Fuploads%2FjPu7nZVHROk2TsanVdog%2Fimage.png?alt=media&#x26;token=8312bba4-e934-493e-aa27-189db32d8bda" alt=""><figcaption><p><strong>Figür 10.10:</strong> Vanilla Gradient yöntemi, SmoothGrad ve Grad-CAM için piksel atamaları veya saliency haritaları.</p></figcaption></figure>

Ne yazık ki, biraz dağınık. Ama köpek ile başlayarak bireysel açıklamalara bakalım. Vanilla Gradient ve Vanilla Gradient + SmoothGrad her ikisi de köpeği vurguluyor, bu mantıklı. Ancak, kitabın etrafındaki bazı alanları da vurguluyorlar, bu garip. Grad-CAM sadece kitabın alanını vurguluyor, bu tamamen mantıklı değil. Ve buradan itibaren, işler biraz daha karışıklaşıyor. Vanilla Gradient yöntemi, hem çorba kasesi hem de ahtapot (veya ağın düşündüğü gibi, yılan balığı) için başarısız gibi görünüyor. Her iki görüntü de güneşe çok uzun süre bakmanın ardından oluşan yansımalara benziyor. (Lütfen doğrudan güneşe bakmayın). SmoothGrad çok yardımcı oluyor, en azından alanlar daha tanımlı. Çorba örneğinde, yumurtalar ve et gibi bazı malzemeler vurgulanmış, ancak çubukların etrafındaki alan da. Ahtapot görüntüsünde ise çoğunlukla hayvanın kendisi vurgulanıyor. Çorba kasesi için, Grad-CAM yumurta kısmını ve bir sebepten ötürü kase üst kısmını vurguluyor. Ahtapot açıklamaları Grad-CAM tarafından daha da dağınık.

Burada, açıklamalara güvenip güvenmediğimizi değerlendirmenin zorluklarını zaten görebilirsiniz. İlk adım olarak, görüntünün hangi bölümlerinin görüntünün sınıflandırmasıyla ilgili bilgi içerdiğini düşünmemiz gerekir. Ancak, aynı zamanda sinir ağının sınıflandırma için ne kullanmış olabileceğini de düşünmemiz gerekir. Belki çorba kasesi, SmoothGrad'in ima ettiği gibi yumurta ve çubukların birleşimine dayanarak doğru şekilde sınıflandırıldı? Ya da belki sinir ağı, Grad-CAM'in önerdiği gibi kase şekli ve bazı malzemeleri tanıdı? Bilmiyoruz.

Ve bu, tüm bu yöntemlerle ilgili büyük sorun. Açıklamalar için bir gerçek doğruluk (ground truth) yok. Sadece ilk adım olarak, bariz şekilde mantıklı olmayan açıklamaları reddedebiliriz (ve bu adımda bile güçlü bir güvenimiz yok). Sinir ağındaki tahmin süreci çok karmaşıktır.\\

#### 10.2.7 Avantajlar

Açıklamalar görseldir ve görüntüleri hızlıca tanırız. Özellikle, yöntemler sadece önemli pikselleri vurguladığında, görüntünün önemli bölgelerini hemen tanımak kolaydır.

Gradyan tabanlı yöntemler genellikle modelden bağımsız yöntemlere göre hesaplanması daha hızlıdır. Örneğin, LIME ve SHAP da görüntü sınıflandırmalarını açıklamak için kullanılabilir, ancak hesaplamaları daha maliyetlidir.

Seçilebilecek birçok yöntem vardır.

#### 10.2.8 Dezavantajlar

Çoğu yorumlama yöntemi gibi, bir açıklamanın doğru olup olmadığını bilmek zordur ve değerlendirmenin büyük bir kısmı sadece kalitatiftir (“Bu açıklamalar mantıklı görünüyor, hadi makaleyi yayımlayalım” gibi).

Piksel ilişkilendirme yöntemleri çok kırılgan olabilir. Ghorbani ve ark. (2019)86, aynı tahmine yol açan küçük (adversarial) pertürbasyonların bir görüntüye eklenmesinin, açıklamalar olarak çok farklı piksellerin vurgulanmasına yol açabileceğini göstermiştir.

Kindermans ve ark. (2019)87 de bu piksel ilişkilendirme yöntemlerinin son derece güvenilmez olabileceğini göstermiştir. Giriş verilerine sabit bir kayma eklemişler, yani tüm görüntülere aynı piksel değişikliklerini eklemişlerdir. Orijinal ağ ile sabit piksel kaymasını uyarlamak için ilk katmanın bias’ı değiştirilmiş “kaydırılmış” ağları karşılaştırmışlardır. Her iki ağ da aynı tahminleri üretir. Ayrıca, her ikisi için gradyan aynıdır. Ancak açıklamalar değişmiştir, bu istenmeyen bir özelliktir. DeepLift, Vanilla Gradient ve Integrated Gradients üzerinde inceleme yapmışlardır.

“Sanity checks for saliency maps”88 başlıklı makale, saliency yöntemlerinin modele ve veriye karşı duyarsız olup olmadığını araştırmıştır. Duyarsızlık son derece istenmeyen bir durumdur, çünkü bu, “açıklamanın” model ve veriden bağımsız olduğu anlamına gelir. Modele ve eğitim verisine duyarsız olan yöntemler, kenar dedektörlerine benzer. Kenar dedektörleri, görüntülerdeki güçlü piksel renk değişikliklerini basitçe vurgular ve tahmin modeli veya görüntünün soyut özellikleriyle ilgili değildir ve eğitim gerektirmez. Test edilen yöntemler şunlardı: Vanilla Gradient, Gradient x Input, Integrated Gradients, Guided Backpropagation, Guided Grad-CAM ve SmoothGrad (Vanilla Gradient ile birlikte). Vanilla Gradient ve Grad-CAM duyarsızlık kontrolünü geçti, Guided Backpropagation ve Guided Grad-CAM ise başarısız oldu. Ancak, sanity checks makalesi kendi içinde Tomsett ve ark. (2020)89 tarafından “Sanity checks for saliency metrics” başlıklı bir makalede bazı eleştirilerle karşılaşmıştır (tabii). Değerlendirme metriklerinde tutarsızlık eksikliği bulmuşlardır (biliyorum, şimdi oldukça meta bir hal alıyor). Yani tekrar başladığımız noktaya dönüyoruz … Görsel açıklamaları değerlendirmek zor olmaya devam ediyor. Bu, bir uygulayıcı için çok zorlayıcı hale getiriyor.

Genel olarak, bu çok tatmin edici olmayan bir durumdur. Bu konu üzerinde daha fazla araştırma için biraz beklemek zorundayız. Ve lütfen, yeni saliency yöntemleri icat etmeyin, bunları nasıl değerlendireceğimizi daha çok inceleyin.

#### 10.2.9 Yazılım

Piksel ilişkilendirme yöntemlerinin birkaç yazılım uygulaması bulunmaktadır. Örneğin, ben tf-keras-vis kullandım. En kapsamlı kütüphanelerden biri iNNvestigate’dir, bu kütüphane Vanilla Gradient, SmoothGrad, DeconvNet, Guided Backpropagation, PatternNet, LRP ve daha fazlasını uygular. Birçok yöntem, DeepExplain Toolbox içinde uygulanmıştır.

***

Simonyan, Karen, Andrea Vedaldi, and Andrew Zisserman. “Deep inside convolutional networks: Visualising image classification models and saliency maps.” arXiv preprint arXiv:1312.6034 (2013).[↩︎](https://christophm.github.io/interpretable-ml-book/pixel-attribution.html#fnref81)

Shrikumar, Avanti, Peyton Greenside, and Anshul Kundaje. “Learning important features through propagating activation differences.” Proceedings of the 34th International Conference on Machine Learning-Volume 70. JMLR. org, (2017).[↩︎](https://christophm.github.io/interpretable-ml-book/pixel-attribution.html#fnref82)

Zeiler, Matthew D., and Rob Fergus. “Visualizing and understanding convolutional networks.” European conference on computer vision. Springer, Cham (2014).[↩︎](https://christophm.github.io/interpretable-ml-book/pixel-attribution.html#fnref83)

Smilkov, Daniel, et al. “SmoothGrad: removing noise by adding noise.” arXiv preprint arXiv:1706.03825 (2017).[↩︎](https://christophm.github.io/interpretable-ml-book/pixel-attribution.html#fnref84)

Simonyan, Karen, and Andrew Zisserman. “Very deep convolutional networks for large-scale image recognition.” arXiv preprint arXiv:1409.1556 (2014).[↩︎](https://christophm.github.io/interpretable-ml-book/pixel-attribution.html#fnref85)

Ghorbani, Amirata, Abubakar Abid, and James Zou. “Interpretation of neural networks is fragile.” Proceedings of the AAAI Conference on Artificial Intelligence. Vol. 33. 2019.[↩︎](https://christophm.github.io/interpretable-ml-book/pixel-attribution.html#fnref86)

Kindermans, Pieter-Jan, Sara Hooker, Julius Adebayo, Maximilian Alber, Kristof T. Schütt, Sven Dähne, Dumitru Erhan, and Been Kim. “The (un) reliability of saliency methods.” In Explainable AI: Interpreting, Explaining and Visualizing Deep Learning, pp. 267-280. Springer, Cham (2019).[↩︎](https://christophm.github.io/interpretable-ml-book/pixel-attribution.html#fnref87)

Adebayo, Julius, Justin Gilmer, Michael Muelly, Ian Goodfellow, Moritz Hardt, and Been Kim. “Sanity checks for saliency maps.” arXiv preprint arXiv:1810.03292 (2018).[↩︎](https://christophm.github.io/interpretable-ml-book/pixel-attribution.html#fnref88)

Tomsett, Richard, Dan Harborne, Supriyo Chakraborty, Prudhvi Gurram, and Alun Preece. “Sanity checks for saliency metrics.” In Proceedings of the AAAI Conference on Artificial Intelligence, vol. 34, no. 04, pp. 6021-6029. 2020.[↩︎](https://christophm.github.io/interpretable-ml-book/pixel-attribution.html#fnref89)
