Bir sinir ağının yapısını bir genoma nasıl kodlamalıyım?


14

Deterministik bir problem alanı için, optimal düğüm ve bağlantı yapısına sahip bir sinir ağı bulmam gerekiyor. Problem alanı için en iyi ağ yapısını bulmak için birçok sinir ağını simüle etmek için genetik bir algoritma kullanmak istiyorum.

Daha önce böyle bir görev için genetik algoritmalar kullanmamıştım. Pratik hususlar nelerdir? Özellikle, bir sinir ağının yapısını bir genom içine nasıl kodlamalıyım?

Yanıtlar:


12

"Meta-sezginin Temelleri" Bölüm 4.2, Genetik Algoritmalar yoluyla grafik yapıları kodlamanın alternatif yolları hakkında zengin bir bilgiye sahiptir.

Gelişen YSA'lara özel olarak baktığımda, bu tür şeyleri 'sıfırdan' uygulamaya meyilli olmayacağım:

Nöroevrim alanı bir süredir gündemdedir ve Artırıcı Topolojilerin Nöroevrim ( NEAT ) gibi bazı yöntemlerin uygulanması artık çok pratik deneyimin sonuçlarını içermektedir.

Yukarıdaki bağlantıya göre:

Milyonlarca bağlantı ile sinir ağlarını geliştirebilen ve görev alanındaki geometrik düzenlerden yararlanabilen NEAT için HyperNEAT adlı bir uzantı geliştirdik. HyperNEAT Sayfası, yayınlara bağlantılar ve yaklaşımın genel bir açıklamasını içerir.


"Metaheuristiklerin Temelleri" çok ilginç görünüyor! Bu, saf MCTS M oyunlarında hiçbir zaman optimal olmadığından, aslında M-otomata için yol haritasında olan bir şeydir. Gönderen metasezgisel wiki : "bilgisayar bilimleri ve matematik optimizasyon olarak, bir metasezgisel bulmak oluşturabilir veya bir optimizasyon problemine yeterince iyi bir çözüm sağlayabilir dayalı bir mantık (kısmi arama algoritması) seçmek için tasarlanmış bir üst düzey prosedürü veya sezgisel olduğunu özellikle eksik veya eksik bilgi veya sınırlı hesaplama kapasitesi ile. "
DukeZhou

4

Sinir ağlarını geliştirmek için evrimsel algoritmaların kullanılmasına nöroevrim denir .

Bazı nöroevrim algoritmaları yalnızca sabit topolojisi olan bir sinir ağının ağırlıklarını optimize eder . Kulağa istediğin gibi gelmiyor. Diğer neuroevolution algoritmalar hem de optimize ağırlıkları ve topoloji bir sinirsel ağ arasında. Bu tür algoritmalar amaçlarınız için daha uygun görünür ve bazen TWEANN'ler (Topoloji ve Ağırlık Gelişen Sinir Ağları) olarak adlandırılır.

Popüler bir algoritmaya NEAT denir ve muhtemelen en sevdiğiniz dilde bir tanesi yazılan çok sayıda uygulama olduğu için başlamak için iyi bir yerdir. Bu en azından size çalışmanız için bir temel oluşturacaktır.

NEAT, bir sinir ağı genomunu doğrudan bir grafik yapısı olarak kodlar. Mutasyonlar, yeni bağlantılar (daha önce bağlı olmayan iki düğümü bağlayarak) veya yeni düğümleri (mevcut bir bağlantıyı bölerek) ekleyerek ağın yapısı üzerinde çalışabilir veya yalnızca grafiklerde kenarlarla (mutasyon denir) ilişkili ağırlıkların değiştirilmesiyle çalışabilir ağırlıklar). Bu algoritmanın çalıştığı YSA'ların büyüklüğünün büyüklüğü hakkında bir fikir vermek için, muhtemelen 100 veya 200'den fazla düğümle mücadele edecektir.

Daha ölçeklenebilir TWEANN'ler vardır, ancak daha karmaşıktırlar ve ürettikleri yapı türleri hakkında pratikte her zaman verimli olmayabilecek varsayımlar yaparlar. Örneğin, bir sinir ağının yapısını kodlamanın başka bir yolu, bir dilbilgisi (örneğin bir L-sistemi) tarafından tekrar tekrar genişletilen bir tohum deseninin ürünüdür. Daha büyük yapıları çok daha kolay bir şekilde keşfedebilirsiniz, ancak bir dilbilgisi tarafından üretildikleri için karakteristik bir kendi kendini tekrarlayan hissi olacaktır. HyperNEAT, farklı bir varsayım yapan (ağırlık modellerinin geometrinin bir fonksiyonu olarak kolayca ifade edilebileceği) NEAT'ın popüler bir uzantısıdır ve bu varsayım belirli bir alana iyi uyduğunda milyonlarca bağlantıya sahip YSA'lara ölçeklenebilir.

Daha fazla teknik görmek istiyorsanız, üst bağlantıda birkaç anket yazısı bulunmaktadır.

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.