Chapter Content
Okay, legen wir los. Kapitel vier, ja? Also, im Grunde geht's hier um... schwierige Probleme, so richtig harte Nüsse, quasi. Und was die eigentlich ausmacht.
Fangen wir mal an mit den Basics. Es gibt da so vier wichtige Begriffe, wenn's ums Problemlösen geht: Problem, Prozess, Antwort und Lösung. Das Problem, klar, ist die Aufgabe, an der wir knabbern, die Situation, die wir irgendwie aus der Welt schaffen wollen. Der Prozess, der kann entweder die Methode sein, *wie* wir die Lösung finden, also so von außen betrachtet, oder die Methode, *wie* die gefundene Lösung dann ihre Ergebnisse ausspuckt, quasi intern. Die Antwort ist dann so der finale Zustand, der uns bestätigt, dass das Problem gelöst ist. Und die Lösung, ja, die ist dann das Ding selbst, das diesen internen Prozess umsetzt, um das Problem zu lösen.
Denken wir mal an 'ne Brücke. Das Problem ist, klar, 'ne sichere und effiziente Möglichkeit für Autos und Fußgänger, Flüsse oder Täler zu überwinden. Der externe Prozess ist dann so das ganze Rumprobieren, bis die endgültige Konfiguration der Teile steht. Der interne Prozess ist die Verbindung zwischen den Brückenteilen, die dafür sorgt, dass die Brücke überhaupt funktioniert. Die Antwort ist, wenn wir Autos und Leute auf der anderen Seite sehen. Und die Lösung ist die Brücke selbst, diese fertige Konfiguration, die wir halt Brücke nennen.
Oder nehmen wir mal ein Deep-Learning-Modell. Das Problem könnte Gesichtserkennung sein. Der externe Prozess ist das Training, bis wir ein gutes Modell haben. Der interne Prozess ist das Rechnen, das in dem Modell abgeht, wenn es dann mal fertig ist. Die Antwort ist der richtige Name für das erkannte Gesicht. Und die Lösung ist das fertige Modell, mit seinen Parametern, die dann so im Einsatz sind.
Noch ein Beispiel? Rubik's Cube, der Zauberwürfel. Das Problem: Alle sechs Seiten so ausrichten, dass jede Seite nur eine Farbe hat. Der externe Prozess ist das Ausprobieren oder halt 'n systematischer Ansatz, um 'ne Abfolge von Schritten zu finden, mit der man den Würfel lösen kann. Der interne Prozess passiert, wenn man diese Schritte dann befolgt, also den "Algorithmus". Die Antwort ist der gelöste Zustand, jede Seite einfarbig. Und die Lösung ist diese gefundene Abfolge von Schritten, die andere dann benutzen können. Vielleicht steht die ja sogar auf 'nem Zettel.
Also, nochmal zusammengefasst: Das Problem ist die Situation, die wir lösen müssen. Der externe Prozess ist, wie wir die Lösung finden, zum Beispiel durch logisches Denken oder halt durch Ausprobieren. Der interne Prozess ist, wie die gefundene Lösung umgesetzt wird, Schritt für Schritt oder anders. Die Antwort ist der finale Zustand, der bestätigt, dass das Problem gelöst ist. Und die Lösung ist das Ding, das wir dann einsetzen, um den Prozess auszuführen und das Problem zu lösen, also zum Beispiel 'ne Anleitung auf 'nem Zettel oder ein Deep-Learning-Modell.
So, jetzt haben wir 'ne Sprache, um über Problemlösen zu reden. Jetzt können wir uns mal anschauen, was eigentlich ein schwieriges Problem ausmacht.
Was macht ein Problem schwer?
Leute sagen, Probleme sind "schwierig", wenn sie nicht einfach zu lösen sind. 'Ne Situation, für die man nicht sofort 'ne Lösung hat, gilt als schwierig. Aber in der Informatik hat "schwierig" 'ne genauere Bedeutung. Ein Problem ist "computationally hard", also rechnerisch schwierig, wenn es sehr schwer oder praktisch unmöglich ist, es effizient mit einem Computer zu lösen. So ein Problem braucht massig Ressourcen, also viel Zeit und/oder Speicher.
Bei rechnerisch schwierigen Problemen steigt die Schwierigkeit extrem schnell, wenn die Eingabe größer wird. Das ist oft so 'ne exponentielle Sache, wo 'ne kleine Vergrößerung des Problems die Rechenzeit explodieren lässt. Exponentielles Wachstum kann man sich vorstellen, wenn man ein Blatt Papier immer wieder faltet. Jede Faltung fügt nicht nur ein paar Schichten hinzu, sondern vervielfacht sie. Wenn man ein Blatt Papier 42 Mal falten würde, würde es bis zum Mond reichen, nur mal so zum Vergleich.
Die Computer-Version vom Papierfalten ist die Explosion an möglichen Pfaden, die ein Algorithmus nehmen könnte, um 'ne Lösung zu finden. Denkt dran, schwierige Probleme haben viele Faktoren, die man beachten muss. 'Ne längere Brücke hat mehr Teile, um die zusätzlichen Faktoren zu berücksichtigen. Gesichtserkennung ist rechnerisch schwierig, weil es unendlich viele Faktoren gibt, die ein Gesicht zu einem Gesicht machen.
Das Konzept, das dahinter steckt, was Probleme rechnerisch schwierig macht, ist der "Possibility Space", also der Möglichkeitsraum. Das ist die Menge aller möglichen Kombinationen, Anordnungen oder Zustände, die im Zusammenhang mit dem Problem existieren könnten. Das ist die Menge aller möglichen Konfigurationen, die ein System annehmen kann. Beim Schachbrett sind das alle möglichen Anordnungen der Figuren. Je größer der Möglichkeitsraum, desto mehr muss ein Algorithmus durchsuchen, um das Problem zu lösen. Und genau das macht ein Problem so richtig schwer.
Weil es unmöglich ist, den kompletten Möglichkeitsraum abzusuchen, operieren Modelle und Algorithmen nicht darin. Stattdessen definieren wir 'ne reduzierte Menge möglicher Eigenschaften für ein schwieriges Problem und versuchen, in diesem reduzierten Raum zu arbeiten. Dieser Raum wird "Feature Space" genannt, also Merkmalsraum, und besteht aus den Merkmalen, die wir für wichtig halten.
Nehmen wir mal das Problem, die Hände im Winter warm zu halten. Anstatt irgendwelche zufälligen Objekte zusammenzuwürfeln und um unsere Hände zu wickeln, überlegen wir uns, welche Eigenschaften wichtig sind. Das wären zum Beispiel Dicke, Flauschigkeit, Saugfähigkeit und Festigkeit. Wenn wir diese Eigenschaften in einem Diagramm darstellen würden, hätten wir vier Achsen. Die Lösung für unser Problem liegt irgendwo in dem Raum, der von diesen vier Achsen aufgespannt wird. Die richtige Kombination von Materialien für Handschuhe hätte das richtige Verhältnis von Dicke, Flauschigkeit, Saugfähigkeit und Festigkeit. Jedes Merkmal trägt 'ne Dimension zum Merkmalsraum bei, und die Kombination aller Merkmale erzeugt 'nen hochdimensionalen Raum, in dem die Lösung liegt. Wenn man sagt, ein Problem ist "hochdimensional", dann meint man das: ein Problem, dessen Merkmalsraum viele Dimensionen hat und dessen Lösung irgendwo in diesem Raum liegt.
Was ein Problem so richtig schwer macht, ist die Schwierigkeit, herauszufinden, wo genau im Merkmalsraum die Lösung liegt. Der Merkmalsraum für ein schwieriges Problem ist riesig, mit verschlungenen Pfaden und Hindernissen. Es gibt keine offensichtlichen Hinweise, wo wir die Lösung finden könnten.
Es gibt drei Hauptgründe, warum die Merkmalsräume schwieriger Probleme so schwer zu durchqueren sind und ihre Lösungen so schwer zu finden: 1) die inhärente Komplexität des Merkmalsraums selbst, 2) der Mangel an sichtbaren Ursachenzusammenhängen zwischen den verschiedenen Merkmalen und 3) die geringe Anzahl brauchbarer Kombinationen von Merkmalen (funktionierende Lösungen) im Verhältnis zu allen möglichen Kombinationen.
Die inhärente Komplexität eines Merkmalsraums entsteht durch die Wechselwirkungen und Abhängigkeiten zwischen seinen Merkmalen. Bei unserem Hände-warm-halten-Problem könnte ein dickeres Material zwar besser isolieren, aber auch die Beweglichkeit einschränken. Ein Material mit hoher Saugfähigkeit könnte zwar Feuchtigkeit ableiten, aber auch kalt werden, wenn es nass ist. Die Komplexität des Merkmalsraums macht ihn nicht unbedingt größer, aber sie macht es schwieriger, einen Pfad zu finden, der uns zur Lösung führt. Es ist leicht, sich in einem komplexen Merkmalsraum zu verirren. Denkt an die ganzen Kompromisse: Wenn man den Wert eines Merkmals erhöht, kann das die Leistung in einem Bereich verbessern, aber in einem anderen verschlechtern. In einem komplexen Merkmalsraum nach 'ner Antwort zu suchen, ist wie Peter zu bestehlen, um Paul zu bezahlen, immer wieder.
Je mehr Merkmale es gibt, desto unwahrscheinlicher ist es, dass sie unabhängig voneinander sind. Deshalb sind hochdimensionale Räume ein Kennzeichen für komplexe Systeme und die schwierigen Probleme, die damit verbunden sind. Komplexität bedeutet also nicht nur 'ne große Anzahl von Teilen, sondern vor allem die Wechselwirkungen zwischen diesen Teilen.
Der zweite Grund, warum Probleme schwierig sind, ist der Verlust sichtbarer Ursachenzusammenhänge zwischen den Merkmalen im Merkmalsraum. Zurück zu unserem Hände-warm-halten-Problem. Hier können wir uns leicht vorstellen, wie Dicke, Flauschigkeit, Saugfähigkeit und Festigkeit zusammenwirken, um das Problem zu lösen. Wir können logisch vorgehen, um uns durch den Merkmalsraum zu bewegen und auf 'ne funktionierende Konfiguration zu stoßen. Wir könnten zum Beispiel Tierhaut nehmen, die von Natur aus Kälte abhält, und sie mit Tiersehnen verbinden, um das Material zu fixieren und die gewünschte Form zu erhalten. Wir würden leicht schlussfolgern, dass zwei Schichten mit Tierhaaren gefüllte Tierhaut besser isolieren als nur Tierhaut.
Das Hände-warm-halten-Problem ist relativ einfach, obwohl sein Merkmalsraum etwas komplex ist. Das zeigt uns, dass Menschen durch bloßes logisches Denken wahrscheinlich 'ne Lösung finden können, wenn die Anzahl der Merkmale gering ist (niedrigdimensional) und es nur wenige Kompromisse gibt. Die erste Lösung wird wahrscheinlich nicht die beste sein, aber sie wird funktionieren. Logisches Denken funktioniert hier, weil die Ursachenzusammenhänge zwischen den Teilen unserer Lösung offensichtlich sind.
Aber jetzt stellen wir uns mal ein schwierigeres Problem vor. Wir müssen unsere Hände warm halten, während wir einen Schneemann bauen. Jetzt gibt es mehr Einschränkungen für das Problem. Wir müssen nicht nur unsere Hände warm halten, sondern auch trocken und beweglich genug, um Schnee zu formen. Diese zusätzlichen Einschränkungen für das Problem erhöhen möglicherweise die Anzahl der Merkmale, die man berücksichtigen muss, aber sie führen wahrscheinlich zu zusätzlichen Kompromissen. Das erschwert es uns, 'ne Lösung zu finden, da die Ursachenzusammenhänge zwischen den Merkmalen nicht mehr so klar sind.
Es gibt 'ne enge Beziehung zwischen der inhärenten Komplexität des Merkmalsraums und dem Verlust sichtbarer Ursachenzusammenhänge. Je mehr unsere Merkmale durch Wechselwirkungen miteinander "reden", desto mehr Kompromisse entstehen, was es immer schwieriger macht, 'ne Lösung zu finden. Wenn wir ein Material wählen, das uns warm hält und beweglich ist, stellen wir vielleicht fest, dass es zu leicht nass wird. Sobald wir ein wasserabweisendes Material finden, verlieren wir die Beweglichkeit. Mehr Einschränkungen verschärfen die Widersprüche, Dilemmata, Paradoxe und Schwierigkeiten, die es schwer machen, den Weg zu 'ner brauchbaren Lösung zu finden.
Der letzte Grund, warum Probleme schwierig sind, hängt mit einem anderen Raum zusammen, dem "Solution Space", also dem Lösungsraum. Der Lösungsraum liegt innerhalb des Merkmalsraums (der selbst innerhalb des Möglichkeitsraums liegt) und ist 'ne Teilmenge möglicher Konfigurationen, die die Kriterien oder Einschränkungen des Problems erfüllen. Einfacher ausgedrückt: Der Lösungsraum ist der Raum aller möglichen Konfigurationen, die 'ne brauchbare Lösung für das Problem darstellen.
Ein großer Lösungsraum bedeutet, dass es mehr mögliche Lösungen gibt, die das Problem lösen, während ein kleinerer Lösungsraum bedeutet, dass es weniger gibt. Probleme mit großen Lösungsräumen im Verhältnis zu ihren Möglichkeitsräumen lassen sich schneller durchsuchen, da es abstrakt weniger Raum gibt, den man durchqueren muss, bevor man auf 'ne Lösung stößt. Die Probleme im Zusammenhang mit dem Warmhalten unserer Hände haben große Lösungsräume, da es viele Materialkombinationen gibt, die das Problem lösen. Unsere Vorfahren haben wahrscheinlich schon früh 'n paar ordentliche Fäustlinge gefunden.
Vergleichen wir das mal mit dem Zauberwürfel. Ein Punkt in diesem Merkmalsraum wäre 'ne eindeutige Konfiguration von 26 "Cubies", wobei jeder Cubie 'ne Menge von Werten in Bezug auf Position und Ausrichtung besitzt. Diese Mischung von Werten ist die Zauberwürfel-Version der Mischung aus Dicke, Flauschigkeit, Saugfähigkeit und Festigkeit aus unserem Hände-warm-halten-Problem. Der Lösungsraum des Zauberwürfels ist die Menge aller möglichen Algorithmen, die zum gleichen Endergebnis führen könnten.
Es dauert lange, 'ne Lösung für den Zauberwürfel zu finden, wegen der Komplexität seines Merkmalsraums. Wenn ich sage, 'ne Lösung zu finden, meine ich nicht, irgendeinem bereits gefundenen Algorithmus zu folgen, wie es Cubers tun. Ich rede davon, die Abfolge von Schritten zum ersten Mal zu entdecken. Der Zauberwürfel hat 'ne inhärente Komplexität, weil seine Merkmale Kompromisse eingehen. Wenn wir einen Cubie an 'ne bestimmte Position bringen, kann das leicht einen oder mehrere zuvor positionierte Cubies ruinieren.
Und trotzdem ist der Zauberwürfel kein wirklich schwieriges Problem. Man sollte den Zauberwürfel eher als ein Problem betrachten, das erste Anzeichen von Schwierigkeit zeigt, aber trotzdem in 'ner angemessenen Zeit lösbar ist. Schach hat 'nen noch größeren und komplexeren Möglichkeitsraum. Schach kommt 'nem wirklich schwierigen Problem näher. Aber weder der Zauberwürfel noch Schach sind von Natur aus schwierig. Schwierige Probleme, die wir in der Natur finden, passen nicht in die Komplexitätsklassen der Informatik. Die Möglichkeitsräume in schwierigen Problemen sind unendlich groß und komplex. Aber sowohl der Zauberwürfel als auch Schach sind gute Beispiele, um den Übergang von einfacheren Problemen (wie Hände-warm-halten) zu Problemen zu sehen, die sich echter Schwierigkeit nähern.
Zusammenfassend lässt sich sagen, dass es drei Hauptaspekte der abstrakten Räume gibt, die wir zur Definition von Problemen verwenden und die zu Schwierigkeiten führen: 1) die Komplexität des Raums selbst (voneinander abhängige Merkmale), 2) die Abnahme der Kausalität zwischen den Merkmalen innerhalb des Raums und 3) die geringe Größe des Lösungsraums im Verhältnis zum Gesamtraum. Ein wirklich schwieriges Problem weist alle drei Aspekte in hohem Maße auf.
Wenn wir uns ansehen, wie viel Raum es bei schwierigen Problemen zu durchqueren gibt, scheint es unmöglich, dass wir jemals die Antwort finden würden. Der Zauberwürfel hat über 43 Trillionen mögliche Konfigurationen. Schach noch mehr. Und trotzdem sind das nur Spiele mit 'ner reduzierten Dimensionalität im Vergleich zu realen Situationen. Die Anzahl der möglichen Konfigurationen in natürlichen Umgebungen, die nicht durch menschliche Erfindung eingeschränkt sind, hat 'ne Komplexität, die man sich kaum vorstellen kann. Die Probleme in diesem Raum sind anders als alles, was man in Spielen findet.
Und doch finden Menschen ständig Lösungen für schwierige Probleme in der Natur. Wie können solche riesigen Möglichkeitsräume gezähmt und handhabbar gemacht werden?
Je schwieriger das Problem, desto sanfter die Suche
Wichtig ist, dass aufgrund der kombinatorischen Explosion, die beim Zauberwürfel auftritt, erschöpfende Suchmethoden, bei denen jede mögliche Konfiguration ausprobiert wird (bis die richtige gefunden ist), nicht möglich sind, selbst mit unseren schnellsten Computern. Es würde Milliarden, wenn nicht Billionen von Jahren dauern, alle möglichen Konfigurationen auf der Suche nach 'ner Lösung zu berechnen.
Deshalb müssen Computer, die Zauberwürfel lösen, Heuristiken und Mustererkennung einsetzen, um den Möglichkeitsraum effektiver zu durchsuchen. Heuristiken sind allgemeine Faustregeln oder Abkürzungen, die es Menschen und Maschinen ermöglichen, schwierige Probleme zu lösen, ohne dass 'ne explizite Analyse erforderlich ist. Denkt daran, wie Schachgroßmeister erkennbare Muster auf dem Brett verwenden, wie zum Beispiel gängige Eröffnungen, um auf ihrem höchsten Niveau zu spielen. Das ist keine explizite Zählung von Schachfiguren, sondern die schnelle Erkennung von Mustern, die Spieler zu guten Zügen führen.
Der Zauberwürfel ist kein wirklich schwieriges Problem, aber er zeigt uns, dass unser Ansatz zur Problemlösung umso sanfter sein muss, je schwieriger ein Problem wird. "Sanfter" bedeutet hier, sich auf Dinge wie Heuristiken und Mustererkennung zu verlassen, anstatt auf 'ne detaillierte Analyse der Teile, aus denen ein Problem besteht. Je schwieriger das Problem, je größer und komplexer sein Möglichkeitsraum ist, desto mehr muss dieser Raum durchsucht werden. Das bedeutet: Je schwieriger das Problem, desto weniger analytisch können wir bei der Suche vorgehen. Beim Hände-warm-halten-Problem war unsere Suche einfach, mit 'nem bisschen Ausprobieren und logischem Denken. Das Schneemannproblem erforderte mehr Ausprobieren, da logisches Denken bei nachlassender Kausalität weniger nützlich wurde. Der Zauberwürfel würde noch mehr Ausprobieren erfordern, um 'ne neue Lösung zu finden. Selbst wenn man systematisch vorgeht, sind Heuristiken erforderlich. Der Brute-Force-Ansatz, bei dem alle möglichen Konfigurationen ausprobiert werden, bis 'ne Lösung gefunden ist, ist nicht praktikabel.
Es liegt auf der Hand, dass schwierige Probleme in der Natur nur mit den sanftesten Ansätzen gelöst werden können. Und das sehen wir natürlich auch. Menschen haben sich entwickelt, um die schwierigsten Probleme von allen mit Heuristiken und Mustererkennung zu lösen, nicht mit detaillierter Analyse. Die emotionalen Signale und Intuitionen, die Menschen verwenden, sind unsere entwickelten Versionen von Heuristiken. Es sind also nicht nur von Menschen geschaffene Computer, die rechnen, wie es in der ursprünglichen Definition eines schwierigen Problems heißt. Die Natur rechnet. Und die Natur zeigt uns, was es braucht, um die schwierigsten Probleme von allen zu lösen. Wir müssen aus dem System heraustreten, außerhalb der bewussten Analyse, und riesige Möglichkeitsräume mit Ausprobieren, Heuristiken und Mustererkennung erkunden.
Deshalb gibt es Deep Learning. Analytische Ansätze und regelbasiertes Rechnen können keine wirklich schwierigen Probleme lösen. Beim Deep Learning geht es nicht um Analyse oder Regeln, sondern um rechnerische Versionen von Ausprobieren, Heuristiken und Mustererkennung. Deep Learning kann auf das Zauberwürfelproblem angewendet werden, um möglicherweise neue Lösungen zu finden. Das wurde getan, in der Hoffnung, dass 'ne solche Anwendung wertvolle Erkenntnisse, Strategien oder Innovationen in Bezug auf Problemlösung im Allgemeinen liefern könnte. Deep Learning durchsucht den Möglichkeitsraum ähnlich wie ein Mensch: sanft, von außen.
Aber während der Suchprozess, den Deep Learning verwendet, konzeptionell dem ähnelt, den Menschen verwenden, gilt das nicht für die gefundenen Lösungen. Menschen und traditionelles Rechnen finden 'ne Lösung, die als verständliche Abfolge von Anweisungen dargestellt werden kann, der andere folgen können (d.h. ein Cuber-Algorithmus). Aber Deep Learning produziert etwas ganz anderes. Anstatt 'ne sichtbare Abfolge von Schritten, können die Lösungen von Deep Learning nicht auf diese Weise gesehen werden. Die Lösungen, die Deep Learning produziert, sind kausal undurchsichtig und weitgehend nicht interpretierbar. Kurz gesagt, wir wissen nicht, was Deep Learning tut, wenn seine eingesetzte Lösung den Würfel löst. Die naheliegende Frage ist: Warum sollte der gleiche Ansatz zwischen zwei verschiedenen Systemen, Menschen und KI, so unterschiedliche Lösungen hervorbringen?