EfficientNet ir jo scaling metodai: kaip protingai plėsti neuroninius tinklus
Sužinokite, kaip EfficientNet compound scaling metodai subalansuoja modelio gylį, plotį ir rezoliuciją, kad pasiektų maksimalų tikslumo ir efektyvumo santykį.

Neuroninių tinklų architektūros per pastarąjį dešimtmetį augo beveik eksponentiškai: vis daugiau sluoksnių, filtrų ir parametrų. Tačiau toks augimas ne visada reiškia proporcingą tikslumo padidėjimą – dažnai tai tiesiog didina skaičiavimo kaštus ir sudėtingumą. EfficientNet pasiūlė kitokį požiūrį: vietoje aklo tinklo didinimo viena kryptimi, jis remiasi balansuotu, sistemingu plėtimu trimis dimensijomis – gyliu, pločiu ir paveikslėlio rezoliucija.
Šiame straipsnyje išsamiai apžvelgsime, kas yra EfficientNet, kokie yra jo compound scaling (bendrojo mastelio keitimo) principai ir kodėl šis metodas iki šiol išlieka vienu efektyviausių būdų didinti neuroninių tinklų našumą, išlaikant gerą balansą tarp tikslumo ir skaičiavimo sąnaudų.
Kas yra EfficientNet?
EfficientNet – tai konvoliucinių neuroninių tinklų (CNN) šeima, pasiūlyta Google Brain tyrėjų. Pagrindinė idėja – pradėti nuo optimizuotos bazinės architektūros ir ją protingai plėsti, užuot rankiniu būdu didinus sluoksnių skaičių ar filtrų kiekį.
Tradiciniuose modeliuose, pavyzdžiui, ResNet ar Inception, dažnai būdavo eksperimentuojama gana intuityviai: daugiau sluoksnių, daugiau kanalų, didesni vaizdai. EfficientNet vietoje to pristato matematiškai pagrįstą scaling metodiką, kuri leidžia sistemiškai didinti modelį taip, kad visi trys parametrai – gylis, plotis ir rezoliucija – didėtų suderintu būdu.
EfficientNet šeima
EfficientNet nėra vienas modelis, o visa šeima: nuo EfficientNet-B0 iki EfficientNet-B7. Bazinis modelis B0 yra nedidelis ir greitas, o kiekvienas sekantis (B1, B2, …, B7) yra vis didesnis ir tikslesnis, tačiau taip pat ir brangesnis skaičiavimo prasme.
- EfficientNet-B0 – bazinis, kompaktiškas modelis;
- EfficientNet-B1 – B3 – vidutinio dydžio modeliai, tinkami daugeliui praktinių užduočių;
- EfficientNet-B4 – B7 – labai tikslūs, tačiau reikalaujantys daugiau išteklių modeliai.
Visus šiuos modelius sieja bendras scaling principas, kuriuo jie tarpusavyje skiriasi – tai ir yra pagrindinis EfficientNet inovacijos elementas.
Scaling problema tradiciniuose CNN
Prieš aptariant EfficientNet scaling metodiką, verta suprasti, kodėl tradicinis modelių didinimas dažnai būna neefektyvus. Yra trys pagrindiniai būdai, kaip galima „išpūsti“ neuroninį tinklą:
- Didinti gylį – pridėti daugiau sluoksnių (stackinti blokų sekas);
- Didinti plotį – didinti kanalų (filtrų) skaičių kiekviename sluoksnyje;
- Didinti įvesties rezoliuciją – naudoti didesnio pikselių skaičiaus paveikslėlius.
Nors kiekvienas iš šių būdų gali pagerinti tikslumą, plėtimas tik viena kryptimi dažnai duoda prastą balansą tarp našumo ir resursų:
- Per didelis gylio didinimas gali sukelti gradientų nykimo problemas ir pertreniruotę;
- Per didelis pločio didinimas smarkiai kelia parametrų ir atminties sąnaudas;
- Per didelė rezoliucija ženkliai didina FLOPs (skaičiavimų kiekį), o nauda ne visada proporcinga.
EfficientNet komanda pastebėjo, kad optimalus sprendimas – derinti šiuos tris parametrus kartu, o ne manipuliuoti jais atskirai. Tam ir buvo sukurtas compound scaling metodas.
Compound scaling: teorinis pagrindas
Compound scaling – tai pagrindinis EfficientNet metodas, leidžiantis vienu metu ir proporcingai didinti modelio gylį, plotį ir įvesties rezoliuciją. Idėja paprasta: vietoje to, kad pasirinktume vieną dimensiją (pavyzdžiui, tik didinti sluoksnių skaičių), EfficientNet pasiūlo bendro mastelio koeficientą, kuris kontroliuoja visas dimensijas kartu.
Pagrindinė idėja
Tarkime, turime bazinį modelį (EfficientNet-B0). Norime jį padidinti tiek, kad jis būtų tiksliau, bet neprarastų efektyvumo. Vietoje to, kad eksperimentuotume atsitiktinai, pasirenkame vieną mastelio parametrą, dažnai žymimą kaip φ, ir jo pagrindu apskaičiuojame:
- gylio matą d (kiek padidinti sluoksnių);
- pločio matą w (kiek padidinti kanalų);
- rezoliucijos matą r (kiek padidinti įvesties dydį).
Šie trys kintamieji d, w, r yra tarpusavyje susieti paprastomis eksponentinėmis priklausomybėmis. Vietoje chaotiško tuningavimo, gauname tvarkingą, matematiškai apibrėžtą didinimo strategiją.
Mastelio koeficientai
EfficientNet apibrėžia mastelio koeficientus, kurie nusako, kaip keičiasi kiekviena dimensija didėjant parametro φ reikšmei. Bendru atveju:
- gylis didėja pagal formulę tipo: d = αφ;
- plotis didėja pagal formulę: w = βφ;
- rezoliucija didėja pagal formulę: r = γφ.
Čia α, β, γ yra hiperparametrai, parinkti taip, kad išlaikytų balansą tarp skaičiavimo sąnaudų ir tikslumo. Šie koeficientai parenkami vieną kartą optimizacijos metu, ir vėliau visas modelių šeimas (B1–B7) galima gauti paprasčiausiai keičiant φ.
Gylio (depth) scaling
Gylis nusako, kiek sluoksnių turi neuroninis tinklas, arba kiek kartų kartojasi tam tikri blokai. Gylio didinimas leidžia modeliui apdoroti sudėtingesnes, hierarchines reprezentacijas – tai viena iš priežasčių, kodėl gilūs tinklai taip išpopuliarėjo.
Privalumai ir iššūkiai
- Privalumas: daugiau sluoksnių leidžia modeliui išmokti gilesnes, aukštesnio lygio savybes;
- Iššūkis: per didelis gylis gali sukelti gradientų nykimą, nestabilų treniravimą ir pernelyg didelį skaičiavimo laiką.
EfficientNet nenaudoja gylio didinimo izoliuotai; vietoje to gylis didinamas kartu su pločiu ir rezoliucija, kad modelis išliktų subalansuotas. Pavyzdžiui, kai kuriuose EfficientNet variantuose papildomi blokai pridedami tik tam tikruose lygmenyse, kad būtų išlaikytas tinkamas reprezentacijų gylis.
Pločio (width) scaling
Plotis apibrėžia, kiek kanalų (filtrų) turi sluoksnis. Platesni modeliai paprastai geriau išgaudo smulkias detales ir įvairias savybes, nes turi daugiau „vietos“ informacijai atvaizduoti.
Privalumai ir trūkumai
- Privalumas: platesni modeliai dažnai yra stabilesni treniruojant, gali geriau generalizuoti iki tam tikro dydžio;
- Trūkumas: plotis labai didina parametrų skaičių ir atminties sąnaudas, todėl modelis tampa sunkiai talpinamas į ribotų resursų įrenginius.
EfficientNet scaling metodas parenka optimalų pločio didinimo tempą, kuris dera su gylio ir rezoliucijos didinimu. Dėl to nei viena dimensija „neišlenda“ per daug į priekį ir modelio struktūra išlieka efektyvi.
Rezoliucijos (resolution) scaling
Įvesties rezoliucija – tai paveiksliuko dydis pikseliais, pavyzdžiui, 224×224, 380×380 ar 600×600. Didesnė rezoliucija suteikia modeliui daugiau informacijos apie smulkias detales, tačiau kartu smarkiai didina skaičiavimų kiekį.
Kaip rezoliucija veikia našumą
- Didėjant rezoliucijai, FLOPs auga kvadratiškai, nes ploto padidėjimas yra daugiklis kiekvienam sluoksniui;
- Ne visi modeliai vienodai gerai išnaudoja didesnę rezoliuciją – jei tinklas yra per seklus ar per siauras, didesnis vaizdas nebūtinai pagerins tikslumą.
EfficientNet compound scaling logika užtikrina, kad didinant rezoliuciją, kartu proporcingai didėja gylis ir plotis. Tokiu būdu modelis turi pakankamai talpos išnaudoti papildomą informaciją, gaunamą iš didesnių paveikslėlių.
Kaip veikia compound scaling praktikoje
Norint sukurti visą EfficientNet modelių šeimą, naudojami keli pagrindiniai žingsniai. Tai suteikia sisteminį būdą generuoti B1–B7 variantus iš B0 modelio.
1. Bazinio modelio (B0) optimizavimas
Pirmiausia kuriamas bazinės architektūros modelis – EfficientNet-B0. Jis sukonstruojamas naudojant modernius blokus (pvz., MBConv), „squeeze-and-excitation“ mechanizmus ir kitus architektūrinius patobulinimus. Šiame etape siekiama, kad B0 būtų:
- kompaktiškas (nedidelis parametrų skaičius);
- pakankamai tikslus;
- lengvai plečiamas didesnėmis versijomis.
2. Scaling koeficientų parinkimas
Toliau atliekama α, β, γ koeficientų paieška. Tai galima traktuoti kaip hiperparametrų optimizaciją, kur tikslas – rasti tokį koeficientų derinį, kuris maksimizuoja tikslumą esant tam tikram skaičiavimo sąnaudų biudžetui (pavyzdžiui, duotam FLOPs limitui).
Paieškos metu ribojama bendra skaičiavimo galia (pvz., kiek kartų galima padidinti FLOPs), o compound scaling formulės leidžia išlaikyti balansą tarp gylio, pločio ir rezoliucijos.
3. Modelių šeimos generavimas
Radus tinkamus koeficientus, kiekvienam EfficientNet varianto indeksui (B1, B2, ..., B7) priskiriama tam tikra φ reikšmė. Tada iš koeficientų apskaičiuojami konkretūs dimensijų masteliai:
- kiek kartų padidinti sluoksnių skaičių;
- kiek kartų padidinti kanalų skaičių kiekviename sluoksnyje;
- kokio dydžio įvesties rezoliuciją naudoti treniravimui ir inferencijai.
Taip sukuriama visa modelių piramidė, pasižyminti nuosekliai didėjančiu tikslumu ir resursų poreikiu, bet išlaikant efektyvumą kiekviename lygyje.
EfficientNet ir efektyvumo pranašumas
EfficientNet su compound scaling metodika pasiekė reikšmingą pažangą vaizdų klasifikacijoje ir kitose užduotyse. Palyginti su ankstesnėmis architektūromis, jis dažnai siūlo:
- Didesnį tikslumą esant panašiam FLOPs skaičiui;
- Mažesnį modelio dydį, kas svarbu distribuiravimui ir inferencijai kraštiniuose įrenginiuose;
- Geriau skalę – lengviau parinkti modelio variantą pagal konkretų projekto resursų biudžetą.
EfficientNet ypač išpopuliarėjo ten, kur svarbi pusiausvyra tarp kokybės ir kaštų – debesijos platformose, mobiliuosiuose įrenginiuose, realaus laiko sistemose.
EfficientNet scaling pritaikymas praktiniuose projektuose
Renkantis EfficientNet variantą realiam projektui, compound scaling suteikia labai praktišką privalumą – galite tiesiog pasirinkti modelio indeksą pagal turimus resursus:
- mažiems, resursų ribojamiems įrenginiams – B0, B1;
- vidutinėms serverio apkrovoms – B2, B3, B4;
- didelėms GPU fermoms ir maksimaliam tikslumui – B5, B6, B7.
Kadangi visi šie variantai naudoja tą pačią bazinę architektūrą ir scaling logiką, perėjimas tarp jų yra sklandus – galite pradėti prototipuoti su B0 ir vėliau, esant poreikiui, perjungti į B4 ar B6 su minimaliais kodo pakeitimais.
Inferencija ir deploy
Deploy stadijoje scaling metodai taip pat turi savo kainą ir naudą. Didesni modeliai:
- suteikia didesnį tikslumą, bet reikalauja daugiau RAM ir ilgesnio apdorojimo laiko;
- gali būti netinkami realaus laiko sistemoms (pvz., vaizdo transliacijos analizėms) be papildomos optimizacijos.
EfficientNet compound scaling leidžia smulkiai derinti kompromisą: galima pasirinkti tokį modelio dydį, kuris atitinka tiek SLA reikalavimus, tiek kokybės standartus.
EfficientNet-V2 ir tolesnė evoliucija
Nors šiame straipsnyje daugiausia dėmesio skyrėme originaliam EfficientNet ir jo scaling metodams, verta paminėti, kad vėlesni tyrimai pristatė EfficientNet-V2. Ši nauja versija papildomai optimizuoja:
- treniravimo greitį (ypač dideliems duomenų kiekiams);
- modelio architektūros struktūrą ankstyvuose sluoksniuose;
- naudojamų blokų tipą ir tvarką.
Tačiau net ir V2 versijoje compound scaling idėja išlieka svarbi – tai rodo, jog sistemingas, matematiškai pagrįstas modelio plėtimas yra tvarus kelias, o ne laikina mada.
Praktiniai patarimai diegiant EfficientNet
Jei planuojate naudoti EfficientNet ir jo scaling metodus savo projektuose, verta atsižvelgti į kelis praktinius aspektus:
Duomenų rezoliucija ir preprocessing
Pasirinkus didesnį EfficientNet variantą (pvz., B5 ar B7), kartu turi būti atitinkamai paruošti ir duomenys:
- užtikrinkite, kad pirminės nuotraukos pakankamai didelės, jog nebūtų tik beprasmiškai interpoluojamos;
- naudokite tinkamą normalizaciją ir augmentaciją, kad modelis „išmoktų“ iš papildomos rezoliucijos.
Resursų planavimas
Prieš pasirenkant konkretų EfficientNet variantą, verta atlikti nedidelį benchmarką:
- pamatuoti treniravimo laiką epokai;
- įvertinti VRAM (GPU atminties) naudojimą;
- palyginti inferencijos laiką vienam pavyzdžiui.
Tokie matavimai padės pasirinkti optimalų φ lygį jūsų infrastruktūrai.
EfficientNet scaling metodų reikšmė
EfficientNet scaling metodai pakeitė požiūrį į tai, kaip dizainuojami ir didinami giliojo mokymosi modeliai. Vietoje eksperimentiško, dažnai intuityvaus architektūros „išpūtimo“, jie pasiūlė struktūruotą, bendrą scaling strategiją.
Šio požiūrio nauda išryškėja keliais aspektais:
- Efektyvumas: daugiau tikslumo su mažiau skaičiavimų;
- Skalė: paprastas kelias sukurti kelių dydžių modelių šeimą;
- Pernaudojamumas: tas pats bazinis dizainas gali būti pritaikytas skirtingiems resursų scenarijams.
Žvelgiant į ateitį, compound scaling idėja greičiausiai išliks svarbi ne tik CNN, bet ir kitų architektūrų (pavyzdžiui, Vision Transformers ar multimodalinių modelių) pasaulyje. Ji suteikia aiškų principą, kaip balansuotai plėsti modelius, siekiant geriausio tikslumo ir efektyvumo santykio.
Išvados
EfficientNet scaling metodai – tai daugiau nei vienos architektūros sprendimas. Tai bendras principas, kaip reikėtų galvoti apie neuroninių tinklų plėtimą: ne koncentruotis į vieną dimensiją, bet harmoningai derinti gylį, plotį ir rezoliuciją. Compound scaling suteikia matematiškai pagrįstą rėmą šiam derinimui ir įrodo, kad tokia strategija duoda apčiuopiamų rezultatų.
Renkantis tinkamą EfficientNet variantą, svarbu suprasti, kad kiekvienas modelio dydis yra sąmoningai subalansuotas. Tai leidžia kūrėjams ir duomenų mokslininkams sutaupyti laiko, kurį kitu atveju tektų skirti architektūrų bandymams, ir susitelkti į svarbesnius aspektus – duomenų kokybę, problemos formulavimą ir rezultatų interpretaciją.
EfficientNet ir jo scaling metodai šiandien yra neatsiejama daugumos modernių kompiuterinės regos sistemų dalis ir puikus pavyzdys, kaip teorinis požiūris į modelių mastelio keitimą gali virsti praktiniu, pramonėje plačiai taikomu standartu.


