{"notes":[{"id":"graph-learning/chebnet","category":"graph-learning","legacyPath":"","legacySlug":"","legacyPaths":[],"title":"ChebNet","subtitle":"Un polynôme suffit","author":"Z. Yuan","paperDate":"2016-06-30","publishedOn":"2023-09-16","world":"external/chebnet","paperTitle":"Convolutional Neural Networks on Graphs with Fast Localized Spectral Filtering","paperUrl":"https://arxiv.org/abs/1606.09375","bibliography":{"title":"Convolutional Neural Networks on Graphs with Fast Localized Spectral Filtering","authors":["Michaël Defferrard","Xavier Bresson","Pierre Vandergheynst"],"url":"https://arxiv.org/abs/1606.09375","pdfUrl":"https://arxiv.org/pdf/1606.09375v3","codeUrl":"https://github.com/mdeff/cnn_graph","preprint":{"id":"1606.09375","submittedOn":"2016-06-30","url":"https://arxiv.org/abs/1606.09375"},"publication":{"venue":"NeurIPS","year":2016,"kind":"conference","url":"https://papers.nips.cc/paper_files/paper/2016/hash/04df4d434d481c5bb723be1b6df1ee65-Abstract.html"},"citation":"@misc{graphlearningchebnet2016,\n  title = {{Convolutional Neural Networks on Graphs with Fast Localized Spectral Filtering}},\n  author = {Michaël Defferrard and Xavier Bresson and Pierre Vandergheynst},\n  year = {2016},\n  eprint = {1606.09375},\n  archivePrefix = {arXiv},\n  url = {https://arxiv.org/abs/1606.09375}\n}\n","citationPath":"/content/papers/citations/graph-learning/chebnet.52e0fac25946.bib"},"thumbnail":{"src":"/content/papers/assets/f924fc7fdf6829dd352c02c0062d56fef579382aee9d8de9a76c29aa312325ef.png","width":1144,"height":484},"locale":"fr","path":"/content/papers/fr/graph-learning/chebnet.df907f539bbb.md","headings":[{"id":"poser-le-problème","text":"Poser le problème","depth":2},{"id":"la-translation-échappe-à-une-définition-spatiale","text":"La translation échappe à une définition spatiale","depth":3},{"id":"le-domaine-spectral-coûte-trop-cher","text":"Le domaine spectral coûte trop cher","depth":3},{"id":"résoudre-le-problème","text":"Résoudre le problème","depth":2},{"id":"des-polynômes-pour-assurer-la-localité","text":"Des polynômes pour assurer la localité","depth":3},{"id":"la-récurrence-de-chebyshev-pour-gagner-en-vitesse","text":"La récurrence de Chebyshev pour gagner en vitesse","depth":3},{"id":"le-pooling-sur-graphe","text":"Le pooling sur graphe","depth":3},{"id":"discussion","text":"Discussion","depth":2},{"id":"commencer-par-vérifier-sur-une-grille","text":"Commencer par vérifier sur une grille","depth":3},{"id":"comparer-trois-filtres","text":"Comparer trois filtres","depth":3},{"id":"la-qualité-du-graphe","text":"La qualité du graphe","depth":3},{"id":"la-suite","text":"La suite","depth":3},{"id":"conclusion","text":"Conclusion","depth":2}],"anchorAliases":{},"guide":null,"relatedReading":[{"id":"graph-learning/spectral-networks","relation":"referenced","topic":""},{"id":"graph-learning/gcn","relation":"referenced","topic":""}]},{"id":"graph-learning/spectral-networks","category":"graph-learning","legacyPath":"","legacySlug":"","legacyPaths":[],"title":"Spectral Networks","subtitle":"Détour par le domaine spectral","author":"Z. Yuan","paperDate":"2013-12-21","publishedOn":"2023-09-06","paperTitle":"Spectral Networks and Locally Connected Networks on Graphs","paperUrl":"https://arxiv.org/abs/1312.6203","bibliography":{"title":"Spectral Networks and Locally Connected Networks on Graphs","authors":["Joan Bruna","Wojciech Zaremba","Arthur Szlam","Yann LeCun"],"url":"https://arxiv.org/abs/1312.6203","pdfUrl":"https://arxiv.org/pdf/1312.6203v3","codeUrl":null,"preprint":{"id":"1312.6203","submittedOn":"2013-12-21","url":"https://arxiv.org/abs/1312.6203"},"publication":{"venue":"ICLR","year":2014,"kind":"conference","url":"https://iclr.cc/archive/2014/conference-proceedings/"},"citation":"@misc{graphlearningspectralnetworks2013,\n  title = {{Spectral Networks and Locally Connected Networks on Graphs}},\n  author = {Joan Bruna and Wojciech Zaremba and Arthur Szlam and Yann LeCun},\n  year = {2013},\n  eprint = {1312.6203},\n  archivePrefix = {arXiv},\n  url = {https://arxiv.org/abs/1312.6203}\n}\n","citationPath":"/content/papers/citations/graph-learning/spectral-networks.ea286632c50d.bib"},"thumbnail":{"src":"/content/papers/assets/81c18ce1b25b0675fa18b9922bab2a4316a1582ec2824475056e04b90cda9baa.png","width":1210,"height":448},"locale":"fr","path":"/content/papers/fr/graph-learning/spectral-networks.bc4294bc5139.md","headings":[{"id":"poser-le-problème","text":"Poser le problème","depth":2},{"id":"résoudre-le-problème","text":"Résoudre le problème","depth":2},{"id":"construction-spatiale--connexions-locales-et-regroupement","text":"Construction spatiale : connexions locales et regroupement","depth":3},{"id":"construction-spectrale--les-vecteurs-propres-du-laplacien","text":"Construction spectrale : les vecteurs propres du laplacien","depth":3},{"id":"retrouver-les-cnn","text":"Retrouver les CNN","depth":3},{"id":"des-coefficients-lisses-des-filtres-locaux","text":"Des coefficients lisses, des filtres locaux","depth":3},{"id":"discussion","text":"Discussion","depth":2},{"id":"mnist-sous-échantillonné","text":"MNIST sous-échantillonné","depth":3},{"id":"mnist-sur-une-sphère","text":"MNIST sur une sphère","depth":3},{"id":"conclusion","text":"Conclusion","depth":2}],"anchorAliases":{},"guide":null,"relatedReading":[{"id":"graph-learning/chebnet","relation":"referenced","topic":""},{"id":"graph-learning/gcn","relation":"referenced","topic":""}]},{"id":"graph-learning/gcn","category":"graph-learning","legacyPath":"","legacySlug":"","legacyPaths":[],"title":"GCN","subtitle":"Un seul paramètre suffit-il ?","author":"Z. Yuan","paperDate":"2016-09-09","publishedOn":"2023-10-01","world":"external/gcn","paperTitle":"Semi-Supervised Classification with Graph Convolutional Networks","paperUrl":"https://arxiv.org/abs/1609.02907","bibliography":{"title":"Semi-Supervised Classification with Graph Convolutional Networks","authors":["Thomas N. Kipf","Max Welling"],"url":"https://arxiv.org/abs/1609.02907","pdfUrl":"https://arxiv.org/pdf/1609.02907v4","codeUrl":"https://github.com/tkipf/gcn","preprint":{"id":"1609.02907","submittedOn":"2016-09-09","url":"https://arxiv.org/abs/1609.02907"},"publication":{"venue":"ICLR","year":2017,"kind":"conference","url":"https://arxiv.org/abs/1609.02907"},"citation":"@misc{graphlearninggcn2016,\n  title = {{Semi-Supervised Classification with Graph Convolutional Networks}},\n  author = {Thomas N. Kipf and Max Welling},\n  year = {2016},\n  eprint = {1609.02907},\n  archivePrefix = {arXiv},\n  url = {https://arxiv.org/abs/1609.02907}\n}\n","citationPath":"/content/papers/citations/graph-learning/gcn.43058ec3e77e.bib"},"thumbnail":{"src":"/content/papers/assets/ded600c9ca8f4eda09d39ffb16b3c9b0ec730780063e55948b29924d00f14794.png","width":1122,"height":400},"locale":"fr","path":"/content/papers/fr/graph-learning/gcn.92d7953d0185.md","headings":[{"id":"poser-le-problème","text":"Poser le problème","depth":2},{"id":"le-graphe-comme-terme-de-régularisation","text":"Le graphe comme terme de régularisation","depth":3},{"id":"résoudre-le-problème","text":"Résoudre le problème","depth":2},{"id":"simplifier-depuis-le-domaine-spectral","text":"Simplifier depuis le domaine spectral","depth":3},{"id":"une-couche-de-gcn","text":"Une couche de GCN","depth":3},{"id":"deux-couches-suffisent","text":"Deux couches suffisent","depth":3},{"id":"discussion","text":"Discussion","depth":2},{"id":"protocole-expérimental","text":"Protocole expérimental","depth":3},{"id":"résultats-principaux","text":"Résultats principaux","depth":3},{"id":"quelle-propagation-fonctionne-le-mieux-","text":"Quelle propagation fonctionne le mieux ?","depth":3},{"id":"que-se-passe-t-il-en-profondeur-","text":"Que se passe-t-il en profondeur ?","depth":3},{"id":"le-lien-avec-lalgorithme-wl","text":"Le lien avec l'algorithme WL","depth":3},{"id":"une-critique-quatre-jours-plus-tard","text":"Une critique, quatre jours plus tard","depth":3},{"id":"les-limites-relevées-par-larticle","text":"Les limites relevées par l'article","depth":3},{"id":"conclusion","text":"Conclusion","depth":2}],"anchorAliases":{},"guide":null,"relatedReading":[{"id":"graph-learning/spectral-networks","relation":"referenced","topic":""},{"id":"graph-learning/chebnet","relation":"referenced","topic":""}]}],"text":"Si les CNN fonctionnent bien sur les images, c'est grâce à trois propriétés. Le noyau de convolution ne regarde qu'une petite région, les mêmes poids sont réutilisés sur toute l'image, et l'empilement des couches permet de composer des motifs de plus en plus grands.\n\nCes trois propriétés reposent sur la grille. Les pixels ont un haut, un bas, une gauche et une droite ; « décaler d'une case vers la droite » a un sens précis. Réseaux sociaux, connexions cérébrales, similarités entre vecteurs de mots : ces données vivent sur des graphes. Chaque nœud a un nombre de voisins différent, sans ordre établi, et la translation ne se définit plus.\n\nMichaël Defferrard, Xavier Bresson et Pierre Vandergheynst, de l'EPFL, viennent du traitement du signal sur graphes. Vandergheynst avait auparavant utilisé les polynômes de Chebyshev avec Hammond et ses collègues pour construire des ondelettes sur graphes ; cet article apporte les mêmes outils aux CNN.\n\n## Poser le problème\n\n### La translation échappe à une définition spatiale\n\nPour définir une convolution sur un graphe, on pense d'abord à travailler directement dans l'espace : aligner un noyau de taille fixe sur les voisins de chaque nœud, comme pour une image. Les auteurs soulignent qu'il faut alors résoudre l'alignement des voisins ; sur un graphe, la translation spatiale n'admet pas de définition mathématique unique.\n\nL'autre voie passe par le domaine spectral. Le théorème de convolution décrit une opération linéaire qui devient diagonale dans la base de Fourier. Sur un graphe, les vecteurs propres du laplacien fournissent cette base.\n\n### Le domaine spectral coûte trop cher\n\nLe laplacien combinatoire $L=D-W$, comme le laplacien normalisé $L=I_n-D^{-1/2}WD^{-1/2}$, est une matrice réelle symétrique semi-définie positive : on peut écrire $L=U\\Lambda U^\\top$. Chaque colonne de $U$ est un « mode de Fourier », et sa valeur propre $\\lambda_l$ sa fréquence. La transformée de Fourier sur graphe d'un signal $x\\in\\mathbb{R}^n$ est $\\hat x=U^\\top x$.\n\nLe filtrage s'écrit donc :\n\n$$\ny=g_\\theta(L)x=U\\,g_\\theta(\\Lambda)\\,U^\\top x\n$$\n\nL'approche la plus directe apprend librement un coefficient par fréquence, avec $g_\\theta(\\Lambda)=\\mathrm{diag}(\\theta)$. Deux problèmes apparaissent : le filtre n'est pas local dans l'espace et peut agir d'un coup sur le graphe entier ; ses paramètres sont au nombre de $O(n)$, autant que les nœuds.\n\nMême en réduisant les paramètres, le calcul reste cher. En 2014, les réseaux spectraux de Bruna et al. paramétraient les coefficients fréquentiels par des splines lisses pour obtenir une certaine localité spatiale. Chaque propagation avant ou arrière exige pourtant deux produits avec $U$, chacun en $O(n^2)$. Il faut en outre décomposer $L$ pour obtenir $U$ et stocker cette matrice dense $n\\times n$.\n\n\n> [!TIP]\n> \n> Pour les constructions spatiale et spectrale de Bruna et al., voir notre note :\n> \n> - **[[13.12] Spectral Networks : Détour par le domaine spectral](/blog/papers/graph-learning/spectral-networks)**\n\n\nL'objectif de cet article est un filtre **strictement local** sur le graphe et **rapide à calculer**.\n\n## Résoudre le problème\n\n### Des polynômes pour assurer la localité\n\nLes auteurs restreignent le filtre à un polynôme de $\\Lambda$ :\n\n$$\ng_\\theta(\\Lambda)=\\sum_{k=0}^{K-1}\\theta_k\\Lambda^k\n$$\n\nComme $(U\\Lambda U^\\top)^k=U\\Lambda^kU^\\top$, cela revient à appliquer directement le polynôme $\\sum_k\\theta_kL^k$ au laplacien. Les entrées non nulles de $L$ ne relient que des nœuds voisins ; $L^k$ ne peut donc atteindre que les nœuds à $k$ sauts au plus. Si la plus courte distance entre deux nœuds dépasse $k$, alors $(L^k)_{ij}=0$.\n\nEssayons sur un chemin de sept nœuds : plaçons un 1 au milieu et regardons quels nœuds $L^k$ atteint.\n\n```python\nimport numpy as np\nnp.set_printoptions(precision=2, suppress=True)\n\n# Un chemin de 7 nœuds : 0-1-2-3-4-5-6\nn = 7\nA = np.zeros((n, n))\nfor i in range(n - 1):\n    A[i, i + 1] = A[i + 1, i] = 1\nd = A.sum(1)\nL = np.eye(n) - A / np.sqrt(np.outer(d, d))   # Laplacien normalisé\n\ndelta = np.zeros(n)\ndelta[3] = 1                                   # Un 1 au nœud central seulement\nfor k in range(4):\n    print(f\"L^{k} δ:\", (np.linalg.matrix_power(L, k) @ delta != 0).astype(int))\n```\n\n```text\nL^0 δ: [0 0 0 1 0 0 0]\nL^1 δ: [0 0 1 1 1 0 0]\nL^2 δ: [0 1 1 1 1 1 0]\nL^3 δ: [1 1 1 1 1 1 1]\n```\n\nChaque puissance supplémentaire étend la portée d'un saut. Un polynôme de degré $K-1$ reste exactement dans un rayon de $K-1$ sauts, avec seulement $K$ paramètres, quel que soit le nombre de nœuds. C'est le même principe qu'un noyau 5×5 qui ne regarde qu'une région 5×5 d'une image.\n\n### La récurrence de Chebyshev pour gagner en vitesse\n\nLa localité est acquise, mais le coût reste $O(n^2)$ si l'on commence par une décomposition spectrale avant de multiplier dans le domaine fréquentiel.\n\nLes auteurs prennent les polynômes de Chebyshev $T_k$ comme base. Ils satisfont une récurrence stable :\n\n$$\nT_k(x)=2xT_{k-1}(x)-T_{k-2}(x),\\qquad T_0=1,\\quad T_1=x\n$$\n\nCes polynômes sont définis sur $[-1,1]$ : on redimensionne donc d'abord le laplacien en $\\tilde L=2L/\\lambda_{\\max}-I_n$, puis on écrit le filtre :\n\n$$\ny=\\sum_{k=0}^{K-1}\\theta_kT_k(\\tilde L)\\,x\n$$\n\nEn posant $\\bar x_k=T_k(\\tilde L)x$, on obtient $\\bar x_k=2\\tilde L\\bar x_{k-1}-\\bar x_{k-2}$. Le filtrage entier ne demande que $K$ produits matrice creuse-vecteur, pour un coût de $O(K|E|)$. Ni décomposition spectrale, ni stockage de $U$.\n\nReprenons le chemin précédent et calculons le même filtre $K=3$ des deux façons, pour vérifier que les résultats coïncident :\n\n```python\ntheta = np.array([0.5, -1.0, 0.3])            # K = 3, trois coefficients de Chebyshev\nx = np.random.default_rng(0).random(n)\n\n# Méthode 1 : décomposition spectrale et multiplication par le filtre en fréquence\nlam, U = np.linalg.eigh(L)\nlam_max = lam.max()\nlam_s = 2 * lam / lam_max - 1                  # Fréquences ramenées à [-1, 1]\ng = theta[0] + theta[1] * lam_s + theta[2] * (2 * lam_s**2 - 1)   # T0, T1, T2\ny_spec = U @ (g * (U.T @ x))\n\n# Méthode 2 : récurrence de Chebyshev, avec des produits creux seulement\nL_s = 2 * L / lam_max - np.eye(n)\nx0, x1 = x, L_s @ x\nx2 = 2 * L_s @ x1 - x0\ny_rec = theta[0] * x0 + theta[1] * x1 + theta[2] * x2\n\nprint(\"Spectral:\", y_spec)\nprint(\"Récurrence:\", y_rec)\n```\n\n```text\nSpectral: [0.52 0.65 0.42 0.61 1.01 1.43 1.12]\nRécurrence: [0.52 0.65 0.42 0.61 1.01 1.43 1.12]\n```\n\nDans cette démonstration, $\\lambda_{\\max}$ vient de la décomposition spectrale pour faciliter la comparaison. En pratique, une estimation de la plus grande valeur propre suffit ; celles du laplacien normalisé ne dépassent de toute façon jamais 2.\n\nAvec plusieurs canaux d'entrée et de sortie, la carte de sortie $j$ est $y_j=\\sum_i g_{\\theta_{ij}}(L)x_i$ : chaque paire de canaux possède ses $K$ coefficients. La rétropropagation ne demande elle aussi que $K$ produits de matrices creuses.\n\n### Le pooling sur graphe\n\nUn CNN a aussi besoin de pooling. Les auteurs réduisent le graphe avec l'algorithme de regroupement multiéchelle Graclus : chaque niveau fusionne des nœuds voisins par paires et divise approximativement leur nombre par deux ; la mise en paire choisit le voisin qui maximise le critère de coupe normalisée.\n\nAprès cette réduction, l'ordre des nœuds n'a plus de sens. Le pooling devrait consulter une table pour savoir lesquels fusionner, ce qui est lent et se parallélise mal. Les auteurs ajoutent des « faux nœuds » sans arêtes pour donner exactement deux enfants à chaque nœud, former un arbre binaire équilibré, puis réordonner les nœuds selon cet arbre. Le pooling sur graphe devient alors un pooling sur signal 1D : deux valeurs voisines fusionnent en une.\n\n[![Figure 1 de l'article : le signal sur graphe traverse des couches de convolution sur graphe (convolution, non-linéarité) et de réduction du graphe (échantillonnage, pooling) pour extraire des caractéristiques, puis des couches entièrement connectées produisent la classe. La figure montre aussi la réponse des filtres spectraux aux différentes fréquences.](/content/papers/assets/f924fc7fdf6829dd352c02c0062d56fef579382aee9d8de9a76c29aa312325ef.png)](/content/papers/assets/f924fc7fdf6829dd352c02c0062d56fef579382aee9d8de9a76c29aa312325ef.png)\n\n*Figure 1 de l'article (Defferrard et al.), extraite de la [**page 2 du PDF**](https://arxiv.org/pdf/1606.09375v3#page=2). Légende originale omise.*\n\nLe réseau combine convolution sur graphe, non-linéarité, réduction et pooling, puis des couches entièrement connectées : le squelette de LeNet.\n\n## Discussion\n\n### Commencer par vérifier sur une grille\n\nLa première expérience porte sur MNIST. La grille de pixels 28×28 devient un graphe à 8 voisins, avec 976 nœuds et 3,198 arêtes après ajout des faux nœuds. Le réseau suit l'architecture LeNet-5 du tutoriel TensorFlow ; la version image utilise des convolutions 5×5, la version graphe des filtres $K=25$, pour des portées comparables.\n\n| Modèle | Architecture | Exactitude |\n| --- | --- | ---: |\n| CNN ordinaire | C32-P4-C64-P4-FC512 | 99.33% |\n| CNN sur graphe | GC32-P4-GC64-P4-FC512 | 99.14% |\n\nL'écart est faible. Les auteurs suggèrent qu'il pourrait venir de l'**isotropie** des filtres spectraux : les arêtes du graphe n'ont pas de direction haut, bas, gauche ou droite. Avantage ou inconvénient, cela dépend de la tâche, comme l'invariance par rotation que l'on recherche parfois précisément.\n\n### Comparer trois filtres\n\nToujours sur MNIST, trois filtres spectraux sont comparés ($K=25$) :\n\n| Architecture | Coefficients libres | Splines (Bruna et al.) | Chebyshev |\n| --- | ---: | ---: | ---: |\n| GC10 | 95.75% | 97.26% | 97.48% |\n| GC32-P4-GC64-P4-FC512 | 96.28% | 97.15% | 99.14% |\n\nLe filtre à coefficients libres est non local, riche en paramètres et le moins performant. Chebyshev est le meilleur dans les deux architectures.\n\nCôté vitesse, le coût de Bruna et al. croît en $O(n^2)$ avec le nombre de nœuds, contre $O(n)$ ici. Sur 20NEWS, passer de 2,000 à 12,000 mots fait monter le temps par lot de l'ancienne méthode de quelques dizaines de millisecondes à environ 1.2 seconde ; Chebyshev n'atteint qu'environ 150 millisecondes.\n\nLe CNN sur graphe reste pourtant bien plus lent qu'un CNN ordinaire. Sur GPU, un lot de 100 images MNIST prend 31 millisecondes au CNN, contre 200 millisecondes au CNN sur graphe. Le gain du passage au GPU est en revanche comparable : respectivement 6.77 et 8 fois.\n\n### La qualité du graphe\n\n20NEWS est une tâche de classification de textes : les nœuds sont 10,000 mots fréquents, reliés en graphe à 16 voisins grâce aux vecteurs word2vec. Le CNN sur graphe atteint 68.26% d'exactitude, devant le réseau entièrement connecté, mais derrière les 68.51% du classifieur naïf bayésien multinomial.\n\nLes auteurs consacrent une section à la qualité du graphe. Remplacer la grille MNIST par un graphe aléatoire fait chuter la même architecture à cinq couches de 99.14% à 95.39%. La convolution suppose localité, stationnarité et compositionnalité ; le graphe des données doit satisfaire ces hypothèses pour qu'elle ait un sens.\n\n### La suite\n\nTrois mois plus tard, Kipf et Welling partent de cet article pour construire GCN : ils limitent le polynôme au premier ordre et lient ses deux coefficients en un seul. En classification semi-supervisée de réseaux de citations, GCN dépasse même les filtres de Chebyshev $K=2$ et $K=3$, d'environ 5 points sur Pubmed.\n\nQuatre jours après la parution de GCN, Ferenc Huszár écrit dans son blog qu'une simplification excessive réduit le modèle à un noyau fixe sur une grille d'image ; les polynômes d'ordre supérieur de ChebNet, plus coûteux, lui paraissent plus prometteurs. [inFERENCe, 2016-09-13](https://www.inference.vc/how-powerful-are-graph-convolutions-review-of-kipf-welling-2016-2/)\n\n\n> [!TIP]\n> \n> Pour la simplification de GCN et cette discussion, voir notre note :\n> \n> - **[[16.09] GCN : Un seul paramètre suffit-il ?](/blog/papers/graph-learning/gcn)**\n\n\n## Conclusion\n\nChebNet transforme la convolution spectrale sur graphes en réseau que l'on peut entraîner. Les polynômes bornent la portée du filtre à $K-1$ sauts, et la récurrence de Chebyshev ne demande que des produits de matrices creuses, sans décomposition spectrale. Sur MNIST, il n'est qu'à 0.19 point du CNN de même architecture.\n\n$K$ est l'hyperparamètre central : il détermine à la fois la portée de chaque couche et le nombre de coefficients à apprendre. Sur les réseaux de citations, les expériences de GCN montrent qu'un petit $K$ peut être plus précis ; quelques essais s'imposent avant de choisir.\n\nLa voie spectrale prendra ensuite surtout la direction des approximations du premier ordre, comme GCN. Les vecteurs propres du laplacien resteront pourtant dans le paysage : quelques années plus tard, les Graph Transformers les reprendront comme encodage positionnel des nœuds.\n","imageSizes":{"/content/papers/assets/f924fc7fdf6829dd352c02c0062d56fef579382aee9d8de9a76c29aa312325ef.png":{"width":1144,"height":484}}}
