Skip to content

Tonnonssi/-RL-Minesweeper

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

99 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

[RL] MineSweeper

00. Overview

Jupyter Notebook Visual Studio Python PyTorch

์ด ํ”„๋กœ์ ํŠธ๋Š” DQN ๊ฐ•ํ™”ํ•™์Šต ๋ฐฉ๋ฒ•๋ก ์„ ์‚ฌ์šฉํ•ด ์ง€๋ขฐ์ฐพ๊ธฐ๋ฅผ ํ’€์–ด๋‚ด๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•œ๋‹ค.

์ตœ๊ณ  ์„ฑ๋Šฅ

2024.07.25 ๊ธฐ์ค€,
๐Ÿ”ฅ Win rate : 0.839 (ยฑ 0.037)

About Minesweeper

์ง€๋ขฐ์ฐพ๊ธฐ๋Š” ๋งต์— ๊น”๋ ค์žˆ๋Š” ๋ชจ๋“  ์ง€๋ขฐ๋ฅผ ์ฐพ๋Š” ๊ฒŒ์ž„์ด๋‹ค. '์ฐพ๋Š”๋‹ค'๋Š” ์ง€๋ขฐ๋ผ๊ณ  ํŒ๋‹จ๋˜๋Š” ํƒ€์ผ์„ ๊ฑด๋“ค์ด์ง€ ์•Š๋Š” ๊ฒƒ์ด๋‹ค. ๋”ฐ๋ผ์„œ ์ง€๋ขฐ์ฐพ๊ธฐ์˜ ์Šน๋ฆฌ์กฐ๊ฑด์€ ์ง€๋ขฐ๊ฐ€ ์•„๋‹Œ ๋‚˜๋จธ์ง€ ๋ชจ๋“  ํƒ€์ผ์„ ๋‹ค ๊นŒ๋Š” ๊ฒƒ๊ณผ ๊ฐ™๋‹ค. ์ด ๋งฅ๋ฝ์—์„œ ์ผ๋ฐ˜์ ์œผ๋กœ ์ง€๋ขฐ์ฐพ๊ธฐ ๊ฒŒ์ž„ ๋‚ด ์กด์žฌํ•˜๋Š” ๊นƒ๋ฐœ ๊ธฐ๋Šฅ์€ ํ•„์ˆ˜๊ฐ€ ์•„๋‹ˆ๋‹ค. ๊นƒ๋ฐœ์€ ์ฐพ์•„๋‚ธ ์ง€๋ขฐ๋ฅผ ํ‘œ์‹œํ•˜๊ธฐ ์œ„ํ•ด ์žˆ๋Š” ๊ธฐ๋Šฅ์ด๋‹ค. ์Šน๋ฆฌ์กฐ๊ฑด์— ๋ฏธ๋ฃจ์–ด ๋น„์ถฐ ๋ณผ ๋•Œ, ๊นƒ๋ฐœ์€ ํ”Œ๋ ˆ์ด์–ด์˜ ํŽธ์˜์„ฑ์„ ์œ„ํ•ด ์กด์žฌํ•˜๋Š” ๊ธฐ๋Šฅ์ผ ๋ฟ ํ•„์ˆ˜์š”๊ฑด์€ ์•„๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ณธ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ๊นƒ๋ฐœ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜์ง€ ์•Š๊ณ  ์ง„ํ–‰ํ–ˆ๋‹ค.

์ง€๋ขฐ์ฐพ๊ธฐ์˜ ๋‚œ์ด๋„๋Š” ์ดˆ๊ธ‰ ์ค‘๊ธ‰ ๊ณ ๊ธ‰์œผ๋กœ ๋‚˜๋ˆ„์–ด์ ธ ์žˆ๋‹ค.

Level Height Width Num of Mine density
์ดˆ๊ธ‰ 9 9 10 12.3%
์ค‘๊ธ‰ 16 16 40 15.6%
๊ณ ๊ธ‰ 16 30 99 20.6%

๊ตฌํ˜„ํ•œ ํ™˜๊ฒฝ์œผ๋กœ ์ปค์Šคํ…€ ํฌํ•จ ๋ชจ๋“  ๋‚œ์ด๋„๋กœ ํ•™์Šต์ด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ๋ณธ ํ”„๋กœ์ ํŠธ๋Š” ์ดˆ๊ธ‰(9*9, ์ง€๋ขฐ 10๊ฐœ)์„ ๊ธฐ์ค€์œผ๋กœ ์ง„ํ–‰ํ–ˆ๋‹ค.

RL

DQN ๋ฐฉ๋ฒ•๋ก ์„ ์ด์šฉํ–ˆ์œผ๋ฉฐ, ๊ตฌ์ฒด์ ์ธ ๋‚ด์šฉ ๋ฐ ๊ตฌํ˜„์€ Ch.03์— ๊ธฐ์žฌ๋˜์–ด ์žˆ๋‹ค. @ DeepMind Gym ์Šคํƒ€์ผ์„ ๋”ฐ๋ผ step(), reset(), render(), action_space๊ฐ€ ๊ตฌํ˜„๋˜์–ด ์žˆ๋‹ค.

ํ•™์Šต ํ™˜๊ฒฝ

์ฝ”๋žฉ์—์„œ ํ•™์Šต์„ ์ง„ํ–‰ํ–ˆ๋‹ค. T4 GPU / L4 GPU / A100 GPU๋ฅผ ์‚ฌ์šฉํ–ˆ๊ณ , A100์„ ๊ธฐ์ค€์œผ๋กœ 20๋งŒ ์—ํ”ผ์†Œ๋“œ(valid ํฌํ•จ) 6์‹œ๊ฐ„ 25๋ถ„์ด ์†Œ์š”๋๋‹ค.

Contents

1. Environment

2. DQN

3. Train / Valid / Test

4. trouble shooting

5. Result

01. Environment

Package

0.0.0

State

Single Channel

9*9(easy์˜ ๋งต ๊ทœ๊ฒฉ)์˜ arr์— ์ฃผ๋ณ€๋ถ€ ์ง€๋ขฐ์˜ ๊ฐœ์ˆ˜๋ฅผ ์„ผ ํƒ€์ผ์˜ ์ˆ˜(0-8)๋ฅผ ๊ทธ๋Œ€๋กœ ๋ฐ˜์˜ํ•˜๊ณ , ์•„์ง ๊นŒ์ง€์ง€ ์•Š์€ ํƒ€์ผ์„ -1, ์ง€๋ขฐ๋ฅผ -2๋กœ ํ‘œํ˜„ํ–ˆ๋‹ค. ์ตœ๋Œ“๊ฐ’์ธ 8๋กœ ์ „์ฒด state arr๋ฅผ ๋‚˜๋ˆ„์–ด state๋ฅผ ์ •๊ทœํ™”ํ–ˆ๋‹ค. ์ •๊ทœํ™”๋ฅผ ํ•˜์ง€ ์•Š์•˜์„ ๋•Œ์—” ํ•™์Šต์ด ๊ฑฐ์˜ ๋˜์ง€ ์•Š์•˜์ง€๋งŒ, ์ •๊ทœํ™” ์ดํ›„์— ์Šน๋ฅ ์ด ๊ทน์ ์œผ๋กœ ์ƒ์Šนํ–ˆ๋‹ค. Alt text

Multi Channel

env.dim2 ํด๋ž˜์Šค ํŒŒ๋ผ๋ฏธํ„ฐ์—์„œ False๊ฐ’์„ ์ฃผ๋ฉด ๋‹ค์ฐจ์› state๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๋‹ค์ฐจ์› state๋Š” ๋‹จ์ผ ์ฐจ์› state์—์„œ ์ง€๋ขฐ(-2), ๊นŒ์ง ์—ฌ๋ถ€(-1), ์ฃผ๋ณ€ ์ง€๋ขฐ ๊ฐœ์ˆ˜์˜ ํ•ฉ์„ ๊ฐ๊ฐ์˜ ์ฑ„๋„๋กœ ๋ฐ›๊ณ , ์›ํ•ซ์ธ์ฝ”๋”ฉ์œผ๋กœ ๊ฐ’์„ ํ‘œํ˜„ํ•œ๋‹ค. Alt text

ํƒ€์ž…๋ณ„ ํ•™์Šต

Alt text Alt text
์ดˆ๋ฐ˜ ํ•™์Šต์—์„œ๋Š” ๋‹ค์ฐจ์› state๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์Šน๋ฅ ์ด ๋” ๋น ๋ฅด๊ฒŒ ์˜ฌ๋ž๋‹ค. ํ•˜์ง€๋งŒ 10๋งŒ ์ดํ›„๋ถ€ํ„ฐ๋Š” state ํ‘œํ˜„ ์ฐจ์ด๋กœ ์ธํ•œ ์Šน๋ฅ  ์ฐจ์ด๋Š” ๊ฑฐ์˜ ์—†์—ˆ๋‹ค.

Reward Design

Reward Description & Purpose Weight Done
Win ์ง€๋ขฐ๊ฐ€ ์•„๋‹Œ ๋ชจ๋“  ํƒ€์ผ์„ ๊น ๊ฒฝ์šฐ 1 True
Lose ๊น ํƒ€์ผ์ด ์ง€๋ขฐ์ธ ๊ฒฝ์šฐ -1 True
Progress ์ฃผ๋ณ€๋ถ€์— ๊นŒ์ง„ ํƒ€์ผ์ด ์žˆ๊ณ , ์ง€๋ขฐ๊ฐ€ ์•„๋‹Œ ํƒ€์ผ์„ ๊น ๊ฒฝ์šฐ 0.3 False
Guess ์ฃผ๋ณ€๋ถ€๊ฐ€ ๊นŒ์ ธ ์žˆ์ง€ ์•Š์ง€๋งŒ, ์ง€๋ขฐ๊ฐ€ ์•„๋‹Œ ํƒ€์ผ์„ ๊น ๊ฒฝ์šฐ -0.3 ~ 0.3 False
No Progress ์ด๋ฏธ ๋ˆ„๋ฅธ ํƒ€์ผ์„ ๋˜ ๋ˆ„๋ฅธ ๊ฒฝ์šฐ -0.5 / -1 T/F
  • ๋ณด์ƒ ๋””์ž์ธ์˜ ๋ณ€ํ™”๋Š” Ch.04 Troulbe Shooting ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

์†๋„ ๊ฐœ์„ 

n0๋งŒ ๋ฒˆ ๋‹จ์œ„๋กœ ์—ํ”ผ์†Œ๋“œ๋ฅผ ์ง„ํ–‰ํ•˜๋‹ค๋ณด๋‹ˆ, ํ™˜๊ฒฝ ์ฝ”๋“œ์˜ ์‹œ๊ฐ„ ํšจ์œจ์ด ์ค‘์š”ํ–ˆ๋‹ค. ์‹œ๊ฐ„ ํšจ์œจ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด 0์„ ๋ˆŒ๋ €์„ ๋•Œ ์—ฐ์‡„๋กœ ํ„ฐ์ง€๋Š” ์ฝ”๋“œ, ์ฃผ๋ณ€ ์ง€๋ขฐ์˜ ๊ฐœ์ˆ˜๋ฅผ ์„ธ๋Š” ์ฝ”๋“œ๋ฅผ ๋ฆฌํŒฉํ† ๋งํ–ˆ๋‹ค.

1. 0์„ ๋ˆŒ๋ €์„ ๋•Œ ์ฃผ๋ณ€ ํƒ€์ผ์ด ๊นŒ์ง€๋Š” ํ˜„์ƒ

๊ธฐ์กด ์ฝ”๋“œ๋Š” ์žฌ๊ท€ํ˜•์œผ๋กœ ๊ตฌํ˜„ํ–ˆ์ง€๋งŒ, ๋ฌดํ•œ ๋ฃจํ”„์— ๋น ์ง€๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋‹ค. ๋ฌดํ•œ ๋ฃจํ”„ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ  ์†๋„๋ฅผ ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•ด์„œ BFS ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์šฉํ•ด ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ–ˆ๋‹ค.

2. ์ฃผ๋ณ€ ์ง€๋ขฐ ๊ฐœ์ˆ˜ ์„ธ๊ธฐ ๋กœ์ง

๊ธฐ์กด ์ฝ”๋“œ๋Š” ํŠน์ • ํƒ€์ผ์„ ๊ธฐ์ค€์œผ๋กœ ์ฃผ๋ณ€ ํƒ€์ผ์„ ํƒ์ƒ‰ํ•˜๋Š” ๋ฐฉ์‹์„ ์ด์ค‘ for๋ฌธ์œผ๋กœ ๊ตฌํ˜„ํ–ˆ๋‹ค. for๋ฌธ์„ ์‚ฌ์šฉ์„ ์ตœ์†Œํ™” ํ•˜๊ณ ์ž, ๊ฒ‰์— 0 ํŒจ๋”ฉ์„ ๋‘๋ฅธ ํ›„ 3*3๋กœ arr๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ํƒ์ƒ‰ํ•˜๋ฉฐ M์˜ ๊ฐœ์ˆ˜๋ฅผ ์„ธ๋Š” ๋ฐฉ์‹์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ–ˆ๋‹ค.

