BFGS - Eşlenik Gradyan Yöntemi


25

Optimizasyon için BFGS ve eşlenik gradyan arasında seçim yaparken nelere dikkat etmeliyim? Bu değişkenlere uymaya çalıştığım fonksiyon üstel fonksiyonlardır; Ancak, asıl amaç işlevi diğer şeylerin yanı sıra bütünleşmeyi içerir ve eğer yardımı olursa çok maliyetlidir.


3
Eh, BFGS kesinlikle depolama açısından CG'den daha maliyetlidir. Biri yaklaşık bir Hessian'ın bakımını gerektirirken, diğeri sadece sizden birkaç vektöre ihtiyaç duyar. Öte yandan, her ikisi de bir gradyanın hesaplanmasını gerektirir, ancak bana BFGS ile, gradyan için bir rutin yazmak yerine sonlu fark yaklaşımlarını kullanarak kurtulabileceğiniz söylendi (ancak sonlu farkları kullanan sürüm biraz yakınsak. Elbette gerçek degradeleri kullanandakinden daha yavaş). Otomatik bir farklılaşma imkanınız varsa, tek endişeniz depolanır.
JM,

sadece ~ 7 (kesinlikle 10'dan az) değişkenlere uymak zorunda kalan değişkenler, kendir yaklaşımının sadece (en fazla) 10x10'luk bir matrisin doğru olduğu anlamına gelir? bu durumda biri diğerinden daha hızlı mı?
drjrm3

Hızda çok fazla bir fark olacağını sanmıyorum; eğer bir şey varsa, muhtemelen hesaplamanızın en çok zaman alacağı kısmının, fonksiyon değerlendirmesi için yapmanız gereken kareler olduğunu düşünüyorum. Parametre sayısı iddia ettiğiniz kadar küçükse, kendiniz de bazı deneyler yapmalısınız.
JM

Yanıtlar:


13

JM depolama konusunda haklıdır. BFGS, yaklaşık bir Hessian gerektirir, ancak kimlik matrisi ile başlatabilir ve daha sonra, sadece dereceli güncellemelerden ziyade gradyan bilgisine sahip olduğunuz sürece, sadece yaklaşık Hessian için ikinci derece güncellemeleri hesaplayabilirsiniz. BFGS, yarı-Newton bir yöntemdir ve CG'den daha az adımda bir araya gelecektir ve "sıkışıp kalma" eğilimine biraz daha az eğilimlidir ve her yineleme için önemli bir iniş elde etmek için hafif algoritmik tweaks gerektirir.

Bunun aksine, CG, yön türevlerini (tekrar, analitik ya da sonlu farkları kullanarak) hesaplayabiliyorsanız, sizin için yararlı olabilecek matris-vektör ürünlerini gerektirir. Bir yönlü türevin sonlu bir fark hesaplaması, bir Hessian'ın sonlu bir fark hesaplamasından çok daha ucuz olacaktır, bu nedenle algoritmanızı sonlu farklar kullanarak oluşturmayı seçerseniz, sadece doğrudan yönlü türevi hesaplayın. Ancak bu gözlem, gradyan bilgisinin iç ürünlerini kullanarak yaklaşık Hessianları hesaplayacak olan BFGS için geçerli değildir.

Yakınsama oranları açısından, eğer probleminizdeki karar değişkenlerinin sayısı ise, CG iterasyonları yaklaşık olarak Newton metodunun bir adımına eşittir. BFGS bir yarı Newton yöntemidir, ancak aynı tür gözlem yapmalıdır; Çok fazla inişin olduğu birkaç CG yönü olmadıkça BFGS ile daha az yinelemede yakınsama elde edersiniz ve ardından birkaç CG yinelemesinden sonra yeniden başlatırsınız. CG-benzeri yöntemler, eğer matris-vektör ürünleri ucuzsa ve probleminiz o kadar büyükse, Hessian'ı depolamak zor veya imkansızsa daha ucuzdur. BFGS, yaklaşık Hessian'ını güncellemek için daha fazla vektör-vektör ürünü içerir, bu nedenle her BFGS yinelemesi daha pahalı olacaktır, ancak bunların yerel bir asgariye ulaşması için daha azını gerektirir.nnn

Depolamanın bir sorun olmayacağını biliyorsanız, uygulamanız için küçük bir test problemindeki iki algoritmayı karşılaştırırım. Probleminizin özel özelliklerini bilmeden, benim tahminimce BFGS'nin daha hızlı olacağı, ancak hangisinin daha iyi çalışacağına dair daha iyi bir fikir edinmek için iki algoritmayı gerçekten test etmeniz gerekir.

Son olarak, otomatik farklılaşma hakkında bir kelime: Fortran ( DAEPACK ) için bir kurum içi otomatik farklılaşma (AD) tesisi ile ilgili biraz tecrübe sahibi olduğumda, size AD araçlarının genellikle titiz olduğunu söyleyebilirim. Kendileri oluşturdukları kodu ayırt etmek zorunda olmayabilirler. İki tür AD aracı vardır:

  • kaynaktan kaynaktan AD araçları
  • operatör AD araçları aşırı yükleme

Kaynaktan kaynaktan araçlar, yazdığınız kaynak kodunu alan, ayrıştıran ve otomatik olarak kaynak kodunuzdaki işlevlerin derecesini hesaplayan yeni kaynak kodunu üreten, derlenmiş komutlardır. Operatör aşırı yükleme AD araçları, kaynak kodunuzda aşırı yüklenmiş AD operatörlerini kullanmanızı gerektirir; böylelikle türevlerin hesaplanabilmesi için, AD ile analitik türevleri hesaplamak için ek bir çaba göstermeniz gerekir.


22

Tam depolama BFGS yerine sınırlı bellek varyasyonlarını kullanırsanız, BFGS'nin ilgili maliyeti CG ile daha da artabilir . Bu, son güncellemeleri için BFGS güncellemesini , son çözümlerinden ve gradyanlarından daha fazlasını depolamaya gerek kalmadan bir dizi birinci sınıf güncelleme ile verimli bir şekilde hesaplar .mmm

Tecrübelerime göre, birçok güncellemeye sahip BFGS, mevcut çözümden çok uzakta bilgi depolamakta olan ve çok fazla saklama yapmazsanız yakınsaklığı kaybedebilirsiniz. Sadece bu nedenlerden dolayı, doğrusal olmayan konjuge gradyanlara çok benzeyen BFGS'nin "hafızasız" varyantları vardır ( bunlardan biri için açıklanan son güncellemeye bakınız). Bu nedenle, BFGS yerine L-BFGS yapmaya istekliyseniz, hafıza sorunları ortadan kalkar ve yöntemler birbiriyle ilişkilidir . Anekdot kanıtları, bazen gereksiz ve bazen çok gerekli olduğu için zor bir mesele olarak yeniden başlatıldığına işaret eder .

İkisi arasındaki seçiminiz de büyük ölçüde ilgilendiğiniz sorunlara bağlıdır. Kaynaklarınız varsa, hem sorunlarınız için deneyebilir hem de hangisinin daha iyi sonuç vereceğine karar verebilirsiniz. Örneğin, kişisel olarak bu algoritmalarla optimizasyon yapmıyorum, bunun yerine doğrusal olmayan denklem sistemlerinin çözümünü önemsiyorum. Bunlar için NCG'nin daha iyi çalıştığını ve doğrusal olmayan önkoşulları yerine getirmenin daha kolay olduğunu buldum. BFGS daha sağlamdır.

Açıkçası, bu tür şeyler için en sevdiğim yöntem N-GMRES . Geçen üzerinde küçük minimizasyonu problemi çözerek paranın karşılığını en iyi veren benim durumumda olarak degrade değerlendirme, çok pahalı, bu özellikle doğrudur yeni, düşük-kalıntı çözümü oluşturmak için dolaşır.m


L-BFGS'yi tamamen unuttum. Bunun için +1.
JM,

15

Düşük boyutlarda, iyi uygulanmış bir BFGS metodu genel olarak CG'den daha hızlı ve daha güçlüdür, özellikle de fonksiyon ikinci dereceden çok uzak değilse.

Ne BFGS ne de CG, konveksite hakkında herhangi bir varsayıma ihtiyaç duymaz; sadece ilk Hessian yaklaşımı (BFGS için) karşılık gelir. önkoşullayıcı (CG için) kesin olarak kesin olmalıdır. Fakat bunlar her zaman kimlik matrisi olarak seçilebilir, düşük boyutlarda çok fazla zarar vermeden. Ayrıca bakınız /scicomp//a/3213/1117

Programlanmış bir gradyanın yokluğunda, özellikle fonksiyon değerleri pahalı olduğunda, sayısal gradyanları kullanmak büyük bir çaba kaybıdır. Aksine, türevsel olmayan bir algoritma kullanılmalıdır. Son bir anket için http://archimedes.cheme.cmu.edu/?q=dfocomp adresine bakın .


Bağlantı bana "404 Bulunamadı" veriyor, düzeltebilir misiniz?
Stiefel

@Stiefel: Düzeltdim. Yeni link çok daha gelişmiş bir versiyona işaret ediyor.
Arnold Neumaier
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.