Bir komut dosyası şeklinde sinir ağı - sayfa 9

 
Andy_Kon писал (а) >>

Sigmoid için hassasiyet ne kadar önemlidir?

9 ondalık basamakta 20 hassasiyetten sonra...


Öğrenme ne zaman etkiler. Bazen yakınsamayı, eğitim dışı kadar ciddi şekilde etkileyebilir.

GA'yı eğitim için kullanırken bu tür problemlerin olmaması gerekir.

 
YuraZ писал (а) >>

3-girdiye ne verileceği (burada kaç girdi olduğu açık)

4-ne zaman yeniden eğitilmeli

5-hangi öğrenme algoritmasını seçmeli

GA - genetik

BP-


3. Gerçekten bir problem, hepsi hayal gücüne bağlı :).

4. Burada hile yapabilirsiniz. Unutma yeteneği olan bir ağ kurun. O kadar zor değil.

Diyelim ki bunu yapabilirsiniz (BP ile öğrenirken harika çalışır):

desen sayısını sınırlayın - diyelim ki 1000.

Bir sonraki desen göründüğünde (örneğin yeni TF)

- en eskiyi kaldır

- bir öğrenme döngüsü yapın

- Ortaya çıkan yeni desen için antrenmanı 5 defa çalıştırıyoruz.



Ne oluyor?

+ Eğitim döngüsü uzun sürmez.

+ eski desen hemen unutulmuyor

- yeni bir kalıp da hemen öğrenilmez, ancak

+ agresif öğrenme nedeniyle eskisinden daha hızlı unutulur (arka arkaya 5 kez)

- sadece BP eğitimi için uygundur



5. Bu bir ikilem

GA - yerel minimumlardan korunma özellikleri nedeniyle sürekli olarak optimuma iner, ancak çok fazla bellek tüketir, çılgınca yavaştır.

BP -- olasılık çok yüksek olmasına rağmen (yani GA antrenman yapabiliyorsa, BP'nin de antrenman yapacağının %95'i), daha hızlı, hafıza yemez, ancak momentum gibi zillere ve ıslıklara ihtiyaç duysa da bir sonucu garanti etmez. yerel minimumlardan kurtulun) ve uyarlanabilir adım (minimumlar da atlanır ve öğrenme oranı birkaç kez artar)



BP'den yanayım.

 
TheXpert писал (а) >>

3. Gerçekten bir problem, hepsi hayal gücüne bağlı :).

4. Burada hile yapabilirsiniz. Unutma yeteneği olan bir ağ kurun. O kadar zor değil.

Diyelim ki bunu yapabilirsiniz (BP ile öğrenirken harika çalışır):

desen sayısını sınırlayın - diyelim ki 1000.

Bir sonraki desen göründüğünde (örneğin yeni TF)

- en eskiyi kaldır

- bir öğrenme döngüsü yapın

- Ortaya çıkan yeni desen için antrenmanı 5 defa çalıştırıyoruz.



Ne oluyor?

+ Eğitim döngüsü uzun sürmez.

+ eski model hemen unutulmuyor

- yeni bir kalıp da hemen öğrenilmez, ancak

+ agresif öğrenme nedeniyle eskisinden daha hızlı unutulur (arka arkaya 5 kez)

- sadece BP eğitimi için uygundur



5. Bu bir ikilem

GA - yerel minimumlardan korunma özellikleri nedeniyle sürekli olarak optimuma iner, ancak çok fazla bellek tüketir, çılgınca yavaştır.

BP -- olasılık çok yüksek olmasına rağmen (yani GA antrenman yapabiliyorsa, BP'nin de antrenman yapacağının %95'i), daha hızlı, hafıza yemez, ancak momentum gibi zillere ve ıslıklara ihtiyaç duysa da bir sonucu garanti etmez. yerel minimumlardan kurtulun) ve uyarlanabilir adım (minimumlar da atlanır ve öğrenme oranı da birkaç kez artar)



BP'den yanayım.


bu bir GA örneğidir

SI kaynağı...


hız açısından, GA hızlı olarak övülür

