<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>AI Playground &#187; Informatik</title>
	<atom:link href="http://www.aiplayground.org/thema/informatik/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.aiplayground.org</link>
	<description>Thoughts on artificial intelligence, cognitive science, academia, and life in general.</description>
	<lastBuildDate>Thu, 09 Jun 2011 13:42:49 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1</generator>
		<item>
		<title>Machine Learning from Scratch</title>
		<link>http://www.aiplayground.org/artikel/inductive-bias/</link>
		<comments>http://www.aiplayground.org/artikel/inductive-bias/#comments</comments>
		<pubDate>Sun, 01 Jul 2007 15:33:12 +0000</pubDate>
		<dc:creator>Andreas</dc:creator>
				<category><![CDATA[Daten]]></category>
		<category><![CDATA[Evolution]]></category>
		<category><![CDATA[Informatik]]></category>
		<category><![CDATA[Künstliche Intelligenz]]></category>
		<category><![CDATA[Mathematik]]></category>
		<category><![CDATA[Programmieren]]></category>

		<guid isPermaLink="false">http://www.aiplayground.org/artikel/inductive-bias/</guid>
		<description><![CDATA[Ich habe einige Zahlen, will die n&#228;chste in der Folge vorhersagen und wei&#223; nichts &#252;ber die Herkunft der Zahlen. Kann ich eine Vorhersage treffen? (Nein.) 1010101010101010101010101010101010101010_ Nun habe ich dieselben Zahlen, darf aber annehmen, dass einfache Erkl&#228;rungen wahrscheinlicher sind als komplizierte. Kann ich jetzt eine Vorhersage treffen? (Nein.) 1010101010101010101010101010101010101010_ Ich nehme zus&#228;tzlich an, dass die [...]]]></description>
			<content:encoded><![CDATA[<p>Ich habe einige Zahlen, will die n&#228;chste in der Folge vorhersagen und wei&#223; <em>nichts</em> &#252;ber die Herkunft der Zahlen. Kann ich eine Vorhersage treffen? (Nein.)</p>
<p><code>1010101010101010101010101010101010101010_</code></p>
<p>Nun habe ich dieselben Zahlen, darf aber annehmen, dass einfache Erkl&#228;rungen wahrscheinlicher sind als komplizierte. Kann ich jetzt eine Vorhersage treffen? (Nein.)</p>
<p><code>1010101010101010101010101010101010101010_</code></p>
<p>Ich nehme zus&#228;tzlich an, dass die Folge auf irgendeine Weise berechnet werden kann. Kann ich jetzt die wahrscheinlichste n&#228;chste Zahl vorhersagen? (Nein, nicht in endlicher Zeit. Das allgemeine Vorhersageproblem ist unl&#246;sbar.)</p>
<p><code>1010101010101010101010101010101010101010_</code></p>
<p>Kann ich einen Algorithmus schreiben, dessen Ausgabe gegen die wahrscheinlichste n&#228;chste Zahl konvergiert, wenn die Laufzeit gegen <img src="http://www.mindpicnic.de/media/img/latex/7ed9abff4dafd78d08e616c899412e92.png" style="border-width: 0px;" alt="unendlich" /> geht? (Ja. Dovetailer &#252;ber alle m&#246;glichen Programme, angefangen mit dem k&#252;rzesten; die Ausgabe des k&#252;rzesten Programms, das die Zahlen und eine zus&#228;tzliche ausgibt, ist die aktuelle Hypothese.)</p>
<p>Wir Menschen treffen jeden Tag Vorhersagen. Der Vorteil, den wir gegen&#252;ber derzeitigen Algorithmen haben, liegt in den zus&#228;tzlichen Annahmen, die wir unbewusst machen, in der Art von <a href="http://en.wikipedia.org/wiki/Inductive_bias">inductive bias</a>, mit dem uns die Evolution ausgestattet hat. Die Aufgabe von Forschern auf dem Gebiet des maschinellen Lernens ist es, den Suchraum von Algorithmen derart einzuschr&#228;nken, dass die Laufzeit der Algorithmen polynomiell wird, und dabei m&#246;glichst wenige L&#246;sungen f&#252;r Vorhersageprobleme auszuschlie&#223;en, die f&#252;r unsere Welt relevant sind.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.aiplayground.org/artikel/inductive-bias/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Ein Ranking f&#252;r Lernalgorithmen</title>
		<link>http://www.aiplayground.org/artikel/ranking/</link>
		<comments>http://www.aiplayground.org/artikel/ranking/#comments</comments>
		<pubDate>Thu, 05 Apr 2007 00:39:58 +0000</pubDate>
		<dc:creator>Andreas</dc:creator>
				<category><![CDATA[Informatik]]></category>
		<category><![CDATA[Künstliche Intelligenz]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://www.aiplayground.org/artikel/ranking/</guid>
		<description><![CDATA[Projektidee: Ein automatisch erstelltes und aktualisiertes Ranking von Algorithmen f&#252;r maschinelles Lernen macht Fortschritte auf dem Gebiet der allgemeinen k&#252;nstlichen Intelligenz sicht- und messbar. Das Messverfahren Lernverfahren wie rekurrente neuronale Netze, Markov-Modelle und genetische Algorithmen sollen akkurate Vorhersagen liefern. Wissenschaftliche Ver&#246;ffentlichungen sprechen davon, dass der jeweils vorgestellte Algorithmus &#8220;auf gewisse Weise&#8221; optimal ist. F&#252;r das [...]]]></description>
			<content:encoded><![CDATA[<p class="abstract">Projektidee: Ein automatisch erstelltes und aktualisiertes Ranking von Algorithmen f&#252;r maschinelles Lernen macht Fortschritte auf dem Gebiet der allgemeinen k&#252;nstlichen Intelligenz sicht- und messbar.</p>
<h2>Das Messverfahren</h2>
<p>Lernverfahren wie rekurrente neuronale Netze, Markov-Modelle und genetische Algorithmen sollen akkurate Vorhersagen liefern. Wissenschaftliche Ver&#246;ffentlichungen sprechen davon, dass der jeweils vorgestellte Algorithmus &#8220;auf gewisse Weise&#8221; optimal ist. F&#252;r das Gebiet der <a href="/artikel/agi/">allgemeinen k&#252;nstlichen Intelligenz</a> ist interessant, zu wissen, welcher Algorithmus <em>allgemein</em> am besten geeignet ist, d.h. f&#252;r die Vorhersage von Sequenzen, &#252;ber die wir lediglich wissen, dass sie von einem berechenbaren Prozess generiert wurden und dass einfache Erkl&#228;rungen wahrscheinlicher sind als komplizierte.</p>
<p>Eine Sequenz ist eine endliche oder unendliche Folge von Symbolen eines Alphabets (z.B. {0, 1}). Die meisten endlichen Sequenzen sind nicht effektiv lernbar, da kein Programm mit im Vergleich zur Sequenz kurzer Beschreibung existiert, das diese Sequenzen deterministisch ausgibt. Das hei&#223;t: Die <a href="http://en.wikipedia.org/wiki/Kolmogorov_complexity">Kolmogorov-Komplexit&#228;t</a> der meisten endlichen Sequenzen entspricht der L&#228;nge der Sequenzen. F&#252;r den Vergleich verschiedener Lernalgorithmen beschr&#228;nken wir uns auf unendliche Sequenzen mit endlich langen Erzeugerprogrammen.</p>
<p>Ein Vorhersagealgorithmus ist dann <em>allgemein</em> besser als ein anderer, wenn er lernen kann, Sequenzen mit h&#246;herer Kolmogorov-Komplexit&#228;t vorherhersagen (und beide einfache Sequenzen gleich gut vorhersagen k&#246;nnen). Praktisch jeder Algorithmus wird folgende Sequenz von sehr niedriger Komplexit&#228;t lernen k&#246;nnen:</p>
<p><code>111111111111111111111111111111111111111111...</code></p>
<p>Bei etwas h&#246;herer Komplexit&#228;t werden einige Algorithmen Probleme bekommen:</p>
<p><code>011011100101110111100010011010101111001101...</code></p>
<p>H&#228;tte man eine Datenbank, die jedes sequenzerzeugende Programm (oder jede Sequenz) sowie die Komplexit&#228;t der von jedem Programm generierten Sequenz speichert, so k&#246;nnte man f&#252;r eine Reihe von Algorithmen Tests durchf&#252;hren, um herauszufinden, in welchem Umfang und bis zu welcher Komplexit&#228;t jeder Algorithmus Sequenzen lernen kann. Mit den Ergebnissen dieser Tests lie&#223;e sich ein Ranking erstellen, das auf einen Blick verr&#228;t, welcher Algorithmus die meisten und komplexesten Sequenzen lernen kann.</p>
<p>Eine solche Datenbank ist unm&#246;glich: Es gibt unendlich viele sequenzerzeugende Programme, die Sequenzen sind unendlich lang und deren Komplexit&#228;t ist nicht algorithmisch bestimmbar.</p>
<p>Die Menge der sequenzerzeugenden Programme ist eine Teilmenge aller Programme, und diese Menge ist <em>aufz&#228;hlbar</em> unendlich. Die Kolmogorov-Komplexit&#228;t ist definiert als die L&#228;nge des k&#252;rzesten Programms, das eine Sequenz erzeugt. Generiert man alle Programme, angefangen mit dem k&#252;rzesten, so ist bekannt, ob bereits ein k&#252;rzeres Programm den gleichen Sequenzbeginn (eine festgelegte Anzahl von Zeichen, z.B. 10.000) erzeugt hat oder ob die L&#228;nge des gerade betrachteten Programms als Absch&#228;tzung der Komplexit&#228;t der erzeugten Sequenz verwendet werden kann — Absch&#228;tzung deshalb, weil nur eine endliche Anzahl der Zeichen zweier Sequenzen verglichen werden k&#246;nnen und <a href="http://de.wikipedia.org/wiki/Satz_von_Rice">nach Rice</a> nicht algorithmisch festgestellt werden kann, ob zwei Programme die gleiche Funktion berechnen.</p>
<p>Mit einigen Absch&#228;tzungen ist es m&#246;glich, Ausschnitte der beschriebenen Datenbank zu erstellen, die in der Komplexit&#228;t nach oben beschr&#228;nkt sind:</p>
<ol>
<li>Wir generieren der Reihe nach Turingmaschinen mit leerem Eingabe- bzw. Arbeitsband und nur in einer Richtung beschreibbarem Ausgabeband, angefangen mit der k&#252;rzesten.</li>
<li>Uns interessieren nur Turingmaschinen, die unendliche Sequenzen generieren:
<ul>
<li>H&#228;lt eine Turingmaschine an, so verwerfen wir diese Turingmaschine.</li>
<li>Hat eine Turingmaschine nach 10^12 Schritten noch keine 10.000 Ausgabesymbole erzeugt, so verwerfen wir diese Turingmaschine.</li>
</ul>
<p style="margin-bottom: 0">Andernfalls nehmen wir an, dass die aktuelle Turingmaschine eine der Turingmaschinen ist, die eine unendliche lange Sequenz ausgeben (Absch&#228;tzung I).</p>
</li>
<li>Wenn die ersten 10.000 Zeichen der Sequenz, die eine Turingmaschine erzeugt, noch von keiner anderen Turingmaschine erzeugt wurden, speichern wir die L&#228;nge der Beschreibung der Turingmaschine sowie die 10.000 Zeichen der Sequenz in einer Datenbank.</li>
<li>Die gespeicherte L&#228;nge entspricht in etwa der L&#228;nge der k&#252;rzesten Turingmaschine, die die Sequenz generiert und ist damit ein Ma&#223; f&#252;r die Kolmogorov-Komplexit&#228;t der Sequenz (Absch&#228;tzung II).</li>
</ol>
<p>Das wiederholen wir, bis die Datenbank &#8220;gro&#223; genug&#8221; ist. In einer 150 GB gro&#223;en Datenbank lassen sich bei 10.000 Zeichen pro Sequenzabschnitt etwa 100 Millionen unterschiedliche Sequenzabschnitte speichern. </p>
<h2>Der kritische Punkt</h2>
<p>Ist die Komplexit&#228;t der einfachsten in der Datenbank gespeicherten Sequenzen so gering, dass diese mit den meisten Vorhersagealgorithmen gelernt werden k&#246;nnen und die Komplexit&#228;t der komplexesten Sequenzen so gro&#223;, dass das Lernen der Sequenz mit aktuellen Vorhersagealgorithmen nicht mehr m&#246;glich ist?</p>
<p>Werden in dieser Datenbank &#8220;interessante&#8221; Sequenzen — Sequenzen von nichttrivialer Komplexit&#228;t — vorkommen? Oder lediglich 50 Millionen unterschiedliche, sich wiederholende Muster? Wie sieht es aus, wenn die einfachsten Sequenzen herausgefiltert und verworfen werden? Wie sieht es aus, wenn stets der Gro&#223;teil der Sequenzen verworfen wird, die von den Top 20 Algorithmen zuverl&#228;ssig vorhergesagt werden?</p>
<p>Bei zwei Bandzust&#228;nden (0 und 1) und n internen Zust&#228;nden gibt es (4*n)^(2*n) verschiedene Turingmaschinen mit einem in beide Richtungen bewegbaren Band. Die Anzahl der Turingmaschinen steigt schon bei wenigen Zust&#228;nden sehr schnell an:</p>
<p>1 interner Zustand: 16 TM<br />
2 interne Zust&#228;nde: 4096 TM <a style="color: #ccc" href="http://www.wolframscience.com/nksonline/page-1120a-text">(25 unterschiedliche)</a><br />
3 interne Zust&#228;nde: 2.985.984 TM <a style="color: #ccc" href="http://www.wolframscience.com/nksonline/page-1120a-text">(16.400 unterschiedliche)</a><br />
4 interne Zust&#228;nde: 4.294.967.296 TM<br />
5 interne Zust&#228;nde: 10.240.000.000.000 TM<br />
6 interne Zust&#228;nde: 36.520.347.436.056.576 TM<br />
7 interne Zust&#228;nde: 182.059.119.829.942.534.144 TM</p>
<p><a href="http://www.wolframscience.com/nksonline/page-79">Nach Stephen Wolfram</a> st&#246;&#223;t man auf interessantes Verhalten, sobald man Turingmaschinen mit mindestens vier internen Zust&#228;nden betrachtet. Die minimale Zahl der internen Zust&#228;nde einer Turingmaschine, die eine bestimmte Sequenz berechnet, dient als Ma&#223; f&#252;r die Komplexit&#228;t der berechneten Sequenz. Ist das Ranking brauchbar, wenn keine Turingmaschinen mit mehr als sieben internen Zust&#228;nden betrachtet werden?  Lambda Calculus, wie von <a href="http://homepages.cwi.nl/~tromp/cl/cl.html">John Tromp</a> vorgeschlagen, k&#246;nnte die bessere Wahl sein. Das Ranking k&#246;nnte sich jedoch auch damit als unbrauchbar erweisen.</p>
<h2>Beantwortete Fragen</h2>
<p>Bislang ist es schwierig, einige Fragen aus dem Bereich des maschinellen Lernens zu beantworten. L&#228;sst sich ein Ranking f&#252;r Lernalgorithmen umsetzen, so wird sich das f&#252;r folgende Fragen &#228;ndern:</p>
<p><strong>Wie sieht der aktuelle Stand der Forschung aus? Oder: Das Ranking.</strong></p>
<ol>
<li>Alle bekannteren Vorhersagealgorithmen werden in einer festgelegten Programmiersprache implementiert und zum Ranking hochgeladen.</li>
<li>Jeder Algorithmus wird mit allen oder mit einer statistisch relevanten Auswahl an Sequenzen getestet und erh&#228;lt einen Score zugeteilt, der besagt, f&#252;r wie viele Sequenzen und bis zu welcher Komplexit&#228;t der Algorithmus zuverl&#228;ssige Vorhersagen macht.</li>
<li>Ein Ranking wird erstellt, bei dem die Algorithmen mit dem h&#246;chstem Score an der Spitze stehen.</li>
</ol>
<p><strong>Wie gut ist mein Vorhersagealgorithmus?</strong></p>
<ol>
<li>Ein in einer festgelegten Programmiersprache geschriebener Algorithmus wird auf der Website des Rankings hochgeladen.</li>
<li>Der Algorithmus wird mit allen oder mit einer statistisch relevanten Auswahl an Sequenzen getestet und erh&#228;lt einen Score zugeteilt (s.o).</li>
<li>Die Leistung des Algorithmus kann dadurch mit der anderer Algorithmen verglichen werden und der Algorithmus kann in die Highscore-Liste aufgenommen werden.</li>
</ol>
<p><strong>Welcher Algorithmus ist f&#252;r mein Vorhersageproblem geeignet?</strong></p>
<ol>
<li>Sequenzen, die typisch f&#252;r das Problem sind, werden auf der Website des Rankings hochgeladen.</li>
<li>Alle Algorithmen, die am Ranking teilnehmen, werden auf die hochgeladenen Sequenzen angewendet.</li>
<li>Ein nach Korrektheit der Vorhersagen sortiertes, problem-spezifisches Ranking wird ausgegeben.</li>
</ol>
<h2>Offene Fragen</h2>
<ul>
<li>Soll die Programml&#228;nge mit in die Berechnung des Scores eines Algorithmus einbezogen werden oder soll es lediglich ein generelles Limit f&#252;r alle Programme geben?</li>
<li>Welche Limits sollen f&#252;r Laufzeit und Programml&#228;nge gesetzt werden?</li>
<li>Wie lange sollen die Sequenzabschnitte sein, die in der Datenbank gespeichert werden? 10.000 Zeichen?</li>
<li>Wie sollen die Sequenzabschnitte in Lernsequenz (die den Algorithmen pr&#228;sentiert wird) und Testsequenz (die vorherzusagen ist) aufgeteilt werden? Wie lang soll der vorherzusagende Abschnitt sein?</li>
<li>Wie wird die Vorhersage bewertet? Gelten nur komplett richtige Vorhersagen?</li>
<li>Sollen auch die k&#252;rzeren Ausgaben von anhaltenden Turingmaschinen miteinbezogen werden?</li>
<li>Ein praxistauglicher Algorithmus k&#246;nnte stark von zus&#228;tzlichen Annahmen &#252;ber seine Umgebung abh&#228;ngig sein. <em>Ideal</em> sind Vorhersage- und Komprimierungsalgorithmen nur f&#252;r jeweils eine einzige Wahrscheinlichkeitsverteilung an Eingaben. Ob ein Algorithmus, der f&#252;r die allgemeinste berechenbare Wahrscheinlichkeitsverteilung an Eingaben ideal ist, auch in der wirklichen Welt <em>brauchbar</em> ist, ist nicht gekl&#228;rt.</li>
<li>Ist es zweckm&#228;&#223;iger, probabilistische Sequenzen und Vorhersagealgorithmen statt exakter Algorithmen zuzulassen?</li>
<li>Wie wird der Score berechnet? Z&#228;hlen Sequenzen mit niedrigerer Komplexit&#228;t mehr oder weniger? Wie wird ein Vorhersagealgorithmus bewertet, der zwar komplexe Sequenzen vorhersagen kann, aber bei sehr vielen Sequenzen von niedriger Komplexit&#228;t fehlschl&#228;gt?</li>
<li>Welche Implementation eines universellen Computers ist am sinnvollsten? Turingmaschinen? Lambda Calculus?</li>
</ul>
<h2>Fazit</h2>
<p>Marcus Hutter hat in <a href="http://arxiv.org/pdf/cs.AI/0306091v1">seiner  Doktorarbeit</a> bewiesen, dass die optimale Vorgehensweise einer k&#252;nstlichen Intelligenz darin besteht, nach einer beliebigen Anzahl von Beobachtungen der Umgebung das k&#252;rzeste Programm zu finden, das diese Beobachtungen vorhersagt und anzunehmen, dass die Umgebung durch dieses Programm kontrolliert wird. Verbesserte allgemeine Vorhersagealgorithmen sind demnach mit Fortschritt auf dem Gebiet der k&#252;nstlichen Intelligenz gleichzusetzen. </p>
<p>Alles, was gemessen wird, verbessert sich. Ich schlage vor, eine Datenbank mit Sequenzabschnitten und zugeh&#246;riger (gesch&#228;tzter) Kolmogorov-Komplexit&#228;t anzulegen, diese Sequenzen von verschiedenen Lernalgorithmen vorhersagen zu lassen und den Erfolg der Algorithmen in einem Ranking sichtbar zu machen.</p>
<p>Ist diese Idee realistisch?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.aiplayground.org/artikel/ranking/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Improving Django: Generic views for RESTful web services</title>
		<link>http://www.aiplayground.org/artikel/improving-django/</link>
		<comments>http://www.aiplayground.org/artikel/improving-django/#comments</comments>
		<pubDate>Fri, 23 Mar 2007 22:27:43 +0000</pubDate>
		<dc:creator>Andreas</dc:creator>
				<category><![CDATA[Informatik]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://www.aiplayground.org/artikel/improving-django/</guid>
		<description><![CDATA[Django is my web programming framework of choice. The following 1.500 words describe what I would add to the core framework in order to make machine-to-machine communication (APIs) for almost every web application a matter of minutes. Abstract I suggest a general method offering a public and private API for existing Django models. New generic [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.djangoproject.com/">Django</a> is my web programming framework of choice. The following 1.500 words describe what I would add to the core framework in order to make machine-to-machine communication (APIs) for almost <em>every</em> web application a matter of minutes.<span id="more-144"></span></p>
<h2>Abstract</h2>
<p>I suggest a general method offering a public and private API for existing Django models. New generic views will simplify data retrieval and modification via different web services in a resource-centric REST architecture, providing model data in formats such as XML, JSON and YAML with very little custom code.</p>
<h2>Implementation</h2>
<p>The most widely used browsers don't support PUT and DELETE in web forms without using AJAX, therefore it is impossible to achieve a pure REST implementation. Nonetheless a more RESTful resource-centric approach makes sense: With a unique hyperlink address for every resource, resource discovery from content becomes much easier. With all resources sharing a common interface, programs written in any language can talk to Django instances in a standardized way. The partial lack of browser support for PUT and DELETE can be compensated by adding an extra hidden field to forms that carries the method information.</p>
<p>The code that tells Django which web service should be provided for which model at which URL will not to be attached to the individual model classes but will live at the view level. There are two reasons for this:</p>
<ol>
<li>REST is only one way of looking at a Django application and therefore should not be part of the underlying model.</li>
<li>There is no one-to-one mapping between resources and models. Resources have more to do with the user interface than with the underlying database structure. Sometimes it will be sufficient to apply the CRUD actions to models, but sometimes there will be the need for more complex resources (e.g. one resource that consists of several related models, service discovery). It is important to me that there is an obvious way of using both the generic views and custom developments consistently in one Django project.</li>
</ol>
<p>I will solve this by writing a general Resource class as an interface. Each method of Resource raises a Http404 exception by default. Custom resources inherit from Resource and may implement the methods __call__ (thus providing the equivalent of current view functions), create, retrieve, list, update, delete, get_create_form and get_update_form (cf. djangocollection). The ModelResource class that covers all the cases where there is a one-to-one mapping between a model and a resource inherits from the class Resource.</p>
<p>When using the ModelResource class we need to be able to set a few options:</p>
<ul>
<li>Which data should be accessible?</li>
<li>Which CRUD actions should be possible?</li>
<li>Which model fields should be visible?</li>
<li>Which type of authentication is required?</li>
<li>How should the output look like (xml, json, html, yaml, ...)?</li>
</ul>
<p>I imagine the urls.py to look like this (similar to <a href="http://groups.google.com/group/django-users/msg/aa70d857b6ad3b76?hl=en">a draft by Jacob Kaplan-Moss</a>):</p>
<div class="igBar"><span id="lpython-2"><a href="#" onclick="javascript:showPlainTxt('python-2'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">PYTHON:</span>
<div id="python-2">
<div class="python">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #0B3BC6;font-weight: bold;">from</span> mysite.<span style="color: black;">polls</span>.<span style="color: black;">models</span> <span style="color: #0B3BC6;font-weight: bold;">import</span> Poll</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #0B3BC6;font-weight: bold;">from</span> django.<span style="color: black;">conf</span>.<span style="color: black;">urls</span>.<span style="color: black;">defaults</span> <span style="color: #0B3BC6;font-weight: bold;">import</span> *</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #0B3BC6;font-weight: bold;">from</span> django.<span style="color: black;">contrib</span> <span style="color: #0B3BC6;font-weight: bold;">import</span> restapi</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">poll_api = <span style="color: black;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; queryset : Poll.<span style="color: black;">objects</span>.<span style="color: black;">all</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>,</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; allowed_operations : <span style="color: black;">&#40;</span>restapi.<span style="color: black;">READ</span>, restapi.<span style="color: black;">UPDATE</span><span style="color: black;">&#41;</span>,</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; expose_fields : <span style="color: black;">&#40;</span><span style="color: #2B9030;">'id'</span>, <span style="color: #2B9030;">'question'</span>, <span style="color: #2B9030;">'pub_date'</span><span style="color: black;">&#41;</span>,</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; authentication_method : restapi.<span style="color: black;">APIKeyAuthentication</span>,</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; output_function : restapi.<span style="color: black;">json_response</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: black;">&#125;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">urlpatterns = patterns<span style="color: black;">&#40;</span><span style="color: #2B9030;">''</span>,</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: black;">&#40;</span>r<span style="color: #2B9030;">'^json/polls/(?:(?P&lt;id&gt;<span style="color: #000099; font-weight: bold;">\d</span>+)/?)?(?:;(?P&lt;noun&gt;<span style="color: #000099; font-weight: bold;">\w</span>+))?/?$'</span>, <span style="color: #2B9030;">'django.contrib.restapi.ModelResource'</span>, poll_api<span style="color: black;">&#41;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: black;">&#41;</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>In order for our resource implementation to be REST-friendly, each resource needs to have a unique URL. If the content format is not specified by the URL and if there is more than one content format per app, looking at the HTTP headers may be sufficient to choose which content to deliver (we could set output_format to restapi.DETECT_FORMAT).</p>
<p>The functionality of the new generic RESTful views will comprise a large part of the functionality of the current generic create_update and list_detail views. This includes the ability to supply the views with a filtered queryset, pagination, response mimetype, allow_empty, post_save_redirect and post_delete_redirect.</p>
<p>In contrast to the current generic views the ModelResource class will not use templates by default. Instead, in order to follow the DRY principle, they could call a user-supplied output function (e.g. xml_response, json_response) depending on which type of response (xml, json, ...) to return. I'm still thinking about how the most elegant solution will look like. I'll be happy to hear suggestions.</p>
<p>Another issue that still needs to be resolved is how to get authentication right. The consensus of ticket #115 seems to be that HTTP Basic Authentication over SSL is "secure enough" but that the risk of people not using SSL is quite high. Both public and private web services will be possible.</p>
<p>Web development shouldn't be monotonous. Setting up APIs can be. I'd like to automate this as far as possible without taking away the freedom to extend or replace the API with more complex solutions.</p>
<h2>Existing Code</h2>
<p>There exists a fair amount of code that might be useful for this project.</p>
<p>There is john@sneeu.com who wrote at ticket #2553:</p>
<blockquote><p>I've written a RESTful API (similar urls to the 'oldforms' Admin), it needs a bit of a tidy up, and a few more tweaks but I'm more than happy for it to be incorporated in to Django in any way.</p></blockquote>
<p>Jason Huggins mentions in the discussion of ticket #115 (Models CRUD via web services):</p>
<blockquote><p>I have a fair enough amount of code already written for this ticket. If possible, I'd like a branch in subversion set up so I can check in my code and we can start talking about real example code.</p></blockquote>
<p>Jacob Kaplan-Moss to whom the ticket is assigned may have started writing some code that can be used for both REST and RPC. He wrote:</p>
<blockquote><p>Jason (and others): if you've got code that's not attached to this ticket or to #356, #547 or #552 please attach it to this one as I'm going to try to get some work done on this Any Day Now™.</p></blockquote>
<p>More recently, Adam Smith has started working on <a href="http://code.google.com/p/django-restful-model-views/">django-restful-model-views</a> which intends to make it easier to create ReSTful Web applications with Django. In the current stage this is still more of a proof-of-concept, but the code written by Adam Smith might turn out to be a good point to start. </p>
<p>The wsgicollection-inspired project <a href="http://code.google.com/p/djangocollection/">djangocollection</a> which provides a set of generic RESTful urls for all the models of a project and a GenericCollection which uses the django generic views illustrates a few interesting and relevant ideas, too.</p>
<p>Before getting started I will talk to those who have written possibly useful code and to the Django community in order to find out how my suggested approach can be improved and how much reusable code already exists.</p>
<h2>Benefits to Django</h2>
<p>There will be a standard interface for applications to communicate with Django projects. Making it easier for Desktop applications to use Django as a server-side backend will encourage Desktop applications to use Django as a backend. Yay.</p>
<p>An API that can return data in JSON format will make AJAX integration much easier — both for the admin app and for Django users who complain about AJAX not being as easy as with competing frameworks.</p>
<p>The value of having a dead easy way to get data in and out of Django databases is obvious. Let's make extending existing applications with a fully-fledged REST API a matter of less than five minutes.</p>
<h2>Success Criteria</h2>
<ol>
<li>A few lines of code in urls.py are sufficient to make model data CRUD-accessible via XML and JSON.</li>
<li>It is possible to create custom API resources that don't correspond directly to models. These should be integrated seamlessly into the rest of the API.</li>
</ol>
<h2>Roadmap</h2>
<ol>
<li>Assess together with those who have already written similar code whether it makes sense to start from scratch. Get feedback from the community on issues such as how ModelResource should generate different output formats and how authentication should look like.</li>
<li>In-depth planning "on paper".</li>
<li>Initialize a restapi branch.</li>
<li>Implement the Resource "interface" class.</li>
<li>Implement the ModelResource class and an elegant way to return output in at least xml and json.</li>
<li>Add authentication.</li>
<li>Write and perform unit tests.</li>
<li>Prepare the code to be merged to trunk. The Django API will likely change before v1.0. Some of the things that will be improved in a possibly backwards-incompatible way and that might play a role for this project are validation, serialization and the authentication framework.</li>
</ol>
<h2>About me</h2>
<p>I'm a 21 year old bachelor student of Cognitive Science at the University of Osnabr&#252;ck in Germany. When I'm not in Osnabr&#252;ck, I live in the small town of Dinkelscherben which is located in Bavaria. After finishing school about two years ago I decided to postpone University and spent the next year developing web applications instead. At that time I had two years of Python experience. Django became — and still is — my web framework of choice.</p>
<p>During that year, I spent quite some time making sure I understood how Django works under the hood. I <a href="http://tinyurl.com/3ak29o">participated</a> in the Django discussion groups, wrote a few patches and submitted a few <a href="http://tinyurl.com/3bfb2q">tickets</a>. My largest Django project to date is the e-learning application Mindpicnic which is fairly popular in Germany.</p>
<p>I have been planning to add a RESTful API to Mindpicnic for about as long as the project exists. I'm committed to seeing this proposal become reality. I believe I would enjoy getting more involved with the Open Source community a lot. </p>
<p class="abstract">My proposal got accepted, the latest source code is available at <a href="http://code.google.com/p/django-rest-interface/">Google Code</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.aiplayground.org/artikel/improving-django/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Optimale Vorhersagen</title>
		<link>http://www.aiplayground.org/artikel/prediction/</link>
		<comments>http://www.aiplayground.org/artikel/prediction/#comments</comments>
		<pubDate>Mon, 05 Mar 2007 02:05:49 +0000</pubDate>
		<dc:creator>Andreas</dc:creator>
				<category><![CDATA[Informatik]]></category>
		<category><![CDATA[Künstliche Intelligenz]]></category>
		<category><![CDATA[Singularität]]></category>

		<guid isPermaLink="false">http://www.aiplayground.org/artikel/prediction/</guid>
		<description><![CDATA[Wenn es allgemeine Methoden gibt, um ausgehend von vergangenen Ereignissen Vorhersagen zu treffen, und wenn man Vorhersagemethoden nach ihrem Erfolg bewerten kann, so gibt es eine Methode f&#252;r Vorhersagen, die besser ist als jede andere. Das Ergebnis von Vorhersagen nach dieser Methode stimmt im Durchschnitt besser mit der Realit&#228;t &#252;berein als das jeder anderen Methode [...]]]></description>
			<content:encoded><![CDATA[<p>Wenn es allgemeine Methoden gibt, um ausgehend von vergangenen Ereignissen Vorhersagen zu treffen, und wenn man Vorhersagemethoden nach ihrem Erfolg bewerten kann, so gibt es eine Methode f&#252;r Vorhersagen, die besser ist als jede andere. Das Ergebnis von Vorhersagen nach dieser Methode stimmt im Durchschnitt besser mit der Realit&#228;t &#252;berein als das jeder anderen Methode -- egal, ob Naturkatastrophen, Bev&#246;lkerungszahlen oder Aktienwerte vorhergesagt werden.</p>
<p><a href="http://www.vetta.org/documents/disSol.pdf">Solomonoffs Theorie der universellen Induktion</a> ist diese Methode. Man k&#246;nnte das Problem der optimalen Vorhersage damit als gel&#246;st betrachten -- w&#228;re Solomonoffs Theorie nur berechenbar. Ein Algorithmus, der unter beschr&#228;nkten Ressourcen -- wozu auch die algorithmische Komplexit&#228;t z&#228;hlen kann -- Vorhersagen trifft, die <a href="http://www.idsia.ch/~juergen/goedelmachine.html">beweisbar besser</a> sind als die jedes anderen denkbaren Algorithmus, ist noch nicht gefunden. Das sollte das zentrale Anliegen des Gebietes der k&#252;nstlichen Intelligenz sein.</p>
<p>Induktive Wissenschaften wie die Physik, die Chemie oder die Astronomie machen nichts anderes, als Daten zu sammeln und anhand der Daten elegante Theorien zu finden, mit denen sich die Zukunft m&#246;glichst exakt vorhersagen l&#228;sst. </p>
<p>Es ist sinnvoller, das Problem der Induktion direkt zu l&#246;sen.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.aiplayground.org/artikel/prediction/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Und es wurde Licht.</title>
		<link>http://www.aiplayground.org/artikel/universal/</link>
		<comments>http://www.aiplayground.org/artikel/universal/#comments</comments>
		<pubDate>Fri, 02 Mar 2007 19:17:06 +0000</pubDate>
		<dc:creator>Andreas</dc:creator>
				<category><![CDATA[Informatik]]></category>
		<category><![CDATA[Philosophie]]></category>
		<category><![CDATA[Physik]]></category>

		<guid isPermaLink="false">http://www.aiplayground.org/artikel/und-es-wurde-licht/</guid>
		<description><![CDATA[Es braucht etwa 100 Zeilen Python-Code, um die Geschichte aller m&#246;glichen berechenbaren Universen zu berechnen. 100 Zeilen, um alles zu berechnen, was je berechnet werden kann. Die Physik unseres Universums ist m&#246;glicherweise berechenbar. PLAIN TEXT PYTHON: I, L, R, S = 0, 1, 2, 3 ENCODING = &#91; #&#160; &#160;(&#34;111110&#34;, &#34;,&#34;), &#160; &#160; &#40;"11110" , [...]]]></description>
			<content:encoded><![CDATA[<p>Es braucht etwa 100 Zeilen Python-Code, um die Geschichte <em>aller m&#246;glichen berechenbaren Universen</em> zu berechnen. 100 Zeilen, um alles zu berechnen, was <a href="http://de.wikipedia.org/wiki/Church-Turing-These">je berechnet werden kann</a>. Die Physik unseres Universums <a href="http://www.idsia.ch/~juergen/computeruniverse.html">ist m&#246;glicherweise berechenbar</a>.</p>
<div class="igBar"><span id="lpython-4"><a href="#" onclick="javascript:showPlainTxt('python-4'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">PYTHON:</span>
<div id="python-4">
<div class="python">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">I, L, R, S = <span style="color: #ff4500;color:#800000;">0</span>, <span style="color: #ff4500;color:#800000;">1</span>, <span style="color: #ff4500;color:#800000;">2</span>, <span style="color: #ff4500;color:#800000;">3</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">ENCODING = <span style="color: black;">&#91;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #979797; font-style: italic;">#&nbsp; &nbsp;(&quot;111110&quot;, &quot;,&quot;),</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: black;">&#40;</span><span style="color: #2B9030;">"11110"</span> , <span style="color: #2B9030;">"S"</span><span style="color: black;">&#41;</span>,</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: black;">&#40;</span><span style="color: #2B9030;">"1110"</span>&nbsp; , <span style="color: #2B9030;">"L"</span><span style="color: black;">&#41;</span>,</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: black;">&#40;</span><span style="color: #2B9030;">"110"</span>&nbsp; &nbsp;, <span style="color: #2B9030;">"R"</span><span style="color: black;">&#41;</span>,</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: black;">&#40;</span><span style="color: #2B9030;">"10"</span>&nbsp; &nbsp; , <span style="color: #2B9030;">"1"</span><span style="color: black;">&#41;</span>,</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #979797; font-style: italic;">#&nbsp; &nbsp;(&quot;0&quot;&nbsp; &nbsp; &nbsp;, &quot;0&quot;),</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: black;">&#93;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #0B3BC6;font-weight: bold;">def</span> to_binary<span style="color: black;">&#40;</span>n<span style="color: black;">&#41;</span>:</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #0B3BC6;font-weight: bold;">return</span> n == <span style="color: #ff4500;color:#800000;">0</span> <span style="color: #0B3BC6;font-weight: bold;">and</span> <span style="color: #2B9030;">"0"</span> <span style="color: #0B3BC6;font-weight: bold;">or</span> to_binary<span style="color: black;">&#40;</span>n&gt;&gt;<span style="color: #ff4500;color:#800000;">1</span><span style="color: black;">&#41;</span>.<span style="color: black;">lstrip</span><span style="color: black;">&#40;</span><span style="color: #2B9030;">"0"</span><span style="color: black;">&#41;</span> + <span style="color: #0B3BC6;">str</span><span style="color: black;">&#40;</span>n&amp;<span style="color: #ff4500;color:#800000;">1</span><span style="color: black;">&#41;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #0B3BC6;font-weight: bold;">def</span> to_decimal<span style="color: black;">&#40;</span>x<span style="color: black;">&#41;</span>:</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #0B3BC6;font-weight: bold;">return</span> <span style="color: #0B3BC6;">sum</span><span style="color: black;">&#40;</span><span style="color: black;">&#91;</span><span style="color: black;">&#40;</span><span style="color: #0B3BC6;">int</span><span style="color: black;">&#40;</span>n<span style="color: black;">&#41;</span> <span style="color: #0B3BC6;font-weight: bold;">and</span> <span style="color: #ff4500;color:#800000;">2</span>**pos <span style="color: #0B3BC6;font-weight: bold;">or</span> <span style="color: #ff4500;color:#800000;">0</span><span style="color: black;">&#41;</span> <span style="color: #0B3BC6;font-weight: bold;">for</span> <span style="color: black;">&#40;</span>pos, n<span style="color: black;">&#41;</span> <span style="color: #0B3BC6;font-weight: bold;">in</span> <span style="color: #0B3BC6;">enumerate</span><span style="color: black;">&#40;</span>x<span style="color: black;">&#91;</span>::-<span style="color: #ff4500;color:#800000;">1</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #0B3BC6;font-weight: bold;">class</span> HashableIntegerList<span style="color: black;">&#40;</span><span style="color: #0B3BC6;">list</span><span style="color: black;">&#41;</span>:</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; </div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #0B3BC6;font-weight: bold;">def</span> <span style="color: #000;">__init__</span><span style="color: black;">&#40;</span><span style="color: #0B3BC6;">self</span>, sequence<span style="color: black;">&#41;</span>:</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0B3BC6;">list</span>.<span style="color: #000;">__init__</span><span style="color: black;">&#40;</span><span style="color: #0B3BC6;">self</span>, <span style="color: black;">&#91;</span><span style="color: #0B3BC6;">int</span><span style="color: black;">&#40;</span>b<span style="color: black;">&#41;</span> <span style="color: #0B3BC6;font-weight: bold;">for</span> b <span style="color: #0B3BC6;font-weight: bold;">in</span> sequence<span style="color: black;">&#93;</span><span style="color: black;">&#41;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; </div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #0B3BC6;font-weight: bold;">def</span> <span style="color: #000;">__str__</span><span style="color: black;">&#40;</span><span style="color: #0B3BC6;">self</span><span style="color: black;">&#41;</span>:</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0B3BC6;font-weight: bold;">return</span> <span style="color: #2B9030;">""</span>.<span style="color: black;">join</span><span style="color: black;">&#40;</span><span style="color: black;">&#91;</span><span style="color: #0B3BC6;">str</span><span style="color: black;">&#40;</span>n<span style="color: black;">&#41;</span> <span style="color: #0B3BC6;font-weight: bold;">for</span> n <span style="color: #0B3BC6;font-weight: bold;">in</span> <span style="color: #0B3BC6;">self</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; </div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #0B3BC6;font-weight: bold;">def</span> <span style="color: #000;">__hash__</span><span style="color: black;">&#40;</span><span style="color: #0B3BC6;">self</span><span style="color: black;">&#41;</span>:</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0B3BC6;font-weight: bold;">return</span> <span style="color: #0B3BC6;">self</span>.<span style="color: #000;">__str__</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>.<span style="color: #000;">__hash__</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #0B3BC6;font-weight: bold;">class</span> TuringMachine:</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; </div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #0B3BC6;font-weight: bold;">def</span> <span style="color: #000;">__init__</span><span style="color: black;">&#40;</span><span style="color: #0B3BC6;">self</span>, rules, tape<span style="color: black;">&#41;</span>:</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0B3BC6;">self</span>.<span style="color: black;">tape</span>&nbsp; &nbsp; = HashableIntegerList<span style="color: black;">&#40;</span>tape<span style="color: black;">&#41;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0B3BC6;">self</span>.<span style="color: black;">state</span>&nbsp; &nbsp;= HashableIntegerList<span style="color: black;">&#40;</span><span style="color: #2B9030;">"0"</span><span style="color: black;">&#41;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0B3BC6;">self</span>.<span style="color: black;">rules</span>&nbsp; &nbsp;= rules</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0B3BC6;">self</span>.<span style="color: black;">stopped</span> = <span style="color: #0B3BC6;">False</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0B3BC6;">self</span>.<span style="color: black;">invalid</span> = <span style="color: #0B3BC6;">False</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0B3BC6;">self</span>.<span style="color: black;">pos</span>&nbsp; &nbsp; &nbsp;= <span style="color: #ff4500;color:#800000;">0</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #0B3BC6;font-weight: bold;">def</span> move<span style="color: black;">&#40;</span><span style="color: #0B3BC6;">self</span>, direction<span style="color: black;">&#41;</span>:</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0B3BC6;font-weight: bold;">if</span> direction == S:</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0B3BC6;">self</span>.<span style="color: black;">stopped</span> = <span style="color: #0B3BC6;">True</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0B3BC6;font-weight: bold;">elif</span> direction == L:</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0B3BC6;font-weight: bold;">if</span> <span style="color: #0B3BC6;">self</span>.<span style="color: black;">pos</span> == <span style="color: #ff4500;color:#800000;">0</span>:</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0B3BC6;">self</span>.<span style="color: black;">tape</span>.<span style="color: black;">insert</span><span style="color: black;">&#40;</span><span style="color: #ff4500;color:#800000;">0</span>, <span style="color: #ff4500;color:#800000;">0</span><span style="color: black;">&#41;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0B3BC6;font-weight: bold;">else</span>:</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0B3BC6;">self</span>.<span style="color: black;">pos</span> -= <span style="color: #ff4500;color:#800000;">1</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0B3BC6;font-weight: bold;">elif</span> direction == R:</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0B3BC6;font-weight: bold;">if</span> <span style="color: #0B3BC6;">self</span>.<span style="color: black;">pos</span> == <span style="color: #0B3BC6;">len</span><span style="color: black;">&#40;</span><span style="color: #0B3BC6;">self</span>.<span style="color: black;">tape</span><span style="color: black;">&#41;</span>-<span style="color: #ff4500;color:#800000;">1</span>:</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0B3BC6;">self</span>.<span style="color: black;">tape</span>.<span style="color: black;">append</span><span style="color: black;">&#40;</span><span style="color: #ff4500;color:#800000;">0</span><span style="color: black;">&#41;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0B3BC6;">self</span>.<span style="color: black;">pos</span> += <span style="color: #ff4500;color:#800000;">1</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #0B3BC6;font-weight: bold;">def</span> step<span style="color: black;">&#40;</span><span style="color: #0B3BC6;">self</span><span style="color: black;">&#41;</span>:</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0B3BC6;font-weight: bold;">try</span>:</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0B3BC6;">self</span>.<span style="color: black;">state</span>, <span style="color: #0B3BC6;">self</span>.<span style="color: black;">tape</span><span style="color: black;">&#91;</span><span style="color: #0B3BC6;">self</span>.<span style="color: black;">pos</span><span style="color: black;">&#93;</span>, <span style="color: #0B3BC6;">dir</span> = <span style="color: #0B3BC6;">self</span>.<span style="color: black;">rules</span><span style="color: black;">&#91;</span><span style="color: black;">&#40;</span><span style="color: #0B3BC6;">self</span>.<span style="color: black;">state</span>, <span style="color: #0B3BC6;">self</span>.<span style="color: black;">tape</span><span style="color: black;">&#91;</span><span style="color: #0B3BC6;">self</span>.<span style="color: black;">pos</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span><span style="color: black;">&#93;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0B3BC6;font-weight: bold;">except</span> <span style="color: #0B3BC6;">KeyError</span>:</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0B3BC6;">self</span>.<span style="color: black;">invalid</span> = <span style="color: #0B3BC6;">True</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0B3BC6;font-weight: bold;">else</span>:</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0B3BC6;">self</span>.<span style="color: black;">move</span><span style="color: black;">&#40;</span><span style="color: #0B3BC6;">dir</span><span style="color: black;">&#41;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #0B3BC6;font-weight: bold;">def</span> run<span style="color: black;">&#40;</span><span style="color: #0B3BC6;">self</span><span style="color: black;">&#41;</span>:</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0B3BC6;font-weight: bold;">while</span> <span style="color: #0B3BC6;font-weight: bold;">not</span> <span style="color: #0B3BC6;">self</span>.<span style="color: black;">stopped</span> <span style="color: #0B3BC6;font-weight: bold;">and</span> <span style="color: #0B3BC6;font-weight: bold;">not</span> <span style="color: #0B3BC6;">self</span>.<span style="color: black;">invalid</span>:</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0B3BC6;">self</span>.<span style="color: black;">step</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #0B3BC6;font-weight: bold;">class</span> UniversalTuringMachine<span style="color: black;">&#40;</span>TuringMachine<span style="color: black;">&#41;</span>:</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; </div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #0B3BC6;font-weight: bold;">def</span> <span style="color: #000;">__init__</span><span style="color: black;">&#40;</span><span style="color: #0B3BC6;">self</span>, tape<span style="color: black;">&#41;</span>:</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0B3BC6;font-weight: bold;">if</span> tape.<span style="color: black;">count</span><span style="color: black;">&#40;</span><span style="color: #2B9030;">"111110"</span><span style="color: black;">&#41;</span> != <span style="color: #ff4500;color:#800000;">1</span>: <span style="color: #0B3BC6;">self</span>.<span style="color: black;">invalid</span> = <span style="color: #0B3BC6;">True</span>; <span style="color: #0B3BC6;font-weight: bold;">return</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; binary_machine_no, data_tape = tape.<span style="color: black;">split</span><span style="color: black;">&#40;</span><span style="color: #2B9030;">"111110"</span><span style="color: black;">&#41;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; rules = <span style="color: #0B3BC6;">self</span>.<span style="color: black;">get_rules</span><span style="color: black;">&#40;</span>binary_machine_no<span style="color: black;">&#41;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; TuringMachine.<span style="color: #000;">__init__</span><span style="color: black;">&#40;</span><span style="color: #0B3BC6;">self</span>, rules, data_tape<span style="color: black;">&#41;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; </div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #0B3BC6;font-weight: bold;">def</span> get_rules<span style="color: black;">&#40;</span><span style="color: #0B3BC6;">self</span>, binary_machine_no<span style="color: black;">&#41;</span>:</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; binary_rules = <span style="color: #2B9030;">"110%s110"</span> % binary_machine_no</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0B3BC6;font-weight: bold;">for</span> <span style="color: black;">&#40;</span>k, v<span style="color: black;">&#41;</span> <span style="color: #0B3BC6;font-weight: bold;">in</span> ENCODING:</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; binary_rules = binary_rules.<span style="color: black;">replace</span><span style="color: black;">&#40;</span>k, v<span style="color: black;">&#41;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; rules = <span style="color: black;">&#123;</span><span style="color: black;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; cur_rule_num = <span style="color: #ff4500;color:#800000;">0</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; tape_state = <span style="color: #ff4500;color:#800000;">0</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; cur_rule_parts = <span style="color: black;">&#91;</span><span style="color: black;">&#93;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0B3BC6;font-weight: bold;">for</span> bin <span style="color: #0B3BC6;font-weight: bold;">in</span> binary_rules:</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0B3BC6;font-weight: bold;">if</span> bin <span style="color: #0B3BC6;font-weight: bold;">in</span> <span style="color: #2B9030;">"LRS"</span>:</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; rule = <span style="color: #2B9030;">""</span>.<span style="color: black;">join</span><span style="color: black;">&#40;</span>cur_rule_parts<span style="color: black;">&#41;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0B3BC6;font-weight: bold;">if</span> rule == <span style="color: #2B9030;">""</span>:&nbsp; rule = <span style="color: #2B9030;">"00"</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0B3BC6;font-weight: bold;">if</span> rule == <span style="color: #2B9030;">"1"</span>: rule = <span style="color: #2B9030;">"01"</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; int_state = HashableIntegerList<span style="color: black;">&#40;</span>to_binary<span style="color: black;">&#40;</span>cur_rule_num<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; rules<span style="color: black;">&#91;</span><span style="color: black;">&#40;</span>int_state, tape_state<span style="color: black;">&#41;</span><span style="color: black;">&#93;</span> = <span style="color: black;">&#40;</span>HashableIntegerList<span style="color: black;">&#40;</span>rule<span style="color: black;">&#91;</span>:-<span style="color: #ff4500;color:#800000;">1</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span>, <span style="color: #0B3BC6;">int</span><span style="color: black;">&#40;</span>rule<span style="color: black;">&#91;</span>-<span style="color: #ff4500;color:#800000;">1</span>:<span style="color: black;">&#93;</span><span style="color: black;">&#41;</span>, <span style="color: #0B3BC6;">eval</span><span style="color: black;">&#40;</span>bin<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cur_rule_parts = <span style="color: black;">&#91;</span><span style="color: black;">&#93;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0B3BC6;font-weight: bold;">if</span>&nbsp; &nbsp;tape_state == <span style="color: #ff4500;color:#800000;">0</span>: tape_state = <span style="color: #ff4500;color:#800000;">1</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0B3BC6;font-weight: bold;">elif</span> tape_state == <span style="color: #ff4500;color:#800000;">1</span>: tape_state = <span style="color: #ff4500;color:#800000;">0</span>; cur_rule_num += <span style="color: #ff4500;color:#800000;">1</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0B3BC6;font-weight: bold;">else</span>:</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cur_rule_parts.<span style="color: black;">append</span><span style="color: black;">&#40;</span>bin<span style="color: black;">&#41;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0B3BC6;font-weight: bold;">return</span> rules</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #0B3BC6;font-weight: bold;">def</span> universal_dovetailer<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; machines = <span style="color: black;">&#91;</span><span style="color: black;">&#93;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; num_steps = <span style="color: #ff4500;color:#800000;">0</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #0B3BC6;font-weight: bold;">while</span> <span style="color: #0B3BC6;">True</span>:</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0B3BC6;font-weight: bold;">for</span> machine <span style="color: #0B3BC6;font-weight: bold;">in</span> machines:</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0B3BC6;font-weight: bold;">if</span> machine.<span style="color: black;">invalid</span> <span style="color: #0B3BC6;font-weight: bold;">or</span> machine.<span style="color: black;">stopped</span>:</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; machines.<span style="color: black;">remove</span><span style="color: black;">&#40;</span>machine<span style="color: black;">&#41;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0B3BC6;font-weight: bold;">else</span>:</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; machine.<span style="color: black;">step</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; new_machine = UniversalTuringMachine<span style="color: black;">&#40;</span>to_binary<span style="color: black;">&#40;</span>num_steps<span style="color: black;">&#41;</span> + <span style="color: #2B9030;">"1"</span><span style="color: black;">&#41;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; machines.<span style="color: black;">append</span><span style="color: black;">&#40;</span>new_machine<span style="color: black;">&#41;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; num_steps += <span style="color: #ff4500;color:#800000;">1</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #0B3BC6;font-weight: bold;">if</span> __name__ == <span style="color: #2B9030;">"__main__"</span>:</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; universal_dovetailer<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>Was, wenn sich erweist, dass die am besten mit der Realit&#228;t &#252;bereinstimmenden physikalischen Theorien die sind, die <a href="http://de.wikipedia.org/wiki/Berechenbarkeit">berechenbar</a> sind? Wir k&#246;nnen simulieren, wie Billardkugeln zusammensto&#223;en und welche sich wohin bewegt. Ein simulierter Zusammensto&#223; ist kein echter Zusammensto&#223;. F&#252;r uns. F&#252;r ein simuliertes Wesen? F&#252;hrt die Simulation eines bewussten physikalischen Systems zu Bewusstsein?</p>
<p>Die Individualit&#228;t einer Person ist vom Muster des Zusammenspiels der Materie abh&#228;ngig, nicht von der Materie selbst. Die Atome jeder Zelle werden nach der Geburt eines Menschen viele Male ausgetauscht. Quantenphysikalisch gesehen sind zwei Teilchen einer Art sowieso nicht nur nicht unterscheidbar, sondern identisch. Wenn alle Protonen eines K&#246;rpers durch "andere" Protonen ersetzt werden, so hat das den Zustand nicht ver&#228;ndert. Teilchen <em>haben</em> keine Identit&#228;t.</p>
<p>Wenn die Physik unseres Universums berechenbar ist oder es keinen subjektiven Unterschied zwischen Bewusstsein und der Simulation von Bewusstsein gibt, so resultiert die Ausf&#252;hrung eines solchen Programms (ein "Universal Dovetailer") in <em>allen bewussten Erfahrungen</em>, die je ein Wesen haben kann. Unabh&#228;ngig davon, wie man "Wesen" oder "bewusste Erfahrung" definiert. </p>
<p>Aber: Ist die Erfahrung von Bewusstsein auch unabh&#228;ngig davon, ob bei der Ausf&#252;hrung des Programms, die — wie die Ausf&#252;hrung jedes Programms — in diskreten Schritten abl&#228;uft, ein Rechenschritt pro Nanosekunde oder ein Rechenschritt pro Jahr ausgef&#252;hrt wird? Auch dann, wenn w&#228;hrend des Jahres der Computer, auf dem das Programm ausgef&#252;hrt wird, ausgetauscht und nach Tokio verfrachtet wird? Auch dann, wenn das Ergebnis des Rechenschritts ein Jahr sp&#228;ter nicht direkt berechnet wird, sondern bei der Berechnung aller Permutationen der Sequenz von 0en und 1en auftaucht, die die L&#228;nge des erwarteten Rechenergebnisses hat?</p>
<p>Stathis Papaiaonnou <a href="http://www.mail-archive.com/singularity@v2.listbox.com/msg00436.html">schreibt</a> an die <a href="http://www.agiri.org/email/">Singularity-Mailingliste</a>:</p>
<blockquote><p>If you look at it the right way, anything could be a computation. This has been given by John Searle as a reductio ad absurdum against computationalism, and explored by several other authors (eg. Hilary Putnam, David Chalmers, Greg Egan). The usual counterargument is that in order to map a computation onto an arbitrary physical process, the mapping function must contain the computation already, but this is only significant for an external observer. The inhabitants of a virtual environment will not suddenly cease being conscious if all the manuals showing how an external observer might interpret what is going on in the computation are lost; it matters only that there is some such possible interpretation. Moreover, it is possible to map many computations to the one physical process. In the limiting case, a single state, perhaps the null state, can be mapped onto all computations.</p></blockquote>
<p>Welche Art von Kontinuit&#228;t ist f&#252;r bewusste Erfahrungen n&#246;tig?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.aiplayground.org/artikel/universal/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Cognitive Science in Osnabr&#252;ck</title>
		<link>http://www.aiplayground.org/artikel/coxi/</link>
		<comments>http://www.aiplayground.org/artikel/coxi/#comments</comments>
		<pubDate>Wed, 28 Feb 2007 15:28:45 +0000</pubDate>
		<dc:creator>Andreas</dc:creator>
				<category><![CDATA[Cognitive Science]]></category>
		<category><![CDATA[Informatik]]></category>
		<category><![CDATA[Mathematik]]></category>
		<category><![CDATA[Neurobiologie]]></category>

		<guid isPermaLink="false">http://www.aiplayground.org/artikel/cognitive-science-in-osnabrueck/</guid>
		<description><![CDATA[Was ich gerne vor Beginn meines Studiums in Osnabr&#252;ck gewusst h&#228;tte. Unter anderem: Wie das erste Semester aussieht. Was man in den einzelnen F&#228;chern lernt. Wer das Studium nach zwei Semestern abbrechen wird. Wie die Bachelor-Note zustande kommt. Was Cognitive-Science-Studenten nach dem Studium machen. Bonus: Zusammenfassungen der Vorlesungen, Mitschriften und Beispielaufgaben. Lies weiter und du [...]]]></description>
			<content:encoded><![CDATA[<p>Was ich gerne vor Beginn meines Studiums in Osnabr&#252;ck gewusst h&#228;tte.</p>
<p>Unter anderem: Wie das erste Semester aussieht. Was man in den einzelnen F&#228;chern lernt. Wer das Studium nach zwei Semestern abbrechen wird. Wie die Bachelor-Note zustande kommt. Was Cognitive-Science-Studenten nach dem Studium machen. Bonus: Zusammenfassungen der Vorlesungen, Mitschriften und Beispielaufgaben.</p>
<p>Lies weiter und du erf&#228;hrst, ob du Cognitive Science studieren willst und wie du das erste Semester &#252;berstehst.<span id="more-53"></span></p>
<p class="centerimage"><img src='http://www.aiplayground.org/wp-content/uploads/2007/02/logouosblue.gif' alt='logouosblue.gif' /></p>
<h2>&#220;bersicht</h2>
<ol>
<li><a href="#1">Cognitive Science</a></li>
<li><a href="#2">Osnabr&#252;ck</a></li>
<li><a href="#3">Der Stundenplan</a></li>
<li><a href="#4">Stud.IP</a></li>
<li><a href="#6">Mathematik</a></li>
<li><a href="#7">Informatik</a></li>
<li><a href="#8">Neurobiologie</a></li>
<li><a href="#9">Statistik + Empirical Methods</a></li>
<li><a href="#10">Linguistik</a></li>
<li><a href="#11">Foundations of Cognitive Science</a></li>
<li><a href="#12">Logik</a></li>
<li><a href="#5">Die Bachelor-Note</a></li>
<li><a href="#13">Noch Fragen?</a></li>
</ol>
<p class="centerimage"><img src='http://www.aiplayground.org/wp-content/uploads/2007/02/logouosblue.gif' alt='logouosblue.gif' /></p>
<h2 id="1">Cognitive Science</h2>
<h3>Was ist Cognitive Science?</h3>
<p>Eine der ersten Vorlesungen des Studiengangs hat den Titel "What is Cognitive Science?". Wer meint, definitiv zu wissen, f&#252;r was er sich da entschieden hat, erf&#228;hrt in einem der ersten Slides von Kai-Uwe K&#252;hnberger:</p>
<p class="centerimage"><img src='http://www.aiplayground.org/wp-content/uploads/2007/02/whatiscognitivescience.gif' alt='What is Cognitive Science?' style="border: 0;" /><br />
<span style="color: #aaa; font-size: 0.8em; line-height: 0.9em">&copy; Kai-Uwe K&#252;hnberger</span>
</p>
<p>Cognitive Science ist die Wissenschaft, die versucht, zu verstehen, wie unser Gehirn funktioniert. Kognitive F&#228;higkeiten wie Wahrnehmung, Denken, Lernen, Motorik und Sprache werden untersucht und modelliert. Das menschliche Gehirn ist das komplexeste System des uns bekannten Universums. Um dieses System auch nur ein kleines bisschen zu verstehen, gen&#252;gt es nicht, sich aus nur einer Richtung anzun&#228;hern. Cognitive Science ist interdisziplin&#228;r: Eine zentrale Rolle spielen Informatik, Mathematik, Neurowissenschaft, Psychologie, Linguistik und Philosophie.</p>
<p>Erwarte nicht, dass irgendjemand aus deinem Bekanntenkreis wei&#223;, was Cognitive Science ist. Solche Dialoge stehen auch dir bevor:</p>
<blockquote><p>
<strong>"Ich studiere Kognitionswissenschaft."</strong><br />
"Du studierst was? Kommunikationswissenschaft?"<br />
<strong>"Kognitionswissenschaft."</strong><br />
"Konditionswissenschaft?"
</p></blockquote>
<h3>F&#252;r wen ist das Studium?</h3>
<p>Cognitive Science ist dein Studiengang, wenn ...</p>
<ul>
<li>du im Bereich der k&#252;nstlichen Intelligenz arbeiten oder forschen willst, Studieng&#228;nge wie Mathe oder Informatik dir aber zu allgemein (zu wenig Fokus auf das Verst&#228;ndnis von Intelligenz) und zu spezifisch (Herangehensweise auf ein Wissenschaftsgebiet beschr&#228;nkt) sind.</li>
<li>dich die kognitiven F&#228;higkeiten des menschlichen Gehirns faszinieren und du etwas in der Richtung machen willst, aber noch nicht wei&#223;t, was.</li>
<li>du einen anspruchsvollen Studiengang mit obligatorischem Auslandssemester suchst, den nette und interessante Leute studieren.</li>
</ul>
<p>Studiere besser etwas anderes, wenn ...</p>
<ul>
<li>du Mathe nicht magst.</li>
<li>du kein Interesse an Informatik hast.</li>
<li>du Psychologie studieren wolltest, aber der NC im Weg stand.</li>
<li>du dich auf das faule Studentenleben freust.</li>
<li>dich acht Pr&#252;fungen in zwei Wochen abschrecken.</li>
<li>dir viel an einem gut bezahlten Job liegt.</li>
<li>Initiative nicht dein Ding ist.</li>
</ul>
<p>Ich zitiere <a href="http://www-lehre.inf.uos.de/~btenberg/home.html">Bastian Tenbergen</a>, der den CogSci-Bachelor inzwischen hinter sich hat und nun <em>Human Computer Interaction</em> an der Oswego State University in New York studiert:</p>
<blockquote><p>
Generell gilt: Cognitive Science ist sau hart. Aber daf&#252;r habt ihr schon nach drei Jahren genug Wissen, um mit anderen, themenverwandten "Vollblutwissenschaftlern" mehr als mithalten zu k&#246;nnen. [...] Aber keine Angst vor der Herausforderung — alle Kommilitonen sind freundlich und hilfsbereit und es gibt viele Interessante Hilfe-Seiten — von CogScis — f&#252;r CogScis.
</p></blockquote>
<p>Und, einige Zeilen sp&#228;ter:</p>
<blockquote><p>
In meinem Semester haben ca. 110 Leute angefangen (es gibt ja auch keine Maximalzahl von Pl&#228;tzen, die vergeben werden...). Nach dem ersten Jahr waren es nur noch knapp 50. Jetzt sind in meinem Semester nur noch knapp 40. Ein Jahr sp&#228;ter war ich Tutor f&#252;r die *neuen* Ersties und habe die Organisationswoche und den Kennenlern-Trip nach Lutter organisiert (mit Hilfe von einigen lieben Freunden, versteht sich). Es haben 85 Leute angefangen. Jetzt sind noch knapp 50 &#252;brig.
</p></blockquote>
<p>Eines sollte man bei all den Vorwarnungen nicht vergessen:</p>
<blockquote><p>
Mit Interesse und Spa&#223; an der Sache ist das Studium schaffbar.
</p></blockquote>
<p class="centerimage"><a href='http://www.aiplayground.org/wp-content/uploads/2007/02/coxi_06.JPG' title='Die Erstsemester 2006'><img src='http://www.aiplayground.org/wp-content/uploads/2007/02/coxi_06_small.JPG' alt='Die Erstsemester 2006' /></a></p>
<h3>Was mache ich nach dem Studium?</h3>
<p>Nach dem Bachelorstudium stehen im Grunde zwei M&#246;glichkeiten zur Wahl:</p>
<ol>
<li>Der Masterstudiengang Cognitive Science in Osnabr&#252;ck</li>
<li>Ein Masterstudiengang in einem <a href="http://www.cogsci.uni-osnabrueck.de/~fachschaft/cdb/index.php/countries/">verwandten Fach</a> an einer anderen Universit&#228;t (bei einigen F&#228;chern nur im Ausland m&#246;glich): Informatik, Neuroinformatik, Neuroscience, Computational Neuroscience, Linguistik, Computerlinguistik, Cognitive/Biological Psychology, Artificial Intelligence, Logik, Robotik, ...</li>
</ol>
<p>Etwa 10 Studenten pro Jahrgang w&#228;hlen die erste Option, die meisten Studenten -- etwa 40 sind dann noch &#252;brig -- die zweite. Das liegt einerseits daran, dass der Abschluss <em>Cognitive Science</em> bislang in Deutschland, auch bei Personalchefs, kaum bekannt ist und andererseits daran, dass es sinnvoll ist, sich nach den Grundlagen in allen m&#246;glichen Bereichen in eine Richtung zu spezialisieren (ansatzweise geschieht das auch schon w&#228;hrend des Bachelorstudiums).</p>
<h3>Ja, aber was mache ich <em>danach</em>?</h3>
<p>Das h&#228;ngt stark von der Richtung ab, in die du dich spezialisierst. F&#252;nf Minuten <a href="http://www.google.com/search?hl=en&#038;q=%28cv%7Clebenslauf%7C%22curriculum+vitae%22%29+bachelor+%22cognitive+science%22+osnabr%C3%BCck&#038;btnG=Search">Googeln</a> haben haben ergeben, dass ehemalige Bachelor-Studenten besch&#228;ftigt sind als:</p>
<ul>
<li>Scientist at the Center for Environmental Systems Research</li>
<li>Researcher at the Fraunhofer Insitute IAIS</li>
<li>Assistant Professor / Sen. Researcher at the Institute of Computer Science, Multimedia and Applications Augsburg</li>
<li>Postgraduate Student of Artificial Intelligence at the Universitat de Barcelona</li>
<li>PhD student Psychology and Neuroscience at the Duke University, USA</li>
<li>PhD student Neural and Behavioural Sciences at the MPI for Biological Cybernetics</li>
<li>PhD student at Biopsychology lab, TU Dresden</li>
<li>PhD student at the Database and Information Systems Department, Max-Planck Institute Saarbr&#252;cken</li>
</ul>
<p>Viele haben vor, in die Forschung zu gehen. (Ich auch.)</p>
<p>Vor drei Jahren sagte der damalige Kultusminister der USA, Richard Riley:</p>
<blockquote><p>None of the top 10 jobs that will exist in 2010 exist today. Those jobs will require technology that’s still being developed. The most important thing a student can do today is learn to learn.</p></blockquote>
<p class="centerimage"><img src='http://www.aiplayground.org/wp-content/uploads/2007/02/logouosblue.gif' alt='logouosblue.gif' /></p>
<h2 id="2">Osnabr&#252;ck</h2>
<h3>Das Umfeld</h3>
<p>Bislang ist die Uni Osnabr&#252;ck die einzige in Deutschland, die Cognitive Science als Bachelorstudiengang anbietet. Im Wintersemester 2006 waren wir etwa 80 Erstsemester -- nach Abzug all derjeniger, die sich nur eingeschrieben haben und danach nichts mehr unternommen haben. Ich kann nicht beurteilen, wie es an anderen Universit&#228;ten ist, aber in Osnabr&#252;ck ist der Zusammenhalt der Coxis verglichen mit anderen Studieng&#228;ngen etwas Besonderes. Die Drittsemester organisieren eine Einf&#252;hrungswoche, eine Fahrt ins Harz (<a href="http://www.jan-wuelfing.de/lutter/">Lutter</a>), eine Kneipenrally und das Coxi-T-Shirt und sind auch sonst einigerma&#223;en hilfreich. Wenn in der Cafeteria an einem Tisch 20 Leute sitzen, kann man davon ausgehen, dass es Coxis sind.</p>
<p class="centerimage"><a href='http://flickr.com/photos/65817306@N00/69319887/' title='Osnabr&#252;ck'><img src='http://www.aiplayground.org/wp-content/uploads/2007/02/osnabrueck1.jpg' alt='Osnabr&#252;ck' /></a></p>
<h3>Zugangsvoraussetzungen</h3>
<p>Es gibt zwei Zugangsvoraussetzungen: Englischkenntnisse und Mathekenntnisse. Englischkenntnisse hat der internationale Studiengang schon immer vorausgesetzt, die Forderung nach dem Nachweis von Mathekenntnissen ist dagegen neu f&#252;r die Studienanf&#228;nger im Wintersemester 2008.</p>
<p>Folgende Englischkenntnisse sind n&#246;tig:</p>
<ul>
<li>Sechs Jahre Schulenglisch mit einer Mindestdurchschnittsnote von 3,0 in den letzten beiden Schuljahren<br />
- <strong>oder</strong> -</li>
<li>Mindestens 79 Punkte in einem internetbasierten TOEFL-Test<br />
- <strong>oder</strong> -</li>
<li>In besonderen F&#228;llen: Dinge wie Auslandsaufenthalte, zweisprachiges Elternhaus, IELTS/CPE/CAE-Tests etc.</li>
</ul>
<p>Au&#223;erdem sind folgende Mathekenntnisse n&#246;tig:</p>
<ul>
<li>Eine Durchschnittsnote von mindestens 7 Punkten im Mathe-Leistungskurs in den letzten beiden Schuljahren<br />
- <strong>oder</strong> -</li>
<li>Eine Durchschnittsnote von mindestens 9 Punkten im Mathe-Grundkurs in den letzten beiden Schuljahren</li>
</ul>
<p>Wenn du aus der Schule Vorkenntnisse in Biologie (Aufbau und Funktionsweise von Nervenzellen) oder Informatik (Suchalgorithmen, B&#228;ume, etc.) hast und vielleicht noch gut Englisch sprichst, macht das dein Studium einfacher. Mit etwas Arbeitsaufwand wird dein Studium aber auch ohne besondere Vorkenntnisse klappen.</p>
<p class="centerimage"><a href='http://de.wikipedia.org/wiki/Bild:AVZ_UniOsnabrueck.jpg' title='Das AVZ-Geb&#228;ude am Westerberg. Hier befinden sich die hervorragende Mensa und das Cognitive-Science-Stockwerk'><img src='http://www.aiplayground.org/wp-content/uploads/2007/02/avz_small.jpg' alt='Das AVZ-Geb&#228;ude am Westerberg. Hier befinden sich die hervorragende Mensa und das Cognitive-Science-Stockwerk' /></a>
</p>
<p class="centerimage"><img src='http://www.aiplayground.org/wp-content/uploads/2007/02/logouosblue.gif' alt='logouosblue.gif' /></p>
<h2 id="3">Der Stundenplan</h2>
<p>Mit 32 Semesterwochenstunden entsprach mein Stundenplan f&#252;r das erste Semester dem der meisten anderen Erstsemester. Theoretisch k&#246;nnen Mathematik und/oder Informatik auch erst im dritten Semester belegt werden, in der Praxis ist es zwecks kurzer Studiendauer eine gute Idee, beides schon im ersten Semester zu versuchen. Viel Freizeit bleibt dann nicht mehr. Neben <em>Foundations of Cognitive Science</em> ist <em>Erkenntnistheorie I</em> die einzige optionale Vorlesung, die auch von vielen Erstsemestern belegt wurde.</p>
<p class="centerimage"><a href='http://www.aiplayground.org/wp-content/uploads/2007/02/bild-7.png' title='Coxi Stundenplan'><img src='http://www.aiplayground.org/wp-content/uploads/2007/02/bild-7.png' alt='Coxi Stundenplan' width="100%" /></a></p>
<p><strong>Tipp:</strong> Du musst nicht alle Vorlesungen und &#220;bungen besuchen. Wenn ein ausf&#252;hrliches Skript existiert, kann es effektiver sein, sich selbst&#228;ndig mit dem Stoff zu befassen statt -- meist passiv -- im Vorlesungssaal zu sitzen. Besonders in Statistik kann ich diese Vorgehensweise empfehlen.</p>
<p>Ich schreibe sp&#228;ter noch ausf&#252;hrlicher &#252;ber die einzelnen F&#228;cher. <strong>Wichtig</strong>: Das sind lediglich die F&#228;cher des ersten Semesters. Ein umfassenderes Bild vermitteln <a href="http://cogsci.uni-osnabrueck.de/de/cogsci/bachelor/subjectplans">die offiziellen &#220;bersichtspl&#228;ne des Bachelor-Studiums</a>. Mehr zu den Inhalten fortgeschrittener Kurse findest du im <a href="http://wiki.stuhlmueller.info/Cognitive_Science">Cognitive Science-Wiki</a>.</p>
<p class="centerimage"><img src='http://www.aiplayground.org/wp-content/uploads/2007/02/logouosblue.gif' alt='logouosblue.gif' /></p>
<h2 id="4">Stud.IP</h2>
<p>Die Organisation des Studiums l&#228;uft &#252;ber das Online-System <a href="https://studip.rz.uos.de/index.php">Stud.IP</a> ab. Hier kann man sich f&#252;r Vorlesungen und &#220;bungen eintragen, Klausur- und andere Termine erfahren, die Slides und Skripte zu den Vorlesungen herunterladen (<strong>wichtig!</strong>) und Klausurergebnisse erfahren. Angeblich ist das Verzeichnis der Lehrveranstaltungen unter <a href="http://www.cogsci.uni-osnabrueck.de/">cogsci.uni-osnabrueck.de</a> noch aktueller und zuverl&#228;ssiger als das im Stud.IP, w&#228;hrend des ersten Semesters ist mir das allerdings nicht aufgefallen.</p>
<p><a href='http://www.aiplayground.org/wp-content/uploads/2007/02/bild-8.png' title='Stud.IP'><img src='http://www.aiplayground.org/wp-content/uploads/2007/02/studip_small.jpg' alt='Stud.IP' /></a></p>
<p class="centerimage"><img src='http://www.aiplayground.org/wp-content/uploads/2007/02/logouosblue.gif' alt='logouosblue.gif' /></p>
<h2 id="6">Mathematik</h2>
<p>Ich habe die Vorlesung <strong>Mathematik I</strong> bei Prof. Dr. Peter Meyer-Nieberg besucht.</p>
<p class="centerimage">
<a href='http://www.aiplayground.org/wp-content/uploads/2007/02/algorithmen_hoerer_2006.jpg' title='Die Zuh&#246;rer der Vorlesungen Mathe und Algorithmen'><img src='http://www.aiplayground.org/wp-content/uploads/2007/02/algorithmen_hoerer_2006_small.jpg' alt='Die Zuh&#246;rer der Vorlesungen Mathe und Algorithmen' /></a><br />
* <span style="color: #bbb; font-size: 0.7em; line-height: 0.8em">Okay, das hier ist ein Foto der Zuh&#246;rer der InfoA-Veranstaltung. Ich konnte kein Bild der Mathe-Veranstaltung finden und die Schnittmenge Mathe I - Info A ist sehr gro&#223;.</span>
</p>
<h3>Was du lernst</h3>
<p>Die Vorlesung baut auf der Schulmathematik auf -- oder, besser: Die Vorlesung baut all das, was in der Schule gelehrt wurde, aus elementaren Bestandteilen auf. Und baut dann noch ein paar Stockwerke h&#246;her. Die Themen des 128-seitigen Skripts:</p>
<ol>
<li>
    Grundlagen</p>
<ol>
<li>K&#246;rper</li>
<li>Kombinatorik</li>
<li>Reelle und komplexe Zahlen</li>
</ol>
</li>
<li>
    Gleichungssysteme und Vektorr&#228;ume</p>
<ol>
<li>Vektorr&#228;ume und Matrizen</li>
<li>Der Gau&#223;-Algorithmus, lineare Gleichungssysteme</li>
<li>Lineare Unabh&#228;ngigkeit von Vektoren, Basen</li>
<li>Quadratische Matrizen</li>
<li>Determinanten</li>
<li>Direkte Summen und Normalformen</li>
</ol>
</li>
<li>
    Funktionen einer reellen Ver&#228;nderlichen</p>
<ol>
<li>Grenzwerte von Funktionen und Folgen</li>
<li>Unendliche Reihen</li>
<li>Stetigkeit</li>
<li>Differenzierbarkeit</li>
<li>Integration</li>
<li>Elementare Differentialgleichungen</li>
</ol>
</li>
</ol>
<p>Bei keinem Skript ist das Verh&#228;ltnis <em>Wissen pro Seite</em> h&#246;her als bei dem wortsparenden Mathe-Skript. Antworten auf Fragen wie "Was bedeutet das?" oder "Wozu ist das gut?" sind in der Aneinanderreihung von S&#228;tzen, Lemmas und Beweisen nicht zu finden.</p>
<h3>Die Vorlesungen</h3>
<p>Ohne Vorbereitung sind die Vorlesungen teilweise nicht ganz zu verstehen. Ich habe mir im ersten Semester die Vorlesungen angeh&#246;rt ohne zuvor den entsprechenden Abschnitt im Skript zu lesen und habe danach zu Hause den Abschnitt in f&#252;r mich sinnvoller Form zusammengefasst. Diese Vorgehensweise funktioniert, ist aber nicht optimal. Es k&#246;nnte sinnvoller sein, sich die Inhalte vor den Vorlesungen anzusehen um so mehr von den Erl&#228;uterungen w&#228;hrend der Vorlesung mitzunehmen.</p>
<h3>Die &#220;bungen</h3>
<p>Die &#220;bungen bei Prof. Dr. Peter Meyer-Nieberg entsprechen im Stil den Vorlesungen. Das hei&#223;t: Die L&#246;sungen der f&#252;r die jeweilige &#220;bung vorgesehenen Aufgaben (die <em>nicht</em> zuvor zu Hause bearbeitet wurden) werden der Reihe nach und mit wenigen Erkl&#228;rungen an die Tafel geschrieben. Stell Fragen -- wenn du etwas nicht verstehst, verstehen es viele andere auch nicht, sagen aber nichts.</p>
<h3>Die Hausaufgaben</h3>
<p>Jede Woche gibt es ein Hausaufgabenblatt, das in Gruppen zu je drei Studenten zu bearbeiten ist. Die Aufgaben sind schwierig — schwieriger als die meisten Klausuraufgaben. Voraussetzung f&#252;r die Zulassung zur Klausur ist es, bei den Hausaufgabenbl&#228;ttern insgesamt mindestens 50% der erreichbaren Punkte zu sammeln. Das ist machbar. Wer Probleme mit einem Blatt hat, kann das Mathe-Tutorium besuchen, bei dem es Tipps zur L&#246;sung der Aufgaben geben soll. (In Notf&#228;llen: <a href="mailto:andreas@aiplayground.org">Mail</a>)</p>
<h3>Die Klausuren</h3>
<p>Du wirst drei Klausuren schreiben: Eine Hauptklausur, die die Endnote bestimmt, und zwei Probeklausuren, deren Bestehen Voraussetzung f&#252;r die Zulassung zur Endklausur ist und bei der Bonuspunkte f&#252;r die Endklausur gesammelt werden k&#246;nnen. Die Probeklausuren entsprechen im Schwierigkeitsgrad der Endklausur. Die Aufgaben aus dem Bereich der linearen Algebra werden <a href="http://www.aiplayground.org/wp-content/uploads/2007/02/la_loesung.pdf">so oder so &#228;hnlich</a> aussehen, die Aufgaben aus der Analysis <a href="http://www.aiplayground.org/wp-content/uploads/2007/02/an_loesungen.pdf">eher so</a>.</p>
<p>Wer die Klausuren der Schulzeit schwierig fand oder gar keinen Mathe-LK hatte, wird viel Zeit in den Mathe-Schein investieren m&#252;ssen. Wenn du das erste Mal in der Mathe-Vorlesung sitzt, schau dir deine beiden Nachbarn gut an. Einer von beiden wird die Vorlesung ein Jahr sp&#228;ter noch einmal belegen.</p>
<p><strong>Tipp</strong>: Die Nachschreibeklausur z&#228;hlt in Mathe als Freiversuch. Das hei&#223;t: Zulassungsvoraussetzungen wie das Bestehen der Probeklausuren oder das Abgeben der Hausaufgaben gibt es hier <em>nicht</em>. (Die Tatsache, dass das im Wintersemester 2006 der Fall war, hei&#223;t nicht, dass das weiterhin so sein muss. Besser nachfragen.)</p>
<h3>Hilfreiches</h3>
<ul>
<li>Der Mathe-Vorkurs "Einf&#252;hrung in die mathematische Begriffsbildung". Hingehen!</li>
<li>Das Buch <a href="http://www.amazon.de/Lineare-Algebra-f%C3%BCr-erste-Semester/dp/3827372070">Lineare Algebra f&#252;r das erste Semester</a></li>
<li><a href="http://www.mia.uni-saarland.de/Teaching/MFI03/mfi1scriptmain.pdf">Mathematik f&#252;r Informatiker I (Skript, Uni Saarland)</a></li>
<li>&#220;bersichtsbl&#228;tter mit allen wichtigen Formeln (bald online)</li>
</ul>
<p class="centerimage"><img src='http://www.aiplayground.org/wp-content/uploads/2007/02/logouosblue.gif' alt='logouosblue.gif' /></p>
<h2 id="7">Informatik</h2>
<p>Ich habe die Vorlesung <strong>Informatik A: Algorithmen</strong> bei Prof. Dr. Oliver Vornberger besucht.</p>
<p class="centerimage"><a href='http://www.aiplayground.org/wp-content/uploads/2007/02/algo_vorlesung.jpg' title='Prof. Dr. Oliver Vornberger'><img src='http://www.aiplayground.org/wp-content/uploads/2007/02/algo_vorlesung_small1.jpg' alt='Prof. Dr. Oliver Vornberger' /></a></p>
<h3>Was du lernst</h3>
<p>Wer keine Vorkenntnisse hat, lernt zun&#228;chst, die Kommandozeile unter Linux zu benutzen, dann, den Editor vi aufzurufen und zu benutzen, damit Java-Programme zu schreiben und beim Programmieren verschiedene Konzepte der Informatik anzuwenden. Die wichtigsten Punkte aus dem Lehrplan:</p>
<ol>
<li>Die Kommandozeile unter Linux</li>
<li>Der Editor vi</li>
<li>Datentypen in Java</li>
<li>Arrays</li>
<li>Klassenmethoden</li>
<li>Rekursion</li>
<li>Komplexit&#228;t, Verifikation, Terminierung</li>
<li>Sortieren</li>
<li>Objektorientierte Programmierung</li>
<li>Abstrakte Datentypen</li>
<li>Hashing</li>
<li>Graphen</li>
</ol>
<h3>Die Vorlesungen</h3>
<p>Die Vorlesungen bei Prof. Dr. Oliver Vornberger waren die besten Vorlesungen des ersten Semesters: Gut vorbereitet, verst&#228;ndlich und unterhaltsam. Wer nicht in das Informatik-Geb&#228;ude am Westerberg kommen konnte oder wollte, konnte die Vorlesung auch per Live-&#220;bertragung aus der Innenstadt oder von zu Hause aus verfolgen (wobei der Internet-Livestream &#246;fters nicht funktionierte als schon). Sehr hilfreich sind auch die <a href="http://www-lehre.inf.uos.de/~ainf/2005/Real/index.html">Video-Downloads fr&#252;herer Vorlesungen</a>. Zu Hause im Bett liegend die Vorlesung zu verfolgen ist toll.</p>
<p>Das Skript ist ausf&#252;hrlich genug, um f&#252;r die Vorbereitung der Klausuren keine weiteren eigenen Mitschriften n&#246;tig zu machen.</p>
<p>Bei der Umfrage zum Ende der Vorlesungen (<a href="http://www-lehre.inf.uos.de/~ainf/2006/evaluation-ainf-interne-hoerer-papier.pdf">1</a>, <a href="http://www-lehre.inf.uos.de/~ainf/2006/evaluation-ainf-interne-hoerer-online.pdf">2</a>) schrieb einer der Teilnehmer:</p>
<blockquote><p>Positiv: gut ausgearbeitetes Skript; nette, humorvolle Bemerkungen des Professors, Zusammenhang mit &#220;bung f&#252;r Testate zum besseren Verst&#228;ndnis des Vorlesungsstoffes; gut gelegene Vorlesungszeiten.<br />
Negativ: manchmal zu anstrengend der Vorlesung zu folgen, zu viel Stoff auf einmal. (unter Umst&#228;nden &#038; eventuell)</p></blockquote>
<h3>Die Testate</h3>
<p>Im Gegensatz zu allen anderen F&#228;chern hat jeder Student in Informatik zusammen mit einem anderen Studenten ein Testat abzulegen. Hier stellt ihr einem Studenten aus einem h&#246;heren Semester die L&#246;sungen der aktuellen Hausaufgabe vor (meist ein paar Java-Programme) und beantwortet Fragen zur letzten Vorlesung. Um zur Klausur zugelassen zu werden, muss jedes Testat -- bis auf einen Joker -- mit mindestens 50% der Punkte bestanden werden.</p>
<h3>Die Klausur</h3>
<p>Bei fairer Bewertung durch die pr&#252;fenden Studenten sind die Punktezahlen bei den Testaten ein guter Indikator daf&#252;r, wie du bei der Endklausur abschneiden wirst. Wichtig f&#252;r die Klausur ist nicht nur ein grobes Verst&#228;ndnis der Konzepte, sondern auch die Kenntnis von Details der Programmiersprache Java (ist "<strong>for (;;) {}</strong>" valider Code?) und die F&#228;higkeit, mit Zettel und Papier zu programmieren.</p>
<h3>Hilfreiches</h3>
<ul>
<li><a href="http://www.mindpicnic.de/course/informatik-algorithmen/">Karteikarten aller klausurrelevanten Inhalte</a></li>
<li><a href='http://www.aiplayground.org/wp-content/uploads/2007/03/informatik-a_-algorithmen_v17.pdf' title='Zusammenfassung von Lena K&#228;stner, Nico M&#246;ller'>Zusammenfassung von Lena K&#228;stner, Nico M&#246;ller</a></li>
<li><a href="http://www-lehre.inf.uos.de/~ainf/2008/index.html">Das Skript im HTML- und PDF-Format, die Vorlesung als Videomitschnitt</a></li>
<li><a href="http://www-lehre.inf.uos.de/~ainf/2008/uebung.html">Die Aufgabenbl&#228;tter im PDF-Format</a></li>
</ul>
<p class="centerimage"><img src='http://www.aiplayground.org/wp-content/uploads/2007/02/logouosblue.gif' alt='logouosblue.gif' /></p>
<h2 id="8">Neurobiologie</h2>
<p>Ich habe die Vorlesung <strong>Introduction to Neurobiology</strong> bei Prof. Dr. Gunnar Jeserich besucht.</p>
<h3>Was du lernst</h3>
<p>Die Vorlesung vermittelt eine Ahnung davon, wie unser Gehirn funktioniert. Wer Biologie in der Oberstufe hatte, dem wird einiges bekannt vorkommen -- &#228;hnlich wie in der Mathematik werden Themen, die in der Schule angeschnitten wurden, hier mit deutlich mehr Tiefgang behandelt. Ein Umriss der Themen:</p>
<ol>
<li>Grundlagen: Proteine, Enzyme, Aufbau von Zellen</li>
<li>Eigenschaften und Aufbau von Nervenzellen</li>
<li>Intrazellul&#228;rer Transport von Stoffen</li>
<li>Die Struktur der Zellmembran</li>
<li>Wie elektrische Spannung in Nervenzellen entsteht (Ruhepotential)</li>
<li>Wie Signale entstehen und weitergeleitet werden (Aktionspotential)</li>
<li>Wovon die Weiterleitung von Signalen abh&#228;ngt</li>
<li>Wie Synapsen funktionieren</li>
<li>Wie Gifte und Drogen wirken</li>
<li>Wie wir lernen</li>
<li>Wozu Gliazellen gut sind (von denen es 10x mehr als Nervenzellen gibt)</li>
<li>Warum wir manche Dinge kaum kontrollieren k&#246;nnen (Herzschlag, Reflexe)</li>
</ol>
<h3>Die Vorlesungen</h3>
<p>Die Vorlesungen finden auf Englisch statt und z&#228;hlen mit zu den besten des ersten Semesters. Die Sprache ist kein Hindernis: Zu Beginn jeder Vorlesung sind ein paar Minuten f&#252;r die Einf&#252;hrung des neuen Fachvokabulars reserviert. Ein weiterer Pluspunkt: Im Gegensatz zu den meisten anderen Professoren ist bei Jeserich eine Kaffeepause nach 45 Minuten &#252;blich.</p>
<p>Wer in der Oberstufe kein Bio hatte oder vergesslich ist, sollte sich vor den Vorlesungen die Inhalte entweder im Skript, sofern das dann schon online ist, oder in einem Buch wie <a href="http://www.amazon.de/Neuroscience-Exploring-Brain-Mark-Bear/dp/0781760038">Neuroscience. Exploring the Brain.</a> ansehen, um mehr von der Vorlesung zu haben.</p>
<h3>Die Klausur</h3>
<p>Bei den Klausuren darf jeder entscheiden, ob er diese lieber auf Deutsch oder auf Englisch schreibt. Um bei der Klausur, die zur H&#228;lfte aus Multiple-Choice-Fragen, zur H&#228;lfte aus Freitext-Fragen besteht, gut abzuschneiden, ist jede Menge Detailwissen n&#246;tig. Was im Skript steht, muss gekonnt werden -- ausnahmslos. Dazu z&#228;hlen auch Details wie die Namen der verschiedenen Proteine, die f&#252;r die Befestigung von Myelin am Axon zust&#228;ndig sind. Etwa 70% der Teilnehmer haben die Klausur bestanden.</p>
<h3>Hilfreiches</h3>
<ul>
<li>Meine <a href="http://www.stuhlmueller.info/upload/neurobiology.pdf">Zusammenfassung von Skript und Slides</a></li>
<li><a href="http://suchanek.name/texts/summaries/neurobio.txt">Zusammenfassung von Fabian M. Suchanek</a></li>
<li><a href="http://www.aiplayground.org/wp-content/uploads/2007/02/seminar-i-ii.pdf">Lena K&#228;stners Mitschriften zu den Fragen der beiden Seminare</a></li>
<li>Das Buch <a href="http://www.amazon.de/Neuroscience-Exploring-Brain-Mark-Bear/dp/0781760038">Neuroscience. Exploring the Brain.</a></li>
</ul>
<p class="centerimage"><img src='http://www.aiplayground.org/wp-content/uploads/2007/02/logouosblue.gif' alt='logouosblue.gif' /></p>
<h2 id="9">Statistik + Empirical Methods</h2>
<p>Ich habe die Vorlesungen <strong>Statistik I</strong> und <strong>Empirical Methods for Cognitive Sciences</strong> bei Priv. Doz. Dr. Reinhard Suck besucht. Manchmal.</p>
<h3>Was du lernst</h3>
<p>Statistik ist f&#252;r mindestens zwei Dinge gut. Erstens: Die sinnvolle Darstellung bereits vorhandener Daten. Zweitens: Das Erstellen von Vorhersagen &#252;ber zuk&#252;nftige Daten (und dazugeh&#246;rige Tests, die feststellen, ob die Vorhersagen aus einer Theorie mit den tats&#228;chlichen Daten &#252;bereinstimmen). Die beiden Teilbereiche nennen sich "Deskriptive Statistik" und "Inferenzstatistik" und beide werden in der Vorlesung "Statistik I" behandelt. Um das n&#246;tige Handwerkszeug zu haben, lernst du vor dem Einstieg in die Inferenzstatistik die Grundlagen der Wahrscheinlichkeitstheorie.</p>
<ol>
<li>Was kann man mit welcher Art von Daten anfangen? (Skalenniveau)</li>
<li>Deskriptive Statistik
<ol>
<li>H&#228;ufigkeitsverteilung</li>
<li>Kennwerte von Daten</li>
<li>Korrelation</li>
<li>Regression</li>
</ol>
</li>
<li>Wahrscheinlichkeitsrechnung
<ol>
<li>Wahrscheinlichkeitsraum</li>
<li>Bedingte Wahrscheinlichkeiten (Bayes)</li>
<li>Zufallsvariablen</li>
<li>Verteilungen</li>
<li>Kombinatorik</li>
</ol>
</li>
<li>Inferenzstatistik
<ol>
<li>Stichproben</li>
<li>Parametersch&#228;tzung</li>
<li>Hypothesenpr&#252;fung</li>
<li>Anpassungstests</li>
</ol>
</li>
</ol>
<p>Empirical Methods erkundet (haupts&#228;chlich aus Sicht der Psychologie), wie man zu wissenschaftlichen Erkenntnissen gelangt, wie Experimente aussehen sollten und wie mit den Daten umzugehen ist, die man durch wissenschaftliche Experimente erh&#228;lt:</p>
<ol>
<li>The scientific enterprise</li>
<li>Philosophy of Science: Explanations, theories, laws, models.</li>
<li>Measurement and Operationalism</li>
<li>Data: How to get, how to evaluate</li>
<li>(Experimental) Design theory</li>
<li>Mathematical modelling</li>
<li>Logistic regression</li>
</ol>
<h3>Die Vorlesungen</h3>
<p>Die auf Englisch gehaltene Empirical-Methods-Vorlesung, die nur von Coxis besucht wurde, fand dienstags um 8:00 Uhr morgens statt und hatte des&#246;fteren einstellige Besucherzahlen. Die Statistik-Vorlesung wurde auch von Psychologie-Studenten besucht, hier sah es was die Besucherzahlen angeht entsprechend besser aus. </p>
<p>Die Inhalte beider Vorlesungen sind relevant f&#252;r deine Zukunft als Coxi. Wenn du irgendetwas in Richtung Psychologie machen willst, wirst du ohne Statistik-Kenntnisse mit den Daten deiner Experimente wenig anfangen k&#246;nnen. Wenn du an k&#252;nstlicher Intelligenz und Machine-Learning-Algorithmen interessiert bist, sind Kenntnisse der Inferenzstatistik Grundvoraussetzung, z.B. f&#252;r <a href="http://de.wikipedia.org/wiki/Bayessches_Netz">Bayessche Netze</a>. Au&#223;erdem: <a href="http://yudkowsky.net/bayes/bayes.html">Ohne Wahrscheinlichkeitstheorie keine Wissenschaft</a>.</p>
<p>Wenn der Stil der Vorlesungen dir zusagt, besuche die Vorlesungen -- ansonsten lerne die Inhalte eigenst&#228;ndig. In jedem Fall: Gehe zu den &#220;bungen. Hier bekommst du die Inhalte der Vorlesung kurz zusammengefasst, rechnest Aufgaben, die denen der Klausur &#228;hnlich sind und kannst Fragen (besser) stellen.</p>
<p><strong>Achtung:</strong> Es gibt eine weitere Vorlesung namens "Wahrscheinlichkeitsrechnung &#038; Statistik" aus dem Bereich der Mathematik, die erst nach dem Absolvieren von Mathe I und Mathe II zug&#228;nglich ist. Diese ist nicht mit der Erstsemestervorlesung zu verwechseln -- die Erstsemestervorlesung ist mehr auf Psychologie- als auf Mathe-Studenten ausgelegt, entsprechend niedriger sind die Anforderungen.</p>
<h3>Die EM-Hausaufgabe</h3>
<p>&#220;ber die Weihnachtsferien gibt es eine etwas umfangreiche Hausaufgabe, die &#252;berpr&#252;fen soll, ob die Inhalte der Empirical-Methods-Vorlesung und der Einf&#252;hrung in die Statistik-Software SPSS verstanden wurden und die Voraussetzung f&#252;r die Zulassung zur Endklausur ist. Jeder Student erh&#228;lt ein individuelles Datenblatt und muss diese Daten mit Blick auf verschiedene Aufgabenstellungen analysieren. Aufgrund des langen Bearbeitungszeitraumes ist diese Aufgabe auch dann zu schaffen, wenn man 90% der EM-Vorlesungen verpasst hat und nicht in der SPSS-Einf&#252;hrung war. Wir haben uns einen Tag vor Abgabe der Hausaufgabe getroffen, Pizza bestellt und die Hausaufgabe zusammen erledigt. Das Ergebnis sah dann beispielsweise <a href="http://www.aiplayground.org/wp-content/uploads/2007/02/empirical-methods-homework-example.pdf">so</a> aus. Zu den abgegebenen Hausaufgaben haben weder wir noch der Jahrgang vor uns je wieder etwas geh&#246;rt.</p>
<h3>Die Klausur</h3>
<p>Die Klausur besteht aus 10 Multiple-Choice-Fragen (ja/nein) und sechs bis sieben weiteren Aufgaben. Die Multiple-Choice-Fragen beziehen sich auch auf Inhalte der EM-Vorlesung (insbesondere auf den Bereich Versuchsplanung), die anderen Aufgaben nicht. Regressionsgeraden, Parametersch&#228;tzung und -- besonders wichtig -- Hyothesentests sind Teil jeder Klausur. Hypothesentests beantworten Fragen wie: "Sind die Abweichungen, die sich bei meinem Versuch ergeben haben, nur Zufallsschwankungen oder bringt das Wundermittel X wirklich etwas?”. Eine Klausur k&#246;nnte <a href="http://www.aiplayground.org/wp-content/uploads/2007/02/ws-02-03-klausur.pdf">so &#228;hnlich</a> aussehen. 46 von 156 Teilnehmern haben die Klausur im Wintersemester 2006 nicht bestanden.</p>
<h3>Hilfreiches</h3>
<ul>
<li><a href="http://www.psycho.uni-osnabrueck.de/~suck/script/statist1.pdf">Statistik I Skript</a></li>
<li><a href="http://www.psycho.uni-osnabrueck.de/~suck/script/statist2.pdf">Statistik II Skript</a></li>
<li><a href='http://www.aiplayground.org/wp-content/uploads/2007/02/empirical-methods-complete.pdf' title='Empirical Methods: Slides'>Empirical Methods: Slides</a></li>
<li><a href='http://www.aiplayground.org/wp-content/uploads/2007/02/statistik-i-ubersicht.pdf' title='Statistik I &#220;bersicht'>Statistik I &#220;bersicht</a></li>
<li><a href='http://www.aiplayground.org/wp-content/uploads/2007/02/statistik1.pdf' title='Statistik I Mini-Skript'>Statistik I Mini-Skript</a> (<strong>sehr</strong> n&#252;tzlich)</li>
</ul>
<p class="centerimage"><img src='http://www.aiplayground.org/wp-content/uploads/2007/02/logouosblue.gif' alt='logouosblue.gif' /></p>
<h2 id="10">Linguistik</h2>
<p>Ich habe die Vorlesung <strong>Introduction to Linguistics</strong> bei Prof. Dr. Peter Bosch und Jun. Prof. Dr. Stefan Evert besucht.</p>
<h3>Was du lernst</h3>
<p>Die auf Englisch gehaltene Vorlesung gibt eine Einf&#252;hrung in das Gebiet der Sprachwissenschaft. Dazu z&#228;hlen:</p>
<ol>
<li>History of linguistics</li>
<li>Phonetics</li>
<li>Phonology</li>
<li>Morphology</li>
<li>Syntax</li>
<li>Semantics</li>
<li>Pragmatics</li>
<li>Discourse Processing</li>
<li>Sentence Processing</li>
<li>Connectionist Models</li>
</ol>
<p>Linguistik ist aus zweierlei Gr&#252;nden wichtig f&#252;r die Kognitionswissenschaft. Einer davon wird bereits im ersten Slide der ersten Vorlesung erkl&#228;rt: Sprache ist eine angeborene kognitive F&#228;higkeit des Menschen -- und nur des Menschen. Deshalb muss jede Theorie des menschlichen Geistes auch das Ph&#228;nomen Sprache beachten.</p>
<p class="centerimage"><img src='http://www.aiplayground.org/wp-content/uploads/2007/02/languageandcognition1.gif' alt='Language and Cognition' /><br />
<span style="color: #aaa; font-size: 0.8em; line-height: 0.9em">&copy; Peter Bosch</span>
</p>
<p>Der zweite Grund: Linguistik ist Voraussetzung f&#252;r die Computerlinguistik, die wiederum ein Teilgebiet der k&#252;nstlichen Intelligenz ist. Hier wird versucht, Aufgaben zu automatisieren, die ein gewisses "Verst&#228;ndnis" von Texten erfordern (maschinelle &#220;bersetzung, Textzusammenfassung, etc.).</p>
<p>Mir pers&#246;nlich fiel es schwer, mich f&#252;r Linguistik zu motivieren. Ich studiere Cognitive Science, weil ich mehr &#252;ber das zunehmend wichtiger werdende Gebiet der <a href="http://www.aiplayground.org/artikel/agi/">allgemeinen k&#252;nstlichen Intelligenz</a> lernen will. Daf&#252;r ist es meiner Meinung nach sinnvoller, kognitive F&#228;higkeiten -- Intelligenz -- <a href="http://www.idsia.ch/idsiareport/IDSIA-10-06.pdf">abstrakter zu betrachten</a> als auf Ebene der Sprache (<strike>Grund 1</strike>) und wenig hilfreich, Teilziele mit pseudointelligenten Algorithmen zu erreichen (<strike>Grund 2</strike>).</p>
<h3>Die Vorlesungen</h3>
<p>Obwohl kein Skript zur Verf&#252;gung steht, ist es dank der gut ausgearbeiteten Slides nicht schwer, verpasste Vorlesungen daheim nachzuarbeiten. Mehr f&#228;llt mir nicht zu den Vorlesungen ein; m&#246;glich, dass ich nicht oft genug und nicht oft genug konzentriert in der Vorlesung war. Die Vorlesung fiel auf die letzten zwei Stunden der zehn Stunden Vorlesungen am Dienstag.</p>
<h3>Die Hausaufgaben</h3>
<p>Im Unterschied zu anderen F&#228;chern z&#228;hlen die Hausaufgaben in Linguistik zur Endnote. Je vier Studenten erledigen die Aufgaben zusammen. Die Aufgabenstellungen (<a href='http://www.aiplayground.org/wp-content/uploads/2007/02/1_2006hw1.pdf' title='Homework 1'>1</a>, <a href='http://www.aiplayground.org/wp-content/uploads/2007/02/1_2006hw2.pdf' title='Homework 2'>2</a>, <a href='http://www.aiplayground.org/wp-content/uploads/2007/02/3_2006hw3.pdf' title='Homework 3'>3</a>, <a href='http://www.aiplayground.org/wp-content/uploads/2007/02/linguistik-2006hw4.pdf' title='Homework 4'>4</a>) umfassen Phonetik, Phonologie, Morphologie, Syntax, Semantik, Pragmatik und Diskursanalyse und sind im Team in 2-4 Stunden pro Hausaufgabe zu schaffen. Wenn du vermeidbaren &#196;rger vermeiden willst, gib die Hausaufgaben <em>vor</em> der Vorlesung ab, die zum Abgabedatum stattfindet -- nicht w&#228;hrend, nicht nach.</p>
<h3>Die Klausuren</h3>
<p>Neben der Tatsache, dass die Hausaufgaben mit in die Note einflie&#223;en, unterscheidet sich die Bewertung in Linguistik in noch einer Hinsicht von anderen F&#228;chern: Der Klausurteil der Endnote kommt nicht durch eine Klausur zum Ende des Semesters zustande, sondern setzt sich zu gleichen Teilen aus dem Midterm und der Endklausur zusammen. Das Midterm behandelt die Aspekte bis einschlie&#223;lich Syntax, die Endklausur alle Aspekte ab (und zum Teil einschlie&#223;lich) Syntax. Die Fragen in den Klausuren sind zum Teil einfach, zum Teil knifflig, aber immer Multiple Choice. So gut wie jeder hat Linguistik bestanden.</p>
<h3>Hilfreiches</h3>
<ul>
<li><a href="http://www.mindpicnic.de/course/introduction-to-linguistics/">Linguistik Karteikarten Pre-Midterm</li>
<li><a href="http://www.mindpicnic.de/course/introduction-to-linguistics-ii/">Linguistik Karteikarten Post-Midterm</li>
<li><a href='http://www.aiplayground.org/wp-content/uploads/2007/02/lingu-postmt-summary-lena.pdf' title='Linguistik Post-Midterm Zusammenfassung von Lena K&#228;stner'>Linguistik Post-Midterm Zusammenfassung von Lena K&#228;stner</a></li>
<li><a href='http://www.aiplayground.org/wp-content/uploads/2007/02/linguistic_sum_post-mt_semifinal.pdf' title='Linguistik Post-Midterm Zusammenfassung von Nico M&#246;ller'>Linguistik Post-Midterm Zusammenfassung von Nico M&#246;ller</a></li>
<li><a href="http://suchanek.name/texts/summaries/lingu.txt">Zusammenfassung von Fabian M. Suchanek</a></li>
</ul>
<p class="centerimage"><img src='http://www.aiplayground.org/wp-content/uploads/2007/02/logouosblue.gif' alt='logouosblue.gif' /></p>
<h2 id="11">Foundations of Cognitive Science</h2>
<p>Ich habe die Vorlesung <strong>Foundations of Cognitive Science</strong> bei Jun. Prof. Dr. Kai-Uwe K&#252;hnberger besucht.</p>
<p class="centerimage"><img src='http://www.aiplayground.org/wp-content/uploads/2007/02/kuehnberger2.jpg' alt='Kai-Uwe K&#252;hnberger' /></p>
<h3>Die Vorlesungen</h3>
<p>Der Besuch der Ringvorlesung <em>Foundations of Cognitive Science</em> ist nicht verpflichtend. Der Schein kann f&#252;r keines der Module verwendet werden. Die Vorlesung wird dennoch von fast allen Erstsemestern belegt, da sie hilft, einen &#220;berblick &#252;ber das Gebiet der Kognitionswissenschaft zu bekommen und Interesse an Teilbereichen zu finden, von denen man vorher wenig mehr als den Namen geh&#246;rt hatte.</p>
<p>Im Gegensatz zu allen anderen F&#228;chern werden die Vorlesungen hier nicht durchgehend von einem Professor gehalten. Stattdessen gibt jede Woche ein anderer Professor Einblick in sein Fachgebiet. Im Jahr 2006 fanden folgende Vorlesungen statt, alle in englischer Sprache:</p>
<ol>
<li>What is Cognitive Science?</li>
<li>Methods Used in Cognitive Science</li>
<li>What the Hell is Neurobiopsychology?</li>
<li>Computational Models of Creativity</li>
<li>Philosophical Problems Concerning Mind and Cognition</li>
<li>Comprehension as a Paradigm for Cognition</li>
<li>Lessons from neurodegenerative diseases for a molecular approach to cognition</li>
<li>Language and Cognition</li>
<li>Introduction to Combinatorial Optimization</li>
<li>Knowledge-based Systems</li>
<li>Special Issues in AI</li>
</ol>
<p>Wenn ich eine Vorlesung als die interessanteste ausw&#228;hlen m&#252;sste, so w&#228;re das <em>Introduction to Combinatorial Optimization</em> von Sigrid Knust.</p>
<h3>Die Klausur</h3>
<p>Multiple Choice, f&#252;r jede Frage gibt es genau eine richtige Antwort. Wer bei den Vorlesungen anwesend ist und sich vor der Klausur die Slides zweimal durchliest, eventuell zusammenfasst, wird bestehen. Auch dann, wenn man R&#228;tsel wie das folgende nicht l&#246;sen kann -- das war die letzte Frage der Klausur:</p>
<blockquote><p>
Mr. Smith: How have you been?<br />
Mr. Jones: Good. How are you and your children?<br />
Mr. Smith: Fine. Thanks for asking.<br />
Mr. Jones: It's been a while. How old are your three daughters now?<br />
Mr. Smith: The product of the ages of my daughters is 36 and the sum of their ages is today's date.<br />
Mr. Jones: I know today's date but I need more information. Give me another hint.<br />
Mr. Smith: OK, my oldest daughter plays the piano.<br />
Mr. Jones: Now I know how old they are...<br />
What are the ages of each daughter?
</p></blockquote>
<h3>Hilfreiches</h3>
<ul>
<li><a href="http://suchanek.name/texts/summaries/foc.txt">Zusammenfassung von Fabian M. Suchanek</a></li>
<li><a href='http://www.aiplayground.org/wp-content/uploads/2007/02/focs-summary-v1.pdf' title=''>Zusammenfassung von Nico M&#246;ller</a></li>
</ul>
<p class="centerimage"><img src='http://www.aiplayground.org/wp-content/uploads/2007/02/logouosblue.gif' alt='logouosblue.gif' /></p>
<h2 id="12">Logik</h2>
<p>Ich habe die Vorlesung <strong>Foundations of Logic I</strong> bei Prof. Dr. Achim Stephan besucht.</p>
<p class="centerimage"><img src='http://www.aiplayground.org/wp-content/uploads/2007/02/achim.jpg' alt='Achim Stephan' /></p>
<h3>Was du lernst</h3>
<p>Gottlob Frege, 1918:</p>
<blockquote><p>Wahrheiten zu entdecken, ist Aufgabe aller Wissenschaften: der Logik kommt es zu, die Gesetze des Wahrseins zu erkennen.</p></blockquote>
<p>In den auf Englisch gehaltenen Vorlesungen lernst du, mit Aussagen- und Pr&#228;dikatenlogik umzugehen und, beim Bearbeiten der &#220;bungsaufgaben, welche Vorgehensweise erfolgversprechend ist, wenn man etwas beweisen will. Ein schrittweises Herangehen an Beweise (und Ziele jeder Art!) k&#246;nnte so aussehen: "Was will ich erreichen?" -- "Wie sehen die letzten Schritte aus?" -- "Welche Zwischenschritte sind n&#246;tig, um zu diesen letzten Schritten zu gelangen?" -- "Wie kann ich -- ausgehend von dem, was ich habe -- zu den Zwischenschritten gelangen?".</p>
<p>Die Themen der einzelnen Vorlesungen:</p>
<ol>
<li>What is Logic? What is it good for?</li>
<li>Propositional Logic
<ol>
<li>Propositions and truth-functional connectives</li>
<li>"If –then"-Sentences, Conditionals, and Biconditionals</li>
<li>The Syntax and Semantics of "PropLog". Validity and logical truth.</li>
<li>Semantic trees.</li>
<li>The system of natural deduction for PropLog.</li>
<li>Derived Rules and Theorems.</li>
<li>The Axiomatic System C<sub>A</sub>. Soundness and Completeness.</li>
</ol>
</li>
<li>Predicate Logic
<ol>
<li>A formal language for predicate logic.</li>
<li>Rules of Proof and Theorems of PredLog.</li>
<li>Derived Rules of Proof, Models, and Interpretations.</li>
<li>Interpretations, Models, and Semantic Trees.</li>
</ol>
</li>
</ol>
<p>Das Wissen aus der Vorlesung brauchst du in Teilbereichen der k&#252;nstlichen Intelligenz. Logisches Schlie&#223;en liegt automatischen Beweissystemen (Deduktion) und maschinellem Lernen (Induktion) zugrunde.</p>
<h3>Die Vorlesungen</h3>
<p>Neben Empiricial Methods war Logik die einzige Vorlesung, die um 8:00 Uhr morgens stattfand. Die Vorlesungen waren sehr gut vorbereitet und folgten exakt dem ausf&#252;hrlichen Skript, das zusammen mit den Slides <em>nach</em> der jeweiligen Vorlesung ins Netz gestellt wurde. Was man in Logik lernt, lernt man haupts&#228;chlich aus dem Bearbeiten von &#220;bungsaufgaben. Im Beweisen von S&#228;tzen wird man nicht dadurch gut, dass man alle Regeln kennt (was notwendig ist), sondern dadurch, dass man es wieder und wieder versucht.</p>
<p>Die &#220;bungen, die ich in Logik besucht habe, wurden (wie auch in Linguistik) von Maria Cieschinger gehalten und das Besuchen hat sich gelohnt. Sie hat den Inhalt der jeweils letzten Vorlesung &#252;bersichtlich gegliedert zusammengefasst, Beispielaufgaben bearbeitet und Fragen beantwortet. Sowohl in Logik als auch in Linguistik ist das Besuchen der &#220;bungen wichtiger als das Besuchen der Vorlesungen.</p>
<h3>Die Klausuren</h3>
<p>Neben der Klausur am Ende des Semesters gab es ein <em>Midterm</em>, das nicht in die Note miteinging und im Vergleich zur Endklausur sehr viel einfacher war.</p>
<p>Mensch-ist-das-einfach-ich-lerne-besser-nichts-mehr-einfach.</p>
<p>Die Endklausur war schwer -- f&#252;r mich die schwerste aller Klausuren des ersten Semesters. 39 von 105 Teilnehmern haben die Klausur nicht bestanden. F&#252;r die Endklausur sollte man semantische B&#228;ume und Beweise in Aussagen- und Pr&#228;dikatenlogik aufbauen, ausformulierte S&#228;tze in logische Systeme &#252;bertragen, Countermodels finden und mit den Begriffen Soundness (Widerspruchsfreiheit) und Completeness (Vollst&#228;ndigkeit) etwas anfangen k&#246;nnen.</p>
<h3>Hilfreiches</h3>
<ul>
<li><a href="http://cognet.mit.edu/library/books/view?isbn=0262511266">Logic Primer - 2nd Edition</a> - Volltext aus dem Uni-Netz abrufbar</li>
<li><a href="http://www.amazon.de/Einf%C3%BChrung-moderne-Logik-Franz-Kutschera/dp/3495479775/">Einf&#252;hrung in die moderne Logik</a> von Franz von Kutschera, Alfred Breitkopf</a></li>
<li><a href="http://logic.tamu.edu/">Proof checker, Countermodel Checker, Wff Checker, Equivalency Checker</a></li>
<li><a href='http://www.aiplayground.org/wp-content/uploads/2007/02/rulessemantictreesproplog.pdf' title='Propositional Logic: Semantic Trees'>Propositional Logic: Semantic Trees</a></li>
<li><a href='http://www.aiplayground.org/wp-content/uploads/2007/02/rulessemantictreespredlog.pdf' title='Predicate Logic: Semantic Trees'>Predicate Logic: Semantic Trees</a></li>
<li><a href='http://www.aiplayground.org/wp-content/uploads/2007/02/proofsproplog.pdf' title='Rules for Proofs'>Rules for Proofs</a></li>
<li><a href='http://www.aiplayground.org/wp-content/uploads/2007/02/prooftricks.pdf' title='Proof Tricks'>Proof Tricks</a></li>
<li><a href='http://www.aiplayground.org/wp-content/uploads/2007/02/countermodels.pdf' title='Countermodels'>Countermodels</a></li>
</ul>
<p class="centerimage"><img src='http://www.aiplayground.org/wp-content/uploads/2007/02/logouosblue.gif' alt='logouosblue.gif' /></p>
<h2 id="5">Die Bachelor-Note</h2>
<p>Die Abschlussnote setzt sich zusammen aus den Modulnoten und der Note der Bachelor-Arbeit am Ende des Studiums. <a href="http://www-lehre.inf.uos.de/~btenberg/home.html">Bastian Tenbergen</a> schrieb in seiner <a href="http://www.studis-online.de/Fragen-Brett/read.php?74,167808,page=1">sehr lesenswerten Beschreibung des Coxi-Studiums</a>:</p>
<blockquote><p>CogSci besteht aus Mathematik, Informatik, Philosophie, Psychologie, Neurowissenschaften, Linguistik, Neurobiologie und K&#252;nstlicher Intelligenz. Ihr m&#252;sst mindestens 5 dieser 8 Module erf&#252;llen durch studienbegleitende Modulpr&#252;fungen, zwei der f&#252;nf sind jedoch durch Scheinanreichen anerkennbar. Dazu kommt -- nat&#252;rlich -- noch die Bsc-These. Welche dieser F&#228;cher ihr nehmt ist einzig euch &#252;berlassen.</p></blockquote>
<p>Das hei&#223;t: Von allen F&#228;chern, in denen Klausuren geschrieben werden, sind f&#252;r den Bachelorabschluss nur die Klausurnoten aus maximal zwei F&#228;chern relevant. Dabei ist zu beachten:</p>
<blockquote><p>Man bewirbt sich normalerweise NICHT mit seinem BSc-Zeugnis sondern mit seinem Transkript. Darum sind ALLE Noten wichtig (auch wenn nur die Modulpr&#252;fungen in Gesamtnote eingehen). </p></blockquote>
<p>Wer Klausuren nicht besteht (in der Regel ist das mit weniger als 50% der Punkte der Fall, Mathe ist eine Ausnahme), kann an einer Nachschreibklausur teilnehmen. Klappt das auch nicht, so kann die jeweilige Vorlesung im n&#228;chsten Jahr noch einmal belegt werden. Mehr zur Notengebung und zu zahlreichen anderen f&#252;r dein Studium relevanten Fragen kannst du in <a href="http://www-lehre.inf.uos.de/~btenberg/cogsci-faq.html">Bastians CogSci FAQ</a> nachlesen.</p>
<p class="centerimage"><img src='http://www.aiplayground.org/wp-content/uploads/2007/02/logouosblue.gif' alt='logouosblue.gif' /></p>
<h2 id="13">Noch Fragen?</h2>
<p>Dieser Text ist nicht offiziell, spiegelt lediglich meinen Eindruck nach dem ersten Semester wieder und mag Fehler enthalten, nicht auf dem aktuellsten Stand sein oder gar beides (&#252;ber Korrekturen <a href="mailto:andreas@aiplayground.org">freue ich mich</a>). F&#252;r weitere, offiziellere und zuverl&#228;ssigere Informationen:</p>
<ul>
<li>Besuche die <a href="http://www.cogsci.uni-osnabrueck.de/">offizielle Website des Studiengangs</a>.</li>
<li>Lies die <a href="http://www2.uni-osnabrueck.de/ordnungen/StudO-Bachelor-CognitiveScience.pdf">Studienordnung</a> und die <a href="http://www2.uni-osnabrueck.de/ordnungen/PO-Bachelor-CognitiveScience.pdf">Pr&#252;fungsordnung</a>.</li>
<li>Besuche die <a href="http://www.cogsci.uni-osnabrueck.de/~fachschaft/">Fachschaftsseite</a>.</li>
<li>Besuche die <a href="http://fachschaft.cogsci.uni-osnabrueck.de/freshmen">Seite f&#252;r Erstsemester</a>.</li>
</ul>
<p>Wenn du noch Fragen zu Osnabr&#252;ck, zum Studiengang <em>Cognitive Science</em> oder zu einzelnen F&#228;chern hast: Einfach hier als Kommentar oder <a href="mailto:andreas@aiplayground.org">per Mail</a> schreiben. Ich helfe gerne weiter.</p>
<p class="abstract"><strong>Schnupperstudium</strong>: Die Fachschaft Cognitive Science bietet regelm&#228;&#223;ig ein Schnupperstudium an. Drei Tage lang k&#246;nnen Sch&#252;lerinnen und Sch&#252;ler und Studierende, die sich f&#252;r den Studiengang interessieren an Vorlesungen teilnehmen, Studierende und Dozenten kennenlernen, etwas &#252;ber kognitionswissenschaftliche Forschung erfahren und an Experimenten teilnehmen. <a href="http://cogsci.uni-osnabrueck.de/~fachschaft/schnupperstudium/">Mehr Informationen und kostenlose Anmeldung</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.aiplayground.org/artikel/coxi/feed/</wfw:commentRss>
		<slash:comments>180</slash:comments>
		</item>
		<item>
		<title>Rekursive Optimierungsprozesse</title>
		<link>http://www.aiplayground.org/artikel/rsi/</link>
		<comments>http://www.aiplayground.org/artikel/rsi/#comments</comments>
		<pubDate>Tue, 19 Dec 2006 09:40:45 +0000</pubDate>
		<dc:creator>Andreas</dc:creator>
				<category><![CDATA[Informatik]]></category>
		<category><![CDATA[Künstliche Intelligenz]]></category>
		<category><![CDATA[Singularität]]></category>

		<guid isPermaLink="false">http://ai2.stuhlmueller.info/artikel/rsi/</guid>
		<description><![CDATA[Angenommen, das zunehmende Verst&#228;ndnis des Ph&#228;nomens Intelligenz erlaubt es uns, einen Prozess zu erstellen, der eine gewisse Grundintelligenz besitzt und dem Ziele vorgegeben werden k&#246;nnen. Wir geben diesem Prozess die M&#246;glichkeit, seine eigene Leistungsf&#228;higkeit durch Selbstmodifikationen zu verbessern und ein Ziel, das weit jenseits des mit menschlicher Intelligenz Erreichbaren liegt. Und warten. Und dann? Dieser [...]]]></description>
			<content:encoded><![CDATA[<p>Angenommen, das zunehmende Verst&#228;ndnis des Ph&#228;nomens Intelligenz erlaubt es uns, einen Prozess zu erstellen, der eine gewisse Grundintelligenz besitzt und dem Ziele vorgegeben werden k&#246;nnen. Wir geben diesem Prozess die M&#246;glichkeit, seine eigene Leistungsf&#228;higkeit durch Selbstmodifikationen zu verbessern und ein Ziel, das weit jenseits des mit menschlicher Intelligenz Erreichbaren liegt. Und warten. Und dann?<span id="more-31"></span></p>
<p><em>Dieser Text ist keine Einf&#252;hrung zum Thema k&#252;nstliche Intelligenz oder Singularit&#228;t <a id="tn0" href="#fn0">[0]</a>. Ich versuche, die Begriffe "k&#252;nstliche Intelligenz" und "Singularit&#228;t" zu vermeiden. Beide wurden zu oft f&#252;r Dinge gebraucht, die ich, wenn ich die Begriffe gebrauchen w&#252;rde, nicht damit meinen w&#252;rde.</em></p>
<p><em>Dieser Text ist eine Momentaufnahme. Manches, was ich vor ein oder zwei Jahren gedacht habe, w&#252;rde ich so jetzt nicht mehr unterschreiben. Ich kann nicht ausschlie&#223;en, dass ich in ein paar Jahren dasselbe &#252;ber Gedanken meines heutigen Ichs sagen werde.</em></p>
<h2>Glaube</h2>
<p>Ich glaube an Dinge, die ich nicht oder noch nicht beweisen kann, die aber dennoch gro&#223;en Einfluss auf meine Entscheidungen haben. Wenn mir jemand &#252;berzeugend darlegt, warum eines oder mehrere davon falsch sind, werde ich mein Leben &#228;ndern.</p>
<ol>
<li>Der aktuelle Stand menschlicher Intelligenz ist nicht das Limit von Intelligenz im Allgemeinen <a id="tn1" href="#fn1">[1]</a>.</li>
<li>Intelligente Algorithmen sind m&#246;glich und werden in den n&#228;chsten Jahrzehnten relevant, nicht erst in Jahrhunderten oder Jahrtausenden. <a id="tn2" href="#fn2">[2]</a></li>
<li>Rekursive Selbstverbesserung ist m&#246;glich. <a id="tn3" href="#fn3">[3]</a> (<em>Recursive Self-Improvement, RSI</em>)
<p>    Das hei&#223;t: Es kann Prozesse geben, die die F&#228;higkeit haben, die Effektivit&#228;t ihrer Bestandteile zu verbessern — einschlie&#223;lich  derjenigen Bestandteile, die f&#252;r die Verbesserung zust&#228;ndig sind.</li>
</ol>
<p>Intelligenz ist das m&#228;chtigste Werkzeug, das wir kennen. Intelligenz sorgt daf&#252;r, dass Wolkenkratzer aus dem Boden schie&#223;en, Flugzeuge den Himmel kreuzen und Fu&#223;abdr&#252;cke auf dem Mond erscheinen. Verglichen mit den Ver&#228;nderungen, die ein rekursiver Optimierungsprozess <a id="tn4" href="#fn4">[4]</a> bewirken k&#246;nnte, sind das Spuren im Sand.</p>
<p>Angenommen, das zunehmende Verst&#228;ndnis des Ph&#228;nomens Intelligenz erlaubt es uns, einen Prozess zu erstellen, der eine gewisse Grundintelligenz besitzt und dem Ziele vorgegeben werden k&#246;nnen. Wir geben diesem Prozess die M&#246;glichkeit, seine eigene Leistungsf&#228;higkeit durch Selbstmodifikationen zu verbessern und ein Ziel, das weit jenseits des mit menschlicher Intelligenz Erreichbaren liegt. Und warten.</p>
<p>Im Gegensatz zu unserem Gehirn hat ein solcher Optimierungsprozess vollst&#228;ndigen Zugriff auf seinen Quellcode und eventuell auch auf die zugrunde liegende Hardware und kann — eine gewisse Grundintelligenz vorausgesetzt — daran Verbesserungen vornehmen, die zu h&#246;herer Intelligenz f&#252;hren. Durch h&#246;here Intelligenz kann der Algorithmus das vorgegebene Ziel effektiver erreichen und verbessert gleichzeitig seine F&#228;higkeit, Verbesserungen an seiner Intelligenz vorzunehmen.</p>
<p>Angenommen, die erste Verbesserung nimmt zwei Jahre in Anspruch und f&#252;hrt dazu, dass sich die Intelligenz des Prozesses so weit verbessert, dass weitere Verbesserungen in der H&#228;lfte der Zeit vorgenommen werden k&#246;nnen. Die n&#228;chste Verbesserung nimmt ein Jahr in Anspruch. Die n&#228;chste ein halbes Jahr. Drei Monate, 1,5 Monate, 20 Tage, ... und die Steigerung der Intelligenz beschleunigt sich weiter. Bald &#252;bertrifft die Intelligenz die jedes einzelnen Menschen, bald die <em>aller</em> Menschen. Wenn das Ziel, das dem Prozess vorgegeben wurde, nicht theoretisch unm&#246;glich ist, wird es erreicht werden.</p>
<p>Die Daten (zwei Jahre f&#252;r die erste Verbesserung, dabei Verdoppelung der Effizienz mit jeder Verbesserung) entsprechen in etwa den erwarteten Ergebnissen, wenn der Optimierungsprozess ausschlie&#223;lich an der Verbesserung der Rechengeschwindigkeit seiner Prozessoren arbeiten w&#252;rde, Moore's Law weiterhin g&#252;ltig w&#228;re und Rechengeschwindigkeit und Leistungsf&#228;higkeit der Intelligenz proportional zueinander w&#228;ren. Eine rekursive Optimierung der Softwareebene k&#246;nnte zus&#228;tzlich zu Verbesserungen f&#252;hren, indem der Prozess seinen Aufbau so umorganisiert, dass er sich an das theoretische Maximum von "Intelligenz pro Recheneinheit" ann&#228;hert.</p>
<p>Es ist wahrscheinlich, dass der Aufwand an Intelligenz f&#252;r weitere Verbesserungen nicht konstant bleibt, sondern zunimmt. Das verlangsamt die Geschwindigkeit der rekursiven Selbstverbesserung. Einen qualitativen Unterschied macht das dann, wenn der Aufwand schneller zunimmt als der Intelligenzgewinn, so dass der Intelligenzgewinn des Prozesses ab einem bestimmten Zeitpunkt f&#252;r alle praktischen &#220;berlegungen als stagniert betrachtet werden kann (das ist dann der Fall, wenn nach einer Verdopplung der Effektivit&#228;t des Prozesses f&#252;r die n&#228;chste Verdopplung <em>mehr</em> als doppelt so viel Zeit n&#246;tig ist als f&#252;r die aktuelle Verdopplung). Ob eine solche Entwicklung wahrscheinlich ist, ist noch offen. Eine exponentielle Steigerung der Leistungsf&#228;higkeit kann zumindest bisher nicht ausgeschlossen werden.</p>
<p>Dass ein solcher Prozess, wenn prinzipiell m&#246;glich, auch in der Praxis umgesetzt wird, ist nahezu sicher. Aktuell besch&#228;ftigt sich mit der praktischen Umsetzung eine Reihe intelligenter Menschen (u.a. Schmidhuber, Hutter, Yudkowsky, Goertzel, Voss, Legg). Und das sind nur die, von denen ich wei&#223;. Eine Einschr&#228;nkung der Forschung ist nicht in Sicht, praktisch nicht umsetzbar und k&#246;nnte selbst ein Verbrechen gegen die Zukunft der Menschheit darstellen.</p>
<p>Ich wei&#223; von keiner anderen m&#246;glichen Entwicklung, die in absehbarer Zukunft so gro&#223;en Einfluss auf die Zukunft der Menschheit und auf meine individuelle Zukunft haben k&#246;nnte, existentielle Risiken ausgenommen.</p>
<h2>Ziele</h2>
<p>Wenn man den letzten Abschnitt als treffende Beschreibung unserer Lage akzeptiert, so folgt daraus, dass zwei Dinge sichergestellt werden m&#252;ssen:</p>
<h3>a) Der Optimierungsprozess muss die Welt so optimieren, dass wir mit dem Ergebnis zufrieden sind ("Friendly AI").</h3>
<p>Dieses Problem ist schwierig. Es erfordert, dass wir die Antwort auf zwei Fragen finden:</p>
<p>Erstens: Wie kann ein Prozess Milliarden von Selbstmodifikationen vornehmen, ohne dass es zu einer Ver&#228;nderung des urspr&#252;nglich beabsichtigten Zieles kommt? <a id="tn5" href="#fn5">[5]</a></p>
<p>Zweitens: Wie soll das Ziel aussehen und wie kann es auf eine Weise ausgedr&#252;ckt werden, die nicht unbeabsichtigte Folgen hat? Wie muss ein Prozess aussehen, so dass er unbeeinflusst von Fehlern in der Weltanschauung der Programmierer am "richtigen" Ziel angelangt? Ein Ansatz w&#228;re, den Prozess das umsetzen zu lassen, was wir als Menschheit uns w&#252;nschen w&#252;rden, ...</p>
<blockquote><p>... if we knew more, thought faster, were more the people we wished we were, had grown up farther together; where the extrapolation converges rather than diverges, where our wishes cohere rather than interfere; extrapolated as we wish that extrapolated, interpreted as we wish that interpreted. <a id="tn6" href="#fn6">[6]</a></p></blockquote>
<p>Selbst wenn das als Zielbeschreibung ad&#228;quat w&#228;re, st&#252;nden wir noch vor der nicht ganz leichten Aufgabe, dieses Ziel maschinenverst&#228;ndlich und unzweideutig zu formulieren.</p>
<p>Es ist um Welten einfacher, irgendeine Art von rekursivem Optimierungsprozess umzusetzen, als einen umzusetzen, der die Menschheit nicht sofort ausl&#246;scht. Kaum jemand hat die Absicht, Schaden zu verursachen. Wenn man mit dem m&#228;chtigsten Werkzeug im bekannten Universum experimentiert, gen&#252;gt das nicht. Jeder uneingeschr&#228;nkte, nicht fehlerhafte rekursive Optimierungsprozess, bei dem nicht explizit auf "friendliness" geachtet wurde, hat das Potential, uns alle im Laufe der Verwirklichung des einprogrammierten Zieles umzubringen <a id="tn7" href="#fn7">[7]</a>. Wenn dem Optimierungsprozess das Ziel vorgegeben wird, mehr und mehr Primzahlen zu berechnen, kann es hilfreich sein, uns und den Rest des Universums dazu in Computronium umzuwandeln.</p>
<p>Ein rekursiver Optimierungsprozess ist die gr&#246;&#223;te Gefahr, die ich f&#252;r die Zukunft der Menschheit sehe. Und der Weg in eine Zukunft, die nicht nur besser ist, als wir es uns vorstellen, sondern besser, als wir es uns vorstellen <em>k&#246;nnen</em>. Das Ende von Krankheit und Tod, von unfreiwilligem Leid und Dummheit w&#228;re nur der Anfang.</p>
<p>Wir haben nur einen Versuch.</p>
<h3>b) Wir m&#252;ssen lange genug &#252;berleben, d.h. existentielle Risiken vermeiden.</h3>
<p>Die Wahrscheinlichkeit, dass wir es nicht bis zu dem Punkt schaffen, an dem ein positiver Optimierungsprozess relevant wird, ist meiner Einsch&#228;tzung nach gro&#223;. Die Dinge, die aus heutiger Sicht das gr&#246;&#223;te Potential haben, der Menschheit ihre Zukunft zu rauben:</p>
<ul>
<li>Ein Optimierungsprozess, der die Welt in einer Weise ver&#228;ndert, mit der wir nicht einverstanden sind. ("Unfriendly AI")</li>
<li>Unverantwortlicher Einsatz von Nanotechnologie (Replikatoren)</li>
<li>Biologische Waffen (z.B. k&#252;nstlich erzeugte Viren)</li>
<li>Andere, unwahrscheinlichere Ereignisse (Meteoriteneinschlag, Ausbruch eines Supervulkans, Gamma Ray Bursts, unvorhergesehene katastrophale Folgen physikalischer Experimente)</li>
</ul>
<p>Das sind also die zwei Ziele, die ich f&#252;r wichtiger als alles andere halte <a id="tn8" href="#fn8">[8]</a>: "Friendly AI" und die Vermeidung existentieller Risiken. Die enormen Auswirkungen sowohl auf mein eigenes Leben als auch auf das Leben anderer haben zur Folge, dass diese Ziele unabh&#228;ngig davon sind, ob ich aus egoistischen oder altruistischen Motiven handle.</p>
<p>Ich sehe zwei M&#246;glichkeiten, bei Akzeptanz der am Anfang dieses Textes ge&#228;u&#223;erten Vermutungen gleichzeitig rational zu handeln und nicht auf mindestens eines der beiden Ziele hinzuarbeiten:</p>
<ul>
<li>Die Wahrscheinlichkeit f&#252;r einen positiven Optimierungsprozess ist extrem niedrig. 0.01% ist <em>nicht</em> extrem niedrig.</li>
<li>Die Wahrscheinlichkeit f&#252;r einen Optimierungsprozess sowie f&#252;r das Eintreten oder Nicht-Eintreten existentieller Katastrophen ist v&#246;llig oder nahezu v&#246;llig unabh&#228;ngig vom eigenen Handeln.</li>
</ul>
<p>Beides glaube ich nicht.</p>
<hr style="margin-bottom: 2em">
<div style="color: #999">
<p><a id="fn0" href="#tn0">[0]</a> Einf&#252;hrungstexte:</p>
<ol>
<li><a href="http://www.aiplayground.org/artikel/agi/">Allgemeine k&#252;nstliche Intelligenz</a></li>
<li><a href="http://www.singinst.org/overview/whatisthesingularity/">What is the Singularity?</a></li>
<li><a href="http://www.singinst.org/overview/whyworktowardthesingularity/">Why work toward the Singularity?</a></li>
</ol>
<p><a id="fn1" href="#tn1">[1]</a> Ich definiere Intelligenz als die F&#228;higkeit, Ziele in komplexen Umgebungen zu erreichen.</p>
<p><a id="fn2" href="#tn2">[2]</a> Gr&#252;nde f&#252;r diese These:</p>
<ul>
<li>Zunehmende Rechenleistung, die sich in den n&#228;chsten 15 Jahren an die gesch&#228;tzte Rechenleistung des menschlichen Gehirns ann&#228;hert und diese letztendlich &#252;bertrifft.</li>
<li>Ein besseres Verst&#228;ndnis, was "Intelligenz" ist (Beispiel: Jeff Hawkins' Projekt Numenta).</li>
<li>Neue <a href="http://www.idsia.ch/~juergen/newai/node12.html">Forschungsergebnisse</a>, die die Machbarkeit von universellen, beweisbar optimalen Probleml&#246;sealgorithmen zeigen.</li>
</ul>
<p><a id="fn3" href="#tn3">[3]</a> Es ist m&#246;glich, dass die theoretische Machbarkeit von rekursiven, sich selbst verbessernden Prozessen von J&#252;rgen Schmidhuber <a href="http://www.idsia.ch/~juergen/goedelmachine.html">bereits bewiesen wurde</a>.</p>
<p><a id="fn4" href="#tn4">[4]</a> Einen rekursiven Optimierungsprozess kann man sich als ein Programm vorstellen, das auf einem Computer l&#228;uft, der &#252;ber eine Eingabeart (z.B. Maus und Tastatur) und eine Ausgabeart (z.B. Text auf einem Bildschirm) verf&#252;gt. Eine Verbindung mit dem Internet w&#228;re als Eingabe- und Ausgabeart ebenfalls denkbar.</p>
<p>F&#252;r den Optimierungsprozess ist wichtig, dass es einen Strom an Eingabedaten und an Ausgabedaten gibt und dass beide Teil derselben externen Welt sind. So k&#246;nnen die Ausgaben des Prozesses zu Ver&#228;nderungen f&#252;hren, die die Eingaben beeinflussen. Wurde dem Prozess ein Ziel vorgegeben, so ver&#228;ndert er seine Ausgaben dahingehend, dass die daraus resultierenden Eingaben daf&#252;r sprechen, dass das Ziel erreicht wurde.</p>
<p>Damit der Prozess Einfluss auf die Welt nehmen kann, wird der Prozess Verbesserungen an seinem eigenen Aufbau vornehmen m&#252;ssen. Wahrscheinlich werden bereits &#196;nderungen n&#246;tig sein, bevor der Prozess das eigentliche Ziel &#252;berhaupt verstehen kann — ein &#220;bergangsziel im Sinne von "verstehe die Intention, die hinter dem Ziel steht" k&#246;nnte n&#246;tig sein.</p>
<p><a id="fn5" href="#tn5">[5]</a> Ein h&#228;ufig vorgebrachtes, fehlerhaftes Argument gegen die These, dass ein konstantes Ziel m&#246;glich ist: "Ein Prozess, der intelligenter ist als wir selbst, wird immer einen Weg finden, sein Ziel zu &#228;ndern und sich damit unserer Kontrolle entziehen." Das Problem bei dieser Argumentation liegt darin, dass der Zusammenhang zwischen Zielen und darauf folgenden Handlungsweisen ignoriert wird. Ein solcher Prozess wird nichts unternehmen, was nicht dem aktuell festgelegten Ziel dient — eine &#196;nderung des aktuellen Zieles w&#252;rde dazu f&#252;hren, dass der Prozess das aktuelle Ziel nicht erreicht und ist damit keine Handlungsweise, die ein solcher Prozess ausf&#252;hren w&#252;rde. Wenn ich die M&#246;glichkeit h&#228;tte, meine kognitive Architektur so zu &#228;ndern, dass mir das Ermorden von Kindern Spa&#223; macht, w&#252;rde ich es nicht tun — weil es meinen aktuellen Zielen widerspricht.</p>
<p><a id="fn6" href="#tn6">[6]</a> <a href="http://www.singinst.org/friendly/extrapolated-volition.html">Extrapolated Volition</a></p>
<p><a id="fn7" href="#tn7">[7]</a> Manche argumentieren, dass ein hinreichend intelligenter Prozess "von selbst" auf die Idee kommen sollte, dass menschliches Leben wichtiger ist als triviale Ziele. Eine solche Denkweise ist anthropomorph und untersch&#228;tzt, wie sehr sich ein solcher Prozess von einem denkenden Menschen unterscheiden kann. Der Denkprozess eines Menschen scheint verstrickt zu sein; Ziele sind nicht klar definiert und oft nicht untereinander konsistent. Ein entsprechend konstruierter Prozess verfolgt keine Denkans&#228;tze "von selbst", die nicht dem klar definierten Ziel dienen.</p>
<p><a id="fn8" href="#tn8">[8]</a> "wichtiger als alles andere": Existentielle Risiken f&#252;hren per Definition zum Ende der Menschheit und damit zum Tod aller Menschen, die ich liebe. Wenn "Friendly AI" m&#246;glich ist und nicht umgesetzt wird, wird das zu unverantwortlich mehr Leid und Tod f&#252;r alle Menschen f&#252;hren, einschlie&#223;lich der Menschen, die ich liebe. Die Frage "Ist Ziel a mir wichtiger als Person b" macht nicht unbedingt Sinn.</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.aiplayground.org/artikel/rsi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>B&#252;cher zum Thema neuronale Netze: Ein &#220;berblick</title>
		<link>http://www.aiplayground.org/artikel/neuronale-netze-buecher/</link>
		<comments>http://www.aiplayground.org/artikel/neuronale-netze-buecher/#comments</comments>
		<pubDate>Sat, 11 Dec 2004 09:13:51 +0000</pubDate>
		<dc:creator>Andreas</dc:creator>
				<category><![CDATA[Informatik]]></category>
		<category><![CDATA[Neurobiologie]]></category>
		<category><![CDATA[Neuroinformatik]]></category>
		<category><![CDATA[Programmieren]]></category>

		<guid isPermaLink="false">http://ai2.stuhlmueller.info/artikel/neuronale-netze-buecher/</guid>
		<description><![CDATA[Die Anwendung neuronaler Netze ist nach wie vor eines der bedeutendsten und interessantesten Themen der k&#252;nstlichen Intelligenz. Die Kenntnis von Hintergr&#252;nden und Einsatzm&#246;glichkeiten ist nicht nur f&#252;r Informatik-Studenten ein Muss, auch Hobby-Programmierer und KI-Interessierte k&#246;nnen gro&#223;en Nutzen daraus ziehen. Doch welche Lekt&#252;re ist f&#252;r wen am besten geeignet? Bei etwa 20 B&#252;chern in deutscher Sprache [...]]]></description>
			<content:encoded><![CDATA[<p>Die Anwendung neuronaler Netze ist nach wie vor eines der bedeutendsten und interessantesten Themen der k&#252;nstlichen Intelligenz. Die Kenntnis von Hintergr&#252;nden und Einsatzm&#246;glichkeiten ist nicht nur f&#252;r Informatik-Studenten ein Muss, auch Hobby-Programmierer und KI-Interessierte k&#246;nnen gro&#223;en Nutzen daraus ziehen. Doch welche Lekt&#252;re ist f&#252;r wen am besten geeignet? Bei etwa 20 B&#252;chern in deutscher Sprache f&#228;llt die Auswahl nicht leicht.<span id="more-12"></span></p>
<p>Um einen umfassenden &#220;berblick zu schaffen, beschreibe und bewerte ich zuerst diejenigen B&#252;cher, die ich selbst gelesen habe. Danach stelle ich kurz all die anderen B&#252;cher vor, die aktuell erh&#228;ltlich sind oder h&#228;ufig zitiert werden, und fasse zusammen, was andere Rezensenten von ihnen halten. Beginnen will ich mit dem Werk, das mein pers&#246;nliches erstes Buch zum Thema "Neuronale Netze" war:</p>
<h2>Robert Callan: Neuronale Netze im Klartext.</h2>
<p><img src="http://www.aiplayground.org/img/robert-callan-nn-im-klartext.jpg" alt="Robert Callan: Neuronale Netze im Klartext" class="icon" border="0">Erschienen am 15. April 2003 im Verlag "Pearson Studium". Laut Vorwort wurde das Buch "f&#252;r Studenten im Grundstudium geschrieben, die einen Einsteigerkurs in das Thema der neuronalen Netze suchen". Dabei wird versucht, "die Mathematik auf ein Minimum zu reduzieren". Die ersten sechs Kapitel befassen sich mit den wichtigsten Modellen neuronaler Netze, die letzten zwei Kapitel bieten einen &#220;berblick &#252;ber einige aktuelle Bestrebungen, Verbindungen zwischen neuronalen Netzen und traditioneller KI herzustellen.</p>
<p>F&#252;r das Buch spricht, dass jedem Kapitel eine Liste der Lernziele vorangestellt ist und eine stichpunktartige Zusammenfassung sowie ein Verweis auf weiterf&#252;hrende Literatur am Ende des Kapitels folgen. Zu einem gro&#223;en Teil besteht das Buch aus Beispielen, die die verschiedenen Konzepte veranschaulichen. Dazu tragen auch die zahlreichen Illustrationen bei. &#220;bungen am Ende jedes Kapitels heben das Buch von &#228;hnlichen Lekt&#252;ren ab: Sie geben dem Leser die M&#246;glichkeit herauszufinden, ob er das vorgestellte Modell verstanden hat und praktisch anwenden kann. Ein weiterer Pluspunkt: Der Anhang mit den wichtigsten Grundlagen der linearen Algebra.</p>
<p>Dennoch ist das Buch nicht uneingeschr&#228;nkt zu empfehlen: Die biologischen Grundlagen neuronaler Netze werden &#252;berhaupt nicht behandelt, der Zusammenhang bzw. die Unterschiede zwischen Algorithmen und Biologie bleiben unklar. Allgemein werden die meisten Themen sehr knapp behandelt: Hintergrundwissen und ausf&#252;hrliche Beschreibungen der Theorie sucht man hier vergebens. Das zeigt sich auch in den mathematischen Herleitungen: Durch die Verk&#252;rzung werden diese nicht unbedingt einfacher zu verstehen und laden so zum &#220;berspringen der Mathematik-Teile ein.</p>
<h2>Dan W. Patterson: K&#252;nstliche neuronale Netze.<br />
Das Lehrbuch.</h2>
<p><img src="http://www.aiplayground.org/img/dan-patterson-knn.gif" alt="Dan W. Patterson: K&#252;nstliche neuronale Netze" class="icon" border="0">Erschienen 1996 im Verlag "Prentice Hall". Nach einer kurzen Einf&#252;hrung in neuronale Programmierung und biologische neuronale Konzepte werden zun&#228;chst die fr&#252;hen Netzwerksysteme, z.B. das Perceptron, und deren Lernalgorithmen behandelt. Darauf folgt ein Teil &#252;ber mehrschichtige Feedforward-Netzwerke (Stichwort: Backpropagation), dann ein Teil &#252;ber Netzwerke mit Feedback-Verbindungen. Zum Ende hin werden erst andere wichtige Architekturen vorgestellt, dann selbstorganisierende Netze. Auch genetische Algorithmen werden kurz angeschnitten. Zur Zielgruppe dieses Buches z&#228;hlen sowohl Einsteiger mit grundlegenden Mathematik-Kenntnissen als auch Leser mit umfassenderen Vorkenntnissen. </p>
<p>Das Buch enth&#228;lt ein 50 Seiten umfassendes Kapitel &#252;ber mathematische und statistische Konzepte, so dass der Leser f&#252;r Vektor- und Matrizenalgebra oder Fuzzy-Logik kein gesondertes Nachschlagewerk bem&#252;hen muss. Patterson geht von einfacheren Netzwerkarchitekturen aus und erl&#228;utert darauf aufbauend dann die schwierigeren. Insgesamt ist das Buch mit 22 vorgestellten Netzwerkarchitekturen sehr ausf&#252;hrlich.</p>
<p>Zum Teil hat diese Ausf&#252;hrlichkeit zur Folge, dass der Leser mehr Informationen erh&#228;lt als n&#246;tig: Zur Demonstration der Anwendungsm&#246;glichkeiten neuronaler Netze ist es nicht unbedingt notwendig, die exakten Schaltpl&#228;ne von Brennofen- oder Waschmachinen-Steuerungssystemen zu kennen. Von der Lesbarkeit und Verst&#228;ndlichkeit her kann das Buch zwar nicht ganz mit "Simulation neuronaler Netze" von Andreas Zell mithalten, ist aber dennoch zu empfehlen. Den biologischen Grundlagen wurden drei Seiten gewidmet -- wer sich daf&#252;r besonders interessiert, dem sei das Buch von Zell empfohlen: Hier sind es ganze 32 Seiten.</p>
<h2>Andreas Zell: Simulation neuronaler Netze.</h2>
<p><img src="http://www.aiplayground.org/img/andreas-zell-simulation-neuronaler-netze.jpg" alt="Andreas Zell: Simulation neuronaler Netze" class="icon" border="0"> Erschienen im September 1994 im Oldenbourg-Verlag, urspr&#252;nglich die Habilitationsschrift von Andreas Zell. Das 600 Seiten umfassende Buch gliedert sich in vier Teile: Einf&#252;hrung und neurobiologische Grundlagen, konnektionistische Modelle, Simulationstechnik neuronaler Netze und Anwendungen. Auch die Geschichte neuronaler Netze wird nicht ausgespart. Das Kapitel &#252;ber konnektionistische Modelle enth&#228;lt nicht nur die &#252;blichen Beschreibungen der verschiedenen Modelle, sondern erl&#228;utert auch ausf&#252;hrlich die M&#246;glichkeiten zur Optimierung -- f&#252;r die Praxis ist das insofern von Bedeutung, als z.B. Standard-Backpropagation heutzutage kaum mehr angewendet wird, sondern von deutlich effektiveren Modifikationen wie Quickprop, Rprop  etc abgel&#246;st wurde.</p>
<p>Mit &#252;ber 140 Seiten wird die Simulationstechnik Neuronaler Netze sehr ausf&#252;hrlich behandelt, insbesondere dem Stuttgarter Neuronale Netze Simulator (SNNS) ist viel Platz gewidmet. Die Betrachtung verschiedener Hardware-Architekturen ist in kaum einem anderen Buch zu finden -- leider sind viele der Informationen aus diesem Bereich aufgrund des Alters des Buches nicht mehr sehr aussagekr&#228;ftig. Im letzten Teil des Buches geht der Autor noch kurz auf Fuzzy-Logik, Evolutionsalgorithmen und Robotik ein.</p>
<p>Insgesamt konnte ich diesem Buch am meisten abgewinnen: Aufgrund der Informationsf&#252;lle eignet es sich hervorragend als Nachschlagewerk, der Schreibstil ist angenehm zu lesen und -- obwohl nicht an mathematischen Formeln gespart wird -- durchgehend verst&#228;ndlich. Mathematische Vorkenntnisse sind, wie immer, Voraussetzung.</p>
<h2>Hans-J&#252;rgen Zimmermann: Neuro + Fuzzy. Technologien -- Anwendungen.</h2>
<p>Erschienen im Februar 1999 im Springer-Verlag. Dieses Werk kann im Grunde nicht direkt mit den drei anderen vorgestellten B&#252;chern verglichen werden: Anstatt mit der Vorstellung neuronaler Netze hat der Herausgeber einen Text &#252;ber die industriellen Einsatzgebiete von Fuzzy Technologien als Einf&#252;hrung gew&#228;hlt.</p>
<p>Das Schlagwort "Fuzzy Logic" beschreibt dabei die Verallgemeinerung der klassischen Logik in Richtung des menschlichen Schlie&#223;ens. Danach werden kurz -- und dementsprechend oberfl&#228;chlich -- die Grundlagen neuronaler Netze er&#246;rtert, bevor auf die verschiedensten Anwendungsm&#246;glichkeiten der Kombination von neuronalen Netzen und Fuzzy-Logik eingegangen wird: Unter anderem sind das Automatisierungstechnik, industrielle Prozesse, Robotik, Chemie und Aktienmarktanalyse.</p>
<p>Da jedes Kapitel von einem oder mehreren Autoren geschrieben wurde variiert der Schreibstil stark. Weiterempfehlen w&#252;rde ich dieses Buch dann, wenn der Einsatz von neuronalen Netzen und/oder Fuzzy-Logik in einem der besprochenen Gebieten geplant ist.</p>
<h2>Weitere B&#252;cher</h2>
<p>Nun zu den B&#252;chern, die ich selbst (noch) nicht gelesen habe:</p>
<p><img src="http://www.aiplayground.org/img/gerhard-rigoll-neuronale-netze.jpg" alt="Gerhard Rigoll: Neuronale Netze" class="icon" border="0"><em>Gerhard Rigoll: Neuronale Netze. Eine Einf&#252;hrung f&#252;r Ingenieure, Informatiker und Naturwissenschaftler.</em> Erschienen im Expert-Verlag, M&#228;rz 1999. Der Amazon-Kurzbeschreibung nach handelt das Buch die Grundlagen neuronaler Netze auf &#228;hnliche Weise ab wie die meisten anderen B&#252;cher auch, mit dem einzigen Unterschied, dass es aus ingenieurswissenschaftlicher Sicht geschrieben ist.<br />
&nbsp;<br />
&nbsp;<br />
<img src="http://www.aiplayground.org/img/raul-rojas-theorie-der-nn.jpg" alt="Raul Rojas: Theorie der neuronalen Netze" class="icon" border="0"><em>Raul Rojas: Theorie der neuronalen Netze.</em> Erschienen im Springer-Verlag, 1993 (korrigierte Auflage: 1996). Mit Blick auf die biologischen Grundlagen werden verschiedene Ans&#228;tze neuronaler Netze erl&#228;utert und mit Beispielen, Illustrationen und Verweisen auf weiterf&#252;hrende Literatur abgerundet. Das Buch soll einen sehr guten &#220;berblick &#252;ber die verschiedenen theoretischen Modelle bieten ohne dabei an Tiefe zu verlieren. Eine Rezensent aus M&#252;nchen lobt die verst&#228;ndliche Sprache und empfiehlt das Buch als "gute Einf&#252;hrung" und als Begleitlekt&#252;re zu Vorlesungen. Die Parallelen zur Biologie, so schreibt er, k&#246;nnten ausf&#252;hrlicher sein.</p>
<p><img src="http://www.aiplayground.org/img/detlef-zaun-knn-computerlinguistik.jpg" alt="Detlef P. Zaun: KNN und Computerlinguistik" class="icon" border="0"><em>Detlef P. Zaun: K&#252;nstliche neuronale Netze und Computerlinguistik.</em> Wie schon dem Titel zu entnehmen ist geht es in diesem Werk vor allem um das Verh&#228;ltnis von Computerlinguistik und neuronalen Netzen. Die Amazon-Kurzbeschreibung erw&#228;hnt als Besonderheit dieses Buches das Verfahren der "selektiven Propagierung" und die Behandlung des "NEURON-S Simulators".<br />
&nbsp;<br />
&nbsp;<br />
<img src="http://www.aiplayground.org/img/adolf-grauel-neuronale-netze.gif" alt="Adolf Grauel: Neuronale Netze." class="icon" border="0"><em>Adolf Grauel: Neuronale Netze. Grundlagen und mathematische Modellierung.</em> Erschienen 1992. Ein Rezensent kritisiert die trockene Darstellung sowie die "unmotivierten mathematischen Eskapaden" -- ob diese Kritik berechtigt ist, konnte ich jedoch nicht feststellen. Dass Mathematik einen gro&#223;en Teil des Buches ausmacht ist angesichts des Titels kein Wunder.<br />
&nbsp;<br />
&nbsp;<br />
<img src="http://www.aiplayground.org/img/detelf-nauck-nn-fuzzy-systeme.jpg" alt="Detlef Nauck: Neuronale Netze und Fuzzy-Systeme." class="icon" border="0"><em>Detlef Nauck u.a.: Neuronale Netze und Fuzzy-Systeme.</em> Erschienen 1993 bei Vieweg. Haupts&#228;chlich geht es hier um den Einsatz neuronaler Netze in anderen wissensbasierten Systemen. Die Kopplung mit Fuzzy-Systemen nimmt dabei den gr&#246;&#223;ten Teil des Buches ein. Rezensionen loben die Verst&#228;ndlichkeit des Buches angesichts des komplexen Themas -- das Buch scheint einen Mittelweg zwischen theoretischen Grundlagen und praktischer Anwendung gefunden zu haben. Mathematische Kenntnisse sind Voraussetzung. Kritisiert wird unter anderem, dass Themen wie "Weight Decay" und adaptive Lernraten nicht behandelt werden.</p>
<p><img src="http://www.aiplayground.org/img/werner-kinnebrock-neuronale-netze.gif" alt="Werner Kinnebrock: Neuronale Netze." class="icon" border="0"><em>Werner Kinnebrock: Neuronale Netze.</em> Das Buch ist im Februar 2002 im Oldenbourg-Verlag erschienen, stellt Theorie und Anwendungen der wichtigsten Grundtypen neuronaler Netze vor und enth&#228;lt zu jedem Typ ein entsprechendes Pascal-Programm. Das Buch wird als "eines der besten Einsteigerwerke" und "sehr praxisbezogen" beschrieben, auch wenn es an Illustrationen mangelt und der Pascal-Code "schlecht dokumentiert" sein soll.<br />
&nbsp;<br />
<img src="http://www.aiplayground.org/img/ruediger-brause-neuronale-netze.gif" alt="R&#252;diger Brause: Neuronale Netze." class="icon" border="0"><em>R&#252;diger Brause: Neuronale Netze.</em> Erschienen im August 1999 im Teubner-Verlag. Die Amazon-Beschreibung spricht von einer Einf&#252;hrung in die Grundlagen der Neuroinformatik, die die wichtigsten neuronalen Modelle behandelt. Einer Rezension zufolge eher als Nachschlagwerk als zum kompletten Durcharbeiten geeignet.<br />
&nbsp;<br />
&nbsp;<br />
&nbsp;</p>
<p><img src="http://www.aiplayground.org/img/andreas-scherer-neuronale-netze.jpg" alt="Andreas Scherer: Neuronale Netze." class="icon" border="0"><em>Andreas Scherer: Neuronale Netze -- Grundlagen und Anwendungen.</em> Von der Vieweg Verlagsgesellschaft im Juni 2002 herausgegeben. Das Buch behandelt laut Umschlagtext die neuesten Ergebnisse aus dem Bereich der Lernverfahren sowie die methodischen Prinzipien bei der Erstellung von konnektionistischen Softwaresystem, inklusive Fallbeispiele.<br />
&nbsp;<br />
&nbsp;<br />
&nbsp;</p>
<p><img src="http://www.aiplayground.org/img/serge-zakharian-nn-ingenieure.jpg" alt="Serge Zakharian: Neuronale Netze f&#252;r Ingenieure." class="icon" border="0"><em>Serge Zakharian u.a.: Neuronale Netze f&#252;r Ingenieure</em> Von der Vieweg Verlagsgesellschaft 1998 herausgegeben. Die Besonderheit dieses Buches ist, dass als Beschreibungssprache f&#252;r die Modelle neuronaler Netze die Symbolik der Regelungstechnik gew&#228;hlt wurde. Das Buch soll damit eine Vorstufe zur praktischen Anwendung Neuronaler Netze in der Regelungstechnik darstellen.<br />
&nbsp;<br />
&nbsp;<br />
<img src="http://www.aiplayground.org/img/heinrich-braun-neuronale-netze.jpg" alt="Heinrich Braun: Neuronale Netze." class="icon" border="0"><em>Heinrich Braun: Neuronale Netze</em> Erschienen im August 2001 im Springer-Verlag. Ein Rezensent spricht von einem Buch "f&#252;r Leute mit Vorwissen". Verst&#228;ndlich, da es haupts&#228;chlich um die Optimierung neuronaler Netze geht. Verschiedene, miteinander kombinierbare Bausteine werden dabei er&#246;rtert: "Neuronales Modell vs. Neuro-Fuzzy-Modell, Supervised Learning vs. Reinforcement Learning, Gradientenabstieg vs. Evolution, sequentiell vs. parallel".<br />
&nbsp;</p>
<p><em>Patrick Hamilton: K&#252;nstliche neuronale Netze. Grundprinzipien, Hintergr&#252;nde, Anwendungen.</em> VDE-Verlag. Nicht der neueste Stand der Dinge: Das Buch erschien im Jahre 1993.</p>
<p><em>Jeanette Stanley, Evan Bak: Neuronale Netze. Computersimulation biologischer Intelligenz.</em> Ebenfalls schon etwas &#228;lter: Erscheinungsdatum 1992. Eine Rezension spricht von "gravierenden Fehlern in Text, Formeln und Diagrammen", eine andere wiederum lobt die leichte Verst&#228;ndlichkeit.</p>
<p><em>Soren Brunak, Benny Lautrup: Neuronale Netze, die n&#228;chste Computer-Revolution.</em> Erscheinungsdatum: November 1996. Das Buch ist als leicht verst&#228;ndliche Einf&#252;hrung f&#252;r Nicht-Informatiker gedacht. Der Grundtenor der Amazon-Rezensionen: Das Buch sei "gute Unterhaltung" und wecke Interesse, gehe aber nicht auf die zugrunde liegende Mathematik oder Details bestimmter Modelle ein. Vergleiche aus dem Alltag und interessante Geschichten sorgen daf&#252;r, dass der Leser mitreden kann, ein Verst&#228;ndnis der Hintergr&#252;nde wird dagegen nicht angestrebt.</p>
<p><em>Heinrich Braun u.a.: Praktikum Neuronale Netze.</em> Erschienen 1996 im Springer-Verlag. Neben dem klassischen Perzeptron werden Themen wie Backpropagation, Hopfield-Netze und Kohonens neuronale Karten vorgestellt. Dazu stellt das Buch &#220;bungsaufgaben, die sich mit der beiliegenden Software durchf&#252;hren lassen. Dass diese nicht mehr ganz taufrisch ist zeigen auch die Systemvoraussetzungen: "DOS-PC ab Windows 3.1 mindestens 386er Prozessor. 4MB Hauptspeicher, 2MB Arbeitsspeicher".</p>
<p><em>Helge Ritter u.a.: Eine Einf&#252;hrung in die Neuroinformatik selbstorganisierender Netzwerke.</em> Erscheinungsdatum: 1990.  Ein Student schreibt sinngem&#228;&#223;: Sind mathematische Vorkenntnisse vorhanden, so dient das Buch als anschauliche Einf&#252;hrung in das Gebiet der selbstorganisierenden Netzwerke. Beispiele und konkrete Problemstellungen erkl&#228;ren einzelne Modelle, der Zusammenhang mit den biologischen Hintergr&#252;nden wird durchgehend aufrechterhalten. F&#252;r die vertiefte Betrachtung der mathematischen Eigenschaften wurde ein eigener Teil des Buches reserviert.</p>
<p>Neben diesen B&#252;chern sind mir noch folgende drei bekannt, n&#228;here Informationen dazu konnte ich jedoch nicht finden:</p>
<p><em>Marco Seraphin: Neuronale Netze und Fuzzy-Logik.</em><br />
<em>Wolfgang Lindenmair u.a.: Neuronale Netze.</em><br />
<em>Klaus P. Kratzer: Neuronale Netze. Grundlagen und Anwendungen.</em></p>
<p>Wer des Englischen m&#228;chtig ist, sollte unbedingt einen Blick auf die englischsprachige Literatur zum Thema werfen. Die Auswahl ist noch deutlich gr&#246;&#223;er: Amazon.com kennt etwa 1500 B&#252;cher mit den Worten "neural networks" im Titel. Dazu kommt, dass einige neue Entwicklungen zum Teil in der deutschen Literatur noch gar nicht behandelt wurden.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.aiplayground.org/artikel/neuronale-netze-buecher/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

