Einführung in das Machine Learning für (fast) alle

Wer in der Informatik heute mit vielen Daten zu tun hat kommt nicht drum herum sich etwas Wissen über Machine-Learning anzueignen. Der Einstieg ist für viele manchmal etwas steinig, aber in der Tat ist Machine-Learning, vor allem für Informatiker, keine unmögliche Domäne.

Eines der wichtigen Themen im Machine Learning oder Deep Learning ist die Klassifizierung. Hier gibt es natürlich verschiedene. Eines zum Beispiel ist der logische Klassifizierer, meist ist das auch ein linearer Klassifizierer. Das hört sich im ersten Moment sehr wissenschaftlich an, aber i.d.R. ist es einfach eine lineare Funktion.

WX + b = y

Nehmen wir an, wir wollen in einem Bild einen Buchstaben erkennen. Dazu nehmen wir die Pixels des Bildes und übernehmen diese in die oben dargestellte lineare Funktion um Vorhersagen (Predictions) zu erstellen.

X -> stellt das Bild bzw. den Buchstaben A dar. Lasst uns daraus nun ein paar Vorhersagen berechnen.

Wir müssen jetzt nur noch wissen, dass eine lineare Funktion i.d.R eine Matrix-Multiplikation darstellt. Alle Eingaben (inputs, hier X) werden als Vektor dargestellt und multipliziert. Die oben dargestellte lineare Funktion besitzt neben den Eingaben noch eine Art Gewicht W (weight). Das bedeutet, dass alle Eingaben gewichtet werden W*X. Zusätzlich hat die oben dargestellte Funktion noch eine Art Fehlerbereich oder Toleranz b (bias).

Machine Learning ist nun die Gesamtheit der oben dargestellten Funktion WX + b = y und was die “Maschine” nun lernt wird über die beiden Terme W, b und ein paar nachgelagerten Schritten gesteuert. Was bedeutet das?

Das oben, über die lineare Funktion, dargestellte Modell kann jetzt über die beiden Terme W und b trainiert werden. Wir gehen jetzt her und finden in diesem Training Werte für W und b die unser Modell für Vorhersagen verbessert.

Zur Erinnerung – wir waren beim Thema Klassifizierung. Am Ende brauen wir ja ein Ergebnis.

Nehmen wir wieder einmal an, dass wir in einer Welt mit drei Buchstaben leben und somit drei Bilder bzw. Buchstaben A, B und C als Problemstellung für die Erkennung des Buchstaben A haben. In diesem Fall hat nur ein Bild (A) die richtige Form (label). B und C fallen aus dem Raster. Nehmen wir weiter an, die lineare Funktion

WX + B = [ 2,5 1,1 0,1]

liefert den Vektor y mit  [ 2,5 1,1 0,1] als Ergebnis (score). Diese Ergebnisse müssen wir nun in Wahrscheinlichkeiten umformen, z.B.

[ 0.74776703 0.18439708 0.06783589]

Aber wie – hier hilft uns die sog. Softmax-Funktion. Hört sich wieder sehr kompliziert an, aber in der Verwendung sehr einfach:

S(yi) = e^yi/sumj(e^yi)

Der Buchstabe A bekommt aus der o.g. linearen Funktion einen Wert nahe 1, hier 0,74….. Die anderen beiden Bilder B und C einen Wert nahe 0, hier 0,18…. und 0,06…… Wie aber erhalten wir diese Wahrscheinlichkeiten. Genau – durch eine weitere Berechnung.

——————————–
Tensorflow SourceCode
——————————–
import matplotlib.pyplot as plt
import numpy as np

scores = [2.5, 1.1, 0.1]

def softmax(X):
return np.exp(X) / np.sum(np.exp(X),axis=0)
print(softmax(scores))

x_axis = np.arange(-2.0, 6.0, 0.5)
scores = np.vstack([x_axis, np.ones_like(x_axis), 0.5 * np.ones_like(x_axis)])
plt.plot(x_axis, softmax(scores).T, linewidth=1)
plt.show()

