Skip to content

Commit ea2d15e

Browse files
Add Skill Check project
1 parent 3bcdde2 commit ea2d15e

File tree

9 files changed

+151
-33
lines changed

9 files changed

+151
-33
lines changed

_config.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ urls:
3232
url: /about/
3333
- text: Publications
3434
url: /publications/
35+
- text: Projects
36+
url: /projects/
3537
- text: Donors
3638
url: /donors/
3739
- text: 심층강화학습 책

_data/projects.json

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,10 @@
11
[
22
{
3-
"slug": "cool-project",
4-
"name": "Cool project 1",
5-
"image": "placeholder.jpg",
3+
"slug": "skill_check_env",
4+
"name": "Skill Check",
65
"url": "https://www.google.com",
7-
"date": "Jan 2014",
8-
"tags": ["Angular JS","API"]
9-
},
10-
{
11-
"slug": "cool-project",
12-
"name": "Cool project 1",
136
"image": "placeholder.jpg",
14-
"url": "https://www.google.com",
15-
"date": "Jan 2014",
16-
"tags": ["python"]
17-
},
7+
"date": "2023-06-18",
8+
"tags": ["Reinforcement learning", "Environment", "DQN"]
9+
}
1810
]

_layouts/project.html

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,9 +52,6 @@ <h3 class="project-headlines">{{ i.name }}</h3>
5252
</div>
5353
</div>
5454
<div class="project-footer">
55-
{% if i.url %}
56-
<a href="{{ i.url }}" class="project-link" target="_blank"><i class="fa fa-globe"></i> View</a>
57-
{% endif %}
5855
<span class="project-timeline">{{ i.date }}</span>
5956
</div>
6057
</div>

_layouts/project_single.html

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,4 +25,24 @@ <h1 class="post-title">{{ page.title }}</h1>
2525
<hr />
2626
{{ content }}
2727
</div>
28+
29+
<br>
30+
31+
<div style="text-align: center; margin-top: 30px">
32+
<a href="https://www.buymeacoffee.com/hiddenbeginner"><img src="https://img.buymeacoffee.com/button-api/?text=Buy me a coffee&emoji=&slug=hiddenbeginner&button_colour=FFDD00&font_colour=000000&font_family=Cookie&outline_colour=000000&coffee_colour=ffffff" /></a>
33+
<h5>불쌍한 대학원생에게 커피 한 잔 사주기</h5>
34+
</div>
35+
36+
<br>
37+
38+
<div>
39+
<h2>댓글</h2>
40+
<script src="https://utteranc.es/client.js"
41+
repo="hiddenbeginner/hiddenbeginner.github.io"
42+
issue-term="title"
43+
theme="github-light"
44+
crossorigin="anonymous"
45+
async>
46+
</script>
47+
</div>
2848
</article>

_project/cool-project.md

Lines changed: 0 additions & 6 deletions
This file was deleted.

_project/skill_check_env.md

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
---
2+
layout: project_single
3+
title: "데드 바이 데이라이트 스킬 체크"
4+
slug: "skill_check_env"
5+
use_math: true
6+
---
7+
8+
# Skill Check 환경 및 DQN 에이전트
9+
10+
- 제목: Skill Check 환경 및 DQN 에이전트
11+
- 기간: 1주일
12+
- 링크: [https://github.com/HiddenBeginner/skill_check_env](https://github.com/HiddenBeginner/skill_check_env)
13+
- 프로젝트 설명: 게임 Dead by Daylight의 quick time event (QTE) 요소 중 하나인 스킬 체크를 모방하여 환경을 만들고 DQN 에이전트로 환경 해결
14+
15+
<br>
16+
17+
---
18+
19+
## 환경 설명
20+
21+
Dead by Daylight에서 생존자가 발전기 수리나 회복 등을 수행할 때 낮은 확률로 quick time event인 스킬 체크가 발동한다.
22+
생존자가 스킬 체크를 성공하면 진척도 보너스를 받지만, 만약 실패하면 진척도 감소 뿐만 아니라 살인마에게 알림이 가게 되기 때문에 생존하기 위해서는 반드시 성공해야 하는 요소이다.
23+
24+
<br>
25+
26+
스킬 체크 발동시 생존자 화면 가운데에 12시 방향에 빨간 바늘이 놓여져 있는 원이 하나 생긴다.
27+
빨간 바늘은 약 1.0초 동안 시계 방향으로 360도를 빠르게 회전하며, 생존자는 원 위의 임의의 위치에 생긴 성공 구간에 빨간 바늘이 들어오면 스페이스바를 눌러 스킬 체크를 해야 한다.
28+
성공 구간의 길이는 약 55도이며, 그 중 첫 10도에서 스킬 체크를 성공하면 스킬 체크 대성공으로 간주되어 진척도 보너스를 받게 된다.
29+
나머지 45도 안에서 스킬 체크를 성공하면 일반 성공으로 간주되며 진척도 보너스는 없다.
30+
만약, 성공 구간 이전에 스킬 체크를 하거나, 성공 구간을 지날 때까지 스킬 체크를 하지 못하게 되면 스킬 체크 실패로 간주되며 진척도 패널티를 받게 된다.
31+
32+
<br>
33+
34+
이에 영감을 받아 Skill Check 환경을 만들게 되었다. 한 에피소드를 한 번의 스킬 체크 상황으로 간주했다. 매 에피소드마다 길이 55도의 성공 구간이 90도 ~ 360도 사이에서 임의로 생성되며, 성공 구간의 첫 10도를 대성공 구간, 나머지 45도를 일반 성공 구간으로 구분하였다. 에피소드 시작시 빨간 바늘이 12시 방향을 가리키고 있으며, 120 FPS을 가정하여 360도 회전을 120 프레임으로 나누었으며 따라서 1 프레임이 지날 때마다 빨간 바늘이 3도씩 움직이게 된다.
35+
36+
<br>
37+
38+
Observation space는 $\mathcal{S} \subseteq \mathbb{R}^{84 \times 84 \times 1}$이며, 현재 프레임의 이미지를 observation으로 받게 된다.
39+
Atari 환경 등에서는 Markov property를 만족시키기 위하여 과거 $t$개의 프레임을 합쳐서 observation을 사용하지만,
40+
이 환경의 경우 바늘의 회전 속도가 항상 동일하기 때문에 1장의 프레임만으로도 Markov property를 만족하게 되기 때문에 stacked 프레임을 사용하지 않았다.
41+
Action space는 $\mathcal{A}= \{ 0, 1\}$이며, 0은 아무 행동을 하지 않으며, 1은 스킬 체크를 하는 행동이다.
42+
43+
<br>
44+
45+
0의 행동을 하면 0의 보상을 받으며 바늘이 3도 회전하게 된다.
46+
바늘이 대성공 구간에 위치했을 때 1의 행동을 하면, +10.0 보상을 받으며 에피소드가 종료된다.
47+
성공 구간에 위치했을 때 1의 행동을 할경우 +1.0 보상을 받으며 에피소드가 종료된다.
48+
49+
<br>
50+
51+
성공 구간 이전에 1의 행동을 하면 -5.0의 보상을 받으며 에피소드가 종료된다.
52+
다음 상태에서 바늘이 성공 구간을 넘어서면 -5.0의 보상을 받으며 에피소드가 종료된다.
53+
54+
<br>
55+
56+
---
57+
58+
## DQN 에이전트
59+
60+
위에서 만든 Skill Check 환경에 DQN 알고리즘을 직접 구현하여 적용해보았다.
61+
처음에는 DQN 논문에 있는 네트워크 구조와 하이퍼파라미터를 그대로 따라서 실험을 했다.
62+
환경이 쉬운 환경임에도 에이전트는 학습이 종료될 때까지 내내 -5.0 보상만 받았다.
63+
64+
<br>
65+
66+
### 학습 실패 원인 분석
67+
68+
생각해볼 수 있는 원인 한 가지는 다음과 같다.
69+
에이전트가 양수 보상 신호를 받기 위해서는 바늘이 성공 구간에 도달하기 전까지 반드시 0 행동을 해야 한다.
70+
이를 프레임으로 환산해보면 최소 30 프레임까지는 0의 행동을 해야만 한다는 것이다.
71+
완전 랜덤 행동을 하는 에이전트의 경우, 30 프레임 동안 0의 행동만 취할 확률은 $\frac{1}{2^{30}}$이 된다.
72+
따라서 학습 초기에 완전 랜덤 탐색 동안에는 양수 보상을 받을 확률이 굉장히 낮다.
73+
하지만 다행히도 성공 구간 이전에 1의 행동을 할 경우 -5.0 보상을 받기 때문에,
74+
에이전트는 성공 구간 이전에는 0의 행동을 하는 것이 더 좋다는 것을 학습하고 0의 행동만 수행하게 된다.
75+
76+
<br>
77+
78+
하지만 에이전트가 성공 구간 이전에 항상 0의 행동을 수행한다고 해도 $\epsilon$의 확률로 랜덤 탐색을 수행하며 여기서 1의 확률을 취할 확률이 $\frac{1}{2}$이다.
79+
즉, $\frac{\epsilon}{2}$의 확률로 1의 행동이 수행된다.
80+
기존 DQN 논문에서는 $\epsilon=1$에서 시작하여 이후 1백만 steps 동안 $\epsilon=0.1$로 선형적으로 감소시킨다.
81+
$\epsilon=0.1$이라고 할 때 1의 행동을 취할 확률은 $0.05$가 된다.
82+
30 프레임 동안 1의 행동을 한번이라도 할 확률은 1 빼기 30 프레임 동안 모두 0의 행동을 취할 확률이며, 이는 $1 - (0.95)^{30}=0.78$이다.
83+
따라서 기존의 $\epsilon$ 관련 하이퍼파라미터로는 성공 구간에 도달하기 조차 힘들다는 것을 확인했다.
84+
85+
<br>
86+
87+
### 문제 해결 결과
88+
89+
문제 분석을 바탕으로, 초기 $\epsilon=0.1$로 설정하고 이후 1백만 steps 동안 $\epsilon=0.005$로 선형적으로 감소시키게 수정했더니 에이전트가 성공적으로 환경을 해결하는 것을 확인할 수 있었다. 환경과 상호작용 횟수에 따른 에이전트의 Return 곡선은 다음과 같다.
90+
91+
![learning_curve](https://raw.githubusercontent.com/HiddenBeginner/skill_check_env/master/results/learning_curve.png)
92+
93+
<br>
94+
95+
학습이 종료된 후 10번의 에피소드에 대해서 테스트했을 때, 1번만 일반 성공을 한 것을 제외하고 9번은 대성공을 하였다.
96+
애니메이션은 아래와 같다. 회전 속도가 많이 느려보이는데, 환경을 120 FPS로 만들다보니 프레임 수가 많아져서 그렇다.
97+
98+
![animation](https://raw.githubusercontent.com/HiddenBeginner/skill_check_env/master/results/animation.gif)
99+
100+
<br>
101+

about.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,17 @@ use_math: true
7676
</summary>
7777
<div markdown="1">
7878

79+
**2023년 3월 ~ 2023년 4월** 강화학습 논문 리뷰 스터디 10기
80+
- 발표: [SUNRISE: A Simple Unified Framework for Ensemble Learning in Deep Reinforcement Learning](https://github.com/utilForever/rl-paper-study/blob/main/10th/230306%20-%20SUNRISE%2C%20A%20Simple%20Unified%20Framework%20for%20Ensemble%20Learning%20in%20Deep%20Reinforcement%20Learning%2C%20K.%20Lee%20et%20al%2C%202020.pdf)
81+
82+
<br>
83+
84+
**2023년 2월 ~ 2023년 4월** 가짜연구소 6기 `나만의 딥러닝 프레임워크 만들기` 공동 빌더
85+
- 도서: 밑바닥부터 시작하는 딥러닝3
86+
- 정리: [링크](https://github.com/HiddenBeginner/dezero)
87+
88+
<br>
89+
7990
**2022년 9월 ~ 2022년 12월** 강화학습 논문 리뷰 스터디 9기
8091
- 발표: [Hindsight Credit Assignment](https://github.com/utilForever/rl-paper-study/blob/main/9th/221121%20-%20Hindsight%20Credit%20Assignment%2C%20A.%20Harutyunyan%20et%20al%2C%202019.pdf)
8192

donors.md

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,13 @@ use_math: true
77

88
누추한 대학원생에게 후원을 해주신 귀하신 후원자님들의 명단입니다. 대단히 감사드립니다. 평생 갚으며 살아가겠습니다.
99

10-
- Seoxxxak Kim님 (2023년 03월 15일) 🫰💕
11-
- Hidden님 (2023년 03월 01일) 🫰💕
12-
- 허X우님(2022년 12월 29일) 🫰💕
13-
- 김X비님 (2022년 10월 10일) 스타벅스 돌체라떼 아이스 후원 🫰💕
14-
- 김X수님 (2021년 09월 12일) 🫰💕
15-
- Alex Choi님 (2021년 07월 11일) 🫰💕
16-
- 이X현님 (2021년 06월 30일) 🫰💕
17-
- 심X용님 (2021년 05월 21일) 🫰💕
18-
- 이X훈님 (2021년 05월 13일) 🫰💕
19-
- 그X님 (2021년 03월 12일) 🫰💕
10+
- Seoxxxak Kim님 (2023년 03월 15일)
11+
- Hidden님 (2023년 03월 01일)
12+
- 허X우님(2022년 12월 29일)
13+
- 김X비님 (2022년 10월 10일) 스타벅스 돌체라떼 아이스 후원
14+
- 김X수님 (2021년 09월 12일)
15+
- Alex Choi님 (2021년 07월 11일)
16+
- 이X현님 (2021년 06월 30일)
17+
- 심X용님 (2021년 05월 21일)
18+
- 이X훈님 (2021년 05월 13일)
19+
- 그X님 (2021년 03월 12일)

publications.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,5 @@ permalink: /publications/
55
use_math: true
66
---
77

8-
- D. Lee, C. Bresten, K. Youn, K. Seo, J.-H. Jung, Model discrepancy using topological data analysis and convolutional neural network analysis, *International Journal of Modern Physics C*, Vol. 31, No 08, 2050117, 2020. [DOI: 10.1142/S012918312050117X](https://doi.org/10.1142/S012918312050117X)
8+
- Mai Lan Tran, Dongjin Lee, Jae-Hun Jung, Machine composition of Korean music via topological data analysis and artificial neural network, *Journal of Mathematics and Music*, 2023.[DOI: 10.1080/17459737.2023.2197905](https://doi.org/10.1080/17459737.2023.2197905)
9+
- Dongjin Lee, Christopher Bresten, Kookhyoun Youm, Ki-Weon Seo, and Jae-Hun Jung, Model discrepancy using topological data analysis and convolutional neural network analysis, *International Journal of Modern Physics C*, Vol. 31, No 08, 2050117, 2020. [DOI: 10.1142/S012918312050117X](https://doi.org/10.1142/S012918312050117X)

0 commit comments

Comments
 (0)