3. cython

-> ์ถ”๊ฐ€ํ•  ์˜ˆ์ •

02. DQN

Net

CNN์€ ๊ณต๊ฐ„์ƒ์˜ ์ •๋ณด๋ฅผ ์ธ์‹ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฏธ์ง€ ์ธ์‹์— ์œ ๋ฆฌํ•˜๋‹ค. ์ง€๋ขฐ์ฐพ๊ธฐ์˜ state ๋˜ํ•œ ์ˆ˜์™€ ์ฃผ๋ณ€๋ถ€ ์‚ฌ์ด์˜ ํŒจํ„ด์ด ์ค‘์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— CNN ์‹ ๊ฒฝ๋ง์ด ์ ํ•ฉํ•˜๋‹ค ํŒ๋‹จํ–ˆ๋‹ค. ํŒจ๋”ฉ๊ณผ ํ•ฉ์„ฑ๊ณฑ ์ธต๋งŒ์„ ์ด์šฉํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ์•„์ด๋””์–ด์—์„œ ์„ฑ๋Šฅ ํ–ฅ์ƒ์ด ์ด๋ค„์กŒ๋‹ค.

1. CNN with Padding

ํ•ฉ์„ฑ๊ณฑ ์‹ ๊ฒฝ๋ง์—์„œ ํŒจ๋”ฉ์€ ์ด๋ฏธ์ง€ ํฌ๊ธฐ ์†์‹ค์„ ๋ง‰๊ณ  ๊ฐ€์žฅ์ž๋ฆฌ๋ฅผ ๋” ์ž˜ ์ธ์‹ํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์ค€๋‹ค. ๊ฐ€์žฅ์ž๋ฆฌ ๊ฐ’์ด ์ค‘์•™์ด๋‚˜ ๋‹ค๋ฅธ ์˜์—ญ์— ๋น„ํ•ด ์ค‘์š”๋„๊ฐ€ ๋‚ฎ์„ ์ˆ˜ ์žˆ๋Š” ์ผ๋ฐ˜์ ์ธ ์‚ฌ์ง„๊ณผ๋Š” ๋‹ฌ๋ฆฌ, ์ง€๋ขฐ์ฐพ๊ธฐ์—์„œ ๊ฐ€์žฅ์ž๋ฆฌ๋Š” ์ค‘์•™๊ณผ ๋™์ผํ•˜๊ฒŒ ์ค‘์š”ํ•œ ์ •๋ณด๊ฐ’์„ ๊ฐ–๊ณ  ์žˆ๋‹ค. ์ปค๋„ฌ์ด state์˜ ๋ชจ๋“  ํƒ€์ผ์„ ๋™์ผํ•˜๊ฒŒ ํƒ์ƒ‰ํ•˜์—ฌ ์ •๋ณด๋ฅผ ์–ป์–ด๊ฐ€๊ฒŒ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์ฒซ๋ฒˆ์งธ ํ•ฉ์„ฑ๊ณฑ layer์—์„œ๋Š” 2๋‹จ์˜ ํŒจ๋”ฉ์„, ๋‚˜๋จธ์ง€ layer์—์„œ๋Š” 1๋‹จ์˜ ํŒจ๋”ฉ์„ ์ ์šฉํ–ˆ๋‹ค. ๋˜ํ•œ ์ด๋ฏธ์ง€์˜ ํฌ๊ธฐ๊ฐ€ ์œ ์ง€๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— 9*9๋ผ๋Š” ์ž‘์€ state์—์„œ 4์ธต ์ด์ƒ์˜ ๋‹ค์ธต ์‹ ๊ฒฝ๋ง์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ๊ทธ ๊ฒฐ๊ณผ ํŒจ๋”ฉ์ด ์—†๋Š” ๋ชจ๋ธ์—์„œ๋Š” ํ•™์Šต์ด ๊ฑฐ์˜ ์ง„ํ–‰๋˜์ง€ ์•Š์•˜๋˜ ๊ฒƒ์— ๋ฐ˜ํ•ด, ์„ฑ๊ณต๋ฅ ์ด ๋†’์•„์ง€๋ฉฐ ํ•™์Šต ์–‘์ƒ์„ ๋ณด์˜€๋‹ค.

2. CNN only with conv layer

@ryanbaldini์˜ ๋ชจ๋ธ์„ ํ†ตํ•ด ํ•ฉ์„ฑ๊ณฑ ์‹ ๊ฒฝ๋ง๋งŒ์„ ์‚ฌ์šฉํ•˜๋Š” ์•„์ด๋””์–ด๋ฅผ ์–ป์—ˆ๋‹ค. ์ถ”๊ฐ€์ ์ธ ํ•ฉ์„ฑ๊ณฑ ์‹ ๊ฒฝ๋ง์„ ์Œ“์ง€ ์•Š๊ณ  ์ „์—ฐ๊ฒฐ ์‹ ๊ฒฝ๋ง์„ ์‚ญ์ œํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ 100%p ์ด์ƒ์˜ ์„ฑ๋Šฅ ์ƒ์Šน์„ ๋ณด์˜€๋‹ค. ๋ช…ํ™•ํ•œ ์›์ธ์„ ๊ทœ์ •ํ•  ์ˆ˜๋Š” ์—†์—ˆ์ง€๋งŒ ํ•ฉ์„ฑ๊ณฑ ์ธต์—์„œ ๋ฝ‘์•„๋‚ผ ์ˆ˜ ์žˆ๋Š” ์ •๋ณด๋“ค์ด ์ „์—ฐ๊ฒฐ ์‹ ๊ฒฝ๋ง์„ ๊ฑฐ์น˜๋ฉฐ ์˜คํžˆ๋ ค ๊ผฌ์—ฌ ์˜์–‘๊ฐ€๋ฅผ ์žƒ๋Š” ๊ฒƒ์ด ์•„๋‹๊นŒ๋ผ๋Š” ๊ฐ€์„ค์„ ์„ธ์› ๋‹ค. Alt text

class Net(nn.Module):
    def __init__(self, input_dims, n_actions, conv_units, in_channels=1):
        super().__init__()
        self.conv1 = nn.Conv2d(in_channels=in_channels, out_channels=conv_units, kernel_size=(3,3), padding=2)
        self.conv2 = nn.Conv2d(in_channels=conv_units, out_channels=conv_units, kernel_size=(3,3), padding=1)
        self.conv3 = nn.Conv2d(in_channels=conv_units, out_channels=conv_units, kernel_size=(3,3), padding=1)
        self.conv4 = nn.Conv2d(in_channels=conv_units, out_channels=conv_units, kernel_size=(3,3), padding=1)

        self.flatten = nn.Flatten()

        fc_size = conv_units * (input_dims[-1]+2) * (input_dims[-2]+2)

        self.fc = nn.Linear(fc_size, n_actions)

    def forward(self, x):
        # conv area
        x = F.relu(self.conv1(x))
        x = F.relu(self.conv2(x))
        x = F.relu(self.conv3(x))
        x = F.relu(self.conv4(x))

        x = self.flatten(x)
        # flatten area
        x = self.fc(x)

        return x

Replay Memory

์ถ”์ธก ๊ฐ€๋Šฅํ•  ๋งŒํผ ํƒ€์ผ์ด ๊นŒ์ง€์ง€ ์•Š๋Š”๋‹ค๋ฉด ์‚ฌ๋žŒ์ด ๊ฒŒ์ž„์„ ํ”Œ๋ ˆ์ดํ•ด๋„ ์ฐ์„ ์ˆ˜ ๋ฐ–์— ์—†๋‹ค. ๋•Œ๋ฌธ์— ์ถ”์ธก์ด ๋ถˆ๊ฐ€๋Šฅํ•  ์ •๋„๋กœ ์ ๊ฒŒ ํƒ€์ผ์ด ๊นŒ์—ฌ์ง„ state๋Š” ํ•™์Šต์— ์žˆ์–ด ์ฃผ์š”ํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ์•„๋‹ˆ๋ผ ํŒ๋‹จํ–ˆ๋‹ค. replay memory์— ์ €์žฅํ•  ํƒ€์ผ์˜ ๊ธฐ์ค€์„ ์„ธ์šฐ๊ธฐ ์œ„ํ•ด ์ง์ ‘ ์ง€๋ขฐ์ฐพ๊ธฐ๋ฅผ ํ”Œ๋ ˆ์ดํ•˜๋ฉฐ ์ถ”์ธก์„ ํ†ตํ•ด ํ’€ ์ˆ˜ ์žˆ๋‹ค ํŒ๋‹จํ•œ ์‹œ์ ์— ๊นŒ์—ฌ์ง„ ํƒ€์ผ์˜ ๊ฐœ์ˆ˜๋ฅผ ์„ธ์—ˆ๋‹ค. ๊ทธ ๊ฒฐ๊ณผ 30๊ฐœ์˜ ํ‘œ๋ณธ์—์„œ ํ‰๊ท  18๊ฐœ๋ผ๋Š” ์ˆ˜์น˜๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์—ˆ๋‹ค. ์ด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์—ํ”ผ์†Œ๋“œ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉฐ 18๊ฐœ ๋ฏธ๋งŒ์œผ๋กœ ๊นŒ์—ฌ์ง„ state๋Š” replay memory์— ์ €์žฅํ•˜์ง€ ์•Š๋Š” ๋ฐฉ์‹์œผ๋กœ replay memory๋ฅผ ์ˆ˜์ •ํ–ˆ๋‹ค.

์ด ๋ฐฉ์‹์€ ๊ตฌํ˜„ ์ดˆ๊ธฐ ์ดˆ๋ฐ˜ ํ•™์Šต์— ๊ฐ•์ ์ด ์žˆ์–ด ํŠน์ • ์‹ ๊ฒฝ๋ง ๋ฐ ๋ณด์ƒ ์ฒด๊ณ„๊ฐ€ ์ž˜ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•˜๋Š”๋ฐ ์šฉ์ดํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ˆ˜ ์ฐจ๋ก€์˜ ๋ฆฌํŒฉํ† ๋ง๊ณผ ๋ณด์ƒ์„ ๋ณ€๊ฒฝํ•˜๋Š” ๊ณผ์ •์—์„œ ๊ฐ•์ ์ด ํ๋ ค์ ธ ๋ฐ”๋‹๋ผ ๋ฆฌํ”Œ๋ ˆ์ด๋ณด๋‹ค ๋–จ์–ด์ง„ ์„ฑ๋Šฅ์„ ๋ณด์˜€๋‹ค. ๋”ฐ๋ผ์„œ ์ตœ์ข…์ ์œผ๋กœ ๊ฐ€์žฅ ๋†’์€ ์Šน๋ฅ ์„ ์ง€๋‹Œ ๋ชจ๋ธ์„ ์ฐพ์„ ๋•Œ๋Š” ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜๋‹ค. ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•œ ๋ชจ๋ธ์˜ ๊ฒฝ์šฐ, [RM ์ˆ˜์ • ๋ฒ„์ „]์ด๋ผ ๋ช…์‹œํ•ด๋’€๋‹ค.

DQN ๋กœ์ง ๊ตฌํ˜„

vector type / scalar type Q-learning Alt text

  • DQN ์•Œ๊ณ ๋ฆฌ์ฆ˜ Alt text

DQN ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋‘ ๊ฐ€์ง€ ๋ฒ„์ „์œผ๋กœ ๊ตฌํ˜„ํ–ˆ๋‹ค. ๋จผ์ € vector type์€ @pythonprogramming.net์˜ ์ฝ”๋“œ๋ฅผ ์ฐธ๊ณ ํ–ˆ์œผ๋ฉฐ, ํ…์„œํ”Œ๋กœ์šฐ์—์„œ ํŒŒ์ดํ† ์น˜๋กœ ๋ณ€ํ™˜ํ•  ๋•Œ ๋ถˆํ•„์š”ํ•œ ๊ตฌํ˜„๋ถ€๋ฅผ ์ตœ์†Œํ™”์‹œ์ผœ ์†๋„๋ฅผ ํ–ฅ์ƒ์‹œ์ผฐ๋‹ค. ์ด ์ฝ”๋“œ๋Š” state๋ฅผ ์‹ ๊ฒฝ๋ง์— ๋„ฃ์—ˆ์„ ๋•Œ ๋‚˜์˜ค๋Š” ์ „์ฒด Q ๊ฐ’์„ ์˜ˆ์ธก๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค. ํƒ€๊ฒŸ๊ฐ’ ๋˜ํ•œ ์˜ˆ์ธก๊ฐ’์˜ Q๊ฐ’์„ ๋ณต์‚ฌํ•œ ํ›„, ํƒ€๊ฒŸ ์‹ ๊ฒฝ๋ง์˜ ์ตœ๋Œ€ Q ๊ฐ’์„ ๊ธฐ์กด์˜ action์ด ์žˆ๋Š” ์œ„์น˜์— ๋„ฃ๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„๋˜์—ˆ๋‹ค. scalar ํƒ€์ž…์€ @pytorch DQN ๊ณต์‹๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•ด ๊ตฌํ˜„ํ–ˆ์œผ๋ฉฐ, ์˜ˆ์ธก๊ฐ’์€ ์‹ ๊ฒฝ๋ง์—์„œ ๊ตฌํ•œ Q ๊ฐ’๋“ค ์ค‘ a์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์ด๊ณ  ํƒ€๊ฒŸ ๊ฐ’์€ ํƒ€๊ฒŸ ์‹ ๊ฒฝ๋ง์—์„œ ์–ป์€ Q ๊ฐ’ ์ค‘ ๊ฐ€์žฅ ํฐ ๊ฐ’์ด๋‹ค.

๋ฒกํ„ฐ ํƒ€์ž…์˜ DQN๊ณผ ์Šค์นผ๋ผ ํƒ€์ž…์˜ DQN์˜ ์ฐจ์ด์ ์€ loss๊ฐ’์ด๋‹ค. MSE ๊ธฐ์ค€์œผ๋กœ ์ƒ๊ฐํ–ˆ์„ ๋•Œ, ๋ฒกํ„ฐ ํƒ€์ž…์˜ DQN์€ ํ•˜๋‚˜์˜ ์ˆซ์ž๋งŒ ๋‹ค๋ฅด๊ณ  ๋‚˜๋จธ์ง€๊ฐ€ ์ „๋ถ€ ๋™์ผํ•œ ๋‘ ๋ฒกํ„ฐ๋ฅผ ๋น„๊ตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์Šค์นผ๋ผ์™€ ์˜ˆ์ธก๊ฐ’๊ณผ ํƒ€๊ฒŸ๊ฐ’ ์‚ฌ์ด์˜ ์˜ค์ฐจ์ œ๊ณฑ๊ณผ๋Š” ๋™์ผํ•˜๋‹ค. ํ•˜์ง€๋งŒ MSE loss๋Š” ์˜ค์ฐจ์ œ๊ณฑ ๊ฐ’์˜ ํ‰๊ท ์„ ๋‹ค๋ฃจ๊ธฐ ๋•Œ๋ฌธ์—, ๋ฒกํ„ฐ ํƒ€์ž…์˜ DQN์ด ์Šค์นผ๋ผ ํƒ€์ž…๋ณด๋‹ค loss ๊ฐ’์ด ์ž‘๋‹ค.

์ด๋ก ์ ์œผ๋กœ๋Š” ์Šค์นผ๋ผ ํƒ€์ž…์ด ๋” ์ ํ•ฉํ•œ ๋ฐฉ๋ฒ•์ด๋ผ ์ƒ๊ฐํ•˜์ง€๋งŒ, ๋ฒกํ„ฐ ํƒ€์ž… ๋˜ํ•œ ํฐ ๋ฌธ์ œ๋Š” ์—†๋‹ค ํŒ๋‹จํ•ด ๋‘ ๋ฐฉ์‹์„ ํ•™์Šต์— ์ „๋ถ€ ๋‹ค ์ด์šฉํ•ด๋ณด์•˜๋‹ค. ๊ทธ ๊ฒฐ๊ณผ, ์ „๋ถ€ ๊ฐ™์€ ์กฐ๊ฑด์—์„œ ํ•™์Šต์„ ์ง„ํ–‰ํ–ˆ์„ ๋•Œ ์Šค์นผ๋ผ ํƒ€์ž…์ด ๋ฒกํ„ฐ ํƒ€์ž…์— ๋น„ํ•ด ์ด๋ฏธ ๊นŒ์ง„ ํƒ€์ผ์„ ์—ฌ๋Ÿฌ ๋ฒˆ ๋ˆŒ๋Ÿฌ ์ „์ฒด ์—ํ”ผ์†Œ๋“œ์˜ ์Šคํ… ์ˆ˜๊ฐ€ ์ฆ๊ฐ€ํ•˜๊ณ , ์ด ๋ฆฌ์›Œ๋“œ๊ฐ€ ๊ฐ์†Œํ•˜๋Š” ๋ชจ์Šต์ด ๋” ๊ฐ•ํ•˜๊ฒŒ ์˜ค๋ž˜ ๋™์•ˆ ๋ฐœ์ƒํ–ˆ๋‹ค. Alt text ์ด๋ฅผ ํ†ตํ•ด ๋‚ฎ์€ loss๊ฐ’์ด ๋” ๋น ๋ฅธ ์ˆ˜๋ ด์— ๋„์›€์„ ์ค„ ์ˆ˜ ์žˆ๋‹ค ์ƒ๊ฐํ•ด ์ดˆ๊ธฐ ์ˆ˜๋ ด์ด ๋น ๋ฅธ ๋ฒกํ„ฐ ํƒ€์ž…์„ ์ด์šฉํ•ด ๋Œ€๋ถ€๋ถ„์˜ ํ•™์Šต์„ ์ง„ํ–‰ํ–ˆ๋‹ค.

03. Train / Valid / Test

Train : ํ•™์Šต ์ง€ํ‘œ ์„ ํƒ

centrality : mean, median, mode

์ค„์–ด๋“œ๋Š” loss๋ฅผ ํ†ตํ•ด ํ•™์Šต ์ƒํ™ฉ์„ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๋”ฅ๋Ÿฌ๋‹ ํ•™์Šต๊ณผ ๋‹ฌ๋ฆฌ, ๊ฐ•ํ™”ํ•™์Šต์€ ๋‘ ์‹ ๊ฒฝ๋ง์—์„œ ๋งŒ๋“ค์–ด์ง„ target-pred ์‚ฌ์ด ์˜ค์ฐจ๊ฐ€ ํฌ์ง€ ์•Š์•„ loss๋งŒ์œผ๋กœ๋Š” ํ•™์Šต ์ƒํ™ฉ์„ ํŒŒ์•…ํ•  ์ˆ˜ ์—†๋‹ค. ๋”ฐ๋ผ์„œ ์ง€๋ขฐ์ฐพ๊ธฐ์—์„œ ์ฃผ์š” ์ง€ํ‘œ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋Š” ์Šน๋ฅ , ์—ํ”ผ์†Œ๋“œ ๋ณ„ step ์ˆ˜, ์—ํ”ผ์†Œ๋“œ ๋ณ„ reward๋ฅผ ํŠน์ • ๊ฐ„๊ฒฉ(100 / 1000)๋งˆ๋‹ค ์ถœ๋ ฅํ•ด ํ•™์Šต ๊ฒฝํ–ฅ์„ ํŒŒ์•…ํ–ˆ๋‹ค. ์—ํ”ผ์†Œ๋“œ ๋ณ„ step ์ˆ˜์™€ ์ด reward์˜ ๊ฒฝ์šฐ, ๊ตฌ๊ฐ„ ๋™์•ˆ ์—ํ”ผ์†Œ๋“œ๋ฅผ ๋Œ€ํ‘œํ•˜๋Š” ํ†ต๊ณ„๋Ÿ‰์œผ๋กœ ์ค‘์•™๊ฐ’์„ ์„ ํƒํ–ˆ๋‹ค. ์ค‘์‹ฌ์„ฑ์„ ๋‚˜ํƒ€๋‚ด๋Š” ํ†ต๊ณ„๋Ÿ‰์—๋Š” ํ‰๊ท , ์ค‘์•™๊ฐ’, ์ตœ๋นˆ๊ฐ’์ด ์žˆ๊ณ  ์ผ๋ฐ˜์ ์œผ๋กœ ํ‰๊ท ์ด ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋œ๋‹ค. ์ง€๋ขฐ์ฐพ๊ธฐ ํ…Œ์Šคํฌ๋Š” ๊ฐ™์€ ๊ณณ์„ ์—ฌ๋Ÿฌ๋ฒˆ ๋ˆ„๋ฅด๋Š” ํ–‰๋™, ์ถ”๋ก ์„ ํ•  ์ˆ˜ ์—†์—ˆ๋˜ ์ƒํ™ฉ์—์„œ ์ง€๋ขฐ๋ฅผ ๋ฐŸ๋Š” ํ–‰๋™, ์ฐ์–ด์•ผ๋งŒ ํ•˜๋Š” ํ–‰๋™์ด ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋žœ๋ค์„ฑ์ด ๊ฐ•ํ•œ ํ…Œ์Šคํฌ๋‹ค. ์ด์ฒ˜๋Ÿผ ๊ฐ•ํ•œ ๋žœ๋ค์„ฑ์„ ๋„๋Š” ํ…Œ์Šคํฌ์—์„œ๋Š” ๊ทน๋‹จ๊ฐ’์ด ์ž์ฃผ ๋ฐœ์ƒํ•จ์œผ๋กœ, ๊ทน๋‹จ๊ฐ’์— ์˜ํ–ฅ์„ ๋งŽ์ด ๋ฐ›๋Š” ํ‰๊ท ์€ ํ…Œ์Šคํฌ์— ์ ํ•ฉํ•œ ํ†ต๊ณ„๋Ÿ‰์ด ์•„๋‹ˆ๋ผ ํŒ๋‹จํ–ˆ๋‹ค. ์ตœ๋นˆ๊ฐ’์€ ๊ทน๋‹จ๊ฐ’์— ์˜ํ–ฅ์„ ๋งŽ์ด ๋ฐ›์ง€๋Š” ์•Š์ง€๋งŒ, ์ „์ฒด์ ์ธ ๊ฒฝํ–ฅ์„ ๋ณด๊ธฐ์—๋Š” ์ค‘์•™๊ฐ’์ด ๋” ์ข‹์€ ํ†ต๊ณ„๋Ÿ‰์ด๋ผ ํŒ๋‹จํ–ˆ๋‹ค.

Valid์˜ ์ค‘์š”์„ฑ

์ตœ๊ณ  ์„ฑ๋Šฅ์„ ๊ฐ€์ง„ ๋ชจ๋ธ์„ ์ฐพ๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ•™์Šต ์ค‘๊ฐ„ valid๊ฐ€ ํ•„์ˆ˜์ ์ด๋‹ค. ํ•™์Šต ์ค‘ ์ถœ๋ ฅ๋˜๋Š” ์ง€ํ‘œ๋Š” ๋™์ผํ•œ ๋ชจ๋ธ์—์„œ ๋‚˜์˜จ ๊ฒฐ๊ณผ๋ฌผ์ด ์•„๋‹ˆ๋‹ค. ์ด ํ”„๋กœ์ ํŠธ์˜ ๊ฒฝ์šฐ, step๋งˆ๋‹ค ํ•™์Šต์ด ์ผ์–ด๋‚ฌ๊ธฐ ๋•Œ๋ฌธ์— 100 ์—ํ”ผ์†Œ๋“œ์— ํ‰๊ท  15 step์ด๋ผ๋ฉด ํ•™์Šต์˜ ์ถœ๋ ฅ๋ฌผ์€ ์ด 1500๊ฐœ ๋ชจ๋ธ์˜ ๊ฒฐ๊ณผ๋ฌผ์ด๋‹ค. ๋”ฐ๋ผ์„œ ํ•™์Šต ์ง€ํ‘œ๋งŒ์„ ๊ธฐ์ค€์œผ๋กœ ์ตœ๊ณ  ์Šน๋ฅ ์ด ์ฐํžŒ ์ˆœ๊ฐ„์˜ ๋ชจ๋ธ์„ ์ €์žฅํ•œ๋‹ค๋ฉด, ์ €์žฅ๋œ ๋ชจ๋ธ์€ ์ตœ๊ณ  ์Šน๋ฅ ์„ ๊ฐ€์ง„ ๊ตฌ๊ฐ„์˜ ๋ง๋‹จ ๋ชจ๋ธ์ผ๋ฟ, ์ตœ๊ณ  ์Šน๋ฅ ์„ ๋ณด์ผ ๊ฒƒ์ด๋ผ ๊ธฐ๋Œ€ํ•  ์ˆ˜ ์—†๋‹ค. ๋˜ํ•œ ์ง€๋ขฐ์ฐพ๊ธฐ๋Š” ๋žœ๋ค์„ฑ์ด ๊ฐ•ํ•œ ํ…Œ์Šคํฌ๊ธฐ ๋•Œ๋ฌธ์— ์„ฑ๋Šฅ์ด ์ข‹์€ ๋ชจ๋ธ์ผ์ง€๋ผ๋„ ์šด์— ์˜ํ•ด ๊ฒŒ์ž„์ด ์กฐ๊ธฐ ์ข…๋ฃŒ๋  ์ˆ˜ ์žˆ๋‹ค. valid๋Š” ํ•™์Šต ์ค‘๊ฐ„์— ํŠน์ • ๋ชจ๋ธ์„ ๋ฐ›์•„ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋†“์น  ์ˆ˜ ์žˆ๋Š” ์—ฌ๋Ÿฌ ๋ชจ๋ธ๋“ค์„ ์ ๊ฒ€ํ•˜๊ฒŒ ๋งŒ๋“ ๋‹ค.

