Un chercheur principal de Microsoft explique le DNN efficace basé sur la convolution de groupe entrelacé | Million People Learning AI

Dingdong ~ Vous avez été touché par le bien-être! À partir de maintenant, "2020 AI Developer Ten Thousand Conference" 299 billets sont gratuits! Accédez à la page d'inscription [2020 AI Developer Ten Thousand Conference (Online Live Tickets) -IT Training Live-CSDN Academy], cliquez sur "S'inscrire maintenant", utilisez le code de réduction "AIP1410" lors du règlement, le prix deviendra "0" yuan !

Auteur | Wang Jingdong

Finition | Aspirine

Produits | Intelligence artificielle à la une (ID public: AI_Thinker)

Les réseaux de neurones convolutifs se sont développés à pas de géant au cours des dernières années et bien que leurs effets sur des tâches telles que la reconnaissance d'images s'améliorent de plus en plus, la complexité du modèle continue d'augmenter. Les réseaux de neurones convolutionnels plus profonds et plus complexes nécessitent beaucoup de stockage et de ressources informatiques, donc la conception de réseaux de neurones convolutionnels efficaces est un problème très important et fondamental, et l'élimination de la redondance de convolution est le problème principal de ce problème. Une des solutions.

Comment éliminer la redondance de l'élimination de la convolution? Nous avons invité le Dr Jingdong Wang, chercheur principal du Visual Computing Group du Microsoft Asia Research Institute, pour expliquer la méthode basée sur la convolution de groupe entrelacée publiée dans ICCV 2017 et CVPR 2018.

Ce qui suit est le contenu de la classe ouverte, organisé par le camp de base de la technologie AI, et légèrement supprimé:

La raison du succès de l'apprentissage en profondeur

Un article sur «Science» en 2006 - Réduire la dimensionnalité des données avec les réseaux de neurones, est un article très important qui promeut le développement de l'apprentissage en profondeur au cours de la dernière décennie. Lorsque cet article est sorti, de nombreuses personnes dans le domaine de l'apprentissage automatique prêtaient attention à ce travail, mais il n'a pas obtenu de très bons résultats dans le domaine de la vision par ordinateur, il n'a donc pas attiré l'attention des personnes dans le domaine de la vision par ordinateur.

La méthode d'apprentissage en profondeur a vraiment attiré l'attention dans le domaine de la vision par ordinateur en raison d'un article 2012-ImageNet Classification avec Deep Convolutional Neural Networks. Cet article a remporté le très important concours ImageNet dans le domaine de la vision par ordinateur en utilisant la méthode des réseaux de neurones convolutionnels profonds. Les champions avant 2012 sont basés sur SVM (support vector machine) ou sur des méthodes forestières aléatoires.

En 2012, Hinton et son équipe ont connu un grand succès grâce à des réseaux profonds, dans quelle mesure ce succès? Il sagit dune augmentation de plus dune douzaine de points de pourcentage par rapport au résultat de lannée précédente, ce qui représente une amélioration très impressionnante et remarquable. En raison du succès remporté par le concours ImageNet, le domaine de la vision par ordinateur a commencé à accepter des méthodes d'apprentissage en profondeur.

En comparant ces deux articles, bien que nous les appelions apprentissage en profondeur, la différence est en fait assez grande. Surtout en 2012, cet article s'intitule «Deep Convolutional Neural Network», abrégé en «CNN». CNN n'était pas nouvellement proposé dans cet article en 2012. Dans les années 1990, Yann LeCun a utilisé CNN dans la reconnaissance des nombres et a obtenu un grand succès, mais pendant longtemps, tout le monde n'a pas utilisé CNN comme ImageNet Le jeu jusqu'à cet article. Aujourd'hui, tout le monde constate que le deep learning a dominé le domaine de la vision par ordinateur.

Pourquoi l'apprentissage en profondeur a-t-il réussi en 2012? En fait, en plus des méthodes d'apprentissage en profondeur ou CNN, il y a deux choses, l'une est GPU, et l'autre est ImageNet.

Cette structure de réseau a été proposée par Hinton et ses étudiants en 2012. En fait, cette structure de réseau a 8 couches, il semble que ce ne soit pas si profond, mais il était très difficile de former ce réseau à cette époque, il a fallu une semaine pour le former, et à ce moment-là, d'autres ont voulu le reproduire. Le résultat n'est pas si simple.

