Neuronale Netze und Konfliktforschung

Sie haben ein bestimmtes Projekt zu bearbeiten und wissen nicht, wie Sie an die Aufgabe heran gehen sollen? Sie sind sich nicht sicher, ob Ihr Netzentwurf zu Ihrem Problem passt oder ob es da Optimierungsmöglichkeiten gibt? Ist es überhaupt sinnvoll an Ihre Daten mit einem NN basierten Ansatz heranzugehen? Ist MemBrain das richtige Werkzeug für Ihr Problem und Ihre Infrastruktur?

Hier ist der richtige Platz für diese Art von Fragen.
Post Reply
Alastair
Posts: 2
Joined: Tue 16. Feb 2010, 17:40

Neuronale Netze und Konfliktforschung

Post by Alastair »

Hallo,

ich sitze zur Zeit an den methodischen Vorarbeiten für meine Dissertation. Ich bin Politikwissenschaftler, genauer gesagt Konfliktforscher, und interessiere mich für den Bereich der "Social Physics", also für die Übertragung naturwissenschaftlicher Konzepte der Komplexitäts- und Systemtheorie in die Gesellschaftswissenschaften. Konkret möchte ich in meiner Diss unter anderem den empirischen Befund, dass die Häufigkeit der Intensität innerstaatlicher Gewaltkonflikte einem Potenzgesetz folgt, untersuchen. Theoretischer Ansatzpunkt dabei ist die "Self-Organized Criticality". Als Methode möchte ich Neuronale Netze verwenden.

Momentan versuche ich, die Modellierung der empirischen Befunde erstmal ganz abstrakt herzuleiten. Hierzu habe ich ein Netzwerk mit 100 Hidden Units gebaut, die je 30 Schritte einen Impuls von einer Input Unit empfangen. Die Hidden Units sind zufällig untereinander verknüpft. Erreicht eine Hidden Unit einen definierten Lower Fire Threshold, feuert sie, wird aber von einer parallellen "Kontroll"-Unit sofort danach wieder auf Null gesetzt (also 100 weitere, parallelle Hidden Units für diesen Zweck).

Ich lade im Anhang mal zur besseren Veranschaulichung einen Screenshot hoch. Nach jeweils 30 Schritten "reshuffelt" das Muster. Mein Ziel ist es nun, herauszufinden, mit welcher Häufigkeitsverteilung die Aktivierungsmuster auftauchen. Vermutlich sind sie zufällig, aber das möchte ich erstmal herausfinden. In diesem Zusammenhang stellen sich für mich zwei Fragen, bei denen ich nicht weiterkomme:

1. Gibt es in Membrain eine Möglichkeit, die Muster zu "zählen"? So dass ich am Ende sehe: "Okay, das Muster 33 ist bei 5000 Durchgängen 5 Mal aufgetaucht, das Muster 34 ist 50 Mal erschienen" usw.? Vielleicht durch Verknüpfung mit einem anderen Programm?

2. Mir ist bewusst, dass zu diesem Zweck Membrain vermutlich erstmal die jeweiligen Muster erkennen muss. Wahrscheinlich ist hierfür eine Kategorisierung mittels "unsupervised learning" hilfreich. Mein Problem ist jedoch, dass ich für den "Teacher" die Werte von Input Units benötige. Meine Muster liegen aber als Aktivierungen von Hidden Units vor. Wie kann ich die Werte der Hidden Units in Werte von Input Units transformieren? Über eine einfache Vernetzung HU -> IU geht das ja offenbar nicht...

Ich hoffe, ich habe mich halbwegs verständlich ausgedrückt. Als Gesellschaftswissenschaftler muss ich mich noch an die Fachsprache der Informatiker gewöhnen... Danke schon im Voraus für mögliche Hinweise!

Viele Grüße,



Christoph
Attachments
Screenshot.jpg
(74.2 KiB) Downloaded 25 times
User avatar
Admin
Site Admin
Posts: 438
Joined: Sun 16. Nov 2008, 18:21

Re: Neuronale Netze und Konfliktforschung

Post by Admin »

Alastair wrote:Erreicht eine Hidden Unit einen definierten Lower Fire Threshold, feuert sie, wird aber von einer parallellen "Kontroll"-Unit sofort danach wieder auf Null gesetzt (also 100 weitere, parallelle Hidden Units für diesen Zweck).
Die Unit wird nur dann bei Überschreiten der Schwelle sicher feuern, wenn 'Lower' und 'Upper' Threshold auf dem selben Wert stehen. Ansonsten wird sie mit einer Wahrscheinlichkeit feuern, die sich von der Lower bis zur Upper Threshold von 0 bis 100 % erhöht, je nach erreichter Aktivität. Welchen Wert sie beim Feuern ausgibt, kann man übrigens auch einstellen: Entweder es ist die Aktivität, die das Neuron zum Feuern gebracht hat, oder der feste Wert 1.
Die parallele 'Rücksetz-Unit' ist evtl. möglich, aber umständlich: Es ist vielleicht einfacher, das gewünschte Verhalten über die 'Output Recovery Time' der Neuronen auf zu erreichen. Damit kann festgelegt werden, wie lange der Ausgang eines Neurons 'gesperrt' (also 0) sein soll, nachdem das Neuron gefeuert hat. (Die Aktivitätsberechnung des Neurons wird dabei nicht beeinflusst, sondern lediglich der Output-Wert, der an alle angeschlossenen Neuronen weitergereicht wird.)

