njs03332 / ml_study

3 stars 0 forks source link

2024/06/28 ~ 2024/07/10 #87

Open danbi5228 opened 3 months ago

danbi5228 commented 3 months ago
danbi5228 commented 3 months ago

18.3 OpenAI 짐

CartPole 환경 기반 예시

import gym

gym.envs.registry.all() # 환경 전체 목록 확인

env = gym.make("CartPole-v1") # CartPole 환경 생성
obs = env.reset() # 환경 초기화. 환경 생성 후 꼭 초기화 해줘야 함

# [카트의 수평 위치(0.0=중앙), 카트의 속도(양수=우측방향), 막대의 각도 (0.0=수직), 막대의 각속도(양수=시계방향)]
obs # array([-0.01258566, -0.00156614, 0.04207708, -0.00180545])

previous obs: array([-0.01258566, -0.00156614, 0.04207708, -0.00180545])

obs # array([-0.01261699, 0.19292789, 0.04204097, -0.28092127])

obs[1]>0 이므로 이제 오른쪽 방향으로 움직이는 상태

obs[2]>0 이므로 여전히 막대는 오른쪽으로 기울어진 상태

obs[3] 값이 -0.28로 왼쪽 방향으로의 각속도가 증가함

--> 카트가 약간 왼쪽으로 이동하고 막대기의 각도변화가 거의 없으나

카트가 오른쪽으로 가속되었고 막대 회전속도가 왼쪽으로 증가했으므로 다음 스텝 후에는 왼쪽으로 기울어질 가능성이 큼

reward # 1.0 . CartPole 환경에서는 어떤 행동을 해도 1.0의 보상을 받음. 가능한 한 오래 실행하는 것이 목표 done # False. 이 값이 True 라면 이 에피소드(한 판)가 끝난 것. 200 스텝 이상이 지나도 에피소드가 종료됨(에이전트 승) info # {}. 다른 환경에서는 이 딕셔너리에 디버깅이나 훈련에 유용한 추가적인 정보가 담길 수 있음 (e.g. 에이전트의 남은 생명)

- env.close(): 환경 반납
- 하드코딩 예시 - 막대가 왼쪽으로 기울어지면 카트를 왼쪽으로 가속하고 오른쪽으로 기울어지면 오른쪽으로 가속시키는 정책
  - 결론: 500번 에피소드를 실행해도 최대 68 step. 더 좋은 정책을 위해 신경망 정책을 만들어볼 수 있음
```python
def basic_policy(obs):
    angle = obs[2]
    return 0 if angle < 0 else 1

totals = []
for episode in range(500):
    episode_rewards = 0
    obs = env.reset()
    for step in range(200):
        action = basic_policy(obs)
        obs, reward, done, info = env.step(action)
        episode_rewards += reward
        if done:
            break
    totals.append(episode_rewards)

import numpy as np
np.mean(totals), np.std(totals), np.min(totals), np.max(totals) # (41.718, 8.85, 24.0, 68.0)
njs03332 commented 3 months ago

18.4 신경망 정책

import tensorflow as tf
from tensorflow import keras

n_inputs = 4
model = keras.models.Sequential([
    keras.layers.Dense(5, activation="elu", input_shpae=[n_inputs]),
    keras.layers.Dense(1, activation="sigmoid"),
])
givitallugot commented 3 months ago

18.2 정책 탐색

모든 시도 정책 공간에 모든 값을 시도해보기. 모래사장에서 바늘을 찾는 것과 마찬가지

유전 알고리즘 1세대 정책 100개를 랜덤하게 생성해서 시도한 후, 성능이 낮은 정책 80개는 버리고, 20개를 살려 각각 자식 정책 4개를 생산 살아남은 정책과 그 자식은 2세대를 구성 여러 세대에 걸쳐 반복

정책 그래디언트 정책 파라미터에 대한 보상의 그레이디언트를 평가해서 높은 보상의 방향을 따르는 그레이디언트로 파라미터를 수정 즉, p를 조금 증가시키고 30분 지난 후 수집한 먼지 양이 증가했는지 평가. 만약 먼지 양이 많아지면 p를 조금 증가시키고, 그렇지 않으면 p를 감소