bir de MGA var - bu daha da neşeli


---

aslında, GA veya MGA, maksimum veya minimum için hızlı bir aramadır.

en azından METAQUOTES uzmanları test cihazında hız için GA kullandılar ve başka hiçbir şey yapmadılar ...

Dosyalar:
dio.zip  4 kb
 
YuraZ писал (а) >>


hız açısından, GA hızlı olarak övülür

bir de MGA var - bu daha da neşeli


---

aslında, GA veya MGA, maksimum veya minimum için hızlı bir aramadır.

en azından METAQUOTES uzmanları test cihazında hız için GA kullandılar ve başka hiçbir şey yapmadılar ...


GA kesinlikle BP'den daha yavaştır.

GA son derece çok yönlü olduğundan meta alıntılar bunu doğru yaptı. Ve elbette basit bir numaralandırmadan daha hızlı olacaktır.

Soru farklı, tıpkı nöronlarda olduğu gibi - harfler nöronlar tarafından tanınmaz, ancak özel algoritmalar tarafından FR ağları kullanmaz.

Benzer şekilde, öğrenmek için özel algoritmalar kullanmak daha iyidir, bunlar a priori daha iyidir.

 
TheXpert писал (а) >>

GA kesinlikle BP'den daha yavaştır.

GA son derece çok yönlü olduğundan meta alıntılar bunu doğru yaptı. Ve elbette basit bir numaralandırmadan daha hızlı olacaktır.

Soru farklı, tıpkı nöronlarda olduğu gibi - harfler nöronlar tarafından tanınmaz, ancak özel algoritmalar tarafından FR ağları kullanmaz.

Benzer şekilde, öğrenmek için özel algoritmalar kullanmak daha iyidir, bunlar a priori daha iyidir.

Ve bu tür bilgiler bir sır değilse nereden geliyor? Peki ya örnek olarak FR öğrenmeye ne dersiniz?

Ve (temel olarak) özel bir algoritma, eğitimli (eğitimli) bir sinir ağından nasıl farklıdır?

 
Sergey_Murzinov писал (а) >>

Ve bu tür bilgiler bir sır değilse nereden geliyor? Peki ya örnek olarak FR öğrenmeye ne dersiniz?

Ve (temel olarak) özel bir algoritma, eğitimli (eğitimli) bir sinir ağından nasıl farklıdır?

Öncelikle, sinir ağları karakterleri tanımanın en iyi yolu değildir. Her ne kadar neocognitron bir sözlükle %99,7'ye ulaşsa da, hiyerogliflerde sırayla, gerçek mesele bu değil.

RSDN.ru adresine gidin ve sinir ağlarıyla ilgili konuları okuyun. Bu arada, aptal adamlardan çok uzakta oturuyorlar, sanırım ve burada birkaç tane bulabilirsiniz :) .


Örnek olarak öğrenmeye gelince, örneğin şöyle:

- vektörleştir (iskelet yap)

- kavşakları ve karşılıklı konumlarını dikkate alıyoruz

- örneğin, daha önce boyuta duyarsız olarak normalize edilmiş olan Fourier dönüşümünün ilk katsayılarından birkaçını alıyoruz. Bu arada, FT'nin yardımıyla döndürmeye duyarsız, EMNIP'yi de elde edebilirsiniz.

- örnekler için ortalama

- standart olarak veritabanına girin


Fark ne?

Özel kullandığınızda algoritma, nasıl çalıştığını biliyorsun.

Ve sinir ağı bunu nasıl yapıyor, bilmiyorsunuz. Sinir ağı tarafından verilen bu özel fonksiyonun girdileri çıktılara yüksek derecede doğrulukla enterpolasyon yapabildiğini biliyorsunuz.

 

yaaaaaaa!!!!!!

Bu arada, RSDN.RU, sinir ağı algoritmaları ve uygulamaları geliştiricileri için değil, programcılar için bir forumdur.

Bilgi için, FineReader'ın sinir ağı teknolojileri bloklarını (en son sürümler) kullandığını size bildiririm. Ve sinir ağları hakkında bir fikir edinmek için özel (popüler bilim değil) literatürü okumanızı ve özel forumların dallarını okumanızı tavsiye ederim.

