Soru Tensorflow otomatik veya sembolik gradyanları kullanıyor mu?


Tensorflow'un otomatik veya sembolik farklılaşmayı kullanıp kullanmadığına dair net bir açıklama bulamadım.

Tensorflow'u sıktım kâğıt ve otomatik gradyanlardan bahsetmektedirler, fakat sadece sembolik gradyanlar mı demek istedikleri açık değildir, çünkü bu kabiliyete sahip olduğunu belirtmektedirler.


25
2018-04-02 06:46


Menşei


Ters mod otomatik farklılaşma denilen tekniği kullanır. - Yaroslav Bulatov
Bende de öyle bir kaynak var mı? - Alexander Telfar
Kaynak tensorflow / python / ops / gradients.py, esas olarak "gradyanlar ()" işlevindedir. - Yaroslav Bulatov


Cevaplar:


TF otomatik farklılaşma ve daha özel olarak ters mod otomatik farklılaşma kullanır.


Türev hesaplamak için 3 popüler yöntem vardır:

  1. Sayısal farklılaşma
  2. Sembolik farklılaşma
  3. Otomatik farklılaşma

Sayısal farklılaşma Türevin tanımına dayanır: enter image description hereçok küçük koyacağın yer h ve işlevi iki yerde değerlendirmek. Bu en temel formüldür ve pratikte insanlar daha küçük tahmin hatası veren diğer formülleri kullanırlar. Bir türevi hesaplamanın bu yolu, çoğunlukla işlevinizi bilmiyorsanız ve yalnızca örneklemeniz için uygundur. Ayrıca, yüksek boyutlu bir işlev için çok fazla hesaplama gerektirir.

Sembolik farklılaşma matematiksel ifadeleri işler. Matlab veya mathematica kullandıysanız, o zaman siz böyle bir şey gördüm enter image description here

Burada her matematik ifadesi için türevleri bilirler ve ortaya çıkan türevi hesaplamak için çeşitli kurallar (ürün kuralı, zincir kuralı) kullanırlar. Daha sonra ortaya çıkan ifadeyi elde etmek için son ifadeyi basitleştirirler.

Otomatik farklılaşma Bilgisayar programlarının bloklarını manipüle eder. Bir farklılaştırıcı, bir programın her öğesinin türevini alma kurallarına sahiptir (çekirdek TF'de herhangi bir işlemi tanımladığınızda, bir degrade kaydet Bu op) için. Ayrıca karmaşık ifadeleri daha basit olanlara kırmak için zincir kuralı kullanır. Burada bir iyi bir örnek nasıl bazı açıklamalarla gerçek TF programlarında çalışır.


Otomatik farklılaşmanın Sembolik farklılaşma ile aynı olduğunu düşünebilirsiniz (bir yerde matematik ifadesinde, bilgisayar programlarında başka bir yerde çalışırlar). Ve evet, bazen çok benzerler. Fakat kontrol akış tabloları için (`if, while, döngüler) sonuçlar çok farklı:

sembolik farklılaşma verimsiz koda yol açar   bitti ve bir bilgisayar programını bir bilgisayara dönüştürme zorluğuna   tek ifade


27
2017-07-16 22:36





"Otomatik farklılaşma" ile "sonlu farklara göre farklılaşma" düşünebilirsiniz. f(x) gibi [f(x+e)-f(x-e)]/(2e). Bununla birlikte, otomatik farklılaşma farklıdır ve sonlu fark yöntemi "sayısal farklılaşma" nın bir örneğidir.

TensorFlow, bunun için ters mod otomatik farklılaştırma kullanır gradients gibi gradyan işleminin geçerliliğini kontrol eden testler için işlem ve sonlu farklar yöntemi İşte.

Sonlu fark yöntemi, yüksek boyutlu problemler için pratik değildir, tersine çevirme modu otomatik olarak farklılaştırılması, orijinal fonksiyonun hesaplanmasıyla kabaca aynı maliyette bir "çok - 1" fonksiyonunun türevini verir.

Uygulamanın çekirdeğini görebilirsiniz İşte.

Farklılaşma yönteminin uygulanması bir anlamda semboliktir. gradients işlem, hesaplama grafiğini alır ve daha yüksek seviyeli türevleri elde etmek için "gradyanlar" işlemine geri beslenebilen hesaplama grafiği üretir.

İşte bir örnek

tf.reset_default_graph()
x = tf.Variable(0.)
y = tf.square(x)
z = tf.gradients([y], [x])

İşte aldığınız grafik

enter image description here

Daha fazla boyut için aynı grafik kodu çalışacağından bazı ekstra operatörler var. xama mesele şu ki hem x^2 ve 2*x Aynı grafikte.


23
2018-04-02 12:25



Otomatik farklılaşma sonlu farklar kullanılarak farklılaşma değildir ... bu, zincir kuralının uygulanmasıdır. - Mehrdad
Bu grafik nasıl okunur? Ben x ^ 2 veya 2 * x :-( "göremiyorum" - ngọcminh.oss
Bir "Kare" op var, bu senin x ^ 2. x * 2 ile yapılır mul op - Yaroslav Bulatov
"Otomatik farklılaşma, sembolik farklılaşma ya da sayısal farklılaşma (sonlu farkların yöntemi) değildir." en.wikipedia.org/wiki/Automatic_differentiation - pstjohn


Afaik sembolik farklılaşma, matematiksel, sembolik bir denklemle (yani, denklemin türevini sembolik matematik denklemiyle) çalışmak anlamına gelir. Otomatik farklılaşma, hesaplama işlevlerine dayalı türevleri (buna ek olarak toplama / çıkarma ve çarpma / bölme gibi temel işlemlere ayrılmıştır) hesaplar.

TensorFlow işlemlerin bir hesaplama grafiğine dayalı olarak farklılaştığından, sezgisel olarak otomatik farklılaşma olduğunu söyleyebilirim (burada uygun olan başka bir teknik bilmiyorum; TensorFlow'un hesaplama grafiğini bir Daha sonra bu denklemin türevini hesaplamak için ayrıştırılan matematiksel denklem, prob dışıdır). Yazarlar TensorFlow'da "sembolik farklılaşma" diyorlar Beyaz kağıt Ancak - bunun bir matematikçiye sorarsanız, "(çok boyutlu) veri dizisi" yerine "Tensor" a benzeyen bir yanlış isim olabileceğini düşünüyorum.


2
2017-07-07 05:55