Welche Art von Netz (mit wie vielen Schichten) und Vernetzung (Feedforward, rekurrent oder vollständig vernetzt) letztendlich für die Lösung eines Problems verwendet werden kann, hängt in der Regel vom Problem selber ab. Mittlerweile gibt es für viele Problemarten best practise-Erfahrungen (ich suche immer noch nach einer vernünftigen deutschen Übersetzung dafür – Vorschläge?), die angewendet werden können. Leider trifft das natürlich nicht auf sämtliche Probleme zu – die Suche nach dem richtigen Netz ist also bereits ein kleines Problem für sich und kann etwa durch ein trial-and-error-Verfahren oder aber auch durch evolutionäre Algorithmen (oder andere Optimierungsalgorithmen) gelöst werden.

Neben der passenden Netzstruktur muss übrigens auch dafür gesorgt werden, dass die möglichen Eingaben auf eine Art und Weise codiert werden, dass sie möglichst günstig in das Netz gefüttert werden können. Oftmals ist diese Aufgabe nicht trivial, da die Codierung der Daten erheblichen Einfluss auf die Effektivität des Netzes hat. Leider können automatisierte Algorithmen dies kaum übernehmen, so dass es in der Regel dem Entwickler eines Netzes überlassen bleibt, eine geeignete Codierung zu finden. Um es noch schwieriger zu machen, muss natürlich auch die Ausgabe des Netzes entsprechend interpretiert werden. Hier gibt es zwei Möglichkeiten: entweder wird versucht, die Ausgaben so zu interpretieren, dass sie einen Sinn ergeben (nichts anderes tun wir im täglichen Leben mit den teils haarsträubenden verbalen Auswürfen diverser Personen des öffentlichen Interesses [die Bissigkeit musste jetzt einmal sein – bitte nicht zu ernst nehmen]), oder das Netz wird dazu gebracht, seine Ausgaben so zu formulieren, wie es der Programmierer erwartet.

Die Findung der richtigen Netzstruktur und die korrekte Codierung der Eingaben reichen allerdings noch nicht aus, um ein KNN auch erfolgreich zur Problemlösung zu verwenden; mindestens ebenso wichtig ist es natürlich, das Netz entsprechend zu konfigurieren, sprich, die Gewichte der Verbindungen zwischen den Neuronen sowie die Schwellwerte und die Aktivierungsfunktionen der einzelnen Neuronen korrekt einzustellen. Hier durch raten, probieren oder “errechnen” auf Anhieb die richtige Konfiguration zu finden, ist sehr schwierig und wird umso schwerer, je größer das Netz ist – es wird also auch hierfür ein Algorithmus benötigt, welcher die richtigen Einstellungen bestimmt. Evolutionäre Algorithmen können auch hier helfen, öfter jedoch wird sich wieder einmal am echten Gehirn orientiert und ein anderes Verfahren verwendet: das Lernen. Ziel dabei ist es, dem KNN durch verschiedene Methoden ein bestimmtes Verhalten anzuerziehen, ganz so, wie Lebewesen im Laufe ihrer Entwicklung neue Dinge lernen können; es soll also dazu gebracht werden, die Ausgaben zu generieren, die erwartet werden. Doch dazu beim nächsten mal ein wenig mehr (und als kleine Vorwarnung: es könnte etwas mathematischer werden).

1 / 2

