Kısım III · Merak · Bölüm 48

Eğim ve Türev

Matematik sezgisi: küçük değişimin izini sürmek (Slopes and derivatives, intuitively)

Neden burada · Neye dayanıyor

Neden burada: Bölüm 47'de sıcaklık örneklerine uyan sayıları rastgele denemelerle aradık. Düğmeleri oynattık; sonuç daha iyiyse yeni konumu tuttuk. Şimdi bir adım daha bilinçli olmak istiyoruz: bir düğmeyi biraz artırmak sonucu artırır mı, azaltır mı; ne kadar etkiler? Bu bölümün matematiği yalnızca bu soruyu cevaplamak için var. Henüz sinir ağı kurmuyoruz; onun motorunun ihtiyaç duyacağı değişim dilini kuruyoruz.

Neye dayanıyor: Bölüm 47.3'ten modelin ayarlanabilir sayılarına parametre dediğimizi; Bölüm 1.1'den girdi–işlem–çıktı kutusunu kullanacağız. Liseden çarpma, parantez ve koordinat fikri yeterli. Türev formülünü hatırlaman gerekmiyor. Bölüm 4.4'teki kayan nokta, sayısal ölçümlerimizdeki küçük yuvarlama farklarını açıklayacak.

  1. Kat 10Uygulamalar ve yapay zekâModelin sayıları arasındaki değişimi anlamaya çalışıyoruz. Matematik yeni bir donanım katı değil, bu programı tarif etme dili.
  2. Kat 5Python ve fonksiyonlarKüçük hesapları görünür ve tekrar çalıştırılabilir kılıyoruz.
  3. Kat 3İşlemci, bellek, GPUHesapları donanım yapar. Büyük ağlar GPU'dan güç alır; bu bölümün birkaç sayısı için GPU gerekmez.
  4. Kat 0–2Bit, kapılar, devrelerYukarıdaki sayıların fiziksel tabanı. Büyük Harita'nın zemini değişmedi.

Bölümün sonunda fonksiyonun değeri ile yerel eğimini ayırabilecek, birden çok girdinin hassasiyetlerini gradyanda toplayabilecek ve iç içe kutularda etkilerin neden çarpıldığını anlatabileceksin. Önce sezgiyi, sonra sayıları kuracağız. Fonksiyon ve döngü yazımı için Python'ın resmî öğreticisi de kaynaklardadır.7

48.1 Fonksiyon matematikte: girdiden çıktıya kural

Bir sayıyı alıp önceden belirlenmiş bir kuralla başka bir sayıya götüren kutuyu düşün. “Girdiyi kendisiyle çarp” diyorsak kutuya 3 girdiğinde 9, −2 girdiğinde 4 çıkar. Matematikte buna fonksiyon (function) diyoruz. Buradaki örnek f(x) = x². x girdi için bir ad, f kural için bir ad, f(x) o girdide elde edilen sonuçtur. Üstteki küçük 2, “ikiyle çarp” değil, “kendisiyle çarp” der. Karpathy'nin micrograd ders defteri de önce sıradan bir sayı fonksiyonu kurup onun çıktısını ve değişimini ölçerek başlar.1

Bölüm 1.3'teki programlama fonksiyonuyla akrabalık burada: girdi gelir, bir işlem yapılır, sonuç döner. Yalnız her programlama fonksiyonu bu kadar temiz bir matematik kutusu değildir; dosyaya yazabilir ya da dışarıdaki durumu değiştirebilir. Bu bölümde kullandığımız kutuların kuralı değişmiyor: aynı girdiyi verirsen aynı sonucu hesaplıyorsun. Böylece “sonuç neden değişti?” sorusunun cevabını girdide arayabiliyoruz. Karpathy'nin yazılı anlatımındaki küçük aritmetik devrelerin çalışma biçimi de budur.2

Girdi xKuralÇıktı f(x)
−2(−2) × (−2)4
−1(−1) × (−1)1
00 × 00
11 × 11
22 × 24
33 × 39

Bu tabloyu Python ile hesapladık. Her satırı bir kâğıtta nokta olarak işaretleyebilirsin: yatay konum girdi, dikey konum çıktı. “Fonksiyonun grafiği” bu noktaların oluşturduğu şekildir. Şimdilik grafiği hayal etmek zor geliyorsa tablo yeterli; bizim ihtiyacımız şeklin güzel görünmesi değil, birbirine yakın girdilerin çıktılarının nasıl değiştiği. OpenStax'ın türev anlatımı da bu girdi–çıktı noktaları arasındaki eğimden hareket eder.3

Bir formülü kod olarak okumak

def kare(x):
    return x * x

print(kare(3.0))
print(kare(-2.0))

Çalıştırılmış çıktı:

9.0
4.0

def kare(x): fonksiyona ad verir ve bir girdi beklediğini söyler; sondaki iki nokta, girintili gövdenin başlayacağını gösterir. return x * x çarpımı hesaplayıp çağırana verir. İki print satırı aynı kuralı farklı girdilerle çağırır ve sonucu terminale yazar. Python'daki noktalı 3.0 yazımı ondalıklı sayıdır; Türkçe anlatımda ondalık virgül, çalıştırılabilir kodda nokta kullanıyoruz. Python'ın diğer diller arasındaki yeri için Bölüm 21'deki dil haritasına dönebilirsin.

Modelin kuralı ile o anki sayıları ayrı düşün

Bölüm 47'nin tahmin = w*c + b kutusu da bir fonksiyondu. Çıkarım yaparken w ve b sabitti; değişen girdi c idi. Eğitimdeyse belirli örneği sabit tutup w ve b'yi değiştiriyorduk. Aynı hesabı iki farklı soruyla okuyabiliriz: “yeni bir veri verirsem ne çıkar?” veya “ayarlanabilir sayıyı değiştirirsem sonuç ne olur?” CS231n notları da veriyi sabit, ağırlıkları değiştirebildiğimiz sayılar olarak ayırır.4

Bu yüzden x harfini yalnız “kullanıcının verdiği veri” diye düşünme. Bir fonksiyonun değişimini incelerken seçtiğimiz herhangi bir sayı olabilir; bir model parametresi de olabilir. Önce tek düğmeli kutuyu anlayacağız. Birden çok düğmeye 48.3'te geçeceğiz.

48.2 Eğim ve türev: girdiyi azıcık değiştirince çıktı ne kadar değişir?

Bir rampada yatay olarak ilerlediğinde ne kadar yükseldiğin, rampanın eğimini (slope) anlatır. Birim başına yükselme: dikey değişim bölü yatay değişim. Fonksiyon kutusunda aynı oranı çıktıdaki değişim / girdideki değişim diye okuruz. İki farklı noktayı karşılaştırınca aralarındaki ortalama eğimi ölçmüş oluruz; tek bir noktadaki eğime ulaşmak için ikinci noktayı birincisine yaklaştırırız.3

başlangıç girdisi: x
küçük oynatma:     h             (h sıfır değil)
başlangıç çıktısı: f(x)
yeni çıktı:       f(x + h)
ölçülen eğim:     [f(x + h) - f(x)] / h

Buradaki çıkarma “kutunun yeni sonucu ile eski sonucu arasındaki fark”tır. Bölme ise farklı büyüklükte oynatmaları karşılaştırılabilir kılar. Girdiyi 0,01 değiştirip çıktıyı 0,06 değiştirmek ile girdiyi 0,001 değiştirip çıktıyı 0,006 değiştirmek, aynı altı katlık hassasiyeti anlatır. Türev (derivative), bu oran girdideki oynatma sıfıra yaklaşırken belirli bir değere yaklaşıyorsa, o değerdir. Henüz h = 0 koymadık: sıfıra bölmüyoruz, sıfıra yaklaşan ama sıfır olmayan adımların oranını inceliyoruz.3

Kare kutusunun yanına yaklaşmak

f(x) = x² ve başlangıç x = 3 olsun. İlk çıktı 9. Yakın girdilerle yaptığımız hesap aşağıda; ondalık değerler okunabilirlik için yuvarlandı.

Oynatma hYeni çıktı (3 + h)²Çıktıdaki farkFark / h
11677
0,19,610,616,1
0,019,06010,06016,01
0,0019,0060010,0060016,001

Oran 6'ya yaklaşıyor. Demek ki 3'ün çevresinde kutu, girdideki çok küçük değişimi yaklaşık altı katına çeviriyor. f(3) = 9 kutunun değeri; f′(3) = 6 kutunun o noktadaki türevi. Üstteki kesme işaretine benzeyen ′ türev işaretidir. 9 ile 6 farklı soruların cevaplarıdır: “şu an neredeyiz?” ve “azıcık oynarsak nasıl değişir?” OpenStax aynı kare fonksiyonunun 3 noktasındaki türevini 6 bulur.3