Ve eğitimli bir ağ özel bir algoritmadır. En basit örnek, NeuroShell2 programında C kodu oluşturduğunuzda görülebilir. Ağ kodu mükemmel bir şekilde görülebilir.

 
Sergey_Murzinov писал (а) >>

Bilgi için, FineReader'ın sinir ağı teknolojileri bloklarını (en son sürümler) kullandığını size bildiririm. Ve sinir ağları hakkında bir fikir edinmek için özel (popüler bilim değil) literatürü okumanızı ve özel forumların dallarını okumanızı tavsiye ederim.

Tamam, konuyla ilgili link alabilir miyim? beni biraz aydınlat.
 

2 YuraZ

Sinir ağı kodunu gönderdiğiniz için size çok teşekkür etmek istiyorum.

Detaylı bir analizden sonra, anladığım kadarıyla, hesaplamaları hızlandırmak için nöral yer değiştirme yöntemini (_threshold ve _t_change dizileri) ve ayrıca dürtü yöntemini (Momentum parametresi) kullanıyorsunuz.

Uygulaması hakkında birkaç sorum var.
1) Ağırlık ayarlama işlevinde, _t_change'i değiştirirsiniz, ancak daha sonra yeni _threshold ağırlık dizisini hesaplamak için bu ayarı hiçbir yerde kullanmazsınız.

2) Çıkış sinyalini sigmoid fonksiyonuna geçirirken _threshold parametresini toplamdan çıkarırsınız, ancak literatürde yazıldığı gibi -1 değil +1 bu eşik ağırlığına uygulanır. Bu, çıkarmamız değil, eklememiz gerektiği anlamına gelir. Üstelik ağırlıkları ayarlarken -1 değil tam olarak +1 veriyorsunuz.
Genel olarak, bu eşik ve momentum ile oynadım ve bunun hız hesaplamalarına gerçekten yardımcı olduğu ortaya çıktı. Zaman birkaç kez azalır.

3) Sigmoid işleviyle de ilgilendim. Anladığım kadarıyla, bu tür parametreler bu alandaki pratik deneyiminizden kaynaklanıyor, ancak bence Usserman'ın {0,1} aralığının optimal olmadığını yazdığı kitaplarını da okuyorsunuz. Ağırlık düzeltme miktarı çıktı düzeyiyle orantılıdır ve sıfır çıktı düzeyi ağırlığın değişmemesine neden olur. Ve ikili giriş vektörleriyle, ortalama olarak değerlerin yarısı sıfır olacağından, ilişkili oldukları ağırlıklar eğitilmeyecektir!
Çözüm, girdileri {-0.5,0.5} aralığına dönüştürmek ve sigmoid'e ayrıca 0,5'lik bir ofset eklemektir. {-0.5,0.5} aralığına sahip böyle bir sigmoid [1/(1+Exp(-x))-0.5], yakınsama süresini %30-50 azaltır.
Bu durumdaki tek sorun, girdi vektörünü {-0.5,0.5} aralığına çevirmektir. Normalleşmek zorunda kalabilir. Bunu yapmaya çalıştım ama nedense sigmoidin sonucu her zaman olumluydu. Bu konudaki görüşlerinizi duymak isterim.

4) Şimdi girişleri ayarlama yöntemine gelince. Bu işlemi otomatikleştirmeye değer olabilir. Bu yaklaşım hakkında ne düşünüyorsunuz: Çıkışta her zamanki gibi 100, 010, 001 değerlerini bekliyoruz.
Bir dizi çıktıyı otomatik olarak ayarlamak için, her bir çubuk için bir sonraki aralıktaki maksimum ve minimum fiyatların oranını belirlemesini öneririm (örneğin, dakikada 5000 çubuk). Bu oranın değeri, fiyatın nereye taşındığının bir göstergesi olacaktır. Bölge 1'deyse, düz. 1'den fazlaysa, o zaman yukarı. 0'dan 1'e ise aşağı. Bana öyle gelse de, analiz için [0, +EЄ] değil, [-EI, -A; -A, A; A, +EЄ], bu arada çıkış vektörlerimize karşılık gelecek
N hareketli ortalamanın son K değerlerini (veya MA ile çubuğun ortalama fiyatı arasındaki farkı) ağ girişi olarak besleyeceğiz. Yani toplam girdiler N*K olacaktır.

