유니티 머신러닝 개발 ML Agents 6편, 목표 찾기 예제 제작. 2 학습 프로그램 제작, 학습시키고, 학습 데이터 확인해보기
지난 편에서는 폭표찾기 예제를 진행하였고,
그중 유니티 프로젝트를 제작하였습니다.
추가로 Heuristic 모드로는 잘 동작하는 것까지 진행했어죠.
오늘은 아나콘다에서 파이썬으로 학습프그램을 돌리고, 만들어둔 유니티 프로젝트를 구동시켜 학습을 시켜보겠습니다.
그리고 학습된 파일을 가져와서 사용도 해보고요.
이전 배포 예제들을 돌렸을 때, 학습 프로그램들이 들어있는 위치를 기억하실 겁니다.
ml-agents-release_15\config\ppo
요기종
Basic.yaml을 복사해서 사본을 만들고, 이름을 바꿉니다.
rollerball_config.yaml
로 교체합니다.
해당 파일을 편하신 에디터 툴로 오픈합니다.
전 그냥 비주얼 스튜디오로.
내부에 내용을 모두 교체합니다.
behaviors:
RollerBall:
trainer_type: ppo
hyperparameters:
batch_size: 10
buffer_size: 100
learning_rate: 3.0e-4
beta: 5.0e-4
epsilon: 0.2
lambd: 0.99
num_epoch: 3
learning_rate_schedule: linear
network_settings:
normalize: false
hidden_units: 128
num_layers: 2
reward_signals:
extrinsic:
gamma: 0.99
strength: 1.0
max_steps: 500000
time_horizon: 64
summary_freq: 10000
트레이닝 파일에 대한 자세한 정보는 다음 페이지를 보시면 좋습니다.
github.com/Unity-Technologies/ml-agents/blob/release_15_docs/docs/Training-Configuration-File.md
진행하도록 하겠습니다.
이제 다시 아나콘다를 켭니다.
미리 만들어둔 가상 환경을 활성화시키고
받아둔 파일 경로로 맞추어둡니다.
학습 프로그램이 구동시켜 봅니다.
경로를 바로 잡으셨으면 다음과 같이 타이핑합니다.
mlagents-learn config/ppo/rollerball_config.yaml --run-id=myRB01
정상 작동한다면 아래와 같이 작동됩니다.
유니티에서 플레이를 시켜 봅니다.
floor에 머티리얼 하나 넣었습니다. 구분이 안돼서 이건 알아서 적당히 해주세요
아마 아나콘다에는 처음 구동시키면 아래와 같이 표시될 겁니다.
중간 빨간 태투리 부분이 플레이 버튼을 눌러주세요라고, 나왔던 부분이고
플레이시키면 아래와 같이 진행됩니다.
한동안 교육이 됩니다. 시간이 필요합니다.
어느 정도 시간이 흐린 뒤(PC 성능에 따라 시간은 다릅니다.)
2021-04-05 21:09:43 INFO [stats.py:180] RollerBall. Step: 10000. Time Elapsed: 155.122 s. Mean Reward: 0.561. Std of Reward: 0.496. Training.
2021-04-05 21:12:11 INFO [stats.py:180] RollerBall. Step: 20000. Time Elapsed: 303.015 s. Mean Reward: 0.958. Std of Reward: 0.200. Training.
2021-04-05 21:14:31 INFO [stats.py:180] RollerBall. Step: 30000. Time Elapsed: 442.886 s. Mean Reward: 0.994. Std of Reward: 0.077. Training.
만 스텝을 진행하면 진행상황을 보여줍니다.
현제 제 PC 성능에서는 초기 교육에서는 3분 정도
이후 교육 정밀도가 올라가는 시점에서는 시간이 더욱 소요되고 있습니다.
추가로 Mean Reward를 통해서 교육이 잘 되고 있나를 확인하실 수 있습니다.
보상 쪽 코드만 좀 보도록 하겠습니다.
public override void OnActionReceived(ActionBuffers actionBuffers)
{
//학습을 위한, 학습된 정보를 해석하여 이동을 시킨다.
// Actions, size = 2
Vector3 controlSignal = Vector3.zero;
controlSignal.x = actionBuffers.ContinuousActions[0];
controlSignal.z = actionBuffers.ContinuousActions[1];
rBody.AddForce(controlSignal * forceMultiplier);
// Rewards
float distanceToTarget = Vector3.Distance(this.transform.localPosition, Target.localPosition);
//타겟을 찻을시 리워드점수를 주고, 에피소드를 종료시킨다.
// Reached target
if (distanceToTarget < 1.42f)
{
SetReward(1.0f);
EndEpisode();
}
//판 아래로 떨어지면 학습이 종료된다.
// Fell off platform
else if (this.transform.localPosition.y < 0)
{
EndEpisode();
}
}
보시면, 타깃에 접근하면 보상 수치를 1점을 주고,
외부로 떨어지면 보상 수치가 0점입니다.
처음만 스텝이 진행되는 동안 Mean Reward는 0.521 점 정도입니다.
만회 교육받으면서 절반 정도 성공한 듯 보입니다.
이후 진행되며 보상점수가 점점 좋아지는 걸 볼 수 있습니다.
3만 회부터는 0.994 점입니다. 거의 성공이라고 봐야겠죠
그런 만큼 정밀도를 올리는 교육에서 시감이 더욱 소요되고 있습니다.
4만 회에서는 오히려 보상 수치가 떨어졌습니다.
교육을 더 시킨다고 보상 수치가 늘어만 나는 건 아니네요
교육을 끝내는 방법은
파이썬에서 Ctrl + C 키를 누르거나(유니티 프로젝트 플레이도 자동으로 종료됩니다.)
유니티에서 플레이를 종료시키거나,
원하시는 방식으로 진행하시면 됩니다.
이제는 학습된 결과를 적용시켜볼 때입니다.
--run-id=myRB01
해당 아이디를 사용했어줘
ml-agents-release_15\results 폴더에 가면
태두리 쳐준 파일이 학습 결과 파일입니다.
적당히 이름을 바꿔 유니티 프로젝트로 가져다 두겠습니다.
저는 myRollerBall.onnx 라고 바꿔서 복사하겠습니다.
이후
RollerAgnet내부 컴포넌트 Behavior Parameters에 Model에 연결시켜줍니다.
아래 사진 참조
이제는 학습 프로그램을 구동시키지 말고,
그냥 플레이해봅니다.
우리가 만들 학습 데이터가 잘 적용됐고 타깃을 잘 찾아가는 모습을 볼 수 있습니다.
이번 학습은 여기까지!
다음 시간에는 요기까지 만든 내용으로 부터 파생해서
재미있는걸 이것저것을 해볼 계획입니다.
'유니티 > mlAgents' 카테고리의 다른 글
유니티 머신러닝 개발 ML Agents 8편, 목표 찾기 예제 개선. 2 floor 확장, 복잡한 바닥형태 태스트와 학습의 한계점 (0) | 2021.04.07 |
---|---|
유니티 머신러닝 개발 ML Agents 7편, 목표 찾기 예제 개선. 1 뷰잉변경, 회전제한과 스텝제한, 환경개선과 재교육 (3) | 2021.04.07 |
유니티 머신러닝 개발 ML Agents 5편, 목표찻기 예제 제작.1 목표찻기 유니티 프로그램 제작 (6) | 2021.04.06 |
유니티 머신러닝 개발 ML Agents 4편, 강화 학습시켜보고, 결과를 이용해 보기 (5) | 2021.04.05 |
유니티 머신러닝 개발 ML Agents 3편, ml agents 파이선 패키지 설치하기 (5) | 2021.04.04 |
댓글