강화 학습 in Julia
fusic에서는 얼마 전까지 Python에서 배우는 강화 학습의 초록책의 윤독회를 하고 있었습니다.
그런 가운데, 「나ー 응인가 Julia로 강화 학습의 패키지 네ー 카나ー」라고 주로 언제나, 조사해도 무엇이 좋은지 모르는 상태가 계속되었습니다.
원래 Julia를 만지고 있는 것이 당사에서 자신만이므로, 들려도 좋은 대답은 돌아오지 않습니다.
귀찮게, Julia slack workspace 할 수 있던.
그렇게 생각해 왔습니다.
Q: 「강화 학습을 지금 공부하고 있습니다만, 뭔가 좋은 패키지 없으면?」
A: 「 ReinforcementLearning.jl 라든지 좋다고 생각해!
상냥하게 가르쳐 주셨습니다.
모처럼 가르쳐 주었으므로, 이 녀석을 이번 조금 만져 보았습니다.
입문편이라고 하는 것으로!
CartPole
어쩌면 가장 유명할 것입니다.
대차에 세워진 막대기를 쓰러뜨리지 않도록 좌우로 움직이는 게임입니다.
이 환경에 대해 이미 이 패키지에 포장되어 있는 심층 강화 학습을 사용해 실천해 봅시다!
패키지 가져오기
using ReinforcementLearning, ReinforcementLearningEnvironments, Flux
위에서 쓴대로 Flux를 사용합니다. 위의 패키지를 추가하십시오.
환경 정보
env = CartPoleEnv(;T=Float32)
ns, na = length(observation_space(env)), length(action_space(env)) # (4, 2)
device = :cpu
네 가지가 있습니다.
그래서 행동에 관해서 말하면 오른쪽인지 왼쪽인지 밖에 없기 때문에 2가 설정되어 있습니다.
레이어 정의
layer1 = Dense(ns, 128, relu)
layer2 = Dense(128, 128, relu)
layer3 = Dense(128, na)
neural_network_q = NeuralNetworkQ(model = Chain(layer1, layer2, layer3),
optimizer = ADAM(),
device = device)
3층의 네트워크에 128이 노드를 연결시키고 있습니다.
4개의 행동으로부터, 왼쪽인지 오른쪽인지를 판단하기 위해,
4:128:2
의 순서로 연결합니다.전략과 보상
ϵ_selector = EpsilonGreedySelector{:exp}(ϵ_stable = 0.01, decay_steps = 500)
q_base_policy = QBasedPolicy(learner = BasicDQNLearner(approximator = neural_network_q,
batch_size = 32,
min_replay_history = 100,
loss_fun = huber_loss),
selector = ϵ_selector)
ε-greedy 방법을 선택합니다.
에이전트 정의
circular_risa_buffer = circular_RTSA_buffer(capacity = 1000,
state_eltype = Float32,
state_size = (ns,))
agent = Agent(
π = q_base_policy,
buffer = circular_risa_buffer
)
buffer에 대해서는 어쩐지 잘 모르겠지만 Policy를 개선하기 위해 Agent와 환경을 오가는 것도 싶습니다.
이런 느낌인 것 같습니다.
학습해 보겠습니다.
hook = ComposedHook(
TotalRewardPerEpisode(),
TimePerStep()
)
run(agent, env, StopAfterStep(10000; is_show_progress=true); hook = hook)
Progress: 100%|███████████████████████████████████████████████████████████████| Time: 0:00:11
hook에 보상과 학습 시간을 저장합니다.
자신의 환경이라면, 대략 11초 정도로 끝났습니다. 빠르네요.
천이를 가시화하면 이런 느낌입니다.
using Plots
plot(hook[1].rewards, xlabel="Episode", ylabel="Reward", label="")
50 에피소드를 넘었을 정도로 만점을 취하고 있습니다.
흠, 어쩐지 과학하고 있다고 생각합니다만.
Note
ReinforcementLearning.jl을 정상적으로 설치해도 불가능했습니다.
master 브랜치에서 떨어뜨리자.
using Pkg; Pkg.add(PackageSpec(name="ReinforcementLearning", rev="master"))
로 할 수 있습니다.감상
자신의 강화 학습에 대한 이해가 얕기 때문에, 지금은 이해할 수 없는 부분도 많았습니다.
문서가 풍부,,, 라고는 말하기 어렵습니다만, 샘플도 있고, 개발 도중같기 때문에, 워치 해 갈까라고 생각합니다.
감사합니다. 가르쳐 준 Julia의 사람이야.
결과
응? ww
아마 좋지 않을까. 미안해.
배우지 않으면.
Reference
이 문제에 관하여(강화 학습 in Julia), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/TsuMakoto/items/463b8e4ec95c1ec4ae0c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)