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

5.1 KiB

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);

  1. 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_pointstd::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 !

  1. 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); } } } }

  1. 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;
}

};

  1. 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 !