Självstudie: Väljarbegrepp
Selector-konceptet lärs in begrepp som producerar utdata genom att välja och returnera ett resultat från ett av flera alternativbegrepp. Väljaren väljer ett resultat baserat på normaltillståndsinformation precis som ett inlärt begrepp.
Väljare är användbara när följande är sant:
- Du vet att det krävs flera färdigheter eller strategier för att lösa ett övergripande problem.
- Du kan utforma, programmera och träna var och en av komponentkunskaperna separat.
- Du vill att AI ska lära dig hur du avgör när varje färdighet ska användas.
Väljare behöver bara välja bland de tillgängliga alternativen, så de är ofta mer robusta och snabbare att träna än en enda princip som lär sig alla relevanta färdigheter och när de ska användas. Med väljare kan du också blanda programmerade eller importerade kunskaper med inlärda begrepp.
I den här självstudien lär du dig att definiera, träna och utvärdera väljarbegrepp.
Steg 1: Definiera färdigheter eller strategier som du vill välja bland
I det här steget definierar du alternativbegreppen för väljaren att välja bland. Alla alternativbegrepp måste generera samma utdatatyp (åtgärd), så väljaren väljer bland liknande strukturerade resultat.
Följande kod baseras på Cartpole-exemplet. Cartpole-problemet ber AI:n att flytta en kundvagn till en målregion samtidigt som en hakpol är balanserad i mitten av kundvagnen. I stället för att utveckla ett inlärt koncept för att lösa problemet skapar du två inlärda begrepp där AI lär sig att gå åt höger och vänster separat och sedan använda ett väljarbegrepp för att välja bland de två alternativen för att flytta kundvagnen.
Konceptet GoLeft flyttar kundvagnen åt vänster samtidigt som polen är stående:
concept GoLeft(ComputeDelta): Action {
curriculum {
source CartpoleSim
goal (state: SimState) {
avoid FallOver:
Math.Abs(state.pole_angle) in Goal.RangeAbove(MaxPoleAngle)
# There isn't a specific "close enough" threshold, so using
# Goal.RangeBelow(0) to encourage the system to minimize as well as it can
minimize DistToTarget:
Math.Abs(state.target_pole_position - state.cart_position) in Goal.RangeBelow(0)
}
training {
EpisodeIterationLimit: 200,
}
lesson One {
# Because we're using relative positions, just need to randomize initial position to be far and close to the target.
# "GoLeft" starts the cart to the right of the target.
scenario {
initial_cart_position: number<0 .. MaxPosition>,
target_pole_position: 0
}
}
}
}
Och konceptet GoRight flyttar kundvagnen till höger samtidigt som polen är stående:
concept GoRight(ComputeDelta): Action {
curriculum {
source CartpoleSim
goal (state: SimState) {
avoid FallOver:
Math.Abs(state.pole_angle) in Goal.RangeAbove(MaxPoleAngle)
# There isn't a specific "close enough" threshold, so using
# Goal.RangeBelow(0) to encourage the system to minimize as well as it can
minimize DistToTarget:
Math.Abs(state.target_pole_position - state.cart_position) in Goal.RangeBelow(0)
}
training {
EpisodeIterationLimit: 200,
}
lesson One {
# Because we're using relative positions, just need to randomize initial position to be far and close to the target.
# "GoRight" starts the cart to the left of the target.
scenario {
initial_cart_position: number<-MaxPosition .. 0>,
target_pole_position: 0
}
}
}
}
Steg 2: Lägg till en väljare
Nu när alternativbegreppen har definierats måste du definiera läroplanen för ditt väljarbegrepp med hjälp av standardkonceptsyntax:
output concept PickOne(ComputeDelta): Action {
select GoRight
select GoLeft
curriculum {
source CartpoleSim
training {
EpisodeIterationLimit: 200,
NoProgressIterationLimit: 1000000,
}
goal (state: SimState) {
avoid FallOver: Math.Abs(state.pole_angle) in Goal.RangeAbove(MaxPoleAngle)
minimize DistToTarget: Math.Abs(state.target_pole_position - state.cart_position) in Goal.RangeBelow(0)
}
lesson One {
# Because we're using relative positions, just need to randomize initial position to be far and close to the target
# "PickOne" starts at a random position within the full range.
scenario {
initial_cart_position: number<-MaxPosition .. MaxPosition>,
target_pole_position: 0
}
}
}
Anteckning
Om du direkt kan programmera en regel för att välja vilket begrepp som ska användas när kan du använda ett programmerat begrepp i stället för en inlärd väljare. Exempel:
programmed function(state: LearningState, left_action: Action, right_action: Action) : Action {
if state.distance_to_target > 0 { return right_action }
else { return left_action }
}
Steg 3: Träna begreppen
Du måste träna de inlärda begreppen individuellt och utvärdera prestanda för varje alternativ för att se till att de fungerar innan du tränar väljaren.
Skärmbilden nedan visar indelningsfilen och träningsplanen för träning ComputeDelta , sedan och och sedan GoLeftGoRightPickOne .
Bonsai
Teaching UI" aria-describedby="153-0" data-linktype="relative-path">
Skärmbild av användargränssnittet för undervisning med exemplet Påstående kod i kodpanelen och ett träningsdiagram som visar begreppen ComputeDelta, GoLeft, GoRight och PickOne i den ordning som de Bonsai tränas.
Tips
Om du vill ändra ett begrepp ändrar du helt enkelt inaktiviteten och tränar om hjärnan. Bonsai skapar automatiskt en ny brain-version och bevarar eventuella träningsförloppet för begrepp som inte påverkas av ändringen. Du kan till exempel lägga till StopCart ett koncept i cartpole-exemplet, träna det och sedan lägga select StopCart till i väljaren. När du tränar om hjärnan tvingar det väljaren att träna om, men inte GoLeft eller GoRight .
Steg 4: Utvärdera
Använd anpassade utvärderingar för att undersöka hur väljaren lär sig med hjälp av den normala utvärderingsprocessen. Genom att utvärdera väljarbegreppen visas det valda konceptet samt den resulterande åtgärden.
Mer information om utvärdering finns i självstudien Utvärdera data för brain assessment.