์ตœ๊ณ  ์Šน๋ฅ ์„ ๋†“์น˜์ง€ ์•Š๊ธฐ ์œ„ํ•ด ์—ฌ๋Ÿฌ ๊ธฐ๋ฐ˜ ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค๋˜, valid๊ฐ€ ๊ณผํ•ด ํ•™์Šต ์†๋„๊ฐ€ ๊ณผํ•˜๊ฒŒ ์ €ํ•˜๋˜์ง€ ์•Š๋„๋ก ํ–ˆ๋‹ค. ํ•™์Šต ์ค‘ ์ตœ๊ณ  ์Šน๋ฅ ์„ ์ฐ์—ˆ์„ ๋•Œ๋ฅผ ๊ธฐ์ ์œผ๋กœ ํ•˜๋ฉฐ, ์ฐ์€ ์ˆœ๊ฐ„์˜ ํ„ฐ๋ฏธ๋„ ๋ชจ๋ธ(best_model_train)์„ validํ–ˆ๊ณ , ์ดํ›„ 10 ์—ํ”ผ์†Œ๋“œ๋งˆ๋‹ค ํ…€์„ ์ฃผ๊ณ  10๋ฒˆ valid๋ฅผ ์ง„ํ–‰ํ–ˆ๋‹ค(best_model_valid). ๋˜ํ•œ ์ถ”๊ฐ€์ ์œผ๋กœ ์Šน๋ฆฌํ•œ ๋ชจ๋ธ์„ ๋ฎ์–ด์”Œ์šฐ๋ฉฐ ์ €์žฅํ•ด ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์— ์Šน๋ฆฌํ•œ ๋ชจ๋ธ(best_model_successed)๊ณผ ํ•™์Šต์—์„œ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰ ๋ชจ๋ธ(final_model)์„ ์ €์žฅํ–ˆ๋‹ค.

Valid์—์„œ ์ ์ ˆํ•œ ํ‘œ๋ณธ ์ˆ˜

ํ•™์Šต์˜ ๊ฒฝํ–ฅ๊ณผ ํ•™์Šต ์ดํ›„ ์‚ฌํ›„์ ์œผ๋กœ ์ง„ํ–‰ํ•œ test๋ฅผ ํ†ตํ•ด ์ ์ ˆํ•œ ํ‘œ๋ณธ ์ˆ˜๋ฅผ ์ •ํ–ˆ๋‹ค.

ํ•™์Šต ๊ฒฝํ–ฅ

ํ•™์Šต์—์„œ 100 ์—ํ”ผ์†Œ๋“œ๋งˆ๋‹ค ์Šคํ…, ์ด๋ณด์ƒ์˜ ์ค‘์•™๊ฐ’๊ณผ ์Šน๋ฅ ์„ ์ถœ๋ ฅํ–ˆ๋‹ค. 100 ๊ธฐ์ค€์œผ๋กœ ํ•™์Šต์„ ํ‰๊ฐ€ํ•˜๋Š” ๊ฒƒ์€ ์ถœ๋ ฅ ๊ฐ„๊ฒฉ์ด ์งง์•„ ํ•™์Šต ์ƒํ™ฉ์„ ๋น ๋ฅด๊ฒŒ ํŒ๋‹จํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ถ„์‚ฐ์ด ์ปค valid/test์™€ train์—์„œ์˜ ์ตœ๊ณ  ์Šน๋ฅ  ์‚ฌ์ด์— ์˜ค์ฐจ๊ฐ€ ์‹ฌํ•˜๋‹ค๋Š” ๋‹จ์ ์ด ์กด์žฌํ–ˆ๋‹ค. ๋ถ„์‚ฐ์ด ๋‚ฎ์€ ์ถ”์ •๋Ÿ‰์„ ์–ป๊ธฐ ์œ„ํ•ด, ํ•™์Šต์„ ํ‰๊ฐ€ํ•˜๋Š” ๊ธฐ์ค€์„ 1000์œผ๋กœ ๋Š˜๋ ค ๊ฐ™์€ ํ•™์Šต ์ƒํ™ฉ์„ ์‹œ๊ฐํ™”ํ–ˆ๋‹ค.

  • ์ „์ฒด ์Šน๋ฅ ์„ ์‹œ๊ฐ„์— ๋”ฐ๋ผ ์‹œ๊ฐํ™” Alt text

  • ์‹œ๊ฐ„๋Œ€๋ฅผ 6๊ฐœ๋กœ ๋‚˜๋ˆˆ ๋’ค(5๋งŒ ๋‹จ์œ„), boxplot์œผ๋กœ ํผ์ง„ ์ •๋„๋ฅผ ์‹œ๊ฐํ™” Alt text

๊ทน๋‹จ๊ฐ’์— ์˜ํ–ฅ์„ 100 ๊ธฐ์ค€์— ๋น„ํ•ด ๋œ ๋ฐ›์•„ ๋ถ„์‚ฐ์ด ์ ์—ˆ์œผ๋ฉฐ, ์‹ค์ œ ๋ชจ๋ธ๊ณผ ํ•™์Šต์˜ ์ตœ๊ณ  ์„ฑ๋Šฅ ์‚ฌ์ด์˜ ์˜ค์ฐจ๋„ ์œ ์˜๋ฏธํ•˜๊ฒŒ ์ ์—ˆ๋‹ค. ์ด ๋‘ ๊ฐœ์˜ ์ž๋ฃŒ๋ฅผ ํ†ตํ•ด ๋ถ„์‚ฐ์ด ํฐ ์ง€๋ขฐ์ฐพ๊ธฐ ํ•™์Šต์—์„œ ๋ถ„์‚ฐ์ด ์ž‘์€ ๋ถˆํŽธ ์ถ”์ •๋Ÿ‰์„ ์–ป๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ‘œ๋ณธ์„ 100๊ฐœ๋ณด๋‹ค 1000๊ฐœ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•˜๋Š” ๊ฒƒ์ด ํšจ๊ณผ์ ์ž„์„ ์•Œ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

ํ…Œ์ŠคํŠธ ์‹œ๋ฎฌ๋ ˆ์ด์…˜

  • ๊ณ ์ •๋œ ๋ชจ๋ธ๋กœ 100 ์—ํ”ผ์†Œ๋“œ์ผ ๋•Œ์˜ ์Šน๋ฅ , 1000 ์—ํ”ผ์†Œ๋“œ์ผ ๋•Œ์˜ ์Šน๋ฅ ์„ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•จ
  • 100 ์—ํ”ผ์†Œ๋“œ๋Š” ์ด 1000ํšŒ ์ง„ํ–‰, 1000 ์—ํ”ผ์†Œ๋“œ๋Š” ์ด 100ํšŒ ์ง„ํ–‰, ๊ณตํ†ต 10๋งŒ ์—ํ”ผ์†Œ๋“œ

Alt text

Test Sample Size mean (ยฑ sd) min / max
100 0.828 (ยฑ 0.035) 0.74 / 0.90
1000 0.825 (ยฑ 0.011) 0.803 / 0.857

100 ์—ํ”ผ์†Œ๋“œ์—์„œ์˜ ์Šน๋ฅ ์ด ํ‘œ๋ณธ ์ˆ˜๊ฐ€ ๋” ๋งŽ์•„ ์™„๋งŒํ•œ ์ •๊ทœ๋ถ„ํฌ์˜ ํ˜•ํƒœ๋ฅผ ๋„๊ณ  ์žˆ์ง€๋งŒ, ๋ถ„์‚ฐ์ด 1000 ์—ํ”ผ์†Œ๋“œ๋ณด๋‹ค ํ›จ์”ฌ ํฌ๋‹ค. ๋ฐ˜๋Œ€๋กœ 1000 ์—ํ”ผ์†Œ๋“œ์˜ ๊ฒฝ์šฐ, ๋ถ„์‚ฐ์ด ํ˜„์ €ํ•˜๊ฒŒ ์ž‘์œผ๋ฉฐ min-max ๊ฐ’ ๋˜ํ•œ 80-85% ์‚ฌ์ด๋กœ ์˜ค์ฐจ ๋ฒ”์œ„๊ฐ€ ์ ๋‹ค.

๊ตฌํ˜„ํ•œ valid๋Š” test์™€ ๋‹ฌ๋ฆฌ ๊ณ ์ •๋œ ๋ชจ๋ธ์˜ ์Šน๋ฅ ์„ ์—ฌ๋Ÿฌ ๋ฒˆ ํ™•์ธํ•˜์ง€ ์•Š๊ณ  ํ•œ ๋ฒˆ์˜ ๊ฒ€์ฆ์œผ๋กœ๋งŒ ๋ชจ๋ธ์„ ํ‰๊ฐ€ํ•œ๋‹ค. ํ•œ ๋ฒˆ์˜ ๊ฒ€์ฆ์—์„œ ์–ป์€ ์ถ”์ •์น˜๊ฐ€ ๋ถˆํŽธํ–ฅ ์ถ”์ •์น˜์— ๊ทผ์ ‘ํ•ด์•ผ ํ•˜๊ธฐ์—, ๋ถ„์‚ฐ์ด ์ž‘์€ 1000๊ฐœ์—์„œ์˜ ์Šน๋ฅ ์ด 100๊ฐœ์—์„œ๋ณด๋‹ค ์ ํ•ฉํ•˜๋‹ค.

04. Trouble Shooting

์ด๋ฏธ ๊นŒ์ง„ ํƒ€์ผ์„ ๋˜ ๋ˆ„๋ฅด๋Š” ์‚ฌ๊ฑด

์ง€๋ขฐ์ฐพ๊ธฐ ํ…Œ์Šคํฌ์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๋ฌธ์ œ๋Š” ์ด๋ฏธ ์—ด๋ฆฐ ํƒ€์ผ์„ ๋˜ ๋ˆ„๋ฅด๋Š” ํ–‰๋™์„ ๋ฐฉ์ง€ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ด๋ฏธ ์—ด๋ฆฐ ํƒ€์ผ์„ ๋˜ ๋ˆ„๋ฅด๋Š” ํ–‰๋™์€ ์ง์ ‘์ ์ธ ํŒจ๋ฐฐ์— ๊ธฐ์—ฌํ•˜์ง€ ์•Š์ง€๋งŒ, ํƒํ—˜๋ฅ ์ด ์—†๋Š” ์ƒํ™ฉ์—์„œ ๋ฌดํ•œ ์—ํ”ผ์†Œ๋“œ ๋ฌธ์ œ๋ฅผ ์•ผ๊ธฐ์‹œํ‚ค๊ณ  ์ค‘๋ณต ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑํ•ด ์Šน๋ฆฌ์— ๊ธฐ์—ฌํ•˜๋Š” ์–‘์งˆ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฆฌํ”Œ๋ ˆ์ด ๋ฉ”๋ชจ๋ฆฌ์— ์Œ“์ง€ ๋ชปํ•œ๋‹ค.

  • ์ด๋ฏธ ์—ด๋ฆฐ ํƒ€์ผ์„ ๋ˆ„๋ฅด๋Š” ํ–‰๋™ : no_progress

1. ํ–‰๋™์„ ๊ฐ•์ œ๋กœ ์ œํ•œํ•˜๋Š” ๋ฐฉ๋ฒ•