Biraz daha hafif ve daha anlaşılır bir temel kod gönderiyorum (işlevlerinizin kitaplığı). Genel olarak, geliştirmenin bu kadar erken bir aşamasında bitmiş bir uzman ürün yapmaya muhtemelen değmez. Öncelikle scriptte net bir hesaplama mantığı uygulayalım. Her şeyi test edelim ve ardından buna dayalı olarak düzenli bir gösterge yazalım. Ve sonra, bu temelde devam edeceğiz - geri bildirim ve ağ komiteleri ve genel olarak, muhtemelen birçok ilginç şey.

not
Umarım gelişmelerinizi paylaşmaya devam edersiniz, bu yüzden küçük bir ricamız var. Size zarar vermiyorsa, lütfen editör seçeneklerindeki "Boşluk ekle"yi kaldırın, aksi takdirde kodu okumak biraz zor olacaktır. Yeni bir sürüm bekliyorum. Ortak test için öneriler mümkündür.

Dosyalar:
 
sergeev писал (а) >>

2 YuraZ


2) Çıkış sinyalini sigmoid fonksiyonuna geçirirken _threshold parametresini toplamdan çıkarırsınız, ancak literatürde yazıldığı gibi -1 değil +1 bu eşik ağırlığına uygulanır. Bu, çıkarmamız değil, eklememiz gerektiği anlamına gelir. Üstelik ağırlıkları ayarlarken -1 değil tam olarak +1 veriyorsunuz.
Genel olarak, bu eşik ve momentum ile oynadım ve bunun hız hesaplamalarına gerçekten yardımcı olduğu ortaya çıktı. Zaman birkaç kez azalır.

3) Sigmoid işleviyle de ilgilendim. Anladığım kadarıyla, bu tür parametreler bu alandaki pratik deneyiminizden kaynaklanıyor, ancak bence Usserman'ın {0,1} aralığının optimal olmadığını yazdığı kitaplarını da okuyorsunuz. Ağırlık düzeltme miktarı çıktı düzeyiyle orantılıdır ve sıfır çıktı düzeyi ağırlığın değişmemesine neden olur. Ve ikili giriş vektörleriyle, ortalama olarak değerlerin yarısı sıfır olacağından, ilişkili oldukları ağırlıklar eğitilmeyecektir!
Çözüm, girdileri {-0.5,0.5} aralığına dönüştürmek ve sigmoid'e ayrıca 0,5'lik bir ofset eklemektir. {-0.5,0.5} aralığına sahip böyle bir sigmoid [1/(1+Exp(-x))-0.5], yakınsama süresini %30-50 azaltır.
Bu durumdaki tek sorun, girdi vektörünü {-0.5,0.5} aralığına çevirmektir. Normalleşmek zorunda kalabilir. Bunu yapmaya çalıştım ama nedense sigmoidin sonucu her zaman olumluydu. Bu konudaki görüşlerinizi duymak isterim.

2. Orijinal formül şöyle görünür - S[j] = Toplam(i)(y[i]*w[i,j] - t[j]). Onlar. eşik alınır, bu nedenle eşik değeri olarak adlandırılmıştır. Ve yeniden hesaplama formülünde, iki eksi sonunda bir artı verir, yani. eşiğin kullanılmasında ve parametrelerin yeniden hesaplanmasında hata yoktur.

Yanlışsam yazar düzeltecektir.

3. Sigmoid değil - yarı bisigmoid. Bu işlevler için yakınsama süresi, ağın girişine sağlanan verilere bağlıdır. Bisigmoid üzerinde birçok kez daha hızlı birleşebilir, ancak diğer veriler sağlandığında tamamen farklı bir resim ortaya çıkabilir.

Neden: