기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
AWS DeepRacer 콘솔을 사용하여 AWS DeepRacer 모델을 훈련 및 평가하십시오.
강화 학습 모델을 훈련할 때는 AWS DeepRacer 콘솔을 사용할 수 있습니다. 콘솔에서는 훈련 작업을 생성하거나, 지원되는 프레임워크와 사용 가능한 알고리즘을 선택하거나, 보상 함수를 추가하거나, 훈련 설정을 구성합니다. 또한 시뮬레이터에서 진행되는 훈련을 지켜볼 수도 있습니다. 그 밖에 첫 번째 AWS DeepRacer 모델 훈련 에서 단계별 지침을 찾아보는 것도 가능합니다.
이번 단원에서는 AWS DeepRacer 모델을 훈련하여 평가하는 방법에 대해서 설명합니다. 또한 보상 함수를 생성하고 개선하는 방법과 행동 공간이 모델 성능에 미치는 영향, 그리고 하이퍼파라미터가 훈련 성능에 미치는 영향에 대해서도 살펴보겠습니다. 그 밖에 훈련 모델을 복제하여 훈련 세션을 연장하는 방법, 시뮬레이터를 사용해 훈련 성능을 평가하는 방법, 시뮬레이션에서 실제로 전환하는 데 따른 몇 가지 문제를 해결하는 방법에 대해서도 알아보는 기회가 될 것입니다.
주제
보상 함수 생성
보상 함수는 AWS DeepRacer 차량이 트랙의 한 위치에서 새로운 위치로 이동할 때 즉각적인 피드백(보상 또는 페널티 점수)을 표시합니다. 이 함수의 목적은 차량이 트랙을 따라 이동하면서 사고나 위반 없이 목적지에 빠르게 도달할 수 있도록 하는 데 있습니다. 바람직한 이동일 때는 행동이나 대상 상태에 더욱 높은 점수를 매깁니다. 하지만 잘못되거나 소모적인 이동일 때는 낮은 점수를 매깁니다. AWS DeepRacer 모델을 훈련할 때 유일하게 애플리케이션에게 고유한 부분이 바로 보상 함수입니다.
일반적으로 보상 함수는 마치 인센티브 플랜처럼 설계합니다. 인센티브 전략이 다르면 차량의 동작도 달라질 수 있습니다. 차량 주행 속도를 높이려면 차량이 트랙을 따라 주행할 수 있도록 함수에서 보상을 제공해야 합니다. 차량이 한 바퀴를 완주하는 데 너무 오랜 시간이 걸리거나 트랙에서 벗어날 경우에는 함수가 페널티를 부과해야 합니다. 지그재그 주행 패턴을 피하려면 트랙의 직선 구간에서 조향이 비교적 적은 차량에게 보상을 제공해야 합니다. 차량이 waypoints로 측정되는 특정 이정표를 통과할 때는 보상 함수가 양의 점수를 제공하기도 합니다. 이를 통해 차량이 대기하거나 잘못된 방향으로 주행하는 경우를 줄일 수 있습니다. 또한 트랙 조건을 고려하여 보상 함수를 변경할 가능성도 높습니다. 하지만 보상 함수가 환경에 따른 정보를 더욱 많이 고려할수록 훈련된 모델은 과잉 적합으로 인해 보편성이 떨어질 가능성이 더욱 높아집니다. 이때는 행동 공간을 탐색하여 모델의 보편성을 높일 수 있습니다.
인센티브 플랜은 주의해서 생각하지 않으면 역효과라는 의도치 않은 결과
보상 함수를 생성할 때는 기본 시나리오에 대한 간단한 함수로 시작하는 것이 좋습니다. 이후 더 많은 행동을 처리할 수 있도록 함수를 개선할 수 있습니다. 이제 몇 가지 간단한 보상 함수를 살펴보겠습니다.
간단한 보상 함수 예제
먼저 가장 기본적인 상황을 가정하여 보상 함수를 빌드할 수 있습니다. 가장 기본적인 상황이란 처음부터 끝까지 트랙에서 벗어나지 않고 직선 트랙을 주행하는 것을 말합니다. 이 시나리오에서 보상 함수 로직은 on_track
및 progress
만 고려합니다. 시험 삼아 다음 로직으로 시작할 수 있습니다.
def reward_function(params): if not params["all_wheels_on_track"]: reward = -1 else if params["progress"] == 1 : reward = 10 return reward
이 로직은 트랙에서 벗어났을 때 에이전트에게 페널티를 부과합니다. 또한 결승선까지 주행하면 에이전트에게 보상을 제공합니다. 이는 지정된 목표를 달성하는 데 합리적입니다. 그러나 에이전트가 트랙에서 역주행하는 것을 포함해 출발선과 결승선 사이를 자유롭게 돌아 다닙니다. 훈련을 완료하는 데 시간이 오래 걸릴 뿐만 아니라 훈련된 모델을 실제 차량에 배포하면 주행 효율성이 떨어질 수도 있습니다.
실제로, 훈련 과정에서 하나씩 배워갈 수 있을 때 에이전트는 보다 효율적으로 배울 수 있습니다. 이는 보상 함수가 트랙을 따라 단계별로 좀 더 작은 보상을 제공해야 함을 의미합니다. 에이전트가 직선 트랙을 주행하도록 하기 위해 다음과 같이 보상 함수를 개선할 수 있습니다.
def reward_function(params): if not params["all_wheels_on_track"]: reward = -1 else: reward = params["progress"] return reward
이 함수를 사용하면 에이전트는 결승선에 더 가까이 갈수록 더 큰 보상을 얻습니다. 따라서 역주행하는 비생산적인 시도가 줄어들거나 없어집니다. 일반적으로 우리는 보상 함수가 작용 영역 전체에서 보상을 보다 균일하게 분산시키길 원합니다. 효과적인 보상 함수를 생성하는 일은 어려울 수 있습니다. 따라서 처음에는 간단한 함수부터 시작하여 점차 함수를 개선하는 것이 바람직합니다. 체계적인 실험을 통해 함수를 더욱 견고하게, 그리고 효율적으로 개선할 수 있습니다.
보상 함수 개선
간단한 직선 트랙에서 AWS DeepRacer 모델을 성공적으로 훈련했으면 AWS DeepRacer 차량(가상 또는 물리) 이 트랙을 벗어나지 않고 제대로 주행할 수 있습니다. 차량이 순환 트랙에서 주행하도록 두면 트랙을 벗어납니다. 보상 함수가 트랙을 따라 회전해야 하는 작업을 무시합니다.
차량이 이러한 행동을 처리할 수 있으려면 보상 함수를 개선해야 합니다. 보상 함수는 에이전트가 허용되는 회전을 하면 보상을 제공하고, 에이전트가 잘못된 회전을 하면 페널티를 부과해야 합니다. 그런 다음에는 다른 훈련 단계를 시작할 준비가 된 것입니다. 이전 교육을 활용하려면 이전에 훈련된 모델을 복제하여 새 교육을 시작함으로써 이전에 학습한 지식을 전달할 수 있습니다. 이전에 학습한 패턴에 따라 점점 더 복잡한 환경에서 주행하도록 AWS DeepRacer 차량을 훈련하기 위해 보상 함수에 기능을 점진적으로 추가할 수 있습니다.
고급 보상 함수는 다음 예를 참조하십시오.
견고한 모델 훈련을 위한 행동 공간 탐색
일반적으로 모델을 다양한 환경에 적용하려면 모델을 최대한 견고하게 훈련해야 합니다. 여기에서 견고한 모델이란 광범위한 트랙 형상 및 조건에 적용할 수 있는 모델을 말합니다. 견고한 모델이라고 해서 “스마트”한 것은 아닙니다. 보상 함수는 환경에 따른 명시적 정보를 추가할 능력이 없기 때문입니다. 오히려 모델은 훈련된 환경과 비슷한 환경일 때만 적용될 가능성이 높습니다.
환경에 따른 정보를 보상 함수에 명시적으로 추가하는 일은 피처 엔지니어링 분야입니다. 피처 엔지니어링은 훈련 시간을 줄이는 데 효과적일 뿐만 아니라 특정 환경에 맞춘 솔루션에서도 유용할 수 있습니다. 그렇더라도 일반적으로 적용되는 모델을 훈련하려면 피처 엔지니어링을 많이 시도해서도 안 됩니다.
예를 들어 원형 트랙에서 모델을 훈련하면서 이러한 지오메트리 속성을 보상 함수에 명시적으로 추가했다면 원형이 아닌 트랙에 적용할 수 있는 모델은 기대하기 어렵습니다.
이때 보상 함수를 최대한 단순하게 유지하면서 동시에 모델을 최대한 견고하게 훈련하려면 어떻게 해야 할까요? 첫째, 에이전트의 모든 행동이 일어나는 행동 공간을 탐색하는 방법이 있습니다. 둘째, 기본 훈련 알고리즘의 하이퍼파라미터를 가지고 실험하는 방법이 있습니다. 두 방법을 모두 사용하는 경우가 많습니다. 여기에서는 행동 공간을 탐색하여 AWS DeepRacer 차량 모델을 견고하게 훈련하는 방법을 중심으로 설명하겠습니다.
AWS DeepRacer 모델을 훈련할 때 행동(a
)은 속도(초당 t
미터)와 조향 각도(s
도)의 조합으로 나타납니다. 에이전트의 속도와 조향 각도 범위는 에이전트의 행동 공간에 따라 다릅니다. (v1, .., vn)
에서 속도 수가 m
이고, (s1, ..,
sm)
에서 조향 각도 수가 n
인 행동 공간이 있다고 가정할 경우 행동 공간에서 일어날 수 있는 행동은 m*n
입니다.
a1: (v1, s1) ... an: (v1, sn) ... a(i-1)*n+j: (vi, sj) ... a(m-1)*n+1: (vm, s1) ... am*n: (vm, sn)
(vi,
sj)
의 실제 값은 vmax
와 |smax|
의 범위에 따라 다르며, 균일하게 분산되지도 않습니다.
AWS DeepRacer 모델을 훈련하거나 반복할 때마다 먼저 n
, m
, vmax
, 및 |smax|
를 지정하거나, 혹은 기본값을 사용하는 데 동의해야 합니다. 이 선택에 따라 AWS DeepRacer 서비스는 에이전트가 훈련에서 선택할 수 있는 행동을 생성합니다. 이렇게 생성된 행동은 행동 공간에서 균일하게 분산되지 않습니다.
일반적으로 행동 수가 많고, 행동 범위가 클수록 에이전트가 회전 각도 또는 방향이 불규칙한 곡선 트랙 등 다양한 트랙 조건에 대응할 수 있는 가능성 또는 옵션도 늘어납니다. 에이전트에 사용할 수 있는 옵션이 늘어나면 트랙 변화에 즉시 대처할 수 있는 능력도 커집니다. 결과적으로 단순한 보상 함수를 사용할 때조차 훈련된 모델을 더욱 광범위하게 적용할 수 있는 효과를 기대할 수 있습니다.
예를 들어 에이전트는 조잡한 행동 공간에서도 적은 수의 속도와 조향 각도를 사용해 직선 구간에 대처하는 방법을 빠르게 학습할 수 있습니다. 곡선 구간에서는 행동 공간이 이렇게 조잡하면 에이전트가 회전하면서 오버슈트를 일으켜 트랙에서 벗어날 가능성이 높습니다. 이는 속도 또는 조향 각도를 조정하기 위해 사용할 수 있는 옵션이 충분하지 않기 때문입니다. 이때는 속도 수 또는 조향 각도 수를, 아니면 둘 다 늘려서 에이전트가 트랙을 벗어나지 않으면서 곡선 구간에 대처할 수 있는 능력을 높여야 합니다. 마찬가지로 에이전트가 지그재그 방식으로 이동할 경우에는 조향 각도 수를 늘려서 임의 단계에서 지나친 방향 전환을 줄일 수 있습니다.
행동 공간이 너무 크면 훈련 성능이 떨어질 수 있습니다. 행동 공간을 탐색하는 데 오랜 시간이 걸리기 때문입니다. 따라서 모델을 일반적으로 적용할 수 있는 이점과 훈련 성능 요건 사이에 균형을 안정적으로 유지해야 합니다. 이러한 최적화는 체계적인 실험이 수반됩니다.
체계적인 하이퍼파라미터 튜닝
모델 성능을 개선하려면 훈련 프로세스의 효과를 높이는 방법이 있습니다. 예를 들어 견고한 모델을 얻으려면 훈련할 때 행동 공간에 다소 균일하게 분산된 샘플을 에이전트에게 제공해야 합니다. 이를 위해서는 탐색과 활용이 충분하게 혼합되어야 합니다. 여기에 영향을 미치는 변수로는 사용되는 훈련 데이터의 크기(number of episodes between each
training
및 batch size
)와 에이전트의 학습 속도(learning rate
), 그리고 탐색 구간(entropy
)이 있습니다. 또한 실용적인 훈련을 위해 학습 프로세스의 속도를 높여야 할 수도 있습니다. 여기에 영향을 미치는 변수로는 learning rate
, batch size
, number of
epochs
및 discount factor
가 있습니다.
훈련 프로세스에 영향을 미치는 변수는 훈련 하이퍼파라미터라고 불립니다. 이러한 알고리즘 속성은 기본 모델의 속성이 아닙니다. 아쉽지만 하이퍼파라미터는 기본적으로 실증적입니다. 최적의 값은 실제로 알려져 있지 않기 때문에 체계적인 실험을 통해서 최적의 값을 도출해야 합니다.
조정을 통해 AWS DeepRacer 모델의 훈련 성능을 튜닝할 수 있는 하이퍼파라미터에 대해 얘기하기 전에 먼저 다음 용어 정의에 대해 알아보겠습니다.
- 데이터 포인트
-
경험이라고도 불리는 데이터 포인트는 (s,a,r,s’)와 같은 튜플을 말합니다. 여기에서 s는 카메라에서 수집되는 관측 결과(상태)를, a는 차량 행동을, r은 차량 행동에 따라 예상되는 보상을, 그리고 s’는 행동 이후 새로운 관측 결과를 의미합니다.
- 에피소드
-
에피소드는 차량이 임의 출발점에서 시작하여 트랙을 완주하거나 트랙에서 벗어나 주행을 종료할 때까지 걸리는 기간을 말합니다. 이러한 에피소드를 통해 연속된 경험이 구체화됩니다. 에피소드에 따라 길이가 달라질 수 있습니다.
- 경험 버퍼
-
경험 버퍼는 훈련 과정에서 다양한 길이로 고정된 다수의 에피소드를 지나면서 수집 및 정리된 여러 데이터 포인트로 구성됩니다. AWS DeepRacer에서는 AWS DeepRacer 차량에 장착된 카메라를 통해 수집된 이미지와 차량의 행동이 여기에 해당하며, 기본(정책 및 가치) 신경망을 업데이트할 목적으로 입력 값을 가져오는 소스의 역할을 합니다.
- Batch
-
배치는 경험이 순서대로 나열된 목록으로 정책망 가중치를 업데이트하는 데 사용됩니다. 여기에서 경험이란 일정 시간을 지나면서 실시한 시뮬레이션의 일부를 말합니다. 배치는 경험 버퍼의 하위 집합입니다.
- 훈련 데이터
-
훈련 데이터는 경험 버퍼에서 무작위로 샘플링되는 배치 집합으로서 정책망 가중치를 훈련하는 데 사용됩니다.
하이퍼파라미터 | 설명 |
---|---|
Gradient descent batch size(경사 하강 배치 크기) |
경험 버퍼에서 무작위로 샘플링된 최근 차량 경험의 수로서 기본 딥 러닝 신경망 가중치를 업데이트하는 데 사용됩니다. 무작위 샘플링은 입력 데이터에 고유한 상관 관계를 줄이는 데 효과적입니다. 신경망 가중치를 더욱 안정적으로 업데이트하려면 배치 크기를 높이십시오. 단, 훈련이 길어지거나 느려질 수 있다는 점은 알고 있어야 합니다.
|
에포크 수 |
경사 하강 과정에서 신경망 가중치를 업데이트할 목적으로 훈련 데이터를 통하는 패스(pass) 수입니다. 훈련 데이터는 경험 버퍼의 무작위 샘플에 해당합니다. 더욱 안정적인 업데이트를 원한다면 에포크 수를 늘리십시오. 단, 훈련이 느려질 수 있습니다. 배치 크기가 작을 때는 에포크도 줄여서 사용할 수 있습니다.
|
Learning rate(학습 속도) |
업데이트할 때마다 새로운 가중치의 일부는 경사 하강(또는 상승) 기여도에서 가져오고, 나머지는 기존 가중치 값에서 가져올 수 있습니다. 학습 속도는 신경망 가중치에 대한 경사 하강(또는 상승) 업데이트의 기여도를 제어합니다. 학습 속도를 높여서 경사 하강 기여도를 늘리면 훈련 속도가 빨라지지만 학습 속도가 너무 높을 경우 예상하는 보상이 수렴되지 않을 수도 있다는 점을 알고 있어야 합니다.
|
Entropy |
정책 분포에 무작위성을 추가할 시점을 결정할 때 사용되는 불확실성입니다. 불확실성이 추가되면 AWS DeepRacer 차량이 행동 공간을 더욱 넓게 탐색하는 데 유용합니다. 반면, 엔트로피 값이 커지면 차량이 행동 공간을 더욱 철저하게 탐색할 수 있습니다.
|
Discount factor(할인 계수) |
할인 계수는 예상되는 보상에 대한 미래 보상의 기여도를 지정합니다. 할인 계수 값이 클수록 차량이 이동 시 고려하는 기여도가 더욱 멀어지기 때문에 훈련 속도가 느려집니다. 예를 들어 할인 계수가 0.9이면 차량이 이후 10 단계의 보상을 고려하여 이동합니다. 할인 계수가 0.999이면 차량이 이후 1,000 단계의 보상을 고려하여 이동합니다. 권장되는 할인 계수 값은 0.99, 0.999 및 0.9999입니다.
|
손실 유형 |
신경망 가중치를 업데이트하는 데 사용되는 목적 함수의 한 가지 유형입니다. 훌륭한 훈련 알고리즘은 에이전트의 전략에 증분 변경을 적용하여 임의 작업을 수행하는 단계에서 보상을 늘리기 위한 전략적 작업을 수행하는 단계로 점진적으로 나아가도록 해야 합니다. 그러나 너무 크게 변경되면 훈련이 불안정해지고 결국 에이전트가 학습하지 못할 수 있습니다. Huber 손실
|
Number of experience episodes between each policy-updating iteration(각 정책 업데이트 반복 간 경험 에피소드의 수) | 정책망 가중치를 학습할 목적으로 훈련 데이터를 가져올 때 사용되는 경험 버퍼의 크기입니다. 경험 에피소드는 에이전트가 임의 출발점에서 시작하여 트랙을 완주하거나 트랙에서 벗어나 주행을 종료할 때까지 걸리는 기간을 말합니다. 이 에피소드는 연속된 경험으로 구성됩니다. 에피소드에 따라 길이가 달라질 수 있습니다. 간단한 강화 학습 문제일 때는 작은 크기의 경험 버퍼로도 충분할 수 있어서 학습 속도가 빠릅니다. 하지만 국소 최대값이 많아서 강화 학습 문제가 더욱 복잡해지면 경험 버퍼의 크기가 커야만 비상관 데이터 포인트를 더욱 많이 제공할 수 있습니다. 이 경우 훈련 속도가 느려지지만 더욱 안정적입니다. 권장 값은 10, 20 및 40입니다.
|
AWS DeepRacer 교육 작업 진행 상황 조사
훈련 작업을 시작하고 에피소드당 보상 및 트랙 완료의 훈련 지표를 조사하여 모델의 훈련 작업 성능을 알아낼 수 있습니다. AWS DeepRacer 콘솔에서 지표는 다음 그림처럼 보상 그래프에 나타납니다.
에피소드당 획득한 보상, 반복당 평균 보상, 에피소드당 진행 상황, 반복당 평균 진행 상황 또는 이들의 조합을 볼 수 있도록 선택할 수 있습니다. 이렇게 하려면 보상 그래프 하단에서 보상(에피소드, 평균) 또는 진행률(에피소드, 평균) 스위치를 전환하십시오. 에피소드당 보상과 진행 상황은 다른 색깔의 산점도로 표시됩니다. 평균 보상과 트랙 완료는 선표본점으로 표시되며 첫 번째 반복 이후 시작됩니다.
보상의 범위는 그래프의 왼쪽에 나타나며 진행 상황의 범위(0-100)은 오른쪽에 나타납니다. 훈련 지표의 정확한 값을 읽으려면, 그래프의 데이터 포인트 근처로 마우스를 옮깁니다.
훈련이 진행 중일 때는 그래프가 10초마다 자동으로 업데이트됩니다. 새로 고침 버튼을 선택하여 지표 디스플레이를 수동으로 업데이트할 수 있습니다.
평균 보상과 트랙 완료가 수렴하는 경향을 보이면 훈련 작업이 잘 된 것입니다. 특히 에피소드당 진행 상황이 계속해서 100%에 도달하고 보상이 수준을 벗어나면 모델의 수렴 가능성이 높습니다. 그렇지 않으면, 모델을 복제하고 다시 훈련합니다.
새로운 훈련 패스를 시작하기 위해 훈련된 모델 복제
이전에 훈련된 모델을 복제하여 새로운 훈련을 시작하면 훈련 효율성을 개선할 수 있습니다. 이를 위해서는 이전에 학습된 지식을 사용할 수 있도록 하이퍼파라미터를 수정합니다.
이번 단원에서는 AWS DeepRacer 콘솔을 사용하여 훈련된 모델을 복제하는 방법에 대해서 알아보겠습니다.
AWS DeepRacer 콘솔을 사용하여 강화 학습 모델 훈련을 반복하는 방법
-
아직 로그인하지 않았다면 AWS DeepRacer 콘솔에 로그인합니다.
-
모델 페이지에서 학습된 모델을 선택한 다음 작업 드롭다운 메뉴 목록에서 복제를 선택합니다.
-
Model details(모델 세부 정보)에서 다음 작업을 수행합니다.
-
복제된 모델의 이름을 생성하지 않으려면 모델 이름에
RL_model_1
을 입력합니다. -
선택적으로 Model description - optional(모델 설명 - 옵션)에 복제한 모델에 대한 설명을 입력합니다.
-
-
환경 시뮬레이션에서 다른 트랙 옵션을 선택합니다.
-
Reward function(보상 함수)에서 사용 가능한 보상 함수 예제 하나를 선택합니다. 보상 함수를 수정합니다. 예를 들어 조향 각도를 수정합니다.
-
Algorithm settings(알고리즘 설정)을 확장하여 다른 옵션들도 바꿔봅니다. 예를 들어 Gradient descent batch size(경사 하강 배치 크기) 값을 32에서 64로 변경하거나, 혹은 Learning rate(학습 속도)를 높여 훈련 속도를 높입니다.
-
Stop conditions(중지 조건)의 여러 가지 옵션을 사용하여 실험합니다.
-
그런 다음 Start training(훈련 시작)을 선택하고 새로운 훈련을 시작합니다.
일반적으로 견고한 기계 학습 모델을 훈련하는 것과 마찬가지로, 최고의 솔루션을 찾기 위해서는 체계적인 실험을 수행해야 합니다.
시뮬레이션에서 AWS DeepRacer 모델 평가
모델 평가는 훈련된 모델의 성능을 테스트하는 것입니다. AWS DeepRacer에서 표준 성능 지표는 3바퀴를 연속해서 완주하는 데 걸리는 평균 시간입니다. 임의의 두 모델을 가지고 이러한 지표를 사용했을 때 에이전트 하나가 동일한 트랙에서 더욱 빠르게 완주한다면 나머지 하나보다 더욱 성능이 높은 것입니다.
일반적으로 모델 평가는 다음과 같은 작업이 수반됩니다.
-
평가 작업을 구성하여 시작합니다.
-
작업 실행 중 평가 진행 과정 관찰. 이 작업은 AWS DeepRacer 시뮬레이터에서 실행할 수 있습니다.
-
평가 작업 완료 후 평가 요약 검사. 평가 작업은 진행 도중 언제든지 종료할 수 있습니다.
참고
평가 시간은 선택한 기준에 따라 달라집니다. 모델이 평가 기준을 충족하지 않는 경우 최대 20분에 도달할 때까지 평가가 계속 진행됩니다.
-
선택 사항이지만 평가 결과를 관련 AWS DeepRacer 리더보드에 제출합니다. 리더보드의 순위를 통해 자신의 모델 성능을 다른 참가자와 비교해 알아볼 수 있습니다.
물리적인 트랙에서 AWS DeepRacer 차량을 주행하면서 AWS DeepRacer 모델을 테스트할 때는 AWS DeepRacer 차량 작동 단원을 참조하십시오.
실제 환경에 대한 AWS DeepRacer 모델 훈련 최적화
훈련된 모델의 실제 성능에 영향을 미치는 요인은 행동 공간, 보상 함수, 훈련에 사용되는 하이퍼파라미터, 차량 보정, 실제 트랙 조건 등 매우 많습니다. 그 밖에도 시뮬레이션은 실제 환경에 대한 (종종 대략적인) 근사값일 뿐입니다. 모델을 시뮬레이션에서 훈련한 후 실제로 적용하여 만족스러운 성능을 얻기 어려운 이유도 바로 여기에 있습니다.
모델을 훈련하여 실제 환경에서도 견고한 성능을 얻으려면 보상 함수, 행동 공간 및 하이퍼파라미터 탐색을 비롯해 시뮬레이션 평가, 실제 환경 테스트를 수없이 반복해야 하는 경우가 많습니다. 특히 마지막 단계에서는 시뮬레이션에서 실제 환경으로(sim2real) 전환하는 작업이 수반되어 번거롭게 느낄 수도 있습니다.
다음은 sim2real 과제를 해결할 때 주의해야 할 사항입니다.
-
차량이 적절하게 보정되어 있는지 확인하십시오.
보정 확인은 시뮬레이션 환경은 실제 환경을 부분적으로 나타낼 가능성이 매우 높기 때문에 중요한 절차입니다. 더욱이 에이전트는 각 단계마다 카메라의 이미지에서 수집되는 현재 트랙 조건을 기준으로 행동합니다. 따라서 충분히 멀리 보지 못해서 빠른 속도로 경로를 계획할 수 없습니다. 이러한 문제를 해결하기 위해 시뮬레이션은 속도와 조향 각도를 제한합니다. 또한 훈련된 모델이 실제 환경에서 유효하게 적용되려면 차량이 실제 환경과 기타 시뮬레이션 설정에 맞춰 적절하게 보정되어야 합니다. 차량 보정에 대한 자세한 내용은 AWS DeepRacer 차량을 보정하십시오. 단원을 참조하십시오.
-
기본 모델을 사용해 차량을 먼저 테스트하십시오.
AWS DeepRacer 차량은 사전 훈련된 모델이 추론 엔진에 탑재되어 제공됩니다. 자신의 모델을 실제 환경에서 테스트하려면 먼저 차량이 기본 모델을 사용했을 때 타당한 성능을 발휘하는지 확인하십시오. 그렇지 않다면 물리적 트랙 환경을 점검해야 합니다. 물리적 트랙이 잘못 빌드되어 있다면 성능이 떨어질 가능성이 높습니다. 이때는 테스트를 시작하거나 재개하기 전에 트랙을 재구성하거나 수정해야 합니다.
참고
AWS DeepRacer 차량을 구동할 때는 보상 함수를 간접적으로 호출하지 않고 훈련된 정책망에 따라 행동이 추론됩니다.
-
시뮬레이션에서 모델 유효성을 확인하십시오.
모델이 실제 환경에서 성능을 발휘하지 못한다면 모델 또는 트랙에 문제가 있을 가능성이 높습니다. 근본 원인을 규명하려면 먼저 시뮬레이션에서 모델을 평가하여 시뮬레이션 에이전트가 트랙을 벗어나지 않고 1바퀴 이상 완주하는지 확인해야 합니다. 평가할 때는 시뮬레이터에서 에이전트의 궤적을 관측하면서 보상 수렴을 검사합니다. 시뮬레이션 에이전트가 주춤거리지 않고 한 바퀴를 완주하면서 보상이 최대값에 도달하면 모델에는 문제가 없을 가능성이 높습니다.
-
모델을 과도하게 훈련하지 마십시오.
모델이 시뮬레이션에서 일관적으로 트랙을 완주하는 데도 훈련을 계속하면 모델 과잉 적합의 원인이 됩니다. 과도하게 훈련된 모델은 실제 환경에서 성능을 발휘하지 못합니다. 시뮬레이션 트랙과 실제 환경 사이에서 편차가 조금만 발생해도 대처하지 못하기 때문입니다.
-
반복할 때마다 여러 모델을 사용하십시오.
일반적인 훈련 세션에서는 과소 적합과 과잉 적합 사이에서 다양한 모델이 생성됩니다. 적합한 모델에 대한 사전 기준이 없기 때문에 에이전트가 시뮬레이터에서 한 바퀴 완주하는 시점부터 두 바퀴 이상 일관적으로 순환하는 시점 사이에서 모델 후보를 몇 개 선정해야 합니다.
-
처음에는 저속으로 시작하여 조금씩 주행 속도를 높이면서 테스트하십시오.
차량에 배포할 모델을 테스트할 때는 처음에 최저 속도 값으로 시작합니다. 예를 들어 테스트 속도 제한을 훈련 속도 제한의 10% 미만으로 설정할 수 있습니다. 그런 다음 차량이 이동하기 시작할 때까지 테스트 속도를 조금씩 높입니다. 디바이스 제어 콘솔에서 차량을 보정할 때 테스트 속도 제한도 설정합니다. 예를 들어, 차량이 너무 빠를 경우, 즉 속도가 시뮬레이터의 훈련 속도를 초과하면 모델이 실제 트랙에서 성능을 제대로 발휘하지 못할 가능성이 높습니다.
-
여러 출발점에서 차량을 사용해 모델을 훈련하십시오.
모델은 시뮬레이션에서 특정 경로를 학습하기 때문에 트랙에서 자신의 위치에 민감할 수 있습니다. 따라서 트랙 경계 내 여러 위치(왼쪽부터 중앙을 거쳐 오른쪽까지)에서 차량 테스트를 시작하여 모델이 어느 위치에서 성능을 발휘하는지 살펴보아야 합니다. 대부분 모델은 차량을 흰색 라인 중 하나의 한쪽 측면에 가깝게 유지하려는 경향이 있습니다. 차량 경로를 분석하려면 차량의 위치(x, y)를 시뮬레이션부터 단계별로 구분하여 차량이 실제 환경에서 이동할 가능성이 높은 경로를 식별하는 것이 좋습니다.
-
처음에는 직선 트랙으로 테스트하십시오.
직선 트랙은 곡선 트랙과 비교해 탐색하기 훨씬 쉽습니다. 직선 트랙부터 테스트를 시작하면 성능이 저조한 모델부터 빠르게 제거하는 데 유용합니다. 차량이 직선 트랙을 따라 거의 주행하지 못하면 곡선 트랙에서도 성능을 발휘하지 못합니다.
-
차량이 여러 행동 중 한 가지 유형만 보이는 동작이 있는지 주의하여 지켜보십시오.
예를 들어, 조향이 왼쪽으로만 치우치는 등 차량이 여러 행동 중 한 가지 유형만 보일 때는 모델이 과잉 적합이거나 과소 적합일 가능성이 높습니다. 임의의 모델 파라미터로 훈련을 지나치게 많이 반복하면 모델에 과잉 적합이 일어날 수 있습니다. 반대로 반복이 너무 적으면 과소 적합이 일어날 수 있습니다.
-
따라서 차량이 트랙 경계를 따라 경로를 수정할 수 있는지 지켜보십시오.
차량이 트랙 경계에 근접할 때 경로를 스스로 수정할 수 있다면 우수한 모델이라고 할 수 있습니다. 훈련이 잘 된 모델은 대부분 경로를 스스로 수정할 수 있습니다. 차량이 두 트랙 경계에서 스스로 경로를 수정할 때 더욱 견고하고 품질이 높은 모델이라고 할 수 있습니다.
-
불규칙한 차량 동작 유무를 주의하여 지켜보십시오.
정책 모델은 임의 상태에서 행동일 보일 수 있는 확률 분포를 나타냅니다. 효과적으로 훈련된 모델이 추론 엔진에 탑재되어 있다면 차량은 모델 지시에 따라 한 번에 한 단계씩 가장 유망한 행동을 선택합니다. 행동 확률이 균일하게 분포한다면 차량이 동일하거나 거의 비슷한 확률의 행동을 보일 수 있습니다. 이는 불규칙한 주행 동작의 원인이 됩니다. 예를 들어 차량이 직선 구간을 주행하는 경우가 많고(예를 들어, 주행 시간의 절반 이상) 다른 때는 불필요한 회전을 한다면 모델이 과소 적합이거나 과잉 적합입니다.
-
차량이 여러 회전 중 한 가지 유형(왼쪽 또는 오른쪽)만 보이는지 주의하여 지켜보십시오.
차량이 지나치게 왼쪽으로 회전하지만 오른쪽으로 조향하지 못하는 경우, 혹은 마찬가지로 차량이 지나치게 오른쪽으로 회전하지만 왼쪽으로 조향하지 못한다면 차량의 조향 각도를 주의하여 보정하거나 재보정해야 합니다. 또한 테스트 과정에서 물리적 설정에 가까운 값으로 훈련된 모델을 사용하는 것도 좋은 방법입니다.
-
차량이 갑자기 회전하거나 트랙에서 벗어나는지 주의하여 지켜보십시오.
차량이 대부분 경로를 따라 정확하게 이동하다 갑자기 트랙을 이탈한다면 주변 환경에 주의를 분산시키는 요인이 있을 가능성이 높습니다. 가장 자주 발생하는 분산 요인으로는 예상하지 못하거나 의도하지 않은 빛 반사가 있습니다. 이때는 트랙 주위에 장벽을 설치하거나 그 밖에 밝은 빛을 줄일 수 있는 수단을 사용하십시오.