@sdlee94์˜ ์ฝ”๋“œ์—์„œ ์•„์ด๋””์–ด๋ฅผ ์–ป์–ด ์ด๋ฏธ ๊นŒ์ง„ ํƒ€์ผ์˜ Q๊ฐ’์„ ์ „์ฒด Q๊ฐ’ ์ค‘ ์ตœ์†Œ๊ฐ’์œผ๋กœ ์ฃฝ์—ฌ ์„ ํƒ์„ ๊ฐ•์ œ๋กœ ํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ๋งŒ๋“ค์—ˆ๋‹ค. ์ด ๋ฐฉ๋ฒ•๋ก ์€ ์ด๋ฏธ ๊นŒ์ง„ ํƒ€์ผ์„ ์ ˆ๋Œ€ ๋ˆ„๋ฅด์ง€๋Š” ์•Š์ง€๋งŒ, 44% ์ด์ƒ์œผ๋กœ ์„ฑ๋Šฅ์ด ๋‚˜์•„์ง€์ง€ ์•Š์•˜๋‹ค. ๊นŒ์ง„ ํƒ€์ผ์„ ๊ฐ•์ œ๋กœ ์„ ํƒํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด ์ผ์ข…์˜ ์•ˆ๋‚ดํŒ์ด ๋  ๊ฒƒ์ด๋ผ ์ƒ๊ฐํ–ˆ์ง€๋งŒ ๋‚˜์•„์ง€์ง€ ์•Š๋Š” ์„ฑ๋Šฅ์„ ๋ณด๋ฉฐ ์˜คํžˆ๋ ค ์ด ๋ฐฉ๋ฒ•๋ก ์ด ํ™˜๊ฒฝ์˜ ๋ณต์žก๋„๋ฅผ ๋†’์ด๊ณ  ์žˆ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๊ณ , ์›์ธ์„ ๊ณ ๋ฏผํ–ˆ๋‹ค.

  1. ์ด๋ฏธ ๊นŒ์ง„ ํƒ€์ผ์„ ๋˜ ๋ˆ„๋ฅด๋Š” ํ–‰๋™์€ ๊ฒŒ์ž„ ํด๋ฆฌ์–ด๋ฅผ ๋ง‰๋Š” ์ฃผ์š” ๊ณ ๋ ค ๋Œ€์ƒ์ด๋‹ค. ๋ฐฉ๋ฒ•๋ก ์„ ์ ์šฉํ•  ๋•Œ๋Š” ์ด ํ–‰๋™์ด ์Šน๋ฆฌ๋‚˜ ํŒจ๋ฐฐ์— ๊ธฐ์—ฌํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๋‹ค์ง€ ์˜๋ฏธ๊ฐ€ ์—†๋Š” ํ–‰๋™์ด๋ผ ์ƒ๊ฐํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ง€๋ขฐ์ฐพ๊ธฐ๋Š” ์ง€๋ขฐ๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ํƒ€์ผ์„ ๊นŒ๋Š” ๊ฒŒ์ž„์ด๋‹ค. ๋‹ค์‹œ ๋งํ•ด ์ด๋ฏธ ๊นŒ์ง„ ํƒ€์ผ์„ ๋˜ ๋ˆ„๋ฅด๋Š” ํ–‰๋™์€ ๊ฒŒ์ž„์˜ ์Šน๋ฆฌ์— ๋‹ค๊ฐ€๊ฐ€๋„๋ก ๋งŒ๋“ค์ง€ ๋ชปํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฒŒ์ž„ ์Šน๋ฆฌ๋ฅผ ๋ฐฉํ•ดํ•˜๋Š” ์š”์†Œ๋‹ค. ๋”ฐ๋ผ์„œ ์ด ํ–‰๋™์„ ๊ฐ•์ œ๋กœ ์ œํ•œํ•˜๋Š” ๊ฒƒ์€ ์ง€๋ขฐ๊ฐ€ ์•„๋‹Œ ๋ชจ๋“  ํƒ€์ผ์„ ์ „๋ถ€ ๋‹ค ๊นŒ๋„๋ก ์ œ๋Œ€๋กœ ์œ ๋„ํ•˜์ง€ ๋ชปํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ™˜๊ฒฝ์˜ ๋ณต์žก๋„๋ฅผ ๋†’์ธ๋‹ค.

  2. ํ–‰๋™์„ ์ œํ•œํ•˜๋Š” ๊ฒƒ์ด DQN์˜ ๋ชจ๋“  ๋ถ€๋ถ„์— ์ ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค. ์ด๋ฏธ ๊นŒ์ง„ ํƒ€์ผ์„ ๋ˆ„๋ฅด์ง€ ๋ชปํ•˜๊ฒŒ ํ•˜๋Š” ๊ฒƒ์€ ํ–‰๋™์„ ์ •ํ•˜๋Š” ๋งค์†Œ๋“œ์ธ get_action(state)์—๋งŒ ์ ์šฉํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด ์ƒํ™ฉ์—์„œ๋Š” ๋ฆฌํ”Œ๋ ˆ์ด ๋ฉ”๋ชจ๋ฆฌ์—์„œ state-action ํŽ˜์–ด๋ฅผ ๊บผ๋‚ด ์˜ˆ์ธก๊ฐ’์„ ๋งŒ๋“ค ๋•Œ๋Š” ๋ฌธ์ œ๊ฐ€ ์—†์ง€๋งŒ, next_state๋ฅผ ๋ฐ›์•„ ๋‹ค์Œ ํƒ€๊ฒŸ๊ฐ’์„ ๋งŒ๋“œ๋Š” ํƒ€๊ฒŸ ์‹ ๊ฒฝ๋ง์—์„œ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด๋‹ค. ํƒ€๊ฒŸ ์‹ ๊ฒฝ๋ง์„ ํ†ตํ•ด ์–ป์€ Q ๊ฐ’๋“ค ์ค‘ ์ตœ๋Œ€๊ฐ’์€ ํƒ€๊ฒŸ๊ฐ’์ด ๋˜๋Š”๋ฐ, ์ด๋•Œ ์ตœ๋Œ€๊ฐ’์„ ๊ฐ–๋Š” ํ–‰๋™์€ ์ด๋ฏธ ๊นŒ์ง„ ํƒ€์ผ์„ ๋ˆ„๋ฅด๋Š” ํ–‰๋™์ผ ์ˆ˜ ์žˆ๋‹ค. ์ด ๊ฐ’์€ next_state๊ฐ€ ์ค„ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€์˜ ๊ฐ€์น˜์ด์ง€๋งŒ ๋ฆฌํ”Œ๋ ˆ์ด ๋ฉ”๋ชจ๋ฆฌ์˜ state-action-reward์—๋Š” ์ด๋ฏธ ๊นŒ์ง„ ๊ณณ์„ ๋ˆ„๋ฅด๋Š” ์‚ฌ๊ฑด์ด ์กด์žฌํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ œ๋Œ€๋กœ ๋œ ๊ฐ’์ด ๋‚˜์˜ค๋„๋ก ํ•™์Šต๋œ ์‹ ๊ฒฝ๋ง์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค. ๋”ฐ๋ผ์„œ ์ด ๊ฐ’์€ ์ œ๋Œ€๋กœ ๊ทผ์‚ฌ๋  ์ˆ˜ ์—†๊ธฐ์— ์‹ ๊ฒฝ๋ง์˜ ํ•œ๊ณ„๋ฅผ ์•ผ๊ธฐ์‹œํ‚จ๋‹ค.

2. valid / test์—์„œ ์ด๋ฏธ ์—ด๋ฆฐ ํƒ€์ผ์„ ๋ˆ„๋ฅด๋ฉด ์—ํ”ผ์†Œ๋“œ ๊ฐ•์ œ ์ข…๋ฃŒ

์ด๋ฏธ ๊นŒ์ง„ ํƒ€์ผ์„ ๊ฐ•์ œ๋กœ ์„ ํƒํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ๋งŒ๋“ค์ง€ ์•Š์œผ๋ฉด, valid์—์„œ ์ด๋ฏธ ๋ˆ„๋ฅธ ํƒ€์ผ์„ ๋˜ ๋ˆ„๋ฅด๋Š” ํ–‰๋™์€ ํ•„์—ฐ์ ์œผ๋กœ ๋ฐœ์ƒํ•œ๋‹ค. ์ฝ”๋“œ ์ƒ valid๋Š” ํ•™์Šต ๋„์ค‘ ์ตœ๊ณ  ์Šน๋ฅ ์ด ๋‚˜์˜ฌ ๋•Œ๋งˆ๋‹ค ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ดˆ๋ฐ˜๋ถ€ํ„ฐ valid๊ฐ€ ๋Œ์•„๊ฐ€๊ฒŒ ๋œ๋‹ค. ์ด ์‹œ๊ธฐ๋Š” ์ž…์‹ค๋ก ์— ์˜ํ•ด, ์šด์— ์˜ํ•ด ์Šน๋ฆฌ์— ๋„๋‹ฌํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋Œ€๋ถ€๋ถ„์ด๊ธฐ์— ํ™˜๊ฒฝ์˜ ๊ตฌ์กฐ๋ฅผ ์ œ๋Œ€๋กœ ์ดํ•ดํ•˜์ง€ ๋ชปํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์‹ค์ œ ๋ณด์ƒ ํšŒ๋กœ์™€ ๊ด€๊ณ„์—†์ด, valid๋‚˜ test์—๋Š” ์ด๋ฏธ ๊นŒ์ ธ์žˆ๋Š” ํƒ€์ผ์„ ๋ˆ„๋ฅด๋ฉด ๊ฐ•์ œ๋กœ ์—ํ”ผ์†Œ๋“œ๋ฅผ ์ข…๋ฃŒํ•ด ๋ฌดํ•œ ์—ํ”ผ์†Œ๋“œ ๋ฌธ์ œ๋ฅผ ๋ฐฉ์ง€ํ–ˆ๋‹ค. ๊ทธ ๊ฒฐ๊ณผ ํ•™์Šต์—์„œ๋Š” ๋žœ๋คํ•œ ํ–‰๋™์„ ํ†ตํ•ด ํƒˆ์ถœํ•  ์ˆ˜ ์žˆ์—ˆ๋˜ ์—ํ”ผ์†Œ๋“œ๊ฐ€ ๊ฐ•์ œ๋กœ ์ข…๋ฃŒ๋˜์–ด ํ•™์Šต๊ณผ valid/test ์‚ฌ์ด์— 20% ๊ฐ€๋Ÿ‰์˜ ์„ฑ๋Šฅ ์ฐจ์ด๊ฐ€ ์กด์žฌํ–ˆ๋‹ค.

3. no progress : done = True

์ด๋ฏธ ๋ˆ„๋ฅธ ํƒ€์ผ์„ ๋˜ ๋ˆ„๋ฅด๋ฉด ์—ํ”ผ์†Œ๋“œ๋ฅผ ๊ฐ•์ œ๋กœ ์ข…๋ฃŒ์‹œ์ผฐ๋‹ค. ์ด ๋ฐฉ์‹์€ done=False์ธ ๋ฐฉ๋ฒ•๋ก ๋“ค๋ณด๋‹ค valid/test์™€ ํ•™์Šต์˜ win rate ๊ฒฉ์ฐจ๊ฐ€ ์ ์—ˆ๋‹ค. done์˜ T/F๋Š” ํ•™์Šต ์–‘์ƒ์—์„œ ์ฐจ์ด๋ฅผ ๋ณด์˜€๋‹ค. ๊ฐ™์€ ๊ฒƒ์„ ๋ˆŒ๋Ÿฌ๋„ ํ•™์Šต์ด ์ข…๋ฃŒ๋˜๋‹ค๋ณด๋‹ˆ done์ด False์ผ ๋•Œ๋ณด๋‹ค ์—ํ”ผ์†Œ๋“œ์˜ ๊ธธ์ด๊ฐ€ ์ ˆ๋Œ€์ ์œผ๋กœ ์งง์•˜๊ณ , ๊ทธ ๊ฒฐ๊ณผ ๋ฆฌํ”Œ๋ ˆ์ด ๋ฉ”๋ชจ๋ฆฌ์— ์ฐจ๋Š” ๋ฐ์ดํ„ฐ ์–‘์ด ์ ์—ˆ๋‹ค. done์ด False์ธ ์• ๋“ค์€ 5๋งŒ ์—ํ”ผ์†Œ๋“œ์—์„œ ์ด๋ฏธ 50% ์ด์ƒ์˜ ์Šน๋ฅ ์„ ๋ณด์˜€์ง€๋งŒ, done์ด True์ธ ์• ๋“ค์€ 5% ์ •๋„์˜ ์Šน๋ฅ ์„ ๋ณด์˜€๋‹ค. ํ•˜์ง€๋งŒ ์Šน๋ฅ ์ด ์•ˆ ๋‚˜์˜ฌ ๋ฟ ์—ํ”ผ์†Œ๋“œ์˜ ์ด ๋ณด์ƒ๊ณผ step ์ˆ˜๋Š” ๋น ๋ฅด๊ฒŒ ์ฆ๊ฐ€ํ–ˆ๊ณ , 10๋งŒ ์—ํ”ผ์†Œ๋“œ๋ถ€ํ„ฐ๋Š” done=False์ธ ์• ๋“ค์˜ ์„ฑ๋Šฅ์„ ๋”ฐ๋ผ์žก์•˜๋‹ค. 60๋งŒ๊นŒ์ง€ ๋Œ๋ ธ์„ ๋•Œ test์˜ ๊ฒฐ๊ณผ๋Š” ํ‰๊ท  76%๋กœ, done=False์ธ ์• ๋“ค๋ณด๋‹ค 2% ๊ฐ€๋Ÿ‰ ๋†’์€ ์Šน๋ฅ ์„ ๋ณด์˜€๋‹ค.

