7.1 Nuo pilnai sujungtų sluoksnių prie konvoliucijų

Iki šiol aptarti modeliai tebėra tinkami pasirinkimai, kai dirbame su lentelės duomenimis. Lentelės duomenimis laikome tokius, kuriuos sudaro eilutės, atitinkančios pavyzdžius, ir stulpeliai, atitinkantys požymius. Su lentelės duomenimis galime tikėtis, kad ieškomi dėsningumai gali apimti požymių sąveikas, bet a priori nedarome jokių prielaidų apie struktūrą, kaip požymiai sąveikauja.

Kartais mums tikrai trūksta žinių, kurios padėtų sukurti įmantresnes architektūras. Tokiais atvejais MLP gali būti geriausia, ką galime padaryti. Tačiau didelės dimensijos suvokimo duomenims tokie bestruktūriai tinklai gali tapti nepatogūs.

Pavyzdžiui, grįžkime prie savo nuolatinio pavyzdžio – kačių ir šunų atskyrimo. Tarkime, kad kruopščiai surenkame duomenis, sukaupdami anotuotą vieno megapikselio nuotraukų rinkinį. Tai reiškia, kad kiekviena tinklo įvestis turi milijoną dimensijų. Net agresyviai sumažinus iki tūkstančio paslėptųjų dimensijų, prireiktų pilnai sujungto sluoksnio, turinčio 106×103=10910^6 \times 10^3 = 10^9 parametrų. Nebent turime daug GPU, gebėjimų paskirstytam optimizavimui ir nepaprastai daug kantrybės, šio tinklo parametrų išmokimas gali pasirodyti neįmanomas.

Atidus skaitytojas gali prieštarauti šiam argumentui remdamasis tuo, kad vieno megapikselio skyros gali ir nereikėti. Tačiau nors galbūt galėtume išsiversti su šimtu tūkstančių pikselių, mūsų 1000 dydžio paslėptasis sluoksnis smarkiai nuvertina paslėptųjų vienetų skaičių, reikalingą geriems vaizdų atvaizdams išmokti, todėl praktinei sistemai vis tiek reikės milijardų parametrų. Be to, klasifikatoriaus mokymasis pritaikant tiek daug parametrų gali reikalauti surinkti milžinišką duomenų rinkinį. Ir vis dėlto šiandien ir žmonės, ir kompiuteriai geba gana gerai atskirti kates nuo šunų, tarsi prieštaraudami šioms intuicijoms. Taip yra todėl, kad vaizdai pasižymi turtinga struktūra, kurią gali išnaudoti ir žmonės, ir mašininio mokymosi modeliai. Konvoliuciniai neuroniniai tinklai (CNN) yra vienas kūrybiškas būdas, kurį mašininis mokymasis pasitelkė siekdamas išnaudoti tam tikrą žinomą natūralių vaizdų struktūrą.

7.1.1 Invariantiškumas

Įsivaizduokite, kad norime aptikti objektą vaizde. Atrodo pagrįsta, kad bet kuris metodas, kurį naudojame objektams atpažinti, neturėtų pernelyg rūpintis tiksliu objekto vieta vaizde. Idealiu atveju mūsų sistema turėtų išnaudoti šią žinią. Kiaulės paprastai neskraido, o lėktuvai paprastai neplaukioja. Vis dėlto vis tiek turėtume atpažinti kiaulę, jei ji pasirodytų vaizdo viršuje. Čia galime pasisemti įkvėpimo iš vaikų žaidimo „Kur Valdas?“ (kuris pats įkvėpė daug realių pamėgdžiojimų, tokių kaip pavaizduotas 7.1.1 pav.). Žaidimą sudaro daugybė chaotiškų scenų, trykštančių veikla. Valdas kiekvienoje pasirodo kur nors, paprastai slapstydamasis neįtikėtinoje vietoje. Skaitytojo tikslas yra jį surasti. Nepaisant jo būdingo apdaro, tai gali būti stebėtinai sunku dėl daugybės blaškančių detalių. Tačiau tai, kaip Valdas atrodo, nepriklauso nuo to, kur Valdas yra. Galėtume perbraukti vaizdą Valdo detektoriumi, kuris galėtų priskirti įvertį kiekvienam fragmentui, nurodantį tikimybę, kad fragmente yra Valdas. Iš tiesų daugelis objektų aptikimo ir segmentavimo algoritmų yra pagrįsti šiuo metodu (Long ir kt., 2015). CNN sistemina šią erdvinio invariantiškumo idėją, išnaudodami ją naudingiems atvaizdams išmokti su mažiau parametrų.

