Skip to content

Commit 3feafd8

Browse files
committed
initial commit
0 parents  commit 3feafd8

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

54 files changed

+1924
-0
lines changed

.gitignore

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
.DS_Store
2+
Thumbs.db
3+
db.json
4+
*.log
5+
node_modules/
6+
public/
7+
.deploy*/

_config.yml

+75
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
# Hexo Configuration
2+
## Docs: https://hexo.io/docs/configuration.html
3+
## Source: https://github.com/hexojs/hexo/
4+
5+
# Site
6+
title: RLCode
7+
subtitle:
8+
description: 한국어로된 강화학습 & 딥러닝 블로그
9+
author: RLCode
10+
language: kr
11+
timezone:
12+
13+
# URL
14+
## If your site is put in a subdirectory, set url as 'http://yoursite.com/child' and root as '/child/'
15+
url: https://rlcode.github.io
16+
root: /
17+
permalink: :title/
18+
permalink_defaults:
19+
20+
# Directory
21+
source_dir: source
22+
public_dir: public
23+
tag_dir: tags
24+
archive_dir: archives
25+
category_dir: categories
26+
code_dir: downloads/code
27+
i18n_dir: :lang
28+
skip_render:
29+
30+
# Writing
31+
new_post_name: :title.md # File name of new posts
32+
default_layout: post
33+
titlecase: false # Transform title into titlecase
34+
external_link: true # Open external links in new tab
35+
filename_case: 0
36+
render_drafts: false
37+
post_asset_folder: false
38+
relative_link: false
39+
future: true
40+
highlight:
41+
enable: true
42+
line_number: true
43+
auto_detect: false
44+
tab_replace:
45+
46+
# Category & Tag
47+
default_category: uncategorized
48+
category_map:
49+
tag_map:
50+
51+
# Date / Time format
52+
## Hexo uses Moment.js to parse and display date
53+
## You can customize the date format as defined in
54+
## http://momentjs.com/docs/#/displaying/format/
55+
date_format: YYYY-MM-DD
56+
time_format: HH:mm:ss
57+
58+
# Extensions
59+
## Plugins: https://hexo.io/plugins/
60+
## Themes: https://hexo.io/themes/
61+
theme: apollo
62+
63+
archive_generator:
64+
per_page: 0
65+
yearly: false
66+
monthly: false
67+
daily: false
68+
69+
# Deployment
70+
## Docs: https://hexo.io/docs/deployment.html
71+
deploy:
72+
type: git
73+
repo: https://github.com/rlcode/rlcode.github.io.git
74+
branch: master
75+
message: "Site updated: {{ now('YYYY-MM-DD HH:mm:ss') }}"

package.json

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
{
2+
"name": "hexo-site",
3+
"version": "0.0.0",
4+
"private": true,
5+
"hexo": {
6+
"version": "3.3.1"
7+
},
8+
"dependencies": {
9+
"hexo": "^3.2.0",
10+
"hexo-browsersync": "^0.2.0",
11+
"hexo-deployer-git": "^0.2.0",
12+
"hexo-generator-archive": "^0.1.4",
13+
"hexo-generator-category": "^0.1.3",
14+
"hexo-generator-feed": "^1.2.0",
15+
"hexo-generator-index": "^0.2.0",
16+
"hexo-generator-sitemap": "^1.1.2",
17+
"hexo-generator-tag": "^0.2.0",
18+
"hexo-renderer-ejs": "^0.2.0",
19+
"hexo-renderer-jade": "^0.3.0",
20+
"hexo-renderer-marked": "^0.2.10",
21+
"hexo-renderer-stylus": "^0.3.1",
22+
"hexo-server": "^0.2.0"
23+
}
24+
}

scaffolds/draft.md

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
---
2+
title: {{ title }}
3+
tags:
4+
---

scaffolds/page.md

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
---
2+
title: {{ title }}
3+
date: {{ date }}
4+
---

scaffolds/post.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
title: {{ title }}
3+
date: {{ date }}
4+
tags:
5+
---

source/_drafts/transfer-learning.md

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
---
2+
title : [번역] 앞으로 대세가 될 트렌스퍼 러닝
3+
date: 2017-04-17 12:00:00
4+
from: https://opendatascience.com/blog/transfer-learning-machine-learnings-next-frontier/
5+
---
6+
7+

