Google baut KI Systeme, die sich selber anzweifeln

Die momentan stärkste Methode in Künstlicher Intelligenz, Deep Learning, erhält eine neue Vorgehensweise: Die Kunst der Unsicherheit.

Forscher bei Uber und Google arbeiten momentan an Änderungen an den beiden populärsten Deep-Learning-Frameworks um ihnen Wahrscheinlichkeit beizubringen. Die KI Systeme werden so in der Lage sein, ihre Überzeugung in einer Vorhersage oder in einer Entscheidung mit einer Prozentzahl anzugeben. So können sie quasi wissen, wann sie sich selber anzweifeln sollen.

Deep Learning war in den vergangenen Jahren ein enormer Erfolg. Dabei füttert man eine riesige Menge von Daten in ein starkes neuronales Netz und erlaubt so dem Computer, Objekte in Bildern zu erkennen oder etwa Sprache perfekt in Text umzusetzen. Dabei braucht es aber Unmengen von Trainingsdaten und viel Computerleistung.

Ein Algorithmus, der seine Sicherheit oder Unsicherheit nennen kann, könnte zum Beispiel bei selbstfahrenden Autos oder anderen autonomen Maschinen nützlich sein. Auto fahren ist natürlich sehr kritisch und wenn ein selbstfahrendes Auto seine Unsicherheit nicht kennt, kann dies in einer Katastrophe enden.

Unsicherheit könnte KI Systemen helfen, schlussendlich bessere Entscheidungen zu treffen, da Unsicherheit auch ein wichtiges Merkmal menschlicher Handlungen und Intelligenz darstellt. Der grosse Vorteil könnte dabei sein, dass ein Algorithmus im Gegensatz zu heute nicht mehr Unmengen von Daten sondern nur eine Handvoll benötigt, um eine Entscheidung zu treffen (mit einer gewissen Unsicherheit).

Uber möchte ein stabiles Framework für Deep Learning haben, welches die Unsicherheit einfacher darstellen kann. Gleichzeitig arbeitet Uber an einer neuen Programmiersprache namens Pyro, welche Deep Learning mit wahrscheinlichkeitstheoretischer Programmierung vereint. Pyro kann auch dazu verwendet werden, ein System mit vorprogrammiertem Wissen zu bauen. Gemäss Uber können Entwickler Pyro für alle möglichen Szenarien einsetzen.

Eine weitere Programmiersprache, welche mit Unsicherheit arbeitet, ist Edward. Pyro und Edward sind noch in einem frühen Entwicklungsstadium, dennoch sind Uber und Google bereits sehr an ihnen interessiert.

Uber benutzt Machine Learning in verschiedenen Bereichen. Natürlich in ihren selbstfahrenden Autos, aber etwa auch, um die Fahrpreise für eine Route zu bestimmen. Die Firma hat schon heftig in KI investiert und etliche Experten angestellt. Google hat ebenfalls ihr gesamtes Business um KI und ihre momentan erfolgreiche Open-Source-Programmbibliothek Tensorflow aufgebaut.

Neuronale Netze waren dabei in den letzen Jahren so dominant, dass sie alle anderen Bereiche hinter sich gelassen haben. Was auch interessant ist, ist dass Pyro und Edward quasi zwei Felder vereinen, die eigentlich im Konkurrenzkampf zueinander stehen: Die Schule der Wahrscheinlichkeit und diejenige der neuronalen Netze. Die zwei Parteien müssen jetzt nur noch bereit sein, sich auf diese Verbindung einzulassen. (Quelle)

Was ist ein class path/class loader in Tomcat?

07.04.2017

Tomcat installiert viele class loaders (eine Klasse, die java.lang.ClassLoader) implementiert, damit Webapplikationen, die auf dem Tomcat laufen, Zugriff zu verschiedenen Klassen und Ressourcen haben.

Ein Klassenpfad (class path) ist ein Argument, welches der Java Virtual Machine mitteilt, wo es die Klassen und Pakete findet, welches es für die Ausführung der Applikation benötigt. Diese Aufgabe hat man bewusst vom eigentlichen Java Programm separiert, damit man die Einstellungen von aussen machen und so die Applikation auf verschiedenen Systemen zum laufen bringen kann.

Eltern-Kind Beziehung

In Java sind class loaders in einer Eltern-Kind Beziehung (parent-child). Wenn ein class loader eine Klasse laden muss, dann gibt er diesen Auftrag normalerweise zuerst an den parent class loader weiter. Nur wenn dieser die Klasse nicht findet, schaut er in seinem eigenen Repository.

Die verschiedenen Stufen bei Tomcat sind:

Bootstrap -> System -> Common -> Webapplikationen

Wobei die Eltern jeweils links und die Kinder rechts sind.

Wie verwendet Tomcat den Klassenpfad?

Tomcat will es einem grundsätzlich so einfach wie möglich machen. Wenn Tomcat gestartet wird, ignoriert Tomcat erst mal knallhart die Java classpath Umgebungsvariable, wo Abhängigkeiten normalerweise drinstehen. Stattdessen macht Tomcat seine eigenen Klassenpfade, wenn er den System class loader erstellt.

Deklariert man also einen Klassenpfad in der Umgebungsvariable, muss man sich nicht wundern, wenn Tomcat diese beim Starten überschrieben hat.

Folgende Schritte macht Tomcat beim Starten:
1. Die JVM ladet zuerst die Java Bibliotheken und die Umgebungsvariablen wie JAVA_HOME.
2. Tomcat erstellt seine classloader, welche alle Klassen und JAR Dateien in den beiden Ordner WEB-INF/classed und WEB-INF/lib ladet. Diese Ressourcen sind dabei nur sichtbar von den Webapplikationen, welche diese laden.
3. Der „Common class loader“ von Tomcat ladet alle Klassen und JAR Dateien in $CATALINA_HOME/lib. Diese Ressourcen sieht dann der Tomcat plus alle Applikationen, die darauf laufen.

Und wenn ich die Einstellungen ändern will?

Zum Glück sind die Einstellungen von Tomcat nicht hartcodiert, sondern werden von Catalina’s zentraler Optionsdatei geladen. Diese liegt in $CATALINA_HOME/conf/catalina.properties.

In dieser Datei kann man, wenn dies nötig ist, externe Repositories angeben, welche geladen werden sollen. Dafür kann etwa der shared loader verwendet werden. Die Klassen werden dabei vom shared loader am Ende des Startprozesses geladen, also auch nach dem Common loader.

Um etwa eine externe JAR Datei als Klassen Repository zu verwenden, trage beim Shared Loader ein:

shared.loader=file:/pfad/zur/datei/meinJar.jar

Eine gute Anwendung des Shared Loaders kann man in meinem Artikel Zwei WARs kommunizieren auf einem Tomcat nachlesen.

Kali Linux als Virtual Image starten

Kali Linux, das Linux für Penetrationstests, ist momentan voll im Trend. Es als virtuelle Maschine laufen zu lassen, ist kinderleicht!

  1. Das kostenlose Programm „Virtualbox“ runterladen.
  2. Auf der Kali Seite das Image für die Virtualbox runterladen.
  3. Virtualbox starten, das Image auswählen, fertig!

Das angebotene Kali ist bereits so weit, dass alles funktionieren sollte – Keyboard, Maus, Internet etc. Wenn Du ein Laufwerk auswählst, kannst Du sogar einfach Daten zwischen Deinem Betriebssystem (etwa Windows) und Kali austauschen.