def kare(x):
    return x * x

x = 3.0
for h in (1.0, 0.1, 0.01, 0.001):
    egim = (kare(x + h) - kare(x)) / h
    print(f"h={h:.3f} egim={egim:.6f}")

Gerçek çıktı:

h=1.000 egim=7.000000
h=0.100 egim=6.100000
h=0.010 egim=6.010000
h=0.001 egim=6.001000

x = 3.0 başlangıcı sabitler. for dört farklı adımı sırayla h adına bağlar. Girintili ilk satır iki çıktıyı çıkarıp adım büyüklüğüne böler. Son satırdaki f"...", hesaplanan değerleri metnin içine yerleştirir; :.3f üç, :.6f altı ondalık basamak gösterir. Görüntüleme hassasiyeti ile matematikteki kesinlik aynı şey değildir. Bu deney bir sonlu fark (finite difference) ölçümüdür: sıfır olmayan bir adımla türeve yaklaşır; türevin kendisini tanımlayan sonsuz yaklaşma işlemini bilgisayarda tamamlamaz.23

Formülü ezberlemeden sonucu görmek

(x + h)² = x² + 2*x*h + h²
[(x + h)² - x²] / h = 2*x + h
h sıfıra yaklaşınca kalan: 2*x

Çarpma ve parantez açmayla oranı sadeleştirdik; sıfır olmayan h'yi bölebiliyoruz. Kare kutusunun herhangi bir noktasındaki türevi böylece 2*x. 3'te 6, −3'te −6, 0'da 0. Formül bir ezber listesi olarak düşmedi; küçük oynatma sorusunun kısa cevabı olarak çıktı. Türevi geometrik olarak okursan eğriye o noktada yaklaşan düz çizginin, yani teğetin (tangent) eğimidir.3

Türevin işaretiGirdiyi çok az artırırsanNe söylemez?
PozitifÇıktı ilk yaklaşımla artar.Büyük bir artışın da aynı etkiyi vereceğini söylemez.
NegatifÇıktı ilk yaklaşımla azalır.Çıktının kendisinin negatif olduğunu söylemez.
SıfırBirinci dereceden değişim sıfırdır.Çıktının sıfır olduğunu ya da her yönde değişmez kaldığını söylemez.

Örneğin x² fonksiyonunun −3'teki değeri 9 ama türevi −6'dır: girdi sağa doğru biraz ilerlediğinde çıktı aşağı iner. 0 noktasında türev 0'dır; buna rağmen 0'dan biraz uzaklaşırsan kare pozitif olur. Türev o anki ilk değişimi anlatır, fonksiyonun bütün geleceğini değil. CS231n notlarındaki “hassasiyet” yorumu tam bu yerel anlamdadır.4

Küçük adım, sıfır adım ve büyük sözler

“Eğim 6” demek “girdiye 1 ekle, çıktıya kesin 6 eklenir” demek değildir. Kare örneğinde 3'ten 4'e geçince artış 7 idi. Söylediğimiz çıktı değişimi ≈ türev × küçük girdi değişimi. Ayrıca kayan noktalı aritmetikte h'yi durmadan küçültmek de sınırsız doğruluk sağlamaz: birbirine çok yakın yaklaşık sayıları çıkarmak yuvarlama etkisini görünür kılabilir. Bu yüzden ileride türevi her defasında küçük sayılarla yoklamak yerine işlemlerin türev kurallarını kullanacağız.6 Yaklaşık sayı saklamanın alt katı Bölüm 4.4'te.

Karpathy'nin başlangıç fonksiyonuna dönelim

Ders defterindeki fonksiyon f(x) = 3*x² - 4*x + 5.1 Aynı yöntemi bunun üzerinde çalıştırınca 3 noktasında değer 20, 0,001 adımla ölçülen eğim 14,003 çıkar. Gerçek türev o noktada 14'tür: kare kısmının eğimi 3*(2*x), −4*x kısmının eğimi −4, değişmeyen 5'in katkısı 0; toplam 6*x - 4. Burada amaç yeni bir polinom ezberlemek değil: kutunun cevabı olan 20 ile kutunun hassasiyeti olan 14'ü ayrı tutabilmek.

48.3 Birden çok girdi: kısmi türev ve gradyan

