MoemoeAI/docs/AImplem.md
StillHammer 4216040f9b Initial commit — MoemoeAI project setup with docs
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-26 16:08:37 +07:00

159 lines
5.1 KiB
Markdown

Excellente question ! Réfléchissons à l'utilité réelle de la salience...
À Quoi Sert la Salience ? Analyse Critique
1. Usages Théoriques vs Pratiques
Dans ton architecture actuelle, la salience pourrait servir pour :
Filtrage Contextuel:
// Sélectionner quels neurones inclure dans le contexte pour le LLM
std::vector<Neuron*> get_active_context() {
std::vector<Neuron*> context;
for (auto& neuron : all_neurons) {
if (neuron->salience > CONTEXT_THRESHOLD) { // Ex: > 30000/65535
context.push_back(neuron);
}
}
return context;
}
Priorisation de Propagation:
// Les neurones plus saillants propagent plus d'activation
float propagated_strength = base_strength * (neuron->salience / 65535.0f);
2. Maintenance Temps Réel - Question Cruciale
Option A: Decay Temps Réel
// Problématique - coûteux !
void continuous_decay() {
while (system_running) {
for (auto& neuron : all_neurons) {
neuron->salience = static_cast<uint16_t>(neuron->salience * 0.999f);
}
std::this_thread::sleep_for(std::chrono::seconds(1));
}
}
Problème: O(N) toutes les secondes = très coûteux !
Option B: Lazy Decay (Plus Intelligent)
struct Neuron {
uint16_t salience;
std::chrono::time_point<std::chrono::system_clock> last_update;
uint16_t get_current_salience() {
auto now = std::chrono::system_clock::now();
auto seconds_elapsed = std::chrono::duration_cast<std::chrono::seconds>
(now - last_update).count();
// Decay calculé à la demande
float decay_factor = std::pow(0.999f, seconds_elapsed);
return static_cast<uint16_t>(salience * decay_factor);
}
};
Avantage: Calcul seulement quand nécessaire !
3. Cycles de Sommeil - Usage Plus Clair
Phase d'Analyse:
void analyze_network_state() {
// Identifier les neurones sur-activés
std::vector<Neuron*> overactive_neurons;
for (auto& neuron : all_neurons) {
if (neuron->get_current_salience() > HIGH_ACTIVITY_THRESHOLD) {
overactive_neurons.push_back(neuron);
}
}
// Ces neurones deviennent candidats pour consolidation
consolidate_memories(overactive_neurons);
}
Consolidation Sélective:
void consolidate_memories(const std::vector<Neuron*>& active_neurons) {
// Renforcer les connexions entre neurones récemment actifs
for (auto* neuron_a : active_neurons) {
for (auto* neuron_b : active_neurons) {
if (neuron_a != neuron_b && are_connected(neuron_a, neuron_b)) {
strengthen_connection(neuron_a, neuron_b);
}
}
}
}
4. Alternative: Simplifier Sans Salience
Question fondamentale: As-tu vraiment besoin de salience ?
Architecture Simplifiée:
struct Neuron {
std::string concept;
std::vector<Neuron*> connections;
std::vector<uint16_t> weights;
// Pas de salience - juste activation temporaire lors propagation
};
class ActivationEngine {
std::unordered_map<Neuron*, float> current_activation; // Temporaire
public:
void propagate_from(Neuron* start, float strength) {
current_activation.clear(); // Reset à chaque propagation
// ... propagation normale
}
std::vector<Neuron*> get_active_context() {
std::vector<Neuron*> context;
for (auto& [neuron, activation] : current_activation) {
if (activation > threshold) context.push_back(neuron);
}
return context;
}
};
5. Recommandation Pragmatique
Si tu gardes la Salience:
Utilise-la pour:
✅ Sélection du contexte pour le LLM
✅ Identification des neurones à consolider pendant le sommeil
✅ Métriques de "vivacité" du réseau
Implémente avec:
✅ Lazy decay (calcul à la demande)
✅ Reset global pendant les cycles de sommeil
❌ Pas de maintenance temps réel continue
Si tu supprimes la Salience:
Alternative plus simple:
Activation temporaire pendant propagation uniquement
Historique d'activation pour cycles de sommeil
Simplification significative du code
Code Recommandé (Hybride):
struct Neuron {
std::string concept;
std::vector<Neuron*> connections;
std::vector<uint16_t> weights;
// Salience avec lazy evaluation
uint16_t stored_salience{0};
std::chrono::time_point<std::chrono::system_clock> last_salience_update;
uint16_t get_salience() {
auto now = std::chrono::system_clock::now();
auto hours = std::chrono::duration_cast<std::chrono::hours>
(now - last_salience_update).count();
if (hours > 0) {
// Decay de 1% par heure
stored_salience = static_cast<uint16_t>(stored_salience * std::pow(0.99, hours));
last_salience_update = now;
}
return stored_salience;
}
void boost_salience(uint16_t amount) {
stored_salience = std::min(65535, static_cast<int>(stored_salience + amount));
last_salience_update = std::chrono::system_clock::now();
}
};
La salience a sa place, mais avec une implémentation intelligente qui évite la maintenance temps réel coûteuse !