Diyelim ki ifadesi var ve ve türevlerini bulmak istiyoruz . Ters mod AD, bu görevi 2 parçaya, yani ileri ve geri geçişlere ayırır.z=x1x2+sin(x1)dzdx1dzdx2
Doğrudan geçiş
İlk olarak, karmaşık ifademizi bir dizi ilkel ifadeye, yani en fazla tek işlev çağrısından oluşan ifadelere ayrıştırırız. Giriş ve çıkış değişkenlerini tutarlılık için de yeniden adlandırdığımı unutmayın, ancak zorunlu değil:
w1=x1
w2=x2
w3=w1w2
w4=sin(w1)
w5=w3+w4
z=w5
Bu gösterimin avantajı, her bir ayrı ifade için farklılaşma kurallarının zaten bilinmesidir. Örneğin, türevi biliyoruz olduğu ve böylece . Bu gerçeği aşağıdaki tersine geçişlerde kullanacağız.sincosdw4dw1=cos(w1)
Temel olarak, ileri geçiş, bu ifadelerin her birini değerlendirmekten ve sonuçları kaydetmekten oluşur. Diyelim ki girdilerimiz: ve . O zaman biz var:x1=2x2=3
w1=x1=2
w2=x2=3
w3=w1w2=6
w4=sin(w1) =0.9
w5=w3+w4=6.9
z=w5=6.9
Ters geçiş
Bu sihir başlangıcıydı ve zincir kuralıyla başlıyor . Temel kural olarak, zincir kuralı , u'ya bağlı olan ve ardından v'ye bağlı olan t(u(v)) değişkeni varsa, o zaman şunu belirtir :uv
dtdv=dtdududv
ya da, eğer t bağlıdır v çeşitli yollar / değişkenler yoluyla ui , örneğin:
u1=f(v)
u2=g(v)
t=h(u1,u2)
o zaman ( burada kanıtına bakınız ):
dtdv=∑idtduiduidv
Sentezleme grafik açısından, bir son düğüm varsa z ve giriş düğümleri wi gelen ve yolu z için wi ara düğümlerin içinden geçer wp (yani z=g(wp) burada wp=f(wi) ), biz türevi bulabilirsiniz dzdwi olarak
dzdwi=∑p∈parents(i)dzdwpdwpdwi
Diğer bir deyişle, çıktı değişkeni türevi hesaplamak için z , herhangi bir ara veya giriş değişkeni wrt wi , sadece ebeveynlerinin türevleri ve ilkel ifade türevi hesaplamak için formül bilmek gerekir wp=f(wi) .
Ters geçiş sonunda başlar (yani, dzdz ) ve tüm bağımlılıklara geriye doğru yayılır. İşte biz ("tohum" ifadesi):
dzdz=1
Yani "değişim olarak okunabilir z tam olarak aynı değişime sonuçları z oldukça açıktır".
O zaman şunu biliyoruz z=w5 ve diğerleri:
dzdw5=1
w5 doğrusal olarakw3 vew4 bağlıdır, bu nedenledw5dw3=1vedw5dw4=1. Zincir kuralını kullanarak bulduklarımız:
dzdw3= dzdw5dw5dw3= 1 × 1 = 1
dzdw4= dzdw5dw5dw4= 1 × 1 = 1
w3= w1w2 tanımından ve kısmi türevlerin kurallarından, dw3dw2= w1. Böylece:
dzdw2= dzdw3dw3dw2= 1 × w1= w1
İleriye doğru geçişlerden zaten bildiğimiz gibi:
dzdw2= w1= 2
Son olarak, w1 katkıda bulunur z ile w3 ve w4 . Daha sonra, kısmi türev kurallarından biliyoruz ki dw3dw1=w2vedw4dw1=cos(w1). Böylece:
dzdw1=dzdw3dw3dw1+dzdw4dw4dw1=w2+cos(w1)
Ve yine, bilinen girdiler göz önüne alındığında, bunu hesaplayabiliriz:
dzdw1=w2+cos(w1)=3+cos(2) =2.58
Yana w1 ve w2 için sadece takma adlardır x1 ve x2 , bizim cevap olsun:
dzdx1=2.58
dzdx2=2
Ve bu kadar!
Bu açıklama yalnızca skaler girdilerle, yani sayılarla ilgilidir, ancak aslında vektörler ve matrisler gibi çok boyutlu dizilere de uygulanabilir. İfadeleri bu tür nesnelerle ayırt ederken akılda tutulması gereken iki şey:
- Türevler, girdilerden veya çıktılardan çok daha yüksek bir boyutsallığa sahip olabilir, örneğin vektör wrt vektörünün türevi bir matristir ve matris türevi, wrt matrisinin 4 boyutlu bir dizi olduğu (bazen bir tensör olarak adlandırılır). Birçok durumda bu türevler çok seyrektir.
- y=f(x)xyyiyjxkdyidxjyixj
dzdw1=w2+cos(w1)=x2+cos(x1)