Gerçek modelin bir düğmesi yok. Ama birden çok düğme olması ilk sorumuzu değiştirmez: bir tanesini değiştir, diğerlerini sabit tut. Karpathy'nin micrograd defterindeki daha büyük kutuya geçelim: F(a, b, c) = a*b + c. Üç girdi, bir çıktı. Başlangıç a = 2, b = −3, c = 10; sonuç 4. Bir girdinin tek başına etkisine kısmi türev (partial derivative) diyoruz. “Kısmi” yaklaşık demek değil; diğer bağımsız girdileri sabit tutarak yalnız birine göre bakıyoruz.14

Hangi girdi oynadı?Yeni girdilerYeni çıktıÇıktı farkı / 0,01
Yalnız a(2,01; −3; 10)3,97−3
Yalnız b(2; −2,99; 10)4,022
Yalnız c(2; −3; 10,01)4,011

Bu örnekte tek bir girdiye göre kutu düz bir kural olduğundan ölçüm tam türevi verir; ondalık bilgisayar gösterimindeki yuvarlama ayrı konu. a'yı biraz artırmak çıktıyı azaltıyor, çünkü −3 ile çarpılıyor. b'yi artırmak çıktıyı artırıyor, çünkü 2 ile çarpılıyor. c'ye ne eklersen çıktıya aynısı ekleniyor. Böylece ∂F/∂a = b, ∂F/∂b = a, ∂F/∂c = 1. Kıvrımlı ∂ simgesi kısmi türev gösterimidir; “F'nin a'ya göre değişme hassasiyeti” diye oku.4

Üç ayrı cevabı tek bir sırada tutmak

Bu kısmi türevleri girdi sırasıyla yan yana koyarsak (−3, 2, 1) elde ederiz. Bu düzenli sayı listesine burada bir vektör (vector) diyeceğiz; henüz matris hesabı gerekmiyor. Fonksiyonun bütün bu kısmi türevlerinden oluşan vektörün adı gradyan (gradient). ∇F yazımı “F'nin gradyanı” diye okunur. Sıra hayati: ilk sayı a'ya, ikinci b'ye, üçüncü c'ye aittir. Yanlış düğmeye doğru sayıyı bağlamak yine yanlış işlemdir.4

girdiler:  (a,  b, c) = ( 2, -3, 10)
çıktı:     F          = 4
gradyan:   ∇F         = (-3,  2,  1)

Bir programcı “a'nın gradyanı” dediğinde çoğu zaman bu listedeki tek bileşeni kastediyordur. Matematikte daha dikkatli adı “F'nin a'ya göre kısmi türevi”dir. micrograd'daki her sayının grad alanı da bu tek bileşeni saklayacak; bütün modelin gradyanı tek bir Value içindeki sayı değildir. CS231n notları bu gündelik kısaltmayı açıkça kullanır ve ayırır.4

Aynı anda iki düğme oynarsa

Küçük değişimlerin ilk etkilerini toplarız. a'ya 0,01, b'ye −0,02 ekleyelim; c aynı kalsın. Gradyanın tahmini (−3)*0,01 + 2*(−0,02) = −0,07, yeni çıktı tahmini 3,93. Doğrudan hesaplanan yeni çıktı 3,9298. Aradaki −0,0002, iki girdiyi birlikte oynatınca ortaya çıkan 0,01*(−0,02) çarpımından gelir. Bu, “küçük değişim” sözünü ciddiye almak için somut bir neden: gradyan birinci dereceden hassasiyeti verir, bütün büyük değişim terimlerini taşımaz. Sonuçları Python ile doğruladık; yöntem CS231n ve 3Blue1Brown'un yerel hassasiyet anlatımıdır.45

Bölüm 47'de “hangi düğmeyi hangi yöne çevirelim?” diyorduk. Artık her düğme için bir hassasiyet sayımız var. Sonucu küçültmek istiyorsak pozitif türevli sayıyı azaltmayı, negatif türevli sayıyı artırmayı düşünebiliriz; yalnız küçük bir çevrede. Bunun bir eğitim döngüsüne dönüştürülmesi, adım büyüklüğünün seçilmesi ve tekrar edilmesi Bölüm 52'nin konusu. Şimdilik yön bilgisini ürettik, düğmeleri otomatik çevirmedik.

Uygulamamızda