Après cet article, tout le monde pense que plus le réseau de neurones est profond, meilleures seront les performances. Voici quelques emplois représentatifs, passez brièvement en revue.

Deux directions de développement de la structure du réseau profond

approfondir

En 2014 VGG, cette structure de réseau est très simple, elle est empilée couche par couche, et les couches sont très similaires.

La même année, Google avait une structure de réseau appelée "GoogLeNet". Cette structure de réseau semble un peu plus compliquée que la structure de VGG. Lorsque cette structure de réseau est apparue pour la première fois, elle semblait plus compliquée et ressemble aujourd'hui à une structure à plusieurs succursales. Au début, l'opinion générale était que cette structure de réseau était ajustée manuellement et n'avait pas une forte promotion. Bien que GoogLeNet soit une structure de réseau conçue artificiellement, en fait, il y a beaucoup de choses qui méritent d'être apprises, y compris une structure multi-branche longue et courte.

En 2015, une structure de réseau s'appelait Highway. Autoroute Cet article dit principalement que nous pouvons très bien former un réseau à 100 couches ou même un réseau à 100 couches. Pourquoi peut-il très bien s'entraîner? Il existe ici un concept de flux d'informations, qui peut rapidement transmettre des informations de l'avant vers la couche arrière via SkipConnection, et peut également transférer rapidement le gradient arrière vers l'avant lors de la propagation arrière. Il y a un problème ici, que cette connexion Skip utilise une fonction de porte, ce qui rend la difficulté de la formation réseau profonde encore pas vraiment résolue.

La même année, des collègues de Microsoft ont inventé un réseau appelé "ResNet". Ce réseau est similaire à Highway dans un certain sens. Où est-il? Il utilise également Skip Connection pour passer directement de la sortie d'une certaine couche à la sortie de la couche suivante. Comparé à Highway, il supprime la fonction de porte car la porte n'est pas une chose particulièrement bonne dans un réseau très profond. Grâce à cette conception, il peut très bien former un réseau de plus de 100 couches. Plus tard, il a été découvert que le réseau à 1000 couches peut également être très bien formé grâce à cette astuce, ce qui est très remarquable.

En 2016, après l'émergence de GoogLeNet, Highway, ResNet, nous avons constaté qu'il était très important d'avoir une structure multi-branches longue et courte. Par exemple, notre travail est des filets profondément fondus. Dans plusieurs branches, la profondeur de chaque branche est différente. L'avantage de ceci est que si nous regardons cette structure sous forme de graphique, nous constatons qu'il existe plusieurs chemins de ce point d'entrée à ce point de sortie, certains chemins sont longs et certains chemins sont courts. Dans ce sens, nous pensons qu'il y a Des chemins longs et courts peuvent entraîner des réseaux de neurones profonds.

La même année, nous avons trouvé un travail similaire appelé FractalNets, qui est très similaire à nos filets profondément fondus.

Ce chemin est à approfondir, en espérant former très bien la structure du réseau, afin que ses performances soient très bonnes, plus Skip Connection et d'autres formes pour rendre le flux d'informations très bon. Bien que nous ayons très bien formé le réseau profond via Skip Connection, la profondeur pose toujours quelques problèmes, c'est-à-dire que la performance n'est pas bien jouée, il y a donc une autre dimension, tout le monde espère devenir plus large.

De plus, les grands réseaux rencontreront certains problèmes dans la pratique. Par exemple, lorsqu'il est déployé sur un téléphone mobile, on espère que le montant du calcul n'est pas trop grand, le modèle n'est pas trop grand et les performances sont toujours très bonnes, donc le taux de reconnaissance est très élevé mais la très grande structure du réseau rencontre quelques difficultés dans les applications pratiques.

Plusieurs méthodes pour simplifier la structure

Une autre façon consiste à simplifier la structure du réseau et à éliminer la redondance à l'intérieur. Parce que tout le monde pense qu'il existe une forte redondance dans la structure du réseau de neurones profond, l'élimination de la redondance est un domaine que j'ai trouvé très intéressant de faire ces dernières années en raison de son utilisation pratique.

Opération de convolution

L'opération de convolution dans CNN correspond en fait à la multiplication des vecteurs matriciels. Ce que tout le monde fait est essentiellement d'éliminer la redondance dans la convolution.