Ar galite rasti Valdą (vaizdas William Murphy (Infomatique) maloniu leidimu)?

7.1.1 pav. Ar galite rasti Valdą (vaizdas William Murphy (Infomatique) maloniu leidimu)?

Dabar galime šias intuicijas padaryti konkretesnes, išvardydami kelis pageidavimus, kurie turėtų vadovauti mūsų neuroninio tinklo architektūros, tinkamos kompiuteriniam matymui, projektavimui:

  1. Ankstyviausiuose sluoksniuose mūsų tinklas turėtų panašiai reaguoti į tą patį fragmentą, nepaisant to, kur jis pasirodo vaizde. Šis principas vadinamas postūmio invariantiškumu (arba postūmio ekvivariantiškumu).
  2. Ankstyviausi tinklo sluoksniai turėtų susitelkti į lokalias sritis, nepaisydami vaizdo turinio tolimose srityse. Tai yra lokalumo principas. Galiausiai šiuos lokalius atvaizdus galima agreguoti, kad būtų daromos prognozės viso vaizdo lygmeniu.
  3. Judant gilyn, gilesni sluoksniai turėtų gebėti užfiksuoti tolimesnio nuotolio vaizdo požymius, panašiai kaip aukštesnio lygio regėjimas gamtoje.

Pažiūrėkime, kaip tai virsta matematika.

7.1.2 MLP apribojimas

Pradžioje galime panagrinėti MLP, kurio įvestys yra dvimačiai vaizdai X\mathbf{X}, o jų tiesioginiai paslėptieji atvaizdai H\mathbf{H} panašiai vaizduojami matricomis (kode tai dvimačiai tenzoriai), kur X\mathbf{X} ir H\mathbf{H} turi tą pačią formą. Įsisąmoninkite tai. Dabar įsivaizduojame, kad ne tik įvestys, bet ir paslėptieji atvaizdai turi erdvinę struktūrą.

Tegul [X]i,j[\mathbf{X}]_{i, j} ir [H]i,j[\mathbf{H}]_{i, j} žymi pikselį vietoje (i,j)(i,j) atitinkamai įvesties vaizde ir paslėptajame atvaizde. Todėl, kad kiekvienas paslėptasis vienetas gautų įvestį iš kiekvieno įvesties pikselio, pereitume nuo svorių matricų naudojimo (kaip anksčiau MLP) prie savo parametrų vaizdavimo ketvirtos eilės svorių tenzoriais W\mathsf{W}. Tarkime, kad U\mathbf{U} turi poslinkius, pilnai sujungtą sluoksnį galėtume formaliai išreikšti kaip

[H]i,j=[U]i,j+∑k∑l[W]i,j,k,l[X]k,l=[U]i,j+∑a∑b[V]i,j,a,b[X]i+a,j+b.\begin{aligned} \left[\mathbf{H}\right]_{i, j} &= [\mathbf{U}]_{i, j} + \sum_k \sum_l[\mathsf{W}]_{i, j, k, l} [\mathbf{X}]_{k, l}\\ &= [\mathbf{U}]_{i, j} + \sum_a \sum_b [\mathsf{V}]_{i, j, a, b} [\mathbf{X}]_{i+a, j+b}.\end{aligned}