Das Schöne an dieser Funktion ist, dass man jeden beliebigen Vektor nehmen und aus diesem eine Wahrscheinlichkeit berechnen kann. Quasi eine ready-to-use-Funktion.

Runden wir für die weitere Verwendung den Vektor auf zwei Nachkommastellen:

[ 0.74776703 0.18439708 0.06783589]

Daraus ergibt sich der Vektor [ 0.75 0.18 0.07]

Da wir aber Informatiker sind und besser mit 0 und 1 arbeiten können, bietet sich jetzt das One-Hot-Shot-Encoding an. Dazu werden über eine weitere (einfache) Funktion die Wahrscheinlichkeiten auf 1 oder 0 gerundet und es entsteht ein Muster.

[1 0 0] das sieht verdammt binär aus 😉 Was haben wir jetzt gemacht? Betrachten wir das einmal aus einer anderen Perspektive

Klassifizierer
Hot-Shot
|0.75|             | 1| … A
A -> |0.18| <—-> |0| … B
|0.07|     ?      |0| … C
Sy                 Hs

Wie kommen wir nun auf diese 0en und 1en? Natürlich 😉 über die Kreuz-Entropie

Distance(S,H) = – sum(Hi log(Si))

Alles easy oder – Das oben nennt man auch Multinominale logische Klassifizierung … Distance(S(WX+b), H)  … 😉

Jetzt können wir die Wahrscheinlichkeiten bzw. Muster vergleichen und die Machine lernen lassen.

Das Beispiel oben lehnt sich an dem Deep Learning Kurs von google (auf udacity) an. Wenn man tiefer in die Materie einsteigen möchte und verstehen möchte, wie alles funktioniert ist das aus meiner Sicht der beste Einstieg. Der Kurz ist gratis, mit vielen Videos, Tutorials und auch Tests. Die Beispiele basieren auf TensorFlow. Hier der Link.

Theorie des erfinderischen Problemlösens – TRIZ

Am 12.10.2017 durften wir die Gäste des 6. KME-Netzwerktreffen in unserem Lab minnoshere begrüßen. Neben den Sprechern von EurA – Herr Weigl, m3 management consulting – Michael Wilk, usw. durfte ich auch Dr. Robert Adunka begrüßen, der über TRIZ als Innovationskonzept sprach.

TRIZ als Innvoationskonzept beim KME-Netzwerktreffen

Diese Veranstaltung nehme ich auch zum Anlass einen kurzen Blog über das TRIZ als Innovationskonzept zu schreiben. Vor allem, da wir dieses Konzept auch tlw. in unseren Innovations-Workshops einsetzen.

Das primäre Ziel dieser Methode ist, ein ideales technisches Produkt zu entwickeln. Dabei wird eine Problemstellung identifiziert und soweit abstrahiert, dass aus den 37 Standard-Problemarten und 40 innovativen Prinzipien Lösungsansätze übernommen werden können.

Der Vorteil der Methode ist, dass die Beteiligten anhand von konkreten Punkten im Lösungskatalog Problemlösungsansetze systematisch drucharbeiten kann. Quasi Kreativität aus dem Katalog. Und ich kann Euch auch sagen, jeder Mensch ist kreativ 😉

Der Wandel zum Full-Stack-Architekten

Seit knapp drei Jahren findet man Stellenausschreibungen die in Richtung Full-Stack-Architekten gehen. Was ist das genau und was könnte man darunter verstehen?

