해커에게 전해들은 머신러닝 #1

508 views

Published on

한빛미디어 리얼타임 세미나 '해커에게 전해들은 머신러닝' 강의 자료(1/4)
http://www.hanbit.co.kr/store/education/edu_view.html?p_code=S4788493436

Published in: Technology
0 Comments
6 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
508
On SlideShare
0
From Embeds
0
Number of Embeds
45
Actions
Shares
0
Downloads
38
Comments
0
Likes
6
Embeds 0
No embeds

No notes for slide
  • 데이터 마이닝은 지식이나 인사이트를 얻는다.
    머신러닝은 새로운 데이터를 처리하는 데 촛점을 맞추므로 어떻게 해결되었는 지 적절하게 설명하기 어려울 수 있다.
  • 통계학의 알고리즘에 많이 의존함.
    통계학적 머신러닝이라고 부르기도 함.
    컴퓨터 과학에 좀 더 실용적 접근이 많음.
  • AI는 언어학, 뇌의학, 검색, 로봇틱스 포함
    아직 일반지능이 아님
    딥러닝은 뉴럴 네트워크를 사용한 머신러닝
  • 2012년 제프리힌튼 팀의 이미지 분류 논문(ImageNet Classification with Deep Convolutional Neural Networks)
  • 매트랩, 옥타브: 수치, 과학연산 어플리케이션 (옥타브 대학 통계, 머신러닝 수업)
    R: 오픈소스 통계 패키지
    WEKA: 자바 머신러닝 패키지
    줄리아: 수치분석 전문언어
    옥타브, R 은 데이터 분석 도구로도 널리 사용됨.
  • 파이썬은 범용언어, 전처리, 상용서비스에서 더 나은 선택.
    대학강의에서 제품개발로도 사용.
    싸이파이를 위시한 라이브러리는 표준 라이브러리 같은 대접.
    씨아노, 텐서플로우도 파이썬 인터페이스 사용
  • 0.18 버전에 뉴럴 네트워크 추가
  • C 언어 기반 라이브러리라 직접 설치가 어려움.
  • 훈련데이터/학습데이터
    지도학습: 주가예측, 스팸메일 분류
    비지도학습: 고객 분류
    딥 러닝은 알고리즘의 하나로 학습방법이 아님.
    딥 리인포스먼트 러닝
  • 절대 지표가 아님 참고용으로 볼것.
  • 숫자가 아닌 데이터는 숫자로 변환.
    출력 숫자는 크기가 있는 것.
  • 선형 모델이 합쳐져서 뉴럴 네트워크를 만듦
  • 구글 등도 많은 데이터를 공개
  • data 는 2차원 배열임.
  • zero mean, L2 정규화.
  • 특성을 컬럼으로 지칭하기도 함.
  • 최적의 w, b 를 찾는 문제: 최적화 알고리즘.
    경사하강법(Gradient Descent)
  • y 햇: h, f 등으로 쓰기도 함.
  • y햇이 모자르면 y햇을 키우는 방향으로 w, b 를 변경해야 함.
  • 선형이 아닐 경우 기울기가 변하므로 극한으로 보내야함.
    w2 – w1 을 극한으로 보내면 미분임.
  • 절대 지표가 아님 참고용으로 볼것.
  • 절대 지표가 아님 참고용으로 볼것.
  • 해커에게 전해들은 머신러닝 #1

    1. 1. 해커에게 전해들은 머신러닝-1 tensorflowkorea.wordpress.com/슬라이드-자료/ tensorflowkorea.wordpress.com/2016/10/29/해커에게-전해들은-머신러닝 github.com/rickiepark/ml-learn 2016. 11. Park Haesun(haesunrpark@gmail.com)
    2. 2. 머신 러닝 (Machine Learning)
    3. 3. “머신 러닝 또는 기계 학습은 인공 지능의 한 분야로, 컴 퓨터가 학습할 수 있도록 하는 알고리즘과 기술을 개발하 는 분야를 말한다.” - 위키피디아 “Field of study that gives computers the ability to learn without being explicitly programmed.” - Arthur Samuel, 1959 머신러닝이란
    4. 4. Machine Learning Computer Science Statistics Data Mining 컴퓨터 비전 자연어처리 뉴럴 네트워크 회귀 연관분석패턴인식 추천 베이지안 네트워크 확률 Statistical ML 인공지능 빅데이터 리소스 분류
    5. 5. 𝐀𝐈 ⊃ 𝐌𝐚𝐜𝐡𝐢𝐧𝐞 𝐋𝐞𝐚𝐫𝐧𝐢𝐧𝐠 ⊃ 𝐃𝐞𝐞𝐩 𝐋𝐞𝐚𝐫𝐧𝐢𝐧𝐠
    6. 6. 시간에 따른 변화
    7. 7. 우리에게 필요한 도구들
    8. 8. 어떤 것을 사용할 것인가
    9. 9. “Don’t be a hero”
    10. 10. 사이킷런
    11. 11. 온라인에서 읽을 수 있는 파이썬 책 http://byteofpython-korean.sourceforge.net/ byte_of_python.html http://www.flowdas.com/thinkpython/
    12. 12. 파이썬 인스톨러 http://www.activestate.com/activepython https://www.enthought.com/products/canopy/ https://www.continuum.io/downloads
    13. 13. IPython on Windows
    14. 14. Ipython on Mac, Linux
    15. 15. 머신러닝 분류
    16. 16. 학습 방법 지도학습, 감독학습 비지도학습, 비감독학습 강화학습
    17. 17. by Andreas C. Müller 사이킷런 치트 시트
    18. 18. ML Learn 프로그램 순서 선형 회귀 분석 (Linear Regression) 로지스틱 회귀 분석 (Logistic Regression) 뉴럴 네트워크 (Neural Network)
    19. 19. ML Learn regression toward the mean Francis Galton 프란시스 갈톤
    20. 20. 숫자를 사용하여 숫자를 예측한다. 회귀 분석 중국: 32.2 °C 일본: 33.3 °C ---> 한국: 31.6 °C 북한: 29.5 °C
    21. 21. y = 2 * x + 3 y = 2 * x2 + 3 (X) y = √x + 3 (X) 선형 == 1차함수
    22. 22. 당뇨병 데이터
    23. 23. ML Learn UC 얼바인 ML 저장소 http://archive.ics.uci.edu/ml/
    24. 24. 사이킷런의 내장 데이터 load_boston() : 주택가격 load_iris() : 붓꽃 load_diabetes() : 당뇨병 load_digits() : 손글씨숫자 load_linnerud() : 운동
    25. 25. 당뇨병 데이터 나이(Age), 성별(Sex), 체질량(BMI), 혈압(BP), 혈액검사 데이터 6가지(S1~S6) 1년 뒤의 당뇨병 악화 지수 당뇨병 환자를 추적한 442개의 데이터셋
    26. 26. 데이터 로드 $ ipython ... In [1]: %pylab In [2]: from sklearn import datasets In [3]: diabetes = datasets.load_diabetes() In [4]: print(diabetes.data.shape, diabetes.target.shape) Out [5]: (442, 10) (442, )
    27. 27. $ ipython ... In [1]: %pylab In [2]: from sklearn import datasets In [3]: diabetes = datasets.load_diabetes() In [4]: print(diabetes.data.shape, diabetes.target.shape) Out [5]: (442, 10) (442, ) 데이터 로드 넘파이, 맷플롯립 임포트 사이킷런의 데이터 패키지 임포트 데이터 로드 넘파이 변수 442개의 행 10개의 열 442개의 타겟 (병의 악화도)
    28. 28. 행렬(Matrix) 10개의 열(column) 442개의 행(row)
    29. 29. In [1]: print(diabetes.target[:10]) In [2]: print(diabetes.data[:5]) 데이터 들여다 보기 슬라이스 연산자
    30. 30. In [1]: print(diabetes.target[:10]) [ 151. 75. 141. 206. 135. 97. 138. 63. 110. 310.] In [2]: print(diabetes.data[:5]) [[ 0.03807591 0.05068012 0.06169621 0.02187235 -0.0442235 -0.03482076 - 0.04340085 -0.00259226 0.01990842 -0.01764613] [-0.00188202 -0.04464164 - 0.05147406 -0.02632783 -0.00844872 -0.01916334 0.07441156 -0.03949338 - 0.06832974 -0.09220405] [ 0.08529891 0.05068012 0.04445121 -0.00567061 - 0.04559945 -0.03419447 -0.03235593 -0.00259226 0.00286377 -0.02593034] [- 0.08906294 -0.04464164 -0.01159501 -0.03665645 0.01219057 0.02499059 - 0.03603757 0.03430886 0.02269202 -0.00936191] [ 0.00538306 -0.04464164 - 0.03638469 0.02187235 0.00393485 0.01559614 0.00814208-0.00259226 - 0.03199144 -0.04664087]] 데이터 들여다 보기 10개의 열(column) 442개의 행(row)
    31. 31. In [1]: print(diabetes.target[:10]) [ 151. 75. 141. 206. 135. 97. 138. 63. 110. 310.] In [2]: print(diabetes.data[:5]) [[ 0.03807591 0.05068012 0.06169621 0.02187235 -0.0442235 -0.03482076 - 0.04340085 -0.00259226 0.01990842 -0.01764613] 데이터 들여다 보기 나이 성별 체질량
    32. 32. In [1]: print(diabetes.target[:10]) [ 151. 75. 141. 206. 135. 97. 138. 63. 110. 310.] In [2]: print(diabetes.data[:5]) [[ 0.03807591 0.05068012 0.06169621 0.02187235 -0.0442235 -0.03482076 - 0.04340085 -0.00259226 0.01990842 -0.01764613] 데이터 들여다 보기 나이 성별 체질량 sklearn.preprocessing.scale ---> sklearn.preprocessing.normalize 0.05068012 , -0.04464164
    33. 33. 입력값, 출력값 독립변수, 예측변수, 특성(feature), 입력값(input) 종속변수, 응답변수, 출력값(output)
    34. 34. 산점도(Scatter Plot) In [1]: plt.scatter(diabetes.data[:,2], diabetes.target)
    35. 35. 적절한 선형 모델
    36. 36. 선형 회귀 방정식
    37. 37. 하나의 뉴런 (Single Neuron)
    38. 38. 뉴런(Neuron)
    39. 39. 뉴런의 신호전달
    40. 40. 하나의 뉴런 Neuron ŷ w x b * + y: diabetes.target
    41. 41. 하나의 뉴런 Neuron ŷ w x b * + 정방향 계산 역방향 계산 y: diabetes.target
    42. 42. SingleNeuron
    43. 43. SingleNeuron In [1]: n1 = SingleNeuron() In [2]: n1.set_params(5, 1) # w, b 를 5, 1 로 셋팅 In [3]: print(n1.forpass(3)) # x 에 3 을 입력 16 In [4]: n1.set_params(6, 1) # w, b 를 6, 1 로 셋팅 In [5]: print(n1.forpass(3)) # x 에 3 을 입력 19
    44. 44. w * x (5, 3) (5, -3)
    45. 45. w 에 대한 ŷ 의 변화율 In [1]: n1 = SingleNeuron() In [2]: n1.set_params(5, 1) # w, b 를 5, 1 로 셋팅 In [3]: print(n1.forpass(3)) # x 에 3 을 입력 16 In [4]: n1.set_params(6, 1) # w, b 를 6, 1 로 셋팅 In [5]: print(n1.forpass(3)) # x 에 3 을 입력 19
    46. 46. ŷ = w * 3 + 1 w 에 대한 ŷ 의 변화율
    47. 47. x 에 대한 ŷ 의 변화율 In [1]: n1 = SingleNeuron() In [2]: n1.set_params(5, 1) # w, b 를 5, 1 로 셋팅 In [3]: print(n1.forpass(3)) # x 에 3 을 입력 16 In [4]: n1.set_params(5, 1) # w, b 를 5, 1 로 셋팅 In [5]: print(n1.forpass(4)) # x 에 4 을 입력 21
    48. 48. ŷ = 5 * x + 1 x 에 대한 ŷ 의 변화율
    49. 49. b 에 대한 ŷ 의 변화율 In [1]: n1 = SingleNeuron() In [2]: n1.set_params(5, 1) # w, b 를 5, 1 로 셋팅 In [3]: print(n1.forpass(3)) # x 에 3 을 입력 16 In [4]: n1.set_params(5, 2) # w, b 를 5, 2 로 셋팅 In [5]: print(n1.forpass(3)) # x 에 3 을 입력 17
    50. 50. 경사하강법 (Gradient Descent)
    51. 51. w, b 를 최적화 하는 방법 • x 가 주어졌을 때 ŷ 를 계산 (442번) ŷ1 = 5 * x + 1 • w 를 조금 변경시켜 다시 ŷ2 계산 (442번) • w 의 변화율 계산 • 변화율에 비례하여 w 와 b 를 변경
    52. 52. 변화율 계산 대신 미분 공식 ŷ = w * x + b ---> ŷ’ = x w 에 대한 미분 ŷ = w * x + b ---> ŷ’ = 1 b 에 대한 미분 https://ko.wikipedia.org/wiki/미분표
    53. 53. 변화율 계산 대신 미분 공식 ŷ = w * x + b ---> ŷ’ = x w 에 대한 미분 ŷ = w * x + b ---> ŷ’ = 1 b 에 대한 미분 https://ko.wikipedia.org/wiki/미분표 편미분 기호 사용
    54. 54. 미분 공식 기억하세요? 𝑦 = 3𝑥 𝜕𝑦 𝜕𝑥 = 3 𝑦 = 2 𝜕𝑦 𝜕𝑥 = 0 𝑦 = 𝑥2 𝜕𝑦 𝜕𝑥 = 2𝑥 𝑦 = 𝑤𝑥 𝜕𝑦 𝜕𝑥 = 𝑤 𝜕𝑦 𝜕𝑤 = 𝑥
    55. 55. w, b 를 최적화 하는 방법 - 미분 • x 가 주어졌을 때 ŷ 를 계산 (442번) ŷ = 5 * x + 1 • w 에 대한 미분으로 변화율 계산 • 변화율에 비례하여 w 와 b 를 변경
    56. 56. w 와 b 가 나아갈 표면
    57. 57. w, b 가 변경되는 순서 ŷ = 90 이고 y = 100 일 때 10만큼 모자람 10 * (w 에 대한 변화율) = 10 * x 10 * (b 에 대한 변화율) = 10 * 1 변경량 속도 조절을 위해 * 0.1 w 와 b 의 변경량을 각각 업데이트
    58. 58. 역방향 계산 Neuron ŷ w x b * + y - ŷ + (y – ŷ) * x * 0.1 + (y – ŷ) * 1 * 0.1 y: diabetes.target
    59. 59. 업데이트 부호가 의미하는 것 Neuron ŷ w x b * + y - ŷ + (y – ŷ) * x * 0.1 + (y – ŷ) * 1 * 0.1 (y – ŷ) > 0 : 출력이 모자람 if x > 0: w 를 증가시킴 else : w 를 감소시킴 (y – ŷ) < 0 : 출력이 넘침 if x > 0: w 를 감소시킴 else : w 를 증가시킴 y: diabetes.target
    60. 60. 기울기 업데이트 이것이 경사하강법(Gradient Descent)! y - ŷ 전체 요소에 대해 계산전체 합
    61. 61. 선형 회귀 계산 체질량 데이터 전체를 이용 3만번 반복 3만번 업데이트
    62. 62. 선형 회귀 모델
    63. 63. 보통의 이론적인 방법
    64. 64. 비용 함수 모델의 오차를 정의하는 함수 비용 함수 (Cost Function) == 손실 함수 (Loss Function) == 목적 함수 (Objective Function) == 오차 함수 (Error Function)
    65. 65. 회귀 분석의 비용 함수 평균 제곱 오차(Mean Square Error)*
    66. 66. 회귀 분석의 비용 함수 오차의 제곱 모든 훈련 데이터의 오차 제곱을 더함 훈련 데이터 갯수로 나눔 미분후 깔끔을 위해 2로 나눔
    67. 67. 비용 함수 미분
    68. 68. 경사하강
    69. 69. 그래디언트 업데이트 학습속도(Learning Rate)
    70. 70. 뉴런에서 그래디언트 전달 Neuron ŷ w x b * + y - ŷ η(y – ŷ)x η(y – ŷ)
    71. 71. 사이킷런과 비교
    72. 72. SGDRegressor 페널티: 나중에Stochastic
    73. 73. by Andreas C. Müller 사이킷런 치트 시트
    74. 74. batch, mini-batch SGDRegressor(Stochastic Gradient Descent): 확률적 경사 하강법 훈련 데이터를 하나씩 사용하여 반복 학습 SingleNeuron(Batch Gradient Descent): 훈련 데이터 전체를 사용하 여 반복 학습 Mini-Batch Gradient Descent: 훈련 데이터를 10~20개씩 묶음으로 나 누어 반복 학습
    75. 75. LinearRegression 정규방정식을 사용:
    76. 76. LinearRegression 단점: 데이터가 클 경우 연산비용이 너무 크고 역행렬을 구할 수 없는 특이 행렬이 존재함 정규방정식을 사용:
    77. 77. 감사합니다.

    ×