Perėjimas nuo W\mathsf{W} prie V\mathsf{V} kol kas yra grynai kosmetinis, nes tarp abiejų ketvirtos eilės tenzorių koeficientų yra abipusiškai vienareikšmė atitiktis. Mes tiesiog iš naujo indeksuojame apatinius indeksus (k,l)(k, l) taip, kad k=i+ak = i+a ir l=j+bl = j+b. Kitaip tariant, nustatome [V]i,j,a,b=[W]i,j,i+a,j+b[\mathsf{V}]_{i, j, a, b} = [\mathsf{W}]_{i, j, i+a, j+b}. Indeksai aa ir bb eina per teigiamus ir neigiamus poslinkius, apimdami visą vaizdą. Bet kuriai duotai vietai (ii, jj) paslėptajame atvaizde [H]i,j[\mathbf{H}]_{i, j} jos reikšmę apskaičiuojame sumuodami xx pikselius, centruotus apie (i,j)(i, j) ir pasvertus [V]i,j,a,b[\mathsf{V}]_{i, j, a, b}. Prieš tęsdami, apsvarstykime bendrą parametrų skaičių, reikalingą vienam sluoksniui šioje parametrizacijoje: 1000×10001000 \times 1000 vaizdas (1 megapikselis) atvaizduojamas į 1000×10001000 \times 1000 paslėptąjį atvaizdą. Tam reikia 101210^{12} parametrų – gerokai daugiau, nei šiuo metu gali apdoroti kompiuteriai.

7.1.2.1 Postūmio invariantiškumas

Dabar pasitelkime pirmąjį aukščiau nustatytą principą: postūmio invariantiškumą (Zhang ir kt., 1988). Tai reiškia, kad įvesties X\mathbf{X} postūmis turėtų tiesiog sukelti paslėptojo atvaizdo H\mathbf{H} postūmį. Tai įmanoma tik tuo atveju, jei V\mathsf{V} ir U\mathbf{U} iš tikrųjų nepriklauso nuo (i,j)(i, j). Taigi turime [V]i,j,a,b=[V]a,b[\mathsf{V}]_{i, j, a, b} = [\mathbf{V}]_{a, b}, o U\mathbf{U} yra konstanta, tarkime, uu. Todėl galime supaprastinti H\mathbf{H} apibrėžimą:

[H]i,j=u+∑a∑b[V]a,b[X]i+a,j+b.[\mathbf{H}]_{i, j} = u + \sum_a\sum_b [\mathbf{V}]_{a, b} [\mathbf{X}]_{i+a, j+b}.

Tai yra konvoliucija! Mes faktiškai sveriame pikselius (i+a,j+b)(i+a, j+b) vietos (i,j)(i, j) apylinkėse koeficientais [V]a,b[\mathbf{V}]_{a, b}, kad gautume reikšmę [H]i,j[\mathbf{H}]_{i, j}. Atkreipkite dėmesį, kad [V]a,b[\mathbf{V}]_{a, b} reikia gerokai mažiau koeficientų nei [V]i,j,a,b[\mathsf{V}]_{i, j, a, b}, nes jis nebepriklauso nuo vietos vaizde. Todėl reikalingų parametrų skaičius nebe 101210^{12}, o daug protingesnis 4×1064 \times 10^6: vis dar turime priklausomybę nuo a,b∈(−1000,1000)a, b \in (-1000, 1000). Trumpai tariant, padarėme didelę pažangą. Laiko vėlinimo neuroniniai tinklai (TDNN) yra vieni pirmųjų pavyzdžių, išnaudojusių šią idėją (Waibel ir kt., 1989).

7.1.2.2 Lokalumas

Dabar pasitelkime antrąjį principą: lokalumą. Kaip motyvuota aukščiau, manome, kad neturėtume žiūrėti labai toli nuo vietos (i,j)(i, j), kad surinktume tinkamą informaciją įvertinti, kas vyksta ties [H]i,j[\mathbf{H}]_{i, j}. Tai reiškia, kad už tam tikro intervalo ∣a∣>Δ|a|> \Delta arba ∣b∣>Δ|b| > \Delta turėtume nustatyti [V]a,b=0[\mathbf{V}]_{a, b} = 0. Lygiavertiškai galime perrašyti [H]i,j[\mathbf{H}]_{i, j} kaip

[H]i,j=u+∑a=−ΔΔ∑b=−ΔΔ[V]a,b[X]i+a,j+b.(7.1.1)[\mathbf{H}]_{i, j} = u + \sum_{a = -\Delta}^{\Delta} \sum_{b = -\Delta}^{\Delta} [\mathbf{V}]_{a, b} [\mathbf{X}]_{i+a, j+b}. \tag{7.1.1}

