{"id":32929256,"url":"https://github.com/ennajari/mini_llm","last_synced_at":"2026-04-29T21:05:43.313Z","repository":{"id":322068875,"uuid":"1088095783","full_name":"ennajari/mini_llm","owner":"ennajari","description":null,"archived":false,"fork":false,"pushed_at":"2025-11-07T14:40:45.000Z","size":8972,"stargazers_count":1,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-11-07T16:22:17.657Z","etag":null,"topics":["artificial-intelligence","attention-mechanism","deep-learning","educational","encoder-decoder","from-scratch","jupyter-notebook","llm","machine-learning","neural-networks","nlp","python","pytorch","transformer"],"latest_commit_sha":null,"homepage":null,"language":"Jupyter Notebook","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ennajari.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-11-02T09:55:56.000Z","updated_at":"2025-11-07T14:40:49.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/ennajari/mini_llm","commit_stats":null,"previous_names":["ennajari/mini_llm_project","ennajari/mini_llm"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/ennajari/mini_llm","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ennajari%2Fmini_llm","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ennajari%2Fmini_llm/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ennajari%2Fmini_llm/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ennajari%2Fmini_llm/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ennajari","download_url":"https://codeload.github.com/ennajari/mini_llm/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ennajari%2Fmini_llm/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32443596,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-29T20:22:27.477Z","status":"ssl_error","status_checked_at":"2026-04-29T20:22:26.507Z","response_time":110,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["artificial-intelligence","attention-mechanism","deep-learning","educational","encoder-decoder","from-scratch","jupyter-notebook","llm","machine-learning","neural-networks","nlp","python","pytorch","transformer"],"created_at":"2025-11-11T11:20:14.153Z","updated_at":"2026-04-29T21:05:43.308Z","avatar_url":"https://github.com/ennajari.png","language":"Jupyter Notebook","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Build an LLM from Scratch - Part I: Attention \u0026 Transformer Core\n\n## Description du Workshop\n\nCe workshop vous guide dans la construction d'un Large Language Model (LLM) **from scratch** en utilisant PyTorch. Vous allez implémenter et comprendre les mécanismes fondamentaux qui alimentent des modèles comme GPT, BERT, et autres Transformers modernes.\n\n## Objectifs d'apprentissage\n\n1. **Self-Attention Mechanism** - Le cœur des Transformers\n2. **Multi-Head Attention** - Apprentissage de patterns multiples\n3. **Positional Encoding** - Encodage de la position des mots\n4. **Transformer Encoder Block** - Architecture complète\n5. **Visualisation** - Comprendre ce que le modèle apprend\n\n## Structure des Notebooks\n\n### `1_Self_Attention.ipynb`\n**Comprendre le mécanisme d'attention de base**\n- Implémentation du scaled dot-product attention\n- Visualisation des poids d'attention\n- Masque causal pour décodeurs\n- Exemple concret avec des phrases\n\n**Ce que vous allez apprendre:**\n- Pourquoi l'attention est révolutionnaire\n- Comment calculer Q, K, V\n- L'importance du scaling par √d_k\n- Interprétation des heatmaps d'attention\n\n### `2_Multi_Head_Attention.ipynb`\n**Apprentissage de relations multiples en parallèle**\n- Implémentation du multi-head attention\n- Comparaison 1 tête vs multi-têtes\n- Visualisation des différentes têtes\n- Analyse de la complexité\n\n**Ce que vous allez apprendre:**\n- Pourquoi utiliser plusieurs têtes\n- Comment les têtes capturent différents patterns\n- Architecture et implémentation PyTorch\n- Trade-offs en termes de paramètres\n\n### `3_Positional_Encoding.ipynb`\n**Ajouter l'information de position**\n- Encodage sinusoïdal (original Transformer)\n- Alternatives (learned positional encoding)\n- Visualisation des patterns\n- Propriétés mathématiques\n\n**Ce que vous allez apprendre:**\n- Pourquoi les Transformers ont besoin de PE\n- Comment fonctionnent les sinusoïdes\n- Interprétation des fréquences\n- Distance relative entre positions\n\n### `4_Transformer_Encoder.ipynb`\n**Assembler tous les composants**\n- Layer Normalization\n- Feed-Forward Networks\n- Residual Connections\n- Bloc Encoder complet\n- Stack de N couches\n\n**Ce que vous allez apprendre:**\n- Architecture complète du Transformer\n- Rôle de chaque composant\n- Comment empiler les couches\n- Exemple d'application (classification)\n\n### `5_Complete_Mini_LLM.ipynb`\n**Synthèse finale - Un LLM fonctionnel!**\n- Architecture complète from scratch\n- Entraînement sur toy dataset\n- Visualisation des prédictions\n- Attention heatmaps interprétables\n- Code production-ready\n\n**Ce que vous allez créer:**\n- Un modèle complet de classification de sentiment\n- Visualisations interactives\n- Pipeline d'entraînement\n- Modèle sauvegardable et réutilisable\n\n## Installation\n\n```bash\n# Créer un environnement virtuel\npython -m venv venv\nsource venv/bin/activate  # Linux/Mac\n# ou\nvenv\\Scripts\\activate  # Windows\n\n# Installer les dépendances\npip install torch numpy matplotlib seaborn jupyter\n```\n\n## Utilisation\n\n### Option 1: Suivre l'ordre recommandé\n```bash\njupyter notebook\n```\n\nPuis ouvrez les notebooks dans l'ordre:\n1. `1_Self_Attention.ipynb`\n2. `2_Multi_Head_Attention.ipynb`\n3. `3_Positional_Encoding.ipynb`\n4. `4_Transformer_Encoder.ipynb`\n5. `5_Complete_Mini_LLM.ipynb`\n\n### Option 2: Aller directement au modèle complet\nSi vous êtes pressé, ouvrez directement `5_Complete_Mini_LLM.ipynb` qui contient tout le code avec explications.\n\n## Concepts Clés Expliqués\n\n### Self-Attention\n```\nAttention(Q, K, V) = softmax(QK^T / √d_k) V\n```\n- **Q (Query)**: Ce que je cherche\n- **K (Key)**: Ce qui est disponible\n- **V (Value)**: L'information réelle\n- **Scaling**: Division par √d_k pour stabilité\n\n### Multi-Head Attention\n```\nMultiHead(Q, K, V) = Concat(head_1, ..., head_h) W^O\noù head_i = Attention(QW^Q_i, KW^K_i, VW^V_i)\n```\n- Permet d'apprendre plusieurs types de relations\n- Même complexité qu'une seule tête\n- Parallélisation efficace\n\n### Positional Encoding\n```\nPE(pos, 2i) = sin(pos / 10000^(2i/d_model))\nPE(pos, 2i+1) = cos(pos / 10000^(2i/d_model))\n```\n- Ajoute l'information de position\n- Fréquences variées pour différentes échelles\n- Permet la généralisation à des longueurs non vues\n\n### Transformer Block\n```\nBlock(x):\n  1. x = x + MultiHeadAttention(x)\n  2. x = LayerNorm(x)\n  3. x = x + FeedForward(x)\n  4. x = LayerNorm(x)\n  return x\n```\n\n## Résultats Attendus\n\nAprès avoir complété les notebooks, vous aurez:\n\nUn modèle Transformer fonctionnel  \nCompréhension profonde de l'attention  \nCapacité à visualiser et interpréter les attention maps  \nCode modulaire et réutilisable  \nBase solide pour explorer des architectures plus complexes  \n\n## Visualisations Incluses\n\n- **Attention Heatmaps**: Voir quels mots le modèle regarde\n- **Training Curves**: Loss et accuracy au fil du temps\n- **Positional Encoding Patterns**: Visualiser les sinusoïdes\n- **Multi-head Comparisons**: Comparer différentes têtes\n- **Layer Analysis**: Évolution des représentations\n\n## Pour Aller Plus Loin\n\n### Papers à lire:\n1. **\"Attention Is All You Need\"** (Vaswani et al., 2017)\n   - Le paper original du Transformer\n   \n2. **\"BERT: Pre-training of Deep Bidirectional Transformers\"** (Devlin et al., 2018)\n   - Utilisation du Transformer pour le NLP\n   \n3. **\"GPT-3: Language Models are Few-Shot Learners\"** (Brown et al., 2020)\n   - Scaling laws et émergence\n\n### Ressources additionnelles:\n- [The Illustrated Transformer](http://jalammar.github.io/illustrated-transformer/)\n- [Annotated Transformer](http://nlp.seas.harvard.edu/annotated-transformer/)\n- [Hugging Face Transformers Documentation](https://huggingface.co/docs/transformers/)\n\n## Customisation\n\nLe code est modulaire et peut être facilement adapté pour:\n- Différentes tailles de modèles\n- Autres tâches (génération, traduction, etc.)\n- Datasets personnalisés\n- Expérimentations architecturales\n\nExemple pour changer la configuration:\n```python\nmodel = MiniLLM(\n    vocab_size=10000,\n    d_model=512,      # ← Augmenter pour plus de capacité\n    num_heads=8,      # ← Plus de têtes = plus de patterns\n    d_ff=2048,        # ← Dimension du FFN\n    num_layers=6,     # ← Profondeur du modèle\n    num_classes=3     # ← Nombre de classes à prédire\n)\n```\n\n## Tips \u0026 Best Practices\n\n### Pour l'entraînement:\n- Commencer avec un petit modèle pour debugger\n- Utiliser un learning rate scheduler\n- Monitorer les gradients (gradient clipping si nécessaire)\n- Sauvegarder les checkpoints régulièrement\n\n### Pour la visualisation:\n- Examiner plusieurs exemples\n- Comparer les patterns entre couches\n- Vérifier que l'attention a du sens sémantiquement\n\n### Pour le debugging:\n- Vérifier les shapes à chaque étape\n- Tester avec des batch_size=1 d'abord\n- Utiliser des assertions pour valider les dimensions\n\n## Contribution\n\nCe workshop est conçu pour être éducatif. N'hésitez pas à:\n- Expérimenter avec le code\n- Ajouter vos propres visualisations\n- Tester sur vos données\n- Partager vos découvertes\n\n## Notes Importantes\n\n**Ce code est à but éducatif**\n- Optimisé pour la clarté, pas la performance\n- Pour la production, utilisez des bibliothèques comme Hugging Face\n- Les toy datasets sont pour la démonstration\n\n**Points forts du code:**\n- Annotations détaillées en français\n- Explications étape par étape\n- Visualisations interactives\n- Architecture modulaire\n\n## Livrables du Workshop\n\nÀ la fin de ce workshop, vous devez produire:\n\n1. **Notebook fonctionnel** avec implémentation complète ✓\n2. **Visualisations d'attention** montrant les patterns appris ✓\n3. **Courte explication** de vos résultats (déjà dans les notebooks) ✓\n\n## Support\n\nSi vous avez des questions:\n1. Consultez d'abord les commentaires dans le code\n2. Regardez les cellules de visualisation\n3. Expérimentez avec différents paramètres\n\n\n---\n\n**Happy Learning! **\n\n*Build, Learn, Iterate*\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fennajari%2Fmini_llm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fennajari%2Fmini_llm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fennajari%2Fmini_llm/lists"}