Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

PYCON KR 2017 - 구름이 하늘의 일이라면 (윤상웅)

6,391 views

Published on

Python과 TensorFlow를 이용한 기상예측

Published in: Technology

PYCON KR 2017 - 구름이 하늘의 일이라면 (윤상웅)

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

×