Otomatik farklılaşma - Automatic differentiation

İçinde matematik ve bilgisayar cebiri, otomatik farklılaşma (AD), olarak da adlandırılır algoritmik farklılaşma, hesaplamalı farklılaşma,[1][2] otomatik farklılaşma, ya da sadece otomatik fark, sayısal olarak değerlendirmek için bir dizi tekniktir türev bir bilgisayar programı tarafından belirtilen bir işlevin. AD, ne kadar karmaşık olursa olsun, her bilgisayar programının bir dizi temel aritmetik işlemleri (toplama, çıkarma, çarpma, bölme, vb.) Ve temel işlevleri (exp, log, sin, cos, vb.) Yürüttüğü gerçeğini kullanır. Uygulayarak zincir kuralı tekrar tekrar bu işlemlere göre, keyfi sıranın türevleri otomatik olarak, çalışma hassasiyetine göre doğru ve orijinal programdan en fazla küçük bir sabit faktör daha fazla aritmetik işlem kullanılarak hesaplanabilir.

Şekil 1: Otomatik farklılaşma sembolik farklılaşma ile nasıl ilişkilidir?

Otomatik farklılaşma şunlardan farklıdır: sembolik farklılaşma ve sayısal farklılaşma (sonlu farklar yöntemi). Sembolik farklılaşma, verimsiz koda yol açabilir ve bir bilgisayar programını tek bir ifadeye dönüştürmenin zorluğuyla karşı karşıya kalırken, sayısal farklılaşma ortaya çıkabilir. yuvarlama hataları içinde ayrıştırma işlem ve iptal. Her iki klasik yöntem de karmaşıklığın ve hataların arttığı yüksek türevlerin hesaplanmasında sorunlara sahiptir. Son olarak, her iki klasik yöntem de bir fonksiyonun kısmi türevlerini hesaplamada yavaştır. birçok girişler, gerektiği gibi gradyan tabanlı optimizasyon algoritmalar. Otomatik farklılaşma tüm bu sorunları çözer.

Zincir kuralı, ileri ve geri birikim

AD için temel olan, tarafından sağlanan diferansiyellerin ayrıştırılmasıdır. zincir kuralı. Basit kompozisyon için

zincir kuralı verir

Genellikle, iki farklı AD modu sunulur, ileriye dönük birikim (veya ileri mod) ve ters birikim (veya ters mod). İleri toplama, birinin zincir kuralını içeriden dışarıya geçtiğini belirtir (yani, ilk hesaplama ve daha sonra sonunda ), ters birikim dıştan içe geçişe sahipken (ilk hesaplama ve daha sonra sonunda ). Daha kısaca,

  1. ileriye dönük birikim yinelemeli ilişkiyi hesaplar: ile , ve,
  2. ters birikim yinelemeli ilişkiyi hesaplar: ile .

Genel olarak, hem ileri hem de ters birikim, uygulamanın belirli bir tezahürüdür. program kompozisyon operatörü, iki eşlemeden uygun olanı düzeltmek .

İleri birikim

Şekil 2: Hesaplamalı grafikle ileri birikim örneği

İleri birikim AD'de, ilk önce bağımsız değişken hangi farklılaştırmanın yapıldığına göre ve her bir alt-ifade tekrarlı. Bir kalem ve kağıt hesaplamasında, bu, türevinin tekrar tekrar değiştirilmesini içerir. zincir kuralındaki işlevler:

Bu, birden çok değişkene bir matris ürünü olarak genelleştirilebilir Jakobenler.

Türev bilgisinin akışı değerlendirme sırası ile çakıştığından, birikimi tersine çevirmek doğaldır ve uygulaması kolaydır. Her değişken w türevi ile güçlendirilmiştir (sembolik bir ifade değil, sayısal bir değer olarak saklanır),

nokta ile gösterildiği gibi. Türevler daha sonra değerlendirme adımlarıyla senkronize olarak hesaplanır ve zincir kuralı yoluyla diğer türevlerle birleştirilir.

Örnek olarak şu işlevi düşünün:

Netlik sağlamak için, tek tek alt ifadeler değişkenlerle etiketlenmiştir wben.

Farklılaştırmanın gerçekleştirildiği bağımsız değişkenin seçimi, tohum değerler 1 ve 2. Bu fonksiyonun türevine ilgi x1çekirdek değerleri şu şekilde ayarlanmalıdır:

