Multi-head attention
Q/K/V, maskeler ve self/cross attention türevleri.
01Boyut sözleşmesi#
MultiHeadAttention(embed,num_heads,dropout=0,causal=false). num_heads pozitif olmalı ve embed’i bölmeli; bölme kontrol öncesinde yapıldığından sıfır vermeyin. Q/K/V rank-3 [B,T,E]. Dört projeksiyon bias içeren Linear katmanlarıdır.
02Ölçekli noktasal çarpım#
Başlar [B·H,T,D], D=E/H şekline ayrılır. Maskeli ve ölçekli skorlardan softmax, isteğe bağlı dropout ve V çarpımı gelir. Başlar birleştirilip çıkış projeksiyonuna gider.
03Maskeler#
forward(query,key,value,mask), nullptr veya [Tq,Tk] toplamsal float maske alır. 0 izin, büyük negatif değer bastırmadır; boolean maske değildir. causal geleceğe −1e9 ekler ve Tq=Tk ister. Her satırda geçerli anahtar bırakın.
MultiHeadAttention attn(64,4,0.f,true);auto x=Tensor::zeros({4,32,64});auto y=attn.forward(x);auto dx=attn.backward(Tensor::full({4,32,64},1.f));04Self / cross gradyan#
forward(x) dq+dk+dv döndürür. Çok argümanlı overload self durumunu nesne adresiyle tanır; aynı depolu farklı Tensor başlıkları self sayılmaz. Cross backward dq döndürür. dk/dv grad_key_input()/grad_value_input() içindedir; aynı memory’den geliyorlarsa toplanmalıdır.
05Karesel skor belleği#
Skorlar B·H·Tq·Tk değer tutar. Bu FlashAttention değildir. Analitik Linear projeksiyonları, yerel MicroTape softmax/matmul zinciriyle birlikte çalışır.
06Attention türev zinciri#
Dropout kapalıyken C=PV ve P=softmax(S), S=QKᵀ/√d olsun. dP=dC Vᵀ, dV=Pᵀ dC; softmax vektör-Jacobian çarpımından dS bulunur. Sonra dQ=dS K/√d ve dK=dSᵀ Q/√d hesaplanır. MicroTape bu zinciri, Linear projeksiyonlar ise parametre türevlerini uygular.