Schauen wir doch zuerst einmal in die Vergangenheit

  • In den 60er und Mitte 70er Jahren waren die Mainframes der letzte Schrei im technologischen IT-Universum. Das änderte sich
  • in den Mitte 70er Jahren. Die kleinen Computer verbreiteten sich immer schneller und dies dauerte bis in die 90er Jahren an. Danach wurde es erstmals wirklich spannend und die Vernetzung von Rechnern startete durch.
  • In den 90er Jahren wurden viele Anwendungen und Architekturen durch das Client-Server-Konzept geprägt und vorangetrieben. Das dauerte bis etwa zur Jahrtausendwende an. Das Internet steckt noch in den Kinderschuhen und die Modems “dongten” vor sich hin. Manch einer hatte da schon Ideen, aufgrund der Infrastruktur machte vieles aber betriebswirtschaftlich keinen Sinn.
  • Ab dem Jahrtausendwechsel bis etwa 2010 wurden durch die Internet-Technologie und verbesserter Infrastruktur viele Vorgehen, Architekturen und Infrastrukturen durchs SOA-, WebService- und VM-Dorf getrieben. Dann kam in dieser Zeit der Apfel und zeigte uns, damals noch wie von einem anderen Stern, das Wunderwerk Smartphone.
  • Von 2010 an, legt mich aber nicht genau fest, begann das mobile und heute noch aktuelle Zeitalter. Durch H+, ständiger Konnektivität, etc. war es möglich geworden Anwendungen zu bauen, die (fast) in Echtzeit miteinander agieren können. Viele neue Technologien, Vorgehen und Architekturpattern wurden seit dem geschaffen.

Es war seit Mitte 2005 gar nicht mehr so einfach ein Full-Stack-Architekt zu sein. Es gab Computer, Server und das Internet und es fing eine Spezialisierung an, die geprägt war von der Breite der Möglichkeiten und der Komplexität der Systeme. Ich erinnere mich noch an die Zeit zwischen 2007 und 2010 wo ich als Chefarchiekt in einem Pharmaunternehmen noch weitere Mitarbeiter in meinem Team hatte. Da war der

  • Infrastruktur-Architekt, der in seiner Domäne noch Spezialisten hatte für
    • Storage
    • Server und Hardware
    • Netzwerk
    • Virtualisierung und
    • Betriebssysteme.
  • Teilweise hatten wir auch einen eigenen Netzwerk-Architekten im Projekt-Team.
  • Dann kam der Middleware-Architekt und der
  • Data-Architekt und zu guter Letzt der
  • Application-Architect.

DER klassische FULLSTACK

Anwendung
Daten
Laufzeitumgebung
Middleware
Betriebssysteme
Virtualisierung
Server
Speichersysteme
Netzwerk

Diese Mischung wurde dann auch noch garniert mit vielen neuen Programmiersprachen, Plattformen, und Technologie-Anbietern. Das größte Problem war aber, dass alles beim Alten blieb. Es gab immer noch die Server, die Hardware und alle Schichten, die man so gebraucht hat. An Full-Stack-Architekten war da gar nicht zu denken. Ich kannte damals keinen, der sich das getraut hätte von sich zu sagen 😉

Heute haben wir 2017 und das Pflänzchen des Full-Stack-Architekten ist am wachsen und erfreut sich immer größerer Beliebtheit. Das haben einige große und kleine Technologie-Anbieter erkannt und den klassischen Stack für uns Architekten radikal reduziert. Unter den Schlüsselwörtern Iaas und PaaS wurden viele gute und erfolgreiche Konzepte durchgesetzt. Der Stack sieht dann in etwas so aus:

Anwendung
Daten
PaaS (Runtime, Middleware, OS)
IaaS (Virt., Server, Storage, Netw.)

Mit Hilfe von Technologien wie Cloud oder Docker, um einige zu nennen, brauchen wir uns keine Gedanken mehr zu machen welche Art von Server wir benötigen oder welche Betriebssysteme. Auch die Frage welche Programmiersprache bzw. -umgebung wird zweitrangig oder sogar obsolet. Somit können wir durch die reduzierte Stack-Landschaft, ein wenig Changing-Mindsetting und Es-Zu-Lassen die Produktivität für unsere Kunden rasant erhöhen und den Full-Stack-Architekten wieder zum Leben erwecken.