Algorithmen zur Bildersuche

Bis ungefähr zum Jahr 1990 (das Zeitalter der Good old fashion AI) hätte man Bildersuche als Problem der Künstlichen Intelligenz behandelt und es natürlich mit Hilfe von neuronalen Netzen gelöst. Die Idee damals war, dass man ein sehr gutes Mehrschicht-Perzeptron mit einem Lernalgorithmus koppeln müsste, diesem Perzeptron dann mehrere Bilder präsentiert, und dann dabei zuschaut wie dieses neuronale Netz wiederum sich dem Muster immer weiter anpasst und am Ende sogar Bilder erkennt, die ähnlich sind aber nicht exakt gleich.

Die Implementierung eines solchen Verfahrens wäre im Zeitalter der GOFAI in dem passenden Paper gar nicht thematisiert worden, weil sie im Gegensatz zur mathematischen Theorie weitestgehend banal ist. Vermutlich hätte man in simplen C-Code ein solches Perzeptron entwickelt, wobei man für das Mehrschicht-Netz selber vielleicht 500 Zeilen benötigt hätte, und für den Lernalgorithmus nochmal soviele. Die wirkliche Schönheit hätte aber ohnehin nicht im Quellcode gelegen, sondern in der Universalität des verwendenten neuronalen Netzes, und da gibt es bekanntlich große Unterschiede. Beispielsweise kann man neuronale Netze rückkoppeln, so dass die Ausgangswerte wieder auf die Eingangswerte andocken um so Signale zu verstärken. Wenn man das ganze noch mit lernfähigen Gewichten versieht (die Hebbsche Lernregel ist dein Freund) dann entsteht auf diese Weise ein hübsches Thema mit wissenschaftlichen Tiefgang.

Und heute? Das Jahr 1990 ist lange vorbei, die GOFAI ist inzwischen in der Community isoliert und es gibt andere Verfahren wie man Bilder sucht. Bemerkenswert dabei ist, dass man den Schwerpunkt nicht länger auf die Theorie legt sondern auf die Praxis. Eine zeitgemäße Bildersuche ist vor allem eines: nicht universell. Im einfachsten Fall würde man im Bild einfach nach einem bestimmten Farbwert suchen und damit dann Objekte identifizieren. Das besondere an diesem Verfahren ist, dass man anders als bei einem neuronalen Netz relativ schnell die Schwächen des Algorithmus erkennt, denn was ist wenn es zwei unterschiedliche Objekte mit der selben Farbe gibt? Der Bildsuchalgorithmus würde dann beide markieren und damit einen Fehler machen. Zu Zeiten der GOFAI wäre dies ein K.O. Kriterium gewesen, weil ja der Algorithmus offensichtlich versagt hat, heute jedoch würde man trotzdem solche Verfahren einsetzen. Man implementiert einfach diesen primitiv-Farbsucher und schreibt dann in den Bugreport hinein, in welchen Fällen es damit ein Problem gibt. Und komischerweise hat man damit die Aufgabe vollständig gelöst: einerseits hat man eine Bildersuche die überraschend häufig funktioniert, und zweitens hat man die Schwächen des Verfahrens offengelegt, so dass jeder der möchte das Verfahren erweitern kann und neuen / besseren Sourcecode beisteuert.

Früher zu Zeiten der GOFAI hätte man formuliert, dass man eine Software benötigt, die in der Lage ist Bilder zu erkennen, heute würde man sagen, man braucht einen Entwicklungsprozess innerhalb derer eine solche Software entwickelt wird. Kurz gesagt, nicht das Endergebnis ist wichtig (also wie hoch die Treffergenauigkeit ist), sondern vielmehr geht es darum das Entstehen der Software zu dokumentieren um so besser einschätzen zu können, wo die Schwächen liegen.

Und tatsächlich, für den Anwender ist es nicht unbedingt ein Hinderniss wenn er weiß, dass der Algorithmus relativ ungenau ist. Wenn vorher bekannt, dass wenn er auf den Button klickt, der Algorithmus alle Stellen mit der einen Farbe markiert, dann ist das etwas mit dem er arbeiten kann. Im Zweifel werden dann einfach die falsch erkannten Objekte manuell entfernt so dass am Ende trotzdem das richtige Ergebnis herauskommt.

Im Gegensatz dazu machen die Verfahren aus der GOFAI keine Fehler. Noch nie hat ein neuronale Netz Bilder falsch erkannt oder sonstwie Bugs produziert. Man kann sagen, die Erkennungsquote bei Mehrschicht-Netzen liegt bei 100% und manchmal sogar darüber, wenn nämlich das neuronale Netz schon vorher weiß, welches Bild als nächstes gesucht werden soll und damit quasi super-kognitive Fähigkeiten besitzt. Und falls neuronale Netze doch einmal Fehler machen, dann liegt es immer in der Theorie und niemals in der Implementierung. So dass man beispielsweise ein Zweischicht-Netz durch ein Fünfschicht-Netz ersetzen muss um die Trefferquote zu steigern. Sowas ist im Grunde der Traum aller Leute die sich mit Bugfixes beschäftigen, weil bei diesem Entwicklungsmodell Fehler praktisch nicht auftreten können. Man braucht für einen Backpropagation Algorithmen keinen Fehlerreport schreiben. Nur leider ist diese Abwesenheit von Fehlern auch genau das, was letztlich dazu geführt hat dass zur Bilderkennung heute andere Verfahren eingesetzt werden. Verfahren die „ausprogrammiert“ sind, also im Quellcode gefixt werden müssen, wenn sie nicht genau genug sind.

Advertisements

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s