개발자를 위한 공감세미나 tensor-flow
TRANSCRIPT
MachineLearningTensorFlow
머신러닝, 텐서 플로우 일단 한번 해봤습니다.
개요
● 머신러닝/ 텐서플로우 진입장벽이 너무 높지 않을까?
● 머신러닝이란?
● Linear Regression
● Logistic Regression
● Softmax
● Tensor Flow MNIST
● Deep Learning
● Tensor Flow 어떻게 쓸 수 있을까?
● 스터디하며 어려웠던 점들 공유
발표자 소개
● #안귀정 #서울 #개발자 #30대
● 머신러닝 / 텐서플로우 공부중
● 구글 / 스택 오버플로우 없이는 코딩에 에로사항이 꽃피는 개발자
머신러닝 진입 장벽이 너무 높지 않을까?
● AI, ML 관심은 있지만 진입장벽이 너무 높지 않을까?
→ 깊이있게 배우고 전문가가 되려면 어렵지만 그건 다른 기술도 마찬가지
● 우리에겐 Google, Stack OverFlow 가 있다.
Alphago / AI / Machine Learning
● Alphago
● Deep Learning
● Machine Learning
● Tensor Flow
TensorFlow ?
● Open Source Machine Learning Library
● Numerical computation using data flow graphs
● Data flow graphs describe mathematical computation with a directed graph of nodes & edges.
● Deep Flexibility, True Portability, Connect Research and Production, Auto-Differentiation, Language Options, Maximize Performance …
Java Cafe 오프라인 스터디 모집
● 혼자서는 공부가 힘들 수도 있겠다.
● 여러명이 모여서 의논하다 보면
뭔가 더 도움이 될것 같다.
● 온오프믹스로 텐서플로우 스터디 모집
스터디는 진행했으나 수많은 진입 장벽들
● 스터디원 모두 인공지능 / 머신 러닝 관련 지식들이 전무
● 난무하는 새로운 용어들
● 영어 능력 부족 (관련 자료들 대부분이 영어자료)
● 수학 손뗀지 오래
→ 한국어 동영상 강의로 스터디 진행 http://hunkim.github.io/ml/
머신러닝 이란?
● 일반적인 프로그램은 프로그래머가 프로그램의 동작 방식을 설계
● Explicit programming 으로 처리하기 곤란한 문제들
(Explicit programming)
● 프로그램이 스스로 학습하게 만들어 문제를 해결하자
EX) 스팸필터, 자동주행 : 너무 많은 룰이 필요해서 어려움
머신러닝 - Supervised Learning
● Supervised / Unsupervised Learning
● 지도 학습
→ 학습데이터(Training Set) 로 학습
머신러닝 기본 개념 - 학습 데이터
머신러닝 기본 개념 - 기계가 학습한다는 것은?
● 결국 입력값에 대한 결과를 예측하는 소프트웨어
● 학습 데이터를 이용해 결과 예측 알고리즘을
● 어떻게 이런 소프트웨어를 만들까?
스스로 수정하는 소프트웨어
Linear Regression
● 입력과 결과가 비례 관계에 있다고 보여지는 사건들
→ 이를 테면 “공부를 많이하면 공부를 잘할 것이다” 같은 것.
Linear Regression - 학습 데이터
학습시간
토익성적학습시간(시간) 토익성적(점)54 8008 320
30 60024 63046 70012 68020 73037 72040 70048 920
Linear Regression - 가설 H(X)
Y = ax + bh(x) = wx + b
학습시간
토익성적학습시간(시간) 토익성적(점)54 8008 320
30 60024 63046 70012 68020 73037 72040 70048 920
Linear Regression 에서 학습의 의미
● Linear Regression 에서 프로그램이 학습한다는 의미
→ 학습 데이터를 기반하여 가설 H(x) 에서 최적의 w(가중치) 와 b(상수) 값을 찾는 것
→ H(x) = wx + b
● 어떻게 최적의 값을 찾을것인가?
→ Cost Function 설계
Cost Function
비용 = (실제값1 - 예측값1) 2 + (실제값2 - 예측값2)
2 + …..
학습시간
토익성적학습시간(시간) 토익성적(점)54 8008 320
30 60024 63046 70012 68020 73037 72040 70048 920
Cost Function
● 학습하는 프로그램은 Cost Function 의 결과가 가장 적은 최적의 W 와 b 를 찾는 것
● (w, b) 를 하나로 묶어 W 로 취급 → H(x) = WX
● 어떻게 Cost Function 의 결과를 최적화 할 것인가?
Gradient Descent Algorithm
Cost Function 을 그래프로 그려보면?
Gradient Descent Algorithm
● 현재 예측된 W 값에서 기울기를 구하고 기울기가 양수인 경우 W 값을 Step 만큼 감소, 음수인 경우 Step 만큼 증가
● 임의의 W값을 선택
● 해당 점에서 Cost 값이 적은 쪽으로 Step에 따라 경사를 타고 내려감
● 결국 해당 점에서 미분이 필요
Gradient Descent Algorithm
(새로운 예측 W) = (현재의 W) - (Cost 함수의 미분값 * Step)
Linear Regression - Tensor Flow
# Run Code
Convex Function
Linear Regression 요약
● 비례관계에 있다고 여겨지는 사건을 예측할 때 사용 가능
● 프로그램이 학습한다는 의미는 h(x) = wx + b 에서 최적의 w, b 를 찾는 것
● (w, b) 를 찾기 위하여 (실제값 - 예측값)^2 을 비용으로 하는 함수 설계
● 임의의 w, b 를 구하고 해당 값에서 cost 를 줄이는 방향으로 w 와 b 를 수정.
MultiVariable Linear Regression
학습시간(시간) 토익성적(점)54 8008 320
30 60024 63046 70070 30020 92037 72040 70048 920
MultiVariable Linear Regression
학습시간(시간) 해외거주(월) 토익성적(점)54 12 8008 0 320
30 12 60024 15 63046 12 70070 0 30020 36 92037 12 72040 12 70048 24 920
Matrix
학습시간(시간)(x1) 해외거주(월)(x2) 토익성적(점)(y)54 12 8008 0 320
30 12 60024 15 63046 12 70070 0 30020 36 92037 12 72040 12 70048 24 920
● w 의 행렬을 W, x 의 행렬을 X 라 하면
● h(x) = WX
● 결국 기존 가설을 그대로 적용 가능
MultiVariable Linear Regression - Tensor Flow
# Run Code
Logistic Classifier
● TRUE, FALSE 로 결과가 정해져야 하는 사건들의 경우
● 이를테면 “스팸 필터” 등
● 혹은 주식에서 주가 상승, 주가 하락 예측
Logistic Classifier
● Linear Regression 가설을 그대로 적용한다면?
Logistic Classifier
학습시간 기술이민
54 PASS8 FAIL
30 PASS24 FAIL46 PASS12 FAIL20 FAIL37 PASS40 PASS48 PASS
Logistic Classifier
120
학습시간 기술이민
54 PASS8 FAIL
30 PASS24 FAIL46 PASS12 FAIL20 FAIL37 PASS40 PASS48 PASS
Sigmoid
● H(x) 결과값을 Sigmoid 함수에 넣으면
알아서 0 ~ 1 사이 값이 샤샥 리턴
● Linear Regression 에서 사용했던 H(x) = WX
를 그대로 유지하고 H(x) 의 결과 값을
Sigmoid g(z) 로 변환
Logistic Regression - Cost Function
● Cost 함수의 목적은 예측 결과와 실제 결과가 다르면 비용이 높게, 그렇지
않으면 낮게 나오는 것
Logistic Regression - Cost Function
Logistic Regression - Tensor Flow
# Run Code
Multinomial Logistic Regression
● 결과가 A, B, C 등 특정 타입으로 정해지는 경우
● 이를테면 학점 A, B, C, D, F
Multinomial Logistic Regression - Sigmoid
● 여러개의 타입을 계산하는 것이 아닌 각 결과인가 아닌가에 대한
● EX) 학점 A, B, C, D, F 인 경우
→ A[FALSE], B[TRUE], C[FALSE], D[FALSE], F[FALSE]
TRUE, FALSE 를 구함
Softmax
● 각 분류에 대한 Sigmoid 를 구하고 Sigmoid 총합에 자기자신의 비중을
구함
● EX) A, B, C, D, F 에 대한 확률을 구함. 각 확률을 더하면 1
→ Sigmoid 총합에 자기자신의 비중이므로 각 분류별 % 값이 나오게 됨.
Cross Entropy
● 각 결과에 대한 Sigmoid 값을 더한 함수
● L 은 결과값 array
Cost Function
Softmax - Sample
학습시간(시간) 해외거주(월) 영어 학점54 12 B8 0 D
30 12 C24 15 C46 12 C70 0 D20 36 A37 12 C40 12 C48 24 A
Softmax - TensorFlow
# Run Code
MNIST - TensorFlow Basic Tutorial
Mixed National Institute of Standards and Technology database
MNIST
● MNIST 데이터 역시 행렬로 취급하면 된다.
● 지금까지 배운 정보로도 충분히 ML Software 제작 가능
● 결과값이 0~9 이므로 Softmax 사용
MNIST - TensorFlow
# Run Code
MNIST - TensorFlow
● 이게 정말 제대로 돌고 있는가?
● 올바른 방향으로 스터디 하고 있는가?
● 실행할때마다 결과가 달라지니 확신할 수가 없음
Client
MNIST 테스트 소스 제작
HTMLJAVASCRIPT
Server
FLASK
opencv
tensorflow
MNIST 테스트 소스 제작
https://github.com/ahn-kj/javacafe-tensorflow
MNIST 테스트 소스
# Run Code
Deep Learning - NN
http://sebastianraschka.com/
Deep Learning(Neural Network)
● 신호에 적절한 가중치 곱 과 적절한 상수값이
더해짐
● Activation Function 으로 다음 뉴런에 신호를
전달할지 안할지가 결정됨
NN - Activation Function
NN - AND / OR GATE
NN - AND / OR GATE
NN - AND / OR
NN - XOR Problem
NN - XOR Problem
NN - Backpropagation
NN - Backpropagation Problem
NN - Backpropagation Problem
Convolutional NN
Convolutional NN
NN - ImageNet
NN - ImageNet
NN - Deep Q Learning
https://www.youtube.com/watch?v=V1eYniJ0Rnk
NN - summary of findings up today
RNN - Sequence Data
RNN - hypothesis
TensorFlow 어떻게 쓸 수 있을까?
● 시각장애인을 위한 이미지 설명 프로그램
● 중학교 2학년이 개발
● RNN / TensorFlow 사용
● link
TensorFlow 어떻게 쓸 수 있을까?
● 오이 품종 자동 분류 기계
● 일본에서 TensorFlow 로 개발
● link
발표에서 제대로 다루지 못한 것들
● Recurrent Neural Network
● Convolutional Neural Network
● Backpropagation Problem
● Google Cloud Machine Learning
스터디 하며 어려웠던 점들 (삽질들)● 딥러닝의 경우 GPU 가속이 중요
→ Macbook 에서는 세팅 어려움, 우분투 추천
● 부족한 한글자료
→ 최근에는 점차 늘어나는 추세
● 오랜만에 보는 수학공식들
→ 개발자 관점에서 크게 중요하지 않을 수 있음. 원리를 이해하고 응용만 해도 충분.
● Learning Rate 조절
→ Cost 가 발산하는 경우 확인 필요
자바카페 커뮤니티 PPL
● 오프라인 스터디 위주 개발자 모임
● 원하는 경우 각종 세미나서 발표기회 제공
● 오프라인 모임만 가질수 있는 장점
● 오픈소스 활동