Hukuk-Duolingo uygulamasında puan, can ve seri gibi kurallar zaten açıkça tanımlanabilir; türev bulmak için onları öğrenen bir modele çevirmiyoruz. Yalnız düşünce örneği olarak “bir kullanıcının bir sonraki soruda zorlanmasını tahmin eden bir model” isteseydik, geçmiş cevaplar sabit verimiz, modelin çarpanları ayarlanabilir sayılarımız olabilirdi. Bir kısmi türev, “bu çarpanı değiştirince ölçtüğüm sonuç nasıl değişiyor?” sorusuna cevap verirdi; “bu kullanıcının gerçekten zorlanmasının nedeni budur” demezdi. Bu ayrım bir matematiksel hesap ile gerçek dünya açıklamasını ayırır.4

Prototipinin kodunu görmedik; böyle bir özellik bulunduğunu söylemiyoruz. Ayrıca can sayısı gibi ayrık bir sayacı veya doğru/yanlış kararını her noktada pürüzsüz bir eğri gibi türevleyebileceğimizi varsaymıyoruz. Buradaki oynatılabilir düğmeler, aritmetik modelin sayısal parametreleridir. Türev varsa onun yerel etkisini ölçeriz; bütün yazılım davranışları için tek bir eğim varmış gibi konuşmayız.3

48.4 Zincir kuralı: iç içe fonksiyonlarda değişimin aktarılması

Son bir merdiven kaldı. Bir kutunun çıktısı başka kutunun girdisi olsun: önce q = 2*x + 1, sonra y = q². Artık x çıktıyı doğrudan değil, q üzerinden etkiliyor. Zincir kuralı (chain rule) bu yol üzerindeki yerel değişim oranlarını birleştirir. 3Blue1Brown'un yazılı hesap dersi tam bu fikri kullanır: küçük bir oynatma ara sayıyı, o ara sayı sonraki sayıyı etkiler; ardışık hassasiyetler çarpılır.5

x ──► [ikiyle çarp, bir ekle] ──► q ──► [karesini al] ──► y
3                                  7                      49

Başlangıç x = 3. Birinci kutunun türevi 2: girdiye küçük bir değişim gelince ara sayı onun iki katı değişiyor. İkinci kutunun türevi 2*q; q = 7 noktasında 14. Öyleyse x'teki çok küçük değişim önce ikiye, sonra on dörde katlanır: toplam etki 28. İşlem sırasını düşün: bir kapıdan iki kat, sonraki kapıdan on dört kat geçmek, başlangıçtaki değişimin yirmi sekiz katını verir. Bu benzetmedeki “kapı” aritmetik işlemdir; Bölüm 3'teki elektrikli mantık kapısıyla aynı fiziksel parça değildir.

dy/dx = (dy/dq) * (dq/dx)
      = 14 * 2
      = 28

dy/dx “y'nin x'e göre türevi” diye okunur; bu simgeyi bu aşamada tek bir ad gibi düşün. Sağ taraftaki iki sayı ise tanıdık: son kutunun yerel eğimi ve ilk kutunun yerel eğimi. Bunları toplamadık. Aynı yol boyunca etki üst üste çarpılarak aktarılıyor. Ayrı yollardan aynı sonuca giden etkilerin toplanmasını Bölüm 50'de göreceğiz; iki işlemi şimdiden ayıralım.45

Tekrar ölçerek kontrol edelim

def sonuc(x):
    q = 2 * x + 1
    return q * q

x = 3.0
h = 0.01
print(f"eski={sonuc(x):.4f}")
print(f"yeni={sonuc(x + h):.4f}")
print(f"olculen_egim={(sonuc(x + h) - sonuc(x)) / h:.4f}")

Çalıştırılmış çıktı:

eski=49.0000
yeni=49.2804
olculen_egim=28.0400

İlk satır kutunun adını koyar. İkinci satır ara değeri, üçüncü satır onun karesini üretir. x ile başlangıcı ve h ile ölçüm adımını seçtik. Son üç satır eski sonucu, yeni sonucu ve farkın adıma oranını gösterir. Zincir kuralının 28'i ile deneyin 28,04'ü çelişmiyor: 0,01 sıfır olmayan bir adım; küçük ama sonlu. Gradyanın tahmin ettiği çıktı artışı 0,28, gerçek artış 0,2804. Adım küçülünce oran 28'e yaklaşır.

Neden bu bizi bir motora götürüyor?

