반응형
블로그 이미지
개발자로서 현장에서 일하면서 새로 접하는 기술들이나 알게된 정보 등을 정리하기 위한 블로그입니다. 운 좋게 미국에서 큰 회사들의 프로젝트에서 컬설턴트로 일하고 있어서 새로운 기술들을 접할 기회가 많이 있습니다. 미국의 IT 프로젝트에서 사용되는 툴들에 대해 많은 분들과 정보를 공유하고 싶습니다.
솔웅

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

글 보관함

카테고리


반응형

오늘은 모델을 생성하고 Training 시키고 Evaluation까지 시키고 난 후 볼 수 있는 여러 정보들을 살펴 봤다.

 

우선 Reward Graph를 보면 Refresh 버튼 밑에 메뉴항목이 있다.

View in metrics와 View logs가 있는데..

 

일단 View in metrics로 가 보자.

 

그러면 Cloud Watch의 Total reward over time 페이지로 이동한다.

 

AWS Cloud Watch는 AWS 클라우드 서비스들에 대한 모니터링 정보를 제공하는 서비스이다.

 

Amazon CloudWatch is a monitoring service for AWS cloud resources and the applications you run on AWS. You can use Amazon CloudWatch to collect and track metrics, collect and monitor log files, set alarms, and automatically react to changes in your AWS resources.

 

이 Total Reward over time 페이지는 아래와 같다.

 

Reward Graph가 좀 더 자세하게 나오고 그 아래에는 뭔지 모를 4개의 탭이 있고 더 뭔지 모를 여러 정보들이 있다.

 

뭐 별로 눈길을 끄는게 없어서 다음으로 패스.

 

View logs를 클릭 해 봤다.

 

역시 AWS Cloudwatch 서비스 페이지로 넘어갔다.

 

 

 

 

여기에는 로그 정보들이 있다.

매일 코딩을 하다보면 어쩔 수 없이 뚫어져라 볼 수 밖에 없는 게 로그 정보들이라서 이건 좀 친숙하다.

 

 

우선 첫번째 링크는 Lamda로그인 것 같은데 여기엔 별 정보가 없었다.

 

두 번째 로그는 시뮬레이션 관련 로그인 것 같다.

이 정보들을 활용하는 법을 알면 유용한 정보일 수 있을 것 같다.

아직은 잘 몰라서 그냥 이런게 있다는 것만 알고 넘어간다.

 

마지막 세번째 링크가 Training 관련 로그이다.

 

여기엔 좀 뭔가 알아 먹을 것 같은 로그 정보들이 있다.

이건 직선 트랙에 디폴트 reward_function 을 사용한 트레이닝 로그인데 여기에 에피소드와 이터레이션 정보가 있다.

 

30분간 트레이닝을 시켰는데 마지막 에피소드는 372 이다.

아마 372번 훈련을 한 것이다.

 

1개의 iteration에는 20개의 에피소드가 있다. 

그래서 총 18개의 iteration이 있다.

 

각 에피소드 별로 Total Reward와 Steps 정보가 있다.

 

이 로그에는 대충 이런 정보들이 있다.

 

그 외에 이 로그 시작 부분에 각 종 환경 변수나 파라미터 정보들이 있다.

 

 

 

 

 

그 다음 Evaluation section에는 평가 결과 정보가 있다.

평가는 3번 하는 것 같다.

평가 작업은 계속 할 수 있는데 이 서비스는 별도의 요금을 내는 것 같아서 여러번 시도하지는 않았다.

 

그 다음 Training Configuration section에는 여러 config 정보를 볼 수 있다.

 

Reward function의 Show 버튼을 누르면 이 모델에서 사용한 Reward function을 볼 수 있다.

그리고 그 밑에 Action space 정보를 볼 수 있는 버튼이 있다.

 

Framewark 은 Tensorflow를 사용했고 Reinforcement learning algorithm은 PPO를 사용했다는 정보가 있다.

 

그리고 마지막은 Hyperparameter 정보들이 있다.

 

지금까지 직선 트랙에서 두 번 훈련 시켰다.

 

다음은 곡선이 들어간 트랙에서 훈련을 시켜보기로 했다.

 

 

 

 

 

 

반응형


반응형

본격적으로 AWS Deepracer를 시작했다.

첫번째 모델을 만들었다.

 

일단 트랙은 제일 간단한 것으로 선택 하고 Speed는 5로 선택.
직선도로니까 빠르게 달리게 만드는게 더 좋을 것 같아서.
나머지는 다 디폴트.


Reward_function도 그냥 디폴트 사용하고 시간은 30분
참고로 디폴트 함수는 아래와 같다.

 