Çekirdek değerler ayarlandığında, değerler gösterildiği gibi zincir kuralı kullanılarak yayılır. Şekil 2, bu sürecin bir hesaplama grafiği olarak resimli bir tasvirini göstermektedir.

Hesaplamak için gradyan bu örnek fonksiyonun türevlerini gerektiren f sadece değil x1 ama aynı zamanda x2, bir ek tarama, çekirdek değerleri kullanılarak hesaplama grafiği üzerinde gerçekleştirilir .

hesaplama karmaşıklığı Bir taramalı ileri birikim oranı orijinal kodun karmaşıklığıyla orantılıdır.

İleri birikim, işlevler için ters biriktirmeden daha etkilidir f : ℝn → ℝm ile mn Sadece n taramalar gereklidir, m ters birikim için süpürür.

Ters birikim

Şekil 3: Hesaplamalı grafikle ters birikim örneği

Ters birikimli AD'de, bağımlı değişken farklılaştırılacak sabittir ve türev hesaplanır göre her altifade tekrarlı. Bir kalem ve kağıt hesaplamasında, dış zincir kuralında işlevler tekrar tekrar değiştirilir:

Ters birikimde faiz miktarı, bitişik, bir çubukla gösterilir (); bir alt ifadeye göre seçilen bir bağımlı değişkenin türevidir w:

Ters birikim, zincir kuralını dıştan içe veya Şekil 3'teki hesaplama grafiğinde yukarıdan aşağıya doğru ilerler. Örnek fonksiyon skaler değerlidir ve bu nedenle türev hesaplaması için yalnızca bir çekirdek vardır ve (iki bileşenli) gradyanı hesaplamak için hesaplama grafiğinin yalnızca bir taraması gerekir. Bu sadece işin yarısı ileri birikim ile karşılaştırıldığında, ancak ters birikim, ara değişkenlerin depolanmasını gerektirir wben Wengert listesi (veya "bant") olarak bilinen bir veri yapısında bunları üreten talimatların yanı sıra,[3][4] hesaplama grafiği büyükse önemli miktarda bellek tüketebilir. Bu, ara değişkenlerin yalnızca bir alt kümesini depolayarak ve ardından gerekli çalışma değişkenlerini değerlendirmeleri tekrarlayarak yeniden yapılandırarak bir dereceye kadar hafifletilebilir. yeniden materyalleştirme. Kontrol noktası belirleme aracı devletleri kurtarmak için de kullanılır.

Ters birikimi kullanarak türevi hesaplama işlemleri aşağıdaki tabloda gösterilmiştir (tersine çevrilmiş sıraya dikkat edin):

Bir hesaplamanın veri akış grafiği, orijinal hesaplamasının gradyanını hesaplamak için değiştirilebilir. Bu, her birincil düğüm için, birincil kenarlara paralel olan ancak ters yönde akan bitişik kenarlarla bağlanan bir bitişik düğüm eklenerek yapılır. Bitişik grafikteki düğümler, primaldeki düğümler tarafından hesaplanan fonksiyonların türevleri ile çarpmayı temsil eder. Örneğin, ilkeldeki ekleme, bitişikte fanout'a neden olur; ilkel nedenlerdeki yayılma, bitişikteki toplama;[a] a birli işlevi y = f(x) ilkel sebeplerde = ȳ f ′(x) ek olarak; vb.

Ters birikim, işlevler için ileri biriktirmeden daha etkilidir f : ℝn → ℝm ile mn Sadece m taramalar gereklidir, n ileri birikim için süpürür.

Ters mod AD ilk olarak 1976'da Seppo Linnainmaa.[5][6]

Geri yayılım çok katmanlı algılayıcılardaki hataların makine öğrenme, ters mod AD'nin özel bir durumudur.[2]

İleri ve geri birikimin ötesinde

İleri ve geri biriktirme, zincir kuralını aşmanın sadece iki (aşırı) yoludur. Tam bir Jacobian'ı hesaplama sorunu f : ℝn → ℝm asgari sayıda aritmetik işlem ile optimal Jacobian birikimi (OJA) sorunu NP tamamlandı.[7] Bu kanıtın merkezinde, grafiğin kenarlarını etiketleyen yerel parçalar arasında cebirsel bağımlılıkların olabileceği fikri yatar. Özellikle, iki veya daha fazla kenar etiketi eşit olarak kabul edilebilir. Tüm kenar etiketlerinin benzersiz ve cebirsel olarak bağımsız olduğu varsayılırsa, sorunun karmaşıklığı hala açıktır.

