"New Neural", MetaTrader 5 platformu için bir sinir ağı motorunun Açık Kaynak projesidir. - sayfa 56

 
Ukrayna :

Evet, tam olarak bilmek istediğim buydu.

mql5'e

Şimdi tehdit, verilerin özel işlemci dizilerine kopyalanmasının gerekli olup olmayacağı veya bir dizinin normal bir işlevde parametre olarak aktarılmasının desteklenip desteklenmeyeceği konusunda endişeleniyor. Bu soru tüm projeyi temelden değiştirebilir.

ZZY Sadece OpenCL API'sini verme planlarında cevap verebilir misin, yoksa onu kendi paketleyicilerine sarmayı mı planlıyorsun?

1) GPU belleğini kastediyorsanız, evet, özel dizileri (oraya/oradan) kopyalamak için özel işlevler olacaktır.
2) Bir sarmalayıcı olacak, yalnızca HW GPU'lar desteklenecek (OpenCL 1.1 desteği ile).
Varsa, birkaç GPU seçimi yalnızca terminal ayarlarından yapılır.
OpenCL eşzamanlı olarak kullanılacaktır.
 
Ukrayna :

Evet, tam olarak bilmek istediğim buydu.

mql5'e

Şimdi tehdit, verilerin özel işlemci dizilerine kopyalanmasının gerekli olup olmayacağı veya bir dizinin normal bir işlevde parametre olarak aktarılmasının desteklenip desteklenmeyeceği konusunda endişeleniyor. Bu soru tüm projeyi temelden değiştirebilir.

ZZY Sadece OpenCL API'sini verme planlarında cevap verebilir misin, yoksa onu kendi paketleyicilerine sarmayı mı planlıyorsun?

Yargılama:

mql5 :
Aslında OpenCL.dll kütüphanesinin fonksiyonlarını üçüncü parti DLL'leri dahil etmeye gerek kalmadan direkt olarak kullanmak mümkün olacaktır.

OpenCL.dll işlevlerini yerel MQL5 işlevleriymiş gibi kullanmak mümkün olacak ve derleyicinin kendisi çağrı yönlendirmelerini gerçekleştirecektir.

Buna dayanarak, OpenCL.dll'nin işlevlerinin şimdiden yerleştirilebileceği sonucuna varabiliriz (sahte çağrılar).

Renat ve mql5 , "çevreyi" doğru anladım mı?

 
joo :

Yargılama:

OpenCL.dll işlevlerini yerel MQL5 işlevleriymiş gibi kullanmak mümkün olacak ve derleyicinin kendisi çağrı yönlendirmelerini gerçekleştirecektir.

Buna dayanarak, OpenCL.dll'nin işlevlerinin şimdiden yerleştirilebileceği sonucuna varabiliriz (sahte çağrılar).

Renat ve mql5 , "çevreyi" doğru anladım mı?

Geliştirme aşamasında OpenCL ile çalışmak. OpenCL.dll'yi doğrudan kullanmaktan farklılıklar olacaktır.
 

Şimdiye kadar, projenin aşağıdaki şemasına sahibim:


Nesneler dikdörtgenler, yöntemler elipslerdir.
 

işleme yöntemleri 4 kategoriye ayrılır:

метод параллельных расчётов
метод последовательных расчётов
метод расчётов активатора
метод расчётов операторов задержки

bu dört yöntem, tüm katmanlardaki tüm işlemeyi tanımlar, yöntemler, temel sınıftan miras alınan ve nöron türüne bağlı olarak gerektiği şekilde aşırı yüklenen yöntem nesneleri aracılığıyla işleme içe aktarılır .
 
Ukrayna :

Nikolai, böyle bir sloganı biliyorsun - erken optimizasyon - bu, tüm kötülüklerin köküdür.

Şimdilik OpenCL'i unutun, onsuz değerli bir şeyler yazardım. Özellikle henüz düzenli bir fırsat olmadığı için, her zaman geçiş yapmak için zaman olacaktır.

 
TheXpert :

Nikolai, böyle bir sloganı biliyorsun - erken optimizasyon - bu, tüm kötülüklerin köküdür.

Şimdilik OpenCL'i unutun, onsuz değerli bir şeyler yazardım. Özellikle henüz düzenli bir fırsat olmadığı için, her zaman geçiş yapmak için zaman olacaktır.

Evet, deyim akılda kalıcı ve geçen sefer neredeyse ona katılıyordum, ancak analiz ettikten sonra, planlamanın böyle çalışmayacağını anladım ve sonra onu GPU için yeniden yapmanız gerektiğinde, gerçekten özel ihtiyaçları var. .

GPU olmadan planlıyorsanız, sınıfı ortak bir atadan devralarak hem nöron içindeki işlemlerden hem de gerekli bellek hücrelerine hesaplama verisi atamaktan sorumlu olacak bir Neuron nesnesi yapmak mantıklıdır, kolayca bağlayabilirsiniz. istenen nöron tipi vb.

ama biraz düşündükten sonra, böyle bir yaklaşımın GPU hesaplamalarını tamamen aşacağını hemen anladım, doğmamış çocuklar zaten emeklemeye mahkumdu.

