2017년 10월 5일 목요일
Fazerdaze - Little Uneasy (Live Session)
오늘 알게된 뉴질랜드 뮤지션. Fazerdaze. 밴드같긴 한데 솔로일지도 모르겠다. 본명은 Amelia Murray라 한다. 꽤 예쁘고 스타일도 좋다. 그래서인지 음악만 듣기보단 뮤직 비디오로 보고 듣는 쪽이 더 좋은 것 같다. 개인적으로 링크 걸어둔 곡이 제일 마음에 듬.
2014년 10월 집(bedroom studio)에서 녹음한 EP를 2015년 발매한 후 활동을 이어가고 있는듯 하다. 굳이 장르를 구분하게 되면 Dream Pop 이라는 장르라는데 '멜로디뿐만 아니라 소리의 질감에도 신경을 써서 몽롱한 분위기를 조성하는 것이 특징'이란다. 그리고 '울림 효과를 준 악기 연주, 과장된 연기 없이 말하듯 부르거나 속삭이는 것 같은 보컬 등이 드림팝 노래에서 두루 나타난다.'고 한다.
EP
- Fazerdaze (2015, self-released)
Studio albums
- Morningside (2017, Flying Nun)
인스타그램
https://www.instagram.com/fazerdaze/
2017년 9월 12일 화요일
[ML] XGBoost 파라미터에 대한 이해.
'Tree'
=> When Trees forms a 'Forest' (Tree Ensembles)
Tree Ensembles 개념을 쓰는 알고리즘이 몇가지 있다.
1. Random Forest (Breiman 1997)
2. Gradient Tree Boosting (Friedman 1999)
3. Gradient Tree Boosting with Regularization (variant of original GBM)
= XGBoost (eXtreme Gradient Boosting)
...
캐글에서 예측 모델로 이걸 많이 쓴다. 그만큼 예측 성능이 좋고, 병렬로 동작하기 때문에 속도도 빠르다. 일단 따라 써보는건 어렵지 않았는데 파라미터 이름과 의미가 생소했기 때문에 파라미터를 임의로 조절할 수 없었다. 그러다가 어떤 아티클에서 다음과 같은 문구를 읽게 되었는데...
"using xgboost without parameter tuning is like driving a car without changing its gears; you can never up your speed."
헐.. 그래서 XGBoost의 파라미터에 대해 정리해보고자 한다. 정리하고도 뭐가 뭔지 잘 모르겠지만 :D,, 일단 정리하고 보자. xgboost를 이용하는 기본 꼴은 이렇다.
[python]
import xgboost as xgb
# read in data
dtrain = xgb.DMatrix(x_train, y_train)
dtest = xgb.DMatrix(x_test)
# specify parameters via map
param = {'max_depth': 4, 'eta': 1, 'silent': 1, 'objective': 'binary:logistic' }
num_round = 100
bst = xgb.train(param, dtrain, num_round)
# make prediction
preds = bst.predict(dtest)
:: 이제 파라미터에 대해 알아보자.
XGBoost의 파라미터는 아래 General Parameters, Booster Parameters, Learning Task Parameters의 3개 카테고리로 구분된다. 각 카테고리에 대한 주요 파라미터는 아래와 같고, 모든 파라미터에 대한 정보가 필요하다면 공식 문서를 참조하자.
□ General Parameters : XGBoost의 전반적인 기능을 정의함.
> booster [default=gbtree] >> 일반적으로 gbtree의 성능이 낫다.
- gbtree: tree-based models
- gblinear: linear models
> silent [default=0]
- 1: 동작 메시지를 프린트하지 않음.
□ Booster Parameters (아래는 gbtree booster 기준으로 정리되어있음.)
> eta [default=0.3] => learning_rate
- GBM의 학습 속도와 유사.
- 각 단계에서 가중치를 줄임으로써 모델을 더 강건하게 만든다.
- 일반적으로 0.01-0.2
> min_child_weight [default=1] (Should be tuned using CV)
- child의 관측(?)에서 요구되는 최소 가중치의 합
- over-fitting vs under-fitting을 조정하기 위한 파라미터.
- 너무 큰 값이 주어지면 under-fitting.
> max_depth [default=6] (Should be tuned using CV)
- 트리의 최대 깊이.
- 일반적으로 3-10
> max_leaf_nodes
- 최종 노드의 최대 개수. (max number of terminal nodes)
- 이진 트리가 생성되기 때문에 max_depth가 6이면 max_leaf_nodes는 2^6개가 됨.
> gamma [default=0]
- 분할을 수행하는데 필요한 최소 손실 감소를 지정한다.
- 알고리즘을 보수적으로 만든다. loss function에 따라 조정해야 한다.
> subsample [default=1]
- 각 트리마다의 관측 데이터 샘플링 비율.
- 값을 적게 주면 over-fitting을 방지하지만 값을 너무 작게 주면 under-fitting.
- 일반적으로 0.5-1
> colsample_bytree [default=1]
- 각 트리마다의 feature 샘플링 비율.
- 일반적으로 0.5-1
> lambda [default=1] => reg_lambda
- 가중치에 대한 L2 정규화 용어 (Ridge 회귀 분석과 유사(?))
> alpha [default=0] => reg_alpha
- 가중치에 대한 L1 정규화 용어 (Lasso 회귀 분석과 유사(?))
> scale_pos_weight [default=1]
- 불균형한 경우 더 빠른 수렴(convergence)에 도움되므로 0보다 큰 값을 쓸것.
□ Learning Task Parameters : 각 단계에서 계산할 최적화 목표를 정의하는 데 사용된다.
> objective [default=reg:linear]
- binary:logistic : 이진 분류를 위한 로지스틱 회귀, 예측된 확률을 반환한다. (not class)
- multi:softmax : softmax를 사용한 다중 클래스 분류, 예측된 클래스를 반환한다. (not probabilities)
- multi:softprob : softmax와 같지만 각 클래스에 대한 예상 확률을 반환한다.
> eval_metric [default according to objective]
- 회귀 분석인 경우 'rmse'를, 클래스 분류 문제인 경우 'error'를 default로 사용.
- rmse : root mean square error
- mae : mean absolute error
- logloss : negative log-likelihood
- error : Binary classification error rate (0.5 threshold)
- merror : Multiclass classification error rate
- mlogloss : Multiclass logloss
- auc : Area under the curve
> seed [default = 0]
- 난수 시드
- 재현 가능한 결과를 생성하고 파라미터 튜닝에도 사용할 수 있다.
:: 원문 링크
> https://www.analyticsvidhya.com/blog/2016/03/complete-guide-parameter-tuning-xgboost-with-codes-python/
+ 용어 정리.
# 부스팅(Boosting)? Bagging과 유사하나 Bagging과 다르게 순차적으로 학습을 시킨다. 학습 결과에 가중치를 부여하게 되는데 오답에 높은 가중치를 부여해 정확도를 높게 가져가는 것이 목적이다. (XGBoost, AdaBoost, GradientBoost)
부스팅은 여러 분류기가 상호보완적 역할을 할 수 있도록 단계적으로 학습을 수행하여 결합함으로써 성능을 올리기 위한 방법이다. (약한 분류기를 세트로 묶는다.)
부스팅이 배깅과 다른 가장 큰 차이점은 분류기들을 순차 학습하도록 하여, 먼저 학습된 분류기의 결과가 다음 분류기의 학습에 정보를 제공하여 이전 분류기의 결점을 보완하는 방향으로 학습이 이루어지도록 한다는 것이다.
# 배깅(Bagging)? 복원 랜덤 샘플링 방법을 이용해 동일한 모델을 여러 번 모델을 학습시키는 방법. (랜덤하게 추출된 데이터가 일종의 표본 집단이 되는셈.) 학습 과정에서 나온 결과를 중간값으로 맞춰주기 때문에 높은 Variance로 인한 Overfitting을 일부 극복할 수 있다. (RandomForest)
=> When Trees forms a 'Forest' (Tree Ensembles)
Tree Ensembles 개념을 쓰는 알고리즘이 몇가지 있다.
1. Random Forest (Breiman 1997)
2. Gradient Tree Boosting (Friedman 1999)
3. Gradient Tree Boosting with Regularization (variant of original GBM)
= XGBoost (eXtreme Gradient Boosting)
...
캐글에서 예측 모델로 이걸 많이 쓴다. 그만큼 예측 성능이 좋고, 병렬로 동작하기 때문에 속도도 빠르다. 일단 따라 써보는건 어렵지 않았는데 파라미터 이름과 의미가 생소했기 때문에 파라미터를 임의로 조절할 수 없었다. 그러다가 어떤 아티클에서 다음과 같은 문구를 읽게 되었는데...
"using xgboost without parameter tuning is like driving a car without changing its gears; you can never up your speed."
헐.. 그래서 XGBoost의 파라미터에 대해 정리해보고자 한다. 정리하고도 뭐가 뭔지 잘 모르겠지만 :D,, 일단 정리하고 보자. xgboost를 이용하는 기본 꼴은 이렇다.
[python]
import xgboost as xgb
# read in data
dtrain = xgb.DMatrix(x_train, y_train)
dtest = xgb.DMatrix(x_test)
# specify parameters via map
param = {'max_depth': 4, 'eta': 1, 'silent': 1, 'objective': 'binary:logistic' }
num_round = 100
bst = xgb.train(param, dtrain, num_round)
# make prediction
preds = bst.predict(dtest)
:: 이제 파라미터에 대해 알아보자.
XGBoost의 파라미터는 아래 General Parameters, Booster Parameters, Learning Task Parameters의 3개 카테고리로 구분된다. 각 카테고리에 대한 주요 파라미터는 아래와 같고, 모든 파라미터에 대한 정보가 필요하다면 공식 문서를 참조하자.
□ General Parameters : XGBoost의 전반적인 기능을 정의함.
> booster [default=gbtree] >> 일반적으로 gbtree의 성능이 낫다.
- gbtree: tree-based models
- gblinear: linear models
> silent [default=0]
- 1: 동작 메시지를 프린트하지 않음.
□ Booster Parameters (아래는 gbtree booster 기준으로 정리되어있음.)
> eta [default=0.3] => learning_rate
- GBM의 학습 속도와 유사.
- 각 단계에서 가중치를 줄임으로써 모델을 더 강건하게 만든다.
- 일반적으로 0.01-0.2
> min_child_weight [default=1] (Should be tuned using CV)
- child의 관측(?)에서 요구되는 최소 가중치의 합
- over-fitting vs under-fitting을 조정하기 위한 파라미터.
- 너무 큰 값이 주어지면 under-fitting.
> max_depth [default=6] (Should be tuned using CV)
- 트리의 최대 깊이.
- 일반적으로 3-10
> max_leaf_nodes
- 최종 노드의 최대 개수. (max number of terminal nodes)
- 이진 트리가 생성되기 때문에 max_depth가 6이면 max_leaf_nodes는 2^6개가 됨.
> gamma [default=0]
- 분할을 수행하는데 필요한 최소 손실 감소를 지정한다.
- 알고리즘을 보수적으로 만든다. loss function에 따라 조정해야 한다.
> subsample [default=1]
- 각 트리마다의 관측 데이터 샘플링 비율.
- 값을 적게 주면 over-fitting을 방지하지만 값을 너무 작게 주면 under-fitting.
- 일반적으로 0.5-1
> colsample_bytree [default=1]
- 각 트리마다의 feature 샘플링 비율.
- 일반적으로 0.5-1
> lambda [default=1] => reg_lambda
- 가중치에 대한 L2 정규화 용어 (Ridge 회귀 분석과 유사(?))
> alpha [default=0] => reg_alpha
- 가중치에 대한 L1 정규화 용어 (Lasso 회귀 분석과 유사(?))
> scale_pos_weight [default=1]
- 불균형한 경우 더 빠른 수렴(convergence)에 도움되므로 0보다 큰 값을 쓸것.
□ Learning Task Parameters : 각 단계에서 계산할 최적화 목표를 정의하는 데 사용된다.
> objective [default=reg:linear]
- binary:logistic : 이진 분류를 위한 로지스틱 회귀, 예측된 확률을 반환한다. (not class)
- multi:softmax : softmax를 사용한 다중 클래스 분류, 예측된 클래스를 반환한다. (not probabilities)
- multi:softprob : softmax와 같지만 각 클래스에 대한 예상 확률을 반환한다.
> eval_metric [default according to objective]
- 회귀 분석인 경우 'rmse'를, 클래스 분류 문제인 경우 'error'를 default로 사용.
- rmse : root mean square error
- mae : mean absolute error
- logloss : negative log-likelihood
- error : Binary classification error rate (0.5 threshold)
- merror : Multiclass classification error rate
- mlogloss : Multiclass logloss
- auc : Area under the curve
> seed [default = 0]
- 난수 시드
- 재현 가능한 결과를 생성하고 파라미터 튜닝에도 사용할 수 있다.
:: 원문 링크
> https://www.analyticsvidhya.com/blog/2016/03/complete-guide-parameter-tuning-xgboost-with-codes-python/
+ 용어 정리.
# 부스팅(Boosting)? Bagging과 유사하나 Bagging과 다르게 순차적으로 학습을 시킨다. 학습 결과에 가중치를 부여하게 되는데 오답에 높은 가중치를 부여해 정확도를 높게 가져가는 것이 목적이다. (XGBoost, AdaBoost, GradientBoost)
부스팅은 여러 분류기가 상호보완적 역할을 할 수 있도록 단계적으로 학습을 수행하여 결합함으로써 성능을 올리기 위한 방법이다. (약한 분류기를 세트로 묶는다.)
부스팅이 배깅과 다른 가장 큰 차이점은 분류기들을 순차 학습하도록 하여, 먼저 학습된 분류기의 결과가 다음 분류기의 학습에 정보를 제공하여 이전 분류기의 결점을 보완하는 방향으로 학습이 이루어지도록 한다는 것이다.
# 배깅(Bagging)? 복원 랜덤 샘플링 방법을 이용해 동일한 모델을 여러 번 모델을 학습시키는 방법. (랜덤하게 추출된 데이터가 일종의 표본 집단이 되는셈.) 학습 과정에서 나온 결과를 중간값으로 맞춰주기 때문에 높은 Variance로 인한 Overfitting을 일부 극복할 수 있다. (RandomForest)
2017년 9월 11일 월요일
딥러닝 모르는 나를 어느정도 이해하게 만든 슬라이드 소개
https://www.slideshare.net/yongho/ss-79607172
카카오 개발자가 쓴 딥러닝 설명 슬라이드인데 회사 동료가 추천해줘서 방금 읽어보았다. 이제 막 데이터 전처리와 머신 러닝을 공부하고 있어서 딥러닝은 잘 모르는데 이걸 읽고나니 어느정도 이해가 된다. 공부 엄청 하셨으니 이정도로 이야기를 쉽게 풀어낼 수 있으셨겠지만 어쨌든 본인이 이해하고 있는 내용을 이렇게 설명해낼 수 있는 능력이 부럽다ㅠㅠ 겁먹은 동생 살살 달래주면서 차근차근 알려주는 동네 형아 스타일.
위 슬라이드를 읽고 나면 적어도 아래 용어에 대한 거부감은 갖지 않게 된다.
ReLU
Stochastic Gradient Decent
DropOut
Convolution
MaxPooling
SoftMax
ReLU (Gradient vanishing 문제의 해결책(?), Underfitting을 막는다.)
예전엔 Back propagation(현재 내가 틀린 정도를 미분(기울기) 한 것)을 수행할 때 sigmoid 함수를 사용했었나 보다. 문제는 back propagation 학습 과정에서 sigmoid의 미분함수가 들어가게 되는데 sigmoid의 미분함수는 최대값 0.25에 양끝으로 갈수록 0에 가까워지는 모양이라 학습이 진행되면서 gradient가 0에 수렴해질 가능성을 갖고 있다. 그래서 앞 쪽에 위치한 hidden layer가 잘 학습되지 않는 문제가 발생하였다. (이 문제를 'Gradient vanishing'이라 부르나 보다.)
이 문제의 해결책으로 제시된 것이 바로 ReLU 함수이다. 설명 내용에서 처럼 용어가 익숙하지 않아 거부감이 드는 것이지 실제론 max(0, x)의 아주 단순한 함수에 불과하다. 이 함수의 장점은 양의 구간에서 미분값이 전부 '1'이 되기 때문에 sigmoid 함수를 이용했을 때의 문제점을 해결해주며 미분 계산마저 간단해짐에 따라 학습 속도가 빨라진다는 장점까지 가지고 있다. (음의 값을 갖을 때 gradient가 0이 될텐데 유사한 문제가 있는건 아닌가 하는데 잘 모르겠다. 어쨌든 sigmoid를 쓸바엔 ReLU를 쓰라는 정도로 이해하고 있어야 겠다.)
슬라이드 작성하신 분 께서는 위처럼 구구절절한 내용을 2줄로 어떻게 정리하셨냐면,
문제? 전달하다가, 사그라져 버린다 (vanishing gradient)
해결! sigmoid -> ReLU = 뒤로전달 오케이!
이 부분만 봐도 이분 일 참 잘하실듯 ㅋㅋ
Stochasic Gradient Decent (NN이 느리게 동작하는 단점을 보완)
기존의 Gradient Decent는 모든 트레이닝 데이터의 전체 에러를 계산한 뒤에 weight를 업데이트 시키는 방식이었다고 한다. 문제는 시간이 너무 오래 걸린다는 점인데 Stochastic Gradient Decent는 이 단점을 보완하기 위해 등장하였다. SGD는 '느린 완벽'보다 '조금 훑고 빨리 지나가는' 방식을 택한다. SGD는 스텝마다 에러를 계산할 때 일부 데이터 셋만 검토한 뒤 weight를 업데이트하게 되는데 Gradient Decent에 비해 최적의 해는 아니더라도 어쨌든 목적지 근처로 빠르게 다가설 수 있다. (이 분께선 SGD도 좋지만 '방향'과 '보폭'을 고려하는 개선된 버전인 'Adam'을 권하고 있다.)
이것도 2줄로 정리됨.
문제? 걸음마다 batch로 전부다 계산하려니 GD가 너무 오래 걸린다.
해결! SGD로 mini-batch마다 움직여 같은 시간에 훨씬 더 많이 진행해서 해결!
DropOut! (Overfitting 문제를 해소한다.)
학습 시킬 때, 일부러 정보를 누락시키거나 중간 중간 노드를 끄는 방식이라고 한다. 트레이닝 데이터가 아주 상세한 경우 오버피팅 문제가 발생할 수 있는데 이럴 때 dropout을 하면 잘 발견되지 않았던 패턴이 드러나거나 진짜로 중요한 요소가 무엇인지 네트워크가 알 수 있게 된다고 한다.
# 문제의 유형에 따른 아키텍쳐
스냅샷성 데이터 > CNN
시퀀스성 데이터 > RNN / LSTM
그 다음엔 VGG에 대해 설명하고 있다.
CNN의 일종으로 믿고 쓰는 알고리즘의 일종이란다. 슬라이드 작성자 분 꼐서는 조각을 보고, 패턴을 익힌 후 점점 멀리서 조합을 보는 방식이라고 설명하고 있다. 설명과정에서 개념 용어가 몇가지 나온다.
Convolution: 특정 패턴이 있는지 박스로 훑으며 마킹. (일반적으로 머신 비전에서도 흔히 쓰는 테크닉이다.)
MaxPooling: n x n pool을 중요한 정보로 줄이는 테크닉. 선명한 정보만 남겨서 판단과 학습을 쉽게끔 해준다.
위와 같은 기법으로 input 데이터를 추상화시킨 후, 결과물을 Fully Connected Layer에게 전달해서 output을 얻는다. (O/X 문제는 output에 sigmoid 함수를 먹여서 얻고, category 문제는 output에 softmax를 먹여서 답을 얻는다 한다.)
듣도보지못한 블로그라 슬라이드 작성자 분께서 이 글을 읽으실일은 없겠지만 정말 감사하다는 얘기를 남기고 이만 총총.
카카오 개발자가 쓴 딥러닝 설명 슬라이드인데 회사 동료가 추천해줘서 방금 읽어보았다. 이제 막 데이터 전처리와 머신 러닝을 공부하고 있어서 딥러닝은 잘 모르는데 이걸 읽고나니 어느정도 이해가 된다. 공부 엄청 하셨으니 이정도로 이야기를 쉽게 풀어낼 수 있으셨겠지만 어쨌든 본인이 이해하고 있는 내용을 이렇게 설명해낼 수 있는 능력이 부럽다ㅠㅠ 겁먹은 동생 살살 달래주면서 차근차근 알려주는 동네 형아 스타일.
위 슬라이드를 읽고 나면 적어도 아래 용어에 대한 거부감은 갖지 않게 된다.
ReLU
Stochastic Gradient Decent
DropOut
Convolution
MaxPooling
SoftMax
ReLU (Gradient vanishing 문제의 해결책(?), Underfitting을 막는다.)
예전엔 Back propagation(현재 내가 틀린 정도를 미분(기울기) 한 것)을 수행할 때 sigmoid 함수를 사용했었나 보다. 문제는 back propagation 학습 과정에서 sigmoid의 미분함수가 들어가게 되는데 sigmoid의 미분함수는 최대값 0.25에 양끝으로 갈수록 0에 가까워지는 모양이라 학습이 진행되면서 gradient가 0에 수렴해질 가능성을 갖고 있다. 그래서 앞 쪽에 위치한 hidden layer가 잘 학습되지 않는 문제가 발생하였다. (이 문제를 'Gradient vanishing'이라 부르나 보다.)
이 문제의 해결책으로 제시된 것이 바로 ReLU 함수이다. 설명 내용에서 처럼 용어가 익숙하지 않아 거부감이 드는 것이지 실제론 max(0, x)의 아주 단순한 함수에 불과하다. 이 함수의 장점은 양의 구간에서 미분값이 전부 '1'이 되기 때문에 sigmoid 함수를 이용했을 때의 문제점을 해결해주며 미분 계산마저 간단해짐에 따라 학습 속도가 빨라진다는 장점까지 가지고 있다. (음의 값을 갖을 때 gradient가 0이 될텐데 유사한 문제가 있는건 아닌가 하는데 잘 모르겠다. 어쨌든 sigmoid를 쓸바엔 ReLU를 쓰라는 정도로 이해하고 있어야 겠다.)
슬라이드 작성하신 분 께서는 위처럼 구구절절한 내용을 2줄로 어떻게 정리하셨냐면,
문제? 전달하다가, 사그라져 버린다 (vanishing gradient)
해결! sigmoid -> ReLU = 뒤로전달 오케이!
이 부분만 봐도 이분 일 참 잘하실듯 ㅋㅋ
Stochasic Gradient Decent (NN이 느리게 동작하는 단점을 보완)
기존의 Gradient Decent는 모든 트레이닝 데이터의 전체 에러를 계산한 뒤에 weight를 업데이트 시키는 방식이었다고 한다. 문제는 시간이 너무 오래 걸린다는 점인데 Stochastic Gradient Decent는 이 단점을 보완하기 위해 등장하였다. SGD는 '느린 완벽'보다 '조금 훑고 빨리 지나가는' 방식을 택한다. SGD는 스텝마다 에러를 계산할 때 일부 데이터 셋만 검토한 뒤 weight를 업데이트하게 되는데 Gradient Decent에 비해 최적의 해는 아니더라도 어쨌든 목적지 근처로 빠르게 다가설 수 있다. (이 분께선 SGD도 좋지만 '방향'과 '보폭'을 고려하는 개선된 버전인 'Adam'을 권하고 있다.)
이것도 2줄로 정리됨.
문제? 걸음마다 batch로 전부다 계산하려니 GD가 너무 오래 걸린다.
해결! SGD로 mini-batch마다 움직여 같은 시간에 훨씬 더 많이 진행해서 해결!
DropOut! (Overfitting 문제를 해소한다.)
학습 시킬 때, 일부러 정보를 누락시키거나 중간 중간 노드를 끄는 방식이라고 한다. 트레이닝 데이터가 아주 상세한 경우 오버피팅 문제가 발생할 수 있는데 이럴 때 dropout을 하면 잘 발견되지 않았던 패턴이 드러나거나 진짜로 중요한 요소가 무엇인지 네트워크가 알 수 있게 된다고 한다.
# 문제의 유형에 따른 아키텍쳐
스냅샷성 데이터 > CNN
시퀀스성 데이터 > RNN / LSTM
그 다음엔 VGG에 대해 설명하고 있다.
CNN의 일종으로 믿고 쓰는 알고리즘의 일종이란다. 슬라이드 작성자 분 꼐서는 조각을 보고, 패턴을 익힌 후 점점 멀리서 조합을 보는 방식이라고 설명하고 있다. 설명과정에서 개념 용어가 몇가지 나온다.
Convolution: 특정 패턴이 있는지 박스로 훑으며 마킹. (일반적으로 머신 비전에서도 흔히 쓰는 테크닉이다.)
MaxPooling: n x n pool을 중요한 정보로 줄이는 테크닉. 선명한 정보만 남겨서 판단과 학습을 쉽게끔 해준다.
위와 같은 기법으로 input 데이터를 추상화시킨 후, 결과물을 Fully Connected Layer에게 전달해서 output을 얻는다. (O/X 문제는 output에 sigmoid 함수를 먹여서 얻고, category 문제는 output에 softmax를 먹여서 답을 얻는다 한다.)
듣도보지못한 블로그라 슬라이드 작성자 분께서 이 글을 읽으실일은 없겠지만 정말 감사하다는 얘기를 남기고 이만 총총.
2017년 9월 5일 화요일
Lego My First Computer Byte Edition Speed Build designed by Chris McVeigh
크리스 맥베이(Chris McVeigh)가 만든 마이 올드 데스크탑(My Old Desktop) 시리즈 중 Byte Edition 조립 영상. 키보드와 마우스를 연결하는 부분에선 흐믓한 미소가 지어진다 :D.
내가 처음 사용했던 PC도 저렇게 생긴 486DX 일체형 PC였기에 하나쯤 가지고 싶다가도 가격이 무려 78불이라 그림의 떡이다.
판매 사이트는 https://powerpig.ecwid.com
2017년 8월 30일 수요일
더 테이블 (The Table, 2016)
..
상영이 내려가기 전에 오늘 이 영화를 봤다. 도저히 시간을 내기 어려운 상황에서 겨우겨우 볼 수 있었는데 방법은 비밀이다. 봐야겠다고 생각이 들었던건 정유미, 정은채가 출연해서다. 좋아하는 작가의 책을 찾아 읽듯이 좋아하는 배우의 영화를 보고, 좋아하는 가수의 음악을 챙겨듣는다. 내겐 김연수 작가가 그렇고, 가수 이승열이 그렇고, 또 정유미가 그렇다.
김종관 감독은 모르고 있었는데 영화를 보고난 후 찾아보니 '최악의 하루'를 만들었던 분이더라. 재밌게 봤었는데 극장에서 봤던게 아니었어서 기억하지 못했나보다. 흥미로운건 이 분이 정유미의 데뷔작이라 알려진 단편 '폴라로이드 작동법'을 감독하신 분이라는거.. 13년이 지났다.
영화는 70분으로 짧은 편이다. 짧은만큼 등장인물의 수도 적고 비교적 줄거리도 단순하다. 인적이 드문 서촌의 한 카페의 같은 자리에서 두 사람씩 네쌍이 시간을 나눠 그들만의 대화를 나누는데 별것 아닐것 같은 그 대화 내용이 썩 재미있다. 짐 자무쉬 '커피와 담배'가 떠오르지만 대화 내용은 이 영화가 더 극적이라 자연스레 집중하게 된다. 귀가 쫑긋거릴 정도로 일상에서 접하기 어려운 그런 이야기들. 그럼에도 카페의 여주인은 본인의 일만 묵묵히 해나간다. 들리는데 모른척했을 수도, 아니면 관심 자체가 없었을 지도 모를 일이다.
나는 극중 카페 주인보단 대화를 생생히 들을 수 있는 관객이고, 똑같은 장소에서 이야기가 전개되기도 해서,, 대화 간 연관성과 의미를 찾아야만 할 것 같은 느낌을 받았다. 하지만 각각의 대화는 서로 연관이 없고.. 애초에 그런 의도로 만든 영화는 아닌 것 같다.
영화 자체의 매력은 클로즈업된 등장 인물의 표정과 시선. 제스쳐. 그런것들에 있다. 최소화된 인물과 공간, 15분 내외의 네가지 대화가 덤덤하게 쭉 이어지는 영화기 때문에 누군가에겐 지루할 수 있겠다. 적어도 나에겐 지루한 영화가 아니어서 이렇게 짤막하게나마 메모를 해둔다. 나른한 시간에 혼자보기 좋았던 휴식같은 영화였다. + '전성우'라는 배우가 나오는데 벌써 유명하신진 모르겠지만 적어도 이번 영화로 꽤 주목받으실 것 같다.
상영이 내려가기 전에 오늘 이 영화를 봤다. 도저히 시간을 내기 어려운 상황에서 겨우겨우 볼 수 있었는데 방법은 비밀이다. 봐야겠다고 생각이 들었던건 정유미, 정은채가 출연해서다. 좋아하는 작가의 책을 찾아 읽듯이 좋아하는 배우의 영화를 보고, 좋아하는 가수의 음악을 챙겨듣는다. 내겐 김연수 작가가 그렇고, 가수 이승열이 그렇고, 또 정유미가 그렇다.
김종관 감독은 모르고 있었는데 영화를 보고난 후 찾아보니 '최악의 하루'를 만들었던 분이더라. 재밌게 봤었는데 극장에서 봤던게 아니었어서 기억하지 못했나보다. 흥미로운건 이 분이 정유미의 데뷔작이라 알려진 단편 '폴라로이드 작동법'을 감독하신 분이라는거.. 13년이 지났다.
영화는 70분으로 짧은 편이다. 짧은만큼 등장인물의 수도 적고 비교적 줄거리도 단순하다. 인적이 드문 서촌의 한 카페의 같은 자리에서 두 사람씩 네쌍이 시간을 나눠 그들만의 대화를 나누는데 별것 아닐것 같은 그 대화 내용이 썩 재미있다. 짐 자무쉬 '커피와 담배'가 떠오르지만 대화 내용은 이 영화가 더 극적이라 자연스레 집중하게 된다. 귀가 쫑긋거릴 정도로 일상에서 접하기 어려운 그런 이야기들. 그럼에도 카페의 여주인은 본인의 일만 묵묵히 해나간다. 들리는데 모른척했을 수도, 아니면 관심 자체가 없었을 지도 모를 일이다.
나는 극중 카페 주인보단 대화를 생생히 들을 수 있는 관객이고, 똑같은 장소에서 이야기가 전개되기도 해서,, 대화 간 연관성과 의미를 찾아야만 할 것 같은 느낌을 받았다. 하지만 각각의 대화는 서로 연관이 없고.. 애초에 그런 의도로 만든 영화는 아닌 것 같다.
영화 자체의 매력은 클로즈업된 등장 인물의 표정과 시선. 제스쳐. 그런것들에 있다. 최소화된 인물과 공간, 15분 내외의 네가지 대화가 덤덤하게 쭉 이어지는 영화기 때문에 누군가에겐 지루할 수 있겠다. 적어도 나에겐 지루한 영화가 아니어서 이렇게 짤막하게나마 메모를 해둔다. 나른한 시간에 혼자보기 좋았던 휴식같은 영화였다. + '전성우'라는 배우가 나오는데 벌써 유명하신진 모르겠지만 적어도 이번 영화로 꽤 주목받으실 것 같다.
2017년 8월 17일 목요일
파이콘 2017 2일차
둘째 날엔 전날에 비해 더 많은 사람이 몰렸다. 심지어 특정 인기 세션은 자리가 부족해 서서 듣거나 앉아서 들어야 했다. 때문에 첫날 따로 확인하지 않았던 입장 확인용 목줄 소지 여부를 둘째 날엔 어느정도 체크하기도 했다.
출발하기 전에 애기랑 좀 놀아주느라 20분 정도 늦었다. 첫번째 들었던 세션은 스마트 스터디 CTO께서 발표하셨는데 gRPC Framework로 구현한 오델로 게임 사례를 예로 든 RPC Framework에 대한 내용이었다. Thrift와 gRPC 중 저울질하다 gRPC로 구현이 되었는데 깃허브에 올라온 코드를 보면 제조 쪽에도 적용해볼만 하다는 생각이 들었다. 내가 하고 있는 과제에서도 공통의 IDL을 정의해놓고 이종 언어간 바이너리 통신을 하니까 학습하는데도 오래 걸리진 않을 것 같다. 하지만 게임 쪽에는 Unity에 대한 RPC Framework 지원이 아직 부족한 상태라 적합하진 않은 것 같다는 결론을 내려주셨다.
그 다음 들었던 세션은 Django 관련 프로그램과 처음부터 알아보는 웹 크롤러 등이다. 그만 퇴근합시다!라는 업무 자동화 세션도 들어갔었는데 별로 도움이 안되는 내용이라 중간에 나올 수 밖에 없었고, 덕분에 우연히 들어가게된 얼렁뚱땅 파이썬 대소동 프로그램이나 Django for mobile applications 프로그램에서 많은 팁과 스킬을 얻을 수 있었다.
양일을 통틀어 가장 좋았던 프로그램은 '처음부터 알아보는 웹 크롤러' 였다. 우아한 형제들 인턴으로 근무하고 계신 개발자께서 발표하셨는데 해보고 싶단 생각만하고 손도 대지 않고 있던 크롤링에 대해서 알기쉽게 잘 설명해주셨다. 몇가지 사이트를 대상으로 데이터를 긁어와보면 일상에 도움이 되는 툴 역할을 할 수 있을 것 같다.
...
마치 첫 유럽 여행을 다니는 바쁜 한국인처럼 부지런히 발표장을 옮겨다녔는데 2일차 오후가 되선 약간의 회의감과 허무함이 몰려왔다. 모르는걸 들으면 새로운 생각이 떠오르고, 기분이 좋아져야 하는데 요즘 내가 여유가 부족해서인지 어딘지 불편했다.. 뭐 실망했던 세션도 내가 너무 욕심을 부린 탓이다. 내년에 참가하게 된다면 좀 더 가벼운 마음으로. 질문도 해보고 :D
어쨌든 불편함과 내가 느꼈던 위기감은 나만의 문제이고, 파이콘이란 행사 자체는 전반적으로 만족스러웠다. 파이썬에 애정을 가진 개발자가 참 많다고 느끼기에 이 컨퍼런스는 꽤 오랜 사랑을 받을 것 같다. 여기서 여러 IT 기업의 역할도 중요한데 이런 비영리 행사에 아낌없는 후원을 해주었으면 하는 바램이 있다. 기업 입장에서도 단순 지출이 아니라 기업의 브랜딩이나 이미지, 채용 등등에 도움이 될 수 있을 것이다.
출발하기 전에 애기랑 좀 놀아주느라 20분 정도 늦었다. 첫번째 들었던 세션은 스마트 스터디 CTO께서 발표하셨는데 gRPC Framework로 구현한 오델로 게임 사례를 예로 든 RPC Framework에 대한 내용이었다. Thrift와 gRPC 중 저울질하다 gRPC로 구현이 되었는데 깃허브에 올라온 코드를 보면 제조 쪽에도 적용해볼만 하다는 생각이 들었다. 내가 하고 있는 과제에서도 공통의 IDL을 정의해놓고 이종 언어간 바이너리 통신을 하니까 학습하는데도 오래 걸리진 않을 것 같다. 하지만 게임 쪽에는 Unity에 대한 RPC Framework 지원이 아직 부족한 상태라 적합하진 않은 것 같다는 결론을 내려주셨다.
그 다음 들었던 세션은 Django 관련 프로그램과 처음부터 알아보는 웹 크롤러 등이다. 그만 퇴근합시다!라는 업무 자동화 세션도 들어갔었는데 별로 도움이 안되는 내용이라 중간에 나올 수 밖에 없었고, 덕분에 우연히 들어가게된 얼렁뚱땅 파이썬 대소동 프로그램이나 Django for mobile applications 프로그램에서 많은 팁과 스킬을 얻을 수 있었다.
양일을 통틀어 가장 좋았던 프로그램은 '처음부터 알아보는 웹 크롤러' 였다. 우아한 형제들 인턴으로 근무하고 계신 개발자께서 발표하셨는데 해보고 싶단 생각만하고 손도 대지 않고 있던 크롤링에 대해서 알기쉽게 잘 설명해주셨다. 몇가지 사이트를 대상으로 데이터를 긁어와보면 일상에 도움이 되는 툴 역할을 할 수 있을 것 같다.
...
마치 첫 유럽 여행을 다니는 바쁜 한국인처럼 부지런히 발표장을 옮겨다녔는데 2일차 오후가 되선 약간의 회의감과 허무함이 몰려왔다. 모르는걸 들으면 새로운 생각이 떠오르고, 기분이 좋아져야 하는데 요즘 내가 여유가 부족해서인지 어딘지 불편했다.. 뭐 실망했던 세션도 내가 너무 욕심을 부린 탓이다. 내년에 참가하게 된다면 좀 더 가벼운 마음으로. 질문도 해보고 :D
어쨌든 불편함과 내가 느꼈던 위기감은 나만의 문제이고, 파이콘이란 행사 자체는 전반적으로 만족스러웠다. 파이썬에 애정을 가진 개발자가 참 많다고 느끼기에 이 컨퍼런스는 꽤 오랜 사랑을 받을 것 같다. 여기서 여러 IT 기업의 역할도 중요한데 이런 비영리 행사에 아낌없는 후원을 해주었으면 하는 바램이 있다. 기업 입장에서도 단순 지출이 아니라 기업의 브랜딩이나 이미지, 채용 등등에 도움이 될 수 있을 것이다.
파이콘 2017 1일차
올해 파이콘은 코엑스 그랜드블룸에서 열렸다. 등록은 아홉시부터 시작했다. 첫 참석이다보니 아침부터 분주했고 설레이기도 했었던 것 같다. 등록대에서 이메일과 전화번호 등의 정보를 알려주면 네임태그와 가방, 그리고 후드티 교환권을 준다.
올해는 Back to the Basic이라는 키워드로 행사가 진행되었다. 행사장 전면에는 Back to the Basic 네임 월이 있었는데 거기엔 이번 행사를 후원하거나 티켓을 구매한 사람들의 이름이 적혀있었다. 어렵지 않게 내 이름도 찾을 수 있었다.
행사는 12일~15일까지 진행되었고, 발표 세션은 12일과 13일에만 열렸다. 발표 희망자가 많아서 그랬는지 몰라도 25분짜리 프로그램도 있었는데 발표자에게 할애된 시간이 너무 짧지 않은가 하는 우려가 들었다.
키노트는 스포카에 재직중인 홍민희 개발자와 스마트스터디 대표 박현우 개발자가 진행하였다. 주제는 각각 다른 언어들이 파이썬에 주었던 영향과 파이콘 행사를 진행하면서 느꼈던 생각과 고민에 대한 것이었다. 가볍지도 무겁지도 않은 적당한 거리감. 무엇보다 파이썬이라는 언어에 대한 애정을 엿볼 수 있어서 좋았던 것 같다.
그 뒤로는 케이블 영화 채널 편성표 수집, Django(+Rest Framework) In Depth, Python/AWS를 이용한 쇼핑몰 서비스 구축 등의 발표 프로그램을 들었다. 어느 정도 알고 있던 내용에 대해선 반가움이, 어렵게 다가오는 내용에 대해선 위기감이 드는건 어쩔 수 없다.
머무르지 않고 새로운 개념이 계속해서 나오니 개발자로 살아가는건 피곤한 일이다.
지나간 일이지만 전체 프로그램은 아래 링크에서 확인할 수 있다.
https://www.pycon.kr/2017/program/schedule/
올해는 Back to the Basic이라는 키워드로 행사가 진행되었다. 행사장 전면에는 Back to the Basic 네임 월이 있었는데 거기엔 이번 행사를 후원하거나 티켓을 구매한 사람들의 이름이 적혀있었다. 어렵지 않게 내 이름도 찾을 수 있었다.
행사는 12일~15일까지 진행되었고, 발표 세션은 12일과 13일에만 열렸다. 발표 희망자가 많아서 그랬는지 몰라도 25분짜리 프로그램도 있었는데 발표자에게 할애된 시간이 너무 짧지 않은가 하는 우려가 들었다.
키노트는 스포카에 재직중인 홍민희 개발자와 스마트스터디 대표 박현우 개발자가 진행하였다. 주제는 각각 다른 언어들이 파이썬에 주었던 영향과 파이콘 행사를 진행하면서 느꼈던 생각과 고민에 대한 것이었다. 가볍지도 무겁지도 않은 적당한 거리감. 무엇보다 파이썬이라는 언어에 대한 애정을 엿볼 수 있어서 좋았던 것 같다.
그 뒤로는 케이블 영화 채널 편성표 수집, Django(+Rest Framework) In Depth, Python/AWS를 이용한 쇼핑몰 서비스 구축 등의 발표 프로그램을 들었다. 어느 정도 알고 있던 내용에 대해선 반가움이, 어렵게 다가오는 내용에 대해선 위기감이 드는건 어쩔 수 없다.
머무르지 않고 새로운 개념이 계속해서 나오니 개발자로 살아가는건 피곤한 일이다.
지나간 일이지만 전체 프로그램은 아래 링크에서 확인할 수 있다.
https://www.pycon.kr/2017/program/schedule/
피드 구독하기:
글 (Atom)