Çift sayı kullanarak otomatik ayrım

İleri mod otomatik farklılaştırma, cebir nın-nin gerçek sayılar ve yeni bir aritmetik. Sayıdaki bir fonksiyonun türevini temsil etmek için her sayıya ek bir bileşen eklenir ve tüm aritmetik operatörler artırılmış cebir için genişletilir. Artırılmış cebir, çift ​​sayılar.

Her numarayı değiştirin numara ile , nerede gerçek bir sayıdır, ancak bir soyut numara mülk ile (bir sonsuz küçük; görmek Sorunsuz sonsuz küçük analiz ). Sadece bunu kullanarak, normal aritmetik verir

ve aynı şekilde çıkarma ve bölme için.

Şimdi, polinomlar bu artırılmış aritmetikte hesaplanabilir. Eğer , sonra

nerede türevini gösterir ilk argümanına göre ve , deniliyor tohum, keyfi olarak seçilebilir.

Yeni aritmetik şunlardan oluşur: sıralı çiftler, yazılmış öğeler , yukarıda tarif edildiği gibi, birinci bileşen üzerinde sıradan aritmetik ve ikinci bileşen üzerinde birinci derece farklılaşma aritmetiği ile. Polinomlar üzerinde yukarıdaki sonuçların genişletilmesi analitik fonksiyonlar yeni aritmetik için temel aritmetik ve bazı standart fonksiyonların bir listesini verir:

ve genel olarak ilkel işlev için ,

nerede ve türevleridir sırasıyla birinci ve ikinci argümanlarına göre.

İkili bir temel aritmetik işlem, karma bağımsız değişkenlere uygulandığında - çift ve gerçek numara - gerçek sayı önce . Bir fonksiyonun türevi noktada şimdi hesaplanarak bulunur yukarıdaki aritmetiği kullanarak sonuç olarak.

Vektör bağımsız değişkenleri ve işlevleri

Çok değişkenli fonksiyonlar, yönlü türev operatörü benimseyerek tek değişkenli fonksiyonlarla aynı verimlilik ve mekanizmalarla ele alınabilir. Yani, hesaplamak yeterliyse yönlü türev nın-nin -de yöne , bu şu şekilde hesaplanabilir yukarıdaki ile aynı aritmetiği kullanarak. Eğer tüm unsurları o zaman arzu edilir fonksiyon değerlendirmeleri gereklidir. Pek çok optimizasyon uygulamasında yönlü türevin gerçekten yeterli olduğuna dikkat edin.

Yüksek mertebe ve birçok değişken

Yukarıdaki aritmetik, çok değişkenli fonksiyonların ikinci derece ve daha yüksek türevlerini hesaplamak için genelleştirilebilir. Bununla birlikte, aritmetik kurallar hızla karmaşık hale gelir: karmaşıklık, en yüksek türev derecesinde ikinci dereceden oluşur. Bunun yerine, kesilmiş Taylor polinomu cebir kullanılabilir. Sonuçta ortaya çıkan aritmetik genelleştirilmiş ikili sayılar üzerinde tanımlanır ve işlevleri bir veri türü gibi kullanarak verimli hesaplamaya izin verir. Bir fonksiyonun Taylor polinomu bilindiğinde, türevler kolayca çıkarılır.

Uygulama

İleri mod AD, bir standart olmayan yorum gerçek sayıların çift sayılarla değiştirildiği, sabitlerin epsilon katsayısı sıfır olan ikili sayılara yükseltildiği ve sayısal ilkellerin çift sayılar üzerinde çalışacak şekilde kaldırıldığı programda. Bu standart olmayan yorum genellikle iki stratejiden biri kullanılarak uygulanır: kaynak kodu dönüşümü veya operatör aşırı yükleme.

Kaynak kod dönüşümü (SCT)

Şekil 4: Kaynak kodu dönüşümünün nasıl çalışabileceğine dair örnek

Bir fonksiyonun kaynak kodu, orijinal talimatlarla araya eklenmiş türevleri hesaplamak için ifadeler içeren otomatik olarak oluşturulmuş bir kaynak kodu ile değiştirilir.