Ancak, "paralel hesaplama yönteminin" girdileri *wg cinsinden ağırlıklarla çarpmanın çok özel bir işlemi anlamına geldiği, sıralı hesaplama yönteminin toplam +=a[i] ve benzeri anlamına geldiği yukarıdaki yazımla kafanızın karıştığından şüpheleniyorum.

Sadece GPU ile gelecekte daha iyi uyumluluk için, nöronlardan işlemler türetmeyi ve bunları katman nesnesinde tek bir geçişte birleştirmeyi öneriyorum ve nöronlar yalnızca nereye gidecekleri konusunda bilgi sağlayacak.

 

Ders 1 burada https://www.mql5.com/ru/forum/4956/page23

Ders 2 burada https://www.mql5.com/en/forum/4956/page34

Ders 3 burada https://www.mql5.com/ru/forum/4956/page36

Ders 4 burada https://www.mql5.com/en/forum/4956/page46

Ders 5 (son). Seyrek Kodlama

Bu konu en ilginç olanıdır. Bu dersi yavaş yavaş yazacağım. Bu yüzden arada bir bu gönderiyi kontrol etmeyi unutmayın.

Genel anlamda, görevimiz son N çubuktaki fiyat teklifini (vektör x ) temel fonksiyonlara ( A matrisinin satırları) doğrusal bir ayrıştırma olarak göstermektir:

nerede s bulmak ve sinir ağının bir sonraki katmanına (örneğin SVM) girdi olarak kullanmak istediğimiz lineer dönüşümümüzün katsayılarıdır. Çoğu durumda, A'nın temel işlevleri bizim tarafımızdan bilinmektedir, yani. onları önceden seçiyoruz. Bunlar, farklı frekansların sinüsleri ve kosinüsleri (Fourier dönüşümünü elde ederiz), Gabor fonksiyonları, Gamatonlar, dalgacıklar, eğriler, polinomlar veya diğer fonksiyonlar olabilir. Bu fonksiyonlar bizim tarafımızdan önceden biliniyorsa, seyrek kodlama, bu katsayıların çok sayıda sıfıra (seyrek vektör) eşit olacak şekilde bir s katsayıları vektörü bulmaya indirgenir. Buradaki fikir, çoğu bilgi sinyalinin, sinyal örneklerinin sayısından daha az temel fonksiyonla tanımlanan bir yapıya sahip olmasıdır. Sinyalin seyrek açıklamasında yer alan bu temel işlevler, sinyali sınıflandırmak için kullanılabilecek gerekli özellikleridir.

