Policy Gradient
가중치의 역할
- 리턴이 높은 궤적을 만들게 하고 리턴이 낮은 궤적은 적게 만드는 정책을 학습함
높은 분산
- 개별 궤적의 총 보상을 사용하며 분산이 높아서 학습이 불안정해짐
- 분산이 높다는 것은 올라갔다 내려갔다 한다는 것. 학습이 불안정할 수 밖에 없음.
인과성(낮은 분산을 위한)
- 인과성에 따라 미래의 데이터만 사용하면 분산이 줄어든다.
- 현재 시점의 정책은 미래의 보상에만 영향을 주고 과거의 보상에는 영향을 주지 못함
베이스라인(낮은 분산을 위한)
- 리턴에서 베이스라인을 빼면 분산이 줄어든다.
- 리턴의 평균은 최적의 베이스라인은 아니지만 좋은 편
- 베이스라인은 기댓값이 0이라 편향이 생기지 않음
러너 (Runner)
- 러너는 에이전트와 환경을 생성해서 추론 및 학습을 수행
- 에이전트 생성 : 액터, 정책, 학습자, 데이터셋도 생성
- 환경 생성
- 추론/학습모드에 따라 에이전트 실행
- 추론 모드
- 학습된 정책 모델을 읽어서 환경 루프를 한 개 생성하고 실행
- 학습 모드
- 환경 루프 생성 : 액터와 환경을 전달해서 생성 (알고리즘에 따라 환경 루프를 여러 개 생성하도록 확장할 수 있다)
- 환경 루프를 실행하고 반환 받은 결과를 이용해서 에이전트의 데이터셋에 데이터를 추가하고 정책을 학습시킨다.
- 이 과정을 정해진 환경 스텝만큼 반복
init
- Console Logger, Logger, Tensorboard Logger 생성
- Unique Token 생성
- Config SimpleNamespace 객체 생성 및 파일 저장
- 훈련 step/episode 0으로 초기화
_sanity_check_config
- GPU 가용 여부에 따라 use_cuda 설정 확인
- GPU가 없는데 use_cuda가 True이면 강제로 False로 변경하고 warning
run
- 환경, 버퍼 정보, 에이전트 생성 및 모델 cuda 타입 변경
- 추론 모드 : 모델 로딩 및 test() 실행
- 훈련 모드 : 체크포인트 경로가 지정되어 있으면 모델 복구 후 train() 실행
train
- 환경 루프를 생성
- 최대 환경 실행 스텝만큼 환경 루프를 실행하면서 데이터 수집하고 학습
test
- 환경 루프를 생성해서 최대 추론 모드 에피소드 수 만큼 실행
load
- 추론 모드 : 지정된 경로에서 모델 로딩(agent.load()호출)
save
- Model/Optimizer Checkpoint 저장
- agent.save() 호출
restore
- 체크포인트 파일에서 다음과 같은 방법으로 모델을 복구
- 체크포인트 디렉토리에 있는 모든 checkpoint 파일에서 train step 정보를 추출
- 설정 값 self.config.load_step=0이면, 가장 최근에 저장한 checkpoint 파일로 복구(즉, step이 가장 큰 파일)
- 설정 값 self.config.load_step이 0이 아니면, load_step과 가장 값이 가까운 checkpoint 파일로 복구(즉, load_step과 가장 가까운 step파일)
환경 루프
- 환경 루프에서 액터는 환경과 상호작용
- 지정된 타임 스텝 또는 에피소드 수 만큼 실행
- 추론 모드
- 액터와 환경을 상호작용하면서 렌더링
- 학습 모드
- 액터는 트랜지션 데이터를 자신의 RolloutBuffer에 저장
트랜지션 데이터
- 환경 루프에서 트랜지션 데이터는 액션을 실행하기 전 후 데이터를 합쳐서 생성
Agent 와 Actor
- Agent안에 Actor들이 여러 개 있을 수 있다.
- Agent는 모델을 학습 시킨다.
- 그러면 Actor는 학습된 모델을 가져다가 행동을 결정해야한다.
- 근데 Actor가 여러개면, Actor마다 Policy 모델을 하나씩 갖고 있는데, 얘네마다 파라미터를 동기화 시켜줘야한다.
- 환경을 interactio해가지고 액터는 트랜지션을 버퍼에 모은다. 알고보면 네트워크 원본이 있고, 복사본들을 액터가 하나씩 갖고있는 것. 버퍼도 사실 두개다.
- 액터가 여러 개 있을 수 있다는 가정 하에 복잡하게 구성을 하게 된 것.
베이스 라인
- 정책 기반에서는 모델이 항상 확률적으로 action을 선택하고 그 선택한 결과의 점수가 reward인데, 그 평균으로 baseline을 잡아주면 현재 수준에서 잘하는지 못하는지 알기 쉽기 때문에 학습을 더 효율적으로 할 수 있게 해준다.
'프로그램 > SKT FLY AI' 카테고리의 다른 글
SKT FLY AI : 31일차 - 챗봇 (0) | 2023.08.07 |
---|---|
SKT FLY AI : 30일차 (0) | 2023.08.04 |
SKT FLY AI : 28일차 - 딥러닝(강화학습) (0) | 2023.08.03 |
SKT FLY AI : 27일차 (0) | 2023.08.01 |
SKT FLY AI : 26일차 - OpenCV (0) | 2023.07.31 |