modlab Grundlagen der Bioinformatik Ergänzende Unterlagen zu ausgewählten Kapiteln Prof. Dr. G. Schneider erstellt u.M.v. Markus Hartenfeller, Jan A. Hiß, Michael Meissner, Ewgenij Proschak, Michael Schmuker, Yusuf Tanrikulu, Martin Weisel, Matthias Wirth © modlab® 2007 © modlab® 2007 Inhaltsverzeichnis INHALTSVERZEICHNIS...................................................................................................... 3 SEQUENZALIGNMENT........................................................................................................ 5 PAARWEISES ALIGNMENT ....................................................................................................... 7 HEURISTIKEN FÜR LOKALES ALIGNMENT .............................................................................. 10 SIGNIFIKANZ LOKALER ALIGNMENTS .................................................................................... 14 MULTIPLES ALIGNMENT........................................................................................................ 15 Heuristiken für multiple Alignments ................................................................................ 17 LITERATUR ............................................................................................................................ 20 AUTOKORRELATIONSVEKTOREN............................................................................... 21 MATHEMATISCHE DEFINITION .............................................................................................. 22 TRANSFER IN DIE CHEMIEINFORMATIK .................................................................................. 23 Beispiel ............................................................................................................................. 25 ANWENDUNG VON KORRELATIONSVEKTOREN ...................................................................... 26 LITERATUR ............................................................................................................................ 27 NIPALS-ALGORITHMUS ................................................................................................... 29 PRINZIP UND SCHRITTE DES ALGORITHMUS .......................................................................... 30 LITERATUR ............................................................................................................................ 31 GRUNDLAGEN GRAPHENTHEORIE ............................................................................. 33 Graphen............................................................................................................................ 33 Subgraphen, Pfade, Zyklen, Cliquen ................................................................................ 35 GRAPHENTHEORETISCHE PROBLEME UND IHRE LÖSUNGEN IN DER CHEMINFORMATIK ......... 36 Subgraph-Isomorphismus................................................................................................. 36 Maximum Common Substructure ..................................................................................... 40 Cliquendetektion auf dem Assoziationsgraphen .............................................................. 41 LITERATUR ............................................................................................................................ 45 KÜNSTLICHE NEURONALE NETZE .............................................................................. 47 Genereller Aufbau von Feed-Forward-Netzen ................................................................ 47 DAS PERZEPTRON .................................................................................................................. 48 Das Single Layer Perzeptron ........................................................................................... 48 Die Lösung des XOR-Problems........................................................................................ 51 MEHRLAGIGE NETZE ............................................................................................................. 52 NETZTRAINING ...................................................................................................................... 53 PROBLEME UND LÖSUNGSANSÄTZE....................................................................................... 58 LITERATUR ............................................................................................................................ 61 PARTIKELSCHWARM-OPTIMIERUNG (PSO)............................................................. 63 DER ALGORITHMUS............................................................................................................... 64 ZUSAMMENFASSUNG ............................................................................................................. 66 LITERATUR ............................................................................................................................ 67 AMEISENALGORITHMEN................................................................................................ 69 AMEISENALGORITHMEN IN DER ANWENDUNG ...................................................................... 70 LITERATUR ............................................................................................................................ 72 © modlab® 2007 © modlab® 2007 Sequenzalignment 5 Sequenzalignment Die ersten Algorithmen zur Sequenzanalyse wurden in den 50er Jahren des 20. Jahrhunderts erdacht, als die ersten Proteinsequenzen bekannt wurden. Mit der von Fred Sanger entwickelten Methode zur Sequenzierung von DNA (Kettenabbruchreaktion, 1975) wurden zudem schnell große Anzahlen an Nukleotidsequenzen verfügbar. Die hier vorgestellten Alignment-Algorithmen dienen dem Vergleich und der Analyse von Sequenzalignments und werden verwendet, um die strukturelle, funktionelle oder evolutionäre Verwandtschaft von DNA- oder Proteinsequenzen aufzuklären. Das Ausrichten zweier Sequenzen gelingt beim paarweisen Alignment durch Gegenüberstellung von gleichartigen Positionen (Matches) oder möglichst ähnlichen Positionen (Mismatches) und dem Einfügen von Lücken (Gaps) an den Stellen, an denen sich die Sequenzen durch Punktmutationen (Substitutionen, Insertionen oder Deletionen) unterscheiden. Dabei finden Scoring-Matrizen Anwendung, die überwiegend aus multiplen Alignments bekannter homologer Sequenzen abgeleitet wurden und konservierten oder sehr ähnlichen Positionen positive Werte (Scores) zuweisen, während unähnliche Positionen meist negative Werte erhalten (es gibt auch Scoring-Matrizen, die auf physikochemischen Eigenschaften beruhen und nicht aus Alignments abgeleitet wurden). Die Bestrafung von Lücken erfolgt durch die Gap-Funktion γ (Formel 1), die negativ in den Score eines Alignments eingeht. Dabei finden meist „affine“ Gap-Penalties Verwendung, bei denen ein langes Gap weniger schlecht bewertet wird, als mehrere kurze. Dies gelingt dadurch, dass die erste Stelle eines Gaps der Länge g mit einer Gap-Open-Penalty d stärker bestraft wird als die restlichen Positionen der gleichen Lücke, die mit der Gap-Extension-Penalty (Formel 1) e bestraft werden (d > e). © modlab® 2007 Sequenzalignment γ(g) = d + (g-1) · e. 6 (1) (Die lineare Gap-Penalty kann als Sonderfall der affinen Gap Penalty angesehen werden , wobei d = e.) Bewertung eines Alignments am Beispiel: Für die beiden DNA-Sequenzen TAAACAC und TGCATAC schlagen wir folgendes Alignment vor: TAA__ACAC T__GCATAC Wenn wir jeden Match mit +1 belohnen, jeden Mismatch mit –m und jeden Gap mit obiger affiner Gap-Penalty γ bestrafen, erhält unser Alignment einen Score von 4 – m –2d – 2e. Wie bereits erwähnt, werden üblicherweise Scoring-Matrizen verwendet, die Matches positive Scores zuweisen, während Mismatches meist negative Werte erhalten. Dabei sorgt eine Konvention dafür, dass ein Mismatch nicht strenger bestraft wird als zwei einzelne GapPositionen, durch die man den Mismatch vermeiden könnte. Während das optimale paarweise Alignment in Laufzeit O(n²) relativ schnell (aber oft immer noch zu langsam für eine effiziente Datenbanksuche) berechnet werden kann, ist das optimale multiple Alignment mit O(nk) (k = Anzahl der Sequenzen) nicht mehr effizient zu berechnen. Hier finden Heuristiken (CLUSTAL W, Feng & Doolittle Ansatz) Verwendung, die paarweises Alignment mit phylogenetischen Methoden kombinieren. So werden von den Sequenzen ausgehend phylogenetische Bäume erstellt und die einander ähnlichsten Sequenzen in paarweisen Alignments vereinigt, die wiederum zum fertigen multiplen Alignment zusammengesetzt werden. Im nun folgenden Abschnitt sollen Algorithmen zum paarweisen Alignment betrachtet werden. © modlab® 2007 Sequenzalignment 7 Paarweises Alignment Globales Alignment Wir haben zwei Sequenzen x,y der Länge n,m gegeben und vermuten, dass diese miteinander verwandt sind. Um nicht alle exponentiell viele Alignments berechnen zu müssen, benutzen wir einen dynamischen Programmierungsansatz: Der Needleman-Wunsch-Algorithmus (1970) liefert uns optimale globale Alignment in Laufzeit O(n · m). Dazu erstellen wir uns einen (n × m) Alignmentgraphen, in dem wir in allen Feldern je drei Kanten beschriften (Abb. 1). Die mit Di,j beschrifteten diagonalen Kanten repräsentieren einen Match bzw. einen Mismatch zwischen den jeweiligen Positionen i,j in den Sequenzen x,y und werden mit den zugehörigen Scores S beschriftet. Die vertikalen bzw. horizontalen Kanten (V, H) repräsentieren jeweils einen Gap in der ersten bzw. zweiten Sequenz. Indem wir uns bereits errechnete Scores der besten Sequenzanfänge merken und mit dynamischen Programmieren weitergeben, erhalten wir die o.g. Laufzeitbeschleunigung. So trägt jede mit Di,j beschriftete Kante den Score des besten Alignments bis zu dieser Stelle (Formel 2, hier ausgehend von Di+1,j+1). Di+1,j+1 = S(xi+1, yj+1) + max {Di,j + Vi,j + Hi,j} x1 x2 (2) xn H1,0 y1 V0,1 D1,1 xi y2 yj Di,j Hi,j yj+1 ym xi+1 Vi,j Hi+1,j Vi,j+1 Di+1,j+1 Dn,m Vn,m Hn,m Abbildung 1: Die Kanten des Alignmentgraphen tragen den Score des besten Alignments bis zu dieser Stelle. © modlab® 2007 Sequenzalignment 8 Bei den Rekursionen für horizontale und vertikale Kanten werden keine Scores verteilt, da Gaps keine Beiträge zum Alignment liefern. An dieser Stelle fließen jedoch die Gap-Openoder Gap-Extension-Penalties (d,e) ein (Formel 3). Hi+1,j = max {Di,j - d, Vi,j - d, Hi,j - e} (3) Nachdem wir alle Kanten beschriftet haben, erhalten wir den Score des optimalen globalen Alignments (Formel 4). S* = max {Dn,m, Vn,m, Hn,m} (4) Den dazugehörigen Pfad erhalten wir per Traceback über die maximalen Kanten. Das bedeutet wir laufen die Kanten rückwärts bis zum Start und entscheiden uns jeweils für die Kante, die den maximalen Beitrag zum Score geliefert hat (Abb. 2). S* Abbildung 2: Der Traceback über die Kanten mit den maximalen Beschriftungen liefert den Pfad zum optimalen Alignment. Ein Wort zur Laufzeit: Wir beschriften insgesamt 3·n·m Kanten und benötigen für den Traceback maximal n+m Kanten und bleiben mit 3·n·m +n+m asymptotisch in O(n·m). Lokales Alignment Wenn wir vermuten, dass nur ein Teil (xk,...,xi) einer Sequenz x mit einem Teil (yl,...,yj) einer Sequenz y übereinstimmt, verwenden wir den Smith-Waterman-Algorithmus (1981), der das optimale lokale Alignment für die beiden Sequenzen in O(n·m) findet. Diese Suchstrategie wird z.B. verwendet, wenn wir eine Sequenz gegen eine ganze Datenbank alignieren möchten oder überprüfen wollen, ob z.B. ein Hefeprotein irgendwo im Humangenom vorkommt. © modlab® 2007 Sequenzalignment 9 Wir benutzen wieder die affine Gap-Penalty und beschriften die Kanten Di,j, Hi,j, Vi,j wie beim Needleman-Wunsch-Algorithmus, jedoch mit folgendem Unterschied: Wir geben jeder Kante die Möglichkeit, ein neues lokales Alignment mit Score ≥ 0 zu starten. Das bedeutet, dass eine Kante nicht ein möglicherweise negatives Erbe von schlechten Sequenzanfängen weiterführen muss, sondern stets ein neues lokales Alignment starten kann. Mit anderen Worten: Die Teile die außerhalb des optimalen lokalen Alignments liegen, gehen nicht negativ in den Score ein (Abb. 3). xk... ...xi y.l .. ... yj Abbildung 3: Das optimale lokale Alignment – kein anderes lokales Alignment erreicht einen größeren Score. Die Rekursionen ändern sich wie folgt (Formeln 5, 6, 7): Di+1,j+1 = max {0, Di,j + S(xi+1, yj+1), Hi,j + S(xi+1, yj+1), Vi,j + S(xi+1, yj+1)} (5) Hi+1,j = max {0, Di,j - d, Hi,j - e, Vi,j - d} (6) Vi,j+1 = max {0, Di,j - d, Hi,j - d, Vi,j - e} (7) Das optimale lokale Alignment erhalten wir per Traceback über die Kanten, die den maximalen Beitrag geliefert hatten. Dabei haben wir uns während des Beschriftens der Kanten den maximalen Score gemerkt und gehen von dieser Kante (nicht von Dn,m, Hn,m oder Vn,m wie beim Needleman-Wunsch-Algorithmus) nach links oben vor, bis wir eine Kante erreichen, die den Score 0 trägt. Der Teil zwischen dem Score 0 und dem maximalen Score ist unser lokal optimales Alignment. Laufzeit und Speicherplatz betragen wie beim Needleman-Wunsch-Algorithmus O(n·m), was deutlich besser ist, als exponentielle Laufzeit, aber für die Suche in großen Datenbanken zu © modlab® 2007 Sequenzalignment 10 langsam ist. Hier finden die Heuristiken BLAST oder FASTA Anwendung, die zwar nicht unbedingt das optimale lokale Alignment finden, dafür aber deutlich schneller laufen und meist gute Ergebnisse liefern. Heuristiken für lokales Alignment BLAST (Basic Local Alignment Search Tool) BLAST ist eine Heuristik für lokale Alignments, die mit einer Laufzeit von O(n+m) deutlich schneller ist als der Needleman-Wunsch-Algorithmus, jedoch nicht in jedem Fall das optimale lokale Alignment findet. Gegeben seien eine kürzere Sequenz S der Länge m und eine lange Sequenz T mit Länge n, gegen die S in einem (oder mehreren) lokalen Alignment(s) aligniert werden soll. Dazu wird S in kleine Teilwörter zerteilt (Default: Wortlänge |w| = 3 bei Proteinen, |w| = 11 bei Nukleinsäuren). Hierbei fügt BLAST auch ähnliche Wörter hinzu, deren Score einen bestimmten Schwellenwert t überschreiten (diese leicht veränderten Suchwörter stehen für Mutationen, die sich während des Evolutionsprozesses eingeschlichen haben könnten). Aus diesen Teilwörtern lässt sich ein Schlüsselwortbaum so konstruieren, dass die lange Sequenz T fast in linearer Zeit durch den Suchbaum aus den Fragmenten des Suchstrings S geschoben werden kann. Dies gelingt dadurch, dass die Suchmuster so in den Baum eingefügt werden, dass sie sich erst aufspalten, wenn sie sich unterscheiden. Z.B. für Sequenz S = KLLGV (Abb. 4). L G V L L G K L Abbildung 4: Schlüsselwortbaum für Sequenz S. © modlab® 2007 Sequenzalignment 11 So kann man im Fall eines Mismatches bei der Mustersuche direkt an die richtige Stelle eines anderen Musters mit gleichem Präfix springen. Dies bringt die gewünschte Laufzeiteinsparung (Vergleiche hierzu auch weiterführende Literatur. Stichwort: „AhoCorasick-Algorithmus“). Wir schieben nun den langen Text T durch den Suchbaum und geben alle Matches aus (alle Fragmente mit Score ≥ t). Diese lassen sich in einem Alignmentgraphen (Dotplot) darstellen und repräsentieren Stücke, die in beiden Sequenzen identisch (bzw. ähnlich im Falle der zusätzlich eingefügten Strings mit Score ≥ t) sind. In einem weiteren Schritt verlängern wir diese gefundenen Alignments entlang der Diagonalen zu sogenannten HSPs (High Scoring Segment Pairs). Diese sind so definiert, dass sie sich durch Verlängern oder Verkürzen in ihrem Score nicht mehr verbessern lassen. Wir können uns nun eine Reihe guter lokaler Alignments ausgeben lassen, die einen bestimmten Mindestscore überschreiten oder einfach das MSP (Maximum Scoring Segment Pair) betrachten. Wie schon angedeutet findet BLAST nicht unbedingt das optimale lokale Alignment, liefert aber meist sehr gute Ergebnisse. Die Laufzeit ist mit O(n+m) deutlich schneller als beim Smith-Waterman-Algorithmus. Anmerkung: In der klassischen BLAST Version werden HSPs nur entlang der Diagonalen verlängert. Beim sog. GAPPED BLAST werden nur solche HSPs betrachtet, die (innerhalb eines begrenzten Abstands zueinander) auf einer gemeinsamen Diagonalen liegen, dass heißt einem gemeinsamen gaplosen Alignment angehören. Zwischen diesen HSPs suchen wir nun nach örtlichen Exkursionen, die unsere beiden HSPs mit einem weiteren HSP über Gaps verbinden kann (Abb. 5). Sequenz 1 Abbildung 5: Gapped BLAST: einzelne HSPs werden über Gaps verbunden, wenn sich dadurch der Score verbessern lässt. © modlab® 2007 Sequenzalignment 12 Um weiter entfernte Sequenzen zu finden empfiehlt sich PSI-BLAST (Position Sensitive Iterated-BLAST). Hierbei wird aus signifikanten Treffern einer BLAST-Suche ein multiples Alignment erstellt, aus dem ein Profil abgeleitet werden kann. Im Profil sind die jeweiligen Wahrscheinlichkeiten für jedes Nukleotid bzw. jede Aminosäure für die jeweilige Position im Alignment vermerkt. Dieses Profil wird nun zur Datenbanksuche eingesetzt, die resultierenden signifikanten Treffer wieder aligniert und ein neues (noch variableres) Profil erstellt. Nach mehreren Iterationen endet das Verfahren. PSI-BLAST findet auch weiter entfernte Sequenzen (auch < 30% Identität). Die wichtigsten Datenbanken (Genbank, EMBL und DDBJ) lassen sich allesamt mit BLAST durchsuchen. Die zahlreichen BLAST-Varianten sind in der BLAST-Suite zusammengefasst: http://www.ncbi.nlm.nih.gov/blast/producttable.shtml#pstab Die wichtigsten Varianten: blastn: zur Suche in Nukleotidsequenzdatenbanken. blastp: zur Suche in Proteinsequenzdatenbanken. blastx: Vergleicht eine Nukleotidsequenz (in allen Leserastern translatiert) gegen eine Proteindatenbank. tblastn: Vergleicht eine Proteinsequenz gegen eine Nukleotiddatenbank (dynamisch in allen Leserastern translatiert) tblastx: Vergleicht die six-frame-Translation einer Nukleotidsequenz gegen die six-frame-Translationen einer Nukleotidsequenzdatenbank. FASTA Auch hier soll ein kurzer Text S in einem langen Text T gefunden werden. Wir gehen ähnlich wie bei BLAST vor und zerteilen Text S in kleinere Bruchstücke. Der Parameter „ktup“ bestimmt hier die Länge der Bruchstücke, die gematcht werden sollen (Default: ktup = 6 für DNA, 2 für Proteine). Da die Bruchstücke hier kleiner sind als bei BLAST, suchen wir nicht mit Pattern-Matching-Algorithmen nach Übereinstimmungen, sondern mit dem sog. 'lookup © modlab® 2007 Sequenzalignment 13 table', einer Hashing-Tabelle. Im Lookup-Table wird das Auftreten aller Aminosäuren bzw. Nukleotide in der Sequenz T aufgeführt, z.B. für die Sequenz T= A1G2T3A4C5A6 (Tab. 1). Tabelle 1: Lookup-Table für Sequenz T Symbol A G T C Position 1,4,6 2 3 5 Beginnt ein Suchstring der Länge ktup aus S mit einem 'A', erkennen wir im lookup-table, dass im Text T ein 'A' an den Positionen 1,4 und 6 auftritt. Steht in S an zweiter Postion ein 'G', prüfen wir, ob es ein 'G' in T an den Positionen 2,5 oder 7 gibt (also ein Zeichen nach den schon gefundenen 'A's.), usw. Man kann so sehr schnell alle "hotspots" aufspüren. Das sind genau die Stellen, an denen T und S an mindestens ktup Positionen übereinstimmen. Die Übereinstimmungen tragen wir in einen Dotplot ein. Wir können nun die Init1-Scores berechnen, d.h. wir verlängern alle hotspots zu HSPs (s.o.) entlang der Diagonalen. Danach berechnen wir die Initn-Scores, dass heißt, wir versuchen lokal die besten n HSPs durch Gaps zu verbinden, s.d. ein noch höherer Alignment-Score resultiert. Die Breite der Nachbarschaftssuche wird dabei auf einen bestimmten Rahmen beschränkt: Ausgehend von den Init1's betrachten wir die umliegenden 32 Diagonalen (16 höher, 16 tiefer). Ein besonderes Merkmal von FASTA ist die anschließende "Exakte Scorebestimmung": Für den Bereich in dem das Alignment mit dem höchsten Initn-Score wird nochmal ein exaktes lokales Alignment mit dem Smith-Waterman-Algorithmus berechnet. Dabei ist der betrachtete Rahmen noch etwas größer als der Bereich in dem das beste Initn-Alignment liegt, um eventuelle Fehler von FASTA auszugleichen (Abb. 6). Fazit: BLAST vs. FASTA BLAST läuft schneller, weil die Suchkriterien hier strenger sind als bei FASTA (FASTA findet mehr Treffer, wg. Default ktup = 2, während |w| = 3 bei BLAST (für Proteine)). Dafür findet FASTA aber mit höherer Wahrscheinlichkeit das optimale Alignment, durch Anwendung des Smith-Waterman-Algorithmus. © modlab® 2007 Sequenzalignment 14 Sequenz 1 Suchraum um Init1's Smith-Waterman Abbildung 6: Exakte Scorebestimmung von FASTA. Signifikanz lokaler Alignments Die Signifikanz eines Alignments drückt aus, wie aussagekräftig dessen Score tatsächlich ist: Ist der Score das Ergebnis eines zufälligen Prozesses oder ist der Score so hoch, dass wir ausschließen können, dass die Ähnlichkeit der Sequenzen zufällig ist? In diesem Fall gehen wir davon aus, dass die Sequenzen homolog sind. Hier sollen mit dem Z-Wert, P-Wert und dem E-Wert drei Maße für Signifikanz vorgestellt werden. Z-Wert Ist der Score S unseres Alignments besser als der einer zufällig (aus den gleichen Bausteinen) zusammengewürfelten Sequenz? Dazu berechnen wir üblicherweise 100 neue Alignments, dazu den Mittelwert ihrer Scores und die Standardabweichung (Formel 8). Z-Score von S = (S – Mittelwert) / Standardabweichung (8) Ein Z-Wert von ≥ 5 gilt als signifikant. Dies tritt ein, wenn der beobachtete Score deutlich höher ist, als der Mittelwert der zufällig erstellten Sequenzen. Je höher ein Z-Score, desto geringer ist dabei die Wahrscheinlichkeit, dass der beobachtete Alignmentscore nur Zufall ist. Ein Z-Score von 0 bedeutet, dass der beobachtete Score nicht größer ist als der einer „zufälligen Sequenz“. © modlab® 2007 Sequenzalignment 15 P-Wert Hier berechnen wir die Wahrscheinlichkeit für das Ereignis, dass ein so hoher Score wie der beobachtete Score S zufällig zustande kam (Nullhypothese). Fällt die Wahrscheinlichkeit für alle Alignments der gleichen Länge, die einen Score S erreichen oder übertreffen unter das Signifikanzniveau von 5%, verwerfen wir die Nullhypothese und gehen von Homologie der Sequenzen aus. Das heißt, die Ähnlichkeit der betrachteten Sequenzen ergibt sich durch gemeinsame Abstammung und nicht durch Zufall. E-Wert Der E-Wert (Formel 9) gibt den Erwartungswert für ein unabhängiges Alignment an, dass dieses einen Score ≥ S erreicht. E-Wert für S = n · m · k · e-λS . (9) λ und k sind hier Skalierungsfaktoren für die Größe des Suchraums und die gewählte Scoringmatrix. Der E-Wert wird besonders häufig zur Bestimmung der Signifikanz von homologen Alignments verwendet, da er (anders als Z- und P-Wert) Sequenzlängen berücksichtigt. Das bedeutet, liefern zwei Sequenzen A,B den gleichen Score S und A ist kürzer als B, so hat B einen deutlich höheren E-Wert (ist also weniger signifikant), da es ja mehr Positionen benötigt hat, um den Score S zu erreichen. Die unterschiedlichen Sequenzlängen gehen mit (n·m) in die Formel des E-Wertes ein. Multiples Alignment Das multiple Alignment liefert im Gegensatz zum paarweisen Alignment genauere Informationen über Aminosäureverteilungen an bestimmten Positionen, da sich hieraus ableiten lässt, wie stark konserviert eine Position tatsächlich ist. Darüberhinaus geben sie Aufschluss darüber, wie wahrscheinlich der Austausch einer bestimmten Aminosäure durch © modlab® 2007 Sequenzalignment 16 eine andere ist. Hierauf beruhen z.B. die PAM-Scoring-Matrizen, die sich aus den Austauschwahrscheinlichkeiten von Aminosäuren aus Alignmentblöcken errechnen lassen. Zudem lassen sich aus multiplen Alignments von Proteinen einer Familie Profile ableiten, mit denen man nach weiteren Vertretern dieser Familie suchen kann. Während für paarweises Alignment effiziente Algorithmen vorhanden sind, ist die Berechnung des optimalen Alignments für mehr als zwei Sequenzen nicht mehr effizient möglich. Hier müssten wir den Weg mit optimalem Score durch eine n-dimensionale Matrix finden, was exponentielle Laufzeit benötigt. Abhilfe schaffen hier Heuristiken für multiple Alignments. Scores für multiples Alignment Der Gesamtscore eines multiplen Alignments m errechnet sich als die Summe der Scores seiner Spalten i. Zusätzlich gehen hier die Gap-Penalties G negativ ein (Formel 10). S(m) = G + ∑ S(mi ) (10) i Die Scores der einzelnen Spalten lassen sich auf verschiedene Weise berechnen: Sum of Pair Scores Hierzu berechnen wir die Scores aller n! möglichen Paare einer Alignmentposition (z.B. mit PAM- oder BLOSUM-Matrizen). Ein Problem beim Sum of Pair Score ist, dass kleine evolutionäre Ereignisse überbewertet werden. Ist nämlich nur eine Position einer sonst konservierten Spalte mutiert, so geht der (meist negative) Score für den Mismatch mit allen anderen (n-1) Positionen n-1 mal in den Spaltenscore ein. Entropie-Scores • Shannon-Entropie (Formel 11) | A| H = −∑ p k log 2 p k , wobei k=1 © modlab® 2007 (11) Sequenzalignment 17 |A| = Die Länge des Alphabets (z.B. 20 Aminosäuren) pk = Die relative Häufigkeit des Elementes k in der betrachteten Spalte Die Shannon-Entropie ist ein Minimum-Entropie-Score, d. h. eine durchweg konservierte Spalte (Optimum) erhält den Score 0, während der Score bei immer größer werdender Unordnung (Entropie) immer größere (positive!) Werte annimmt (das Maximum ist abhängig von der Größe des Alphabets). Der sog. Information-Content I (Formel 12) kann als die „reverse“ Shannon-Entropie aufgefasst werden. Er drückt aus, wie aussagekräftig eine Spalte im multiplen Alignment ist (je höher der Wert, umso besser). | A| I = H max − H act = log 2 | A | +∑ p k log 2 p k . (12) k =1 • Kullbach-Leibler-Distanz (Formel 13) H(P || Q) = ∑ p k log k pk qk (13) Die Kullbach-Leibler-Distanz beschreibt die „Distanz“ zwischen der beobachteten Häufigkeit pk (also der relativen Häufigkeit einer Aminosäure oder eines Nukleotids k in der Spalte) und der Hintergrundverteilung qk (der erwarteten Wahrscheinlichkeit für das Auftreten einer Aminosäure oder eines Nukleotids). Mit anderen Worten: Die durch einen Mismatch in der Spalte hervorgerufene Entropie wird noch erhöht, wenn die betreffende Position (AS oder Nukleotid) besonders selten auftritt. Heuristiken für multiple Alignments Die Berechnung des optimalen multiplen Alignments von n Sequenzen ist zeitaufwendig. So ließe sich zwar in einem n-dimensionalen Ansatz ähnlich zum Needleman-WunschAlgorithmus durch die Berechnung der jeweils besten Scores in einer n-dimensionalen Matrix durch dynamisches Programmieren das optimale multiple Alignment berechnen, jedoch wäre © modlab® 2007 Sequenzalignment 18 die Laufzeit immer noch exponentiell. Das Problem ist, das jede der n Positionen in einer Spalte entweder ein Gap oder eine tatsächliche Position (AS oder Nukleotid) sein könnte. Wenn wir verbieten, dass alle Positionen einer Spalte Gaps sein können, beschert uns dies immer noch 2n-1 mögliche Kombinationen, deren Scores es über m Spalten hinweg zu maximieren gilt. Es gibt Branch & Bound-Ansätze, die nicht die Sequenzanfänge aller Alignments berechnen (wie im Brute-Force-Ansatz), sondern unwahrscheinliche Alignments von der Berechnung ausschließen. Diese Methoden benötigen jedoch immer noch exponentielle Laufzeit, auch wenn sie um eine Konstante besser sind. Nachfolgend sollen zwei Heuristiken vorgestellt werden, die zwar einen Verlust der Genauigkeit in Kauf nehmen, dabei aber deutlich schneller sind als Brute-Force-Ansätze und dennoch gute Ergebnisse bringen. Feng-Doolittle-Algorithmus Vorgehen: 1. Aligniere alle Sequenzen paarweise mit dem Needleman-Wunsch-Algorithmus. 2. Weise allen n-1 Sequenzpaaren Distanzen zu. Der Feng-Doolittle-Algorithmus berechnet hierzu den sog. „difference score“. Dieser entspricht in etwa dem Reversal des erhaltenen Scores eines paarweisen Alignments, d.h. je höher der Score des Alignments, desto niedriger der difference score. So wird eine hohe Ähnlichkeit zwischen zwei Sequenzen in eine niedrige Distanz übersetzt. 3. Berechne aus den Distanzen einen phylogenetischen Baum mit UPGMA. 4. Aligniere längs der Kanten (ausgehend von den Blättern) Sequenz-Paare, SequenzBlock-Paare und Block-Paare (Abb. 7). Seq 1 Seq 2 Seq 3 Seq 4 Seq 5 Block (1,2) Block (1,2,3) Block (4,5) Block (1,2,3,4,5) Abbildung 7: Multiples Alignment mit Feng-Doolittle: Aligniere zunächst Blätter untereinander, dann Blätter gegen Blöcke und schließlich Blöcke untereinander. © modlab® 2007 Sequenzalignment 19 Zunächst werden je zwei Sequenzen zu einem Block zusammengefügt, und gegen diesen Block können später weiter Sequenzen oder andere Blöcke aligniert werden. Ein einmal in einem Block fixiertes Alignment bleibt für das multiple Alignment mit all seinen Gaps nach der Regel „once gap, always gap“ erhalten. Mit einer Ausnahme: In den fixierten Block kann ein globales Gap eingefügt werden, um eine weitere Sequenz gegen den Block zu alignieren. Eine Sequenz, die neu zu einem Block hinzugefügt werden soll, wird zunächst mit allen Sequenzen des Blocks paarweise aligniert (n-1 viele paarweise Alignments). Die Sequenz wird dann gemäß des besten paarweisen Alignments in den Block eingefügt. Als Ausgabe erhalten wir einen Block, der das Alignment aller unserer Sequenzen beinhaltet, also das multiple Alignment. CLUSTAL W Clustal W verfolgt eine ähnliche Strategie wie Feng-Doolittle. Deshalb sollen hier nur die wesentlichen Unterschiede vorgestellt werden. Zunächst werden auch hier alle paarweisen Alignments berechnet und Distanzen zugewiesen. Dabei kennt CLUSTAL W neben dem difference score aus dem Alignment Score wahlweise noch einen heuristischen Ansatz zur Berechung der Distanzen. So kann die Distanz in einem beschleunigten Verfahren über die Anzahl der identischen Treffer bei einer ktup-Suche (siehe FASTA) berechnet werden. Aus den Distanzen wird wieder ein phylogenetischer Baum aufgebaut, hier aber nach der Neighbor-Joining-Methode. Ausgehend von den Blättern werden nun wieder zunächst Sequenzen miteinander aligniert. Diese werden aber nicht zu fixierten Blöcken zusammengefasst, sondern an den Knoten zu Profilen geclustert. Ein Profil ist eine Matrix, die für jede der 20 Aminosäuren (oder 4 Nukleotide) die relative Häufigkeit ihres Auftretens an dieser Stelle im multiplen Alignment beinhaltet. Um zu verhindern, dass eng verwandte Sequenzen das Profil in ihre Richtung verzerren, wird ihr Einfluss auf das Profil rechnerisch herabgesetzt. Als Ausgabe erhalten wir ein Profil, aus dem sich ablesen lässt, welche Stellen im Alignment hoch konserviert sind (evtl. funktionstragend) und welche eher nicht. © modlab® 2007 Sequenzalignment 20 Literatur Needleman SB, Wunsch CD (1970). A general method applicable to the search for similarities in the amino acid sequence of two proteins. J Mol Biol. 48(3): 443-53. Smith TF, Waterman MS (1981). Identification of common molecular subsequences. J Mol Biol. 147(1): 195-7. Altschul SF, Gish W, Miller W, Myers EW, Lipman DJ (1990). Basic local alignment search tool. J Mol Biol. 215(3): 403-10. Pearson WR (1994). Using the FASTA program to search protein and DNA sequence databases. Methods Mol Biol. 24: 307-31. Lesk A. (2002). Introduction to Bioinformatics. Oxford University Press, Oxford. Feng DF, Doolittle RF (1990). Progressive alignment and phylogenetic tree construction of protein sequences. Methods Enzymol. 183: 375-87. Thompson JD, Higgins DG, Gibson TJ (1994). CLUSTAL W: improving the sensitivity of progressive multiple sequence alignment through sequence weighting, position-specific gap penalties and weight matrix choice. Nucleic Acids Res. 22(22): 4673-80. © modlab® 2007 Autokorrelationsvektoren 21 Autokorrelationsvektoren Molekulare Deskriptoren sind im Wirkstoffdesign und für QSAR Modelle unentbehrlich, um physikochemische Eigenschaften von Molekülen mit mathematischen Methoden zu beschreiben. Sie ermöglichen es, umfangreiche Datenbanken mit Millionen von Verbindungen digital abzuspeichern und chemoinformatische Methoden anzuwenden. Autokorrelationsvektoren stellen nur eine Klasse der molekularen Deskriptoren dar. Durch die Zusammenfassung von Korrelationswerten zu Vektoren lässt sich ein molekularer Deskriptor erstellen, der Ähnlichkeitsberechnungen von Substanzen auf Basis der Verteilung von Atomeigenschaften und deren Abständen zueinander zulässt. Hierbei erfolgt eine Abstraktion der chemischen Bindungen zwischen den Atomen eines Moleküls und der Molekülstruktur im kartesischen Raum. Grundlegend gibt es zwei Anforderungen an einen Deskriptor. Zum einen soll er den Vergleich von Molekülen zulassen, und zum anderen soll er praktisch anwendbar sein und eindeutig aus den bekannten Daten berechnet werden können. Beides trifft auf Korrelationsvektor-basierte Deskriptoren zu: a) die Darstellung als Vektor ermöglicht eine einfache mathematische Quantifizierung der Ähnlichkeit von Molekülen (durch Vektoralgebra), und b) die minimale Anforderung zur Erstellung eines Korrelationsvektors ist die zweidimensionale Molekülstruktur, die meist vorhanden ist oder leicht bestimmt werden kann. Bei der Verwendung von Autokorrelationsvektoren als molekularen Deskriptor sollten auch die Nachteile stets bedacht werden. Erstens ist hier die Vernachlässigung der vollständigen Molekülstruktur inklusive wichtiger dreidimensionaler Informationen zu nennen. Außerdem © modlab® 2007 Autokorrelationsvektoren 22 ist keine Rekonstruktion der Molekülstruktur anhand des zugehörigen Korrelationsvektors möglich. Der Abstraktionsgrad des Deskriptors ist zu groß, als dass eine bijektive Darstellung möglich wäre. Mathematische Definition Die Wurzeln der Autokorrelationsfunktionen liegen in der Funktionsanalyse von physikalischen Methoden. Im Allgemeinen hat sie die Form: b AC t = ∫ f ( x) ⋅ f ( x + t )dx . (1) a Dabei stellt die Funktion f(x) eine beliebige Funktion dar, die auf dem Intervall [a, b+t] definiert ist. Die Berechnung des Korrelationswertes an der Stelle t lässt sich folgendermaßen beschreiben (Abbildung 1): Gegeben seien zwei Punkte in dem Intervall [a, b+t], deren Abstand zueinander t beträgt. Beide Punkte laufen nun unter Beibehaltung des Abstands über das Intervall. Für jeden Zeitpunkt berechnet die Autokorrelationsfunktion das Produkt der Funktionswerte an beiden Punkten und bildet das Integral über das gesamte Intervall. Als Ergebnis geht aus der Rechnung ein Wert hervor, der nicht von einem Funktionswert an einer bestimmten Stelle x abhängt, sondern vielmehr von der Verteilung der Funktionswerte im Intervall zu einem gegebenen Zeitpunkt. Abbildung 1: Darstellung von zwei möglichen Punkten im Abstand t einer gegebenen Funktion f(x), die autokorreliert werden können. © modlab® 2007 Autokorrelationsvektoren 23 Diese Tatsache ermöglicht vor allem die Anwendung von Autokorrelationsfunktionen in der Analyse von physikalischen Spektren. Beispiele hierfür sind zum Beispiel NMRSpektrenauswertungen und Spracherkennungsprozesse. In den meisten Fällen ist zu einem gegebenen Spektrum keine Funktion vorhanden, sondern es liegt nur der Graph vor. Die Stärke der Autokorrelationsfunktion ist die Erkennung von sich periodisch wiederholenden Signalen. Da die Produkte aus den Spitzen mit einem Abstand t in das Integral mit einfließen, machen sich wiederkehrende Elemente mit einer Periodenlänge t durch Maxima in der Autokorrelationsfunktion bemerkbar. Bei einer unterschiedlichen Periode wird der Funktionswert an der Spitze der Funktion mit einem möglicherweise kleineren Wert multipliziert, woraufhin die Wertigkeit des gesamten Integrals kleiner wird. Diese Eigenschaft ist es, die die Verwendung von Autokorrelationsfunktionen insbesondere für das Filtern von stark verrauschten Signalen auszeichnet. Transfer in die Chemieinformatik Moreau und Broto waren 1980 die ersten, die die Autokorrelationsfunktionen in die Welt der Chemieinformatik einführten. Die Hauptintention war es, Aussagen über die Verteilung von Atomeigenschaften, die als numerische Werte vorlagen, im Molekülgraphen machen zu können. Der Transfer der klassischen Autokorrelations-funktionen auf ein als Strukturformel vorliegendes Molekül wurde in folgender Weise vollzogen: • Anstatt der Stelle x auf einem Funktionsgraphen wurden die Atome im Molekül als zu betrachtende Punkte verwendet. Die Wasserstoffatome wurden hierbei nicht in Betracht gezogen. Alle anderen Atome wurden beliebig durchnummeriert, um eine eindeutige Identifizierung der Punkte zu ermöglichen. Das Intervall [a, b+t] wurde also durch das gesamte Molekül dargestellt. Aufgrund der Tatsache, dass es nur eine endliche Anzahl von Punkten (Atome im Molekül) gibt, und keine kontinuierliche Funktion vorliegt, konnte das Integral der Funktion durch die Aufsummierung der Korrelationswerte ersetzt werden. • Als Funktionswerte f(x) wurden die Atomeigenschaften des Atoms x betrachtet. Meist wurde die Funktion als p(x), wie property, bezeichnet. In Autokorrelationsfunktion wirdnur eine Atomeigenschaft mit sich selbst korreliert. © modlab® 2007 jeder Autokorrelationsvektoren • 24 Schließlich wurde der Abstand t als die minimale Anzahl der Bindungen zwischen zwei Atomen definiert (topologische Distanz). Hierbei wird nicht zwischen Doppelund Einfachbindungen unterschieden. • Die auf diese Weise modifizierte Autokorrelationsfunktion entspricht der Formel: AC d = ∑ p(i) ⋅ p( j ) (2) i , j∈M ( d ) wobei M(d) als die Menge der Atomtupel (i,j) mit einer topologischen Distanz d zueinander definiert ist. Gleichung (2) lässt nun die Berechnung von Korrelationswerten für jede gegebene Distanz und jede bekannte Atomeigenschaft zu. Es wird lediglich die Strukturformel des zu kodierenden Moleküls benötigt. Betrachtet man zum Beispiel Distanzen von 0 bis 10 Bindungen und die Autokorrelation einer Atomeigenschaft, so hat der als Deskriptor verwendete Korrelationsvektor folgende Datenstruktur: AV = (AC0, AC1, AC2, AC3, AC4, AC5, AC6, AC7, AC8, AC9, AC10) Der Deskriptor entspricht der Aneinanderreihung der Korrelationswerte zu den auftretenden Atomeigenschaft bei einer Distanz d. Erfahrungsgemäß kann (2) aufgrund der Aufsummierung zu besonders großen Korrelationswerten führen, wenn eine große Anzahl von Atompaaren mit einer Distanz d vorliegt. Dies kann sich gerade bei dem Vergleich von unterschiedlich großen Molekülen negativ auswirken, weshalb dies meist durch eine Mittelung über die Anzahl der Atompaare eliminiert wird. Die erweiterte Formel lautet nun: AC d = 1 ∑ p(i) ⋅ p( j ) , n i , j∈M ( d ) wobei n der Anzahl der Atompaare mit einer Distanz d entspricht. © modlab® 2007 (3) Autokorrelationsvektoren 25 Beispiel In der Tabelle 1 soll die Berechnung des Autokorrelationsvektors für zwei Moleküle A und B beispielhaft gezeigt werden. Berechnet werden die Autokorrelationswerte für die Elektronegativität der vorliegenden Atome (ENC=2,5; ENO = 3,5) mit einer Distanz von 1 bis 4 Bindungen unter Benutzung der Formel (3). Tabelle 1: Berechnung der Korrelationswerte der Elektronegativität für zwei Moleküle A und B. Verbindung A B O OH Molekülstruktur OH OH Butan-1,3-diol Name Vereinfachte Struktur 6 O mit willkürlichem Atomindex Buttersäure 2 1 6 O 3 5 4 O 1 2 AC1 7,25 7,25 AC2 7,75 8,45 AC3 4,75 4,75 AC4 3,7 2,5 3 5 4 O Als Ergebnis erhält man folgende Vektoren: VerbindungA 7,25 7,75 4,75 3,7 VerbindungB 7,25 8,45 4,75 2,5 Die Deskriptoren unterscheiden sich nur in den Funktionswerten für die Distanzen 2 und 4, weil immer bei derjenigen Verbindung ein größerer Wert auftritt, bei dem die Sauerstoffe in dem entsprechenden Abstand zueinander vorlagen. Eine Interpretation der resultierenden Autokorrelationsvektoren ist in folgender Weise möglich: In der Verbindung A liegen mehr © modlab® 2007 Autokorrelationsvektoren 26 Atome mit der betrachteten Eigenschaft in einem Abstand von 4 Bindungen vor, als in der Verbindung B. Hier tritt dies bei einer Distanz von 2 Bindungen auf. Die betrachteten Eigenschaften müssen nicht direkt miteinander korreliert werden. In bestimmten Fällen ist es ratsam modifizierte Werte der numerischen Eigenschaften zu multiplizieren. Hier können unter anderem der Betrag, der Logarithmus u.ä. verwendet werden. Oft ist zudem die Verteilung von mehreren Atomeigenschaften auf den Molekülen zur Beschreibung der biologischen Aktivität wichtig. Hier bedient man sich der Kreuzkorrelation, bei der verschiedene Eigenschaften miteinander korreliert werden. Die verwendete Formel lässt sich in folgender Weise zusammenfassen: AC d = 1 n ∑ ∑ p(i) ⋅ q( j ) , (4) p , q∈P i , j∈M ( d ) wobei die Funktionen p und q den Elementen aus einer Funktionsmenge P mit allen betrachteten Eigenschaften entspricht. Autokorrelationsvektoren werden nicht nur zur Kodierung von zweidimensionalen Molekülstrukturen verwendet. Eine Erweiterung der Methode zur Benutzung von 3-D Molekülinformationen ist durch ein simples Austauschen der topologischen Distanz mit der euklidischen Distanz möglich. Die Korrelationsvektoren kodieren dann für eine Beschreibung der Eigenschaftsverteilungen im dreidimensionalen Raum, die durch das Molekül gegeben ist, unter Berücksichtigung der Atomdistanzen in Ångstrom. Anwendung von Korrelationsvektoren Die Kodierung von Korrelationsvektor-basierten molekularen Deskriptoren liefert gleichgroße Vektoren zur Beschreibung der vorliegenden Substanzen. Bei der Betrachtung von k Atomeigenschaften und l Distanzen erhält man einen (k ⋅ l ) -dimensionalen Deskriptor für jedes Molekül. Zur Berechnung der Ähnlichkeit von zwei Molekülen bedient man sich einfachen mathematischen Vektorfunktionen, wie der euklidischen Norm zweier Vektoren: v v a −b = n ∑ (a − b ) i i 2 , i =1 wobei n der Dimensionalität des Deskriptors entspricht. © modlab® 2007 (5) Autokorrelationsvektoren 27 Falls man mehrere Eigenschaften bei der Korrelation in Betracht zieht, können Fälle auftreten, die sich aufgrund der Werte je Eigenschaft in (5) stärker auf die Ähnlichkeitsanalysen auswirken. Ein einfaches Beispiel bildet zum Beispiel die Korrelation der Elektronegativität von Atomen im Vergleich zu Korrelationen der Atommasse, welche wesentlich höher ausfallen kann. Hier bietet es sich an, nach der Berechnung des Korrelationsvektors auf eine Normierung des Vektors zurückzugreifen (z.B. eine Skalierung der Werte von 0 bis 1). Neben Ähnlichkeitsanalysen werden Korrelationsvektor-basierte Deskriptoren für viele weitere chemieinformatische Methoden verwendet. Literatur Moreau, G., Broto, P., 1980, Autocorrelation of Molecular Structures, Application to SAR Studies. Nouv. J. Chim., 4, 757. Wagener, M., Sadowski, J., Gasteiger, J., 1995, Autocorrelation of Molecular Surface Properties for Modelung Corticosteroid Binding Globulin and Cytosolic Ah Receptor Activity by Neural Networks. J. Am. Chem. Soc., 117, 7769. Schneider, G., Clément-Chomienne, O., Hilfiger, L., Schneider, P., Kirsch, S., Böhm, H.-J., Neidhart, W., 2000, Evolutionäres De-novo-Design bioaktiver Moleküle: ein Ansatz zum virtuellen Screening. Angew. Chem., 112, 4305. Schneider, G., Wrede, P., 1998, Artificial neural networks for computer-based molecular design. Prog. Biophys. Mol. Biol., 70, 175. © modlab® 2007 Autokorrelationsvektoren © modlab® 2007 28 NIPALS-Algorithmus 29 NIPALS-Algorithmus Die Hauptkomponentenanalyse (Principal Component Analysis, im Folgenden mit „PCA“ abgekürzt) ist eine statistische Methode zur Analyse von multidimensionalen Daten. Mit Hilfe dieser Technik ist es unter anderem möglich, die Dimensionalität eines Datensatzes mit einem definiertem Informationsverlust zu reduzieren. Die Basis der PCA ist die Berechung von Eigenvektoren. Diese haben als Eigenschaft, dass sie alle orthogonal zu einander sind. Sie treten immer paarweise mit dem dazugehörigen Eigenwert auf, anhand welcher man die Eigenvektoren sortieren kann. Der Eigenvektor mit dem größten Eigenwert ist als die erste Hauptkomponente definiert. Mit ihr ist es möglich, die stärkste Beziehung in der Datenmatrix aufzuzeigen. Aufgrund dieser Eigenschaften ist es möglich, die Daten einer Matrix durch Ihre Projektion auf die Hauptkomponenten (Eigenvektoren mit den größten Eigenwerten) darzustellen. Bei einer geschickten Auswahl von Eigenvektoren können so dieselben Daten mit einer geringeren Dimensionalität wiedergegeben werden. In der Regel wählt man hierzu alle Eigenvektoren mit einem Eigenwert > 1 aus. Zur Berechnung der Eigenvektoren greifen viele Anwender auf die integrierten Lösungen der verwendeten Programmpakete, wie Java oder Matlab, zu. Hier werden meist numerisch exakte, mathematische Verfahren wie der QZ-Algorithmus, die Potenzmethode, die Inverse Iteration, das Lanczos-, Arnoldi- oder Jacobi-Davidson-Verfahren verwendet. Alle numerischen Verfahren haben gemeinsam, dass die Komplexität bei der Anwendung auf großen Matrizen enorm steigt. Dadurch wird die Berechnung der Eigenvektoren sehr aufwändig und die Methoden nicht praktikabel in der Anwendung. Eine Alternative bilden approximative Lösungen. Ein populäres Beispiel zur Eigenvektorabschätzung ist der 1966 von Herman Wold entwickelte NIPALS-Algorithmus (nonlinear iterative partial least squares), welcher im Folgenden erklärt wird. Der NIPALS© modlab® 2007 NIPALS-Algorithmus Algorithmus wird 30 nicht nur in der Hauptkomponentenanalyse angewendet. Weiterentwicklungen und Derivate des Algorithmus finden sich auch in der multiplen Regression, der Faktorzerlegung und der kanonischen Korrelationsanalyse wieder. Prinzip und Schritte des Algorithmus Die Hauptkomponenten werden nacheinander durch die iterative Anwendung der Schritte 1-9 (Tabelle 1) gewonnen. Tabelle 1: Die Arbeitsschritte des NIPALS-Algorithmus. Schritt Funktion Erklärung 1 s := xi Wähle eine beliebige Spalte der Matrix X als den initialen Scoringvektor s. 2 3 4 5 6 l= XTs sT s Projiziere X auf s, um den entsprechenden l= l l Normalisiere l auf die Länge 1. s old := s Loadingvektor zu erhalten. Zwischenspeichern des aktuellen Scores. Xl lT l Projiziere X auf l, um den entsprechenden d := s old − s Bestimme die Differenz d des neuen und s= neuen Scoringvektor zu erhalten. alten Scores. 7 d < t? Falls d größer als ein vorher definierter Schwellwert t (z.B. 10-6) ist, gehe zurück zu Schritt 2. Ansonsten fahre fort bei Schritt 8. 8 E := X − sl T Entferne den Anteil der gefundenen Hauptkomponente aus der Datenmatrix X. 9 X := E Um weitere Hauptkomponenten zu finden, wiederhole den Algorithmus ab Schritt 1 mit der neuen Datenmatrix. © modlab® 2007 NIPALS-Algorithmus 31 Der NIPALS-Algorithmus approximiert eine Datenmatrix X durch die kleinere Scoringmatrix T S und die Loadingmatrix LT mit Hilfe der Matrixmultiplikation X = SL (Abb. 1). Das hochgestellte „T“ an einer Matrix verdeutlicht, dass die jeweilige Matrix transponiert wird. Abbildung 2: Prinzip des NIPALS-Algorithmus. Ziel ist die Reproduktion der Datenmenge X durch eine Matrixmultiplikation von S und LT, die der Scoringmatrix und der transponierten Loadingmatrix entsprechen. Die Rechtecke skizzieren die jeweiligen Matrizen mit den an den Ecken angegebenen Dimensionen. Literatur Wold, H., Estimation of principal components and related models by iterative least squares, Multivariate Analysis (Ed., Krishnaiah, P. R.), Academic Press, NY, pp. 391-420 (1966). Wold S., 1974, A theoretical foundation of extrathermodynamic relationships (linear free energy rela-tionships), Chemica Scripta, 5, 97-106. Trygg, J., 2003, Chemometrics, Umeå University, Sweden, URL: http://www.chemometrics.se/editorial/sep2003.html#4 © modlab® 2007 NIPALS-Algorithmus © modlab® 2007 32 Graphentheorie 33 Grundlagen Graphentheorie Graphen Der Graph als mathematisches Modell und Datenstruktur hat in der Cheminformatik eine zentrale Bedeutung zur Repräsentation von chemischen. Seien FE die Menge der Kanteneigenschaften und FV die Menge der Knoteneigenschaften. Ein Graph ist ein 4-Tupel G=(V, E, µV, µE), wobei • V eine endliche Menge der Knoten (engl. vertices), • E ⊆ V×V die Menge der Kanten (engl. edges), • µV: V→ FV eine Funktion ist, die Knoten Eigenschaften zuweist, • µE: E→ FE eine Funktion ist, die Kanten Eigenschaften zuweist. Man unterscheidet zwischen gerichteten und ungerichteten Graphen. Für ungerichtete Graphen gilt die Bedingung: • ∀ v,w ∈V: (v,w) ∈ E ⇔ (w,v) ∈ E Die Kanten eines gerichteten Graphen haben also einen Anfangs- und einen Endpunkt, daher werden sie häufig als Pfeile dargestellt (Abbildung ). Im ungerichteten Graphen ist es gleich, welcher Knoten der Anfangs- und welcher der Endpunkt einer Kante ist. © modlab® 2007 Graphentheorie 34 Abbildung 1: Beispiel a) für einen ungerichteten und b) für einen gerichteten Graphen. Stellt ein Graph das Modell eines Moleküls dar, spricht man vom molekularen Graphen. Dabei repräsentieren die Knoten die Atome und die Kanten die Bindungen zwischen den Atomen. Die Knoten- und Kanteneigenschaften sind in diesem Fall Atom- und Bindungseigenschaften, z.B. das Elementsymbol oder die Bindungsordnung. Die graphische Repräsentation eines Moleküls ist in der organischen Chemie ein Standard (Abbildung ). O OH Abbildung 2: Molekularer Graph von Tetrahydrocannabinol. Da es meistens nicht von Bedeutung ist, welches Atom der Ausgangspunkt und welches der Endpunkt einer Bindung ist, handelt es sich beim molekularen Graphen um einen ungerichteten Graphen. Es gibt mehrere Möglichkeiten, einen Graphen im Rechner zu repräsentieren: • die Adjazenzliste • die Adjazenzmatrix, • und die Inzidenzmatrix. Die Datenstrukturen mit den darauf operierenden effizienten Algorithmen werden in Java von der Graphenbibliothek jgrapht (http://jgrapht.sourceforge.net/, Version 0.8.3) bereitgestellt. © modlab® 2007 Graphentheorie 35 Subgraphen, Pfade, Zyklen, Cliquen Sei G=(V, E, µv, µE) ein Graph. Dann heißt G’ = (V’, E’, µv’, µE’) ein Subgraph von G, wenn • V’⊆V • E’⊆E • µV’(v) = µV(v) wenn v ∈ V’ • µE’(e) = µE(E) wenn e ∈ E’. Ein Pfad in einem Graphen ist definiert als eine Reihe von Kanten e1, e2,..., en für die gilt: • ei und ei+1 haben einen gemeinsamen Knoten. • wenn für alle i ∉ {1, n} gilt: ei hat einen gemeinsamen Knoten mit ei-1 und den anderen mit ei+1. Ein Zykel (Kreis) ist ein Pfad, für den gilt • e1 und en haben einen gemeinsamen Knoten. ein ungerichteter Graph ein Pfad (fett gekennzeichnet) ein Kreis (fett gekennzeichnet) eine Clique (fett gekennzeichnet) Abbildung 3: Übersicht über die Definitionen zur Graphentheorie. Ein Graph heißt vollständig, wenn jeder Knoten mit jedem anderen Knoten verbunden ist. Eine Clique ist definiert als ein vollständiger Subgraph. Die Größe der Clique ist definiert als die Anzahl der enthaltenen Knoten. Eine maximale Clique ist echt nicht in einer größeren © modlab® 2007 Graphentheorie 36 Clique enthalten. Eine größtmögliche Clique ist eine Clique der Größe s, wobei gilt: der Graph enthält keine weiteren Cliquen größer s. Alle Begriffe sind mit Beispielen in der Abbildung zusammengefasst. Graphentheoretische Probleme und ihre Lösungen in der Cheminformatik Subgraph-Isomorphismus Die Suche von Substrukturen in Molekülen kann auf graphentheoretische Methoden zurückgeführt werden. In diesem Fall ist sie komplett innerhalb eines anderen gut untersuchten Problems enthalten: dem Problem des Subgraph-Isomorphismus. Eine bijektive Funktion f: V→ V’ ist ein Graph-Isomorphismus vom Graphen G=(V, E, µV, µE ) zum Graphen G’ = (V’, E’, µv’, µE’), wenn gilt: • µV(v) = µV’(f(v)) für alle v∈V. • für jede Kante e = (v,w) ∈ E existiert eine Kante e’ = (f(v),f(w)) ∈ E’, für die gilt µE(e) =µE(e’), und für jede Kante e’ = (v’,w’) ∈ E’ existiert eine Kante e = (f-1(v’),f-1(w’)) ∈ E für die gilt µE(e’) =µE(e). Eine injektive Funktion f: V→ V’ ist ein Subgraph-Isomorphismus von G zu G’ wenn gilt: • es existiert ein Subgraph S ⊆ G’ so dass f ein Graph-Isomorphismus von G zu S ist. Informell kann man das Problem des Subgraph-Isomorphismus so formulieren: • „Gegeben seien die Graphen G1 und G2. Enthält G1 eine Kopie von G2 als Subgraph? Können wir also eine Teilmenge der Knoten von G1 finden, die zusammen mit ihren Kanten in G1 eine exakte Kopie von G2 bilden, wenn wir die Zuordnung zwischen den Knoten und Kanten von G2 und den Knoten und Kanten des Teilgraphen von G1 entsprechend wählen?“ © modlab® 2007 Graphentheorie 37 Das Subgraph-Isomorphismus-Problem ist NP-vollständig. Folglich konnte kein Algorithmus geschrieben werden, der den Subgraph-Isomorphismus in polynomialer Zeit findet. Dennoch wurden Algorithmen gefunden, die eine akzeptable mittlere Laufzeit besitzen. In der Chemieinformatik hat der Ullman-Algorithmus breiten Zuspruch gefunden. Der Ullman-Algorithmus, der in 1976 von J.D. Ullman publiziert wurde, ist einer der schnellsten Algorithmen für das Problem des Subgraph-Isomorphismus. Insbesondere eignet er sich zum Auffinden von Subgraph-Isomorphismen auf Graphen, die in ihren topologischen Eigenschaften den Molekulargraphen ähneln. Da der Original-Algorithmus für nicht markierte Graphen geschrieben wurde, wird im Folgenden die Version für markierte Graphen aus vorgestellt. Der Ullman-Algorithmus vereinigt die Backtracking-Suche mit der „forward-checking“Technik. Der Pseudocode gibt Aufschluss über die genaue Funktionsweise des UllmanAlgorithmus. function ullman(G=(V,E,µV,µE), G’=(V’,E’,µ’V,µ’E)) //finds all subgraph isomorphisms of an arbitrary graph G in a graph G’// P=(pij): a |V|×|V’| matrix F: set of vertex pairs, partial matching 01:for i = 1 to |V| 02: for j = 1 to |V’| 03: if µV(vi)= µ’V(v’j) 04: then pij = 1 05: else 06: 07: pij = 0 end; 08:end; 09:backtrack(P,1,∅) end function © modlab® 2007 Graphentheorie 38 function backtrack(P,i,F) 10: if i > |V| 11: 12: then F is an isomorphism else 13: for all pij = 1 and j = 1 to |V’| 14: F ← F ∪ {vi,v’j}; 15: P’ ← P; 16: for all k > i 17: p’ij = 0; 18: end; 19: if forwardchecking(P’,i,F) = true 20: then backtrack(P’,i+1,F); F ← F\{vi,v’j}; 21: 22: end; end function function forwardchecking(P,i,F) 23: for k = i+1 to |V| 24: for l = 1 to |V’| 25: if pkl = 1 26: if consistent({vk,v’l},F)= false 27: pkl = 0 28: end; 29: end; 30: if there exists a row k in P such that pkl = 0 for l = 1.. |V’| 31: 32: 33: then return false else return true end function © modlab® 2007 Graphentheorie 39 function consistent({vk,v’l},F) 34: if for each {v,v’} ∈ F 35: if there is an edge (vk,v) ∈ E then there must be an edge (v’,v’l) ∈ E’ with µE(vk,v)= µ’E(v’,v’l) 36: if there is an edge (v’,v’l) ∈ E’ then there must be an edge (vk,v) ∈ E with µE(vk,v)= µ’E(v’,v’l) 37: then return true 38: 39: else return false end function Seien G=(V, E, µV, µE) und G’ = (V’, E’, µv’, µE’) zwei Graphen. Zunächst wird eine |V|×|V’| Matrix P = (pij) erschaffen (Zeilen 1-8), für die gilt: • wenn µV(vi)= µV’(v’i), dann ist pij= 1, • sonst ist pij= 0. In P steht also immer dann eine 1 in der i-ten Spalte und j-ten Zeile, wenn der Knoten vi den knoten v’i matcht (Abbildung ). Abbildung 4: a) Querygraph, b) Molekülgraph, c) daraus resultierende Matrix P. © modlab® 2007 Graphentheorie 40 Danach wird die rekursive Prozedur backtrack aufgerufen (Zeile 09). Als Initialparameter werden die Matrix P, Spaltenzähler i=1 und die Menge der erfolgreichen Matchings F=∅ übergeben. Die Prozedur backtrack funktioniert wie folgt: • ist der Spaltenzähler i > |V|, so ist F ein Isomorphismus (Zeilen 10 und 11). Dies ist dann der Fall, wenn durch die rekursiven Aufrufe jedem Knoten aus V ein Knoten aus V’ zugewiesen wurde. • ist i ≤ |V|, dann ist der komplette Subgraph-Isomorphismus noch nicht gefunden. In diesem Fall wird für jede 1 in der i-ten Spalte rekursiv backtrack aufgerufen. Als Parameter werden der inkrementierte Spaltenzähler (i+1; Zeile 20), der bereits gefundene Teil des Subgraphisomorphismus in Form der Menge F und die durch die Prozedur forwardchecking bearbeitete Matrix P’. Die Prozedur forwardchecking minimiert die Anzahl der Rekursionsschritte. Dazu wird jede 1 in der Matrix P, also jedes „matchende“ Knotenpaar (v,v’) auf Konformität mit jedem Element aus der Menge der bereits gefundenen „matchenden“ Knotenpaare F überprüft. Zwei Knotenpaare (v,v’) und (w,w’) sind konform, wenn gilt: • wenn es eine Kante (v,w) gibt, muss es auch eine Kante (v’,w’) geben für die gilt: µ E(v,w) = µ’E(v’,w’), und • wenn es eine Kante (v’,w’) gibt, muss es auch eine Kante (v,w) geben für die gilt: µ E(v,w) = µ’E(v’,w’). Somit erfolgt in der Prozedur forwardchecking nicht nur die Minimierung der Backtrackschritte, sondern auch die Überprüfung, ob F auch tatsächlich ein SubgraphIsomorphismus von G zu G’ ist. Außerdem wird die Rekursion unterbrochen, wenn in P eine Zeile vorhanden ist, die nur 0er enthält, also kein Subgraph-Isomorphismus in diesem Ast des Rekursionsbaums gefunden werden kann. Maximum Common Substructure Eine weitere graphentheoretische Anwendung in der Cheminformatik ist die Berechnung der Isomorphie größtmöglicher gemeinsamer Teilgraphen (Maximum Common Substructure, MCS). Die MCS zweier Molekülgraphen ist in Abbildung 5 dargestellt. © modlab® 2007 Graphentheorie 41 N HO OH OH N O N Abbildung 5: MCS zweier Molekülgraphen Die MCS kann zur Berechnung der Ähnlichkeit zweier Moleküle benutzt werden und ist wie folgt definiert: Seien G1 und G2 zwei Graphen, dann ist MCS eine Struktur (S1, S2), so dass gilt • S1 ist Subgraph von G1 • S2 ist Subgraph von G2 • S1 und S2 sind isomorph • es gibt kein S1’ für das gilt: S1 ist Subgraph von S1’ • es gibt kein S2’ für das gilt: S2 ist Subgraph von S2’ Um alle MCS zweier Graphen aufzuzählen, bedient man sich u.a. der Cliquendetektion auf dem Assoziationsgraphen. Cliquendetektion auf dem Assoziationsgraphen Die Lösung des MCS-Problems durch Cliquendetektion auf dem Assoziationsgraphen besteht im wesentlichen aus zwei Schritten: • Erstellung des Assoziationsgraphen, • Cliquendetektion auf dem Assoziationsgraphen. Für zwei Graphen G=(V, E, µV, µE) und G’ = (V’, E’, µv’, µE’) ist der Assoziationsgraph (Abbildung 6) definiert als ein unmarkierter Graph GA = (VA, EA) mit VA ⊆ V × V’ und EA ⊆ VA × VA. vA ∈ VA heißt a-Knoten (Assoziationsknoten), eA ∈ EA heißt a-Kante (Assoziationskante) von GA. Für GA muß gelten: © modlab® 2007 Graphentheorie • VA = {(v,v’)| v ∈ V, v’ ∈ V’, µV(v) = µV’(v’) } • EA besteht aus a-Kanten eA= (vA,wA) mit vA=(v,v’), wA=(w,w’), so dass gilt 42 o v ≠ w und v’ ≠ w’ o wenn eine Kante e = (v,w) ∈ E existiert, muss eine Kante e’ = (v’,w’) ∈ E’ existieren und µE (e) = µE’(e’) muss gelten. o wenn keine Kante e = (v,w) ∈ E existiert, darf auch keine Kante e’ = (v’,w’) ∈ E’ existieren. Abbildung 6: a) Querygraph. b) Molekülgraph. c) Assoziationsgraph aus a) und b), grau eingezeichnet: Clique der Größe 4. Wenn also die a-Knoten (v1,v’1), (v2,v’2)… (vn,v’n) für 1≤ n ≤ |V|⋅|V’| im Assoziationsgraphen paarweise miteinander verbunden sind, ist der Subgraph in V, der durch die Knoten v1, v2,…,vn induziert ist, isomorph zum Subgraphen in V’, der durch die Knoten v’1, v’2,…,v’n induziert ist. Der Isomorphismus ist durch (v1,v’1), (v2,v’2)… (vn,v’n) explizit gegeben. Abbildung 6 zeigt die Erstellung eines Assoziationsgraphen aus dem Molekülgraphen g1 (Alanin) und einem Querygraphen g2 (Carbonylfunktion verbunden mit einem Stickstoff über eine Kohlenstoffbrücke). Die Atomtypen entsprechen dabei den Knoteneigenschaften, die Bindungsordnungen den Kanteneigenschaften. Nun wird z.B. ein a-Knoten (3,1’) erstellt, weil der Knoten 3 dieselbe Eigenschaft trägt wie der Knoten 1’, nämlich O (Sauerstoff). Einen aKnoten (3,4’) gibt es nicht, da der Knoten 3 die Eigenschaft O (Sauerstoff) und der Knoten 4’ © modlab® 2007 Graphentheorie 43 die Eigenschaft N (Stickstoff) trägt. Ähnlich verfährt man bei der Erstellung der a-Kanten. Die a-Knoten (3,1’) und (2,2’) werden durch eine a-Kante verbunden, da sowohl in g1 die Knoten 3 und 2 als auch in g2 die Knoten 1’ und 2’ durch eine Kante mit der Eigenschaft „Doppelbindung“ verbunden sind. Die a-Knoten (3,1’) und (6,4’) sind verbunden, weil es in g1 keine Kante (3,6) und in g2 keine Kante (1’,4’) existiert. Der komplette a-Graph enthält eine Clique der Größe 4, nämlich {(3,1’), (4,3’),(2,2’),(6,4’)} (in Abbildung , rot hervorgehoben). Offensichtlich entspricht sie dem MCS von g2 zu g1. Der zweite Schritt besteht in der Suche der Cliquen auf dem a-Graphen. In der Literatur gibt es vielfältige Ansätze zur Lösung dieses Problems. Der schnellste vollkombinatorische Ansatz ist der Bron-Kerbosch-Algorithmus. Es handelt sich dabei um einen rekursiven BacktrackingAlgorithmus, der alle maximalen Cliquen in einem Graphen aufzählt. Im Wesentlichen operiert der BK-Algorithmus auf drei Mengen C, P und S. Die Menge C (Clique) ist die Menge der Knoten, die bereits als komplett verbunden gefunden wurden, also eine Clique bilden. Die Menge P (Potential) enthält diejenigen Knoten, die zu dem zuletzt zu C hinzugekommenen Knoten adjazent sind, folglich also für die Erweiterung der Clique benutzt werden können. Die Menge S enthält all die Knoten, die nicht mehr für die Erweiterung von C benutzt werden können, weil alle Cliquen, die diese Knoten enthalten, bereits gefunden wurden. Der Pseudocode gibt die Funktionsweise des BK-Algorithmus wieder. Der Algorithmus wird mit C,S = ∅ und P=V initialisiert. Wenn die Mengen S und P leer sind, ist C eine maximale Clique und kann ausgegeben oder gespeichert werden (Zeile 03). Ist dies nicht der Fall, so wird jeder Knoten aus P in der Schleife (Zeilen 04-11) bearbeitet. Ein ausgesuchter Knoten ui wird aus P entfernt (Zeile 05), P wird nach P’ (Zeile 06) und S nach S’ (Zeile 07) kopiert, um für den rekursiven Aufruf verwendet zu werden. Knoten, die mit ui verbundenen sind, werden in N gespeichert (Zeile 08). Der rekursive Aufruf erfolgt mit der Menge C∪{ui} (die bereits gefundene Clique wird um ui erweitert), P∩N (nur die Knoten in P, die mit ui verbunden sind, dürfen für die potentielle Erweiterung der Clique verwendet werden) und S∩N (alle Knoten, die bereits betrachtet wurden und mit ui verbunden sind) (Zeile 09). Anschließend wird ui der Menge S zugefügt (Zeile 10). © modlab® 2007 Graphentheorie 44 function find_all_cliques(C,P,S) //enumerates all cliques in an arbitrary graph G // C: set of vertices belonging to the current clique P: set of vertices which can be added to C S: set of vertices which are not allowed to be added to C N[u]: set of vertices which are adjacent to vertex u in G 01: Let P be the set {u1,...,uk}⊆ V; 02: if P = ∅ and S = ∅ 03: then C is a maximal clique 04: else for i ← 1 to k 05: do P ← P\{ui}; 06: P’ ← P; 07: S’ ← S; 08: N ← {v∈V | {ui,v}∈E}; 09: find_all_cliques(C∪{ui},P’∩N,S’∩N); 10: S ← S ∪ {ui}; 11: end; 12:end; end function Der BK-Algorithmus wurde bereits in vielen bioinformatischen Zusammenhängen verwendet und modifiziert. Die besondere Geschwindigkeit der sog. „Version2“ des BK-Algorithmus liegt in einer Heuristik bei der Wahl des Knotens ui aus P. Diese motiviert sich aus der Verwendung der Menge S, da man die Abbruchbedingung für die Ausgabe der Clique auch so formulieren kann: Es gibt einen Knoten s in S, der mit allen Knoten in P verbunden ist. Ein solcher Knoten s kann niemals aus S entfernt werden. Somit haben wir eine Möglichkeit, vorzeitig vorherzusagen, ob ein Ast im Backtrackingbaum zum Erfolg führt oder nicht. Allgemein nennt man diese Backtracking-Technik die „branch-and-bound“ Methode, das Abbruchkriterium ist das „branch-and-bound“ Kriterium. Die „Version2“ des BKAlgorithmus sucht ui aus P so aus, dass das „branch-and-bound“ Kriterium möglichst schnell eintritt. Dies geschieht in folgender Weise: alle Knoten in S sind mit einem Zähler assoziiert, welcher die Anzahl der Kanten zu den Knoten in P wiedergibt. Verschiebt man nun einen Knoten p aus P nach S, so vergrößern sich die Zähler aller Knoten in S höchstens um 1 und p bekommt einen neuen Zähler. Das „branch-and-bound“ Kriterium kann nun folgendermaßen © modlab® 2007 Graphentheorie 45 formuliert werden: Es gibt einen Knoten s in S mit Zähler z =|P|. Bron und Kerbosch zeigen, dass man dieses Kriterium am schnellsten erreicht, wenn man ui aus P so auswählt, dass ui mit demjenigen Knoten s in S durch eine Kante verbunden ist, welcher den höchsten Zähler z hat. Dadurch erhöht man in jedem Schritt den Zähler von s um 1, das „branch-and-bound“ Kriterium wird auf dem schnellst möglichen Wege erreicht. Literatur Graphentheorie, Komplexizität, grundlegende Algorithmen G. Valiente (2002), Algorithms on Trees and Graphs, Springer Berlin Heidelberg. Ottmann T, Widmayer P (1996). Algorithmen und Datenstrukturen, Spektrum Akademischer Verlag GmbH, Heidelberg, 537ff. Garey R, Johnson DS (1979). Comuters and Intractability: a Guide to the Theory of NPCompleteness, W. H. Freeman and Company, San Francisco. Schöning U (2001), Algorithmik, Spektrum Akademischer Verlag GmbH, Heidelberg. Algorithmen zur Substruktursuche Barnard J (1993). "Substructure Searching Methods - Old and New." J. Chem. Inf. Comp. Sci. 33, 532-538. Messmer B (1995). Efficient Graph Matching Algorithms, Universität Bern, Bern, 11ff. Ullmann J (1976). "Algorithm for Subgraph Isomorphism." Journal of the ACM 23, 31-42. Cliquendetectionsalgorithmen und MCS Bron C, Kerbosch J (1973). "Agorithm 457: Finding all Cliques of an Undirected Graph." Communications of the ACM 16, 575-577. Koch I (2001). "Enumerating all connected maximal common subgraphs in two graphs." Theoretical Computer Science 250, 1-30. Raymond J, Gardiner E, Willett P (2002). "RASCAL: Calculation of graph similarity using maximum common edge subgraphs." Computer Journal 45, 631-644. © modlab® 2007 Graphentheorie © modlab® 2007 46 Künstliche neuronale Netze 47 Künstliche neuronale Netze Künstliche neuronale Netze (engl.: artificial neural net, ANN) bilden eine wichtige Kategorie im Bereich des maschinellen Lernens und der künstlichen Intelligenz. Ihre Aufgabe ist es, anhand von Trainingsbeispielen eine Funktion (allgemein: ein Muster) zu erlernen und anschließend das Erlernte auf unbekannte Beispiele anzuwenden. Ihre generelle Fähigkeit zur Mustererkennung und Klassifizierung macht ANNs in großer Breite in der Praxis einsetzbar: Von der Spracherkennung über Komprimierung und Rauschunterdrückung in der Bildverarbeitung bis hin zur Vorhersage von Aktienkursverläufen wird auf künstliche neuronale Netze zurückgegriffen. ANNs sind in ihrem Aufbau und in ihrer Funktion biologischen neuronalen Netzen nachempfunden. Das Zusammenspiel relativ simpler Untereinheiten, die in Anlehnung an die biologische Terminologie als Neuronen bezeichnet werden, ergibt durch deren Vernetzung ein komplexes System zur Informationsverarbeitung. Die Art der Vernetzung der Neuronen ist ein Merkmal zur Unterteilung in verschiedene Klassen künstlicher neuronaler Netze. So unterscheidet man im Wesentlichen zwischen vollständig und teilweise verbundenen Netzen. Als Vertreter der vollständig verbundenen Netze sei hier das Hopfield-Neural-Network genannt. In ihm ist jedes Neuron mit allen anderen Neuronen verbunden. Dieser Teil des Skriptes konzentriert sich hauptsächlich auf eine bestimmte Klasse der teilweise verbundenen Netzwerke – den Feed-Forward-Netzen. Genereller Aufbau von Feed-Forward-Netzen Feed-Forward-Netze folgen einem schichtartigen Aufbau. Die oberste Schicht wird als InputLayer bezeichnet. Darauf folgt eine (theoretisch) beliebige Anzahl von sog. Hidden-Layer. Die abschließende Schicht wird als Output-Layer © modlab® 2007 bezeichnet. Abbildung 1 zeigt den Künstliche neuronale Netze 48 allgemeinen Aufbau eines vierlagigen Feed-Forward-Netzes. Jede Schicht wird also bei der Nomenklatur gezählt. Abbildung 1: Aufbau eines vierlagigen Feed-Forward-Netzes. Die namensgebende Eigenschaft der Feed-Forward-Netze ist, dass die Informationsverarbeitung nur in eine Richtung (vom Input-Layer in Richtung des OutputLayer) und zwischen direkt benachbarten Schichten erfolgt. Daraus resultiert die in Abbildung 1 gezeigte Vernetzung zwischen den benachbarten Schichten: Jedes Neuron eines Hidden-Layers ist mit allen Neuronen der darüber liegenden Schicht und mit allen Neuronen der darunter liegenden Schicht verbunden. Im Folgenden soll zunächst auf die einfachste Feed-Forward-Architektur - das Perzeptron eingegangen werden, um anschließend komplexere Beispiele zu betrachten. Das Perzeptron Das Single Layer Perzeptron Das Single Layer Perzeptron, kurz SLP, stellt die einfachste Art eines Feed-Forward-Netzes dar. Entwickelt wurde es 1958 von Frank Rosenblatt. Es besteht aus einem Input-Layer, dessen Neuronen direkt mit einem Output-Neuron verbunden sind (Abbildung 2). Zur Vermeidung von Missverständnissen: Nach obiger Definition handelt es sich beim SLP um ein zweilagiges Netz, welches jedoch nur eine aktive Schicht besitzt und deshalb als Single Layer bezeichnet wird. © modlab® 2007 Künstliche neuronale Netze 49 Die Verbindungen zwischen den Neuronen sind mit Gewichten versehen. Diese beschreiben die Intensität, mit der der jeweilige Input auf das Ergebnis des Outputs einwirkt. In dem Ouput-Neuron werden die Eingaben verarbeitet. Es wird eine gewichtete Summe, nämlich die Summe der Produkte der Gewichte und der Inputwerte, berechnet. Weiterhin wird ein zusätzlicher Wert, das sog. Bias, zur Summe hinzuaddiert. Das Bias-Neuron ist ein zusätzliches Neuron, welches stets den Wert 1 ausgibt. Wie alle Neuronen besitzt es ein Gewicht. In Abbildung 2 ist dieses mit Ө bezeichnet. n = ∑ xi wi + θ i =1 Abbildung 2: Schematische Darstellung eines Perzeptrons Das Ergebnis dieser Berechnung wird in der sog. Aktivierungs- oder Schwellenwertfunktion verarbeitet. Der Wert, den diese Funktion annimmt, bezeichnet den Zustand des Neurons. Für eine binäre Schwellenwertfunktion gibt er an, ob ein Neuron aktiviert oder deaktiviert ist (Abbildung 3), bzw. bei anderen Aktivierungsfunktionen, wie stark die Aktivierung ist (Abbildung 6). Im Falle des SLPs, das mit einer binären Schwellenwertfunktion arbeitet, gibt das Neuron als Output den Wert 1 aus, wenn das Neuron aktiviert ist. Sollte das Ergebnis der gewichteten Summe unter dem gegebenen Schwellenwert liegen, so geht das Neuron in einen deaktivierten Zustand über. Die Ausgabe beträgt in diesem Fall -1. Der Schwellenwert liegt bei der in Abbildung 3 gezeigten binären Schwellenwertfunktion bei 0. © modlab® 2007 Künstliche neuronale Netze 50 Abbildung 3: Binäre Schwellenwertfunktion des SLP. Der Schwellenwert der Funktion ist hier 0. Mit Hilfe des Bias ist eine implizite Verschiebung des Schwellenwertes möglich. Wie wir später sehen werden, ist das Training eines neuronalen Netzes durch die Veränderung der Gewichte charakterisiert. Die Veränderung des Bias zieht eine Veränderung des Schwellenwertes des Neurons nach sich. Sinkt das Bias-Gewicht, wirkt sich dies durch ein Sinken der gewichteten Summe aus. Folglich erhöht sich dadurch implizit der Schwellenwert für das Neuron, d.h. Eingaben und Gewichte müssen größer sein, um mit gleicher Stärke auf die Aktivität des Neurons einzuwirken. Der Vorteil, die Veränderung des Schwellenwertes über das Bias darzustellen, liegt darin, dass in Netzen mit mehr als einem Neuron für alle Neuronen die gleiche Aktivierungsfunktion benutzt werden kann. Explizit bleibt der Schwellenwert der Aktivierungsfunktion unverändert für alle Neuronen gleich. Durch das Verändern des Bias-Gewichts während des Trainings kann er jedoch implizit für jedes Neuron individuell verschoben werden. Ohne das zusätzliche Bias-Neuron benötigte man dafür für jedes Neuron eine individuelle Aktivierungsfunktion, die zusätzlich während des Trainings verändert werden müsste. SLPs sind in der Lage, Klassifizierungsprobleme zu lösen, die linear separierbar sind. Die Klassifizierung erfolgt hierbei implizit durch das Legen einer trennenden Hyperebene durch die Punktmenge. Diese Hyperebene ist in ihrer Dimension stets um eins geringer als die Dimension der zu erlernenden Funktion. Explizit erfolgt die Trennung durch die vom Perzeptron erlernte Funktion, die orthogonal zu dieser trennenden Hyperebene steht. © modlab® 2007 Künstliche neuronale Netze 51 Abbildung 4 illustriert die lineare Trennbarkeit. Hierbei ist die eingezeichnete Gerade die trennende Hyperebene. Wie man sieht ist die zu erlernende Funktion zweidimensional, während die trennende Hyperebene eine Gerade ist, die sich durch die allgemeine eindimensionale Geradengleichung darstellen lässt. Sie ist in (1) gezeigt. f ( x) = ax + b (1) Ist das Klassifizierungsproblem nicht linear separierbar, kann es durch das SLP nicht gelöst werden. Als populäres Beispiel kann hier die XOR-Funktion angeführt werden. Es kann durch ein einzelnes Perzeptron nicht gelöst werden. Abbildung 4: Ein linear separierbares Klassifizierungsproblem im zweidimensionalen Deskriptorraum. Die Lösung des XOR-Problems Für logische Operatoren wie AND oder OR ist das SLP in der Lage, durch das Legen einer Geraden, die Punkte so zu separieren, dass eine Lösung möglich ist. Betrachtet man aber Abbildung 5, so sieht man, dass dies für den XOR-Fall nicht möglich ist. Egal, wie eine Gerade durch den Raum gelegt wird, ist es nicht möglich, dass diese die Punkte {(0,0),(1,1)} von den Punkten {(0,1),(1,0)} trennt. Gezeigt wurde dies 1969 von Minsky und Papert. Die Separierung des Raumes durch zwei Geraden würde zu der Lösung des Problems führen. Dies ist allerdings nur mit einem mehrschichtigen Perzeptron lösbar. © modlab® 2007 Künstliche neuronale Netze 52 Abbildung 5: Das XOR-Problem. Die umrahmten Eingaben sollen in eine Klasse zusammengefasst werden, die anderen beiden in eine zweite Klasse. Mehrlagige Netze Ein einzelnes Neuron erstellt aus seinen Inputwerten und den zugehörigen Gewichten eine gewichtete Summe, also eine lineare Funktion. Das SLP, welches im Wesentlichen ein Neuron darstellt, kann also nur linear trennbare Klassifizierungsprobleme lösen. Wie am Beispiel der XOR-Funktion gesehen, sind für das Perzeptron damit viele (sogar der überwiegende Teil) der Klassifizierungsprobleme nicht lösbar. Schon das XOR-Problem zeigt, dass der Übergang vom SLP zum Multi Layer Perzeptron (abgekürzt MLP) die Menge der lösbaren Probleme vergrößert: MLPs sind generelle Funktionsapproximatoren. Der Übergang zu mehrlagigen Netzen mit mehreren Neuronen pro Hidden-Schicht ergibt eine Kombination linearer Gleichungen. Damit können beliebige Funktionen approximiert werden. MLPs enthalten nichtlineare Aktivierungsfunktionen, z.B. die Sigmoidalfunktion und der hyperbolische Tangens. Neben ihrem nichtlinearen Verlauf zeichnet diese Funktionen aus, dass sie stetig und differenzierbar sind. Dies ist, wie wir noch sehen werden, für das NetzTraining wichtig. Weiterhin bilden sie alle möglichen Ergebnisse der gewichteten Summe auf das Intervall ]0,1[ bzw. ]-1,1[ ab. Abbildung 6 zeigt die entsprechenden Funktionsverläufe. Achtung: Die Fähigkeit eines MLPs beliebige, auch nichtlineare Funktionen zu approximieren, ist nicht durch die Wahl der Aktivierungsfunktion begründet, sondern durch die Architektur des Netzes. © modlab® 2007 Künstliche neuronale Netze 53 Abbildung 6: Links die Sigmoidalfunktion, rechts der hyperbolische Tangens Die Neuronen der Hidden-Layer geben also nicht direkt das Ergebnis der gewichteten Summe an die nächste Schicht weiter, sondern ein zuvor durch die Aktivierungsfunktion transformierten Wert. Eine zentrale Frage beim Einsatz von ANNs zu Klassifizierung ist die der zu verwendenden Netztopologie. Wie viele verdeckte Schichten werden benötigt? Wie viele Neuronen sind in der jeweiligen Schicht optimal? Es gibt kein deterministisches mathematisches Verfahren, das die optimale Netztopologie für ein gegebenes Problem bestimmt. Bei der Wahl der Netztopologie stehen sich wie so oft zwei gegensätzliche Anforderungen gegenüber: Einerseits soll das Netz die Möglichkeit haben, sich gut an die Trainingsbeispiele anzupassen. Hierfür ist ein großes Netz von Vorteil. Andererseits soll das trainierte Netz möglichst gut generalisieren, also ihm unbekannte Eingaben korrekt klassifizieren, und nicht einfach nur den Trainingsdatensatz auswendig lernen. Diesem als Overfitting bezeichneten Problem entgeht ein kompaktes Netz eher. Deshalb bleibt hier oft nur der trial-and-error-Ansatz. Dennoch lässt sich generell sagen, dass in aller Regel mehr als zwei Hidden-Layer keinen Sinn machen. Bereits Netze mit dieser Anzahl an verdeckten Schichten können potenziell alle in der Praxis auftretenden Trennungsprobleme lösen. Eine weitere Vergrößerung der Netze würde also keinen Vorteil für deren Mächtigkeit bringen, gleichzeitig aber die Gefahr des Overfittings erhöhen und das Training verlangsamen. Netztraining Das Training eines ANN ist nichts anderes als die Anpassung der Gewichte zwischen den Neuronen. Ziel ist es, die Gewichte so anzupassen, dass der Fehler des Netzes minimal wird. Mit Fehler ist hier die Summe der Quadrate der Differenzen zwischen den vom Netz berechneten Werten für die Trainingsmuster und deren gegebenen Zielwerten gemeint. Die © modlab® 2007 Künstliche neuronale Netze 54 Existenz der Zielwerte ist es, die das Training von ANNs zu einem Vertreter des überwachten Lernens macht. Zusammengefasst führt dies zu Gleichung (2), wobei E den Fehlerwert des Netzes summiert über alle k Trainingsmuster, ti den Zielwert des Trainingsmusters i und oi dessen vom Netz berechneten Output-Wert darstellt. k v E ( w) = ∑ (oi − t i ) 2 min. (2) i =1 Dies ist die während des Trainings zu minimierende Funktion. Macht man sich klar, dass in die Berechnung der Output-Werte oi die Netzgewichte maßgeblich einfließen, ist leicht v ersichtlich, dass E eine Funktion der Gewichtswerte des Netzes ist (in (2) ist w der Vektor aller Gewichtswerte des Netzes). Die Anzahl der Gewichte gibt also die Dimension des Raumes an, in dem die Fehlerfunktion definiert ist. Abbildung 7 zeigt eine mögliche Fehlerfunktion eines Netzes mit zwei Gewichten. Auf die Gefahren in sehr hochdimensionalen Räumen und die unter anderem daraus folgende Bevorzugung möglichst kompakter Netze soll später noch eingegangen werden. Der populärste Trainingsalgorithmus für ANNs - der Backpropagtion of Errors (kurz Backprop) - basiert auf der Idee des Gradientenabstieges. Dabei wird stets in Richtung des steilsten Gefälles des Funktionsgraphen gelaufen. Bildlich kann man sich dies als einen zufällig im Gebirge abgesetzten Skifahrer (das entspricht der zufällige Gewichtsinitialisierung beim Erzeugen des Netzes) vorstellen, der anschließend eine Abfahrt immer entlang des stärksten Gefälles startet, bis er im nächstgelegenen Tal landet. Abbildung 7: Fehlerlandschaft, Quelle: [1] © modlab® 2007 Künstliche neuronale Netze 55 Der Bewegung des Skifahrers entspricht in unserem Problem eine Veränderung der Gewichte, sodass sich der Fehler des Netzes verringert. Das Gradientenabstiegverfahren ermöglicht es nun, für jedes Gewicht (jede Dimension) die Richtung (Vorzeichen) und die Intensität (numerischer Wert) der Veränderung zu finden, um den Fehler zu verkleinern. Mathematisch wird dies durch eine partielle Ableitung der Fehlerfunktion nach jedem Gewicht erreicht. Der dabei entstehende Vektor von partiellen Ableitungen wird als Gradient oder Nabla-Operator bezeichnet und ist in (3) definiert. ∂ ∂ ∂ g = , , ... , ∂x n ∂x1 ∂x 2 (3) Backpropagation nimmt nun die Modifizierung der Gewichte proportional zum Gradienten vor, wobei man den Proportionalitätfaktor als Lernrate η bezeichnet. Sie dient als Faktor der linearen Modulierung des Einflusses des Gradienten. In unserem Bild des Skifahrers wäre dies so etwas wie die Qualität seiner Skier: Je besser das Material (je höher η), desto schneller fährt er bei gleichem Gefälle. Zusammengefasst ist dies in (4). v ∆w = −η ⋅ g (4) v ∆w stellt die Veränderung der einzelnen Gewichte zusammengefasst als Vektor dar, während g den Gradienten der Fehlerfunktion E bezeichnet. Am hypothetischen Beispiel eines Netzes mit nur einem Gewichtswert soll das Vorgehen des Gradientenabstieges verdeutlicht werden (Abbildung 8). Der Gradient ist die erste Ableitung der gezeigten Funktion nach dem Gewicht w. Hier wird auch deutlich, warum in (4) der negative Gradient zur Gewichtsänderung herangezogen wird: Der Funktionswert der ersten Ableitung ist bei w1 negativ, die Änderung des Gewichtes muss jedoch positiv sein, um sich dem Minimum der Funktion zu nähern. Genau umgekehrt liegt der Fall bei w2. Außerdem ist in Abbildung 8 ersichtlich, dass sich die Neigung der Geraden, die ja die partielle Ableitung der Funktion an einer Position darstellt, auf die Stärke der Gewichtsänderung auswirkt. Je stärker die Steigung (je höher der Wert der Ableitung), desto größer ist auch die Veränderung des Gewichtes hin zum Optimum. © modlab® 2007 Künstliche neuronale Netze 56 Abbildung 8: Gradientenabstieg. w1 und w2 stellen zwei unterschiedliche Werte des Gewichtes w dar. Die Steigungen der Geraden entsprechen den Ableitungen der Funktion E(w) an diesen Positionen dar. Das zu findende Minimum der Funktion liegt bei w = 0. Backpropagation stellt ein iteratives Verfahren zur Verfügung, um einen Gradientenabstieg auf der Fehlerfunktion zu ermöglichen. Die Veränderung der Gewichtwerte wird dabei wie in (5) bestimmt. wijnew = wijold + ∆wij . (5) wij stellt die Veränderung des Gewichtwertes wij in einem Trainingsschritt dar. Die Berechnung von wij ist in (6) gezeigt und geht auf (4) und damit auf den Gradientenabstieg zurück, wobei hier die Fehlerfunktion E partiell nach dem zu aktualisierenden Gewicht wij abgeleitet wird. (Zur Wiederholung: Dies entspricht einer Komponente des Gradienten g aus (4), der ja den Vektor aller partiellen Ableitungen darstellt). ∆wij = −η ∂E = ηδ j xi . ∂wij (6) wij stellt hier das Gewicht zwischen Neuron i und Neuron j dar; xi ist der Ausgabewert des Neurons i. Entscheidend für den Backpropagation-Algorithmus ist nun, dass sich diese partiellen Ableitungen der Fehlerfunktion nach den Gewichten und damit δj effizient berechnen lassen. Dabei muss allerdings unterschieden werden, ob es sich bei dem zu © modlab® 2007 Künstliche neuronale Netze 57 verändernden Gewicht um ein Gewicht zwischen dem untersten Hidden-Layer und der Output-Layer handelt, oder um ein Gewicht zwischen höher liegenden Schichten. Die Berechnung von δj unterscheidet sich also je nach dem, ob Neuron j ein Output-Neuron oder ein Hidden-Neuron ist. Zusammengefasst ist dies in (7). act ' ( net j )(t j − o j ) δ j = act ' ( net ) δ w j ∑ k jk 1≤ k ≤ n falls j Outputneur on ist falls j Hiddenneur on ist (7) Hierbei entspricht tj im oberen Teil von (7) dem Zielwert und n im unteren Teil der Anzahl der Neuronen in der Schicht unterhalb des Neurons j. Abbildung 9 soll der besseren Übersicht und der Klärung der Variablenbezeichnungen dienen. Abbildung 9: Kantengewichte sind rechts von ihrer Kante geschrieben, Ein- bzw. Ausgabewerte der Neuronen links davon. Die Bias-Neuronen sind durch „B“ gekennzeichnet, die Kästchen stellen die Aktivierungsfunktion dar. Exemplarisch sollen die Berechnungen der w-Werte für die Gewichte wij und vjk aus Abbildung 9 demonstriert werden. Nehmen wir an, das angegebene Netz benutzt die in (8) gezeigte Sigmoidalfunktion zur Aktivierung. Da wir nach (7) deren erste Ableitung benötigen, © modlab® 2007 Künstliche neuronale Netze wird auch ersichtlich, 58 warum eine Forderung an Aktivierungsfunktionen ihre Differenzierbarkeit ist. Die erste Ableitung der Sigmoidalfunktion sig(x) ist, wie in (9) ersichtlich, leicht zu errechnen. sig ( x) = 1 . 1 + e−x (8) sig ' ( x) = sig ( x) ⋅ (1 − sig ( x)) . (9) Damit ergibt sich nach (6) für ∆vjk (k ist Output-Neuron): ∆v jk = η ⋅ (t − o ) ⋅ sig (net ) ⋅ (1 − sig (net )) ⋅ o j , k 444444 k3 1k44k44442 δ k und für ∆ wij (j ist Hidden-Neuron): ∆wij = η ⋅ (δ v ) ⋅ sig (net ) ⋅ (1 − sig ( net )) ⋅ inpi . k jk j j 144444424444443 δ j Aus (7) ist auch ersichtlich, dass zur Berechnung der δ-Werte der Neuronen einer Schicht die δ-Werte der Neuronen der darunter liegenden Schicht benötigt werden. Einzig die δ-Werte des Output-Layers sind direkt berechenbar. Der Netzfehler wird also durch den Algorithmus vom Output-Layer über die Hidden-Layer von unten nach oben durchgereicht („backpropagation“). Dies gab dem Trainingsalgorithmus seinen Namen. Die Gewichte der Bias-Neuronen werden wie alle anderen Gewichte nach dem beschriebenen Schema während des Trainings angepasst. Für Details der mathematischen Herleitung sei auf [1] verwiesen. Dort wird genau beschrieben, wie die partielle Ableitung von E nach einem Gewicht durch Anwendung der Kettenregel das in (7) angegebene δ ergibt. Probleme und Lösungsansätze Die Verwendung des Gradientenabstiegs bringt nicht nur Vorteile mit sich. Man muss sich auch Gedanken um etwaige Probleme machen, die bei der Wahl dieser Methode auftreten © modlab® 2007 Künstliche neuronale Netze 59 können. Ohne Zweifel ist es mit Hilfe des Gradientenabstiegs möglich, das Netz immer besser werden zu lassen. Es stellt sich nur die Frage, ob man nach Beendigung des Trainings tatsächlich die optimale Gewichtskonstellation und dadurch auch die Funktion gefunden hat, die die Datenklassen am besten voneinander trennen kann. Hierbei trifft man oft auf ein allgemeines Problem von Optimierungsverfahren: das Auftreten lokaler Minima, die nicht wieder verlassen werden. Die Anzahl potentieller lokaler Minima erhöht sich mit der Dimension des Raumes. Es macht also Sinn, das Netz nicht unbedingt mit der größtmöglichen Anzahl Parameter, die einem zur Verfügung stehen, zu trainieren, sondern im Vorfeld wichtige Parameter zu selektieren. Im Gegensatz dazu steht das Problem der flachen Plateaus. Diese bewirken, dass der Gradient sehr niedrige Werte nahe 0 oder unter Umständen sogar 0 annimmt. Dies führt zu einer Stagnation des Verfahrens. Das Risiko des Auftretens flacher Plateaus steigt mit abnehmender Anzahl Trainingsparameter. Im Wesentlichen sind zwei Methoden zu benennen, die sich mit den genannten Problemen befassen, und gute Resultate erzielen: 1. Das Verändern der Lernrate zur Laufzeit, und 2. das Einführen eines Momentum-Terms. Wie wir bereits gesehen haben, besitzt die Lernrate Einfluss auf die Veränderung der Gewichte nach jedem Trainingszyklus. Am Anfang macht es durchaus Sinn, mit einer hohen Lernrate zu starten, da der Algorithmus dadurch in der Lage ist, sich recht schnell auf dem Suchraum zu bewegen. Im späteren Verlauf des Trainings ist eine große Lernrate allerdings nicht von Vorteil. Diese stellt nämlich auch die Gefahr dar, gute Optima wieder zu verlassen oder zwischen gleich guten Werten zu oszillieren. Eine Verringerung der Lernrate zur Laufzeit des Algorithmus bietet den Vorteil, dass man zunächst recht schnell gute Positionen des Raumes erkennt und diese durch die Verringerung der Lernrate nicht sofort wieder verlässt. Weiterhin ist dadurch eine feinere Optimierung möglich, indem das Netz mit immer kleiner werdenden Schritten weiter verbessert wird. Ein einfaches Beispiel für dieses Vorgehen ist die Verwendung einer adaptiven Lernrate nach Darken und Moody. Diese ist in (10) definiert. ηn = η0 n 1+ r . © modlab® 2007 (10) Künstliche neuronale Netze 60 Man startet zunächst mit einer hohen Lernrate η0. Der Wert der Lernrate verringert sich im Laufe des Trainings auf ungefähr η0 / (1 + n), wobei n die Anzahl bisher präsentierter Trainingsbeispiele ist. Der Parameter r gibt hierbei die Stärke der Verringerung der Lernrate in jedem Schritt an. Nach r Schritten hat sich die Lernrate halbiert. In der Praxis liefert bereits die Verwendung dieses einfachen Verfahrens gute Ergebnisse. Genauere Informationen zu dem Vorgehen nach Darken und Moody sowie eine Auswahl weiterer möglicher Verfahren zur Veränderung der Lernrate während des Trainings sind in [4] zu finden. Die zweite erwähnte Möglichkeit, das Risiko lokaler Minima und flacher Plateaus zu minimieren, ist die Einführung des sog. Momentum-Terms, der sich am ehesten durch Impuls oder Trägheitsmoment übersetzen lässt. Dieses Konzept stammt aus der Physik. Im Prinzip kann man sich den Suchraum (Fehlerfunktion) als zerklüftetes Gebirge vorstellen, mit vielen Gipfeln und Tälern und möglicherweise auch Plateaus. Durch die Veränderung der Gewichte bewegt man sich in diesem Suchraum von Gipfel zu Tal; der Fehler wird minimiert. Durch die Stärke der Gewichtsänderung ist es möglich zu erkennen, wie stark das Gefälle ist. Man stelle sich eine Kugel vor, die in dem vorhandenen Gebirge einen Hang hinunterrollt. Je stärker das Gefälle ist, desto höher ist die Beschleunigung, die die Kugel erreicht. Erreicht die Kugel das Tal, stoppt sie nicht sofort. Der Schwung bewirkt, dass die Bewegung erst allmählich abklingt. Aufgrund dessen ist es mit Hilfe des Momentum-Terms möglich, flache Plateaus zu überqueren oder zerklüftete Flächen zu passieren. Hierbei werden bei der Berechnung der neuen Gewichtsveränderungen, die Änderungen des letzten Schrittes berücksichtigt. Diese Änderungen wirken sich, mit einer gegebenen Stärke des Momentums, auf die neuen Gewichtswerte aus. Mathematisch ist dies durch (11) definiert. ∆wi , j (t ) = η δ jο i + α ⋅ ∆wi , j (t − 1) , wobei (11) ∆wi , j (t ) die Gewichtsveränderung im aktuellen Schritt, ∆wi , j (t − 1) die des vorherigen Schrittes, δ j den Wert des unterhalb des Gewichtes liegenden Neurons j, ο i die Ausgabe des darüber liegenden Neurons i und α den Momentum-Parameter darstellen. Wie man anhand von (11) erkennen kann, ist die Stärke des Momentums durch den Parameter α modifizierbar. (11) stellt also eine um das Momentum erweiterte Form von (6) dar. Trotz der offensichtlichen Vorteile, die der Momentum-Term mit sich bringt, sollte dennoch darauf hingewiesen werden, dass dieser auch die Gefahr birgt, durch einen hohen Schwung © modlab® 2007 Künstliche neuronale Netze 61 aus einem besseren lokalen Optimum in ein schlechteres zu gelangen. Leider gibt es keinen allgemeinen, problemunspezifischen Wert für Parameter α. Dessen Wert muss deswegen durch trial-and-error Verfahren bestimmt werden. Generell ist zu sagen, dass man beim Training neuronaler Netze eine Multistartstrategie wählen und mehrere Netze mit verschiedenen Parametereinstellungen parallel trainieren sollte. Die Selektion des besten Netzes ist dabei durch den RMSE (Abkürzung für root mean square error) möglich. Dessen Berechnung ist in (12) gezeigt. RMSE = 1 n (t i − oi ) 2 , wobei ∑ n i =1 (12) n die Anzahl der Trainingsbeispiele, ti der Zielwert und oi der berechnete Output-Wert des Netzes für Trainingsbeispiel i ist. Literatur [1] W. Oberhofer, T. Zimerer 1996: „Wie Künstliche Neuronale Netze Lernen: Ein Blick in die Black Box der Backpropagation Netzwerke“ http://www.fh-ansbach.de/~thomas.zimmerer/pdfs/Literatur/DP_287.pdf [2] P. Baldi, S. Brunak 2001: „Bioinformatics - The Machine Learning Approach“, The MIT Press, Cambridge. [3] D. Kriesel 2005: „Ein kleiner Überblick über Neuronale Netze” http://www.dkriesel.com/content/studium/neuronetzefiles/neuronalenetze.pdf [4] W. Schiffmann, M.Joost, R.Werner: „Optimization of the Backpropagation Algorithm for Training Multilayer Perceptrons” http://www.cs.bham.ac.uk/~pxt/NC/schiffmann.bp.pdf © modlab® 2007 Künstliche neuronale Netze © modlab® 2007 62 Partikelschwarm-Optimierung 63 Partikelschwarm-Optimierung (PSO) Die Idee für die PSO hat ihren Ursprung in der Simulation der Dynamik von biologischen Systemen, wie Vogel- oder Fischschwärmen. Relativ früh schon wurde jedoch die Eignung des Algorithmus als heuristisches Optimierungsverfahren erkannt und daraufhin weiterentwickelt. Zum ersten Mal wurden Partikelschwärme von Eberhart und Kennedy im Jahr 1995 als Optimierungsparadigma vorgeschlagen [1, 2]. Künstliche Schwärme bestehen aus Individuen, den so genannten Agenten oder Partikeln. Indem den Partikeln einfache Regeln vorgegeben werden, nach denen sie sich zu verhalten haben, können verschiedene Verhaltensmuster des Schwarmes entstehen. Trotz der Einfachheit des Regelwerkes und somit der Einfachheit des Verhaltens der einzelnen Individuen kann das Verhalten eines Schwarmes sehr komplex und vielschichtig sein. Solche Komplexität entwickelt sich aus der Fähigkeit der Partikel, miteinander zu interagieren. Indem sie untereinander Informationen über ihre Umwelt und über sich selbst austauschen, beeinflussen sie sich auch gegenseitig in ihrem Verhalten. Durch diesen Informationsaustausch können die Partikel gegenseitig ihre „Flugrichtung“ und „Fluggeschwindigkeit“ im durch das Problem aufgespannten Suchraum (oder Fitnesslandschaft) beeinflussen. Jeder Partikel hat das Bestreben, sich auf optimale, im Raum gefundene Punkte hinzuzubewegen, so dass sich letztlich der Schwarm gerichtet durch den Raum bewegt und nach einiger Zeit in einer Lösung konvergiert. Eine künstliche Optimierungslandschaft ist in Abb. 1 gezeigt. © modlab® 2007 64 nswe n2 s io en e Funkt io m Di Dim io ns rt Partikelschwarm-Optimierung n1 Abbildung 1: Beispiel einer Fitnesslandschaft mit vielen lokalen Maxima und Minima (multimodale Fitnesslandschaft) Der Algorithmus Zu Anfang der PSO wird in dem von einem Problem aufgespannten Lösungsraum eine bestimmte Anzahl von Partikeln generiert. Die Positionen dieser Partikel sind zunächst zufällig gewählt, ebenso ihre Bewegungsrichtung und Geschwindigkeit. Jeder Partikel des Schwarmes kann sich frei im Suchraum bewegen (Abb. 2). Abbildung 2: Momentaufnahme: Partikel in einer Fitnesslandschaft, das globale Optimum ist durch den Schnittpunkt der schwarzen Geraden mit der Lösungsoberfläche visualisiert. Bei einem D-dimensionalen Problem wird die Position jedes Partikels – hier des i-ten Partikels – durch einen Ortsvektor Xi = (xi1, xi2, xi3,…xiD) beschrieben. Die Geschwindigkeit des i-ten Partikels wird analog mit einem Geschwindigkeitsvektor Vi = (vi1, vi2, vi3,…viD) beschrieben. Da jedem Partikel durch den Ortsvektor eine Position im Lösungsraum © modlab® 2007 Partikelschwarm-Optimierung 65 zugewiesen ist, ist es auch möglich, die jeweilige Fitness der Partikel in Bezug auf das Problem zu bestimmen. Des Weiteren existieren zwei Arten von „Gedächtnis“ in der PSO: • Zum einen haben Partikel ein so genanntes „individuelles“ Gedächtnis, in dem sie die beste Position pi abspeichern können, an der sie sich jeweils selbst im Optimierungsprozess bis zum aktuellen Zeitpunkt befunden hat. • Zum anderen besitzen die Partikel ein „soziales“ Gedächtnis, das man sich auch als „Schwarmgedächtnis“ vorstellen kann. Dieses „soziale“ Gedächtnis speichert die Position pb ab, die bis zum aktuellen Zeitpunkt die insgesamt beste, von allen Partikeln zusammen gefundene Position ist. Ausgehend von diesen beiden Informationen – also den Positionen aus den individuellen Gedächtnissen und dem sozialen Gedächtnis – sowie dem aktuellen Geschwindigkeitsvektor werden nun für jeden Partikel neue Geschwindigkeitsvektoren berechnet. In dem 1998 von Shi und Eberhart vorgeschlagenen PSO-Algorithmus [3] erfolgt die Berechnung nach Gleichung 1: v i (t + 1) = w ⋅ v i (t ) + n1 ⋅ r1 ⋅ ( p i − x i (t )) + n 2 ⋅ r2 ⋅ ( p b − x i (t )) , (1) wobei t für die Epochenzahl steht, n1 und n2 Konstanten zur Gewichtung des Einflusses der beiden Gedächtnisse auf das Schwarmverhalten sind, und r1 und r2 Zufallszahlen zwischen 0 und 1 sind. Das so genannte „Massenträgheitsgewicht“ w gewichtet den Einfluss des alten Geschwindigkeitsvektors vi eines Partikels und dient maßgeblich der Kontrolle der Gesamtgeschwindigkeit, mit der sich Partikel durch den Suchraum bewegen. „Vernünftige“ Werte für die Konstanten, die jedoch von Anwendung zu Anwendung unterschiedlich passend sein können, liegen für n1 und n2 zwischen 1 und 2, für w zwischen 0,5 und 1. Diese Angaben sind jedoch nur als Anhaltspunkte zu verstehen. Um einer unkontrollierten, explosionsartigen Bewegung des Schwarmes vorzubeugen, wird oftmals der maximale Wert, den der Geschwindigkeitsvektor annehmen kann, eingeschränkt. Wird dieser maximale Wert überschritten, so wird vi auf den Grenzwert zurückgesetzt. Eine weitere Möglichkeit, die Geschwindigkeit des Schwarmes zu kontrollieren, ist das Massenträgheitsgewicht mit zunehmender Epochenzahl linear kleiner werden zu lassen, was in der Regel zu einer Konvergenz des Schwarmes über die Zeit führt [4]. © modlab® 2007 Partikelschwarm-Optimierung 66 Die Positionen der einzelnen Partikel werden durch Addition des in jeder Epoche neu errechneten Geschwindigkeitsvektors zu dem Ortsvektor neu berechnet (Gleichung 2): xi (t + 1) = xi (t ) + vi (t + 1) . (2) Nach dem Update der Positionen kann ein neuer Evaluationszyklus beginnen, bis ein Stoppkriterium (wie z.B. eine maximale Anzahl an Epochen) erreicht wird. In Pseudocode lässt sich die PSO folgendermaßen beschreiben: begin Positionen und Geschwindigkeiten der Partikel initialisieren; Fitness evaluieren; Gedächtnisse initialisieren; while (Abbruchbedingung ≠ true) neue Geschwindigkeiten berechnen; Positionen neu berechnen; Fitness evaluieren; Gedächtnisse auffrischen; end end Zusammenfassung Die Partikelschwarm-Optimierung ist ein biologisch motiviertes, leicht zu implementierendes und effizientes heuristisches Optimierungsverfahren. Im Vergleich zu anderen biologisch motivierten Optimierungsalgorithmen, wie beispielsweise genetischen Algorithmen [5], hat es nur wenige freie Parameter, die jedoch entscheidenden Einfluss auf das Verhalten der Schwärme haben. PSO wurde in der Vergangenheit bereits erfolgreich für unterschiedlichste Anwendungen eingesetzt, vom Training künstlicher neuronaler Netze bis hin zum Lösen technischer Probleme im Ingenieurswesen. © modlab® 2007 Partikelschwarm-Optimierung 67 Literatur 1. Kennedy J, Eberhart RC: Particle swarm optimization. In Proceedings of IEEE International Conference on Neural Networks; Piscataway, NJ. 1995: 1942-1948. 2. Eberhart RC, Kennedy J: A new optimizer using particle swarm theory. In Proceedings of the Sixth International Symposium on Micromachine and Human Science; Nagoya, Japan. 1995: 39-43. 3. Shi Y, Eberhart RC: Parameter selection in particle swarm optimization. In Evolutionary Programming VII: Proceedings of the Seventh Annual Conference on Evolutionary Programming; New York, USA. 1998: 591-600. 4. Kennedy J, Eberhart RC: Swarm Intelligence. San Diego: Academic Press; 2001. 5. Holland J.H.: Adaptation in natural and artificial system, Ann Arbor, The University of Michigan Press; 1975. © modlab® 2007 Partikelschwarm-Optimierung © modlab® 2007 68 Ameisenalgorithmen 69 Ameisenalgorithmen Ameisenalgorithmen stammen aus dem Gebiet der naturanalogen bzw. biologisch motivierten Algorithmen. Das Ant Colony Optimization (ACO) Konzept wurde von Marco Dorigo (Dorgio et al., 1996) als Metaheuristik eingeführt (http://www.aco-metaheuristic.org/). Die Idee des Ameisenalgorithmus wurde dem Foraging (Futtersuche) bestimmter Ameisenunterfamilien nachempfunden. Diese sind in der Lage, bestehende Hindernisse zwischen Nest und Futterquelle bei verschiedenen möglichen Wegen kurzmöglichst zu verbinden (Deneubourg et al., 1990; Abb.1). Abbildung 1. Zeitlicher Ablauf der Wegfindung bei Ameisen. Die Graustufe der Pfeile spiegelt die Pheromonkonzentration wieder. Die Ameisen verwenden zuerst alle zur Verfügung stehenden Verbindungen zwischen Futterquelle und Nest (Abb. 1a). Über die Zeit (Abb. 1b) ist ein autokatalytischer Prozess zu beobachten, der immer mehr Arbeiterinnen auf den kürzeren Weg zieht, bis schlussendlich (Abb. 1c) alle Wege außer dem kürzesten ignoriert werden. Diese Lösung eines natürlichen Optimierungsproblems ist unter den folgenden Gesichtspunkten für die Informatik interessant: © modlab® 2007 Ameisenalgorithmen 70 • Keine übergeordnete Intelligenz (Königin) steuert die Ameisen. • Einzelne Ameisen haben kein Problembewusstsein. • Die optimale Lösung wird gefunden. • Die Ameisen kooperieren, um eine Lösung zu finden. Der Aspekt der Kooperation ist von entscheidender Bedeutung. Den Ameisen ist es möglich, über abgegebene Duftstoffe (Pheromone) über ihre Umwelt als Medium zu kommunizieren. Diese Kommunikation über eine Veränderung der Umwelt, um einem gemeinsamen Ziel zu folgen, bezeichnet man als Stigmergie, eingeführt von Grassé 1959 für Termiten (Grassé, P. P. & Noirot, C., 1959; Theraulaz, G. & Bonabeau, E., 1999). Die Ameisen lösen das in Abb.1 gezeigte Weg-Problem mit Hilfe von Pheromonen (Deneubourg et al., 1990). Auf dem kürzeren Weg wandern pro Zeit mehr Ameisen als auf dem längeren Weg, wodurch die Pheromonkonzentration auf diesem schneller anwächst (bzw. weniger abnimmt). Die aus dem Nest nachfolgenden Ameisen werden durch die Pheromonkonzentration hinsichtlich ihrer Entscheidung für einen Weg zur Futterquelle beeinflusst. Die kürzere Route wird durch die höhere Pheromonkonzentration mit einer gewissen Wahrscheinlichkeit bevorzugt. Einzelne gleichartige Individuen werden also über eine Kommunikationsschnittstelle verbunden und dadurch in die Lage versetzt, Probleme zu lösen. Es entsteht eine Lösung aus dem System, die über die Fähigkeiten der einzelnen Ameisen hinausgeht (Emergenz). Dies wird durch die Ameisenalgorithmen für die Informatik im Bereich von Optimierungsproblemen adaptiert. Ameisen werden formal zu „Agenten“. Der Aspekt der Pheromone wird 1:1 übernommen. Ameisenalgorithmen in der Anwendung ACS (Ant Colony System) für das Travelling Salesman Problem nach Dorigo & Gambardella (1997). Im Problem des Handlungsreisenden (TSP) geht es darum, eine möglichst kurze Rundreise zwischen verschiedenen Städte zu organisieren, wobei jede Stadt nur einmal besucht werden darf. Ein Beispiel ist in Abb.2 zu sehen. © modlab® 2007 Ameisenalgorithmen 71 Abbildung 2. Vollständiger verbundener Graph für das TSP Problem. Alle Kanten haben unterschiedliche Gewichte (zufällig) alle Knoten eindeutige Bezeichnungen. In Abb.2 stellen Knoten, Städte und Kanten, Straßen mit unterschiedlichem Gewicht (Länge) entsprechen. Ein Agent (k) startet nun in einer zufälligen Stadt und wählt von dieser Stadt (r) die nächste noch nicht besuchte Stadt (s) entsprechend Gleichung (1). { arg max [τ (r , u )] ⋅ [η (r , u )]β u∉M k s= S } wenn q ≤ q0 , wobei (1) sonst τ (r, u ) der Pheromonkonzentration auf der Kante zwischen Stadt r und u entspricht. η (r, u ) ist eine heuristische Funktion, invers zu der Distanz zwischen den Städten r und u. β gewichtet die relative Bedeutung der Pheromonspur sowie die Entfernung (Kantengewicht) zwischen den Städten. q wird mit gleichverteilter Wahrscheinlichkeit aus [0,1] gezogen, q 0 ist ein Parameter, S ist eine zufällig nach Gleichung 2 belegte Variable. [τ (r , s )] ⋅ [η (r , s )]β β pk (r , s ) = ∑ [τ (r , u )] ⋅ [η (r , u )] u ∉M k 0 wenn s ∉ M k . (2) sonst Die Formel bevorzugt Kanten mit einer stärkeren Pheromonspur und geringerem Gewicht (Länge). Die Idee ist, dass der Agent mit einer Wahrscheinlichkeit von q 0 die Möglichkeit hat, auf das kollektive Gedächtnis zuzugreifen, oder mit einer Wahrscheinlichkeit von 1 − q 0 eine „eigene“ Stadt nach den Vorgaben von Gleichung 2 zu wählen. Für eine weiterführende Beschreibung des Pheromonupdates (globales, lokales) sei auf Dorigo & Gambardella (1997) verwiesen. © modlab® 2007 Ameisenalgorithmen 72 Ein Applet für TSP nach dem ACO Konzept ist hier zu finden: http://www.geocities.com/andres_perezuribe/ Es ist zu beachten, dass das hier verwendete Pheromonupdate explizit auf die Problemstellung zugeschnitten ist. Das ACO Konzept lässt sich jedoch auf eine weites Spektrum von Optimierungsproblemen anwenden. Für eine Auflistung möglicher Anwendungen sei auf Dorigo & Stützle, 2004 verwiesen. Die Herausforderung bei der Anwendung von ACO liegt darin, a) eine geeignete Methode des Pheromonupdates zu finden, und b) das „Pfad“-Konzept an die Problemstellung anzupassen. Naheliegende Anwendungen sind Verkehrssimulationen oder Routing Probleme. Auch die Möglichkeit der Modellierung biologischer Systeme (echter Ameisen) stellt eine mögliche Anwendung da. Literatur Deneubourg, J-L., Aron, S., Goss, S. & Pasteels, J.M. (1990). The self-organizing exploratory pattern of the Argentine ant. Journal of Insect Behavior 3: 159-168. Dorigo, M., Maniezzo, V. & Colorni, A. (1996). Ant system: optimization by a colony of cooperating agents. IEEE Transactions on Systems, Man, und Cybernetics-Part B. 26: 29-41. Dorigo M. & Gambardella, L.M. (1997). Ant Colonies for the Traveling Salesman Problem. BioSystems 43:73-81. Also Tecnical Report TR/IRIDIA/1996-3, IRIDIA, Université Libre de Bruxelles. Dorigo, M. & Stützle, T. (2004). Ant Colony Optimization. The MIT Press, Cambridge, Massachusetts. Grassé, P. P. & Noirot, C. (1959). The development of symbiosis in Isoptera. Experientia 15: 365-72. Theraulaz, G. & Bonabeau, E. (1999). A brief history of stigmergy. Artificial Life 5: 97-116. © modlab® 2007