def reward_function(params):
    '''
    Example of rewarding the agent to follow center line
    '''
    
    # Read input parameters
    track_width = params['track_width']
    distance_from_center = params['distance_from_center']
    
    # Calculate 3 markers that are at varying distances away from the center line
    marker_1 = 0.1 * track_width
    marker_2 = 0.25 * track_width
    marker_3 = 0.5 * track_width
    
    # Give higher reward if the car is closer to center line and vice versa
    if distance_from_center <= marker_1:
        reward = 1.0
    elif distance_from_center <= marker_2:
        reward = 0.5
    elif distance_from_center <= marker_3:
        reward = 0.1
    else:
        reward = 1e-3  # likely crashed/ close to off track
    
    return float(reward)

 

소스코드를 보니 트랙 중앙선 가까이 가면 점수(reward)를 더 많이 주는 간단한 로직이다.

30분 트레이닝 시키고 곧바로 Evaluate
결과는 조금 있다가…

 

 

 


이 첫번째 모델을 clone 해서 두번째 모델을 만들었다.
다 똑같고 reward function 함수만 내가 원하는 대로 조금 바꾸었다.

 

def reward_function(params):
    '''
    Example of rewarding the agent to follow center line
    '''
    reward=1e-3
    
    # Read input parameters
    track_width = params['track_width']
    distance_from_center = params['distance_from_center']
    steering = params['steering_angle']
    speed = params['speed']
    all_wheels_on_track = params['all_wheels_on_track']
    
    if distance_from_center >=0.0 and distance_from_center <= 0.03:
        reward = 1.0
    
    if not all_wheels_on_track:
        reward = -1
    else:
        reward = params['progress']
        
    # Steering penality threshold, change the number based on your action space setting
    ABS_STEERING_THRESHOLD = 15

    # Penalize reward if the car is steering too much
    if steering > ABS_STEERING_THRESHOLD:
        reward *= 0.8
        
    # add speed penalty
    if speed < 2.5:
        reward *=0.80
    
    return float(reward)

 

이전에 썼던 디폴트 함수와는 다르게 몇가지 조건을 추가 했다.
일단 중앙선을 유지하면 좀 더 점수를 많이 주는 것은 좀 더 간단하게 만들었다.
이 부분은 이전에 훈련을 했으니까 이 정도로 해 주면 되지 않을까?
그리고 아무 바퀴라도 트랙 밖으로 나가면 -1을 하고 모두 트랙 안에 있으면 progress 만큼 reward를 주었다.
Progress는 percentage of track completed 이다.
직진해서 결승선에 더 가까이 갈 수록 점수를 더 많이 따도록 했다.
이건 차가 빠꾸하지 않고 곧장 결승점으로 직진 하도록 만들기 위해 넣었다.
그리고 갑자기 핸들을 과하게 돌리면 차가 구르거나 트랙에서 이탈할 확률이 높으니 핸들을 너무 과하게 돌리면 점수가 깎이도록 했다. (15도 이상 핸들을 꺾으면 점수가 깎인다.)
그리고 속도도 너무 천천히 가면 점수를 깎는다.

속도 세팅이 최대 5로 만들어서 그 절반인 2.5 이하고 속도를 줄이면 점수가 깎인다.


이렇게 조건들을 추가하고 Training 시작.
이건 좀 복잡하니 트레이닝 시간을 1시간 주었다.

이 두개의 모델에 대한 결과는…

 

딱 보니 첫번째 디폴트 함수를 사용했을 때는 시간이 갈수록 결과가 좋게 나왔다.
그런데 두번째는 시간이 갈수록 실력이 높아지지는 않는 것 같다.


너무 조건이 여러개 들어가서 그런가?

 

 


생각해 보니 조건을 많이 넣는다고 좋은 것은 아닌것 같다.
일반적으로 코딩을 하다 보면 예외 상황을 만들지 않게 하기 위해 조건들을 아주 많이 주는 경향이 있는데 이 인공지능 쪽은 꼭 조건을 많이 줄 필요는 없을 것 같다.


앞으로 인공지능 쪽을 하다보면 일반 코딩에서의 버릇 중에 고칠 것들이 많을 것 같다.
Evaluation 결과를 보면 두개의 차이가 별로 없다. 
두 모델 모두 3번중 2번 완주 했고 완주시간도 비슷한 것 같다.
조건을 쪼금 더 준 Model 2 가 좀 더 낫긴 하네. (0.2 ~0.3 초 더 빠르다.)
다음은 곡선이 있는 다른 트랙으로 훈련을 시킬 계획이다.


그런데 곡선이 있는 트랙에서는 스피드가 무조건 빠르다고 좋은 건 아닌 것 같다.
내가 스피드를 5로 주었는데 Clone을 만들어서 할 때는 이 스피드를 조절하지 못하는 것 같다.


곡선 구간에서는 reward_function을 어떻게 주어야 하지?

반응형
이전 1 다음