DNN_GD, herhangi bir hazır derin öğrenme kütüphanesi (PyTorch, TensorFlow, Keras) kullanılmadan, tamamen saf NumPy ve temel matematiksel ilkelerle (first principles) sıfırdan geliştirilmiş Çok Katmanlı Derin Yapay Sinir Ağı (Multi-Layer Deep Neural Network) mimarisidir.
Ağ, İleri Yayılım (Forward Propagation), Geriye Yayılım (Backpropagation) ve Gradyan İnişi (Gradient Descent) algoritmalarını matris düzeyinde uygulayarak öğrenme gerçekleştirir.
- Saf Matematik & NumPy: Harici hiçbir derin öğrenme bağımlılığı yoktur; ağırlık matrisleri, hata türevleri ve gradyan güncellemeleri saf lineer cebir ile yürütülür.
-
Sınırsız Katman Esnekliği (Arbitrary Depth):
hiddennodes=[6, 12, 8, 4]gibi tek bir liste vererek istediğiniz derinlikte ve nöron sayısında çok katmanlı ağlar kurabilirsiniz. -
Girdi boyutuna göre ölçeklenmiş ilklendirme (LeCun normal): Ağırlıkların standart sapması
$1/\sqrt{n_{\text{in}}}$ 'dir. Böylece sigmoid başlangıçta doygunluğa girmez ve gradyan erken sönmez. - Zincir Kuralı (Chain Rule) ile Geriye Yayılım: Her katmandaki hata payı transpoz matris çarpımlarıyla geriye doğru taşınır.
Her katmanın ağırlık matrisi, ortalaması 0 ve standart sapması önceki katmandaki nöron sayısına (
Her
Sigmoid fonksiyonunun birinci türevi analitik olarak doğrudan kendi çıktısı cinsinden ifade edilir:
-
Çıkış Katmanı Hatası:
$$E_{\text{output}} = y - \hat{y}$$ -
Gizli Katman Hataları (Zincir Kuralı):
Son katmandan geriye doğru, bir sonraki katmanın ağırlık matrisinin transpozu ile hata çarpılarak bir önceki katmanın payına düşen hata bulunur:
$$E^{(l)} = (W^{(l+1)})^T \cdot E^{(l+1)}$$
Ağırlık güncelleme miktarı (
DNN_GD/
│
├── dnn.py # neuralNetwork sınıfı (ağın çekirdeği)
├── inuse.py # En kısa kullanım örneği
├── example.py # Görsel grafikli, kayıp takipli kapsamlı örnek script
├── run.bat # Windows tek tıkla çalıştırma başlatıcısı
├── requirements.txt # Gerekli kütüphaneler (numpy, matplotlib)
├── README.md # Detaylı dokümantasyon ve mimari kılavuzu
├── LICENSE # MIT lisansı
├── tests/ # Duman testi
│
├── assets/
│ └── dnn_architecture.jpg # 3D Yüksek çözünürlüklü yapay sinir ağı mimari şeması
│
└── data/
└── samples.json # Örnek çoklu sınıflandırma veri seti
pip install -r requirements.txtGörsel kayıp eğrisi ve tahmin tablosuyla birlikte modeli çalıştırmak için:
python example.py(Windows kullanıcıları doğrudan run.bat dosyasına çift tıklayabilir).
Ağırlıklar sabit bir tohum olmadan başlatıldığı için sayılar her çalıştırmada değişir. Öğrenme oranı yüksek (0.6) olduğundan kayıp bazı çalıştırmalarda bir süre düştükten sonra dalgalanabilir ya da yükselebilir; birbirine benzeyen girdiler aynı tahmine karışabilir. Aşağıdaki çıktı tek bir çalıştırmadır:
======================================================================
DNN + GD: Deep Neural Network Trained by Gradient Descent
Created from Scratch by İlhan Koçaslan
======================================================================
[*] Network Architecture:
- Input Features: 5 neurons
- Hidden Layers: [6, 8, 4] (3 layers)
- Output Targets: 3 neurons
- Total Layers: [5, 6, 8, 4, 3]
- Learning Rate: 0.6
- Training Samples: 6
[+] Training for 800 epochs using Gradient Descent & Backpropagation...
Epoch [ 1/ 800] [-------------------------] - MSE Loss: 0.297015
Epoch [ 200/ 800] [======-------------------] - MSE Loss: 0.026880
Epoch [ 400/ 800] [============-------------] - MSE Loss: 0.057155
Epoch [ 800/ 800] [=========================] - MSE Loss: 0.056170
[OK] Training completed successfully!
======================================================================
TEST PREDICTIONS
======================================================================
Sample Input Pattern Expected Target Predicted Output
----------------------------------------------------------------------
#1 [0, 0, 0, 0, 1] [0, 1, 0] [0.017, 0.993, 0.037]
#2 [0, 0, 1, 0, 0] [1, 0, 0] [0.996, 0.031, 0.034]
#3 [0, 1, 0, 1, 0] [0, 0, 1] [0.519, 0.498, 0.995]
#4 [1, 0, 0, 0, 1] [0, 1, 1] [0.003, 0.973, 0.956]
======================================================================
dnn.py dosyasını kendi projenizde şu şekilde içe aktararak kullanabilirsiniz:
import dnn
# 1. Modeli tanımla (İstediğiniz derinlikte katman belirtebilirsiniz)
nn = dnn.neuralNetwork(
inputnodes=5, # Giriş özellik sayısı
hiddennodes=[8, 12, 6], # Gizli katmanların nöron listesi (3 gizli katman)
outputnodes=3, # Çıkış nöron sayısı
learningrate=0.5 # Öğrenme katsayısı (alpha)
)
# 2. Modeli eğit
inputs = [[0, 0, 0, 0, 1], [1, 1, 1, 1, 0]]
targets = [[0, 1, 0], [1, 1, 1]]
for epoch in range(500):
nn.train(inputs_list=inputs, targets_list=targets)
# 3. Yeni veri üzerinde tahmin: query sonucu ekrana yazar (değer döndürmez)
nn.query([[0, 0, 0, 0, 1]])Aynı yazarın iki farklı eğitim yaklaşımının kıyaslaması:
| Karşılaştırma Kriteri | DNN_GD (Bu Proje) | DNN_PSO |
|---|---|---|
| Optimizasyon Yöntemi | Geriye Yayılım (Backpropagation) | Parçacık Sürü Optimizasyonu (PSO) |
| Ağırlık Güncellemesi | Gradyan İnişi ( |
Sürü En İyisi ( |
| Türev İhtiyacı | Zorunlu (Zincir Kuralı) | Türevsiz (Derivative-Free) |
| Hesaplama Maliyeti | Adım başına bir ileri ve bir geri geçiş | Adım başına parçacık sayısı kadar ileri geçiş |
| Yerel Minimum | Takılabilir (yerel çukurlar, eyer noktaları) | Sürü daha geniş arar, ama erken yakınsama riski de vardır |
| Uygun Olduğu Durum | Türevlenebilir, çok parametreli ağlar | Türevsiz ya da küçük ağlar, ayrık/gürültülü amaçlar |
- İlhan Koçaslan — GitHub: @Proaiml
pip install pytest
python -m pytest tests -qTest, ağın kurulduğunu, eğitimin ağırlıkları değiştirdiğini ve sorgunun çalıştığını denetler; bir saniyeden kısa sürer.