Tai sumažina parametrų skaičių nuo 4×1064 \times 10^6 iki 4Δ24 \Delta^2, kur Δ\Delta paprastai yra mažesnis nei 1010. Taigi parametrų skaičių sumažinome dar keturiomis eilėmis. Atkreipkite dėmesį, kad (7.1.1) yra tai, kas trumpai vadinama konvoliuciniu sluoksniu. Konvoliuciniai neuroniniai tinklai (CNN) yra ypatinga neuroninių tinklų šeima, kurioje yra konvoliucinių sluoksnių. Giliojo mokymosi tyrėjų bendruomenėje V\mathbf{V} vadinamas konvoliucijos branduoliu, filtru arba tiesiog sluoksnio svoriais, kurie yra išmokstami parametrai.

Nors anksčiau galėjo prireikti milijardų parametrų vienam vaizdų apdorojimo tinklo sluoksniui atvaizduoti, dabar paprastai užtenka tik kelių šimtų, nekeičiant nei įvesčių, nei paslėptųjų atvaizdų dimensijų. Kaina, sumokėta už šį drastišką parametrų sumažinimą, yra ta, kad mūsų požymiai dabar yra postūmio invariantiški ir kad mūsų sluoksnis gali įtraukti tik lokalią informaciją, nustatydamas kiekvienos paslėptosios aktyvacijos reikšmę. Visas mokymasis priklauso nuo indukcinio polinkio primetimo. Kai šis polinkis dera su tikrove, gauname imčių atžvilgiu efektyvius modelius, kurie gerai apibendrina nematytiems duomenims. Bet, žinoma, jei šie polinkiai nedera su tikrove, pvz., jei paaiškėtų, kad vaizdai nėra postūmio invariantiški, mūsų modeliams gali būti sunku net pritaikyti savo apmokymo duomenis.

Šis dramatiškas parametrų sumažėjimas atveda mus prie paskutinio mūsų pageidavimo, būtent kad gilesni sluoksniai turėtų atvaizduoti didesnius ir sudėtingesnius vaizdo aspektus. Tai galima pasiekti pakartotinai sluoksniuojant netiesiškumus ir konvoliucinius sluoksnius.

7.1.3 Konvoliucijos

Trumpai prisiminkime, kodėl (7.1.1) vadinama konvoliucija. Matematikoje dviejų funkcijų konvoliucija (W.~Rudin, ), tarkime, f,g:Rd→Rf, g: \mathbb{R}^d \to \mathbb{R}, apibrėžiama kaip

(f∗g)(x)=∫f(z)g(x−z)dz.(f * g)(\mathbf{x}) = \int f(\mathbf{z}) g(\mathbf{x}-\mathbf{z}) d\mathbf{z}.

Tai yra, matuojame sutapimą tarp ff ir gg, kai viena funkcija yra „apversta“ ir pastumta per x\mathbf{x}. Kai turime diskrečius objektus, integralas virsta suma. Pavyzdžiui, vektoriams iš kvadratu sumuojamų begalinės dimensijos vektorių aibės, kurių indeksas eina per Z\mathbb{Z}, gauname šį apibrėžimą:

(f∗g)(i)=∑af(a)g(i−a).(f * g)(i) = \sum_a f(a) g(i-a).

Dvimačiams tenzoriams turime atitinkamą sumą su indeksais (a,b)(a, b) funkcijai ff ir (i−a,j−b)(i-a, j-b) funkcijai gg:

(f∗g)(i,j)=∑a∑bf(a,b)g(i−a,j−b).(7.1.2)(f * g)(i, j) = \sum_a\sum_b f(a, b) g(i-a, j-b). \tag{7.1.2}

Tai panašu į (7.1.1), su vienu dideliu skirtumu. Užuot naudoję (i+a,j+b)(i+a, j+b), naudojame skirtumą. Tačiau atkreipkite dėmesį, kad šis skirtumas daugiausia yra kosmetinis, nes visada galime suderinti žymėjimą tarp (7.1.1) ir (7.1.2). Mūsų pradinis apibrėžimas (7.1.1) tiksliau apibūdina kryžminę koreliaciją. Prie to grįšime kitame skyrelyje.

