Verifiera din simulering för maskinundervisning
Träningsmotorn Bonsai använder förstärkningsinlärning (RL) för att strukturera maskinundervisning för hjärnor. Simuleringar stöder förstärkt inlärning med data och en interaktiv miljö för iterativ träning. Men alla simuleringar är inte kompatibla med maskinundervisning. Det är viktigt att verifiera beredskapen för simuleringen för att kunna träna en hjärna med Bonsai.
Viktigt
Stegen nedan representerar de grundläggande metodtipsen för simuleringsvalidering. I slutändan kräver utveckling av en omfattande, domänrelevant valideringsprocess situationsspecifik experimentering och jämförelser med verkliga data. Målet med en valideringsplan bör vara att identifiera och åtgärda kritiska luckor mellan den simulerade miljön och den verkliga miljö där hjärnan ska distribueras.
Innan du börjar
- Se till att du kan interagera med simuleringen programmatiskt. Du kan använda valfritt programmeringsspråk.
- Se till att Bonsai stöder din simuleringsplattform (eller språk).
Steg 1: Verifiera din stegfunktion
För att stödja förstärkt inlärning måste simulatorn svara på iterativa informationsändringar. För att hantera iterativa ändringar måste simuleringen innehålla en stegfunktion. Stegfunktionen accepterar indatavariabler (åtgärd) och returnerar utdatavärden (tillstånd) om inte ett terminalvillkor inträffar.
- Indatavariabler representerar åtgärder som vidtas av hjärnan Bonsai under den tidigare iterationen.
- Utdatavariabler ger resultatinformation som hjärnan kommer att använda under den aktuella iterationen.
Tänk dig till exempel en apiär HVAC-simulering som styr temperaturen genom att manipulera cirkulationsventiler. Antalet och positionen för öppna ventiler är indatavariablerna. Apiarys interna temperatur är utdatatillståndet. För att kunna arbeta med maskinundervisningen måste simuleringen tillåta iterativa förändringar av positionen och antalet öppna ventiler och returnera den nya temperaturen vid varje iteration.
Så här verifierar du din stegfunktion:
- Bekräfta att uppsättningen med förväntade indatakontrollåtgärder matchar, eller är en supermängd av, den uppsättning åtgärder som hjärnan kommer att träna med.
- Bekräfta att din stegfunktion är deterministisk. Med andra ord har alla möjliga indata ett motsvarande utdatatillstånd eller terminalvillkor.
- Bekräfta att utdatatillståndsinformationen använder rätt enheter. Om hjärnan till exempel förväntar sig temperatur i Celsius kontrollerar du att simuleringen inte skickar temperaturinformation i Kelvins.
Steg 2: Verifiera terminalvillkoren och återställningsfunktionen
En viktig del av iterativ simulering är att veta när processen ska stoppas och återställas. Terminaltillstånd meddelar simuleringen när hjärnan har nått en punkt där återställning inte längre är möjligt. Temperaturen i en apiary har till exempel nått en punkt där bina kommer att ha dött.
När ett terminaltillstånd inträffar bör återställningsfunktionen återställa miljön i simuleringen till det förväntade starttillståndet så att hjärnan kan försöka igen.
Så här verifierar du terminalvillkoren och återställningsfunktionen:
- Bekräfta att dina terminalvillkor faktiskt kan inträffa som en del av simuleringens utdata. Om din apiary-simulering till exempel anges i en tropisk miljö och simuleringen bara avslutas när temperaturen sjunker under fryspunkten avslutas den aldrig.
- Bekräfta att återställningsfunktionen exponeras för användarna så att den Bonsai kan anropas av plattformen.
- Bekräfta att du hanterar gränsfall på rätt sätt. Om det till exempel är möjligt för temperaturer att ändras med mer än 1 grad i en iteration kontrollerar du om det finns värden som är större än ett gränsvärde i stället för likhet.
Steg 3: Verifiera dina konfigurationsvariabler
Simulatorn bör ha stöd för initiering av miljövariabler så att hjärnan Bonsai kan träna mot en mängd olika scenarier. Till exempel bör en apiär HVAC-simulering stödja alla rimliga starttemperaturer.
Så här verifierar du dina konfigurationsvariabler:
- Bekräfta att uppsättningen med tillgängliga konfigurationsvariabler omfattar all relevant starttillståndsinformation.
- Bekräfta att konfigurationsvariablerna kan anges av återställningsfunktionen.
- Bekräfta enheterna mellan simuleringen och hjärnmatchningen eller konverteras på rätt sätt.
Steg 4: Utforma ett grundläggande testprotokoll
Ett bastestprotokoll upprättar ett enkelt (grundläggande) ärende och kör simuleringsstegen i en loop för det fallet ett fördefinierat antal iterationer. Använd genererade utdata för närmare analys för att bekräfta att simulatorn beter sig som förväntat.
Ditt grundläggande testprotokoll beror på två mått:
- Kontrollfrekvens (CF): hur ofta hjärnan vidtar åtgärder för att kontrollera den simulerade miljön som ett mått på händelser per mått, som vanligtvis anges i Hertz (Hz). Kontrollfönstermåttet bör återspegla det verkliga måttet (tid, avstånd) som du förväntar dig att den tränade hjärnan ska använda när du utvärderar och vidtar åtgärder för att kontrollera den verkliga miljön.
- Simuleringstid (ST): hur lång tid det tar att simulera önskat kontrollfönster i verkligheten. ST för en viss iteration varierar beroende på simuleringens komplexitet.
För att fastställa en lämplig kontrollfrekvens beräknar du antalet kontrollhändelser som hjärnan ska hantera i en meningsfull enhet i kontrollmåttet. Tidsbaserade kontrollsystem beräknar vanligtvis CF i händelser per sekund medan avståndsbaserade kontrollsystem vanligtvis beräknar CF i händelser per mätare.
Anta till exempel att du vill att din apiära HVAC-hjärna ska utvärdera apiary-tillståndet och vidta åtgärder var 100:e minut när den distribueras. För att effektivt efterlikna produktionsmiljön bör varje träningsiteration simulera ett fönster på 100 ms med en kontrollåtgärd per iteration.
1 händelse var 100 ms → 1 händelse / 100 ms
1 000 ms per sekund → (1 händelse / 100 ms) × (1 000 ms / 1 sekund) → målfrekvensen är 10 kontrollhändelser per sekund
Per definition:
1 Hz = 1 händelse per sekund
Så för att bekräfta att simuleringen replikerar miljön på rätt sätt bör bastestprotokollet använda en kontrollfrekvens på 10 Hz.
Anteckning
Att definiera din kontrollfrekvens är Hertz är typiskt, men krävs inte. I slutändan behöver du bestämma hur många kontrollhändelser du vill ha för en viss mätning. När du vet hur ofta dina kontrollhändelser ska inträffa kan du bestämma resten av testvariablerna.
När du beräknar kontrollfrekvensen kan du använda följande steg för att utforma ett allmänt basprotokoll som du kan anpassa efter simuleringens specifika egenskaper:
- Kör simuleringen med en standardkonfiguration för att generera en typisk loggfil.
- Baserat på din CF och loggfilen avgör du det maximala antalet iterationer som du vill tillåta för träningsavsnitt.
- Se till att du kan beräkna och logga följande information för varje iteration av testet:
- Alla utdatatillstånd som tillhandahålls av simulatorn.
- Det faktiska CF-värdet som uppnåtts av simuleringen.
- ST-värdet för iterationen.
- Analysera relationen mellan indata och utdata i loggfilen för att identifiera ett enkelt konfigurationsscenario (test).
- Definiera minst ett fast testscenario. Välj en lämplig startkonfiguration och fastställ förväntade kontrollåtgärder (principsvar) för varje iteration av testscenariot.
- Definiera minst ett slumpmässigt testscenario. För en godtycklig startkonfiguration skriver du testkod som slumpmässigt väljer en av de tillgängliga kontrollåtgärderna för varje iteration av testscenariot.
- Skriv testkod för att anropa stegfunktionen med önskade indata (fasta eller slumpmässiga) för varje iteration och upprepa processen tills den når ett terminalvillkor eller det maximala antalet iterationer som du fastställde tidigare.
Steg 5: Kör ett bastestprotokoll
Simuleringsvalidering är en iterativ process. Du bör förvänta dig att köra testprotokollet flera gånger med olika startkonfigurationer och köra om protokollet när du gör justeringar i simuleringen.
Tips
För bästa resultat bör du ha flera konfigurationer definierade för dina fasta och slumpmässiga principer.
För varje testkörning:
- Ange simulatorn med det ursprungliga tillståndet för testscenariot.
- Kör simuleringen med olika indata för det fasta testscenariot.
- Kör simuleringen med varierande indata i det slumpmässiga testscenariot.
- Kör simuleringen för ett stort antal iterationer så att en återställning kan ske.
- Kör simuleringen och framtvinga en återställning vid en slumpmässig punkt.
- Kör simuleringen med en inledande konfiguration som tvingar fram en återställning.
Steg 6: Analysera resultatet av testet
Det finns inget rätt sätt att analysera resultatet av ett simuleringstest. Några metodtips beskrivs nedan, men du bör också förlita dig på din kreativitet och ämnesexpertis för att utvärdera simuleringens beteende. Genom att rita ut dina resultat som indata jämfört med utdata blir det enklare att analysera simulatorbeteendet och kommunicera resultaten till andra.
Utvärdera tillförlitlighet
Simuleringens tillförlitlighet relaterar direkt till relationen för indata (åtgärdstillstånd) i basprotokollet. Om du kör samma scenario med en princip för fast kontroll och en princip för slumpmässig kontroll blir det enklare att fastställa tillförlitligheten:
- Den fasta principen bör resultera i ett väl förstått resultat.
- Den slumpmässiga principen genererar oväntade villkor i simulatorn.
Den fasta principen hjälper dig att verifiera ett bra beteende medan den slumpmässiga principen hjälper dig att identifiera gränsfall där simuleringen är långsam, fastnar eller stöter på andra problem.
I apiary HVAC-simuleringen bör till exempel öppning av en ventil sänka temperaturen i apiary. Om temperaturen stiger i stället indikerar det att simuleringen är buggig.
Utvärdera flexibilitet
Flexibiliteten i simuleringen är direkt relaterad till hur väl den hanterar olika konfigurationer. Granska loggarna för dina principer för fast och slumpmässig kontroll. För var och en av startkonfigurationerna avgör du om motsvarande ändringar i den simulerade miljön är meningsfulla.
Om du till exempel ändrar storlek och antal cirkulationsventiler i apiary bör motsvarande ändring av hur snabbt eller långsamt temperaturen ändras när ventilerna öppnas.
Utvärdera återställning
En viktig del av maskinundervisningen är möjligheten att återställa träningsmiljön vid behov. Kontrollera testloggarna för alla platser där ett terminaltillstånd uppstod och miljöåterställningen. Observera simulatortillståndet, de resulterande åtgärderna när återställningen inträffade och om beteendet är meningsfullt i den kontexten.
Viktigt
Om du ser ett falskt positivt eller falskt negativt terminaltillstånd indikerar det att simuleringen är buggig.
Återställdes till exempel apiary HVAC när den inre temperaturen nådde en punkt där alla växter i miljön skulle torka ut och vissna? Var den nya interna temperaturen efter återställningen meningsfull som en starttemperatur?
Utvärdera den simulerade kontrollfrekvensen
Om du planerar att distribuera din hjärna på maskinvara i stället för att installera den som programvara, bör din simulerade kontrollfrekvens vara lika med, eller en faktor för, den verkliga kontrollfrekvens som du förväntar dig att se i produktion. På så sätt kan ditt steg loopa så många gånger som behövs för att hålla simulerings-CF i linje med den förväntade maskinvaru-CF:en.
Om maskinvaran för din hjärna till exempel har en CF på 100 Hz måste simuleringen tillåta indata var 10:e ms i den verkliga simuleringen.
1 Hz = 1 händelse per sekund → 100 Hz = 100 händelser per sekund
1 000 ms per sekund → 1 000 ms / 100 händelser = 10 ms per händelse
Simuleringskontroller på 1 ms, 2 ms och 5 ms fungerar också. I varje fall kan simulatorn loopa genom stegfunktionen ytterligare gånger för att uppnå önskad kontrollfrekvens.
Simulerat kontrollfönster | Nödvändiga loopar | Simulerad CF |
---|---|---|
1 ms | 10 | 1 000 Hz |
2 ms | 5 | 500 Hz |
5 ms | 2 | 200 Hz |
Utvärdera simuleringstiden
Beräkna det genomsnittliga ST-värdet för alla iterationer för alla testkörningar. Om du vill arbeta tillförlitligt med maskinundervisning och Bonsaimåste den genomsnittliga ST för simuleringen vara ≤ 20 sekunder.
Om din genomsnittliga ST är över det tröskelvärde som stöds anses det vara en långsam simulator och kan inte ge din hjärna en realistisk modell för träning.
Nästa steg
- När du har verifierat simulatorn ansluter du den till Bonsai enligt beskrivningen i Skapa en dedikerad anslutningsapp för Bonsai i Python.
- Prova att köra simulatorn lokalt mot en grundläggande Inkling-fil.