Unity ML-Agent 내부 요소 및 함수

Seulgi Kim·2023년 4월 23일
0

reinforce learning

목록 보기
4/14

Behavior Parameters

에이전트의 학습에 관련된 파라미터

Behavior name

학습의 결과로 나올 모델의 이름

Vector Observation

환경의 수치적 관측 관련 설정
Space size를 통해 관측의 크기 설정 (ex. x, y, z좌표라면 3)
Stacked Vector를 통해 관측의 누적 횟수 결정 (ex. 바로 이전 스텝의 위치와 현재의 위치를 고려한다면 2)

Actions

에이전트의 행동 관련 설정
이산적 행동인지 연속적 행동인지 (ex. x, y축으로 회전이 가능하다면 continuous action 2)
이산적 행동에서 branches size도 설정

  • branches : 행동의 그룹
    (ex. 위, 아래, 왼쪽, 오른쪽으로 이동 가능한 좌표라면, branch size가 4, discrete branches는 1)
    (ex. 대각선이 가능한 경우, 위아래가 한그룹, 왼쪽오른쪽이 한그룹으로, discrete branches가 2, branch size는 2씩)

Model

학습의 결과를 확인하기 위해 학습된 모델을 적용

  • Inference Device : 사용 장치 설정 (GPU, Burst, CPU)

Behavior Type

에이전트 행동 방

  • default : 모델이 있다면 인퍼런스, 없다면 휴리스틱
  • inference
  • heuristic : 룰베이스대로 혹은 사람이 직접 컨트롤 가능

Team Id

에이전트간 공유할 정책 index
여러 에이전트를 하나의 정책으로 학습 가능

Use Child Sensors

하위 센서 사용 여부

Observable Attribute Handling

Observation 외에 추가로 관찰할 속성 추가

Script

Max Step

한 에피소드 당 최대 스텝 수

Specific to Ball3D

Agent 스크립트 내의 public 변수

스크립트 내의 필수 함수

Initialize

환경이 실행될 때 호출되는 초기화 함수

public override void Initialize()
{
	m_BallRb = ball.GetComponent<Rigidbody>();
    m_ResetParams = Academy.Instance.EnvironmentParameters;
    SetResetParameters();
}

CollectObservations

Agent에게 Vector Observation 정보를 전달하는 함수

public override void CollectObservations(VectorSensor sensor)
{
	if (useVecObs)
    {
    	sensor.AddObservation(gameObject.transform.rotation.z);
        ...
    }
}

OnActionReceived

Agent가 결정한 행동을 전달, 보상 업데이트, 에피소드 종료

public override void OnActionReceived(ActionBuffers actionBuffers)
{
	var actionZ = 2f * Mathf.Clamp(actionBuffers.ContinuousActions[0], -1f, 1f);
    ...
    if ((gameObject.transform.rotation.z < 0.25f && actionZ > 0f) ||
    (gameObject.transform.rotation.z > -0.25f && actionZ < 0f))
    {
    	gameObject.transform.Rotate(new Vector3(0,0,1), actionZ);
    } # 행동을 전달
    ...
    if ((ball.trnasform.position.y - gameObject.transform.position.y) < -2f ||
    Mathf.Abs(ball.transform.position.x - gameObject.transform.position.x) > 3f ||
    Mathf.Abs(ball.transform.position.z - gameObject.transform.position.z) > 3f)
    { # 공이 떨어질 경우,
    	SetReward(-1f); # -1의 패널티를 받는다
        EndEpisode(); # 에피소드 마무리
    }
    else
    {
    	SetReward(0.1f); # 보상 업데이트
    }
}

OnEpisodeBegin

각 에피소드가 시작될 때 호출되는 함수

public override voide OnEpisodeBegin()
{
	gameObject.transform.rotation = new Quaternion(0f, 0f, 0f, 0f);
    ...
    SetResetparameters();
}

Heuristic

개발자가 직접 명령을 내리는 휴리스틱 모드에서 사용
주로 테스트용 또는 모방 학습에 사용

public override void Heuristic(in ActionBuffers actionsOut)
{
	var continuousActionsOut = actionsOut.ContinuousActions;
    continuousActionsOut[0] = -Input.GetAxis('Horizontal');
    continuousActionsOut[1] = Input.GetAxis('Vertical');
}

Decision Requester

Agent의 행동을 정책에게 요청하는 component

Decision Period

정책 결정 시간

Take Actions Between Decisions

정책 결정 사이에 동일한 행동을 반복하게 할 지, 멈춰있게 할지 결정

Model Overrider (Script)

해당 컴포넌트는 학습이 완료된 후 모델의 유효성을 검사하기 위해 내부적으로 사용되는 클래스
필수는 아님.

0개의 댓글