7.1.4 Kanalai

Grįžtant prie mūsų Valdo detektoriaus, pažiūrėkime, kaip tai atrodo. Konvoliucinis sluoksnis parenka nurodyto dydžio langus ir sveria intensyvumus pagal filtrą V\mathsf{V}, kaip parodyta 7.1.2 pav.. Galėtume siekti išmokti modelį taip, kad visur, kur „valdiškumas“ didžiausias, paslėptojo sluoksnio atvaizduose rastume smailę.

Valdo aptikimas (vaizdas William Murphy (Infomatique) maloniu leidimu).

7.1.2 pav. Valdo aptikimas (vaizdas William Murphy (Infomatique) maloniu leidimu).

Su šiuo metodu yra tik viena problema. Iki šiol palaimingai ignoravome tai, kad vaizdai susideda iš trijų kanalų: raudonos, žalios ir mėlynos. Apibendrinant, vaizdai nėra dvimačiai objektai, o trečios eilės tenzoriai, apibūdinami aukščiu, pločiu ir kanalu, pvz., formos 1024×1024×31024 \times 1024 \times 3 pikseliai. Nors pirmos dvi iš šių ašių susijusios su erdviniais ryšiais, trečiąją galima laikyti daugiamačio atvaizdo priskyrimu kiekvienai pikselio vietai. Todėl indeksuojame X\mathsf{X} kaip [X]i,j,k[\mathsf{X}]_{i, j, k}. Konvoliucinis filtras turi atitinkamai prisitaikyti. Užuot turėję [V]a,b[\mathbf{V}]_{a,b}, dabar turime [V]a,b,c[\mathsf{V}]_{a,b,c}.

Be to, kaip ir mūsų įvestis susideda iš trečios eilės tenzoriaus, pasirodo, kad gera idėja panašiai formuluoti ir savo paslėptuosius atvaizdus kaip trečios eilės tenzorius H\mathsf{H}. Kitaip tariant, užuot turėję tik vieną paslėptąjį atvaizdą, atitinkantį kiekvieną erdvinę vietą, norime turėti visą paslėptųjų atvaizdų vektorių, atitinkantį kiekvieną erdvinę vietą. Paslėptuosius atvaizdus galime įsivaizduoti kaip sudarytus iš kelių dvimačių tinklelių, sukrautų vienas ant kito. Kaip ir įvestyse, jie kartais vadinami kanalais. Jie taip pat kartais vadinami požymių žemėlapiais, nes kiekvienas suteikia erdvinį išmoktų požymių rinkinį kitam sluoksniui. Intuityviai galite įsivaizduoti, kad žemesniuose sluoksniuose, esančiuose arčiau įvesčių, kai kurie kanalai gali specializuotis atpažinti kraštus, o kiti – tekstūras.

Kad palaikytume kelis kanalus ir įvestyse (X\mathsf{X}), ir paslėptuosiuose atvaizduose (H\mathsf{H}), galime pridėti ketvirtąją koordinatę prie V\mathsf{V}: [V]a,b,c,d[\mathsf{V}]_{a, b, c, d}. Sudėję viską kartu, gauname:

[H]i,j,d=∑a=−ΔΔ∑b=−ΔΔ∑c[V]a,b,c,d[X]i+a,j+b,c,(7.1.3)[\mathsf{H}]_{i,j,d} = \sum_{a = -\Delta}^{\Delta} \sum_{b = -\Delta}^{\Delta} \sum_c [\mathsf{V}]_{a, b, c, d} [\mathsf{X}]_{i+a, j+b, c}, \tag{7.1.3}

kur dd indeksuoja išvesties kanalus paslėptuosiuose atvaizduose H\mathsf{H}. Kitas konvoliucinis sluoksnis toliau priims trečios eilės tenzorių H\mathsf{H} kaip įvestį. Dėl bendrumo imame (7.1.3) kaip konvoliucinio sluoksnio daugeliui kanalų apibrėžimą, kur V\mathsf{V} yra sluoksnio branduolys arba filtras.

