Dans Google didacticiel mnist utilisant Tensorflow , un calcul est exposé dans lequel une étape équivaut à multiplier une matrice par un vecteur. Google présente d'abord une image dans laquelle chaque multiplication numérique et chaque addition irait à effectuer le calcul est écrit en totalité. Ensuite, ils montrent une image dans laquelle il est plutôt exprimé en tant que multiplication de matrice, affirmant que cette version du calcul est, ou du moins pourrait être plus rapide:
Si nous écrivons cela comme des équations, nous obtenons:
Nous pouvons "vectoriser" cette procédure, la transformant en une multiplication de matrice et de l'addition de vecteur. Ceci est utile pour une efficacité informatique. (C'est aussi un moyen utile de penser.)
Je sais que des équations comme celle-ci sont généralement écrites dans le format de multiplication de matrice par des praticiens d'apprentissage de la machine et peuvent bien sûr voir des avantages de le faire des points de vue du code de code ou de la compréhension des mathématiques. Ce que je ne comprends pas, c'est que la revendication de Google qui convertit de la forme Longhande à la forme matricielle "est utile pour une efficacité informatique"
Quand, pourquoi, et comment serait-il possible d'obtenir des améliorations de performance dans des logiciels en exprimant des calculs comme multiplications matricielles? Si je devais calculer la multiplication de matrice dans la seconde image (matricielle), je le ferais en tant qu'être humain, je le ferais en faisant de manière séquentielle chacun des calculs distincts indiqués dans la première image (scalaire). Pour moi, ils ne sont rien d'autre que deux notations pour la même séquence de calculs. Pourquoi est-ce différent pour mon ordinateur? Pourquoi un ordinateur serait-il capable d'effectuer le calcul de la matrice plus rapidement que le scalaire?
Cela peut sembler évident, mais les ordinateurs n'exécutent pas formules , ils exécutent Code , et combien de temps l'exécution dépend directement du code qu'ils exécutent et ne sont que indirectement sur tout concept que le code implémente. Deux pièces de code logiquement identiques peuvent avoir des caractéristiques de performance très différentes. Certaines raisons susceptibles de contourner la multiplication de matrice spécifiquement:
if
Déclaration Tous les autres de ce groupe doivent l'attendre.Beaucoup de personnes intelligentes ont écrit très très Code efficace des opérations d'algèbre linéaire communes , en utilisant les astuces ci-dessus et de nombreux autres et généralement même avec des astuces stupides spécifiques à la plate-forme. Par conséquent, transformer votre formule en une multiplication matricielle puis la mise en œuvre de ce calcul en appelant dans une bibliothèque algébrique linéaire mature Avantages de cet effort d'optimisation. En revanche, si vous écrivez simplement la formule de la manière évidente dans une langue de haut niveau, le code de la machine qui est finalement généré n'utilisera pas toutes ces astuces et ne sera pas aussi rapide. Ceci est également vrai si vous prenez la formulation de matrice et mettez-la en appelant en appelant une routine de multiplication matricielle naïve que vous avez écrite vous-même (à nouveau, de la manière évidente).
Faire du code rapide prend du travail, et souvent beaucoup de travail si vous voulez que cette dernière once de performance. Parce que tant de calculs importants peuvent être exprimés comme une combinaison de quelques opérations d'algèbre linéaire, il est économique de créer un code hautement optimisé pour ces opérations. Votre cas d'utilisation spécialisée unique, cependant? Personne ne se soucie de ça sauf que vous, optimisant ainsi le diable en dehors de celui-ci n'est pas économique.