Schlagwort-Archive: KI

Ein Lernalgorithmus in Python für ein Perzeptron

Was man sich vorher ansehen sollte.
NumPy: Quickstart tutorial bzw. NumPy v1.12.dev0 Manual oder Tentative NumPy Tutorial bzw. auf GitHub scipy-tentative-numpy-tutorials. Wer ein älteres pdf bevorzugt findet es hier doc_numpy-pdf_1

Pandas: http://pandas.pydata.org/pandas-docs/stable/tutorials.html
Matplotlib: http://matplotlib.org/users/beginner.html

Von Python sollte eine 3er Version installiert sein. python -V sagt mir, dass ich Python 3.5.2 installiert habe, womit ich zufrieden bin.
Auf Python 3.5.2 documentation findet man die Doku zu Python und um pip braucht man sich seit der 3.4 Version auch nicht mehr kümmern, da der Paketmanager für PyPI schon automatisch mitinstalliert wird.
Wir verwenden also NumPy, pandas und matplotlib zum Einlesen, Verarbeiten und Visualisieren der Daten und wir werden einen einfachen Algorithmus zur linearen Klassifikation implementieren.
Zuerst schaue ich einmal, ob ich die neueste Version von pip habe und komme mit „pip install –upgrade pip“ auf pip-9.0.1 und schon habe ich falsch gedacht. Ich muss ja pip für Python 3.x installieren mit sudo apt install python3-pip Dann wieder ein –upgrade und ein sudo pip3 install numpy

 

 

 

 

 

Zum Code:

import numpy as np
class Perceptron(object):
"""Perceptron classifier.

Parameters
------------
eta : float
Learning rate (between 0.0 and 1.0)
n_iter : int
Passes over the training dataset.

Attributes
-----------
w_ : 1d-array
Weights after fitting.
errors_ : list
Number of misclassifications in every epoch.

"""
def __init__(self, eta=0.01, n_iter=10):
self.eta = eta
self.n_iter = n_iter

def fit(self, X, y):
"""Fit training data.

Parameters
----------
X : {array-like}, shape = [n_samples, n_features]
Training vectors, where n_samples is the number of samples and
n_features is the number of features.
y : array-like, shape = [n_samples]
Target values.

Returns
-------
self : object

"""
self.w_ = np.zeros(1 + X.shape[1])
self.errors_ = []

for _ in range(self.n_iter):
errors = 0
for xi, target in zip(X, y):
update = self.eta * (target - self.predict(xi))
self.w_[1:] += update * xi
self.w_[0] += update
errors += int(update != 0.0)
self.errors_.append(errors)
return self

def net_input(self, X):
"""Calculate net input"""
return np.dot(X, self.w_[1:]) + self.w_[0]

def predict(self, X):
"""Return class label after unit step"""
return np.where(self.net_input(X) >= 0.0, 1, -1)

 

 
So, soweit funktioniert es und nächstes mal werde ich das Perzeptron-Modell mit den Iris Datensätzen trainieren.


Quelle: Python Machine Learning von Sebastian Raschka; Published 2015-09-23
Weblinks:
https://github.com/arnaudbenard/python-machine-learning
http://stackoverflow.com/questions/36532585/passing-an-array-to-numpy-dot-in-python-implementation-of-perceptron-learning
https://github.com/rasbt/python-machine-learning-book/blob/master/code/optional-py-scripts/ch02.py
http://natureofcode.com/book/chapter-10-neural-networks/
http://stackoverflow.com/questions/36532585/passing-an-array-to-numpy-dot-in-python-implementation-of-perceptron-learning

(20)

Energie für KI

Habe gerade wieder gelesen, dass man unglaublich viel parallele Rechenleistung für gute neuronale Netze benötigt. Ich denke, das liegt am völlig falschen Ansatz. Eine gute KI darf nicht wesentlich mehr Energie benötigen,  als das Gehirn.  Sonst sehe ich mir den Algorithmus nicht einmal noch an, da ich sowieso ein Matheprogramm dahinter vermute, dass vielleicht ein wenig mehr, aber vor allem sehr gut mit Matrizen rechnen kann. Das hat für mich aber nicht sehr viel mit KI zu tun. Für mich sind primitive intelligenter als das beste KI_Programm, das ein Rechenzentrum benötigt, um halbwegs brauchbare Ergebnisse zu liefern. Ich sehe das als simulierte Intelligenz, die natürlich auch künstlich ist, aber meine KI sollte in kurzer Zeit wenigstens intelligenter sein, als ich. Quasi-parallele Prozesse reichen meiner Meinung nach übrigens auch völlig,  denn mein Hirn ist ja auch nur 1 Organ.
Habe überlegt,  wie ich Engamme bzw. Konnektome mit gelernten Gewichten neuronal speichern könnte und kam zu dem Ergebnis, das bestimmte Neoronenverbände dazu erforderlich sind. Fired together – wired together klingt ja recht gut, aber mit speichern im engeren Sinn hat es für mich nichts zu tun. In einer Proteinstruktur gespeichert kommt mir selbst für mein sehr langsames Langzeitgedächtnis viel zu langsam vor, aber das werde ich mir in den nächsten Tagen genauer ansehen.

(481)

Künstliche Intelligenz

Wieso manche Menschen, auch unter UNI-Professoren ist das heutzutage üblich, von KI sprechen können, wenn sie Matrizenrechnen meinen, ist mir ein Rätsel. Vielleicht, weil sie um ein paar, mehr oder weniger sinnlose Funktionen, die aber mathematisch viel hergeben, erweitern und ein mehr oder weniger sinnloses Programm zusammenstoppeln? Ich meine, wer ein neuronales Netz prozedural programmiert, dem ist wohl nicht mehr zu helfen und Denker, wie Hebb, Kohonen und Co sind leider alle schon gestorben. Das Meiste, was an der KI für mich irgendwie brauchbar ist, ist über 50 Jahre alt.

786432 also „1024 × 768“ Inputs sind für ein Netz, das etwas mit Optik zu tun hat, das absolute Minimum und dann brauche ich mindestens an die 1000 hidden layers. Was will man mit ein paar Neurone die eigentlich keine sind und noch dazu (das ist unglaublich für mich) prozedural programmiert sind und die eigentlich nichts anderes, als gewöhnliche Matrizenrechnungen sind, anfangen? Absolut lächerlich, da von KI zu sprechen und Wörter wie „neuronales Netz“ und „Neuron“ zu missbrauchen. Das reicht höchstens für das Hirn und die KI eines von Google indizierten, künstlichen MS-Virus und das, obwohl das Konnektom vom Fadenwurm (Schaltplan seiner 300 Neurone) schon ganz gut erforscht ist.
Naja, was soll’s, man sieht ja, was die derzeitigen Programme her geben – so gut, wie nichts, trotz der guten Lernregeln, die sich große Denker vor einer halben Ewigkeit ausgedacht haben. Die waren das Denken anscheinend noch gewohnt, heute macht das der Computer und morgen meine KI.

Cascade Correlation empfinde ich noch als u. U. brauchbaren Ansatz, sowie ich die ganzen Lernalgorithmen Hebb, Delta, Backpropagation und Netze (Kohonen) …. für sehr interessant und nützlich halte. Dass man damit nicht mehr anfangen kann, wundert mich nicht, denn ich habe mir so einige Umsetzungen angesehen und die können nur sehr eingeschränkt funktionieren, weil sie nicht einmal objektorientiert umgesetzt sind. Es gibt sogar Coder, die in Java irgendwie prozedural programmieren können, was schon ziemlich pervers ist.

Die Amazon Links unten sind nicht einmal Affiliat-Links, weil ich nicht an ein paar Cent interessiert bin, sondern ich will mir die Bücher kaufen und daher notiere ich sie mir einmal.

(822)

Der Bewusstseinswahnsinn