Dar yra daug operacijų, kurias reikia aptarti. Pavyzdžiui, turime išsiaiškinti, kaip sujungti visus paslėptuosius atvaizdus į vieną išvestį, pvz., ar vaizde kur nors yra Valdas. Taip pat turime nuspręsti, kaip efektyviai skaičiuoti, kaip derinti kelis sluoksnius, tinkamas aktyvacijos funkcijas ir kaip priimti pagrįstus projektavimo sprendimus, kad gautume praktikoje veiksmingus tinklus. Šiais klausimais užsiimsime likusioje skyriaus dalyje.

7.1.5 Santrauka ir diskusija

Šiame skyrelyje išvedėme konvoliucinių neuroninių tinklų struktūrą iš pirminių principų. Nors neaišku, ar būtent šiuo keliu buvo išrasti CNN, malonu žinoti, kad jie yra teisingas pasirinkimas, taikant pagrįstus principus, kaip turėtų veikti vaizdų apdorojimo ir kompiuterinio matymo algoritmai, bent jau žemesniuose lygmenyse. Visų pirma, postūmio invariantiškumas vaizduose reiškia, kad visi vaizdo fragmentai bus traktuojami vienodai. Lokalumas reiškia, kad atitinkamiems paslėptiesiems atvaizdams apskaičiuoti bus naudojama tik nedidelė pikselių kaimynystė. Vieni ankstyviausių nuorodų į CNN yra Neokognitrono pavidalu (Fukushima, 1982).

Antrasis principas, su kuriuo susidūrėme savo samprotavimuose, yra, kaip sumažinti funkcijų klasės parametrų skaičių neribojant jos raiškos galios, bent jau tada, kai galioja tam tikros modelio prielaidos. Pamatėme dramatišką sudėtingumo sumažėjimą dėl šio apribojimo, paverčiantį skaičiavimo ir statistikos požiūriu neįgyvendinamas problemas įveikiamais modeliais.

Kanalų pridėjimas leido sugrąžinti dalį sudėtingumo, prarasto dėl apribojimų, primestų konvoliucijos branduoliui lokalumo ir postūmio invariantiškumo. Atkreipkite dėmesį, kad visai natūralu pridėti kitų kanalų nei tik raudonas, žalias ir mėlynas. Daugelis palydovinių vaizdų, ypač žemės ūkiui ir meteorologijai, turi dešimtis ar šimtus kanalų, sudarydami hiperspektrinius vaizdus. Jie pateikia duomenis daugelyje skirtingų bangų ilgių. Toliau pamatysime, kaip efektyviai naudoti konvoliucijas, kad manipuliuotume vaizdų, su kuriais jos veikia, dimensijomis, kaip pereiti nuo vietos pagrįstų atvaizdų prie kanalų pagrįstų atvaizdų ir kaip efektyviai tvarkytis su dideliu kategorijų skaičiumi.

7.1.6 Pratimai

  1. Tarkime, kad konvoliucijos branduolio dydis yra Δ=0\Delta = 0. Parodykite, kad šiuo atveju konvoliucijos branduolys įgyvendina MLP nepriklausomai kiekvienai kanalų aibei. Tai veda prie „tinklas tinkle“ (angl. Network in Network) architektūrų (Lin ir kt., 2013).
  2. Garso duomenys dažnai vaizduojami kaip vienmatė seka.
    1. Kada galėtumėte norėti primesti lokalumą ir postūmio invariantiškumą garsui?
    2. Išveskite konvoliucijos operacijas garsui.
    3. Ar galite apdoroti garsą naudodami tuos pačius įrankius kaip kompiuteriniame matyme? Užuomina: naudokite spektrogramą.
  3. Kodėl postūmio invariantiškumas galiausiai gali nebūti gera idėja? Pateikite pavyzdį.
  4. Ar manote, kad konvoliuciniai sluoksniai taip pat gali būti taikomi tekstiniams duomenims? Su kokiomis problemomis galite susidurti kalbos atveju?
  5. Kas nutinka su konvoliucijomis, kai objektas yra vaizdo pakraštyje?
  6. Įrodykite, kad konvoliucija yra simetriška, t. y. f∗g=g∗ff * g = g * f.

Diskusijos