CodeBlanks Logo Icon CodeBlanks

Attention nedir?

Attention, modelin girdinin önemli kısımlarına odaklanmasını sağlar.

Attention nedir?

Dikkat (attention), bir dizinin her elemanının diğer elemanlardan ne kadar bilgi alacağını öğrenen mekanizmadır. "Banka" kelimesinin anlamı cümlede "nehir" mi "para" mı geçtiğine bağlıdır; attention bu ilişkiyi ağırlıklarla kurar.

# her kelime için: diğer kelimelere dikkat ağırlıkları (toplamı 1)
# yeni temsil = ağırlıklı ortalama(diğer kelimelerin değerleri)
agirlik = softmax(skorlar)        # (n,)
cikis = agirlik @ degerler        # (d,)

RNN'in aksine attention tüm konumlara aynı anda bakar: uzak kelimeler arasındaki bağ tek adımda kurulur ve hesap paralel yapılabilir.

Ağırlıklı ortalama

Attention'ın çekirdeği basittir: skorları softmax ile olasılığa çevir, değerlerin ağırlıklı ortalamasını al. Skorlar benzerlik ölçer; en benzer elemanlar en çok katkı verir:

degerler = np.array([[1.0, 0.0], [0.0, 1.0], [1.0, 1.0]])
skor = np.array([2.0, 0.0, 0.0])
a = softmax(skor)            # [0.787 0.107 0.107]
print(a @ degerler)          # [0.893 0.213]: çoğunlukla ilk değer

Skorlar eşit olsaydı sonuç değerlerin düz ortalaması olurdu.

Uygulama İlk attention

Verilen skor için softmax ağırlıklarını hesapla ve np.round(..., 3) ile yazdır. Ardından degerler'in ağırlıklı ortalamasını np.round(..., 3) ile yazdır. Son olarak eşit skorlarla (np.zeros(3)) sonucun düz ortalama olduğunu np.allclose ile yazdır.

Başlangıç kodu

model.py
import numpy as np

def softmax(z, eksen=-1):
    e = np.exp(z - z.max(axis=eksen, keepdims=True))
    return e / e.sum(axis=eksen, keepdims=True)

degerler = np.array([[1.0, 0.0], [0.0, 1.0], [1.0, 1.0]])
skor = np.array([2.0, 0.0, 0.0])

# buraya yaz

Örnek çözüm

model.py
import numpy as np

def softmax(z, eksen=-1):
    e = np.exp(z - z.max(axis=eksen, keepdims=True))
    return e / e.sum(axis=eksen, keepdims=True)

degerler = np.array([[1.0, 0.0], [0.0, 1.0], [1.0, 1.0]])
skor = np.array([2.0, 0.0, 0.0])

a = softmax(skor)
print(np.round(a, 3))
print(np.round(a @ degerler, 3))
print(np.allclose(softmax(np.zeros(3)) @ degerler, degerler.mean(axis=0)))

Beklenen çıktı

[0.787 0.107 0.107]
[0.893 0.213]
True

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Attention'ın RNN'e göre temel avantajı nedir?

  • Etiket gerektirmez
  • Uzak konumları tek adımda ilişkilendirir ve paralel hesaplanır Doğru cevap
  • Daha az bellek kullanır
  • Parametresi yoktur

Açıklama: RNN'de bilgi adım adım taşınır; attention doğrudan bağlantı kurar.

2 Değerlerin ağırlıklı ortalamasını al.

Soru
cikis = agirlik ____ degerler
Cevap
cikis = agirlik @ degerler

Açıklama: Ağırlık vektörü ile değer matrisinin çarpımı ağırlıklı toplamdır.

3 Kavramları eşleştir.

Kavram Anlamı
skor Benzerlik ölçüsü
softmax Ağırlıklara çevirir
değer Taşınan bilgi
eşit skor Düz ortalama

Uzman bölümündeki tüm dersler