Alt text Alt text Alt text

4. Reward : -0.5 --> -1

์ฒ˜์Œ no progress์˜ ๋ฆฌ์›Œ๋“œ๋ฅผ ๊ตฌ์„ฑํ•  ๋•Œ์—” ์ด ํ–‰๋™์ด ๋‹จ์ˆœํžˆ ๊ฒŒ์ž„์„ ์ง„์ „์‹œํ‚ค์ง€ ๋ชปํ•  ๋ฟ, ๊ฒŒ์ž„์˜ ์ŠนํŒจ์— ์ง์ ‘์ ์œผ๋กœ ๊ด€์—ฌํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ์ƒ๊ฐํ•ด -0.5(ํŒจ๋ฐฐ์‹œ์˜ ์ ˆ๋ฐ˜) ํฌ๊ธฐ์˜ ๋ฆฌ์›Œ๋“œ๋ฅผ ๋ถ€์—ฌํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ฃฝ์ง€์•Š๊ณ  ํƒ€์ผ์„ ๊นŒ๋Š” ํ–‰๋™์ด ์ข‹๊ณ , ๊ทธ๋ ‡์ง€ ๋ชปํ•œ ํ–‰๋™์ด ์ „๋ถ€ ๋‚˜์œ ํ–‰๋™์ด๋ผ ์ง€๋ขฐ์ฐพ๊ธฐ๋ฅผ ๋‹จ์ˆœํ™”์‹œํ‚ค๋ฉด ์ด ํ–‰๋™์€ ์ง€๋ขฐ๋ฅผ ๋ฐŸ๋Š” ๊ฒƒ๋งŒํผ์ด๋‚˜ ๋‚˜์œ ํ–‰๋™์ด๋‹ค. ๋ ๋ฆฌ์„œ ์ด ๋•Œ์˜ ๋ณด์ƒ์„ ์‹คํŒจํ–ˆ์„ ๋•Œ์™€ ๋™์ผํ•œ -1์„ ๊ฐ’์„ ์ฃผ๋˜, ์ง€๋ขฐ๋ฅผ ๋ฐŸ์•˜์„ ๋•Œ์™€ ๋‹ฌ๋ฆฌ ์—ํ”ผ์†Œ๋“œ๊ฐ€ ๋๋‚˜์ง€ ์•Š๊ฒŒ ํ–ˆ๋‹ค. ํ•™์Šต ์ดˆ๋ฐ˜์—๋Š” ๋‚˜์œ ํ–‰๋™์ž„์„ ํ•™์Šตํ•˜์ง€ ๋ชปํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฌดํ•œ ์—ํ”ผ์†Œ๋“œ์—์„œ ํƒˆ์ถœํ•˜๊ธฐ ์‰ฝ๋„๋ก ํƒํ—˜๋ฅ ์„ ๋Š๋ฆฌ๊ฒŒ ๊ฐ์†Œ์‹œ์ผฐ๊ณ , ์ดํ›„์—๋„ ๋ฌธ์ œ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ณ ์ž ํฐ ์ตœ์†Œ ํƒํ—˜๋ฅ (1%)์„ ์œ ์ง€ํ–ˆ๋‹ค.

์—ํ”ผ์†Œ๋“œ ํ›„๋ฐ˜ 80% ์ •๋„์˜ ์•ˆ์ •์ ์ธ ์Šน๋ฅ ์— ๋„๋‹ฌํ–ˆ์„ ๋•Œ ์ตœ์†Œ ํƒํ—˜๋ฅ ์„ 0.1%๋กœ ์ค„์ธ ๋‹ค์Œ 20๋งŒ ์—ํ”ผ์†Œ๋“œ๋ฅผ ์ถ”๊ฐ€๋กœ ๋Œ๋ ธ๋‹ค. ํฐ ์„ฑ๋Šฅ์˜ ์ฐจ์ด๊ฐ€ ์žˆ์ง„ ์•Š์•˜์œผ๋‚˜, ๊ฐ€๋”์”ฉ ๋ฆฌ์›Œ๋“œ๋‚˜ step์— ๊ทน๋‹จ๊ฐ’์ด ๋‚˜ํƒ€๋‚˜๋Š” ๊ฒƒ์„ ๋ณด์•„, 80%๊ฐ€ ๋„˜๋Š” ๋ชจ๋ธ์—์„œ๋„ ์ด๋ฏธ ๊นŒ์ง„ ํƒ€์ผ์„ ๋˜ ๋ˆ„๋ฅด๋Š” ํ–‰๋™์ด ๋ฐœ์ƒํ•˜์ง€๋งŒ, ๋นˆ๋„๊ฐ€ ๊ทนํžˆ ์ ์Œ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ๋˜ํ•œ ํฐ ์ตœ์†Œ ํƒํ—˜๋ฅ ์ด ์ด๋ฏธ ๊นŒ์ง„ ํƒ€์ผ์„ ๋˜ ๋ˆ„๋ฅผ ๋•Œ ์‹ ์†ํ•œ ํƒˆ์ถœ์„ ๋„์™”์Œ์„ ์ง์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค.

Alt text Alt text

์ฃผ๋ณ€ ํƒ€์ผ์ด ๊นŒ์ง€์ง€ ์•Š์€ ํƒ€์ผ์„ ์„ ํƒํ•˜๋Š” ์‚ฌ๊ฑด

  • ์ฃผ๋ณ€ ํƒ€์ผ์ด ๊นŒ์ง€์ง€ ์•Š์€ ํƒ€์ผ์„ ์„ ํƒํ•˜๋Š” ํ–‰๋™ : Guess

์‚ฌ๋žŒ์ด ์ง€๋ขฐ์ฐพ๊ธฐ๋ฅผ ํ”Œ๋ ˆ์ดํ•  ๋•Œ๋Š” ์ด๋ฏธ ๊นŒ์ง„ ์ฃผ๋ณ€๋ถ€ ํƒ€์ผ์„ ํ†ตํ•ด, ํŠน์ • ํƒ€์ผ์ด ์ง€๋ขฐ์ผ์ง€ ์•„๋‹์ง€ ํŒ๋‹จํ•œ๋‹ค. ํ•˜์ง€๋งŒ ๊ฐ•ํ™”ํ•™์Šต์˜ ์—์ด์ „ํŠธ๋Š” ์ง€๋ขฐ์ฐพ๊ธฐ์˜ ๋ฃฐ์„ ์•Œ์ง€ ๋ชปํ•˜๋ฉฐ, ์ฃผ๋ณ€๋ถ€ ํƒ€์ผ์„ ํ†ตํ•ด ๊ฐ’์„ ์ถ”๋ก ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๋กœ์ง์„ ์•Œ์ง€ ๋ชปํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์ฃผ๋ณ€๋ถ€ ํƒ€์ผ์ด ๊นŒ์ง€์ง€ ์•Š์€ ํƒ€์ผ์„ ๋ˆ„๋ฅด๋Š” ํ–‰๋™๊ณผ ์ผ๋ฐ˜ ์ง„์ „๊ณผ ๋‹ค๋ฅธ ๋ณด์ƒ์„ ์ฃผ๋ฉด ๋กœ์ง์„ ๋” ๋น ๋ฅด๊ฒŒ ์Šต๋“ํ•  ๊ฒƒ์ด๋ผ๋Š” ๊ฐ€์„ค์„ ์„ธ์› ๋‹ค. ์ด ํ–‰๋™์„ Guess๋ผ ์ •์˜ํ•˜๊ณ , ๋‹ค๋ฅธ ์„ธ๊ฐ€์ง€ ๋ณด์ƒ์„ ์ฃผ๋ฉฐ ํ…Œ์ŠคํŠธํ–ˆ๋‹ค.

01. ์Œ์˜ ๋ณด์ƒ์„ ์คŒ

์ฃผ๋ณ€๋ถ€ ํƒ€์ผ์ด ๊นŒ์ง€์ง€ ์•Š์œผ๋ฉด ํƒ€์ผ์ด ์ง€๋ขฐ์ธ์ง€ ์ถ”๋ก ํ•  ์ˆ˜ ์—†๋‹ค. ๋”ฐ๋ผ์„œ Guess๋Š” ์ถ”๋ก ์ด ์•„๋‹Œ ์šด์— ์ŠนํŒจ๋ฅผ ๋งก๊ฒจ ๊ฒŒ์ž„ ์˜ค๋ฒ„์˜ ๊ฐ€๋Šฅ์„ฑ์„ ๋†’์ธ๋‹ค. Guess๋ฅผ ์ตœ๋Œ€ํ•œ ์„ ํƒํ•˜์ง€ ์•Š๋„๋ก Guessํ–‰๋™์— ์Œ์˜ ๋ณด์ƒ(-0.3)์„ ๋ถ€์—ฌํ•ด ํ–‰๋™์„ ํ”ผํ•˜๊ฒŒ ๋งŒ๋“ค์—ˆ๋‹ค.

02. Progress๋ณด๋‹จ ์ ์€ ์–‘์˜ ๋ณด์ƒ

no progress ๋‹จ์—์„œ ์ด์•ผ๊ธฐํ–ˆ๋“ฏ ์ฃฝ์ง€ ์•Š์€์ฑ„ ํƒ€์ผ์„ ๊นŒ๋Š” ํ–‰๋™์€ ์ข‹๊ณ  ๊ทธ๋ ‡์ง€ ์•Š์€ ํ–‰๋™์ด ์ „๋ถ€ ๋‚˜์œ ํ–‰๋™์ด๋ผ ์ง€๋ขฐ์ฐพ๊ธฐ๋ฅผ ๋‹จ์ˆœํ™”์‹œํ‚ค๋ฉด Guess๋Š” ์ฃฝ์ง€ ์•Š๊ณ  ํƒ€์ผ์„ ๊นŒ๊ธฐ์— ์ข‹์€ ํ–‰๋™์ด๋‹ค. ์ด ๋งฅ๋ฝ์—์„œ 01์—์„œ ์‹œ๋„ํ•œ Guess์—์„œ ์Œ์˜ ๋ณด์ƒ์„ ๋ถ€์—ฌํ•˜๋Š” ๊ฒƒ์€ ๋…ผ๋ฆฌ์ ์œผ๋กœ ์˜ณ์ง€ ์•Š๋‹ค. 01๊ณผ ๋‹ฌ๋ฆฌ ์Œ์˜ ๋ณด์ƒ์„ ์ฃผ์ง„ ์•Š์ง€๋งŒ, Progress๋ณด๋‹จ ๋œ ์ข‹์€ ํ–‰๋™์ด๋ผ๋Š” ๊ฒƒ์„ ๊ฐ•์กฐํ•˜๊ธฐ ์œ„ํ•ด Progress๋ณด๋‹ค ์ž‘์€ ์–‘์˜ ๋ณด์ƒ(0.1)์„ ์คฌ๋‹ค.

03. [๋Œ€์กฐ๊ตฐ] Guess == Progress

Guess ๋ณด์ƒ์ด ์„ฑ๋Šฅํ–ฅ์ƒ ๋ฐ ์ดˆ๋ฐ˜ ํ•™์Šต์— ์œ ์˜๋ฏธํ•œ ์˜ํ–ฅ์„ ์ฃผ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด Progress์™€ ๋™์ผํ•œ ๋ณด์ƒ(0.3)์„ ์คฌ๋‹ค.

  • ๋‹จ์ผ ์ฑ„๋„ state ๊ธฐ์ค€

Alt text

Guess์™€ Progress๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š๊ณ  ๋™์ผํ•œ ๋ณด์ƒ์„ ์ค€ ๊ฒฝ์šฐ๊ฐ€ ์ „์ฒด์ ์ธ ์„ฑ๋Šฅ์ด ๋–จ์–ด์ง€๋Š” ๋ชจ์Šต์„ ๋ณด์˜€๋‹ค. ์ดˆ๋ฐ˜ ํ•™์Šต์—์„œ๋„, ํ•™์Šต ํ›„๋ฐ˜์—์„œ๋„ Guess์— ์ฐจ๋“ฑ์„ ์ค€ ๋ณด์ƒ ์ฒด๊ณ„๊ฐ€ ์ข‹์€ ์„ฑ๋Šฅ์„ ๋ณด์ž„์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

  • ๋ฉ€ํ‹ฐ ์ฑ„๋„ state ๊ธฐ์ค€

