Kaggle: Amazon aus dem All - Tricks und Hacks beim Training neuronaler Netze

Published on June 14, 2018

Kaggle: Amazon aus dem All - Tricks und Hacks beim Training neuronaler Netze



    Im vergangenen Sommer endete der Kaggle- Wettbewerb , der der Klassifizierung von Satellitenbildern der Amazonaswälder gewidmet war. Unser Team belegte ab 900 Teilnehmern den 7. Platz. Trotz der Tatsache, dass der Wettbewerb vor langer Zeit beendet wurde, sind fast alle Techniken unserer Lösung immer noch anwendbar, und zwar nicht nur für Wettbewerbe, sondern auch für das Training neuronaler Netze zum Verkauf. Für Details unter der Katze.

    tldr.py

    import kaggle
    from ods import albu, alno, kostia, n01z3, nizhib, romul, ternaus
    from dataset import x_train, y_train, x_test
    oof_train, oof_test = [], []
    for member in [albu, alno, kostia, n01z3, nizhib, romul, ternaus]:
       for model in member.models:
           model.fit_10folds(x_train, y_train, config=member.fit_config)
           oof_train.append(model.predict_oof_tta(x_train, config=member.tta_config))
           oof_test.append(model.predict_oof_tta(x_test, config=member.tta_config))
    for model in albu.second_level:
       model.fit(oof_train)
       y_test = model.predict_proba(oof_test)
    y_test = kostia.bayes_f2_opt(y_test)
    kaggle.submit(y_test)
    

    Aufgabe Beschreibung

    Planet hat eine Reihe von Satellitenbildern in zwei Formaten vorbereitet:

    1. TIF - 16-Bit-RGB + N, wobei N für nahes Infrarot steht
    2. JPG - 8-Bit-RGB, das aus TIF abgeleitet wurde und bereitgestellt wurde, um den Schwellenwert für die Eingabe der Aufgabe zu verringern und die Visualisierung zu vereinfachen. In einem früheren Kaggle-Wettbewerb musste mit multispektralen Bildern gearbeitet werden. Nicht-visuell, dh Infrarot, sowie Kanäle mit einer längeren Wellenlänge verbesserten die Qualität der Vorhersage und sowohl des Netzwerks als auch der unbeaufsichtigten Methoden erheblich.

    Geografisch wurden Daten aus dem Territorium des Amazonasbeckens sowie aus den Territorien Brasilien, Peru, Uruguay, Kolumbien, Venezuela, Guyana, Bolivien und Ecuador erhoben, in denen interessante Flächen ausgewählt wurden, von denen den Teilnehmern Bilder angeboten wurden.

    Nachdem Sie aus tif jpg erstellt haben, wurden alle Szenen in kleine Stücke mit einer Größe von 256 x 256 geschnitten. Und laut dem erhaltenen jpg haben die Planet-Mitarbeiter aus den Büros in Berlin und San Francisco sowie über die Crowd Flower-Plattform die Markierung vorgenommen.

    Die Teilnehmer hatten die Aufgabe, für jedes 256x256-

    Plättchen eines der sich gegenseitig ausschließenden Wetteretiketten vorherzusagen: Bewölkt , Teilweise bewölkt, Dunst, Klar

    Und auch 0 oder mehr nepogodnyh: Landwirtschaft, Primär, Selektiver Holzeinschlag, Habitation, Wasser, Straßen, Wanderfeldbau, Erblühen, Konventionelles Mining

    Teilsumme 4 Wetter und 13 ist nicht das Wetter und das Wetter für beiden Seiten und nepogodnye nicht, aber wenn das Bild Etikett bewölkt, dann sollte es keine anderen Tags geben.



    Die Genauigkeit des Modells wurde mit der F2-Metrik bewertet:

    $ Score = (1+ \ beta ^ 2) \ frac {pr} {(\ beta ^ 2p + r)} $


    $ p = \ frac {tp} {tp + fp} $


    $ r = \ frac {tp} {tp + fn} $


    $ \ beta = 2 $


    Darüber hinaus hatten alle Etiketten das gleiche Gewicht und zunächst wurde für jedes Bild F2 berechnet und anschließend die Gesamtmittelung durchgeführt. Normalerweise machen sie es ein wenig anders, das heißt, eine bestimmte Metrik wird für jede Klasse berechnet und dann gemittelt. Die Logik ist, dass letztere besser interpretierbar ist, da Sie die Frage beantworten können, wie sich das Modell in den einzelnen Klassen verhält. In diesem Fall haben die Organisatoren die erste Option gewählt, die anscheinend mit den Besonderheiten ihres Geschäfts zusammenhängt.

    Insgesamt im Zug 40k Proben. Im Test 40k. Aufgrund der geringen Größe des Datensatzes, aber der großen Größe der Bilder kann gesagt werden, dass es sich um einen „MNIST on steroids“ -Lyrical-

    Exkurs handelt

    Wie aus der Beschreibung hervorgeht, ist die Aufgabe ziemlich klar und die Lösung keine Raketenidee: Sie müssen nur das Gitter reparieren. Und unter Berücksichtigung der Besonderheiten von Kaggle, auch eine Reihe von Modellen an der Spitze. Um jedoch eine Goldmedaille zu erhalten, muss man nicht einfach ein paar Models trainieren. Es ist äußerst wichtig, viele verschiedene Grundmodelle zu haben, von denen jedes für sich ein hervorragendes Ergebnis zeigt. Und bereits auf diesen Modellen können Sie Stacking und andere Hacks abwickeln.
    Mitglied net 1 Ernte Tta diff,%
    alno densenet121 0.9278 0.9294 0,1736
    nizhib densenet169 0,9243 0.9277 0,3733
    romul vgg16 0.9266 0.9267 0,0186
    Ternaus densenet121 0.9232 0,9241 0,0921
    albu densenet121 0.9294 0,9312 0,1933
    kostia resnet50 0.9262 0.9271 0,0907
    n01z3 resnext50 0.9281 0,9298 0,1896

    Die Tabelle zeigt die F2-Bewertungsmodelle aller Teilnehmer für Einzelkulturen und TTA. Wie Sie sehen, ist der Unterschied für den tatsächlichen Gebrauch nicht groß, für den Wettbewerbsmodus jedoch wichtig.

    Teamwork

    Alexander Buslaev albu
    Zum Zeitpunkt der Teilnahme am Wettbewerb führte alle mL Ausrichtung des Unternehmens Geoscan. Aber seitdem schleppte er eine Reihe von Wettbewerben, Väter wurden die ganze ODS auf semantische Segmentierung und gingen nach Minsk, ruderten zu Mapbox, über die ein Artikel

    Alexey Noskov alno herauskam .
    Universal ml Fighter. Arbeitete bei Evil Martians. Nun rollte in Yandex.

    Konstantin Lopukhin kostialopuhin
    Arbeitete und arbeitet weiter bei Scrapinghub. Seitdem hat es Kostya geschafft, ein paar Medaillen mehr zu holen und ohne 5 Minuten war Kaggle-Großmeister

    Arthur Kuzin n01z3.
    Zum Zeitpunkt der Teilnahme an diesem Wettbewerb arbeitete ich in Avito. Aber um das neue Jahr herum wechselte das Start-up Dbrain auf die Position des Lead Data Scientist in der Blockchain . Hoffentlich freuen wir uns bald über unsere Wettbewerbe mit Hafenarbeitern und Lampenkennzeichnungen.

    Jewgeni Nizhibitski @ nizhib
    Lead Data Scientist bei Rambler & Co. Bei diesem Wettbewerb entdeckte Zhenya die geheime Fähigkeit, Gesichter in Bildwettbewerben zu finden. Was ihm geholfen hat, ein paar Wettbewerbe auf die Topcoder-Plattform zu ziehen. Ich erzählte von einem von ihnen .

    Ruslan Baykulov romul
    Engagiert in der Verfolgung von Sportveranstaltungen in der Firma Constanta.

    Vladimir Iglovikov ternaus Man
    könnte sich an einen actionreichen Artikel über die Unterdrückung des britischen Geheimdienstes erinnern . Er arbeitete in TrueAccord, rollte dann aber in die trendige Jugend Lyft. Wo ist Computer Vision für selbstfahrende Autos? Weiterhin die Konkurrenz schleppen und vor kurzem einen Kaggle Grandmaster erhalten.

    Unser Verbands- und Beteiligungsformat kann als typisch bezeichnet werden. Die Entscheidung zur Vereinigung war auf die Tatsache zurückzuführen, dass wir alle enge Ergebnisse in der Rangliste hatten. Und jeder von uns hat seine eigene unabhängige Pipeline gesägt, die von Anfang bis Ende eine völlig autonome Lösung darstellt. Auch nach dem Zusammenschluss beteiligten sich mehrere Teilnehmer am Stapeln.

    Das erste, was wir gemacht haben, waren allgemeine Falten. Wir haben es so gemacht, dass die Verteilung der Klassen in jeder Falte dieselbe war wie im gesamten Datensatz. Dazu wählten sie zuerst die seltenste Klasse aus, die von ihr geschichtet wurde, da die verbleibenden Bilder nach der zweitbeliebtesten Klasse geschichtet wurden, und so weiter, bis keine Bilder mehr übrig sind.

    Histogramm für Ordnerklassen:



    Wir hatten auch ein gemeinsames Repository, in dem jedes Teammitglied seinen eigenen Ordner hatte, in dem er den Code wie gewünscht anordnete.

    Und wir haben uns auch auf das Format der Prädikate geeinigt, da dies der einzige Interaktionspunkt für die Kombination unserer Modelle war.

    Lernen neuronaler Netze

    Da jeder von uns eine unabhängige Pipeline hatte, waren wir ein Gridsch eines optimalen Lernprozesses parallel zu den Menschen.

    Allgemeiner Ansatz


    Bild von github.com/tornadomeet/ResNet

    Ein typischer Lernprozess wird im Trainingsplan für neuronale Netze von Resnet auf imagenet vorgestellt. Beginnen Sie mit zufällig initialisierten Gewichten mit SGD (lr 0,1 Nesterov Momentum 0,0001 WD 0,9) und senken Sie dann nach 30 Epochen die Lernrate um das Zehnfache.

    Konzeptionell verfolgte jeder von uns den gleichen Ansatz, aber um nicht zu altern, während jedes Netzwerk trainiert wird, trat die Abnahme des LR auf, wenn der Validierungsverlust nicht 3-5 Epochen hintereinander fiel. Entweder haben einige Teilnehmer einfach die Anzahl der Epochen bei jedem LR-Schaden reduziert und sie nach einem Zeitplan gesenkt.

    Augmentationen

    Die Auswahl der richtigen Augmentationen ist beim Training von neuronalen Netzen sehr wichtig. Die Erweiterungen sollten die Variabilität der Art der Daten widerspiegeln. Herkömmlicherweise können Erweiterungen in zwei Typen unterteilt werden: solche, die einen Versatz in die Daten einführen, und solche, die dies nicht tun. Unter der Verschiebung können verschiedene Low-Level-Statistiken verstanden werden, beispielsweise Histogramme von Farben oder eine charakteristische Größe. Diesbezüglich zum Beispiel HSV-Augmentation und Skalenoffset, aber Zufallsernte - nicht.

    In den frühen Phasen des Netzwerktrainings können Sie mit Augmentationen über Bord gehen und ein sehr hartes Set verwenden. Gegen Ende des Trainings müssen Sie jedoch entweder die Augmentationen ausschalten oder nur diejenigen belassen, die keine Voreingenommenheit bewirken. Dies ermöglicht es neuronalen Netzen, sich ein wenig unter dem Zug zu verstecken und bei der Validierung ein etwas besseres Ergebnis zu erzielen.

    Ebenen einfrieren

    Bei der überwiegenden Mehrheit der Aufgaben ist es nicht sinnvoll, ein neuronales Netzwerk von Grund auf zu trainieren, es ist viel effizienter, es über vorab trainierte Netzwerke, beispielsweise von Imagenet, zu verbinden. Sie können jedoch noch weiter gehen und nicht nur den vollständig verbundenen Layer unter dem Layer mit der erforderlichen Anzahl von Klassen ändern, sondern ihn zuerst trainieren, indem Sie alle Bundles einfrieren. Wenn Sie Faltungen nicht einfrieren und das gesamte Netzwerk auf einmal mit zufällig initialisierten Gewichten der gesamten Maschenebene trainieren, werden die Gewichte der Faltungen korrigiert und die endgültige Leistung des neuronalen Netzwerks wird geringer. Diese Aufgabe machte sich vor allem durch die geringe Größe der Trainingsstichprobe bemerkbar. Bei anderen Wettbewerben mit einer großen Datenmenge wie cdiscount war es möglich, nicht das gesamte neuronale Netz, sondern Gruppen von Bündeln ab dem Ende einzufrieren. Auf diese Weise konnte das Lernen erheblich beschleunigt werden, da Steigungen für die gefrorenen Schichten nicht berücksichtigt wurden.

    Zyklisches Glühen

    Dieser Prozess sieht so aus. Nach Abschluss des grundlegenden Lernprozesses des neuronalen Netzwerks werden die besten Gewichte genommen und der Lernprozess wiederholt. Aber es geht von einer niedrigeren Lernrate aus und tritt in kurzer Zeit auf, sagen wir 3-5 Epochen. Dies ermöglicht es dem neuronalen Netzwerk, auf ein niedrigeres lokales Minimum abzusteigen und die beste Leistung zu zeigen. Diese stabile Fahrt verbessert das Ergebnis in einer Vielzahl von Wettbewerben.

    Für weitere Informationen über die beiden Schritte hier

    Prüfzeit Augmentationen

    Da es sich um einen Wettbewerb handelt und wir keine formale Beschränkung für die Inferenzzeit haben, können Sie während des Tests die Augmentation verwenden. Es sieht so aus, als ob das Bild genauso verzerrt ist wie während des Trainings. Nehmen wir an, es wird vertikal, horizontal, um einen Winkel gedreht usw. reflektiert. Jede Augmentation ergibt ein neues Bild, von dem wir Vorhersagen erhalten. Dann werden die Vorhersagen solcher Verzerrungen eines Bildes gemittelt (in der Regel durch den geometrischen Durchschnitt). Es gibt auch einen Gewinn. In anderen Wettbewerben experimentierte ich auch mit zufälliger Vergrößerung des Zuhauses. Angenommen, Sie können nicht eins nach dem anderen anwenden, sondern einfach die Amplitude für zufällige Windungen, Kontraste und Farbverstärkungen um die Hälfte reduzieren, den Samen fixieren und mehrere solcher zufällig verzerrten Bilder erstellen. Dies gab auch einen Anstieg.

    Snapshot Ensembling (Multicheckpoint TTA) Die

    Idee des Temperns kann weiterentwickelt werden. In jeder Stufe des Temperns fliegt das neuronale Netzwerk in leicht unterschiedliche lokale Minima. Und das bedeutet, dass dies im Wesentlichen leicht unterschiedliche Modelle sind, die gemittelt werden können. Während der Vorhersagen des Tests können Sie also die drei besten Kontrollpunkte verwenden und deren Vorhersagen mitteln. Ich habe auch versucht, nicht die drei besten, sondern die drei unterschiedlichsten der Top-10-Checkpoints zu nehmen - es war schlimmer. Nun, für die Produktion ist ein solcher Trick nicht anwendbar und ich habe versucht, die Gewichte der Modelle zu mitteln. Dies ergab einen sehr geringen, aber stabilen Anstieg.



    Ansätze der einzelnen Teammitglieder

    Entsprechend benutzte jedes Mitglied unseres Teams in unterschiedlichem Maße eine andere Kombination der oben genannten Techniken.
    Nick Conv Freeze,
    Epoche
    Optimierer Strategie Augs Tta
    albu 3 SGD 15 Epochen LR-Zerfall,
    Kreis 13 Epochen
    D4,
    Skala,
    Versatz,
    Verzerrung,
    Kontrast,
    Unschärfe
    D4
    alno 3 SGD Lr Zerfall D4,
    Skala,
    Versatz,
    Verzerrung,
    Kontrast,
    Unschärfe,
    Scherung,
    Kanalmultiplikator
    D4
    n01z3 2 SGD Drop LR, Patient 10 D4,
    Skala,
    Verzerrung,
    Kontrast,
    Unschärfe
    D4, 3 Kontrollpunkt
    Ternaus - Adam Zyklisches LR (1e-3: 1e-6) D4,
    Skala,
    Kanal hinzufügen,
    Kontrast
    D4,
    zufällige Ernte
    nizhib - Adam StepLR, 60 Epochen, 20 pro Zerfall D4,
    RandomSizedCrop
    D4,
    4 Ecken,
    Mitte,
    Skala
    kostia 1 Adam D4,
    Skala,
    Verzerrung,
    Kontrast,
    Unschärfe
    D4
    romul - SGD base_lr: 0,01 - 0,02
    lr = base_lr * (0,33 ** (Epoche / 30))
    Epoche: 50
    D4, Skala D4, Mittelfrucht,
    Eckfrucht

    Stapeln und Khaki

    Wir haben jedes Modell mit jedem Parametersatz in 10 Schritten geschult. Und dann wurden OOF-Prädikate (On-of-Fold) in Modellen der zweiten Ebene unterrichtet: Zusätzliche Bäume, lineare Regression, neuronales Netzwerk und einfache Mittelung der Modelle.

    Und bereits bei den OOF-Prädikaten der Modelle der zweiten Stufe wurden die Gewichte zum Mischen gewogen. Weitere Informationen zum Stapeln finden Sie hier und hier .

    Seltsamerweise findet dieser Ansatz auch in der realen Produktion statt. Zum Beispiel, wenn es multimodale Daten gibt (Bilder, Text, Kategorien usw.) und ich die Vorhersagen von Modellen kombinieren möchte. Sie können die Wahrscheinlichkeiten einfach mitteln, aber das Erlernen des Modells der zweiten Ebene liefert das beste Ergebnis.

    Baes F2-Optimierung

    Auch die endgültigen Vorhersagen tyunilas ein wenig mit Bayes-Optimierung. Angenommen, wir haben ideale Wahrscheinlichkeiten, dann wird F2 mit der besten Erwartungsmatte (d. H. Optimaler Typ) gemäß der folgenden Formel erhalten:



    Was bedeutet das? Es ist notwendig, alle Kombinationen durchzugehen (d. H. Für jedes Label 0 und 1), die Wahrscheinlichkeit jeder Kombination zu berechnen und mit F2 zu multiplizieren - wir erhalten das erwartete F2. Für welche Kombination ist es besser, und es wird die optimale F2 geben. Die Wahrscheinlichkeiten wurden einfach durch Multiplizieren der Wahrscheinlichkeiten der einzelnen Etiketten (wenn das Etikett 0 hat, nehmen wir 1 - p) und nicht über 2 in 17 Optionen gehen, nur Etiketten mit einer Wahrscheinlichkeit von 0,05 bis 0,5 wackelten - das waren 3-7 pro Zeile, so ein wenig (einreichen war in ein paar Minuten erledigt). Theoretisch wäre es cool, die Wahrscheinlichkeit einer Kombination von Bezeichnungen nicht nur durch Multiplikation einzelner Wahrscheinlichkeiten zu ermitteln (da Bezeichnungen nicht unabhängig sind), dies ist jedoch nicht der Fall.

    was hat es gegeben Als die Modelle gut wurden, hörte die Auswahl der Schwellenwerte nach dem Aufhören des Ensembles auf zu funktionieren, und dieses Stück lieferte einen kleinen, aber stabilen Gewinn sowohl bei der Validierung als auch bei den öffentlichen / privaten.

    Nachwort

    Als Ergebnis haben wir 48 verschiedene Modelle trainiert, jedes auf 10 Falten, d.h. 480 Modelle der ersten Stufe. Eine solche menschliche Gürtelserie ermöglichte es mir, verschiedene Techniken auszuprobieren, wenn ich tiefe neuronale Faltungsnetze lerne, die ich immer noch in der Arbeit und bei Wettbewerben verwende.

    Konnte man weniger Modelle trainieren und das gleiche oder ein besseres Ergebnis erzielen? Ja, vollständig. Unsere Landsleute vom 3. Platz Stanislav stasg7 Semenov und Roman ZFTurbo Solovyov haben eine kleinere Anzahl von First-Level-Modellen verwaltet und 250+ Second-Level-Modelle kompensiert. Pro Lösung kannsieh dir die analyse an und lies den post.

    Der erste Platz ging an die mysteriöse Bestausstattung. Im Allgemeinen ist dieser Typ sehr cool, und jetzt ist er der Top1 der Kaggle-Wertung geworden, nachdem er viele Bildwettbewerbe gezogen hat. Er blieb lange Zeit anonym, bis Nvidia ihm durch ein Interview die Decke abriss . In dem er zugab, dass 200 Untergebene ihm Bericht erstatten würden ... Es gibt auch einen Beitrag über die Entscheidung .

    Eine weitere interessante Tatsache : Jeremy Howard , in engen Kreisen weithin bekannt , fastais Vater wurde 22 m lang. Und wenn sie dachten, er hätte gerade ein paar Einsender geschickt, ahnten sie es nicht. Er nahm am Team teil und schickte 111 Pakete.

    Außerdem landeten Doktoranden in Stanford, die zu diesem Zeitpunkt den legendären CS231n-Kurs bestanden und diese Aufgabe als Kursprojekt verwenden durften, mit dem gesamten Team in der Rangliste.

    Als Bonus sprach ich bei Mail.ru mit dem Material dieses Beitrags und hier ist eine weitere Präsentation von Vladimir Iglovikov von der Mitap im Tal.