Passons en revue la convolution. L'image à droite: Il y a plusieurs canaux dans le CNN, chaque canal est en fait un réseau bidimensionnel, et chaque position a une valeur, que nous appelons la "valeur de réponse". Il contient quatre canaux, ce qui équivaut en fait à un tableau tridimensionnel. En prenant cela (chaque position) comme centre, prenez un petit bloc de 3 × 3, 3 × 34 canaux, puis il y a tellement de valeurs de 3 × 3 × 4, puis nous tirons ces nombreuses valeurs dans un 3 × 3 × 4 = vecteur à 36 dimensions. La convolution a un noyau de convolution. Le noyau de convolution correspond à une quantité horizontale. Lorsque cette quantité horizontale est multipliée par le vecteur de colonne, la valeur de réponse sera obtenue. Il s'agit du premier noyau de convolution. La deuxième valeur est obtenue par le deuxième noyau de convolution, et les troisième et quatrième valeurs sont obtenues de manière similaire.

Pour résumer, l'opération de convolution consiste à multiplier la matrice et le vecteur, la matrice correspond à plusieurs noyaux de convolution et le vecteur correspond à la valeur de réponse (ResponseValue) des carrés environnants.

Tout le monde sait que multiplier une matrice par un vecteur demande beaucoup de calculs. L'exemple que j'ai donné ici n'est pas si grand, mais pensez-y. Si vous entrez et sortez 100 canaux, si le noyau de convolution est 3 × 3 × 100, il est 100 × 900. Ce calcul est très grand. Large, donc la plupart du travail est concentré sur la résolution du problème de redondance dans ce (opération de convolution).

Noyaux de basse précision (noyaux de basse précision)

Existe-t-il un moyen de résoudre le problème de la redondance?

Étant donné que le noyau de convolution est généralement un nombre à virgule flottante, la complexité de calcul du nombre à virgule flottante est un peu plus grande et prend également un peu plus d'espace. Quelle est l'astuce la plus simple? En supposant que le noyau de convolution devienne binaire, tel que 1, -1, voyons quels sont les avantages de la conversion de 1, -1 dans le futur? Ce vecteur 1, -1 (fait) l'opération de multiplication d'origine devient l'addition et la soustraction, de sorte que la quantité de calcul est beaucoup réduite. En outre, la quantité de modèles et de stockage est également considérablement réduite.

Il existe un travail similaire similaire, qui consiste à convertir un type à virgule flottante en type entier. Par exemple, un nombre à virgule flottante 32 bits était auparavant un nombre entier 16 bits, la capacité de stockage sera également petite ou le modèle sera petit. En plus de la binarisation ou de l'intégrisation du noyau de convolution, vous pouvez également transformer Response en un nombre binaire ou un entier.

Il existe un autre type de recherche plus quantitatif. Par exemple, en regroupant cette matrice, telle que 2.91, 3.06 et 3.21, dans une classe, quel avantage utiliser 3 au lieu de quantifier? Tout d'abord, votre capacité de stockage est réduite, vous n'avez pas besoin de stocker la valeur d'origine, il vous suffit de stocker la valeur d'index de chaque centre après quantification. De plus, la quantité de calcul est également réduite, vous pouvez trouver un moyen de réduire le nombre de multiplications, de sorte que la taille du modèle sera réduite.

Grains de bas rang

Une autre façon, que faire si la matrice est grande? Rendre la matrice plus petite, tant de gens ont fait cette chose, 100 canaux (de sortie), je l'ai changé en 50, c'est une astuce. Une autre astuce est qu'il y a beaucoup d'entrées, 100 canaux et 50 canaux.

Combinaison de noyaux de convolution de bas rang

La réduction des canaux réduira-t-elle les performances? Alors quelqu'un a fait ceci: multipliez cette matrice en deux petites matrices. Si cette matrice est 100 × 100, je vais la multiplier en deux matrices de 100 × 10 et 10 × 100, (multipliez La matrice résultante) devient également une matrice 100 × 100, qui se rapproche de la matrice 100 × 100 d'origine. Pensez-y de cette façon, 100 × 100 devient 100 × 10 et 10 × 100, évidemment le modèle devient plus petit et devient un cinquième. De plus, le montant du calcul est réduit à un cinquième.

Noyau de convolution éparse

