Mais conteúdo relacionado Semelhante a 딥러닝과 강화 학습으로 나보다 잘하는 쿠키런 AI 구현하기 (20) 딥러닝과 강화 학습으로 나보다 잘하는 쿠키런 AI 구현하기4. Playing Atari with Deep Reinforcement Learning (2013)
https://deepmind.com/research/dqn/
5. Mastering the game of Go with deep neural networks and tree search (2016)
https://deepmind.com/research/alphago/
38. Environment
Agent
State 𝑠𝑡
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 1 1 3 3 0 0 0
0 1 1 3 3 0 0 0
0 1 1 0 0 0 0 0
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
46. 즉, 강화 학습은
• Agent가 action을 결정하는 방법을 학습시키는 것
• 각 action은 그 다음 state에 영향을 끼친다
• 성공한 정도는 reward로 측정
• 목표 : 미래의 reward가 최대가 되도록 action을 취하는 것
54. 쿠키 30개 (평균 8레벨)
펫 30개
보물 9개 (2개씩 장착)
맵 7개
평균 플레이 4분
30 × 8 × 30 ×9 𝐶2 × 7 × 4=
5,040일
55. 평균 플레이 4초
1대 × 6개 프로세스
30 × 8 × 30 ×9 𝐶2 × 7 × 4
6
=
14일
58. 쿠키런 AI를 지탱하는 8가지 기술
1. Deep Q-Network (2013)
2. Double Q-Learning (2015)
3. Dueling Network (2015)
4. Prioritized Experience Replay (2015)
5. Model-free Episodic Control (2016)
6. Asynchronous Advantageous Actor-Critic method (2016)
7. Human Checkpoint Replay (2016)
8. Gradient Descent with Restart (2016)
59. 쿠키런 AI를 지탱하는 8가지 기술
1. Deep Q-Network (2013)
2. Double Q-Learning (2015)
3. Dueling Network (2015)
4. Prioritized Experience Replay (2015)
5. Model-free Episodic Control (2016)
6. Asynchronous Advantageous Actor-Critic method (2016)
7. Human Checkpoint Replay (2016)
8. Gradient Descent with Restart (2016)
61. State 𝑠𝑡
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 1 1 3 3 0 -
1
-
1
0 1 1 3 3 -
1
-
1
-
1
0 1 1 0 0 -
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
62. Action 𝑎 𝑡 = ?
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 1 1 3 3 0 -
1
-
1
0 1 1 3 3 -
1
-
1
-
1
0 1 1 0 0 -
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
Action 𝑎 𝑡
None 슬라이드 점프
0
? ??
63. Action 𝑎 𝑡 = ?
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 1 1 3 3 0 -
1
-
1
0 1 1 3 3 -
1
-
1
-
1
0 1 1 0 0 -
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
𝑠𝑡
가장 좋은 행동
64. Action 𝑎 𝑡 = ?
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 1 1 3 3 0 -
1
-
1
0 1 1 3 3 -
1
-
1
-
1
0 1 1 0 0 -
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
𝑠𝑡
Q
66. s Q s, 슬라이드
Q s, 가만히
Q s, 점프
67. s Q s, 슬라이드 = 5
Q s, 가만히 = 0
Q s, 점프 = 1
0
점프 슬라이드가만히
68. s Q s, 슬라이드 = 5
Q s, 가만히 = 0
Q s, 점프 = 1
0
점프 슬라이드가만히
75. 𝑙𝑜𝑠𝑠 = 𝑄 𝑠, 𝑎 − r + 𝛾 max
𝑎`
𝑄 𝑠, 𝑎`
2
82. 𝑙𝑜𝑠𝑠 = 𝑄 𝑠, 𝑎 − r + 𝛾 max
𝑎`
𝑄 𝑠, 𝑎`
2
83. 𝑙𝑜𝑠𝑠 = 𝑄 𝑠, 𝑎 − r + 𝛾 max
𝑎`
𝑄 𝑠, 𝑎`
2
𝑙𝑜𝑠𝑠 = 예측 − 정답 2
84. 𝑙𝑜𝑠𝑠 = 𝑄 𝑠, 𝑎 − r + 𝛾 max
𝑎`
𝑄 𝑠, 𝑎`
2
예측 정답−
85. 𝑙𝑜𝑠𝑠 = 𝑄 𝑠, 𝑎 − r + 𝛾 max
𝑎`
𝑄 𝑠, 𝑎`
2
예측 정답−
0
86. 𝑙𝑜𝑠𝑠 = 𝑄 𝑠, 𝑎 − r + 𝛾 max
𝑎`
𝑄 𝑠, 𝑎`
2
예측 정답−
0
87. 𝑙𝑜𝑠𝑠 = 𝑄 𝑠, 𝑎 − r + 𝛾 max
𝑎`
𝑄 𝑠, 𝑎`
2
예측 정답−
0
88. 𝑙𝑜𝑠𝑠 = 𝑄 𝑠, 𝑎 − r + 𝛾 max
𝑎`
𝑄 𝑠, 𝑎`
2
𝑄
예측 정답−
0
89. 𝑙𝑜𝑠𝑠 = 𝑄 𝑠, 𝑎 − r + 𝛾 max
𝑎`
𝑄 𝑠, 𝑎`
2
= 𝑄 𝑠, 𝑎 − r + 𝛾 𝑄 𝑠, arg max
𝑎`
𝑄 𝑠, 𝑎`
2DQN
Double
DQN
𝑙𝑜𝑠𝑠 = 𝑄 𝑠, 𝑎 − r + 𝛾 𝑄 𝑠, arg max
𝑎`
𝑄(𝑠, 𝑎`)
2
90. Double Q가 Q 값은 작지만
− : Deep Q-learning − : Double Q-learning
91. − : Deep Q-learning − : Double Q-learning
Double Q가 Q 값은 작지만 점수는 훨씬 높다!
무려 60만점 차이!
98. 𝑄 𝑠, 𝑎 의 값은?
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 1 1 3 3 0 0 0
0 1 1 3 3 0 0 0
0 1 1 0 0 0 0 0
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
기대되는 미래 가치
99. 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 1 1 3 3 0 0 0
0 1 1 3 3 0 0 0
0 1 1 0 0 0 0 0
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
앞에 젤리가 많은지,
+1+1+1…
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
3 3 3 3 0 0
3 3 3 3 0 0
0 0 0 0 0 0
-1 -1 -1 -1 -1 -1
100. 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 1 1 3 3 0 0 0
0 1 1 3 3 0 0 0
0 1 1 0 0 0 0 0
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
앞에 젤리가 많은지, 장애물이 많은지 전혀 알 수 없음
+1+1+1… +0-1-1+…
0 0 0 0 0 0
0 0 0 -1 -1 0
0 0 0 -1 -1 0
-1 -1 0 -1 -1 0
-1 -1 0 -1 -1 0
-1 -1 0 -1 -1 0
-1 -1 -1 -1 -1 -1
101. 점프 : 10? 8?
슬라이드 : -2? 1?
가만히 : 5? 12?
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 1 1 3 3 0 0 0
0 1 1 3 3 0 0 0
0 1 1 0 0 0 0 0
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
?
정확한 𝑄 예측이 어렵다
102. 하지만!
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 1 1 3 3 0 0 0
0 1 1 3 3 0 0 0
0 1 1 0 0 0 0 0
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
103. 𝑄를 정확하게 예측할 필요가 있을
까?
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 1 1 3 3 0 0 0
0 1 1 3 3 0 0 0
0 1 1 0 0 0 0 0
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
104. 슬라이드 : 𝑥 (기준)
점프 : 𝑥+1? 𝑥+3?
가만히 : 𝑥+1? 𝑥+2?
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 1 1 3 3 0 0 0
0 1 1 3 3 0 0 0
0 1 1 0 0 0 0 0
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
114. Sum : 𝑄 𝑠, 𝑎; 𝜃, 𝛼, 𝛽 = 𝑉 𝑠; 𝜃, 𝛽 + 𝐴(𝑠, 𝑎; 𝜃, 𝛼)
Max : 𝑄 𝑠, 𝑎; 𝜃, 𝛼, 𝛽 = 𝑉 𝑠; 𝜃, 𝛽 + 𝐴 𝑠, 𝑎; 𝜃, 𝛼 − 𝑚𝑎𝑥
𝑎`∈𝒜
𝐴(𝑠, 𝑎`; 𝜃, 𝛼)
Average: 𝑄 𝑠, 𝑎; 𝜃, 𝛼, 𝛽 = 𝑉 𝑠; 𝜃, 𝛽 + 𝐴 𝑠, 𝑎; 𝜃, 𝛼 −
1
𝒜 𝑎` 𝐴(𝑠, 𝑎`; 𝜃, 𝛼)
117. 쿠키런 AI를 지탱하는 8가지 기술
1. Deep Q-Network (2013)
2. Double Q-Learning (2015)
3. Dueling Network (2015)
4. Prioritized Experience Replay (2015)
5. Model-free Episodic Control (2016)
6. Asynchronous Advantageous Actor-Critic method (2016)
7. Human Checkpoint Replay (2016)
8. Gradient Descent with Restart (2016)
118. 쿠키런 AI를 지탱하는 8가지 기술
1. Deep Q-Network (2013)
2. Double Q-Learning (2015)
3. Dueling Network (2015)
4. Prioritized Experience Replay (2015)
5. Model-free Episodic Control (2016)
6. Asynchronous Advantageous Actor-Critic method (2016)
7. Human Checkpoint Replay (2016)
8. Gradient Descent with Restart (2016)
120. 엔지니어링이라고 쓰고 노가다라고 부른다
1. Hyperparameter tuning
2. Debugging
3. Pretrained model
4. Ensemble method
125. 1. activation_fn : activation function (relu, tanh, elu,
leaky)
2. initializer : weight initializer (xavier)
3. regularizer : weight regularizer (None, l1, l2)
4. apply_reg : layers where regularizer is applied
5. regularizer_scale : scale of regularizer
6. hidden_dims : dimension of network
7. kernel_size : kernel size of CNN network
8. stride_size : stride size of CNN network
9. dueling : whether to use dueling network
10.double_q : whether to use double Q-learning
11.use_batch_norm : whether to use batch normalization
1. optimizer : type of optimizer (adam, adagrad, rmsprop)
2. batch_norm : whether to use batch normalization
3. max_step : maximum step to train
4. target_q_update_step : # of step to update target
network
5. learn_start_step : # of step to begin a training
6. learning_rate_start : the maximum value of learning rate
7. learning_rate_end : the minimum value of learning rate
8. clip_grad : value for a max gradient
9. clip_delta : value for a max delta
10. clip_reward : value for a max reward
11. learning_rate_restart : whether to use learning rate
restart
1. history_length : the length of history
2. memory_size : size of experience memory
3. priority : whether to use prioritized experience
memory
4. preload_memory : whether to preload a saved memory
5. preload_batch_size : batch size of preloaded
memory
6. preload_prob : probability of sampling from pre-mem
7. alpha : alpha of prioritized experience memory
8. beta_start: beta of prioritized experience memory
9. beta_end_t: beta of prioritized experience memory
1. screen_height : # of rows for a grid state
2. screen_height_to_use : actual # of rows for a state
3. screen_width : # of columns for a grid state
4. screen_width_to_us : actual # of columns for a state
5. screen_expr : actual # of row for a state
• c : cookie
• p : platform
• s : score of cells
• p : plain jelly
ex) (c+2*p)-s,i+h+m,[rj,sp], ((c+2*p)-
s)/2.,i+h+m,[rj,sp,hi]
6. action_repeat : # of reapt of an action (frame skip)
• i : plain item
• h : heal
• m : magic
• hi : height
• sp : speed
• rj : remained
jump
129. for land in range(3, 7):
for cookie in cookies:
options = []
option = {
'hidden_dims': ["[800, 400, 200]", "[1000, 800, 200]"],
'double_q': [True, False],
'start_land': land,
'cookie': cookie,
}
options.append(option.copy())
array_run(options, ’double_q_test')
131. 실험, 실험, 실험, 실험, 실
험, 실험, 실험, 실험, 실험,
실험, 실험, 실험, 실험, 실
험, 실험,실험, 실험, 실험,
실험, 실험, 실험, 실험, 실
험, 실험, 실험, 실험, 실험,
실험, 실험, 실험,
140. 도움이 된 순간
• 모든 action에 대해서 Q 값이 0
• State 값을 조금 바꿔서 출력해도 여전히 0
• Tensorflow의 fully_connected 함수에 activation function의
default값이 nn.relu로 설정되어 있음
• Activation function을 None으로 지정하니 해결!
142. 시도해 봤다면 좋았을 디버깅
• State를 실시간으로 수정하면서 Q 변화 보기
ex) 젤리를 쿠키 앞에 그려보면서 변화 확인
• Exploration을 어떻게 하고 있는지
• reward는 제대로 학습 될 수 있도록 정해져 있었는지?
147. 더 높은 점수를 얻을 확률이 높다
Max: 3,586,503Max: 3,199,324
151. Ex) 가장 잘했던 weight는
보너스 타임은 잘하는데,
두번째로 잘하는 weight는
젤리를 잘 먹는다
164. sessions = []
g = tf.Graph()
with g.as_default():
network = Network()
sess = tf.Session(graph=g)
sessions.append(sess)
sessions[0].run(network.output)
이렇게 Session을 살려서 선언하시면 됩니다
Notas do Editor 저는 오늘 딥러닝과, 강화 학습에 관해 이야기 하고자 합니다. 최근 두 분야 모두에 급격한 발전들이 있었는데요. 대표적인 예로는. 2013년 DeepMind에서 게임 화면의 픽셀만으로 벽돌깨기와 스페이스 인베이더와 같은 게임을 사람만큼, 사람보다 더 잘 플레이할 수 있도록 학습한 사례가 있구요, 다들 아시겠지만 올해 초에는, 이렇게 이세돌 구단을 깜짝 놀라게 한 알파고도 있었죠. 약 한달 전에는 벽돌깨기와 같은 2D게임에서 벗어나, 둠이라는 고전 3D 게임도 이렇게 잘 플레이하게 되었죠. 이 놀라운 결과들은 바로 딥러닝과 강화 학습을 융합해서 나온 결과물들인데요, 딥러닝에 대해선 많은 분들이 이미 알고 있을거라고 생각됩니다. 네, 이 그림. 익숙하시죠? 인간의 뇌구조에서 착언한 뉴럴 네트워크의 학습을 연구하는 것이 바로 딥러닝이죠. 하지만 강화 학습 혹은 reinforcement learning이란 단어를 들어 보신 분들은 많으시겠지만, 다른 것들에 비해 강화 학습에 대학 정보가 그리 많지는 않기 때문에 생소한 분들이 많을 것 같습니다. 강화 학습은 머신 러닝의 한 분야입니다. 머신러닝을 학습 방식에 따라 크게 3가지로 나눌 수 있는데요 첫번째론 가장 잘 알려진 학습 방법인 지도 학습이란게 있구요 두번째론 비지도 학습, 마지막으로 강화 학습, 이렇게 머신러닝은 3가지 분야로 나눠질 수 있습니다. 지도 학습은 학습 데이터에 입력값에 대한 정답이 있고 정답이 없는 데이터에 답을 찾는 문제를 지도 학습이라고 부릅니다. 대표적인 예로는 분류, classification 문제가 있죠 비지도 학습의 경우 학습 데이터에 정답이 없으며 데이터가 어떻게 구성되었는지를 알아내는 문제입니다 대표적인 예로는 clustering, 군집화가 있죠 네 그렇다면 강화 학습은 분류 문제도, 군집화 문제도 이는것인데, 어떤 경우에 강화 학습을 써야할까요? 가장 쉬운 예로, 우리가 로봇을 걷게 만드는 문제를 풀고 싶다고 생각해 죠. 우리는 로봇의 관절들을 어느 각도로 움직일 것인가를 결정해야 하는데요. 그래서 이렇게 시행 착오를 통해서 학습을 강화 학습이라고 합니다. 이제부터는 쿠키런 게임을 사례로 강화 학습의 핵심 “개념”들을 자세히 설명해 보도록 하겠습니다. 쿠키런의 목표는 로봇이 아닌 쿠키가 죽지 않고 높은 점수를 내며 달리게 하는것 입니다. 만약 젤리가 있으면 먹어서 점수를 얻어야 하구요 장애물이 있다면 점프나 슬라이드로 피애햐 합니다 강화학습에는 행동을 하는 주체를 agent라고 부르는데요, 쿠키런에서는 쿠키가 바로 agent가 되겠죠 Environment는 agent가 행동을 하게되는 공간을 말합니다. 쿠키는 바다나 숲과 같은 여러가지 맵에서 달리게 되는데요 이런 게임 맵이 바로 environment, 환경이 되겠죠 agent가 행동을 하기위해서는 먼저 주변 환경이 어떤지를 봐야 하잖아요? 그래서 agent가 바라보는 환경을 state라고 부릅니다. 저희는 쿠키 앞뒤의 화면 정보를 10x12의 작은 grid로 요약했습니다. grid는 비어있는으면 0, 쿠키가 있으면 1, 젤리가 있으면 3, 장애물이 있으면 -1로 표현했습니다. 이렇게 만들어진 행렬을 뉴럴 네트워크에 넣고 가장 적합한 행동을 결정해서 agent가 수행하게 됩니다. 이 놀라운 결과들은 바로 딥러닝과 강화 학습을 융합해서 나온 결과물들인데요, 이 놀라운 결과들은 바로 딥러닝과 강화 학습을 융합해서 나온 결과물들인데요, 그래서 저희는 이러한 가치를 보고 쿠키런 ai를 만들기 시작했고, 알파런이라는 프로젝트를 시작하게 되었습니다. 게임을 스스로 학습하고, 바둑에서 인간을 능가 하는 기술을 쿠키런에 접목시킨다면 어떠한 가치를 창출할 수 있을지 고민을 했고, 이 놀라운 결과들은 바로 딥러닝과 강화 학습을 융합해서 나온 결과물들인데요, 쿠키런의 모든 조합을 플레이 하기 위해 걸리는 시간은 5040일이지만 순식간에 한번에 게임을 할 수 있는 AI가 있다면 단 14일 만에 모든 조합을 플레이 할 수 있다는 계산을 할 수 있었습니다. 360배나 빠르게 플레이 할 수 있는것이죠. 그래서 저희는 이러한 가치를 보고 쿠키런 ai를 만들기 시작했고, 알파런이라는 프로젝트를 시작하게 되었습니다.