Comment Strassen a-t-il conçu sa méthode de multiplication matricielle?


18

Le célèbre algorithme de multiplication matricielle de Strassen est un vrai régal pour nous, car il réduit la complexité temporelle du traditionnel O (n 3 ) à O (n 2.8 ).

Mais de toutes les ressources que j'ai parcourues, même le livre de Cormen et Steven Skienna, ils ne disent clairement pas comment Strassen y a pensé.

Quelle est la logique de l'algorithme de multiplication matricielle de Strassen? Est-ce un accident chanceux ou y a-t-il quelque chose de plus profond?


On m'a dit que personne ne sait vraiment, tout serait principalement de la spéculation. Cependant, j'ai trouvé cela qui peut être applicable (bien que je ne l'ai pas lu).
Dukeling

Je pense que Strassen alg. est clair dans wikipedia.
MarshalSHI

4
@meshuai Je pense que cela explique simplement pourquoi cela fonctionne , pas comment il y pensait , comme avec la plupart des autres ressources.
Dukeling

2
Vous pouvez jeter un œil à l'article original de Strassen: scgroup.hpclab.ceid.upatras.gr/class/SC/Papers/Strassen.pdf
Axel Kemper

Réponses:


26

À part Strassen, personne n'est en mesure de vous dire comment Strassen a eu son idée. Cependant, je peux vous dire comment vous auriez pu trouver cette formule vous-même, à condition que vous vous intéressiez à la géométrie algébrique et à la théorie des représentations. Cela vous donne également les outils pour montrer que la formule de Strassen est aussi bonne que possible, ou plus précisément, qu'il n'y a pas de formule calculant le produit de deux matrices 2 × 2 qui utilise moins de 7 multiplications .

Puisque vous êtes intéressé par les matrices, je suppose que vous connaissez l'algèbre linéaire de base et que vous serez un peu flou pour les détails plus avancés.

Soit d'abord E l'ensemble de toutes les cartes linéaires d'un plan à un autre. Il s'agit essentiellement de l'ensemble de toutes les matrices 2 × 2, mais nous oublions un système de coordonnées particulier - car, s'il y avait un meilleur système de coordonnées que le "par défaut", nous pourrions avoir intérêt à l'utiliser pour la multiplication matricielle. On note également par E † l'espace double de E et par X = P (E⊗E † ⊗E †) l'espace projectif associé au produit tensoriel E⊗E † ⊗E † .

Un élément de X = P (E⊗E † ⊗E †) de la forme spéciale [c⊗α⊗β] peut être interprété comme une opération élémentaire sur des matrices, qui, dans certains systèmes de coordonnées appropriés, lit un coefficient d'une matrice a et d' un coefficient d'une matrice B et écrit le produit de ces coefficients dans une matrice C . Un élément générale de X est une combinaison de ces opérations élémentaires, de sorte que le produit π de deux matrices, comprise comme une carte à partir de P (E) × P (E) à P (E), est un point dans X .

La formule de produit matricielle habituelle et la formule de Strassen peuvent être exprimées sous la forme de combinaisons de ces opérations linéaires, alors je vais désigner par W₁ l'ensemble de ces opérations élémentaires [c⊗α⊗β] et je vais décrire géométriquement leurs combinaisons.

Soit W₂ la variété des sécantes de W₁ dans X. Elle s'obtient en prenant (fermeture de) l'union de toutes les droites passant par deux points (génériques) de W₁ . On peut y penser comme de l'ensemble de toutes les combinaisons de deux opérations élémétaires.

Soit W₃ la variété des plans sécants de W₁ dans X. Elle s'obtient en prenant (fermeture de) l'union de tous les plans passant par trois points (génériques) de W₁ . On peut y penser comme de l'ensemble de toutes les combinaisons de trois opérations élémétaires.

De même, nous définissons des variétés sécantes pour des indices supérieurs. Notez que ces variétés grandissent de plus en plus, c'est-à-dire W₁⊂W₂⊂W₃⊂ ⋯ Par conséquent, la formule classique du produit matriciel montre que le produit des matrices est un point de W₈ . Réellement

PROPOSITION (Strassen) - Le produit des matrices π se situe dans W₇.

Pour autant que je sache, Strassen n'a pas formulé les choses de cette façon, mais c'est un point de vue géométrique sur cette question. Ce point de vue est très utile, car il permet également de prouver que la formule de Strassen est la meilleure, c'est-à-dire que π ne réside pas dans W₆ . Les méthodes géométriques développées ici peuvent également être utilisées pour un plus large éventail de problèmes.

J'espère, j'ai attiré votre curiosité. Vous pouvez aller plus loin en lisant cet article de Landsberg et Manivel:

http://arxiv.org/abs/math/0601097

¹ Je ne corrigerai pas cette faute de frappe, car j'ai attrapé un rhume.


Il est assez simple de montrer que pouvoir faire un produit matriciel (3x3) avec 21 multiplications conduirait à un algorithme asymptotiquement plus rapide. Une idée si c'est possible / impossible / inconnu?
gnasher729

3

Je viens d'être chargé de faire cela pour les devoirs, et je pensais que j'avais une épiphanie soignée: l'algorithme de Strassen sacrifie la "largeur" ​​de ses composants de pré-sommation afin d'utiliser moins d'opérations en échange de composants de pré-sommation "plus profonds" qui peut encore être utilisé pour extraire la réponse finale. (Ce n'est pas la meilleure façon de le dire, mais il m'est difficile de l'expliquer).

