Upload
haezoom-inc
View
5.386
Download
1
Embed Size (px)
Citation preview
구름이하늘의일이라면:
Python과 TensorFlow를이용한기상예측
윤상웅 (주식회사해줌)
구름이하늘의일이라면
그것을예측하는것이우리의일입니다
!
인공지능은구름의움직임을예측할수있는가?
?
머신러닝시스템을어떻게만들것인가?
Python TensorFlow+
윤상웅
그전엔…
바이오지능연구실 (장병탁교수님)• Bayesian optimization• Decision making under uncertainty• Active learning• Artificial neural networks, especially RNN/LSTM
주식회사해줌
태양광발전 x 머신러닝
IT사업실머신러닝팀
머신러닝수업에서하지않는이야기
Toy Dataset에서 성능지표 찍어보는 것 너머
실제 문제에 머신러닝이 적용되는 전체 프로세스
발표구성
기상예측머신러닝
문제만들기
01
기상예측머신러닝
모형만들기
02
기상예측머신러닝
시스템만들기
03
대상청중
머신러닝을기상예측에응용하는것에관심이있으신분
머신러닝이실제문제에적용되는과정에대해관심이있으신분
머신러닝과 TensorFlow에기초적인개념이있으신분
I. 기상예측머신러닝문제만들기
자꾸 틀린 질문만 하니까 맞는 대답이 나올리가 없잖아.
‘왜 이우진은 오대수를 가뒀을까?’가 아니라‘왜 풀어주었을까?’란 말이야!
-박찬욱, <올드보이>(2003)
무슨문제를풀것인가
머신러닝으로풀릴법한문제
머신러닝으로풀었을때이점이있는문제
데이터를구할수있는문제
(금전적으로?) 이익이되는문제
⋯
문제를어떻게정의할것인가
입력은?
출력은?
문제유형은? Supervised? Unsupervised?
데이터의표현(representation)은?
문제를 어떻게 형식화(Formulation)
어렵고암묵적인영역
머신러닝의수학적인가정에대한이해
데이터도메인에대한이해
비즈니스에대한이해
우리의문제
태양광발전소의
미래발전량예측
태양 구름 발전소
태양광발전소발전량
태양의움직임
자연계에서가장예측가능한현상
Pysolar, Sunpy, PyEphempysun
태양광발전소모델
태양광발전소데이터를이용
별도로학습완료
구름을읽을수있다면
발전량을예측할수있다
발전량을예측할수있다면
전력생산/소비를최적화할수있다
예측된 신재생에너지 발전량만큼
화력, 원자력 발전소를 덜 가동할 수 있다
누가구름을좇을수있을까?
천리안기상위성
2017년 8월 9일 12시 15분
적외1 적외1 수증기 가시광선 단파적외
우리의문제 1
태양광발전소의
미래발전량예측
우리의문제 2
미래기상상황예측
우리의문제 3
구름의움직임예측
우리의문제 4
천리안기상위성영상의
다음프레임예측
문제의구조
𝑋𝑡𝑋𝑡−1 𝑋𝑡+1
⋯ ⋯
문제의구조
시계열예측 Time-Series Forecasting
동영상프레임생성 Video Frame Synthesis
과연이게의미있는문제냐?
기상청이있는데뭐하러니가
오늘날의기상예측
기상청슈퍼컴퓨터 4호기 수치모델에의한예보Numerical Weather Forecasting
기상청을대체하려는것이아닙니다
사랑해요기상청
이미기상예보에기반한
태양광발전량예측모형을가지고있음
예측을개선하기위한것
앙상블 Ensemble
서로다른가정을하고있는예측모형의예측을합치면일반적으로성능이향상됨
머신러닝접근이가지는장점
도메인지식이적게필요
계산능력이적게필요
물리모형기반시뮬레이션대비
기상학박사학위없어요
슈퍼컴퓨터없어요
일해라핫산!
일반적으로다른대안보다적은자원으로실용적인결과를낼수있음
머신러닝접근이가지는단점
설명이되지않는다
물리모형기반시뮬레이션대비
왜이런예측이나왔는지 (보통은) 알수없다
설명력을희생하여예측력을얻는방법론
정확한예측이다른무엇보다중요할때사용
머신러닝이란,
어머그런데그게딱우리경우네
과연이게풀리는문제냐?
되겠죠뭐
핸드폰이말도하는시대인데
정보가충분한가?
입력변수가 예측변수를 대해 충분한 정보를 가지고 있는가?
예측이 가능한가?
대기의움직임은법칙을따른다Navier-Stockes equation
데이터는법칙의파편을담고있다법칙이 있다면 학습할 여지가 있다
법칙이 희박한 현상을 예측하려는 것에 비하면…
관측은부정확
모델은불완전
현실은
머신러닝은본래
불완전한데이터를다루기위해만들어졌다확률! 확률을 보자!
승산이있다기온, 습도, 기압 등 추가적인 요소 반영하면 더욱 잘 될 것
Not today
남들이푼적있는문제인가?
거인이있다면어깨위에올라가야지
선행연구
Neural Information Processing Systems (NIPS), 2015
선행연구
Neural Information Processing Systems (NIPS), 2016
선행연구
SIGKDD Conference on Knowledge Discovery and Data Mining (KDD), 2015
선행연구
Neural Information Processing Systems (NIPS), 2016
선행연구
International Conference on Machine Learning (ICML), 2017
데이터를구할수있는가?
여기서부터진흙탕시작
천리안기상위성
관련기관
• 국가기상위성센터
• 기상청
• 기상산업기술원
• 기상자료개발포털
• 1024x1024 (한반도), 5 channel
• 약 15분에한번씩촬영
• 결측(missing)이빈번함
• 2011년부터존재
• Pixel값물리량(알베도, 온도등) 변환필요
데이터스펙
천리안기상위성 - 전처리파일읽기 (gzipped binary)
• gzip / bitstring
이미지축소• scipy.misc.imresize• bicubic• 1024 x 1024 256 x 256
데이터저장• HDF5 format : h5py• (T, 256, 256, 5)
분산처리• joblib
Python으로다할수있어요!
I. 머신러닝문제만들기
천리안기상위성의다음프레임예측
풀수있을것같고, 풀었을때이득이있다
천리안기상위성의과거프레임들을알고있을때
I. 머신러닝문제만들기
예측문제를잘정의하는것이중요하다
꼭머신러닝을써야만하는문제인가?
풀수있으면서, 의미있는문제 남이안푸는문제
문제를만들었고, 데이터를준비했다
드루와다드루와
II. 머신러닝모형만들기
새로운데이터셋에머신러닝을적용하는것
레알갓겜임
이런느낌
기본원칙
1. Baseline 모델을먼저만든다
2. 눈으로직접본다
3. 단순한것부터시작한다
Baseline
상상할 수 있는 모델 중 가장 간단하고 못 하는 모델
절대 버그를 낼 수 없 버그를 금방 고칠 수 있는 모델
Scikit-Learn굳이 바퀴를 다시 발명할 필요없다
극도로 깔끔한 API
새 모델 구현할 때도 Scikit-Learn의 BaseEstimator를 상속받아서 만드는 것을 추천
Baseline 만들땐..
그밖에도 여러 도우미 함수들을 많이 제공
GridSearchCV, Preprocessing, train_test_split
그치만우리문제는일반적이지않은유형
Scikit-Learn으로 해결 안 됨
그래도 소개해 드릴게요
모든 pixel을 regression
추천 Baseline
선형모형 (Linear model)sklearn.linear_modelLinearRegression
LosgisticRegression
K-Nearest Neighborsklearn.neighbors
KNeighborsClassifierKNeighborsRegressor
특히 1-NN
추천 Baseline
모델을만들었는데이친구들보다못하면뭔가문제가있다
Hyperparameter가거의없음
뭐가좋아요?
Test Driven Development(Baseline을시험하면서성능평가코드를작성하게됨)
문제에대한대략적인감
진보의측정
우리문제의 Baseline은?
시계열예측문제
⋯𝑋𝑡−2, 𝑋𝑡−1, 𝑋𝑡 가주어졌을때
𝑋𝑡+1을예측
Persistence Model
“내일의 주가? 오늘이랑 똑같을 거야!”
𝑋𝑡+1가 𝑋𝑡 와같을것이라고예측하는것
예측시점과의거리(lag)를늘려가면서실험해볼수있음
10시간 후 예측이 1시간 후 예측보다 어렵겠죠?
성능지표
Mean Squared Error
E𝐷, 𝑋𝑡+1 − 𝑋𝑡+12
((target – pred)**2).mean()
pixel
Persistence Model Result
2016년을 Test set으로사용
시간간격(lag)을늘려가면서실험
시간간격이길수록프레임간차이가크다
matplotlib로 그렸습니다
눈으로직접본다
당신의 코드를 믿지 마라
확실하지 않은 것에는 승부를 걸지 마라
몹쓸 타짜드립 OUT
이상하다?
희한하네…
왜내려갈까?
matplotlib로 그렸습니다
상식적예상과벗어나는곳에의미가있다
상식: 시간 간격이 멀 수록 프레임 간 차이가 크다
관찰: 프레임 간 차이가 크다가 다시 작아진다
이상한 현상은 데이터의 특징에 대해 말해준다
정보
채널별로나눠보자
가시광선채널적외선채널
Show me the data!9 10 11 12 13 14
15 16 17 18 19 20
적외선채널
mpl_toolkits.axes_grid1.AxesGrid 를 이용하여 그렸습니다
Show me the data!9 10 11 12 13 14
15 16 17 18 19 20
가시광선채널
데이터를직접보지않으면모르는것들이있다
귀찮고고통스럽지만하나하나열어보는것이필요
스스로에게하는이야기
데이터의규칙성파악모델에반영
새로운 Feature:
태양이어디쯤있는지모델에게알려주자
Insight
단순한것부터시도한다
Generative Adversarial Networks Variational Autoencoders
Video Pixel Networks Convolutional LSTM
세상엔멋진 ML 알고리즘이너무많다멋진 알고리즘은 많은 버그를 동반한다
멋진 ML 알고리즘은
많은 Hyperparameter를가지고있다
새로운 데이터셋에 대해 좋은 hyperparameter 설정을 찾으려면
시간과 노력이 많이 든다
예) Learning rate, hidden neuron 수, activation function, regularization, …
알고리즘이동작하지않았을때의사결정이어려움
Hyperparameter가 잘못된 건가
이 알고리즘이 이 문제에 맞지 않는 건가
알 수가 없다
두번째 Baseline을만든다고생각하자
가장간단한 ConvNet
𝑋𝑡CONV (3x3)
𝑋𝑡+1CONV (1x1)
Difference Image를학습
왜 Recurrent Neural Net이아닌가?
기상위성 영상 Frame이 결측되는 경우가 꽤 많음 (1%)
Sliding window input
구현을하자!드디어
애증의 TensorFlow어딘지 모르게 불편해… 꼭 Stack Overflow를 찾게 된다
(부들부들)
현실적으로가장좋은대안
빠른 업데이트
두터운 사용자층
TensorBoard와 TensorFlow Serving
이미 구현된 모델들
High-level API (Keras, slim)
TensorFlow 코딩스타일
http://bit.ly/tftalk-best-practicehttps://wookayin.github.io/TensorFlowKR-2017-talk-bestpractice/ko/
완전 강추:
최종욱과 신범준, <Toward Best Practices of TensorFlow Code Patterns>,
TensorFlowKR, 2017
TF는 어떤 일을 할 수 있는 방법이 여러 가지
복잡성과 혼란을 가져온다
특이사항 - TensorFlow
Queue : 사용하지않음• placeholder와 feed_dict사용• 언제나 예상치 못한 입력을 사용하게 됨• GPU Utilization 나쁘지 않았음 (~90%)
keras, tf.slim: 사용하지않음• 모델 구조를 어떻게 지지고 볶을지 모름• 하지만 좀 더 일반적인 task(e.g. classification)였다면 추천!
MSE Comparison
Baseline Conv-1
0.210 0.166
가능성이보인다!
#GPU가_드디어_밥값을#감격#눈물#퇴근
이제부터진짜시작
©박수진
결과는맨마지막에!
II. 머신러닝모델만들기
ConvNet 기반 Frame 생성
입력: 과거 Frame K 개 + 태양위치정보
출력: 그다음 Frame
II. 머신러닝모델만들기
Baseline 모델을먼저만든다
눈으로직접본다
간단한것부터시작한다
II. 머신러닝모델만들기
Baseline 모델을먼저만든다
눈으로직접본다
간단한것부터시작한다
III. 머신러닝시스템만들기
머신러닝의산출물은시스템
머신러닝 != 데이터분석
자동화된예측시스템
그래프, 보고서,의사결정
머신러닝의도입은백엔드의복잡도를상승시킴
머신러닝연구개발프로세스
아이디어
데이터셋
모델학습 성능평가
모델출시
실제피드백1
2
3 4
5
6
좋은성능의머신러닝시스템을만드는방법
Iteration을많이돌면된다
Iteration이덜고통스러우면된다
머신러닝시스템설계의주안점
1. 시스템의복잡도를낮게
2. 새알고리즘의출시를최대한고통없이
• 학습과예측의분리
• 머신러닝라이브러리제작
• 해줌머신러닝클래스구조
학습과예측의분리
연구 배포
학습 예측
이과정에서별짓을다하게된다!Data augmentation, sampling,
preprocessing,…여기와는떨어져있는것이안전
학습과예측의분리 – Repository 수준에서
머신러닝예측시스템리파지토리
개인별연구용리파지토리• 데이터분석• 모형학습
• 실시간데이터처리• 예측결과 API serving
GitHub 사용합니다
시스템코드와연구용코드의싱크
라이브러리(패키지)를만들자
• 구현된예측모형들
• 데이터(feature) 불러오는모듈
• 각종유틸리티함수들
• ML시스템과연구용리파지토리에설치
Sunspot (흑점)패키지이름
라이브러리로만들었더니
• 문서화 - Sphinx / Jupyter Notebook
• 테스트 – Unittest / PyTest
• 코드품질관리 – PEP8
연구용코드 / 시스템코드와핵심알고리즘코드가분리
코드품질을더잘관리할수있게됨
머신러닝을위한클래스구조고안
새로운 알고리즘의 출시를 최대한 고통없이
Program
Predictor
Feature
해줌머신러닝클래스구조
사용자와상호작용
각머신러닝모델
데이터 API
.predict()하청
Program
Predictor
Feature
해줌머신러닝클래스구조
.predict()
하청
하청
하청
.fetch()
드..드리겠습니다!
Program
Predictor
Feature
해줌머신러닝클래스구조
최종예측값반환1) Missing 처리
2) Ensemble
예측값
데이터
데이터
예측값
효과
여러다른모델이통일된 API를가질수있음
모델앙상블쉬움
협업/분업가능
예측모형의버전관리 – 진보의측정
로직과패턴에대한고민과공유가더필요힘을 합쳐요!
머신러닝은보통백엔드중에서도가장숨겨져있음
III. 머신러닝시스템만들기
태양광발전소
마이크로서비스 A
마이크로서비스 B
마이크로서비스 C
DjangoPostgreSQL
PostGISScikit-LearnTensorFlow
JenkinsSunspot
Django RestFramework
연구용환경
Jupyter NotebookPandas
Scikit-LearnR
Sunspot
머신러닝서버
III. 머신러닝시스템만들기
학습과예측의분리
자체라이브러리를통한코드싱크
머신러닝모델을위한클래스구조고안
그래서모델은어찌되었나?
MSE Comparison
Baseline Model-1
0.210 0.166
Model-23
0.109
▼48.36%
최종 ConvNet
𝑋𝑡 , 𝑋𝑡−1, 𝑋𝑡−2𝑋𝑡+1
일종의 Attention Mechanism
이전프레임에서어디를업데이트할지학습
Difference Image를생성
과정
Persistence Model의예측
Target Persistence Prediction
Error(Pred - Targ)
𝑋𝑡+1 𝑋𝑡
2016년 5월 1일오후 1시적외1 채널예측
Persistence Model의예측
Target Persistence Prediction
Error(Pred - Targ)
𝑋𝑡+1 𝑋𝑡
2016년 5월 1일오후 1시적외1 채널예측 구름이이동한다!
Persistence Model의예측
Target Persistence Prediction
Error(Pred - Targ)
𝑋𝑡+1 𝑋𝑡
2016년 5월 1일오후 1시적외1 채널예측
Conv-23의예측
Target Conv-23 Error(Pred - Targ)
예측비교
PersistencePrediction
Conv-23 Diff(Model - Persist)
Persistence Model의예측
Target Persistence Prediction
Error(Pred - Targ)
𝑋𝑡+1 𝑋𝑡
2016년 4월 16일오후 6시가시광선채널예측 해가지면서전체적인영상밝기가감소
Conv-23의예측
Target ModelPrediction
Error(Pred - Targ)
예측비교
PersistencePrediction
ModelPrediction
Diff(Model - Persist)
예측의개선에는끝이없다
그만퇴근합시다?
To Do List
다른기상요소반영
Forecast Horizon 늘리기
새로운모델링아이디어들
예측된 Frame에서발전량예측
구름의움직임에는법칙이있고
우리는그것을찾아내예측을수행할것입니다
끝나지않는여정이지만끊임없이시도할것
가능성을확인
생략한이야기들이많아아쉬워요
머신러닝을 실제로 적용하면서 봉착한 문제 중 일부분에 불과
궁금하신가요?
지원하세요!
들어주셔서감사합니다윤상웅
e-mail: [email protected]
fb: http://www.facebook.com/sangwoong.yoon.24
Github: swyoon
디자인 도움: 박수진님 (금손..!)
대한민국 유일 IT기반 태양광 스타트업
Django, PostgreSQL, Vue.js, jQuery, Less, TensorFlow, GitHub, Jenkins, JIRA, …모든 개발자가 Python 사용 (실화임)[email protected]
웹프론트엔드, 백엔드개발자모셔요! 다른 포지션도 연락주세요♥