Für Ihren Zweck könnten außerdem Links mit logischen Längen > 0 interessant sein, das erzeugt Laufzeiten bei der Signalweitergabe, die interessante, sich durch ein Netz bewegende Aktivitätsmuster ergeben können (weiß aber natürlich nicht, ob das aus sozialwissenschafllicher Sicht eine Entsprechung in der Realität hat).
Alastair wrote:1. Gibt es in Membrain eine Möglichkeit, die Muster zu "zählen"? So dass ich am Ende sehe: "Okay, das Muster 33 ist bei 5000 Durchgängen 5 Mal aufgetaucht, das Muster 34 ist 50 Mal erschienen" usw.? Vielleicht durch Verknüpfung mit einem anderen Programm?
Über die Skriptsprache von MemBrain ist das möglich, ja, sofern Sie über einen Algorithmus verfügen, der aus den einzelnen Neuron-Zuständen auf eine Musterkategorie schließen kann. Am besten definieren Sie dazu Ihre bisherigen Hidden-Neuronen zu Output-Neuronen. Das sollte an der Funktionalität Ihres Netzes nichts ändern, erlaubt Ihnen aber einen vereinfachten ZUgriff auf die Neuronen durch ein Skript. Zugriff auf Hidden-Neuronen ist zwar auch möglich, aber nicht direkt: Sie müssen Hidden-Neuronen über ein Skript erst markieren, dann Ihre Eigenschaften auslesen und aus diesen die Aktivität oder den Output-Wert extrahieren. Bei Output-Neuronen haben Sie direkten Zugriff auf Aktivität und Output.
Alastair wrote:2. Mir ist bewusst, dass zu diesem Zweck Membrain vermutlich erstmal die jeweiligen Muster erkennen muss. Wahrscheinlich ist hierfür eine Kategorisierung mittels "unsupervised learning" hilfreich. Mein Problem ist jedoch, dass ich für den "Teacher" die Werte von Input Units benötige. Meine Muster liegen aber als Aktivierungen von Hidden Units vor. Wie kann ich die Werte der Hidden Units in Werte von Input Units transformieren? Über eine einfache Vernetzung HU -> IU geht das ja offenbar nicht...
Haben Sie bereits eine Vorstellung der Kategorien, in die Sie einordnen möchten?
Thomas Jetter
Alastair
Posts: 2
Joined: Tue 16. Feb 2010, 17:40

Re: Neuronale Netze und Konfliktforschung

Post by Alastair »

Herzlichen Dank für die schnelle und ausführliche Antwort!

Lower und Upper Fire Threshold habe ich bei den Hidden Units gleich gehalten (das Buch von Rey und Wender hat mir in dieser Hinsicht schon geholfen :) ). Die Laufzeiten habe ich auch schon eingebaut, das ist ausgesprochen brauchbar.

Ich glaube jedoch nicht, dass ich auf die "Rücksetz"-Units verzichten kann, da nicht nur der Ausgang der Hidden Units gesperrt sein soll, sondern der Aktivitätslevel tatsächlich nach Erreichen des Schwellenwerts und Feuern wieder auf Null gesetzt werden soll. Ich versuche konkret, das Sandpile Model (zellulärer Automat) von Bak, Tang und Wiesenfeld mit einem Neuronalen Netz in etwa nachzubauen - dabei fallen Sandkörner auf eine Site, und nach erreichen des Schwellenwerts von vier Körnern geben sie jeweils ein Sandkorn an ihre vier Nachbar-Sites ab, was eine leere Site zurücklässt, bis durch Hinzufügen von Sandkörner wieder der Schwellenwert erreicht ist.

Die möglichen Muster, die mein Netz erzeugt (ich habe die Hidden Units wie empfohlen nun in Output Units umgewandelt), sind, wenn ich richtig rechne, bei 100 Units 10.000 verschiedene, wenn man davon ausgeht, dass jede Unit entweder 0 oder 1 ausgibt. Selbst wenn ich von einem Netz von nur 25 Neuronen ausgehe, würde das 625 Kombinationsmöglichkeiten ergeben. Das würde konkret bedeuten, dass das zu diesem Zweck zu erzeugende Netz in einem ersten Schritt mindestens diese 625 Outputs erkennen können müsste und in einem zweiten Schritt zählen können sollte, wie oft ein spezifischer Output (also ein konkretes Muster) bei bspw. 5000 Durchgängen auftaucht (Verteilungshäufigkeit).

Ich habe mich nun mit den Skripten bei Membrain auseinandergesetzt und auch PSPad installiert und aktiviert. Leider bin ich momentan noch etwas überfordert, "from the scratch" eine Funktionalität zu programmieren, die die beschriebenen Aufgaben erfüllen kann...

Vielen Dank fürs Durchlesen,



Christoph
Post Reply