Une autre façon, comment multiplier la matrice et le vecteur plus rapidement et les paramètres du modèle est moindre? Vous pouvez changer certains des nombres en 0, par exemple, 2,91 devient 0, 3,06 devient 0 et devient 0. Après être devenu 0, il devient une matrice clairsemée. La capacité de stockage de cette matrice clairsemée deviendra plus petite. Petit, car il n'est pas nécessaire de multiplier directement 0. Il existe également une structure clairsemée (structurée clairsemée), telle que cette forme diagonale, la matrice est multipliée par un vecteur, qui peut très bien être optimisé. Structuré clairsemé ici correspond à la convolution de groupe dont je parlerai plus tard.

Combinaison de noyaux de convolution clairsemés

Voyons si cette matrice peut être approchée en multipliant plusieurs matrices clairsemées. C'est le sujet dont je veux parler aujourd'hui. Notre travail avance également sur ce point. Avant de prendre cette direction, nous ne savions pas qu'une matrice peut être multipliée par deux matrices éparses ou même plusieurs matrices éparses pour atteindre l'objectif d'un petit modèle et d'une petite quantité de calcul.

De IGCV1 à IGCV3

IGCV1

Tout d'abord, permettez-moi de vous présenter notre article lors de la conférence ICCV 2017 de l'année dernière, la méthode de convolution de groupe entrelacée.

Il y a six canaux dans cette convolution, et six petits carrés (canaux) sortent par la convolution. Si la taille du noyau spatial est de 5 × 5, pour chaque position, son calcul est de 6 × 5 × 5 × 6.

Je viens de mentionner une forme (structurée) clairsemée, qui correspond à la forme de convolution de groupe. J'ai divisé ces 6 canaux en 3 canaux supérieurs et les 3 canaux inférieurs, et les ai convolués séparément.Après avoir terminé, je les ai assemblés et j'ai finalement obtenu 6 canaux. En ce qui concerne le montant du calcul, ce qui précède est de 3 × 5 × 5 × 3, et le suivant est également le même. Toute la complexité du calcul est la moitié de celle du 6 × 5 × 5 × 6 précédent, mais le problème est que l'utilisation des paramètres peut ne pas être suffisante.

 Notre travail est basé sur la convolution de groupe. Je viens de mentionner que les trois canaux ci-dessus ne sont pas liés à ces trois canaux. Y a-t-il un moyen de les relier? Nous avons donc introduit un deuxième groupe de convolutions, nous avons réorganisé les 6 canaux, 1, 4 sont placés ici (première branche), 2, 5 sont placés ici (deuxième branche), 3 , 6 y est placé (la troisième branche), de sorte que chaque branche effectue à nouveau une convolution 1 × 1, résultant en deux nouveaux canaux, deux canaux, deux canaux, ensemble. Par entrelacement, nous espérons que chaque canal de sortie (canal vert ou canal bleu) est connecté aux 6 premiers canaux.

quel est l'avantage? Grâce à la convolution de groupe du deuxième groupe, des conditions complémentaires peuvent être atteintes ou n'importe quelle sortie (canal de sortie) peut être connectée à n'importe quelle entrée (canal d'entrée).

Ici, nous introduisons une condition complémentaire stricte: intuitivement, s'il y a deux canaux dans le premier groupe de convolutions, ils tombent dans la même branche, et j'espère tomber dans des branches différentes dans le deuxième groupe. (Branche). Plusieurs canaux du deuxième groupe, comme une branche, doivent provenir de toutes les branches de la convolution du premier groupe, ce qui est appelé une condition complémentaire. Qu'apporte cette condition complémentaire? Il amènera (existe entre n'importe quelle paire de canaux d'entrée et de sortie) un chemin, ce qui signifie que la matrice de multiplication est une matrice dense. Pourquoi est-il appelé "strict"? Autrement dit, il existe un chemin entre n'importe quelle entrée et sortie, et il n'y a qu'un seul chemin.

Après l'introduction de critères stricts, la quantité de paramètres devient plus petite et le modèle devient plus petit. Quels avantages apporte-t-il? Ici, je donne une conclusion, L est le nombre de partitions ou de branches dans le (premier) groupe de convolution, M est le nombre de convolutions de convolution dans le deuxième groupe, et S est la taille du noyau de convolution, Habituellement supérieur à 1. Une telle inégalité est presque toujours établie. Que signifie cette inégalité? La conclusion est: si on la compare à la convolution standard standard, nous pouvons élargir le réseau par notre méthode de conception. Par rapport à l'approfondissement du réseau, l'élargissement du réseau est une autre dimension. Quels sont les avantages de l'élargissement? Cela améliorera-t-il les résultats? Nous avons fait quelques expériences.

