Einführung
In diesem Artikel geht es darum, wie wir zusammen mit der Rosneft-Tochter Samaraneftekhimproekt und der Kasaner Bundesuniversität im September 2020 den Hackathon der drei Städte veranstalteten, bei dem wir Studenten einluden, das klassische Problem der seismischen Korrelation reflektierender Horizonte zu lösen. Dies sind die Herausforderungen, denen sich seismische Fachkräfte auf der ganzen Welt täglich stellen müssen. Für die Teilnehmer wurde beschlossen, die Aufgabe als „Aufgabe, den optimalen Weg zu finden“ zu präsentieren, um die Schüler nicht mit schrecklichen Worten abzuschrecken. In dem Artikel werden wir Ihnen mehr über das Problem erzählen und interessante Lösungen der Teilnehmer analysieren. Es wird sowohl für angewandte mathematische Modellierung als auch für maschinelles Lernen und Datenanalysten spannend sein.
Organisatorischer Teil
In einem Artikel über vc.ru - Oil and Hackathon haben wir interessante Details zur Organisation eines Online-Hackathons in drei Städten beschrieben . Bei einem Marathon geht es nicht nur ums Laufen .
Wir werden nur erwähnen, dass wir für das Online-Format den Discord-Service gewählt haben und einen Link zu den Hackathon-Regeln hinterlassen (Link auf der Boosters- Website ).
Formulierung des Problems
Bei der seismischen Erkundung gibt es das Konzept des "seismisch reflektierenden Horizonts" - es ist eine reflektierte Welle, die in Dynamik und Ausbreitungsbereich stabil ist und einer bestimmten geologischen Grenze entspricht. Durch die korrekte Verarbeitung der seismischen Felddaten und das Erkennen (seismische Prospektionsexperten sagen - "interpretieren") seismische Horizonte ist es möglich, die Tiefe ihres Auftretens mit einer Genauigkeit von 5 bis 10 Metern zu bestimmen. Nachdem die Tiefen bestimmt wurden, ist es möglich, diese Horizonte zusammen mit Geologen an eine geochronologische Skala ( Geochronologische Skala - Wikipedia ) zu binden und ihre kleineren Gegenstücke zu erkennen. Und dann entscheiden - zwischen welchen Horizonten die Ölfallen liegen können, wie das Relief des Strukturmodells des Feldes aussieht usw.
Vertikale Abschnitte des seismischen Würfels und erkannte seismisch reflektierende Horizonte
In der Praxis werden Horizonte Schicht für Schicht auf seismischen Abschnitten des seismischen Würfels identifiziert - sowohl manuell mithilfe eines Arrays (seismische Experten sagen - "Tauchen") einer großen Anzahl von Referenzpunkten als auch mithilfe automatisierter und halbautomatisierter Suchverfahren ... Natürlich ist eine qualitativ hochwertige Lösung für das Problem der Interpretation seismischer Horizonte mithilfe von Software sehr gefragt und kann den Zeitaufwand für Spezialisten für seismische Prospektion erheblich reduzieren.
Gleichzeitig die Untersuchung von Quellen ( Horizonte der kleinsten Quadrate mit lokalen Steigungen und Multi-Grid-Korrelationen, Wellenform-Einbettung: Automatische Horizontauswahl mit unbeaufsichtigtem Tiefenlernen) zeigt, dass die entwickelten Algorithmen und Lösungen auf einer kleinen Anzahl mathematischer Ansätze basieren. Daher haben wir uns entschlossen, Studenten mit einem Bewusstsein anzuziehen, das noch nicht durch wissenschaftliche Forschung getrübt ist, und ihnen dieses Problem in Form des Problems anzubieten, den optimalen Weg auf einer komplexen Oberfläche zu finden.
Infolgedessen wurde das Problem wie folgt formuliert: Konstruktion eines Bewegungspfades auf einer komplexen Oberfläche, der durch gegebene Punkte verläuft und die Bedingungen eines Minimums einiger Funktionen erfüllt, abhängig von der Länge des Pfades und seinen Winkeln (Gradienten).
Ein Beispiel für einen Teil des ursprünglichen seismischen Abschnitts zum Erstellen eines Horizonts. Die grüne Linie ist der im Voraus bekannte Teil, die rote Linie ist der gewünschte Teil.
Die Teilnehmer des Wettbewerbs mussten innerhalb von 12 Stunden eine Lösung finden, die es ihnen ermöglichte, ihre Reise entlang der optimalen Flugbahn im verborgenen Teil des Datensatzes fortzusetzen. Es gab 20 Versuche, die Lösung zu validieren, wobei der Teilnehmer mit dem minimalen Metrikwert gewonnen hat.
Detaillierte Datenbeschreibung
, :
, – 2 .
-, hor_2 L1. L2 L1. . , , .
- . , [x,y] z(x,y) .
- (x,y) L1 L2. x, hor_1, …, hor_4.
- L2 4 (1, 2, 3, 4), L1 – 3 (1, 3, 4). 2- L1 (40%). 60% .
, – 2 .
-, hor_2 L1. L2 L1. . , , .
Während des gesamten Wettbewerbs wurde die Rangliste auf der Grundlage der metrischen Werte im öffentlichen Teil der Testdaten erstellt. Nach dem Ende des Wettbewerbs wurde der metrische Wert im privaten Teil neu berechnet und die Rangliste aktualisiert. Dies ist wichtig, um nachhaltige Lösungen zu erhalten, die nicht nur auf öffentliche Daten zugeschnitten sind, sondern auch ein vergleichbares Ergebnis für private Daten liefern können. Es stellte sich heraus, dass dies nicht umsonst war, und nach der endgültigen Qualitätsbewertung änderte sich die Rangliste.
Die folgende Metrik wurde verwendet, um die erhaltenen Ergebnisse zu quantifizieren:
wobei:
N die Dimension des erforderlichen Horizonts ist;
- mit dem Algorithmus ermittelte Koordinaten des Horizonts, ;;
- Koordinaten des Referenzhorizonts;
- Werte der Oberflächenkarte am Punkt mit den Koordinaten i, yi;
wobei die Höhe der maximal mögliche Wert der y-Koordinate der Oberflächenkarte ist;
Dabei ist max (z) der größte Wert der Oberflächenkarte.
Metrische Implementierung in Python
def score(true, submission, all_data):
#true – pandas.Dataframe ;
#submission - pandas.Dataframe ,
#;
#all_data - numpy.ndarray
all_data = all_data.astype('float64')
#
max_z = abs(all_data).max()
#
y_pred = submission.loc[idx.index.values].y.values.astype('int')
#
y_true = true.y.astype(int)
#
z_pred = all_data[true.index.values.astype(int), y_pred.astype(int)]
#
z_true = all_data[true.index.values, y_true]
#
y_err = ((y_pred - y_true)/3000)** 2
z_err = ((z_pred - z_true)/max_z) ** 2
#
total_err = np.sqrt(np.sum(y_err + z_err))
return total_err
Welche Methoden wurden von den Teams angewendet
Die Aufgabe wurde ursprünglich so ausgewählt, dass sie auf verschiedene Arten gelöst werden konnte: direkt und invers (unter Verwendung klassischer mathematischer Methoden bzw. maschineller Lernmethoden).
Unter dem Gesichtspunkt des maschinellen Lernens kann das Problem mit zwei Methoden gelöst werden:
1) Konstruktion der Regression unter
Verwendung bekannter Punktepaare () können Sie ein Mapping erstellen durch Minimieren der Verlustfunktion L. - indikative Beschreibung des i-ten Punktes.
Zum Beispiel, oder
Die Verlustfunktion kann entweder die anfängliche Fehlerfunktion aus der Problemstellung oder eine einfachere Funktion sein, beispielsweise die Standardabweichung der konstruierten und ursprünglichen Pfade:
Viele gängige Methoden des maschinellen Lernens können verwendet werden , um das Mapping f zu erstellen: beginnend mit der Polynomregression, dem Durchqueren eines zufälligen Waldes und tiefen neuronalen Netzen.
Mehrere Teams haben diesen Ansatz mit as gewähltFaltungs- oder vollständig verbundenes neuronales Netzwerk und als f- neuronales Netzwerk oder Gaußsche Prozesse.
2) Semantische Segmentierung
Ein Beispiel für semantische Segmentierung
Das ursprüngliche Problem kann als Computer-Vision-Problem gelöst werden. Punkte (x, y) werden als Bildpixel betrachtet, wobei das gesamte Bild der gesamte Datensatz ist und die "Helligkeit" des Pixels (x, y) der z (x, y) -Wert ist. Um einen Pfad zu erstellen, müssen Sie jedem Pixel eine der Klassen zuweisen - 0 oder 1. Der Teil des Bildes, der sich unter dem Pfad befindet oder ihn enthält, gehört zur Klasse 0 und der Rest - zur Klasse 1. Die alltägliche Lösung für ein solches Problem ist ein vollständig gefaltetes neuronales Netzwerk U-Net on Eingabe, die ein Stück (Patch) des Originalbilds empfängt und ein Array gleicher Größe aus Nullen und Einsen ausgibt, das die Klassen der entsprechenden Pixel bezeichnet.
Neben Deep-Learning-Techniken können Sie auch klassische Computer-Vision- und Bildverarbeitungstechniken wie Flood Fill für die Bildsegmentierung verwenden. Dies wurde von einem der Teilnehmer durchgeführt, wodurch das Bild für die weitere Anwendung von Algorithmen zum Finden des kürzesten Weges vorverarbeitet wurde.
Aus Sicht der klassischen mathematischen Methoden ist das vorgeschlagene Problem ein klassisches Optimierungsproblem, und wir haben Versuche beobachtet, es durch die folgenden Gruppen von Methoden zu lösen:
- , ;
. y , y, . - , ;
. - , .
, .
Lassen Sie uns zunächst die Entscheidungen der Teilnehmer analysieren.
Methoden
des maschinellen Lernens: Eine der Lösungen war ein autoregressives Faltungsnetzwerk, das eine reelle Zahl erzeugt - den Wert des Pfadesfür den i-ten Schritt. Die 32 × 32-Pixel-Patches des Originalbilds wurden dem Eingang des neuronalen Netzwerks zugeführt. Als eine FunktionZur Merkmalsextraktion wurde ein vorab trainiertes neuronales Faltungsnetzwerk ResNet34 verwendet. Die durch dieses neuronale Netzwerk erhaltene Merkmalsdarstellung wurde mit den Werten dieses Pfades aus den vorherigen 32 Schritten kombiniert. Um weitere 32 Schritte vorherzusagen, wurden frühere Vorhersagen des neuronalen Netzwerks als vorherige Horizontwerte verwendet. Das neuronale Netzwerk wurde durch eine Modifikation des stochastischen Gradientenabfalls von Adam mit einer exponentiellen Abnahme des Optimierungsschritts während des Trainings trainiert. Für das Training wurde die mittlere absolute Abweichung minimiert (Experimente mit der Standardabweichung ergaben schlechtere Ergebnisse). Um eine Überanpassung zu vermeiden, wurde der Dropout verwendet, dh das zufällige Nullstellen eines Teils der Neuronen. Es dauerte ungefähr 10 Minuten, um das neuronale Netzwerk zu trainieren, 20 vollständige Durchgänge über den gesamten Datensatz und 720 Optimierungsschritte.
Eine Lösung, die unter Verwendung eines Faltungsnetzwerks erhalten wurde. Die rote Linie ist der reale Pfad, die blaue Linie ist der vom Teilnehmer empfangene.
Die Vorhersage des neuronalen Netzwerks dauert auf der AMD Threadripper 2950x-CPU und der Nvidia GTX 1080 Ti-GPU ca. 1 Minute.
Das Ergebnis des neuronalen Netzes (Metrik) beträgt in der öffentlichen Rangliste 5,71. Es wurden auch Experimente durchgeführt, um das Faltungsnetzwerk durch ein wiederkehrendes zu ersetzen, aber das Ergebnis war schlechter. Infolgedessen wurden klassische Methoden der Computermathematik als endgültige Lösung verwendet.
Neben fertigen Lösungen teilten die Teilnehmer auch ihre Ideen mit, die sie aufgrund des engen Zeitrahmens des Wettbewerbs und der rechnerischen Komplexität ihrer Ideen nicht umsetzen konnten. Einige von ihnen versuchten, neuronale Netze anzuwenden, aber nachdem sie die meiste Zeit damit verbracht hatten, gingen sie zu einfacheren und effizienteren Algorithmen oder sogar zu Brute Force und Regeln über, was letztendlich das beste Ergebnis lieferte und zu Preisen führte.
Eine Reihe interessanter Lösungen basiert auf Kenntnissen aus anderen Disziplinen: zum Beispiel klassisches Computer Vision und Bildverarbeitung, Graphentheorie, Zeitreihenanalyse. Eines der Teams stellte das Problem sogar in Bezug auf das verstärkte Lernen, von dem Sie vielleicht gehört haben, und fand eine Lösung, hatte aber leider keine Zeit, es umzusetzen.
Klassische mathematische Methoden:
Eine der nach der lokalen Extremum-Methode erhaltenen Lösungen. Die rote Linie ist der reale Pfad, die blaue Linie ist der vom Teilnehmer empfangene.
Für diese Methode wurde ein lokales Maximum als Extremum verwendet. Der von den Teilnehmern gebaute Weg ist blau markiert, der gewünschte Horizont ist rot. Eine detaillierte Beschreibung finden Sie unten.
,
,
,
Wo:
- der maximal mögliche Wert der y-Koordinate der Oberflächenkarte;
- die Größe des Suchfensters.
Die Methode ist in Python implementiert. Die Betriebszeit betrug etwa 0,103 Sekunden, F (y, z) = 1,57,= 100.
Fazit: Die Methode ist einfach zu implementieren, die Laufzeit überschreitet 0,1 Sekunden nicht.
Eine der Lösungen des globalen Extremums. Die rote Linie ist der reale Pfad, die blaue Linie ist der vom Teilnehmer empfangene.
Fahren wir mit der nächsten Gruppe fort. Nach wie vor wurde bei dieser Methode das Maximum als Extrem verwendet.
,
,
,
wobei:
Höhe der maximal mögliche Wert der y-Koordinate der Oberflächenkarte ist;
- die Größe des Suchfensters.
Die Methode ist in Python implementiert. Die Betriebszeit betrug etwa 0,19 Sekunden, F (y, z) = 1,97,= 9, = 21.
Fazit: Die Methode ist einfach zu implementieren, die Laufzeit überschreitet 0,2 Sekunden nicht.
Eine der heuristischen Lösungen. Die rote Linie ist der reale Pfad, die blaue Linie ist der vom Teilnehmer empfangene.
Schauen wir uns die letzte Gruppe von Methoden an. Wie bereits erwähnt, die nächste Koordinatewird nach dem Minimum an Funktionalität innerhalb des angegebenen Suchfensters gesucht.
Nachfolgend finden Sie eine der von den Teams vorgeschlagenen Funktionen. Aus mathematischer Sicht sieht es so aus:
,
,
Wo:
- der maximal mögliche Wert der y-Koordinate der Oberflächenkarte;
- Koeffizient, der für den Einfluss des Fehlers in y auf den Wert der Funktion verantwortlich ist;
- die Größe des Suchfensters;
Ist der höchste Wert der Oberflächenkarte.
Die Methode wurde in Python implementiert. Die Betriebszeit betrug etwa 0,12 Sekunden, F (y, z) = 1,58,= 50, = 15000,7.
Schlussfolgerung: Die Laufzeit der Methode überschreitet 0,15 Sekunden nicht.
Die Methoden aller drei Gruppen zeigten bei einem bestimmten Datensatz ziemlich ähnliche Ergebnisse. Der kleinste metrische Wert (1,57) wurde durch ein Verfahren erreicht, das auf der Suche nach lokalen Extrema von Oberflächenwerten innerhalb eines gegebenen Suchfensters basiert.
Letzter Teil
Leider hatten am Ende des Hackathons fast alle Innovatoren
Wir wollten Mitwirkende aus zwei Bereichen zusammenbringen: Computermathematik und maschinelles Lernen. Einige sind es gewohnt, mit unstrukturierten Daten unbekannter Natur zu arbeiten, während andere es gewohnt sind, physikalische Prozesse zu untersuchen und mathematische Modelle auf ihrer Grundlage zu erstellen. Um die Vielfalt der Ideen und Lösungen zu erhöhen, haben wir kurz beschrieben, wie die Daten erhalten wurden. Dies ist einer der Gründe, warum die auf einfachen numerischen Methoden basierende Lösung die besten Ergebnisse lieferte. Der zweite Grund war, dass wir für den Studenten-Hackathon nicht sehr "komplexe" Daten mit geringem Volumen vorbereitet haben, sodass moderne mühsame Methoden des maschinellen Lernens auf einfachere Alternativen verzichten.
Wir glauben, dass dies eine hervorragende Lektion ist, die den Teilnehmern hilft, Probleme richtig einzustellen und die besten Methoden zu ihrer Lösung auszuwählen. Es ist wichtig, sich daran zu erinnern, dass Sie zuerst eine einfache Lösung ausprobieren sollten, die sogenannte Basislinie. Vielleicht können Sie damit Ihr Ziel in kurzer Zeit erreichen.
Die Hackathon-Teilnehmer schlugen ihre eigenen Algorithmen vor, um den optimalen Pfad in einem großen Datensatz in Bezug auf das Problem der automatischen seismischen kinematischen Interpretation zu finden, das derzeit im Rahmen der Entwicklung von Unternehmenssoftware auf dem Gebiet der Geologie und Seismik gelöst wird. Die wettbewerbsfähigsten Implementierungen von Algorithmen finden ihre Anwendung in der Entwicklung und Implementierung von Softwaremodulen für diese Softwaresysteme.
Wir freuen uns, Sie beim Finale des IT-Wettbewerbsmarathons zu sehen, der am 28. November online stattfinden wird. Das Programm beinhaltet: Belohnung der Gewinner des Wettbewerbs, Präsentation der ersten Version der mobilen Anwendung zur ausdrücklichen Bewertung der Stützmittelqualität. Im Rahmen der Veranstaltung werden außerdem Podiumsdiskussionen zu den aktuellen Themen "Datenmanagement- und DS-Projekte" und "Computer Vision" organisiert. Vertreter von Head of Data Science Alfa, CDO Megafon, Huawei, Head of CV X5 und anderen werden interessante Fälle teilen. Verpassen Sie nicht den ganzen Spaß ( IT Competition Marathon 2020 - Rosneft ).