Kaynak kod dönüşümü tüm programlama dilleri için uygulanabilir ve derleyicinin derleme zamanı optimizasyonları yapması da daha kolaydır. Bununla birlikte, AD aracının kendisinin uygulanması daha zordur.

Operatör aşırı yükleme (OO)

Şekil 5: Operatör aşırı yüklemesinin nasıl çalışabileceğine dair örnek

Operatör aşırı yükleme onu destekleyen bir dilde yazılmış kaynak kodu için bir olasılıktır. Gerçek sayılar ve temel matematiksel işlemler için nesneler, yukarıda açıklanan artırılmış aritmetiği karşılamak için aşırı yüklenmelidir. Bu, işlevin farklılaştırılması için orijinal kaynak kodundaki işlemlerin biçiminde veya dizisinde herhangi bir değişiklik gerektirmez, ancak aşırı yüklemeyi desteklemek için genellikle sayılar ve vektörler için temel veri türlerinde değişiklikler gerektirir ve genellikle özel işaretleme işlemlerinin eklenmesini de içerir.

İleri birikim için operatör aşırı yüklemesinin uygulanması kolaydır ve ayrıca ters biriktirme için de mümkündür. Ancak, mevcut derleyiciler, ileriye dönük birikimle karşılaştırıldığında kodu optimize etmede geride kalıyor.

Operatör aşırı yüklemesi, hem ileri hem de ters biriktirme için, nesnelerin skalerlerden ziyade gerçek sayıların vektörleri olduğu uygulamalar için çok uygun olabilir. Bunun nedeni, bandın daha sonra vektör işlemlerini içermesidir; bu, her vektör işleminin birçok skaler işlem gerçekleştirdiği hesaplama açısından verimli uygulamaları kolaylaştırabilir. Örneğin, Monte-Carlo simülasyonu ile hesaplanan değerleri farklılaştırmak için vektör bitişik algoritmik farklılaştırma (vektör AAD) teknikleri kullanılabilir.

C ++ 'da otomatik farklılaştırmanın operatör aşırı yükleme uygulamalarının örnekleri şunlardır: Usta ve Stan kütüphaneler.

Notlar

  1. ^ Ağırlık matrisleri açısından, ek, değiştirmek. Ekleme açıcı , dan beri ve fanout vektör dan beri

Referanslar

  1. ^ Neidinger Richard D. (2010). "Otomatik Farklılaştırma ve MATLAB Nesne Tabanlı Programlamaya Giriş" (PDF). SIAM İncelemesi. 52 (3): 545–563. CiteSeerX  10.1.1.362.6580. doi:10.1137/080743627.
  2. ^ a b Baydin, Atılım Güneş; Pearlmutter, Barak; Radul, Alexey Andreyevich; Siskind Jeffrey (2018). "Makine öğreniminde otomatik farklılaşma: bir anket". Makine Öğrenimi Araştırmaları Dergisi. 18: 1–43.
  3. ^ YENİDEN. Wengert (1964). "Basit bir otomatik türev değerlendirme programı". Comm. ACM. 7 (8): 463–464. doi:10.1145/355586.364791.
  4. ^ Bartholomew-Biggs, Michael; Brown, Steven; Christianson, Bruce; Dixon Laurence (2000). "Algoritmaların otomatik farklılaşması". Hesaplamalı ve Uygulamalı Matematik Dergisi. 124 (1–2): 171–190. Bibcode:2000JCoAM.124..171B. doi:10.1016 / S0377-0427 (00) 00422-2. hdl:2299/3010.
  5. ^ Linnainmaa, Seppo (1976). "Birikmiş Yuvarlama Hatasının Taylor Genişlemesi". BIT Sayısal Matematik. 16 (2): 146–160. doi:10.1007 / BF01931367.
  6. ^ Griewank Andreas (2012). "Farklılaşmanın Ters Modunu Kim Buldu?" (PDF). Optimizasyon Hikayeleri, Documenta Matematica. Ekstra Hacim ISMP: 389–400.
  7. ^ Naumann, Uwe (Nisan 2008). "Optimal Jacobian birikimi NP-tamamlandı". Matematiksel Programlama. 112 (2): 427–441. CiteSeerX  10.1.1.320.5665. doi:10.1007 / s10107-006-0042-z.

daha fazla okuma

Dış bağlantılar