Bir modelin tamamının formülünü kâğıtta açıp türevlemek zorunda değiliz. Her küçük kutu kendi girdilerini, çıktısını ve basit türev kuralını bilsin. Hesabın hangi sırayla bu kutulardan geçtiğini de saklayalım. Sonra bu yerel eğimleri uygun biçimde birleştirerek en baştaki sayıların sonuca etkisini bulabiliriz. CS231n'ın modüler geri yayılım anlatımı bu yüzden her küçük işlemi bütün ağdan bağımsız ele alır.4 “Uygun biçimde” sözünün veri yapısı Bölüm 49, hesaplama sırası Bölüm 50.

Bölüm 1 ve 47 ile bağlantı

Bölüm 1.4'ün soyutlaması burada yeniden işe yarıyor: büyük kutunun hassasiyetini anlamak için küçük kutuların sözünü birleştiriyoruz. Bölüm 47'nin parametre düğmeleri artık boş bir benzetme değil: her düğmenin sonuç üzerinde bir yerel hassasiyeti var. Ne var ki “hangi örnek doğru?”, “neyi küçültmek istiyoruz?” ve “ne kadar oynatacağız?” sorularını türev tek başına seçmez. Motor hesabı yapar; amacı ve veriyi biz belirleriz.

Bu bölümde neler kuruldu

Fonksiyon bir girdi–çıktı kuralıydı. Eğim, çıktı değişiminin girdi değişimine oranı; türev, bu oranın adım sıfıra yaklaşırken ulaştığı yerel değerdir. Birden çok girdide diğerlerini sabit tutarak kısmi türev bulduk; bu sayıları sırayla bir araya getiren listeye gradyan dedik. Değer ile türevi, yaklaşık sonlu fark ile türevin kendisini ayırdık. İç içe kutularda aynı yol üzerindeki yerel hassasiyetleri zincir kuralıyla çarptık. x → 2*x+1 → kare yolunda 3 noktasındaki toplam türev 28 çıktı.

Terimler sözlükte, Bölüm 48 başlığı altında. Şimdi bu kutuların nereden geldiğini kaydetmeye hazırız.

Birincil okuma

CS231n, Backpropagation, Intuitions: önce Simple expressions and interpretation of the gradient, sonra Compound expressions with chain rule. Bu iki başlığı okuman yeter; henüz sigmoid ve matris bölümlerine geçmek zorunda değilsin. Derinleşmek için OpenStax, 3.1 Defining the Derivative'ın Tangent Lines ve The Derivative of a Function at a Point başlıkları; ardından 3Blue1Brown, Backpropagation calculus'ın Computing The First Derivative kısmı. Son kaynak nöron terimleri kullanır; burada yalnız zincir fikrini takip et.

Takıldığın yeri yapay zekâ öğretmenine sor. Bölüme özgü görev: “Bana üç küçük fonksiyon ver; önce değerlerini, sonra bir noktada eğimlerinin işaretini tahmin edeyim. Sonra iki kutuyu zincirleyelim; cevabı söylemeden ara etkileri sor.” Öğretmenden formül listesi değil, küçük oynatmanın yolculuğunu iste.

Bölüm sonu soruları

Önce kitaba bakmadan cevapla. Çıktı değeri ile değişim oranını ayrı yaz.