๋‹ค๋งŒ state๊ฐ€ ๋‹ค์ฐจ์› ๊ฒฝ์šฐ์—๋Š” Guess๋ฅผ ์ฃผ๋Š” ๊ฒƒ๊ณผ ์ฃผ์ง€ ์•Š๋Š” ๊ฒƒ์ด ํฐ ์ฐจ์ด๊ฐ€ ์—†์—ˆ๋‹ค. ๋‹จ์ผ ์ฑ„๋„ state์—์„œ๋Š” Guess์˜ ์œ ๋ฌด์— ๋”ฐ๋ผ ์„ฑ๋Šฅ ์ฐจ์ด๊ฐ€ 3%๋กœ ์ปธ์ง€๋งŒ, ๋‹ค์ฐจ์šด state๋Š” 0.5%๋กœ ๋งค์šฐ ์ž‘์•˜๋‹ค.

์ฃผ์š” ํŒŒ๋ผ๋ฏธํ„ฐ

๊ฐ•ํ™”ํ•™์Šต์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์—ฌ๋Ÿฌ ํŒŒ๋ผ๋ฏธํ„ฐ ์ค‘, learning rate๊ฐ€ ํ•™์Šต์— ๊ฐ€์žฅ ํฐ ์˜ํ–ฅ์„ ๋ฏธ์ณค๋‹ค. ๋™์ผํ•œ ์ƒํ™ฉ์—์„œ๋„ ์ดˆ๊ธฐ lr์ด ๋„ˆ๋ฌด ํฌ๊ฑฐ๋‚˜ ์ž‘์œผ๋ฉด ํ•™์Šต์ด ์ œ๋Œ€๋กœ ์ง„ํ–‰๋˜์ง€ ์•Š์•˜๋‹ค. ๋˜ํ•œ ๊ณ„์† ๊ฐ™์€ ํฌ๊ธฐ์˜ lr๋กœ ํ•™์Šต์„ ์‹œํ‚ค๋Š” ๊ฒƒ๋„ ํ•™์Šต์˜ ํ•œ๊ณ„๋ฅผ ์ดˆ๋ž˜ํ–ˆ๋‹ค.

05. Result

Test : ๋ชจ๋ธ๋“ค ์„ฑ๋Šฅ๋น„๊ต

๐Ÿ’ก 100 ์—ํ”ผ์†Œ๋“œ๋กœ ์Šน๋ฅ ์„ ๊ตฌํ•˜๋Š” ์‚ฌ๊ฑด์„ 100๋ฒˆ ๋ฐ˜๋ณต

State info. mean (ยฑ sd) min / max
2D [RM ์ˆ˜์ • ๋ฒ„์ „] ํ–‰๋™ ๊ฐ•์ œ ์ œํ•œ ๋ฒ„์ „, Guess-0.3, conv_units=64 0.447 (ยฑ 0.044) 0.33 / 0.56
2D [RM ์ˆ˜์ • ๋ฒ„์ „] Guess-0.3, No progress -0.5 with bias=F model, conv_units=64 0.478 (ยฑ 0.049) 0.39 / 0.65
2D [RM ์ˆ˜์ • ๋ฒ„์ „] Guess 0.3, no_progress -0.5 0.738 (ยฑ 0.038) 0.69 / 0.83
2D [RM ์ˆ˜์ • ๋ฒ„์ „] Guess-0.3, No progress -0.5 with done=T 0.773 (ยฑ 0.046) 0.66 / 0.89
2D [RM ์ˆ˜์ • ๋ฒ„์ „] Guess0.1 0.795 (ยฑ 0.045) 0.69 / 0.93
2D Guess0.3 0.798 (ยฑ 0.036) 0.69 / 0.87
2D Guess0.1 0.826 (ยฑ 0.040) 0.74 / 0.93
3D Guess0.3 0.834 (ยฑ 0.040) 0.69 / 0.91
3D ๐Ÿ‘‘ Guess0.1 0.839 (ยฑ 0.037) 0.73 / 0.92

์ตœ๊ณ  ์„ฑ๋Šฅ ๋ชจ๋ธ์˜ ํ•˜์ดํผ ํŒŒ๋ผ๋ฏธํ„ฐ

Category Hyper params info value
Replay Memory MEM_SIZE(MAX) ๋ฆฌํ”Œ๋ ˆ์ด ๋ฉ”๋ชจ๋ฆฌ์˜ ์ €์žฅ ๊ฐ€๋Šฅํ•œ ์ตœ๋Œ€ ํ•œ๋„ 50,000
Replay Memory MEM_SIZE_MIN ํ•™์Šต์„ ์‹œ์ž‘ํ•˜๊ธฐ ์œ„ํ•œ ์ตœ์†Œ ๋ฉ”๋ชจ๋ฆฌ์˜ ์ˆ˜ 1,000
Neural Net BATCH_SIZE train์‹œ ์‹ ๊ฒฝ๋ง์— ๋“ค์–ด๊ฐ€๋Š” batch ํฌ๊ธฐ 64
Neural Net CONV_UNITS ํ•ฉ์„ฑ๊ณฑ ์‹ ๊ฒฝ๋ง์˜ ์ฑ„๋„ ์ˆ˜ 128
Neural Net LEARNING_RATE ์ตœ๋Œ€ ํ•™์Šต๋ฅ ์ด์ž ์‹œ์ž‘ ํ•™์Šต๋ฅ  0.001
Neural Net LEARN_DECAY ํ•™์Šต๋ฅ  ๊ฐ€๊ฐ ๋น„์œจ 0.25
Neural Net LEARN_EPOCH ํ•™์Šต๋ฅ  ๊ฐ€๊ฐ ์ฃผ๊ธฐ 50000
Target Model UPDATE_TARGET_EVERY ์˜คํ”„ํด๋ฆฌ์‰ฌ ๋ฐฉ์‹์ธ Q๋Ÿฌ๋‹์„ ์œ„ํ•ด model๊ณผ target model ์‚ฌ์ด์— ์ฃผ๋Š” ์—…๋ฐ์ดํŠธ ์‹œ๊ฐ„์ฐจ 5
Exploration EPSILON ์ตœ๋Œ€ ํƒํ—˜ ๋น„์œจ์ด์ž ์‹œ์ž‘ ํƒํ—˜ ๋น„์œจ 0.95
Exploration EPSILON_DECAY ํƒํ—˜ ๋น„์œจ ๊ฐ์†Œ ๋น„์œจ 0.999975
Exploration EPSILON_MIN ์ตœ์†Œ ํƒํ—˜ ๋น„์œจ 0.01
Q-learning DISCOUNT ํ• ์ธ์œจ 0.1

  • loss_fn : nn.MSELoss()
  • optimizer : optim.Adam()
  • scheduler : optim.lr_scheduler.StepLR()
  • DQN ๊ตฌํ˜„ ๋ฐฉ์‹ : vector type
  • ํ•™์Šต ๋ฐ ๋ชจ๋ธ ์—…๋ฐ์ดํŠธ ์ฃผ๊ธฐ : ๋งค step๋งˆ๋‹ค

์ตœ๊ณ  ์„ฑ๋Šฅ ๋ชจ๋ธ์˜ ๋ณด์ƒ ๊ตฌ์กฐ

Reward Description & Purpose Weight Done
Win ์ง€๋ขฐ๊ฐ€ ์•„๋‹Œ ๋ชจ๋“  ํƒ€์ผ์„ ๊น ๊ฒฝ์šฐ 1 True
Lose ๊น ํƒ€์ผ์ด ์ง€๋ขฐ์ธ ๊ฒฝ์šฐ -1 True
Progress ์ฃผ๋ณ€๋ถ€์— ๊นŒ์ง„ ํƒ€์ผ์ด ์žˆ๊ณ , ์ง€๋ขฐ๊ฐ€ ์•„๋‹Œ ํƒ€์ผ์„ ๊น ๊ฒฝ์šฐ 0.3 False
Guess ์ฃผ๋ณ€๋ถ€๊ฐ€ ๊นŒ์ ธ ์žˆ์ง€ ์•Š์ง€๋งŒ, ์ง€๋ขฐ๊ฐ€ ์•„๋‹Œ ํƒ€์ผ์„ ๊น ๊ฒฝ์šฐ 0.1 False
No Progress ์ด๋ฏธ ๋ˆ„๋ฅธ ํƒ€์ผ์„ ๋˜ ๋ˆ„๋ฅธ ๊ฒฝ์šฐ -1 False

visualize

  • test : ์—ํ”ผ์†Œ๋“œ ์ „์ฒด ์‹œ๊ฐํ™”

withQtable.gif

์ˆœ์„œ๋Œ€๋กœ ํ˜„ state, ํ–‰๋™์œผ๋กœ ๋ณ€ํ•œ ๋‹ค์Œ state, ํ˜„ state๊ฐ€ ์ž…๋ ฅ๋˜์—ˆ์„ ๋•Œ Q-table์ด๋‹ค.
next_state์™€ Q-table์— ์‹œ๊ฐํ™”๋˜์–ด ์žˆ๋Š” ๋งˆ๋ฆ„๋ชจ๋Š” ๊ฒŒ์ž„ ๋‚ด ์ง€๋ขฐ์˜ ์œ„์น˜๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.

  • ์ตœ๊ณ  ์„ฑ๋Šฅ ์‹œ๊ฐํ™” ๊ทธ๋ž˜ํ”„ (50๋งŒ ์—ํ”ผ์†Œ๋“œ)
Alt text Alt text
Alt text Alt text

์ตœ๊ณ  ์ˆ˜์น˜ ๊ธฐ์ค€,

  • step์˜ ์ค‘์•™๊ฐ’ : 20.286, ์ด ๋ณด์ƒ์˜ ์ค‘์•™๊ฐ’ : 5.36, ์Šน๋ฅ  : 0.853

ํ›„๋ฐ˜๋ถ€ ๋Œ€๋žต์ ์ธ ์ˆ˜์น˜,

  • step์˜ ์ค‘์•™๊ฐ’ : 17-18, ์ด ๋ณด์ƒ์˜ ์ค‘์•™๊ฐ’ : 5, ์Šน๋ฅ  : 0.83-84

์ฒซ ํ–‰๋™์œผ๋กœ ์ง€๋ขฐ์ฐพ๊ธฐ ํŒ์˜ ๊ผญ์ง“์ ์„ ์„ ํƒํ•œ๋‹ค.

๋‚ด๊ฐ€ ํ•™์Šตํ•œ ๋ชจ๋ธ ์ค‘ ์„ฑ๋Šฅ์ด 75%๊ฐ€ ๋„˜๋Š” ๋ชจ๋ธ๋“ค์€ ๊ณตํ†ต์ ์œผ๋กœ ์ง€๋ขฐ์ฐพ๊ธฐ ํŒ์˜ ๊ผญ์ง“์  ์œ„์น˜ ํƒ€์ผ์„ ์ฒซ ๋ฒˆ์งธ๋กœ ์„ ํƒํ–ˆ๋‹ค. Alt text

Alt text

Alt text

์ง€๋ขฐ์ฐพ๊ธฐ๋Š” ๋ชจ๋“  ํƒ€์ผ์ด ๊ฐ€๋ ค์ง„ ์ฑ„ ์‹œ์ž‘๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ถ”๋ก  ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๊นŒ์ง€ ๊ฐ€๊ธฐ ์œ„ํ•ด์„œ ์ตœ๋Œ€ํ•œ ๋งŽ์€ ํƒ€์ผ์„ ์ดˆ๋ฐ˜ ์Šคํ…์— ๊นŒ๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค. ๋”ฐ๋ผ์„œ ๋ฌด์กฐ๊ฑด ์ง€๋ขฐ๊ฐ€ ์•„๋‹Œ ์ฒซ ๋ฒˆ์งธ ํ–‰๋™์—์„œ ์ตœ๋Œ€ํ•œ ๋งŽ์€ ํƒ€์ผ์ด ๊นŒ์ง€๋Š” ๊ฒƒ์ด ์Šน๋ฆฌ์— ์˜ํ–ฅ์„ ๋ฏธ์นœ๋‹ค. ์„ฑ๋Šฅ์ด 50% ๊ฐ€๋Ÿ‰๋˜๋Š” ๋ชจ๋ธ๋“ค์—์„œ๋Š” ์ด ์ „๋žต์ด ๋ฐœ๊ฒฌ๋˜์ง€ ์•Š์•˜๊ธฐ์—, ์—์ด์ „ํŠธ๊ฐ€ ํ•™์Šตํ•œ ์ด ์ „๋žต์ด ์Šน๋ฅ ์„ ๋†’์ด๋Š”๋ฐ ๋„์›€์„ ์ฃผ์—ˆ๋‹ค๋Š” ๊ฐ€์„ค์„ ์„ธ์› ๊ณ  ์ด๋ฅผ ํ™•๋ฅ ๋ก ์  ๊ด€์ ์—์„œ, ๋ชฌํ…Œ์นด๋ฅผ๋กœ์  ๊ด€์ ์—์„œ, Q-๋Ÿฌ๋‹์  ๊ด€์ ์—์„œ ๋ถ„์„ํ–ˆ๋‹ค.