Kommentare (9)

  1. #1 Christian
    April 20, 2012

    (nichts anderes tun wir im täglichen Leben mit den teils haarsträubenden verbalen Auswürfen diverser Personen des öffentlichen Interesses)

    Das ist Quark.

  2. #2 Engywuck
    April 20, 2012

    theoretisch sollte doch ein feedforward-Netz einem voll vernetzten entsprechen, bei dem alle Verknüpfungen, die nicht nach vorn gerichtet sind auf “0” stehen.

    Dann sollte – rein theoretisch – durch “Lernen” ein Problem, das am besten feedforward (und mit weniger Neuronen als vorhanden) bestimmt werden kann, eben diese rückwärtsgerichteten Verbindungen (sowie die Verbndungen zu unbenötigten “Neuronen”) auf “0” setzen.

    Lass mich raten: dem ist (im Allgemeinen) nicht so? 😉
    Liegt das an lokalen Maxima der Fitness, zu geringer aufgewendeter Zeit oder anderen Ursachen?

  3. #3 ulfi
    April 20, 2012

    Ein Prof von mir hat dazu einen Spruch:

    “Gradientenabstieg auf einem rekurrenten Netzwerk ist Optimierung im Raum der touring-vollständigen Programme”

    Auch wenn das natürlich echt fluffig klingt, bedeutet das auch, dass das Lernen von rekurrenten Netzwerken in der Praxis nicht funktioniert.

  4. #4 Marcus Frenkel
    April 20, 2012

    @Engywuck

    > theoretisch sollte doch ein feedforward-Netz einem voll vernetzten entsprechen, bei dem alle Verknüpfungen, die nicht nach vorn gerichtet sind auf “0” stehen.

    Richtig. 🙂

    > Dann sollte – rein theoretisch – durch “Lernen” ein Problem, das am besten feedforward (und mit weniger Neuronen als vorhanden) bestimmt werden kann, eben diese rückwärtsgerichteten Verbindungen (sowie die Verbndungen zu unbenötigten “Neuronen”) auf “0” setzen.

    Das wäre in der Tat theoretisch möglich.

    > Lass mich raten: dem ist (im Allgemeinen) nicht so? 😉

    Auch richtig. 😉

    > Liegt das an lokalen Maxima der Fitness, zu geringer aufgewendeter Zeit oder anderen Ursachen?

    Das liegt hauptsächlich daran, dass die verfügbaren Lernverfahren stark vom verwendeten Netztyp abhängen. So gibt es Lernverfahren, die nur auf feedforward-Netzen arbeiten, sogar solche, die nur mit einschichtigen Netzen funktionieren. Allgemein ist es schwierig, rekurrente anzulernen; ein bisschen was ist da wohl auch mit evolultionären Algorithmen möglich, aber das dauert und ist auch nicht optimal. Deswegen werden die reinen Feedforward-Netze auch teilweise bevorzugt, einfach, weil sie viel leichter anzulernen sind. Dazu aber beim nächsten mal hoffentlich etwas.

    @ulfi
    Das war schön ausgedrückt. ^^

  5. #5 Marcus Frenkel
    April 20, 2012

    @Christian
    Das war auch nicht ernst gemeint, sondern mit leicht ironischem Unterton, falls das nicht herüberkam…
    Habe im Text noch einen Hinweis darauf platziert.

  6. #6 Maximilian
    April 20, 2012

    Schöner Artikel.

    Nur ein Kritikpunkt: Das Facets-Projekt, auf das du verweist, ist schon seit über einem Jahr ausgelaufen und durch das Nachfolge-Projekt BrainScales abgelöst worden. Vielleicht wäre es deshalb sinnvoller, zumindest zusätzlich auch auf das aktuelle Projekt zu verweisen?

  7. #7 Marcus Frenkel
    April 20, 2012

    @Maximilian
    Haaa…so sehr kann man nicht mehr auf dem aktuellen Stand sein. Danke für den Hinweis, ich habe einen zusätzlichen Verweis eingebaut.

  8. #8 HF
    April 26, 2012

    Tschuldigung für den Rant.
    “die Suche nach dem richtigen Netz ist also bereits ein kleines Problem für sich und kann etwa durch ein trial-and-error-Verfahren oder aber auch durch evolutionäre Algorithmen (oder andere Optimierungsalgorithmen) gelöst werden.”
    Hochdimensionale Optimierung, Evolution, das klingt immer wie “schwierig” und “langsam”.
    Wieso ist das Lernen im Gehirn so unglaublich schnell? Man sagt ja, das Rehkitze von Geburt an laufen können. Sicher ist die Entwicklung des Gehirns bei der Geburt weit fortgeschritten, aber es gibt nicht genug Bits in den Genen, um die Verschaltung oder die Synapsenstärken festzulegen. Das Rehkitz lernt in wenigen Minuten Sehen und Laufen, und das Trainingsprozess gelingt praktisch immer.
    Irgendwie kann mit den langsamen Neuronen nicht nur eine schnelle Verarbeitung, sondern auch ebenso schnelles Lernen realisiert werden. Ist der Unterschied wirklich nur durch den Unterschied “massiv parallel” und “seriell” bedingt? In Lehrbüchern sieht das immer so toll aus, was man nicht alles weiss! Aber warum kann man dann, nach über sechzig Jahren Forschung, immer noch nichts nachbauen? Die Computer sind in dieser Zeit millionenmal schneller geworden, die Speicherkapazität ist ebenfalls millionenfach größer geworden. Nur die Ausreden sind dieselben geblieben.

  9. #9 Quacki
    April 29, 2012

    @HF:

    Hochdimensionale Optimierung, Evolution, das klingt immer wie “schwierig” und “langsam”. Wieso ist das Lernen im Gehirn so unglaublich schnell?

    Der Vergleich ist nicht fair 😀 Das eine sind technische Anwendungen, das andere ist ein System, welches in mehreren hundert Millionen Jahren entstanden ist, unter einem großen Druck besser zu werden.

    Man sagt ja, das Rehkitze von Geburt an laufen können. […] Das Rehkitz lernt in wenigen Minuten Sehen und Laufen, und das Trainingsprozess gelingt praktisch immer.

    Davon gibts noch viel mehr. Neugeborene Wale z.B. können von sofort an schwimmen, ansonsten würden sie ja ertrinken. Neurone sind schon im Mutterleib aktiv, und daher werden wohl schon Synapsen gelernt (ganz abgesehen von Hören und Tasten, zwei Sinne die im Mutterleib schon angeregt werden (können)). Es gibt z.B. sogenannte retinal waves, das sind Aktivitätswellen, die auf der Retina von ungeborenen Tieren spontan entstehen und über die Retina ziehen. Auch wenn die retinal wave dem Tier nicht vermitteln kann, was ein Baum ist, so ist vorstellbar, dass die retinal waves an der Bildung von rezeptiven Feldern in den visuellen Arealen beteiligt sind (ich drück das mal vorsichtig aus, weil ich nicht weiß, was der Stand dazu ist).

    In Lehrbüchern sieht das immer so toll aus, was man nicht alles weiss! Aber warum kann man dann, nach über sechzig Jahren Forschung, immer noch nichts nachbauen? Die Computer sind in dieser Zeit millionenmal schneller geworden, die Speicherkapazität ist ebenfalls millionenfach größer geworden.

    Jetzt bin ich etwas überrascht. Was erwartest du? In den 60ern, so in der ersten Hochzeit der KI-Forschung, da waren die Leute eben euphorisch, dass sie das Perzeptron entdeckt haben, und wirkliche KI schien in Reichweite zu sein. So what? Sie haben sich verschätzt. Ist das deswegen eine Ausrede? Das ist doch grad das lustige an der Sache. Trotz der ganzen schon gemachten Entdeckungen ist die Funktion des Gehirns immer noch schlecht verstanden. Andererseits denke ich, dass man den Stand der Forschung nicht überschätzen sollte. Zum Beispiel ist synaptische Plastiztät immer noch sehr schlecht verstanden. Die Synapse ändert sich in Abhängigkeit der vergangenen neuronalen Aktivität. Aber wie genau, ist nur in ganz groben Zügen bekannt. Da gibts zwar so eine hübsche Lernregel wie die Spike Timing Dependent Plasticity, aber es ist sehr gut möglich dass in den entsprechenden Experimenten viel Mist gemessen wurde.