İlk bilginin seyrek doğrusal dönüşümünü bulma görevi, Sıkıştırılmış Algılama (http://ru.wikipedia.org/wiki/Compression_sensing) olarak adlandırılır. Genel olarak, görev aşağıdaki gibi formüle edilmiştir:

As = x'e bağlı olarak s'nin L0 normunu en aza indirin

burada L0 normu, vektörün sıfır olmayan değerlerinin sayısına eşittir s . Bu sorunu çözmenin en yaygın yöntemi, L0 normunu, temel takip yönteminin temelini oluşturan L1 normu ile değiştirmektir ( https://en.wikipedia.org/wiki/Basis_pursuit ):

As = x'e bağlı olarak, s'nin L1 normunu en aza indirin

burada L1 normu |s_1|+|s_2|+...+|s_L| olarak hesaplanır. Bu problem doğrusal optimizasyona indirgenir

Seyrek vektörleri bulmak için başka bir yaygın yöntem, eşleştirme arayışıdır ( https://en.wikipedia.org/wiki/Matching_pursuit ). Bu yöntemin özü, verilen A matrisinden a _i birinci temel fonksiyonunu, diğer temel fonksiyonlara kıyasla en büyük katsayılı s_i ile x girdi vektörüne uyacak şekilde bulmaktır. Girdi vektöründen bir _i*s_i çıkardıktan sonra, elde edilen kalana aşağıdaki temel işlevi ekleyin, vb. Verilen hataya ulaşana kadar. Eşleştirme izleme yönteminin bir örneği, en küçük kalanla giriş teklifine birbiri ardına sinüzoidi sığdıran aşağıdaki göstergedir: https://www.mql5.com/ru/code/130 .

Temel fonksiyonlar A (sözlük) bizim için önceden bilinmiyorsa, bunları sözlük öğrenme adı verilen yöntemleri kullanarak x girdi verisinden bulmamız gerekir. Bu, seyrek kodlama yönteminin en karmaşık (ve bana göre en ilginç) kısmıdır. Önceki derste, bu fonksiyonların nasıl bulunabileceğini gösterdim, örneğin, bu fonksiyonları girdi alıntısının ana vektörleri yapan Oji kuralı kullanılarak. Ne yazık ki, bu tür temel işlevler, girdi verilerinin seyrek bir tanımına yol açmaz (yani, vektör s seyrek değildir).

Seyrek doğrusal dönüşümlere yol açan mevcut sözlük öğrenme yöntemleri şu şekilde ayrılır:

  • olasılıksal
  • küme
  • internet üzerinden

Temel fonksiyonları bulmak için olasılıksal yöntemler , maksimum olasılığı maksimize etmeye indirgenir:

P(x|A)'yı A üzerinde maksimize et.

Genellikle yaklaşıklık hatasının bir Gauss dağılımına sahip olduğu varsayılır, bu da bizi aşağıdaki optimizasyon problemini çözmeye yönlendirir:

(1) ,

iki adımda çözülür: (1-seyrek kodlama adımı) sabit temel fonksiyonlar A ile, parantez içindeki ifade s vektörüne göre en aza indirilir ve (2-sözlük güncelleme adımı) bulunan vektör s sabitlenir ve ifade parantez içinde, gradyan iniş yöntemi kullanılarak temel fonksiyonlar A'ya göre minimize edilir:

(2)

burada üst simgedeki (n+1) ve (n) yineleme sayılarını gösterir. Bu iki adım (seyrek kodlama adımı ve sözlük öğrenme adımı), yerel bir minimuma ulaşılana kadar tekrarlanır. Temel fonksiyonları bulmak için bu olasılıksal yöntem, örneğin,

Olshausen, BA, & Field, DJ (1996). Doğal görüntüler için seyrek bir kod öğrenerek basit hücre alıcı alan özelliklerinin ortaya çıkışı. Doğa, 381(6583), 607-609.

Lewicki, MS ve Sejnowski, TJ (1999). Aşırı tamamlanmış temsilleri öğrenmek. Sinirsel Hesaplama, 12(2), 337-365.

Optimal Directions (MOD) yöntemi aynı iki optimizasyon adımını (seyrek kodlama adımı ve sözlük öğrenme adımı) kullanır, ancak ikinci optimizasyon adımında (sözlük güncelleme adımı) temel fonksiyonlar, ifadenin türevini parantez içinde eşitleyerek hesaplanır (1 ) sıfıra göre :

,

nereden alıyoruz

(3) ,

burada s + bir sözde ters matristir. Bu, gradyan iniş yönteminden (2) daha doğru bir temel matris hesaplamasıdır. MOD yöntemi burada daha ayrıntılı olarak açıklanmaktadır:

K. Engan, SO Aase ve JH Hakon-Husoy. Çerçeve tasarımı için optimal yönler yöntemi. IEEE Uluslararası Akustik, Konuşma ve Sinyal İşleme Konferansı, cilt. 5, s. 2443-2446, 1999.

Sözde-ters matrisleri hesaplamak zahmetlidir. k-SVD yöntemi bunları hesaplamaktan kaçınır. Şimdiye kadar, bu yöntemi kendim çözemedim. Bununla ilgili buradan okuyabilirsiniz:

M. Aharon, M. Elad, A. Bruckstein. K-SVD: Seyrek Temsil için Aşırı Tamamlanmış Sözlükler Tasarlamak İçin Bir Algoritma. IEEE Trans. Sinyal İşleme , 54(11), Kasım 2006.

Bir sözlük bulmak için küme ve çevrimiçi yöntemleri de çözemedim. İlgilenenleri aşağıdaki incelemeye yönlendiriyorum:

R. Rubinstein, A. M. Bruckstein ve M. Elad, "Serbest temsil modellemesi için sözlükler", Proc. IEEE, 98(6), s. 1045-1057, Haziran 2010 .

İşte konuyla ilgili bazı ilginç videolar:

http://videolectures.net/mlss09us_candes_ocsssrl1m/

http://videolectures.net/mlss09us_sapiro_ldias/

http://videolectures.net/nips09_bach_smm/

http://videolectures.net/icml09_mairal_odlsc/

Her şey varken. Mümkün olduğu kadar, bu foruma gelen ziyaretçilerin ilgisinin yanı sıra, bu konuyu gelecekteki gönderilerde genişleteceğim.

 
TheXpert :

Nikolai, böyle bir sloganı biliyorsun - erken optimizasyon - bu, tüm kötülüklerin köküdür.

Bu, geliştiriciler arasındaki oyukları örtbas etmek için o kadar sık kullanılan bir tabirdir ki, her kullanımda ellerinizi alt edebilirsiniz.

Söz konusu uzun ömürlü ve doğrudan ateş hızına ve yüksek yüklere odaklanan yüksek kaliteli yazılım geliştirmeye gelince, bu ifade temelde zararlıdır ve kesinlikle hatalıdır.

Bunu uzun yıllara dayanan proje yönetimi pratiğimde birçok kez doğruladım.

 
Renat :

Bu, geliştiriciler arasındaki oyukları örtbas etmek için o kadar sık kullanılan bir tabirdir ki, her kullanımda ellerinizi alt edebilirsiniz.

Onlar. Hangi arayüzün ne zaman ortaya çıkacağını önceden bildiği bazı özellikleri hesaba katmak gerekiyor çünkü bu performans artışı sağlıyor ??

Bunu uzun yıllara dayanan proje yönetimi pratiğimde birçok kez doğruladım.

Peki, yılların deneyimini uygulayabilir misin? Aynı zamanda kibirli bir ton yerine rol model ve profesyonellik gösterin.
Neden: