Kulcsszó: Lecke

A leckék szakaszos módokat kínálnak a fogalmak tanítására. A tantervek előkészítési folyamatának a következőre lehet hasznos:

  • manuális tanterv-növekedés: a mi egyszerűbb feladatokkal kezdődik, és végül nehezebb feladatokra is kihat.
  • tartomány-véletlenszerűsítés: az MI kiindulási feltételei véletlenszerűen, minden egyes területen véletlenszerűen vannak megszűkülve.

A jól strukturált leckék csökkenthetik az AI koncepción való betanításának teljes idejét.

Használat

Egy tantervben több leckét is használhat. Ha egy tanterv több leckét is tartalmaz, a leckék a deklarált sorrendben vannak végrehajtva.

Záradék scenario használatával korlátozhatja a szimulátort a kapcsolódó leckére. A záradék használata során a további leckéknek fokozatosan csökkentenie kell a korlátozásokat, hogy a feltárási terület mérete nagyobb legyen, és a kapcsolódó koncepciót nehezebb scenario elsajátítani.

Egy adott leckében használt tartománykorlátnak például az előző leckében használt megfelelő forgatókönyvkorlátnak kell egyenlőnek vagy kevésbé korlátozónak lennie.

Lecke betanítása – paraméterek

A következő betanításparamétereket módosíthatja a leckéhez a training záradékkal:

Paraméter Értékek Alapértelmezett Leírás
LessonRewardThreshold number Nincs Minimális sikernek számító jutalom.
LessonSuccessThreshold number<0 .. 1> 0.90 (90%) A lecke befejezéséhez szükséges minimális sikeresség.
LessonAssessmentWindow Number.UInt32 30 Az egy értékelésre jutó fogaékok száma. A és a LessonRewardThreshold kiszámítására LessonSuccessThreshold használatos.

A lecke szintjén megadott paraméterértékek felülbírálják a tanterv szintjén esetleg megadott értékeket.

Például:

concept MyConcept(input: SimState): BrainAction {
  curriculum {
    training {
      EpisodeIterationLimit: 250,
      TotalIterationLimit: 100000
    }

    ...

    lesson MyLesson {
      training {
        LessonRewardThreshold: 120
      }
    }
  }
}

LessonRewardThreshold

Csak a jutalom- és terminálfunkció-alapú tantervek esetén támogatott.

Ha egy értékelésben a tesztfübök elegendő hányadának (ahogyan az jelzi) van egy kumulatív jutalma, amely teljesíti vagy meghaladja az értéket, a betanítási motor befejezettnek tekinti a leckét, és a tanmenet következő leckéjére LessonSuccessThreshold LessonRewardThreshold lép.

Ha a lecke definíciója nem tartalmaz jutalomküszöböt, a betanítási motor egy általános konvergenciateszt alapján határozza meg, hogy mikor fejeződött be a lecke.

LessonSuccessThreshold

Ha az esemény sikerességére vonatkozó arány egy értékelésben meghaladja az értéket, a betanítási motor befejezettnek tekinti a leckét, és a tanterv következő LessonSuccessThreshold leckéjét veszi át.

Az értéknek 0 és 1 közé kell esnie, és egy céltöredéket képvisel.

LessonAssessmentWindow

Beállítja az értékelésenkénti teszttesztek számát. Az értékelések tesztelési csoportok, amelyek rendszeres időközönként futnak, hogy a betanítás során kiértékeljék a mi-t. A és a paraméteren alapuló LessonSuccessThreshold leckeváltásokat a rendszer minden értékelés után LessonRewardThreshold kiértékeli. A betanítás automatikus megszakítása (lásd: NoProgressIterationLimit ) szintén az értékelési teljesítményen alapul.

Példa több leckére

Ebben a példában a leckék két szakaszra lebontják a Moab-tábla labdája vezérlésének feladatát:

  • RandomizedStartLowVelocity: az AI alacsony, változó sebességgel való meggyanúsodja.
  • RandomizedStartMediumVelocity: az MI-t közepes sebességű, változó sebességű sebességű meggyanúsitás.

A példában a jogkivonat után megadott típusnak kompatibilisnek kell lennie a szimulátordeklarációban ( ) meghatározott scenario konfigurációtípussal. ObservableState

# Distances measured in meters
const RadiusOfPlate = 0.1125 # m

# Velocities measured in meters per sec.
const MaxVelocity = 6.0
const MaxInitialVelocity = 1.0

# Default time delta between simulation steps (s)
const DefaultTimeDelta = 0.045

# Maximum distance per step in meters
const MaxDistancePerStep = DefaultTimeDelta * MaxVelocity

# State received from the simulator after each iteration
type ObservableState {
    # Ball X,Y position
    ball_x: number<-MaxDistancePerStep - RadiusOfPlate .. RadiusOfPlate + MaxDistancePerStep>,
    ball_y: number<-MaxDistancePerStep - RadiusOfPlate .. RadiusOfPlate + MaxDistancePerStep>,

    # Ball X,Y velocity
    ball_vel_x: number<-MaxVelocity .. MaxVelocity>,
    ball_vel_y: number<-MaxVelocity .. MaxVelocity>,

# Define a concept graph with a single concept
graph (input: ObservableState) {
    concept MoveToCenter(input): SimAction {
        curriculum {
            # The source of training for this concept is a simulator that
            #  - can be configured for each episode using fields defined in SimConfig,
            #  - accepts per-iteration actions defined in SimAction, and
            #  - outputs states with the fields defined in SimState.
            source simulator MoabSim(Action: SimAction, Config: SimConfig): ObservableState {
                # Automatically launch the simulator with this
                # registered package name.
                package "Moab"
            }

            training {
                # Limit episodes to 250 iterations instead of the default 1000.
                EpisodeIterationLimit: 250
            }

            # The objective of training is expressed as a goal with two
            # subgoals: don't let the ball fall off the plate, and drive
            # the ball to the center of the plate.
            goal (State: ObservableState) {
                avoid `Fall Off Plate`:
                    Math.Hypot(State.ball_x, State.ball_y)
                    in Goal.RangeAbove(RadiusOfPlate * 0.8)
                drive `Center Of Plate`:
                    [State.ball_x, State.ball_y]
                    in Goal.Sphere([0, 0], CloseEnough)
            }

            lesson RandomizedStartLowVelocity {
                # Specify the configuration parameters that should be varied
                # from one episode to the next during this lesson.
                scenario {
                    initial_x: number<-RadiusOfPlate * 0.5 .. RadiusOfPlate * 0.5>,
                    initial_y: number<-RadiusOfPlate * 0.5 .. RadiusOfPlate * 0.5>,

                    initial_vel_x: number<-MaxVelocity * 0.02 .. MaxVelocity * 0.02>,
                    initial_vel_y: number<-MaxVelocity * 0.02 .. MaxVelocity * 0.02>,

                    initial_pitch: number<-0.2 .. 0.2>,
                    initial_roll: number<-0.2 .. 0.2>,
                }
            }
            lesson RandomizedStartMediumVelocity {
                # Specify the configuration parameters that should be varied
                # from one episode to the next during this lesson.
                scenario {
                    initial_x: number<-RadiusOfPlate * 0.5 .. RadiusOfPlate * 0.5>,
                    initial_y: number<-RadiusOfPlate * 0.5 .. RadiusOfPlate * 0.5>,

                    initial_vel_x: number<-MaxVelocity * 0.4 .. MaxVelocity * 0.4>,
                    initial_vel_y: number<-MaxVelocity * 0.4 .. MaxVelocity * 0.4>,

                    initial_pitch: number<-0.2 .. 0.2>,
                    initial_roll: number<-0.2 .. 0.2>,
                }
            }
        }
    }
}