{"notes":[{"id":"lightweight/starnet","category":"lightweight","legacyPath":"","legacySlug":"","legacyPaths":[],"title":"StarNet","subtitle":"Un astérisque","author":"Z. Yuan","paperDate":"2024-03-29","publishedOn":"2026-02-04","world":"external/starnet","paperTitle":"Rewrite the Stars","paperUrl":"https://arxiv.org/abs/2403.19967","bibliography":{"title":"Rewrite the Stars","authors":["Xu Ma","Xiyang Dai","Yue Bai","Yizhou Wang","Yun Fu"],"url":"https://arxiv.org/abs/2403.19967","pdfUrl":"https://arxiv.org/pdf/2403.19967v1","codeUrl":"https://github.com/ma-xu/Rewrite-the-Stars","preprint":{"id":"2403.19967","submittedOn":"2024-03-29","url":"https://arxiv.org/abs/2403.19967"},"publication":{"venue":"CVPR","year":2024,"kind":"conference","url":"https://openaccess.thecvf.com/content/CVPR2024/html/Ma_Rewrite_the_Stars_CVPR_2024_paper.html"},"citation":"@misc{lightweightstarnet2024,\n  title = {{Rewrite the Stars}},\n  author = {Xu Ma and Xiyang Dai and Yue Bai and Yizhou Wang and Yun Fu},\n  year = {2024},\n  eprint = {2403.19967},\n  archivePrefix = {arXiv},\n  url = {https://arxiv.org/abs/2403.19967}\n}\n","citationPath":"/content/papers/citations/lightweight/starnet.11711ddcb0cd.bib"},"thumbnail":{"src":"/content/papers/assets/57e0e49bab986c607a82db36bbc0a45a49e42732719480f1afed603ca4c3e48a.png","width":1011,"height":588},"locale":"fr","path":"/content/papers/fr/lightweight/starnet.a2142e5f25e2.md","headings":[{"id":"définir-le-problème","text":"Définir le problème","depth":2},{"id":"quel-écart-entre-addition-et-multiplication-","text":"Quel écart entre addition et multiplication ?","depth":3},{"id":"résoudre-le-problème","text":"Résoudre le problème","depth":2},{"id":"développer-le-produit","text":"Développer le produit","depth":3},{"id":"même-sans-fonctions-dactivation","text":"Même sans fonctions d'activation","depth":3},{"id":"starnet","text":"StarNet","depth":3},{"id":"discussion","text":"Discussion","depth":2},{"id":"imagenet","text":"ImageNet","depth":3},{"id":"où-placer-la-multiplication-","text":"Où placer la multiplication ?","depth":3},{"id":"le-coût-en-vitesse","text":"Le coût en vitesse","depth":3},{"id":"conclusion","text":"Conclusion","depth":2}],"anchorAliases":{},"guide":null,"relatedReading":[{"id":"lightweight/mobilenet-v2","relation":"referenced","topic":""},{"id":"lightweight/fasternet","relation":"referenced","topic":""}]},{"id":"lightweight/mobilenet-v2","category":"lightweight","legacyPath":"lightweight/1801-mobilenet-v2","legacySlug":"1801-mobilenet-v2","legacyPaths":[],"title":"MobileNet-V2","subtitle":"Ce qui se joue dans le goulot","author":"Z. Yuan","paperDate":"2018-01-13","publishedOn":"2024-06-27","paperTitle":"MobileNetV2: Inverted Residuals and Linear Bottlenecks","paperUrl":"https://arxiv.org/abs/1801.04381","bibliography":{"title":"MobileNetV2: Inverted Residuals and Linear Bottlenecks","authors":["Mark Sandler","Andrew Howard","Menglong Zhu","Andrey Zhmoginov","Liang-Chieh Chen"],"url":"https://arxiv.org/abs/1801.04381","pdfUrl":"https://arxiv.org/pdf/1801.04381","codeUrl":null,"preprint":{"id":"1801.04381","submittedOn":"2018-01-13","url":"https://arxiv.org/abs/1801.04381"},"publication":{"venue":"CVPR","year":2018,"kind":"conference","url":"https://arxiv.org/abs/1801.04381"},"citation":"@misc{lightweightmobilenetv22018,\n  title = {{MobileNetV2: Inverted Residuals and Linear Bottlenecks}},\n  author = {Mark Sandler and Andrew Howard and Menglong Zhu and Andrey Zhmoginov and Liang-Chieh Chen},\n  year = {2018},\n  eprint = {1801.04381},\n  archivePrefix = {arXiv},\n  url = {https://arxiv.org/abs/1801.04381}\n}\n","citationPath":"/content/papers/citations/lightweight/mobilenet-v2.a882707cbaa2.bib"},"thumbnail":{"src":"/content/papers/assets/e6bbfb346bb449f83897d76b69c3711d2e9937d40320a7aab0f3843653a688c0.jpg","width":2332,"height":1324},"locale":"fr","path":"/content/papers/fr/lightweight/mobilenet-v2.19bf0284e711.md","headings":[{"id":"définir-le-problème","text":"Définir le problème","depth":2},{"id":"goulot-linéaire","text":"Goulot linéaire","depth":3},{"id":"réseau-résiduel","text":"Réseau résiduel","depth":3},{"id":"résoudre-le-problème","text":"Résoudre le problème","depth":2},{"id":"résidu-inversé","text":"Résidu inversé","depth":3},{"id":"goulot-élargi-annexe-a-de-larticle","text":"Goulot élargi (annexe A de l'article)","depth":3},{"id":"architecture-du-modèle","text":"Architecture du modèle","depth":3},{"id":"discussion","text":"Discussion","depth":2},{"id":"résultats-de-classification-dimages","text":"Résultats de classification d'images","depth":3},{"id":"conclusion","text":"Conclusion","depth":2}],"anchorAliases":{},"guide":null,"relatedReading":[{"id":"lightweight/mobilenet-v1","relation":"background","topic":"Convolutions efficaces sur mobile"},{"id":"lightweight/mobilenet-v3","relation":"next","topic":"Convolutions efficaces sur mobile"}]},{"id":"lightweight/fasternet","category":"lightweight","legacyPath":"","legacySlug":"","legacyPaths":[],"title":"FasterNet","subtitle":"Les FLOPs mentent","author":"Z. Yuan","paperDate":"2023-03-07","publishedOn":"2025-10-23","world":"external/fasternet","paperTitle":"Run, Don't Walk: Chasing Higher FLOPS for Faster Neural Networks","paperUrl":"https://arxiv.org/abs/2303.03667","bibliography":{"title":"Run, Don't Walk: Chasing Higher FLOPS for Faster Neural Networks","authors":["Jierun Chen","Shiu-hong Kao","Hao He","Weipeng Zhuo","Song Wen","Chul-Ho Lee","S.-H. Gary Chan"],"url":"https://arxiv.org/abs/2303.03667","pdfUrl":"https://arxiv.org/pdf/2303.03667v3","codeUrl":null,"preprint":{"id":"2303.03667","submittedOn":"2023-03-07","url":"https://arxiv.org/abs/2303.03667"},"publication":{"venue":"CVPR","year":2023,"kind":"conference","url":"https://openaccess.thecvf.com/content/CVPR2023/html/Chen_Run_Dont_Walk_Chasing_Higher_FLOPS_for_Faster_Neural_Networks_CVPR_2023_paper.html"},"citation":"@misc{lightweightfasternet2023,\n  title = {{Run, Don't Walk: Chasing Higher FLOPS for Faster Neural Networks}},\n  author = {Jierun Chen and Shiu-hong Kao and Hao He and Weipeng Zhuo and Song Wen and Chul-Ho Lee and S.-H. Gary Chan},\n  year = {2023},\n  eprint = {2303.03667},\n  archivePrefix = {arXiv},\n  url = {https://arxiv.org/abs/2303.03667}\n}\n","citationPath":"/content/papers/citations/lightweight/fasternet.7a313d25fdbe.bib"},"thumbnail":{"src":"/content/papers/assets/f7b24b9388f5bb090f5420a96d640e9f851fd40becb24e6bb9b31ba1ebee4b71.png","width":1012,"height":500},"locale":"fr","path":"/content/papers/fr/lightweight/fasternet.9f680bcb7ad1.md","headings":[{"id":"définir-le-problème","text":"Définir le problème","depth":2},{"id":"latence--flops-divisés-par-flops","text":"Latence = FLOPs divisés par FLOPS","depth":3},{"id":"ce-qui-ralentit-la-convolution-depthwise","text":"Ce qui ralentit la convolution depthwise","depth":3},{"id":"résoudre-le-problème","text":"Résoudre le problème","depth":2},{"id":"la-convolution-partielle-pconv","text":"La convolution partielle PConv","depth":3},{"id":"ajouter-une-convolution-11","text":"Ajouter une convolution 1×1","depth":3},{"id":"fasternet","text":"FasterNet","depth":3},{"id":"discussion","text":"Discussion","depth":2},{"id":"imagenet","text":"ImageNet","depth":3},{"id":"détection-et-segmentation","text":"Détection et segmentation","depth":3},{"id":"ablations","text":"Ablations","depth":3},{"id":"conclusion","text":"Conclusion","depth":2}],"anchorAliases":{},"guide":null,"relatedReading":[{"id":"lightweight/mobilenet-v2","relation":"referenced","topic":""},{"id":"lightweight/shufflenet","relation":"referenced","topic":""},{"id":"lightweight/ghostnet","relation":"referenced","topic":""}]}],"text":"Les nouvelles architectures de ces dernières années cachent souvent une multiplication élément par élément.\n\nLe FFN du Transformer devient un GLU qui multiplie deux branches ; Mamba possède une branche de porte ; en vision, FocalNet, HorNet et VAN multiplient aussi. Le symbole `*` ressemble à une étoile : cet article l'appelle donc « opération étoile », ou star operation.\n\nTous disent que la multiplication aide, mais chacun avance une explication. FocalNet parle de modulation ou de porte, HorNet de caractéristiques d'ordre supérieur, VAN d'attention convolutive. Les auteurs, de Northeastern University et de Microsoft, veulent clarifier ce qu'apporte exactement le produit de deux branches linéaires.\n\n## Définir le problème\n\n### Quel écart entre addition et multiplication ?\n\nLes auteurs construisent un bloc très simple. L'entrée passe par LayerNorm et une convolution depthwise, puis se divise en deux branches entièrement connectées, dont une avec GELU. Les branches sont réunies par addition ou multiplication, puis viennent une couche entièrement connectée et une connexion résiduelle.\n\n[![Figure 1 de l'article : à gauche, le bloc de démonstration suit Layer Norm, DW-Conv, puis deux branches FC, celle de gauche avec GELU. Elles se rejoignent au point d'interrogation rouge, annoté sum or star, avant un FC et une addition résiduelle. À droite, l'histogramme donne la précision ImageNet top-1 selon une largeur de 96 à 448 : bleu clair pour sum, orange clair pour star. La ligne rouge en pointillés à triangles montre l'écart, qui descend d'environ 6.5 points à largeur 96 à environ 2.5 points à largeur 448.](/content/papers/assets/57e0e49bab986c607a82db36bbc0a45a49e42732719480f1afed603ca4c3e48a.png)](/content/papers/assets/57e0e49bab986c607a82db36bbc0a45a49e42732719480f1afed603ca4c3e48a.png)\n\n*Figure 1 de Ma et al., extraite de la [**page 1 du PDF**](https://arxiv.org/pdf/2403.19967v1#page=1). La légende originale est omise.*\n\nDouze de ces blocs forment DemoNet. Seule l'opération de réunion change dans la comparaison ImageNet :\n\n| Largeur | 96 | 128 | 160 | 192 | 224 | 256 | 288 |\n| --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: |\n| Addition | 51.1% | 58.5% | 62.7% | 66.2% | 69.6% | 71.4% | 72.5% |\n| Multiplication | **57.6%** | **64.0%** | **68.2%** | **71.7%** | **73.9%** | **75.3%** | **76.1%** |\n\n*Tableau : tableau 2 de l'article, profondeur fixée à 12 couches.*\n\nLa multiplication gagne à toutes les largeurs, surtout dans les réseaux étroits : 6.5 points à 96, encore 3.6 à 288. À largeur fixe et profondeur variable, l'écart reste entre 4 et 6.5 points, sans diminuer avec la profondeur.\n\nCette efficacité particulière dans les réseaux étroits servira plus loin.\n\n## Résoudre le problème\n\n### Développer le produit\n\nPrenons un canal de sortie. L'entrée $x$ possède $d$ canaux, auxquels on ajoute un 1 pour incorporer le biais dans les poids. Le produit des branches donne\n\n$$\n(w_1^\\top x)(w_2^\\top x)=\\Big(\\sum_{i=1}^{d+1} w_1^i x_i\\Big)\\Big(\\sum_{j=1}^{d+1} w_2^j x_j\\Big)=\\sum_{i=1}^{d+1}\\sum_{j=1}^{d+1} w_1^i w_2^j\\, x_i x_j .\n$$\n\nC'est une combinaison linéaire de tous les $x_i x_j$. Comme $x_i x_j$ et $x_j x_i$ sont identiques, leur regroupement laisse $(d+2)(d+1)/2$ termes, soit environ $d^2/2$. Le calcul est effectué en dimension $d$, mais produit l'équivalent d'une opération linéaire dans un espace d'environ $d^2/2$ dimensions, chacune étant un terme quadratique de l'entrée.\n\nVérifions avec $d=4$ :\n\n```python\nimport numpy as np\n\nrng = np.random.default_rng(0)\nd = 4\nx = np.append(rng.normal(size=d), 1.0)        # Ajouter 1 pour incorporer le biais dans les poids\nw1, w2 = rng.normal(size=d + 1), rng.normal(size=d + 1)\n\nstar = (w1 @ x) * (w2 @ x)                    # Produit élément par élément de deux branches linéaires\n\n# Développer en combinaison linéaire de tous les x_i x_j\nA = np.outer(w1, w2)\nterms = {(i, j): (A[i, i] if i == j else A[i, j] + A[j, i]) for i in range(d + 1) for j in range(i, d + 1)}\nexpanded = sum(a * x[i] * x[j] for (i, j), a in terms.items())\n\nprint(f\"Produit direct : {star:.6f}\")\nprint(f\"Développement quadratique : {expanded:.6f}\")\nprint(\"Dimension d'entrée\", d, \", nombre de termes développés\", len(terms))\nsym = (A + A.T) / 2                           # Les 15 coefficients proviennent d'une matrice symétrique\nprint(\"Rang de la matrice des coefficients :\", np.linalg.matrix_rank(sym))\n```\n\n```text\nProduit direct : -0.059305\nDéveloppement quadratique : -0.059305\nDimension d'entrée 4 , nombre de termes développés 15\nRang de la matrice des coefficients : 2\n```\n\nQuatre canaux d'entrée donnent 15 termes quadratiques. Pour une largeur de 128, on en obtient 8385.\n\nCela ressemble au noyau polynomial en apprentissage automatique. Le noyau $k(x_1,x_2)=(\\gamma\\, x_1\\cdot x_2+c)^d$ calcule dans un espace polynomial de grande dimension sans développer explicitement les caractéristiques. L'opération étoile calcule, elle aussi, en faible dimension pour obtenir une représentation de grande dimension.\n\nEn empilant les couches, la dimension continue de croître par élévations au carré. La deuxième couche multiplie les termes quadratiques de la première pour obtenir des termes de degré quatre. Les auteurs estiment qu'un réseau de largeur 128 et de 10 couches possède une dimension implicite d'environ $90^{1024}$, pratiquement infinie.\n\nLa dernière ligne de sortie mérite toutefois une pause. Les 15 coefficients viennent entièrement des deux vecteurs $w_1$ et $w_2$, et la matrice correspondante n'a qu'un rang de 2. Un canal de sortie ne peut pas choisir librement ses termes quadratiques : la dimension est haute, mais les coefficients très contraints. Les auteurs évoquent aussi cette distribution moins libre que les poids d'un réseau ordinaire pour expliquer pourquoi une dimension implicite immense n'apporte qu'un gain modéré.\n\n[![Figure 2 de l'article : quatre nuages de points bidimensionnels montrent deux lunes entrelacées, orange et verte. En haut, les réseaux neuronaux : sum operation à gauche donne une frontière droite oblique, star operation à droite une courbe mieux adaptée aux lunes. En bas, les SVM : Gaussian Kernel à gauche donne une région verte arrondie, tandis que Polynomial Kernel à droite produit une frontière proche de celle de star operation au-dessus.](/content/papers/assets/b55872c7135a393362fc7046bb8e6019d674440f9d2e201f4eae032c743d3b02.png)](/content/papers/assets/b55872c7135a393362fc7046bb8e6019d674440f9d2e201f4eae032c743d3b02.png)\n\n*Figure 2 de Ma et al., extraite de la [**page 5 du PDF**](https://arxiv.org/pdf/2403.19967v1#page=5). La légende originale est omise.*\n\nSur ces données en deux lunes, le réseau additif trace une droite et le multiplicatif une courbe. Cette dernière ressemble à celle du SVM polynomial, bien plus qu'à celle du SVM gaussien.\n\n### Même sans fonctions d'activation\n\nSi la multiplication apporte déjà la non-linéarité, que donne un réseau sans aucune activation ? Testons un petit réseau sur XOR : les premier et troisième quadrants forment une classe, les deuxième et quatrième l'autre. Aucune droite ne peut les séparer :\n\n```python\nimport torch\n\ntorch.manual_seed(0)\nx = torch.rand(2000, 2) * 2 - 1                # Points du plan, coordonnées entre -1 et 1\ny = (x[:, 0] * x[:, 1] > 0).float()           # Quadrants 1 et 3 : 1 ; quadrants 2 et 4 : 0 (XOR)\n\ndef train(combine, width=4):\n    W1, W2 = torch.nn.Linear(2, width), torch.nn.Linear(2, width)\n    head = torch.nn.Linear(width, 1)\n    params = [*W1.parameters(), *W2.parameters(), *head.parameters()]\n    opt = torch.optim.Adam(params, lr=0.05)\n    for _ in range(1000):\n        logit = head(combine(W1(x), W2(x))).squeeze(1)\n        loss = torch.nn.functional.binary_cross_entropy_with_logits(logit, y)\n        opt.zero_grad()\n        loss.backward()\n        opt.step()\n    return ((logit > 0).float() == y).float().mean().item()\n\nprint(f\"Branches additionnées : précision {train(lambda a, b: a + b):.1%}\")\nprint(f\"Branches multipliées : précision {train(lambda a, b: a * b):.1%}\")\n```\n\n```text\nBranches additionnées : précision 53.6%\nBranches multipliées : précision 100.0%\n```\n\nLa version additive reste linéaire de bout en bout et ne fait guère mieux qu'un choix au hasard. La multiplication introduit le terme $x_1x_2$ qui résout directement le problème.\n\nL'article fait le même test avec DemoNet de largeur 192 et de profondeur 12. Retirer toutes les activations fait chuter le réseau additif de 66.2% à 32.4%, mais le multiplicatif passe seulement de 71.7% à 70.5%.\n\n### StarNet\n\nPuisque la multiplication aide surtout les réseaux étroits, les auteurs en font un réseau léger, StarNet.\n\n[![Figure 3 de l'article : en haut, une image du ciel étoilé entre dans Conv (BN, ReLU6), puis stage1 à stage4. Chaque étage contient un Conv et une pile de Star Blocks ; les canaux vont de d à 8d et la résolution de H/4 à H/32, avant GAP et FC. En bas à gauche, un Star Block suit DW-Conv, BN, puis deux branches FC qui passent de d à 4d, l'une avec ReLU6. Elles se multiplient à l'étoile, puis viennent FC vers d, BN et DW-Conv, avec un raccourci résiduel. La légende précise Conv ks=3, stride=2 ; DW-Conv ks=7, stride=1 ; étoile : multiplication élément par élément.](/content/papers/assets/55ab4184389c408d6a5688d8bb59a97d8b20245cb9681ca5344bd295116806f6.png)](/content/papers/assets/55ab4184389c408d6a5688d8bb59a97d8b20245cb9681ca5344bd295116806f6.png)\n\n*Figure 3 de Ma et al., extraite de la [**page 6 du PDF**](https://arxiv.org/pdf/2403.19967v1#page=6). La légende originale est omise.*\n\nL'architecture est volontairement simple. Quatre étages commencent chacun par une convolution 3×3 de pas 2 qui sous-échantillonne et double les canaux. Le bloc reprend DemoNet avec quelques changements. BatchNorm remplace LayerNorm et passe après la depthwise, pour fusionner avec elle à l'inférence. ReLU6, utilisé par MobileNetV2, remplace GELU. Une seconde depthwise termine le bloc, et les deux branches multiplient les canaux par 4.\n\nNi reparamétrage, ni attention, ni SE : les auteurs veulent éviter de masquer la contribution de l'opération étoile. Les quatre tailles ne changent que les canaux du premier étage et le nombre de blocs par étage. S1, le plus petit, compte 2.9M paramètres et 425M FLOPs ; S4, le plus grand, 7.5M et 1075M.\n\n\n> [!TIP]\n> \n> Pour ReLU6 et les résidus inversés, voir MobileNetV2 ; pour un autre réseau léger centré sur la vitesse réelle, voir FasterNet :\n> \n> - **[[18.01] MobileNet-V2 : Ce qui se joue dans le goulot](/blog/papers/lightweight/mobilenet-v2)**\n> - **[[23.03] FasterNet : Les FLOPs mentent](/blog/papers/lightweight/fasternet)**\n\n\n## Discussion\n\n### ImageNet\n\nL'entraînement suit DeiT pendant 300 epochs. La latence est mesurée avec un batch de 1 sur iPhone 13, GPU P100 et CPU Intel E5-2680.\n\n| Modèle | top-1 | Paramètres | FLOPs | iPhone 13 | GPU | CPU |\n| --- | ---: | ---: | ---: | ---: | ---: | ---: |\n| MobileOne-S0 | 71.4% | 2.1M | 275M | 0.7 ms | 1.1 ms | 2.2 ms |\n| FasterNet-T0 | 71.9% | 3.9M | 338M | 0.7 ms | 2.5 ms | 5.7 ms |\n| StarNet-S1 | **73.5%** | 2.9M | 425M | 0.7 ms | 2.3 ms | 4.3 ms |\n| MobileOne-S1 | 75.9% | 4.8M | 825M | 0.9 ms | 1.5 ms | 6.0 ms |\n| EfficientNet-B0 | 77.1% | 5.3M | 390M | 1.6 ms | 3.4 ms | 8.8 ms |\n| StarNet-S3 | **77.3%** | 5.8M | 757M | 0.9 ms | 2.7 ms | 6.7 ms |\n| MobileOne-S2 | 77.4% | 7.8M | 1299M | 1.0 ms | 2.0 ms | 8.9 ms |\n| EdgeViT-XS | 77.5% | 6.8M | 1166M | 3.5 ms | 12.1 ms | 18.3 ms |\n| StarNet-S4 | **78.4%** | 7.5M | 1075M | 1.0 ms | 3.7 ms | 9.4 ms |\n\n*Tableau : certaines lignes du tableau 6 de l'article.*\n\nSur iPhone 13, StarNet est convaincant. À 0.7 ms, S1 gagne 2.1 points sur MobileOne-S0. S4 gagne 0.9 point sur EdgeViT-XS en étant 3.5 fois plus rapide.\n\nSur GPU et CPU, la situation change. StarNet-S4 demande 3.7 ms sur P100 contre 2.0 ms pour MobileOne-S2 ; sur CPU, 9.4 contre 8.9 ms, encore un léger avantage à MobileOne. StarNet excelle sur téléphone. Il dépasse largement les architectures hybrides comme EdgeViT sur les trois appareils, mais face à MobileOne, tout dépend de l'appareil.\n\n### Où placer la multiplication ?\n\nLes auteurs remplacent progressivement les multiplications de StarNet-S4 par des additions :\n\n| Étage 1 | Étage 2 | Étage 3 | Étage 4 | top-1 |\n| --- | --- | --- | --- | ---: |\n| Addition | Addition | Addition | Addition | 75.3% |\n| Multiplication | Multiplication | Addition | Addition | 75.2% |\n| Multiplication | Multiplication | Multiplication | Addition | 76.8% |\n| Addition | Addition | Multiplication | Multiplication | **78.4%** |\n| Multiplication | Multiplication | Multiplication | Multiplication | **78.4%** |\n\n*Tableau : certaines lignes du tableau 7 de l'article.*\n\nTout remplacer par l'addition coûte 3.1 points. Mais les deux premiers étages changent peu le résultat : multiplier uniquement dans les deux derniers suffit à égaler la multiplication partout. Les auteurs l'expliquent par l'étroitesse des premiers étages : ReLU6 annule beaucoup de caractéristiques, donc aussi leurs termes quadratiques, et le bénéfice des grandes dimensions se perd.\n\nIls testent aussi l'emplacement des activations. Sans aucune activation : 75.6%. Sur une seule branche : 78.4%. Sur les deux : 78.0%. Après le produit : 77.0%. Une seule branche activée fonctionne le mieux.\n\nSi une seule branche est transformée et l'autre utilise directement $x$, soit $(W_2\\,\\mathrm{act}(W_1 x)) * x$, la précision tombe à 74.4% à calcul égal. Les deux branches doivent subir une transformation linéaire pour produire assez de termes quadratiques.\n\n### Le coût en vitesse\n\nEn théorie, la multiplication coûte un peu plus cher que l'addition. En pratique, leurs vitesses sont identiques sur iPhone et GPU. Sur CPU, le produit est un peu plus lent : 9.4 contre 8.4 ms pour StarNet-S4.\n\nUne autre question reste ouverte dans l'article. Sur GitHub, [un utilisateur interroge les auteurs sur la quantification](https://github.com/ma-xu/Rewrite-the-Stars/issues/10), qu'ils n'ont pas encore essayée. Un autre rappelle que le produit de deux caractéristiques peut facilement dépasser la plage d'INT8. Ce point est à vérifier avant un déploiement sur téléphone.\n\n## Conclusion\n\nCet article ramène une opération très utilisée, mais expliquée de diverses façons, à un développement lisible. Multiplier deux branches linéaires revient à combiner environ $d^2/2$ termes quadratiques ; l'empilement fait ensuite exploser la dimension implicite. Cela éclaire son avantage dans les réseaux étroits, qui manquent justement de dimensions.\n\nLa matrice de coefficients de rang 2 en montre aussi la limite : beaucoup de termes développés, mais peu de coefficients réglables librement. Dans DemoNet et StarNet, cette dimension « presque infinie » apporte de 3 à 6.5 points.\n\ntimm propose les poids préentraînés de `starnet_s1` à `starnet_s4`. Si un modèle léger manque de précision, on peut commencer par chercher une addition dans ses blocs et essayer de la remplacer par une multiplication.\n","imageSizes":{"/content/papers/assets/57e0e49bab986c607a82db36bbc0a45a49e42732719480f1afed603ca4c3e48a.png":{"width":1011,"height":588},"/content/papers/assets/b55872c7135a393362fc7046bb8e6019d674440f9d2e201f4eae032c743d3b02.png":{"width":978,"height":609},"/content/papers/assets/55ab4184389c408d6a5688d8bb59a97d8b20245cb9681ca5344bd295116806f6.png":{"width":1011,"height":693}}}
