0

Ich habe eine konzeptionelle Frage bezüglich eines Software-Prozess/Architektur-Setups für maschinelles Lernen. Ich habe eine Web-App und versuche, einige maschinelle Lernalgorithmen zu integrieren, die wie die Gesichtserkennung von Facebook funktionieren (außer bei Objekten im Allgemeinen). So wird das Modell besser bei der Klassifizierung spezifischen Bilder in meinen Dienst hochgeladen (wie fb kann bestimmte Personen usw. klassifizieren).Spezialisierung des Bildklassifizierungsmodells mit Benutzerbildmarkierung

Die grobe Skizze ist:

event:  User uploads image; image attempts to be classified 
if failure: draw a bounding box on object in image; return image 
interaction: user tags object in box; send image back to server with tag 
????:  somehow this new image/label pair will fine tune the image classifier 

ich Hilfe mit dem letzten Schritt muß. Typischerweise hat ein Programmierer beim Transferlernen oder -training eine große Datenbank voller Bilder. In meinem Fall habe ich ein vortrainiertes Modell (google's inception-v3), aber meine Optimierungsdatenbank ist nicht vorhanden, bis ein Benutzer mit dem Hochladen von Inhalten beginnt.

Also wie könnte ich diese Tagging-Methode verwenden, um eine spezialisierte Datenbank zu erstellen? Ich bin sicher, dass FB auf dieses Problem gestoßen ist und es gelöst hat, aber ich kann ihre Lösung finden. Nach einigem Nachdenken (und nicht schlüssig Forschung), ist die einzige Strategien, die ich denken kann entweder an:

A) stockpile tagged images and do a big batch train 

B) somehow incrementally input a few tagged images as they get 
    uploaded, and slowly over days/weeks, specialize the image classifier. 

Im Idealfall würde Ich mag Option A vermeiden, aber ich bin nicht sicher, wie realistisch B ist, noch wenn es andere Möglichkeiten, um diese Aufgabe zu erfüllen. Vielen Dank!

+0

Versuchen Sie, einen Lernenden für jeden oder einen Lerner pro Benutzer zu spezialisieren? In jedem Fall, was ist falsch daran, die neuen etikettierten Bilder zu nehmen und einige Iterationen stochastischen Gradientenabfalls (oder eine andere einfache Methode) im Netzwerk auszuführen, wie sie kommen? Siehe [Online-Lernen] (https://en.wikipedia.org/wiki/Online_machine_learning). – user3658307

+0

Ja, ein Lerner für das ganze System. Okay, Online-Lernen scheint die Strategie zu sein, die es mir erlaubt, das Modell mit begrenzten, dynamischen Daten "sequenziell" zu aktualisieren. –

Antwort

2

Ja, das klingt wie ein klassisches Beispiel für online learning.

Insbesondere für tiefe Conv-Netze kann man bei einigen neuen Daten einige wenige Stochastic-Gradienten-Abfahrten darauf ausführen. Es ist wahrscheinlich eine gute Idee, die Lernrate bei Bedarf ebenfalls anzupassen (so dass man die Wichtigkeit einer gegebenen Probe einstellen kann, abhängig von, zum Beispiel, Vertrauen in sie). Sie könnten auch, wie Sie erwähnt haben, "Mini-Batches" speichern, um dies zu tun (hängt von Ihrer Einrichtung ab).

Auch, wenn Sie ein wenig mehr Spezialisierung mit Ihrem Lerner (z. B. zwischen Benutzern) ermöglichen möchten, suchen Sie domain adaptation.