Cette expérience est comparée à la convolution standard. Regardons le tableau dans le coin inférieur gauche. Ce tableau est la quantité de paramètres. Le réseau que nous avons conçu représente presque la moitié de la quantité de paramètres standard (convolution). Regardez ensuite le réseau dans le coin inférieur droit, notre calcul est presque la moitié. Dans l'ensemble de données de classification d'images standard CIFAR-10 (tableau ci-dessus), nos résultats sont meilleurs que les précédents. Nous pouvons même constater que plus la profondeur est meilleure, une certaine amélioration au niveau 20 n'est pas si évidente, mais lorsqu'elle est profonde, elle peut atteindre une augmentation de 1,43.

Plus tard, nous avons fait la même expérience pour CIFRA-100, et avons constaté que notre amélioration est toujours cohérente, et même plus grande que la précédente, car il est un peu plus difficile de la diviser en 100 catégories que 10 catégories, indiquant que les tâches les plus difficiles, nos avantages Le plus évident. Une fois cela élargi (les performances) s'améliorent. Avec IGC, l'élargissement de la structure du réseau apporte des avantages.

Ce sont deux petits ensembles de données. En fait, dans le domaine de la vision par ordinateur, les résultats sur de petits ensembles de données ne peuvent pas (complètement) expliquer le problème, et de très grands ensembles de données doivent être effectués. Nous avons donc également créé le jeu de données ImageNet à ce moment-là. Par rapport à ResNet, la quantité de paramètres a été réduite de près des deux cinquièmes, la quantité de calcul a été réduite de près de moitié et le taux d'erreur a également été réduit. Cela prouve que la mise en uvre d'IGC modifie le modèle. Large, avec de très bons résultats sur les grands modèles de réseau.

Nous avons commencé à faire cela en août et septembre de l'année précédente. En octobre, nous avons constaté que Google avait un travail appelé Xception. Voici son diagramme de structure. Ce formulaire est très proche (notre structure). Il est très similaire à la soi-disant structure IGC. En fait, c'est un cas particulier de nous. À ce moment-là, nous pensions que ce cas spécial pourrait avoir le meilleur résultat, nous avons donc fait quelques vérifications et, dans l'ensemble, nous avons une meilleure structure.

Il peut y avoir des variations d'IGC. Par exemple, si je transforme ce canal en convolution de groupe, le second est 1 × 1, que se passera-t-il ainsi? Nous avons fait des expériences similaires et avons toujours trouvé que notre méthode était la meilleure.

Lorsque nous l'avons fait à l'époque, nous espérions le comparer avec la méthode de pointe sur la structure du réseau. Nous avons obtenu de très bons résultats. À l'époque, notre travail consistait à améliorer les performances ou la précision du modèle en éliminant la redondance.

IGCV2

 Plus tard, nous avons essayé d'utiliser les avantages de l'élimination de la redondance pour déployer ce modèle sur les téléphones mobiles. L'année dernière, nous avons continué d'avancer dans cette direction pour mieux comprendre cette question et espérons éliminer davantage les redondances.

C'est plus simple ou plus simple. La structure de réseau précédente est obtenue par convolution de deux groupes ou multiplication de deux matrices. Y a-t-il un moyen de devenir un peu plus? C'est en fait très simple, comme le montre l'image ci-dessus.

Les avantages apportés par cette méthode sont très simples, c'est-à-dire que vous voulez que la quantité de paramètre soit aussi petite que possible, alors comment pouvez-vous rendre la quantité de paramètre aussi petite que possible? Nous avons introduit les conditions dites d'équilibre. Bien que nous ayons ici des convolutions de groupe L-11 × 1, y a-t-il une différence entre les convolutions de groupe L-11 × 1? Qui est le plus important et qui ne l'est pas? En fait, nous ne savons pas. Je ne sais pas quoi faire? Faites comme ça. Après la même chose, nous obtiendrons les résultats mathématiques ci-dessus grâce à une dérivation mathématique simple.

