Geometri ve sayısal algoritmalar · 44 / 53
Strassen, FFT ve sayısal maliyet
Anla → iz sür → uygula → gerekçelendir
2 dk okuma · uygulama için ayrıca zaman ayırKlasik n×n matris çarpımı üç döngüyle Θ(n³) aritmetik işlem yapar. Strassen, bloklara bölünmüş iki matrisi sekiz yerine yedi alt çarpımla birleştirir: T(n)=7T(n/2)+Θ(n²), yani Θ(n^log₂7). Ek toplama, geçici alan, cache davranışı ve sayısal hata nedeniyle küçük matrislerde daha iyi değildir. Modern AI sistemlerinin bütün matris çarpımlarını Strassen ile yaptığı söylenemez; donanım ve kernel seçimi önemlidir.
FFT bir polinomu uygun köklerde değerlendirerek convolution hesaplamasını hızlandırır. Katsayılar arasında doğrudan convolution Θ(n²), FFT tabanlı yöntem uygun uzunlukta O(n log n) aritmetik işlemdir. Circular ve linear convolution farklıdır; yeterli zero-padding yapılmazsa sonuç sarılır. Floating-point FFT sonrası yuvarlama hatası kontrol edilmelidir.
NTT uygun asal modül ve birim köklerle exact modular convolution sağlar. CRT ile daha büyük katsayılar yeniden kurulabilir, fakat sınırları kanıtlanmalıdır. Aritmetik işlem sayısı ile büyük tamsayı bit maliyeti aynı ölçüm değildir. BLAS, SIMD, GPU ve tiling çoğu gerçek uygulamada asimptotik değişim kadar önemlidir.
Adım adım iz sürme
[1,2] ve [3,4] polinom çarpımı [3,10,8] verir: orta katsayı 1×4+2×3.
Maliyet ve varsayımlar
Doğrudan convolution O(nm); FFT O(N log N), N≥n+m−1 uygun dönüşüm uzunluğu.
Çalıştırılabilir örnek
Python 3 ile çalıştır. Assert küçük bir örneği denetler; genel doğruluk ispatı değildir. Bazı ileri örnekler özellikle küçük model veya referans oracle'dır; tam üretim uygulaması değildir.
def convolution(a,b):
out=[0]*(len(a)+len(b)-1)
for i,x in enumerate(a):
for j,y in enumerate(b): out[i+j]+=x*y
return out
assert convolution([1,2],[3,4])==[3,10,8]KAVRADIĞINI KONTROL ET
Sıra sende
FFT testinde yalnız rastgele küçük katsayılar yeterli mi?
Çözümün mantığını göster
Hayır. Büyük katsayı, uzun dizi, cancellation ve sınır uzunlukları ekle; küçük girdilerde exact oracle ile karşılaştır.
Bir adım ileri
- Örneği değiştirmeden önce girdi sözleşmesini ve invariantı yaz.
- Uygun olan boş, sınır, tekrar ve adversarial girdileri ekle. Basit bir oracle ile karşılaştır.
- Belirtilen modelde maliyeti çıkar; farklı girdi büyüklüklerini ölç ve farkları gerekçelendir.
Temel kaynaklar ve ders notları
Bu eğitimde özgün anlatım kullanıldı; aşağıdaki kaynaklar ispatlar ve ileri okumalar sunar. Bağlantılar daha geniş ders modülünü kapsayabilir.
MIT 6.046J · Design and Analysis ↗