Ich beschäftige mich als Laie schon lange mit KI und neuronalen Netzen und mein neurophysiologisches Praktikum liegt schon mehr als 20 Jahre zurück. Seither versuche ich immer wieder ein neuronales Netz zu programmieren und ich ging immer davon aus, dass ich eine Simulation des Gehirns bzw. von Teilfunktionen entwickeln muss, um zu einem Ergebnis zu kommen. Jetzt denke ich, dass mein nächster Versuch keine Simulation wird, sondern das Original KI-Gehirn, also „es selbst“. Dazu brauche ich keine Schaltkreise auf extrem dünne Folien drucken, um mir aus vielen Schichten ein Netz aus HW-Neuronen aufzubauen, obwohl ich dazu ein paar Ideen zur Selbstorganisation und zum Sproßen von neuen Verbindungen hätte. Nein ich bleibe bei ganz simplen Neuronen und baue auf herkömmliche Lernregeln, wie sie zum Beispiel in Büchern, wie „Neuronale Netze“ von Günther Daniel Rey und Karl F.Wender Neuronale Netze beschrieben sind. Ich habe es schon geahnt, aber durch das Buch „Das Konnektom“ von Sebastian Seung,Das Konnektom bin ich nun davon überzeugt, dass die Gewichtung der Neuronenverbindungen natürlich ein wesentlicher Punkt ist, aber der Algorithmus besteht meiner Meinung nach in erster Linie im Konnektom. Technisch wird das vielleicht niemals nachgebaut werden können, aber es sollte möglich sein, ein Konnektom zu programmieren. Sagen wir ein Neuron sei ein Objekt und ich kann bis zu 1 Mrd. Instanzen erzeugen, wobei es natürlich verschiedene Klassen geben soll.

Grundsätzliche Anordnung wär ein Würfel von 1000 * 1000 * 1000 Neurone.

Die verschiedenen Klassen werden nach Neurontyp (verschiedene) Zellen und nach funktionellem Areal erstellt und es gelten OOP-Bedingungen (Vererbung, Kapselung).

Das Objekt Neuron (unterste Klasse) kann eine Eigenschaft Schwellwert und bis zu maximal 1 Mrd. Eigenschaften „Gewicht für Verknüpfung i“ aufweisen, obwohl nie jedes Neuron mit jedem verbunden sein muss (biologisch unmöglich, wäre aber leicht zu programmieren). Es soll also nicht nur das „Gewicht“ der Verknüpfung variabel sein, sondern auch die Verknüpfungen selbst und das ist mein neuer Ansatz, den ich jetzt versuche umzusetzen.

Was hat das mit Bewusstsein zu tun? Gar nichts, denn ich halte den Begriff so unnötig wie die Seele als Entität oder einen Gott. Ob meine Katze ein Bewusstsein hat, darüber könnt ihr euch streiten, meiner Katze ist es egal, wodurch ich versucht bin anzunehmen, sie wäre intelligenter als so mancher Wissenschaftler. Vor allem dann, wenn er von etwas spricht, das er nicht definiert. Ich las nämlich gerade Wie kommt Bewußtsein ins Gehirn? Von Dieter E. Zimmer

Der Artikel ist ja ganz interessant, aber ich frage mich immer, was diesen seltsamen Mystifizierungen Bedeuten sollen. Es würde mich nicht wundern, wenn der Mensch, der bei einer roten Ampel den Fuß auf die Bremse setzte und stehen blieb schlussfolgern würde: ach , es gibt doch einen Gott, sonst wäre das Auto jetzt nicht stehen geblieben. Das ist so ein Schwachsinn, weil Bewusstsein ja nicht definiert wird und wenn ich nach Definitionen suchen würde, fände ich wahrscheinlich wieder unzählige. Je nach Bedarf schafft man sich nämlich solche, wie Gottheiten und Axiome. Daher kann jeder mit Bewusstsein ganz etwas anderes meinen, obwohl die eigentliche Bedeutung doch schon im Wort steckt. Es ist einem etwas bewusst. Jemand weiß, dass er (sie/es) ist (zu einem bestimmten Zeitpunkt in einem bestimmten Zustand) und dass seine Handlung zum Erfolg geführt hat. Er nimmt das Ergebnis wahr und verknüpft es mit seinem aktuellen Zustand (Bewusstsein). Was bitte soll da bei einer Maschine anders sein, als bei einem Menschen? Ich staune immer wieder darüber, dass viele Menschen so geniale Denker sind und wundere mich gleichzeitig, dass sie dann über derart primitive Hürden stolpern. Bewusstsein ergibt sich nicht automatisch, wie in dem Artikel manchen Wissenschaftlern vorgeworfen wird, dass sie das annähmen, sondern es ist völlig unnützer Schwachsinn. Da könnte ich genau so gut fragen, an welchen Gott nun die KI glauben wird. Falls sie das tut, will ich sofort nichts mehr mit ihr zu tun haben. Aber sie braucht keinen Gott und auch kein Bewusstsein, selbst wenn manche Fantasten ab einer bestimmten, mir unbekannten und sicher willkürlich festgelegten Grenze der Entwicklung behaupten werden, dass sie eines hat.

