Evolutionary Algorithms
Evrimsel algoritmalar, seçilim, çaprazlama ve mutasyon yoluyla aday çözümlerden oluşan bir popülasyonu geliştirir. Başlıca türler, kod ve gerçek kullanım alanları ele alınır.
Evrimsel algoritmalar (EA), doğal seçilimi taklit eden bir optimizasyon algoritmaları ailesidir. Aday çözümlerden oluşan bir popülasyonu korur, her birini bir uygunluk fonksiyonuyla puanlar, en iyi adayların yeniden birleşme ve rastgele mutasyon yoluyla yavrular üretmesini sağlar ve popülasyon daha iyi çözümlere doğru kayana kadar bu süreci birçok nesil boyunca yineler. Bir EA'nın yalnızca adayları değerlendirmesi gerekir; gradyan hesaplaması gerekmez. Bu nedenle ayrık seçimler, türevlenemeyen veya gürültülü hedefler ve yerel optimumlarla dolu engebeli yüzeyler gibi gradyan inişinin başa çıkamadığı problemlerde çalışır. Bu özellik, EA'ları hiperparametre ayarı, sinir ağı mimarisi arama, mühendislik tasarımı ve zamanlama için standart bir araç hâline getirir.
Evrimsel Algoritmalar Nasıl Çalışır#
Her EA aynı bileşenlerden oluşur:
- Gösterim: Her aday, bit dizisi, gerçek sayılardan oluşan bir vektör veya program ağacı gibi bir genomla kodlanır.
- Başlatma: İlk nesil genellikle rastgele oluşturulur; bazen bilinen iyi çözümlerle başlatılır.
- Uygunluk değerlendirmesi: Bir uygunluk fonksiyonu, her adayı optimize edilen hedefe göre puanlar.
- Seçilim: Uygunluğu daha yüksek adayların ebeveyn olma olasılığı daha yüksektir. Örneğin turnuva seçimi, rastgele seçilmiş birkaç aday arasından daha iyisini belirler; elitizm ise en iyi adayı hiç değiştirmeden sonraki nesle kopyalar.
- Çeşitleme: Çaprazlama iki ebeveynin parçalarını birleştirir; mutasyon ise popülasyonun keşfetmeye devam etmesi için küçük rastgele değişiklikler yapar.
Makine öğrenmesinde (ML) uygunluk fonksiyonu genellikle doğruluk veya ortalama hassasiyet (mAP) gibi bir doğrulama metriğidir; dolayısıyla bir adayı değerlendirmek, açık ara en maliyetli adım olan modeli eğitip test etmek anlamına gelir. Döngü, bütçe tükenene veya uygunluk artışı durana kadar yinelenir:
Seçilim baskısı ve mutasyon gücü, sömürü ile keşif arasındaki dengeyi belirler. Küçük mutasyonlarla güçlü seçilim hızlı yakınsar ancak yerel bir optimumda takılı kalabilir; zayıf seçilim ve büyük mutasyonlar ise geniş çaplı keşif sağlar ama değerlendirmeleri boşa harcar.
Başlıca Evrimsel Algoritma Türleri#
- Genetik algoritmalar (GA): Adayları genellikle bitlerden oluşan dizilerle kodlar ve büyük ölçüde çaprazlamaya dayanır. John Holland, bu algoritmaları 1975 tarihli Adaptation in Natural and Artificial Systems kitabında biçimselleştirdi.
- Evrim stratejileri (ES): Çalışma sırasında adım boyutları uyarlanan Gauss mutasyonlarıyla gerçek sayılardan oluşan vektörleri optimize eder. Mutasyon dağılımının tam kovaryansını öğrenen CMA-ES, sürekli kara kutu problemlerinde en güçlü genel amaçlı yöntemlerden biridir.
- Genetik programlama: Sembolik regresyon ve otomatik program tasarımında kullanılan, ağaçlarla gösterilen programları veya matematiksel ifadeleri evrimleştirir.
- Nöroevrim: Sinir ağlarının ağırlıklarını ve bazen yapısını evrimleştirir. OpenAI, 2017'de binden fazla paralel çalışan üzerinde yürütülen evrim stratejilerinin 3B bir insansı robotu 10 dakikada yürümek üzere eğitebildiğini gösterdi; bu, pekiştirmeli öğrenmeye ölçeklenebilir bir alternatiftir.
Kodla Bir Genetik Algoritma#
Sırt çantası problemi, ağırlık sınırını aşmadan toplam değeri en üst düzeye çıkarmak için hangi öğelerin çantaya konacağını sorar; bu, gradyanı olmayan ayrık bir problemdir. Bu NumPy genetik algoritması, her öğe için bir bit içeren 50 bit dizili genomu turnuva seçimi, tekdüze çaprazlama, bit çevirme mutasyonu ve elitizm kullanarak evrimleştirir; ardından sonucu olası 1.048.576 seçeneğin tümüyle karşılaştırır:
import itertools
import numpy as np
rng = np.random.default_rng(0)
# Knapsack problem: pick from 20 items to maximize total value within a weight limit of 200
values, weights, limit = rng.integers(10, 100, 20), rng.integers(5, 50, 20), 200
def fitness(pop):
"""Return each selection's total value, or 0 if it exceeds the weight limit."""
return np.where(pop @ weights <= limit, pop @ values, 0)
population = rng.random((50, 20)) < 0.2 # 50 random genomes, one bit per item
for generation in range(100):
scores = fitness(population)
# Tournament selection: each parent is the better of two random genomes
pairs = rng.integers(50, size=(50, 2))
parents = population[np.where(scores[pairs[:, 0]] > scores[pairs[:, 1]], pairs[:, 0], pairs[:, 1])]
# Uniform crossover with the next parent, then flip each bit with probability 0.05
children = np.where(rng.random((50, 20)) < 0.5, parents, np.roll(parents, 1, axis=0))
children ^= rng.random((50, 20)) < 0.05
children[0] = population[scores.argmax()] # elitism: keep the best genome
population = children
all_selections = np.array(list(itertools.product([0, 1], repeat=20)))
print(f"GA best: {fitness(population).max()}, true optimum: {fitness(all_selections).max()}")GA best: 811, true optimum: 811 çıktısını verir. Algoritma, tüm seçenekleri kaba kuvvetle denetlemenin gerektirdiği bir milyon kontrolün yaklaşık %0,5'i kadar olan 5.000 uygunluk değerlendirmesinden sonra mümkün olan en iyi yerleşimi buldu.
Hiperparametreleri Evrimleştirme#
Öğrenme oranı, kayıp ağırlıkları ve artırma güçleri gibi eğitim ayarları, hiçbir formülün öngöremediği biçimlerde etkileşir. Her adayın tam bir eğitim çalışması gerektirmesi, evrimsel aramayı bu iş için uygun kılar. Ultralytics YOLO'daki tune() yöntemi, YOLO26 modellerinde bu yaklaşımı kullanır: Her yineleme, şimdiye kadarki en iyi dokuz yapılandırmadan uygunluğa göre ağırlıklandırılmış bir ebeveyn seçer; varsayılan arama alanındaki 26 hiperparametrenin yaklaşık yarısını arama aralıklarına göre ölçeklendirilmiş Gauss adımlarıyla mutasyona uğratır; bir model eğitir ve uygunluğunu kaydeder. Nesne algılama için uygunluk mAP50-95'tir. 30 sonuçtan sonra bazı mutasyonlarda en iyi yapılandırmaların %20'sinin kovaryansı da kullanılır; bu, CMA-ES'ten alınmış bir yaklaşımdır. Hiperparametre ayarlama kılavuzunda tüm arama alanı listelenir:
from ultralytics import YOLO
# Önceden eğitilmiş bir YOLO26 nano modeli yükle
model = YOLO("yolo26n.pt")
# Hiperparametreleri evrimleştir: 30 yineleme; her birinde mutasyona uğratılmış bir yapılandırmayı 10 dönem eğit
model.tune(data="coco8.yaml", epochs=10, iterations=30, plots=False)Ayarlayıcı, her yapılandırmayı ve uygunluk değerini tune_results.ndjson dosyasına yazar ve kazananı best_hyperparameters.yaml dosyasına kaydeder; böylece tam eğitim çalışmasına hazır olur.
Diğer Uygulamalar#
- Sinir ağı mimarisi arama: Google'ın AmoebaNet modeli, en kötü modeller yerine en eskileri devreden çıkaran, turnuva seçimine dayalı bir EA olan düzenlileştirilmiş evrimle ortaya çıktı ve 2018'de ImageNet'te %83,9 top-1 doğruluğa ulaştı.
- Mühendislik tasarımı: NASA'nın Space Technology 5 görevi, 2006'da geleneksel tasarımla oluşturulmuş bir antenle aynı performansı sağlayan, bilgisayar tarafından evrimleştirilmiş ve düzensiz, bükülmüş telli bir X-bandı antenini uzaya gönderdi.
- Algoritma keşfi: Google DeepMind'ın Mayıs 2025'te duyurduğu AlphaEvolve, kod değişiklikleri öneren Gemini modellerini otomatik değerlendiriciler ve programlardan oluşan evrimsel bir veri tabanıyla birleştirir. Geliştirdiği bir zamanlama sezgiseli, Google'ın veri merkezlerinde şirketin dünya çapındaki bilgi işlem kaynaklarının ortalama %0,7'sini geri kazandırıyor.
Evrimsel Algoritmalar ve İlgili Yöntemler#
- Gradyan inişi: Türevlenebilir bir kaybın gradyanını izler ve milyonlarca parametreye sahip ağ ağırlıklarını eğitmekte çok daha verimlidir. EA'lar az parametreli, değerlendirmesi maliyetli veya gradyanı olmayan problemlere uygundur.
- Sürü zekâsı: Parçacık sürüsü optimizasyonu gibi yöntemler, kalıcı bir ajan kümesini arama alanında hareket ettirir. Her ajan kendi en iyi sonucuna ve komşularının sonuçlarına göre konumunu ayarlar; nesil değişimi, çaprazlama veya mutasyon uygulanmaz.
- Bayesçi optimizasyon: Hedefin olasılıksal bir modelini uydurur ve bu modelin en büyük iyileşmeyi beklediği noktada bir sonraki denemeyi seçer. Küçük ve pürüzsüz arama alanlarında EA'lardan daha az değerlendirme gerektirir; ancak çok sayıda parametre ve paralel çalışanla ölçeklenmesi daha zordur.