Je vais utiliser l'exemple de la multiplication de deux nombres complexes pour illustrer l'équilibre des « opérations par rapport aux composants »:

L'équation pour les nombres complexes.

Notez que nous utilisons 4 multiplications, ce qui donne 4 composants de produit :

Nous avons 4 composants de produit.

Notez que les 2 composantes finales que nous voulons: les parties réelle et imaginaire du nombre complexe, sont en fait des équations linéaires: ce sont des sommes de produits mis à l'échelle. Nous avons donc affaire à deux opérations ici: l' addition et la multiplication.

Le fait est que nos 4 composants de produit peuvent représenter nos 2 composants finaux si nous ajoutons ou soustrayons simplement nos composants:

Nos composants de produits peuvent représenter nos derniers.

Mais, nos 2 derniers composants peuvent être représentés comme des sommes de produits. Voici ce que j'ai trouvé:

En fait, nous n'avons besoin que de 3 composants de produit distincts.

Si vous pouvez le voir, nous n'avons en fait besoin que de 3 composants de produits distincts pour faire nos deux derniers:

Nos 3 composants distincts.

Mais attendez! Chacune des majuscules est en soi un produit! Mais le hic, c'est que nous savons que nous pouvons générer (A + B + C + D) à partir de (a + b) (c + d), ce qui n'est qu'une multiplication.

Donc, au final, notre algorithme est optimisé pour utiliser moins, mais des composants "plus gros", où nous échangeons la quantité de multiplications pour plus d'opérations de sommation.

Une partie de ce qui permet cela est la propriété distributive, qui permet à A (B + C) d'être équivalent à (AB + AC). Remarquez comment la première peut être calculée en utilisant 1 opération d'addition et 1 opération de multiplication, tandis que la seconde nécessite 2 multiplications et 1 somme.

L'algorithme de Strassen est une extension de l'optimisation que nous avons appliquée aux produits de nombres complexes, sauf qu'il existe plus de termes de produits cibles et éventuellement plus de composants de produits que nous pouvons utiliser pour obtenir ces termes. Pour une matrice 2x2, l'algorithme de Strassen transforme un algorithme qui a besoin de 8 multiplications en un qui a besoin de 7 multiplications, et exploite la propriété distributive pour "fusionner" deux multiplications en une seule opération, et enlève à la place du nouveau nœud "plus gros" pour en extraire un terme du produit ou l'autre, etc.

Un bon exemple: pour obtenir (-1) et (2) et (5), vous pouvez y penser simplement (-1), (2), (5), ou vous pouvez le penser comme (2-3 ), (2), (2 + 3). Les secondes opérations utilisent cependant des nombres moins distincts. Le hic, c'est que le nombre de nombres distincts est équivalent au nombre de composants de produit dont vous avez besoin pour calculer la multiplication matricielle. Nous optimisons simplement pour cela pour trouver une certaine vue des opérations sous-jacentes qui tirent parti des sorties isomorphes en utilisant une variation différente à travers la propriété distributive.

Peut-être que cela pourrait être lié à la topologie d'une manière ou d'une autre? C'est juste la façon dont mon profane la comprend.

Edit: Voici une photo de mes notes que j'ai dessinées en train de faire l'explication du nombre complexe:

Quelques notes pour comprendre la partie complexe du nombre.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.