01. ํ™•๋ฅ ๋ก ์  ๋ถ„์„

์ด ๋ถ„์„์—์„œ๋Š” ํ™•๋ฅ ๋ก ์ ์œผ๋กœ ์™œ ๊ผญ์ง“์ ์— ์œ„์น˜ํ•œ ํƒ€์ผ์„ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด ์œ ๋ฆฌํ•œ ํ–‰๋™์ธ์ง€๋ฅผ ๋ณด์—ฌ์ค€๋‹ค. ์—ฌ๊ธฐ์„œ ๋งํ•˜๋Š” ์œ ๋ฆฌํ•œ ํ–‰๋™์ด๋ž€, ์ฒซ ์„ ํƒ์—์„œ 0์„ ๋ˆŒ๋Ÿฌ ์ดˆ๋ฐ˜๋ถ€ํ„ฐ ํฐ ๋ฒ”์œ„์˜ ์˜์—ญ ์ •๋ณด๋ฅผ ์–ป๋Š” ๊ฒƒ์ด๋‹ค.


์ฒซ ๋ฒˆ์งธ ์„ ํƒ์—์„œ๋Š” ์ง€๋ขฐ๊ฐ€ ๊นŒ์ง€์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฐ€์ •,

  • ๊นŒ์ง€์ง€ ์•Š์€ ์ด ํƒ€์ผ ์ˆ˜ : 81
  • ์ง€๋ขฐ ๊ฐœ์ˆ˜ : 10๊ฐœ
  • ์ง€๋ขฐ๊ฐ€ ์•„๋‹Œ ํƒ€์ผ ์ˆ˜ : 71๊ฐœ

  1. ๊ผญ์ง“์ ์— ์œ„์น˜ํ•œ ํƒ€์ผ์„ ๊น” ๋•Œ, ํƒ€์ผ์ด 0์ผ ํ™•๋ฅ  [์ด์›ƒ ํƒ€์ผ : 3๊ฐœ]
choose(70,3) / choose(80,3) # 0.666261 : ๋ˆ„๋ฅด๋Š” ํƒ€์ผ์„ ์ œ์™ธํ•ด 70,80
  1. ํ…Œ๋‘๋ฆฌ์— ์œ„์น˜ํ•œ ํƒ€์ผ์„ ๊น” ๋•Œ, ํƒ€์ผ์ด 0์ผ ํ™•๋ฅ  [์ด์›ƒ ํƒ€์ผ : 5๊ฐœ]
choose(70,5) / choose(80,5) # 0.5034528 
  1. ์ค‘์•™์— ์œ„์น˜ํ•œ ํƒ€์ผ์„ ๊น” ๋•Œ, ํƒ€์ผ์ด 0์ผ ํ™•๋ฅ  [์ด์›ƒ ํƒ€์ผ : 8๊ฐœ]
choose(70,8) / choose(80,8) # 0.3256693

์ฒ˜์Œ ํ–‰๋™์—์„œ 0์„ ๋ˆŒ๋Ÿฌ ํฐ ์˜์—ญ ์ •๋ณด๋ฅผ ์–ป์„ ํ™•๋ฅ ์€ ๊ผญ์ง“์  > ํ…Œ๋‘๋ฆฌ > ์ค‘์•™ ์ˆœ์œผ๋กœ ๋†’๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

02. ๋ชฌํ…Œ์นด๋ฅผ๋กœ ์‹œ๋ฎฌ๋ ˆ์ด์…˜์„ ์ด์šฉํ•œ ๋ถ„์„

์‹œ๋ฎฌ๋ ˆ์ด์…˜์˜ ํ‘œ๋ณธ ์ˆ˜๋Š” 10๋งŒ ๊ฐœ๋กœ, ์ฒซ ๋ฒˆ์งธ ์„ ํƒ์—์„œ ๋žœ๋ค์œผ๋กœ ์•„๋ฌด ํƒ€์ผ์„ ๋ˆ„๋ฅผ ๋•Œ ์—ด๋ฆฌ๋Š” ํƒ€์ผ ์ˆ˜์™€ ๊ผญ์ง“์ ๋งŒ์„ ๋ˆ„๋ฅผ ๋•Œ ์—ด๋ฆฌ๋Š” ํƒ€์ผ์˜ ์ˆ˜๋ฅผ ๋น„๊ตํ•˜๊ณ  0์„ ๋ˆ„๋ฅผ ํ™•๋ฅ ์„ ๊ทผ์‚ฌํ•œ๋‹ค.

  • ์—ด๋ฆฌ๋Š” ํƒ€์ผ์˜ ์ˆ˜

Alt text ๋žœ๋ค์œผ๋กœ ํ–‰๋™ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค, ๊ผญ์ง“์ ์„ ๊น” ๋•Œ ๊นŒ์ง€๋Š” ๋ฉด์ ์ด ํฌ๋‹ค. ๋žœ๋ค์€ ์ค‘์•™๊ฐ’์ด 1์ธ ๊ฒƒ์— ๋น„ํ•ด, ๊ผญ์ง“์ ์€ 11์ด์—ˆ์œผ๋ฉฐ, ๊ทน๋‹จ์ ์œผ๋กœ ๋งŽ์€ ํƒ€์ผ์ด ๊นŒ์ง€๋Š” ์‚ฌ๊ฑด๋„ ๊ผญ์ง“์ ์„ ๊น” ๋•Œ ๋” ๋งŽ์ด ๋ฐœ์ƒํ–ˆ๋‹ค.

  • ํƒ€์ผ์ด 0์ผ ํ™•๋ฅ 
sum(df[1] != 1) / nrow(df) # vertex : 1๊ฐœ ์ด์ƒ ๊นŒ์งˆ ํ™•๋ฅ  
[1] 0.66643
sum(df[2] != 1) / nrow(df) # random : 1๊ฐœ ์ด์ƒ ๊นŒ์งˆ ํ™•๋ฅ  
[1] 0.40333

๊ผญ์ง“์ ์„ ๊น ์„ ๋•Œ 0์„ ๋ˆŒ๋Ÿฌ ํ•œ ๊ฐœ ์ด์ƒ ๊นŒ์งˆ ํ™•๋ฅ ์€ ๋ชฌํ…Œ์นด๋ฅผ๋กœ ์‹œ๋ฎฌ๋ ˆ์ด์…˜์„ ์ด์šฉํ•œ ๊ฒƒ๊ณผ ํ™•๋ฅ ๋ก ์  ๊ฐ’์ด ๋™์ผํ•˜๋‹ค. random์˜ ๊ฒฝ์šฐ ํ™•๋ฅ ๋ก ์  ๊ฐ’๊ณผ ๋Œ€์‘์‹œํ‚ฌ ์ˆ˜๋Š” ์—†์ง€๋งŒ, ๊ผญ์ง“์ ์„ ๊น” ๋•Œ๋ณด๋‹ค ํ™•๋ฅ ์ด ์ ์€ ๊ฒƒ์„ ๋ณด์•„ ๊ผญ์ง“์ ์„ ๊นŒ๋Š” ํ–‰๋™์ด ๋ฌด์ž‘์œ„ ์„ ํƒ๋ณด๋‹ค๋„ ํšจ์œจ์ ์ž„์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

03. Q-๋Ÿฌ๋‹ ๊ธฐ๋ฐ˜ ๋ถ„์„

ํ๋Ÿฌ๋‹์—์„œ state-action ํŽ˜์–ด๋Š” next_state์˜ ์ตœ๋Œ€ ํ๊ฐ’๊ณผ ๋ณด์ƒ์„ ๊ธฐ์ค€ ์‚ผ์•„ ์—…๋ฐ์ดํŠธํ•œ๋‹ค. ๋งŽ์€ ํƒ€์ผ์ด ๊นŒ์ง„ state๋Š” ์›ํ™œํ•œ ์ถ”๋ก ์ด ๊ฐ€๋Šฅํ•˜๊ธฐ์— ์ง€๋ขฐ๋ฅผ ๋ฐŸ์„ ํ™•๋ฅ ์ด ๋‚ฎ์•„์ง„๋‹ค. ๋งŽ์€ ํƒ€์ผ์„ ๊นŒ๋Š” ํ–‰๋™์€ ๊ฒŒ์ž„์ด ์˜ค๋ฒ„๋  ํ™•๋ฅ ์„ ๋‚ฎ์ถ”๋ฉฐ, ๊ถ๊ทน์ ์ธ ๋ชฉํ‘œ์ธ ์ตœ๋Œ€ ๊ฐ€์น˜์— ๋‹ค๊ฐ€๊ฐ€๋Š” ํ–‰๋™์ด๋‹ค. ์ฒซ ๋ฒˆ์งธ ์„ ํƒ์œผ๋กœ ๋ชจ์„œ๋ฆฌ๋ฅผ ๊นŒ๋Š” ํ–‰๋™์€ ๋žœ๋ค, ๊ฐ€์žฅ์ž๋ฆฌ, ์ค‘์•™ ๋ถ€๋ถ„์„ ๊นŒ๋Š” ํ–‰๋™๋“ค๋ณด๋‹ค 0์ผ ํ™•๋ฅ ์ด ๋†’๋‹ค. ๋”ฐ๋ผ์„œ ์ด ํ–‰๋™์€ ๋‹ค๋ฅธ ์„ ํƒ๋ณด๋‹ค next_state๋กœ ํƒ€์ผ์ด ๋งŽ์ด ์—ด๋ฆฐ state๋ฅผ ๋ฐ›์„ ํ™•๋ฅ ์ด ๋†’์•„์ง€๊ณ , ๊ทธ ๊ฒฐ๊ณผ ํƒ€ ํ–‰๋™๋ณด๋‹ค ๋†’์€ Q๊ฐ’์„ ๊ฐ–๊ฒŒ ๋œ๋‹ค.

์•„๋ž˜ ๋‘ state-next stat-Qtable์€ ์œ„ ๋ถ„์„์˜ ๋ช…ํ™•ํ•œ ๊ทผ๊ฑฐ๊ฐ€ ๋˜์–ด์ฃผ์ง€๋Š” ๋ชปํ•˜์ง€๋งŒ, ๋งŽ์€ ํƒ€์ผ์ด ์—ด๋ฆฐ Q-table์ด ์–ด๋–ค ์—ญํ• ์„ ํ•˜๋Š”์ง€๋ฅผ ์ง์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ฐ™์€ ๋ชจ๋ธ์˜ ๋‹ค๋ฅธ ์—ํ”ผ์†Œ๋“œ ๊ฒฐ๊ณผ๋ฌผ์ด์ง€๋งŒ, ๋งŽ์€ ํƒ€์ผ์ด ๊นŒ์กŒ์„ ๋•Œ์˜ max Q๊ฐ’๊ณผ ๊ฑฐ์˜ ๊นŒ์ง€์ง€ ์•Š์•˜์„ ๋•Œ์˜ max Q๊ฐ’ ์‚ฌ์ด์—๋Š” ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค. ๋งŽ์€ ํƒ€์ผ์ด ๊นŒ์ง„ ๊ฒฝ์šฐ์—๋Š” max ๊ฐ’์ด 0.32๋กœ ์ปธ์ง€๋งŒ, ํƒ€์ผ์ด ๋ณ„๋กœ ๊นŒ์ง€์ง€ ์•Š์€ ๊ฒฝ์šฐ ๋‹ค๋ฅธ ๊ฐ’๋“ค๊ณผ ๊ฑฐ์˜ ์œ ์‚ฌํ•œ 0.17๋ฅผ ๊ฐ€์กŒ๋‹ค. ์ด๋Š” ์ถ”๋ก ์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ์ƒํ™ฉ์—์„œ ๋‚˜ํƒ€๋‚˜๋Š” ์†Œ๊ทน์ ์ธ Q๊ฐ’์œผ๋กœ ํ•ด์„ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • max Q๊ฐ’ : 0.17

Alt text

  • max Q๊ฐ’ : 0.32

Alt text

baseline : Rule Base

(์ถ”๊ฐ€ ์˜ˆ์ •)

Reference