(1796)

adaxas 1.0

Da ich mit meinem KI-Projekt (heli-bot, adaxaas, adaxana) nicht voran komme, ist es an der Zeit, wieder einmal von vorne zu beginnen. Nach Ruby und PHP versuche ich es diesmal in Java am Android-Handy, da ich dies inzwischen als beste Vorraussetzung für mein Projekt halte. Zur Bezeichnung „adaxas“ + „Android“ könnte ich auch Notizen schreiben, aber für ersteres habe ich das hier bereits irgendwo gemacht und die Bezeichnung „Android“ für ein ehemalig freies Linux, das Google zu einer proprietären SW machte, finde ich etwas seltsam und einfallslos, denn „Android“ hatte ja schon vorher eine Bedeutung und jetzt weiß ohne Kontext niemand mehr was mit „Android“ gemeint ist. Google wird uns ja hoffentlich nicht auch noch die Wörter klauen und sich „Anroid“ für ihr Linux schützen lassen. Oder ist das längst geschehen? Naja, es spielt kaum eine Rolle für mich, aber ich bin jedenfalls kein Freund von Java (sogar Smalltalk wäre mir noch immer lieber) und Google mag ich auch nicht besonders, obwohl ich Java auf einem Android-Handy als beste Vorraussetzung für mein neues, altes Projekt halte, also für adaxas 1.0.
Für die erste Version ist folgendes geplant. Die App soll jedenfalls nicht auf Google Play erhältlich werden, sondern hier und auf GitHub für mutige Neugierige angeboten werden. Natürlich wird adaxas 1.0 open source und kostenlos.
a) auf eine geringe Anzahl von Sprachsteuerungsbefehle reagieren
b) von einer Kamera aufnehmen und speichern – (optische Anzeige im Kontrollfeld und akustische Ausgabe [ich sehe, bin blind, speichere als, …] )
c) vom Mikro wie unter Punkt b
d auf Tastatureingabe wie jetzt adaxana reagieren, aslo mittels vorgefertigtem AIML-file (auch über Twitter, FB und G+)
d) für Definitionen auf Wikipedia nachschlagen und speichern
e) alles protokollieren und zu einem Server schicken (bleibt vorläufig in PHP) und stellt später den Kern der AW dar.

Sind alle Daten samt Protokollen, Statusbericht, Systemdaten am Server und die App am Handy weiß Bescheid und kann die Daten zur Verwendung wieder vom Server abrufen, ist die Phase 1, also das dumme adaxas 1.0 fertig.
Das sollte nicht so schwierig sein, aber ein gewisser Zeitaufwand ist schon nötig. Der Verlauf der Entwicklung wird im Kommentarbereich dieser Notiz festgehalten und ein Link zum Source auf GitHube wird eingestellt. Wenn die App fertig und getestet ist, werde ich sie hier im Artikel anbieten und zu adaxas 2.0 über gehen.
Adaxana und Heli-Bot werden kein Web-Interface, sondern ersatzlos gelöscht, sobald adaxas 1.0 fertig ist.
Ich spreche aus Erfahrung, wenn ich sage, dass die Gefahr, dass die erste Phase dises Einmann-Zweithobby-Projekts nie fertig wird recht groß ist. Aber die Chance auf spannende Stunden ist durch den Neubeginn jedenfalls größer.

(347)