”Älä ole liian kova itsesi suhteen” toteutti Deep Learning

Tämä on tarina oivallukselle, joka Deep Learning -yhteisöllä oli aiemmin tänä vuonna - "olla rankaisematta mallejaan liikaa virheellisyydestä". Tämä oivallukset saatiin aikaan, kun tutkijat paukuttivat päätään seinää vasten yrittäen kaikenlaisia ​​hakkereita moniobjektintunnistukseen. Mutta sitten tuli pelinvaihtaja Facebook AI Research (FAIR) - Focal loss of Dense Object Detection -yritykselle -, joka toi tämän käsityksen, että ehkä olemme liian kovia, ja jälleen kerran yksi oivallu (muuttui matemaattiseksi yhtälöksi) poisti kaikki sotkua.

Aloitetaan ensin taustalla. Jotta voimme kouluttaa mitä tahansa hermoverkkoa, tarvitsemme 3 asiaa:

  1. data
  2. Neuraaliverkkoarkkitehtuuri
  3. Tappio-toiminto

Häviötoiminnon tehtävänä on tuottaa pieni luku, kun hermostoverkon lähtö on lähellä todellista arvoa ja päinvastoin. Näin rangaistaan ​​hermoverkkoa väärin.

Jos tarkastellaan moniobjektiotunnistuksen historiaa, syntyi kaksi malliluokkaa (melkein samanaikaisesti vuoden 2015 lopulla) moniobjektin tunnistamiseksi päästä päähän (Yksi vaihe): YOLO (Sinä vain katsot kerran) ja SSD (Single Shot Multibox Detector), jotka olivat kahden mahdollisen arkkitehtuurin edustajia, joita meillä olisi voinut olla, kiinnittämällä mukautettu pää etukäteen koulutettuun konvoluutioverkkoon - kuten ResNet.

YOLO edusti malliluokkaa, jossa spittelimme yhden pitkän vektorin täysin kytketystä lineaarisesta kerroksesta, kun taas konvoluutioaktivointien lähestymistapa räätälöityssä päässä aloitti SSD-mallimallisto.

Sen jälkeen kun YOLO ja SSD julkaistiin, asiat ovat melko paljon siirtyneet kohti SSD: tä - siihen pisteeseen, että YOLOv3 (YOLO: n versio 3) tekee nyt sitä SSD-tavalla, koska SSD käyttää hyväkseen konvoluutioaktivaatioiden vastaanottavaa kenttää.

Aktivoinnin vastaanottava kenttä ei ole muuta kuin se osa tulosta, joka oli mukana kyseisen aktivoinnin laskemisessa. Huomaa, että vastaanottava kenttä ei sano vain, että "tämän suorakaiteen sisällä olevat tulot ovat vastuussa aktivoinnista", mutta myös sanovat, että "kaikista tämän suorakulmion sisällä olevista tuloista, ympärillä olevat keskellä olevat ovat vastuussa tästä aktivoinnista kuin muut" .

Lähde: http://cs231n.github.io/convolutional-networks/

Vastaanottava kenttä antaa meille sanoa jotain tällaista:

Konvoluutiokerroksen ulostulon aktivointi ylhäällä ja vasemmalle on vastuussa kuvan vasemmassa yläreunassa olevista kohteista, alhaalta-oikealla äärimmäisenä konvoluutiokerroksen ulostulon aktivointi on vastuussa objekteista kuvan oikeassa alareunassa ja niin edelleen .

Joten nyt häviöfunktiomme voi tarkastella kutakin ulostulon konvoluutioaktivaatiota ja päättää, pystyykö tämä aktivointi heijastamaan vastaanottokentässä olevien objektien raja-laatikon koordinaatteja ja luokkia oikein. Se osoittautuu vaikeaksi tosiasiallisesti :(. Tähän sisältyy ”sovitusongelma”, joka ratkaistaan ​​pitämällä kiinni ankkurointiruuduista (tai oletuslaatikoista) ja etsimällä niiden päällekkäisyydet (Jaccard-indeksi tai Unionin leikkaus) kunkin maan kanssa Sitten, kuten SSD-asiakirjassa kuvataan, jokaiselle ankkurilaatikolle osoitetaan maatotuuskohteiden hakemisto tai tausta.

Huomaa: Jos viimeisellä kappaleella ei ollut paljon järkeä, lue joko SSD: stä tai odota seuraavaa blogini, jotta ymmärrämme kuinka aktivoimme tulkinnan ja manipuloimme niitä!

Kun olemme menneet vastaavuusvaiheen ohi, olemme periaatteessa valmiita. Voimme ottaa vastaavia ankkurilaatikoita vastaavat aktivoinnit ja ottaa L1-tappion raja-alueen laatikoiden koordinaateille sekä Cross Entropy -häviön luokittelulle, jotta meillä olisi häviötoiminto.

Mutta se ei silti anna meille hyviä tuloksia. Malli ei tee hyvää työtä kuvan pienillä esineillä. Ja käsitys miksi tämä ei toiminut, tuli Focal Loss for Dense Object Detection -paperista.

Meillä on erikokoisia ankkurilaatikoita. Pienemmät ankkurikotelot ovat todennäköisesti vastuussa pienten esineiden löytämisestä kuvasta. Mutta koska suurin osa harjoittelumme aikana järjestetyistä pienemmistä ankkurilaatikoista sisältää taustan, he eivät koskaan tule luottavaisiksi ennustamaan muita luokkia. Ja miksi heistä ei tule itseluottamuksia - koska rangaistamme heitä liian ankarasti erehdyksestä. Ja siinä se oli! Focal loss -kirja muutti tämän kuvan matemaattiseksi kaavaksi kuten alla on esitetty ja muutti pelin kokonaan!

Lähde: Focal loss paper

Yllä olevan kuvaajan sininen viiva on ristin entropiahäviö. Y-akseli näyttää ristin entropian menetyksen, joka mallin on kärsittävä, jos se ennustaa maan totuusluokan todennäköisyydellä x (x-akselilla). Joten asia on, että vaikka malli ennustaa oikean asteen todennäköisyydellä 0,6, rangaistamme siitä silti paljon. Joten vaikka malli haluaa ennustaa oikean luokan, sitä ei tarvitse maksaa, ja koska se on taustalla useimmiten, malli lopulta sanoo taustan, ellei se ole helvetin varma jostakin muusta luokasta. Joten temppu on muuttaa tappiofunktiota saadaksesi se näyttämään kuvaajasta vihreän tai purppuraisen viivan. Polttopistehäviöpaperi kerristi Cross Entropy -häviön kertoimella, jotta se olisi vähemmän ankara mallille, ja se tuotti upeita tuloksia, kuten voit tarkistaa täältä.