RNN pagrindai: pradėkite nuo nulio
Suprasite, kaip veikia rekurentiniai tinklai ir kodėl jie tinka laiko eilučių analizei.
Jūsų modelis neveikia tinkamai? Čia rasite šešis patarimus, kaip sumažinti klaidų normą ir pagerinti prognozavimo kokybę realiose situacijose.
Redakcinė Komanda
Parašyta Chrono Predict redakcinės komandos, sutelktos į aiškius, praktiškus vadovus laiko eilučių prognozavimui.
Rekurentiniai tinklai yra galingas įrankis laiko eilučių prognozavimui. Bet jie nėra magija. Jei jūsų modelis duoda keistas prognozes, tai dažniausiai ne algoritmo kaltė — tai dažnai duomenų paruošimo, hiperparametrų arba mokymo strategijos problema.
Pasaulyje yra tūkstančiai LSTM ir GRU modelių, kurie veikia gerai. Taip pat yra dešimtys tūkstančių modelių, kurie duoda baisias prognozes. Skirtumas? Detales. Mažos, praktinės detales, kurias jūs greitai pamatysite čia.
Gerai paruošti duomenys ir tinkamas mokymas sumažina klaidą labiau nei pats tinklas. Pradėkite nuo to.
Jei duomenys blogi, modelis bus blogas. Tai nėra mįslė. Daugelis žmonių skubėdami šokinėja per šį žingsnį ir vėliau kankinasi.
Tikrinkite nulias reikšmes, duplikatus ir netikėtas šuolius duomenyse. Ar yra trūkstamos reikšmės? Ar jie atsitiktinai pasiskirstę? Ar modelis turi jas daryti sąmoningai, ar reikia jų pakeisti?
Pavyzdžiui, jei prognozuojate paros energijos suvartojimą, o tam tikra valanda yra nulė dėl sensoriaus gedimo, tai nėra tipiška. Pakeiskite ją skaičiavusiu vidurkiu iš panašių dienų. Neskubėkite tiesiog ištrinti eilučių.
Supraskite duomenų šaltinį ir dažnumą
Nustatykite ir ištaisykite trūkstamas reikšmes
Ištrinkite ar ištaisykite neįprastus duomenis
Patikrinkite sezoninį šabloną
Rekurentiniai tinklai nemėgsta didelių skaičių. Jei jūsų duomenys svyruoja nuo 0 iki 100 000, modelis bus nesubalansuotas ir greitai persimokyti. Skalėkite viską į 0-1 diapazoną arba normalizuokite pagal standartinį nuokrypį.
Dažniausiai naudojama min-max skalėjimas: (x - min) / (max - min). Tai paprasta, greitai apskaičiuojama ir veikia gerai. Arba naudokite z-score normalizaciją: (x - mean) / std_dev. Abi yra geros, pasirinkite vieną ir laikykitės jos.
Svarbu: normalizuokite mokymo duomenis atskirai nuo bandymo duomenų. Apskaičiuokite min ir max (arba vidurkį ir std) tik iš mokymo rinkinio. Tada taikykite tas pačias reikšmes bandymui. Priešingu atveju gausėte netikėtus rezultatus.
Praktinis pavyzdys:
Tą patį scaler objektą naudokite mokymo ir bandymo fazėms. Nešališkiau ir paprasčiau.
Pradėkite nuo paprastos architektūros. LSTM sluoksnis, dropout, tankus sluoksnis. Tiek. Ne šeši sluoksniai su skirtingais dydžiais. Pradėkite nuo to, kas veikia, o tada komplikuokite.
Mokymo metu stebėkite nuostolį. Jei jis nenusileidžia po 20-30 epok, kažkas negerai. Gali būti per didelis learning rate. Jei nuostolis šokinėja chaotiškai, learning rate per didelis. Sumažinkite jį iki 0.001 ir stebėkite toliau.
Batch size reikšmingas. Didelis batch (256, 512) stabilizuoja mokymo procesą. Mažas batch (8, 16) leidžia greitiau prisitaikyti, bet gali būti triukšmingesnis. Dažniausiai 32-64 yra gera pradžia.
Pradėkite nuo 0.001. Jei nuostolis nesikeičia, sumažinkite iki 0.0001.
32-64 yra saugi zona. Didesnis = stabilus. Mažesnis = greitesnis.
Pradėkite nuo 50-100. Jei validacijos nuostolis gerėja, tęskite.
Nesibaigite su MAE ir RMSE skaičiais. Žiūrėkite į prognozes. Ar jos atrodo pagrįstos? Jei modelis prognozuoja energijos suvartojimą ir staiga jums sako, kad rytoj suvartojimas bus neigiamas, kažkas klaidinga.
Padalinkite bandymo duomenis į keletą laiko periodų. Testuokite modelį trumpuose periodose (viena savaitė) ir ilguose periodose (vienas mėnuo). Ar modelis gerai veikia abiem? Jei tik trumpose, tai jo ilgalaikes prognozes negalime pasitikėti.
Nubraižykite realias ir prognozuojamas reikšmes vienos šalia kitos. Turite pamatyti grafiką. Jei kreivės nesutampa, tai nėra didelės klaidų vertės - tai klaidinga prognozė. Taisykite modelį.
Jei jūs bandote 50 skirtingų parametrų kombinacijų atsitiktinai, tai nėra derinimas. Tai tiesiog chaos. Turėkite planą. Nustatykite parametrų diapazonus ir testuokite sistemingai.
Pradėkite nuo LSTM vienetų skaičiaus. Testuokite 32, 64, 128. Stebėkite rezultatus. Pasirinkite geriausią. Tada pereikite prie kito parametro. Nepakeiskite viškausą dalykų vienu metu. Negalėsite suprasti, kas ką paveikė.
Dokumentuokite viską. Kokius parametrus bandėte? Kokie buvo rezultatai? Užsirašykite. Tada grįžus prie šito per tris mėnesius, žinosite, ką jau bandėte. Nereikalingas pakartoti tuos pačius testus.
Šis straipsnis yra edukacinis išteklius, skirtas suprasti laiko eilučių prognozavimo principus ir praktinius metodus. Jame pateiktos rekomendacijos grindžiamos bendraisiais mašininio mokymosi principais. Konkretūs rezultatai gali skirtis atsižvelgiant į jūsų duomenis, modelio architektūrą ir specifines darbo sąlygas. Visada testuokite modelį su savais duomenimis prieš jį naudodami realiose situacijose. Šis vadovas nesiūlo investavimo patarimo ar finansinių prognozių. Naudokite jį kaip mokymosi šaltinį.
Klaidų sumažinimas nėra magiška formulė. Tai praktiški, nuoseklūs žingsniai. Geri duomenys, tinkama normalizacija, paprasta architektūra, stabilūs mokymo parametrai ir sąmoningas bandymas. Tai yra formulė, kuri veikia.
Pradėkite nuo to, kas čia pasakyta. Nesudėtinkite. Testuokite. Dokumentuokite. Leiskite duomenims ir rezultatams jums parodyti, kas reikalinga toliau. Greičiausiai sužinosite, kad jūs jau žinote, kas reikalinga - jums tik reikėjo to patvirtinimo.
Norite tęsti mokymąsi? Žiūrėkite kitus mūsų straipsnius apie RNN ir laiko eilutes.
RNN pagrindai pradedantiesiems
Suprasite, kaip veikia rekurentiniai tinklai ir kodėl jie tinka laiko eilučių analizei.
Išmoksite skirtumų tarp LSTM ir GRU tinklų bei kuriuos naudoti savo projektams.
Žingsnis po žingsnio nurodymų, kaip sukurti veikiantį RNN modelį naudojant TensorFlow.