Pour un problème d'apprentissage automatique standard, par exemple, la classification d'image sur MNIST, la fonction de perte est fixe, par conséquent le processus d'optimisation peut être accompli simplement en appelant des fonctions et en y introduisant l'entrée. Il n'est pas nécessaire de dériver les gradients et de coder manuellement la procédure de descente.

Mais maintenant, je suis confus quand j'ai rencontré une formulation compliquée. Supposons que nous résolvions un problème semi-supervisé, et que la fonction de perte comporte deux parties: Ls + lambda * Lu. La première partie est une formulation de classification normale, par exemple, la perte d'entropie croisée. Et la deuxième partie varie. Dans ma situation, Lu est une perte de factorisation matricielle, qui en particulier est: Lu = MF(D, C * W). Et la fonction de perte totale peut être écrite comme suit:

L = \sum log p(yi|xi) + MF(D, C * W) = \sum log p(yi|Wi) + MF(D, C * W) = \sum log p(yi|T * Wi + b) + MF(D, C * W)

Où les paramètres sont W, C, T et b. La première partie est une perte de classification, et l'entrée xi est un brut de W, c'est-à-dire Wi, un vecteur de taille (d, 1). Et l'étiquette yi peut être un vecteur unique de taille (c, 1), donc les paramètres T et b mappent l'entrée à la taille d'étiquette. Et la deuxième partie est une perte de factorisation matricielle.

Maintenant, je ne sais pas quand je vais optimiser cette fonction en utilisant sgd. Il peut être résolu en notant la formulation, en dérivant des gradients, puis en effectuant une procédure d'apprentissage à partir de zéro. Mais je me demande s'il existe un moyen plus simple? Parce qu'il est facile d'utiliser un outil d'apprentissage en profondeur comme Tensorflow ou Keras pour former un modèle de classification, tout ce que vous avez à faire est de créer un réseau et d'alimenter les données.

De même, existe-t-il un outil capable de calculer automatiquement les dégradés après avoir défini la fonction de perte? Parce que dériver des dégradés et les réaliser à partir de zéro est vraiment ennuyeux. La perte de classification et la perte de factorisation matricielle sont très courantes, donc je pense que la combinaison peut être réalisée complètement.

0
GEORGE GUO 16 janv. 2017 à 17:57

2 réponses

Meilleure réponse

Theano et Tensorflow feront exactement cela pour vous si vous pouvez formuler votre problème d'optimisation dans leur cadre / langage. Ces frameworks sont également suffisamment généraux pour implémenter des algorithmes non basés sur NN, comme de simples optimisations basées sur le premier ordre comme la vôtre.

Si ce n'est pas possible, vous pouvez essayer autograd, qui peut le faire sur un sous-ensemble de numpy. Formulez simplement votre perte en tant que fonction numpy (tout en vous en tenant aux fonctions prises en charge; lisez la documentation) et laissez autograd créer les dégradés.

Gardez à l'esprit que l'approche quelque peu par construction utilisée par Theano & Tensorflow sera plus efficace (en raison de l'entrée plus définie et parce que ces deux bibliothèques sont un peu plus évoluées).

0
sascha 16 janv. 2017 à 15:04

Theano et Tensorflow ont tous deux une différenciation intégrée pour vous. Il vous suffit donc de former la perte.

0
user9819093 20 mai 2018 à 13:39