source/_posts/after-CS294.md

+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
---
2+
title : Silver강의 이후에 들을 강화학습 강의
3+
date: 2017-02-20 12:00:00
4+
---
5+
6+
Silver강의 이후에 들을 강화학습 강의들입니다.
7+
8+
<!--more-->
9+
10+
## David Silver의 RL Couse강의
11+
<iframe width="560" height="315" src="https://www.youtube.com/embed/2pWv7GOvuf0?list=PLzuuYNsE1EZAXYR4FJ75jcJseBmo4KQ9-" frameborder="0" allowfullscreen></iframe>
12+
13+
<br/>
14+
## John Schulmann의 Deep Learning School 발표
15+
<iframe width="560" height="315" src="https://www.youtube.com/embed/PtAIh9KSnjo" frameborder="0" allowfullscreen></iframe>
16+
17+
<br/>
18+
19+
## UC Berkely Pieter Abbeel의 CS188 강의
20+
<iframe width="560" height="315" src="https://www.youtube.com/embed/Xa8twbs8SI4?list=PL-XXv-cvA_iA4YSaTMfF_K_wvrKAY2H8u" frameborder="0" allowfullscreen></iframe>
21+
22+
<br/>
23+
24+
## UC Berkely Servey Levine의 CS294 강의
25+
26+
http://rll.berkeley.edu/deeprlcourse/
27+
<br/>
28+
[![CS294](https://img.youtube.com/vi/v=8jQIKgTzQd4&index=1&list=PLIvzepHmSvR6-UiU8Tl7rl3vhTCkHKT_u/100.jpg)](https://www.youtube.com/watch?v=8jQIKgTzQd4&index=1&list=PLIvzepHmSvR6-UiU8Tl7rl3vhTCkHKT_u "CS294")
29+
+171
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,171 @@
1+
title: Keras로 개발하는 뉴럴넷
2+
date: 2017-01-26 12:00:00
3+
---
4+
5+
텐서플로우가 핫하다지만 처음 개발자가 접하기엔 어려운 부분이 있을 수 있습니다. 케라스는 텐서플로우의 많은 기능을 추상화 시켜서 코드를 더 짧게 만들어주며 쉽게 배울 수 있는 장점이 있어 비전공자나 처음 접하시는 분들이 사용하기에 좋습니다.
6+
7+
<!--more-->
8+
9+
<div class="tip">
10+
**주의사항**: 체계를 갖추고 쓴 글이 아니기 때문에 글쓴이의 의식의 흐름에 좀 더 가깝습니다. 텐서플로우나 다른 프레임워크로 한번 코딩을 해보신들에게 케라스를 소개하기 위해 작성된 글입니다..
11+
</div>
12+
13+
## Keras는 무엇인가?
14+
15+
Keras는 파이썬 딥러닝 프레임워크의 양대 산맥인 Tensorflow와 Theano를 감싸서 더 간결하고 쉬운 API를 제공하는 뉴럴넷 라이브러리 입니다. 코드를 최소화 시키고 직관적이면서도 확장성 있는 디자인에 초점을 맞추고 계획된 라이브러리죠. 딥러닝을 처음 시작할때, 그리고 프로토타이핑을 할때 사용하기 좋으며 모듈화를 통한 확장성도 좋아서 여러 프로젝트에 쓰이고 있습니다. 딥러닝을 처음 접할때도 좋지만 규모가 큰 프로젝트에도 쓰일 수 있을 정도로 안정성과 성능이 보장되는 편입니다.
16+
17+
## Keras의 특징
18+
19+
기본적인 기능들은 Layers와 그들의 input과 output으로 이루어져있습니다. 개별 뉴런에는 접근할 수 없고 모든것이 층(Layer) 으로 구현됩니다. Keras는 편의를 위해 개발자들이 자주 쓰는 layer들을 미리 제공하고 있습니다. 기본적인 dense한 여러겹의 뉴럴넷(MLP)은 아래와 같이 구현됩니다. (파라미터들은 일단 무시 하겠습니다):
20+
21+
```python
22+
keras.layers.core.Dense(output_dim, activation='linear')
23+
```
24+
25+
다른 예로 자연어 처리에 많이 쓰이는 RNN, LSTM, GRU layer등은 아래와 같이 구현됩니다.
26+
27+
```python
28+
keras.layers.recurrent.GRU(output_dim, ...) # 생략
29+
```
30+
31+
이와 같이 Keras는 한줄의 코드로 뉴럴넷의 Layer를 구현 가능하게 해줍니다.
32+
33+
## 튜토리얼 개요
34+
35+
아래의 카테고리별로 케라스를 어떻게 사용하는지 차근차근 알아보겠습니다.
36+
37+
1. 데이터 로딩
38+
2. 모델 정의하기
39+
3. 모델 컴파일하기
40+
4. 모델 Fit하기
41+
5. 모델 평가
42+
6. 모두다 엮어서 써보기
43+
44+
컴파일? Fit? 무슨말인지 감이 안올 수 있습니다. 아래에 설명을 이어서 할테니 계속 알아보겠습니다.
45+
46+
## 1 데이터 로딩
47+
48+
무작위의 숫자를 뽑는과정을 거치는 모든 머신러닝 알고리즘을 개발할땐 random seed를 지정해주는 것이 좋습니다. 랜덤시드는 같은 코드를 여러번 돌렸을때 같은 결과가 나오게 해줍니다. 아래와 같이 개발할때는 케라스를 import 하면서 랜덤시드도 지정해주는 습관을 들이면 디버깅할때 스트레스를 덜 받게 됩니다.
49+
50+
```python
51+
from keras.models import Sequential
52+
from keras.layers import Dense
53+
import numpy
54+
55+
seed = 7
56+
numpy.random.seed(seed)
57+
```
58+
59+
Sequential모델과 Dense층을 케라스로부터 가져왔는데 나중에 설명하겠습니다. 이제 데이터를 로딩해보죠.
60+
61+
```python
62+
dataset = numpy.loadtxt('dataset.csv', delimiter=',')
63+
X = dataset[:,0:8]
64+
Y = dataset[:,8]
65+
```
66+
67+
## 2 모델 정의하기
68+
69+
케라스에서 Sequential 모델은 층(Layer)를 기본 단위로 그 층들이 순서대로 쌓이며 만들어집니다. 개발자는 레고처럼 알맞은 층을 찾아서 레고처럼 쌓아주기만 하면 됩니다. 아까 케라스에서 가져온 Sequential 모델에 이것저것 붙여가면서 만들어보겠습니다.
70+
71+
주의할점은 첫번째 층은 `input_dim` 을 인풋의 갯수 (피쳐 수)로 맞춰워야 한다는 것입니다. 예를들어 데이터가 5열로 이루어진 csv데이터면 `input_dim`을 5로 지정해주면 됩니다.
72+
73+
*층의 갯수와 종류는 어떻게 결정하는가?*라고 궁금증을 가질 수 있습니다. 사실 층의 갯수가 얼마나 필요한지는 아무도 모릅니다. 경험으로 얻어진다고는 하는데 잘 모르겠습니다. 일단 그럴듯 해보이는 숫자를 넣어봅시다.
74+
75+
아까 나왔던 Dense는 Fully Connected Layers 라고도 하는 가장 기본적인 레이어 입니다. 이 뉴럴넷 층을 불러오면서 뉴론의 갯수, 초기화 방법, activation function을 지정해줄 수 있습니다.
76+
77+
```python
78+
# Sequential Model을 인스턴스화 해서 층들이 쌓일 기초를 마련
79+
model = Sequential()
80+
81+
# 각 층은 Sequential 모델 안의 add 함수로 더할 수 있다.
82+
83+
# 첫 층은 12개의 뉴론을 가지며 8 가지의 인풋을 받는다.
84+
# 뉴런의 weight 값은 uniform distribution으로 초기화 되며 엑티베이션 함수는 'relu'를 사용한다.
85+
model.add(Dense(12, input_dim=5, init='uniform', activation='relu'))
86+
87+
# 보통 Hidden layer라고 불리는 두번째 층은 8개의 뉴런을 갖는다.
88+
model.add(Dense(8, init='uniform', activation='relu'))
89+
90+
# 마지막으로 아웃풋 레이어는 binary classification이기 때문에 1개의 뉴런을 갖는다.
91+
model.add(Dense(1, init='uniform', activation='sigmoid'))
92+
```
93+
94+
정말 쉽게 뉴럴넷을 구현하였습니다. 역전파(Backpropagation)는 다른 프레임워크들 처럼 자동으로 계산을 해주기 때문에 우리는 앞으로 진행되는 코드만 짜면 됩니다.
95+
96+
## 3 모델 컴파일하기
97+
98+
모델을 사용하기 위해선 정의 후 컴파일이라는 단계를 거쳐야 합니다. 해보겠습니다.
99+
100+
```python
101+
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
102+
```
103+
104+
여기선 이 한줄이 전부입니다. 간단해 보이지만 이 코드를 입력하는 순간 복잡한 연산들이 일어나게 됩니다. 사용자가 지정한 backend (여기선 Tensorflow)를 이용하여 이 모델을 어떻게 가장 효율적으로 나타낼 수 있는지, CPU나 GPU를 어떻게 사용하는지, 이 과정에서 모두 결정이 됩니다. 사용자는 loss 계산법, optimizer등을 파라미터로 넘겨주기만 하면 됩니다. 텐서플로우에선 여기서 넘겨주는 파라미터 각각 한줄 혹은 여러줄을 차지하는데, 케라스는 한줄로 모든걸 해결해줍니다.
105+
106+
## 4 모델 Fit
107+
108+
sklearn이라는 라이브러리를 사용했으면 익숙할 수 있는 과정입니다. Fit은 우리가 정의하고 컴파일한 모델에 데이터를 먹이는 과정입니다. 아까 데이터를 `X``Y`에 담았었었다. 모델에 먹여보겠습니다.
109+
110+
```python
111+
model.fit(X,Y, nb_epoch=150, batch_size=10)
112+
```
113+
114+
## 5 모델 평가
115+
116+
모델을 훈련시키고 이제 우리가 정성스럽게 만든 모델을 어떻게 평가하고 점수를 줄 것인가 지정을 해주겠습니다. 모델이 훈련할때 보지 못했던 데이터로 예측을 어떻게 하는지 측정해보겠습니다. 테스트 데이터셋을 따로 준비해준다음 아까 Fit할때 했던것처럼 모델에 먹여주기만 하면 됩니다.
117+
118+
```python
119+
scores = model.evaulate(X_test, Y_test)
120+
print("%s: %.2f%%" % (model.metrics_names[1], scores[1]*100))
121+
```
122+
123+
## 6 합쳐보기
124+
125+
뭔가 설명을 많이 한 것 같지만 이 모든것이 16 줄에 담깁니다.
126+
127+
```python
128+
from keras.models import Sequential
129+
from keras.layers import Dense
130+
import numpy
131+
numpy.random.seed(7)
132+
dataset = numpy.loadtxt("dataset.csv", delimiter=",")
133+
testset = numpy.loadtxt("testset.csv", delimiter=",")
134+
X, Y = dataset[:,0:5], dataset[:,5]
135+
X_test, Y_test = testset[:,0:5], testset[:,5]
136+
model = Sequential()
137+
model.add(Dense(12, input_dim=5, init='uniform', activation='relu'))
138+
model.add(Dense(8, init='uniform', activation='relu'))
139+
model.add(Dense(1, init='uniform', activation='sigmoid'))
140+
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
141+
model.fit(X, Y, nb_epoch=150, batch_size=10)
142+
scores = model.evaluate(X_test, Y_test)
143+
print("%s: %.2f%%" % (model.metrics_names[1], scores[1]*100))
144+
```
145+
146+
돌려보면 아래와 같은 결과가 나오게 됩니다.
147+
148+
149+
```python
150+
...
151+
Epoch 143/150
152+
768/768 [==============================] - 0s - loss: 0.4614 - acc: 0.7878
153+
Epoch 144/150
154+
768/768 [==============================] - 0s - loss: 0.4508 - acc: 0.7969
155+
Epoch 145/150
156+
768/768 [==============================] - 0s - loss: 0.4580 - acc: 0.7747
157+
Epoch 146/150
158+
768/768 [==============================] - 0s - loss: 0.4627 - acc: 0.7812
159+
Epoch 147/150
160+
768/768 [==============================] - 0s - loss: 0.4531 - acc: 0.7943
161+
Epoch 148/150
162+
768/768 [==============================] - 0s - loss: 0.4656 - acc: 0.7734
163+
Epoch 149/150
164+
768/768 [==============================] - 0s - loss: 0.4566 - acc: 0.7839
165+
Epoch 150/150
166+
768/768 [==============================] - 0s - loss: 0.4593 - acc: 0.7839
167+
768/768 [==============================] - 0s
168+
acc: 79.56%
169+
```
170+
171+

source/_posts/start-book.md

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
---
2+
title : 강화학습 책을 쓰기 시작하다
3+
date: 2017-02-20 12:00:00
4+
---
5+
6+
7+
작년 여름에 [David Silver의 강의](https://www.youtube.com/watch?v=2pWv7GOvuf0&list=PLzuuYNsE1EZAXYR4FJ75jcJseBmo4KQ9-) 내용을 Gitbook으로 정리한 적이 있었습니다. [Fundamental of Reinforcement Learning](https://www.gitbook.com/book/dnddnjs/rl/details)이라고 이름을 붙인 책이 현재 47000 뷰를 올렸으며 다운로드 숫자는 5000이 되었습니다. 블로그로 글을 써본 적도 없는터라 서툴 것이라 생각했지만 최대한 제가 이해했던 내용들을 자세하게 설명했었는데 (한 달 정도 항상 새벽 4시에 잤습니다...) 그 책이 많은 분들에게 도움이 된 것 같아서 기뻤습니다.
8+
9+
<!--more-->
10+
<br/>
11+
제가 이해한 바를 적기는 했지만 깃북은 강의의 내용을 벗어나지는 못했습니다. 실버의 강의에서 아쉬운 점은 바로 '그래서 어떻게 구현하지?'라는 질문에 대한 답변입니다. 또한 강화학습에 흥미를 느끼게 하고 쉽게 접근가능하게 한다기 보다는 벽만 높이는 듯한 느낌이 있습니다. 물론 기존에 다른 강의가 별로 없다는 점에서 그리고 이 강의가 없었다면 [서튼의 책](http://people.inf.elte.hu/lorincz/Files/RL_2006/SuttonBook.pdf)이 더 어려웠을 것 같다는 점에서 참 고마운 강의입니다.
12+
<br/>
13+
부족했던 점은 바로 코드로 보기에 편하고 쉬운 예제입니다. 이론이 생소한 수학과 배경지식이 필요하기 때문에 쉽지 않습니다. 이론을 힘들게 배우고 나서 에이전트를 만들어서 학습을 시키려고 하니 사실은 막막하기도 하고 잘 학습도 안됩니다.딥러닝을 배워야한다는 함정도 있습니다.
14+
<br/>
15+
하지만 실제로 강화학습을 관심가지는 사람들은 적어도 최근에는 개발자들입니다. 실제로 저희 팀원들도 코드를 봐야 더 잘 이해가 가는 팀원들도 있습니다.(사실 저 빼고는...) 따라서 새로운 책에 대한 수요가 있다는 판단에 지금까지 RLCode 팀원들끼리 해온 것과 앞으로 하는 것들을 강화학습 코드를 직접 짠다는 입장에서 참고하기 좋은 책을 쓰자고 마음을 먹었습니다.
16+
<br/>
17+
그 후에 출판사와 계약을 하고 현재 집필 중에 있습니다. 부족하지만 더 많은 분들에게 도움이 되고 스스로도 더 강화학습에 대한 이해가 되기 위해서 노력하고 있습니다. 이 블로그 또한 저희가 하는 것들을 많은 분들에게 공개하기 위해 만들었습니다. 계획으로는 여름에 책을 출간하려 합니다. 누군가에게 도움이 된다는 것은 멋진 일입니다. 많은 관심 가져주셔서 감사하며 앞으로 더 강화학습에 대해 이야기하고 토론하고 함께 개발할 수 있는 분들이 늘어났으면 좋겠습니다.

0 commit comments

Comments
 (0)