1. f(x) = x² için f(3) ile f′(3) hangi sırayla doğrudur?
Değer 3² = 9; küçük değişime hassasiyet 2*3 = 6'dır. Aynı fonksiyona sorulan iki farklı soru. Bkz. 48.2.
2. Türev için h sıfıra yaklaşırken neden doğrudan h = 0 koymuyoruz?
Fark oranının paydasında h vardır; h = 0 oranı tanımsız kılar. Sıfır olmayan adımlarla oranın yaklaştığı değeri inceleriz. Bkz. 48.2.
3. Bir noktada türevin negatif olması neyi söyler?
Türevin işareti yerel değişimin yönüdür. Pozitif küçük bir girdi değişimi çıktıyı ilk yaklaşımla azaltır; çıktı değerinin işaretini söylemez. Bkz. 48.2.
4. F(a,b,c) fonksiyonunda a'ya göre kısmi türev ölçerken diğer bağımsız girdilere ne yapılır?
Diğer bağımsız girdiler sabit kalır; böylece yalnız a'nın yerel etkisi ölçülür. Kısmi sözcüğü yaklaşık anlamına gelmez. Bkz. 48.3.
5. F = a*b + c için (a,b,c) = (2,−3,10) noktasındaki gradyan hangisidir?
a'nın çarpanı b = −3, b'nin çarpanı a = 2, eklenen c'nin etkisi 1'dir. Girdi sırası korunur. Bkz. 48.3.
6. q = 2*x+1 ve y = q² için x = 3 noktasında dy/dx kaçtır?
q = 7, ikinci kutunun eğimi 14, ilk kutunun eğimi 2'dir; aynı yol boyunca 14*2 = 28. Toplamıyoruz. Bkz. 48.4.
7. Kare fonksiyonunun 0 noktasındaki türevi sıfır. Bundan hangi sonuç çıkar?
Türev ilk yerel değişimi anlatır. 0'ın yakınındaki sıfır olmayan girdilerin kareleri pozitiftir; türev sıfır diye fonksiyon her yerde sabit olmaz. Bkz. 48.2.
8. Sonlu fark ölçümü ile zincir kuralını ayıran temel nokta hangisidir?
Sonlu fark, küçük oynatma deneyinden yaklaşık eğim bulur; zincir kuralı bilinen yerel türevleri birleştirir. İkisi de amaç veya etiket seçmez. Bkz. 48.2 ve 48.4.
9. “Türev 6 ise girdiye 1 ekleyince çıktı kesin 6 artar” cümlesini kare fonksiyonunun 3 noktasını kullanarak düzelt.
Örnek cevabı göster

3'te çıktı 9 ve türev 6'dır. 3'ten 4'e gidersek çıktı 16 olur; artış 7'dir. Türev sonlu bütün adımlar için kesin fark değildir; çok küçük h için artış yaklaşık 6*h olur. Örneğin h = 0,01 için artış 0,0601, tahmin 0,06'dır. Bkz. 48.2.

10. Zincir örneğinde neden 14 ile 2'yi çarptık? “Küçük oynatma” ve “ara çıktı” sözcükleriyle, formülsüz anlat.
Örnek cevabı göster

x'teki küçük oynatma önce ara çıktı q'da iki katlık değişim yapar. y kutusu da q'daki o değişimi bulunduğumuz noktada yaklaşık on dört katına çevirir. Başlangıçtaki oynatma iki aşamadan geçtiği için toplam etki yirmi sekiz kattır. Yerel etkiler aynı yol boyunca ardışık çalışır. Bkz. 48.4.

Kaynaklar

  1. Andrej Karpathy, micrograd_lecture_first_half_roughly.ipynb, başlangıçtaki f(x), küçük h ve a*b+c hücreleri. Yazılı ders defteri; polinom ve üç girdili örneğin çıkış noktası. Bu bölümün hesapları ayrıca Python ile çalıştırıldı.
  2. Andrej Karpathy, Hacker's guide to Neural Networks, Real-valued Circuits, Numerical Gradient, Analytic Gradient. Tarihsel sezgi kaynağı: yazar sayfanın başında bu eski öğretici yerine CS231n notlarını öneriyor; burada hesap kuralları o notlarla çapraz doğrulandı.
  3. OpenStax, Calculus Volume 1, 3.1: Defining the Derivative, Tangent Lines ve The Derivative of a Function at a Point: fark oranı, sıfıra yaklaşma, türevin varlığı ve x²'nin 3 noktasında 6 eğimi.
  4. Stanford CS231n, Backpropagation, Intuitions, Simple expressions and interpretation of the gradient, Compound expressions with chain rule, Intuitive understanding of backpropagation: kısmi türev, gradyan, yerel hassasiyet ve küçük işlem kuralları.
  5. 3Blue1Brown, Backpropagation calculus, Computing The First Derivative, The Constituent Derivatives, Putting It All Together. Grant Sanderson'un dersinin Josh Pullen tarafından hazırlanan yazılı uyarlaması; küçük değişimin bağımlılık zincirinde aktarılması. Video kullanılmadı.
  6. Python belgeleri, Floating-Point Arithmetic: Issues and Limitations: yaklaşık sayı saklama, yuvarlanmış görüntü ile gerçek saklanan değerin ayrılması, işlem hataları.
  7. Python belgeleri, More Control Flow Tools, for Statements, Defining Functions: küçük çalışan örneklerin fonksiyon, döngü ve dönüş değeri sözdizimi.