| # 🧠 Neuronales Netzwerk - Implementierungsanleitung | |
| ## Überblick | |
| Ein vollständiges Machine Learning System wurde zu `enhanced_ml_learner.py` hinzugefügt, das neuronale Netzwerke mit Neuronen in Schichten implementiert, die Gewichte und Verzerrungen aus Daten lernen. | |
| ## Komponenten | |
| ### 1. `NeuralLayer` - Einzelne Neuronenschicht | |
| Eine Schicht mit: | |
| - **Neuronen**: Arrangiert in einer Dimension (output_size) | |
| - **Gewichte**: W (input_size × output_size) - verbinden Eingaben mit Neuronen | |
| - **Verzerrungen**: b (1 × output_size) - Offset für jedes Neuron | |
| - **Aktivierungsfunktionen**: ReLU, Sigmoid, Tanh | |
| **Mathematik:** | |
| ``` | |
| Output = Activation(Input · W + b) | |
| ``` | |
| ### 2. `SimpleNeuralNetwork` - Mehrschichtiges Netzwerk | |
| Ein komplettes Netzwerk mit: | |
| - Multiple stacked layers | |
| - Forward propagation (Eingabe → Schicht 1 → Schicht 2 → ... → Ausgabe) | |
| - Backward propagation (Fehlergradienten rückwärts) | |
| - Training mit SGD (Stochastic Gradient Descent) | |
| **Eigenschaften:** | |
| - Automatische Gewichtsinitialisierung (Xavier) | |
| - Flexible Netzwerk-Architektur | |
| - Speichern/Laden von Modellen | |
| - Trainingshistorie tracking | |
| ### 3. `EnhancedMLLearner` Integration | |
| Die Lernersystem wurde erweitert mit: | |
| ```python | |
| # Netzwerk erstellen | |
| network = learner.create_neural_network( | |
| 'task_name', | |
| [input_size, hidden1, hidden2, ..., output_size], | |
| learning_rate=0.01 | |
| ) | |
| # Trainieren | |
| history = learner.train_neural_network( | |
| 'task_name', | |
| X_train, # Eingabedaten | |
| y_train, # Ziel-Labels | |
| epochs=20, | |
| batch_size=32 | |
| ) | |
| # Vorhersagen | |
| predictions = learner.predict_with_network( | |
| 'task_name', | |
| X_test | |
| ) | |
| # Evaluieren | |
| results = learner.evaluate_network( | |
| 'task_name', | |
| X_test, | |
| y_test | |
| ) | |
| # Status | |
| status = learner.get_network_status() | |
| ``` | |
| ## Beispiele | |
| ### Beispiel 1: Set-Klassifizierung | |
| ```python | |
| import numpy as np | |
| from enhanced_ml_learner import SimpleNeuralNetwork | |
| # Erstelle Netzwerk | |
| network = SimpleNeuralNetwork([10, 8, 4, 1], learning_rate=0.1) | |
| # Trainingsdaten | |
| X_train = np.random.randn(100, 10) | |
| y_train = np.random.rand(100, 1) | |
| # Trainiere | |
| history = network.train(X_train, y_train, epochs=20) | |
| # Vorhersage | |
| predictions = network.predict(X_train[:5]) | |
| print(predictions) # Form: (5, 1) | |
| ``` | |
| ### Beispiel 2: Mustererkennung mit Lerner | |
| ```python | |
| from enhanced_ml_learner import get_enhanced_ml_learner | |
| learner = get_enhanced_ml_learner() | |
| # Erstelle Netzwerk für Code-Qualitäts-Vorhersage | |
| learner.create_neural_network('code_quality', [20, 16, 8, 1]) | |
| # Trainiere auf Features | |
| X = np.random.randn(200, 20) | |
| y = np.random.rand(200, 1) | |
| learner.train_neural_network('code_quality', X, y, epochs=30) | |
| # Mache Vorhersagen | |
| X_test = np.random.randn(10, 20) | |
| result = learner.predict_with_network('code_quality', X_test) | |
| print(result['predictions']) | |
| ``` | |
| ### Beispiel 3: Feedback-basiertes Lernen | |
| ```python | |
| from enhanced_ml_learner import get_enhanced_ml_learner | |
| learner = get_enhanced_ml_learner() | |
| # Lerne aus vorhandenem Benutzer-Feedback | |
| result = learner.learn_patterns_from_feedback('response_quality') | |
| print(result['final_accuracy']) # Trainings-Genauigkeit | |
| ``` | |
| ## Netzwerk-Architektur Empfehlungen | |
| ### Kleine Klassifizierung (Binary) | |
| ```python | |
| [input_features, 64, 32, 1] # 3-4 Schichten | |
| ``` | |
| ### Mittlere Klassifizierung (Multi-class) | |
| ```python | |
| [input_features, 128, 64, 32, num_classes] # 4-5 Schichten | |
| ``` | |
| ### Regression | |
| ```python | |
| [input_features, 64, 32, 16, 1] # Mehr versteckte Neuronen | |
| ``` | |
| ### Komplexe Muster | |
| ```python | |
| [input_features, 256, 128, 64, 32, 1] # Tiefere Netzwerke | |
| ``` | |
| ## Hyperparameter-Anleitung | |
| | Parameter | Bereich | Empfohlen | Effekt | | |
| |-----------|---------|-----------|--------| | |
| | Learning Rate | 0.001 - 0.1 | 0.01 | Höher = schneller, aber weniger stabil | | |
| | Epochs | 10 - 100 | 20 | Höher = besser trainiert, aber länger | | |
| | Batch Size | 8 - 64 | 32 | Kleiner = leiser Training, aber langsamer | | |
| | Hidden Units | 4 - 512 | input_size×0.5 | Mehr = komplexer, aber overfitting risiko | | |
| ## Training-Tips | |
| 1. **Daten normalisieren**: Features sollten ~[−1, 1] oder [0, 1] sein | |
| 2. **Epochen monitoren**: Beobachte `losses` für Konvergenz | |
| 3. **Genauigkeit prüfen**: Achte auf Trainings- vs. Test-Genauigkeit | |
| 4. **Learning rate adjusting**: Wenn Loss stagniert, rate reduzieren | |
| 5. **Modelle speichern**: `network.save_model('path.json')` | |
| ## Mathematische Details | |
| ### Forward Propagation | |
| ``` | |
| z^l = a^(l-1) · W^l + b^l (lineare Transformation) | |
| a^l = σ(z^l) (Aktivierungsfunktion) | |
| ``` | |
| ### Loss (MSE) | |
| ``` | |
| L = (1/m) Σ (ŷ - y)² (Mean Squared Error) | |
| ``` | |
| ### Backward Propagation | |
| ``` | |
| dL/dW = (1/m) · (a^(l-1))^T · dL/dz^l (Gewichts-Gradient) | |
| dL/db = (1/m) · Σ dL/dz^l (Bias-Gradient) | |
| ``` | |
| ### Gewichts-Update | |
| ``` | |
| W := W - learning_rate · dL/dW | |
| b := b - learning_rate · dL/db | |
| ``` | |
| ## Aktivierungsfunktionen | |
| - **ReLU**: max(0, x) - Default für versteckte Schichten | |
| - Pros: Schnell, hilft gegen Vanishing Gradients | |
| - Cons: Dead ReLU Problem | |
| - **Sigmoid**: 1/(1+e^(-x)) - Default für Output (Binary) | |
| - Pros: Output 0-1, interpretierbar | |
| - Cons: Vanishing Gradients bei extremen Werten | |
| - **Tanh**: (e^x - e^(-x))/(e^x + e^(-x)) - Alternative | |
| - Pros: Output -1...1, symmetrisch | |
| - Cons: Ähnlich zu Sigmoid | |
| ## Status und Metriken | |
| Abrufen des gesamten Learning Status: | |
| ```python | |
| status = learner.get_overall_learning_status() | |
| print(status['neural_networks']) | |
| print(status['learning_metrics']) | |
| ``` | |
| Metriken include: | |
| - `context_awareness`: 0-1 (Kontext-Qualität) | |
| - `python_quality`: 0-1 (Code-Qualität) | |
| - `web_learning`: 0-1 (Wissen aus Web) | |
| - `feedback_quality`: 0-1 (Feedback-Qualität) | |
| - `neural_network_accuracy`: 0-1 (NN-Genauigkeit) | |
| - `overall_improvement`: 0-1 (Gesamt-Score) | |
| ## Fehlerbehandlung | |
| ```python | |
| # Prüfe ob Netzwerk existiert | |
| if not learner.neural_networks.get('my_network'): | |
| learner.create_neural_network('my_network', [10, 8, 1]) | |
| # Speichere Modell | |
| try: | |
| network.save_model('models/my_network.json') | |
| except Exception as e: | |
| print(f"Fehler beim Speichern: {e}") | |
| ``` | |
| ## Performance-Optimierung | |
| 1. **Batch Processing**: Größere Batches = schneller Training | |
| 2. **GPU Support**: Mit NumPy/TensorFlow für GPU-Training möglich | |
| 3. **Feature Selection**: Weniger Features = schneller Training | |
| 4. **Model Pruning**: Entferne kleine Gewichte nach Training | |
| 5. **Quantization**: Konvertiere zu lower precision (z.B. float32→float16) | |
| ## Nächste Schritte | |
| 1. Test durchführen: `python test_neural_network.py` | |
| 2. Eigene Netzwerk-Architektur testen | |
| 3. Mit echten Daten trainieren | |
| 4. Modelle in Produktion deployen | |
| --- | |
| **Status**: ✅ Vollständig funktional und integriert | |
| **Letztes Update**: 2026-03-07 | |