Vérifions-le à nouveau. Les conditions de complémentarité et d'équilibre ont été discutées plus haut. Est-ce le meilleur résultat? Ou y a-t-il un avantage suffisant? Nous avons fait quelques expériences, les rouges correspondent à celles qui satisfont nos conditions et nous avons trouvé que le résultat (L = 4) est le meilleur dans ce cas. En fait, est-ce toujours le meilleur? Pas nécessairement, car le problème réel est encore un peu loin de l'analyse théorique. Mais nous avons généralement constaté que les rouges ne sont pas les meilleurs et également classés au deuxième rang, ce qui indique que cette conception nous donne au moins de bonnes directives pour aider à concevoir la structure du réseau. Bien que ce ne soit pas toujours le meilleur, il est similaire au meilleur.

La deuxième question, combien de convolutions de groupe devrions-nous concevoir (combien de L est fixé)? De même, notre critère est également analysé par la quantité minimale de paramètres. Dans le passé, deux groupes de convolutions étaient utilisés. Nous pouvons obtenir une quantité de paramètres plus petite de 3 ou 4, mais en fait, la conclusion finale a révélé qu'il ne s'agit pas de la quantité optimale de paramètres. La prochaine performance est la meilleure.

IGCV3

Plus tard, nous avons constaté que si des conditions complémentaires strictes sont respectées, la structure du modèle devient très clairsemée et très large, et le résultat peut ne pas être le meilleur. Nous sommes donc devenus Loose. Que signifie Loose? Auparavant, il n'y avait qu'un seul chemin entre la sortie (canal de sortie) et l'entrée (canal d'entrée). Nous l'avons modifié très simplement. Pouvons-nous avoir plusieurs chemins? Les chemins multiples ne sont pas si clairsemés, son avantage est que chaque sortie (canal de sortie) peut obtenir des informations de l'entrée (canal d'entrée) dans plusieurs chemins, nous avons donc conçu la condition Loose.

En fait, c'est très simple, nous définissons deux super-canaux (super-canaux) qui ne peuvent apparaître que dans une seule branche en même temps, ne peuvent pas apparaître dans deux branches en même temps, pour atteindre la condition Loose.

Plus tard, nous sommes allés plus loin et avons regroupé des structures clairsemées et de faible rang. Nous comparons sur ImageNet, et comparons avec MobileV2 en même temps, notre avantage est de plus en plus évident dans le petit modèle. Pour les résultats de comparaison, voir la figure ci-dessous.

C'est le contenu principal d'aujourd'hui. J'ai fait ce travail avec de nombreux étudiants et collègues. Les cinq premiers sont mes étudiants. Ting Zhang travaille maintenant au Microsoft Research Institute. Bin Xiao est mon collègue. Guojun Qi est américain. Professeur, nous avons collaboré à cet article ensemble.

Détection biométrique, comparaison de visages ... Comment FaceID fait-il face à la cécité? | Des millions de personnes apprennent l'IA
Précédent
Liu Tieyan parle de l'apprentissage automatique: trop avec des vagues, nous devons refléter | millions de personnes apprennent l'IA
Prochain
Remarqué? Paris dans ces petits détails réconfortants
Les champs et les rues à la satisfaction des gens de construction « Red propriété »
Power "quatre" critique, le service a repris la production complexe! Liaocheng Académie des sciences agricoles en action
percée cruciale, lutte Yong-classe | Tsui villes de district ont flashé coups durs, réels, de nouvelles tactiques
Pour assurer la sécurité des enseignants et des étudiants! conditions scolaires de tels travaux de vérification effectués dans le Shandong
Reconnus longévité « bonnes habitudes » Venez voir ce que vous faites pour quelques-uns?
Le printemps est arrivé, la peau de démangeaisons à plusieurs reprises, l'enflure et la douleur, est-il un moyen peut se débarrasser des ruches?
Vous consommez, Changsha County payer! attente de la brigade 5000000 texte pour vous de recevoir des coupons
famille Lin Tong de quatre avec les communautés « Contagion » a passé la plus belle puissance « à la maison »
Luohu sur « Paquet santé » quatre coups de l'aide a repris la production complexe
Perception du extraordinaire message du Nouvel An chinois du Président Xi Jinping
Avec un bon style unir combat et gagner la force majestueuse - - 2019 avec le camarade Xi Jinping comme le noyau du Comité central du PCC et mettre en uvre les dispositions centrales de huit, de pro