개발자를 위한 공감세미나 tensor-flow

74
MachineLearning TensorFlow 머신러닝, 텐서 플로우 일단 한번 해봤습니다.

Upload: hanbit-media

Post on 16-Apr-2017

606 views

Category:

Software


2 download

TRANSCRIPT

Page 1: 개발자를 위한 공감세미나 tensor-flow

MachineLearningTensorFlow

머신러닝, 텐서 플로우 일단 한번 해봤습니다.

Page 2: 개발자를 위한 공감세미나 tensor-flow

개요

● 머신러닝/ 텐서플로우 진입장벽이 너무 높지 않을까?

● 머신러닝이란?

● Linear Regression

● Logistic Regression

● Softmax

● Tensor Flow MNIST

● Deep Learning

● Tensor Flow 어떻게 쓸 수 있을까?

● 스터디하며 어려웠던 점들 공유

Page 3: 개발자를 위한 공감세미나 tensor-flow

발표자 소개

● #안귀정 #서울 #개발자 #30대

● 머신러닝 / 텐서플로우 공부중

● 구글 / 스택 오버플로우 없이는 코딩에 에로사항이 꽃피는 개발자

Page 4: 개발자를 위한 공감세미나 tensor-flow

머신러닝 진입 장벽이 너무 높지 않을까?

● AI, ML 관심은 있지만 진입장벽이 너무 높지 않을까?

→ 깊이있게 배우고 전문가가 되려면 어렵지만 그건 다른 기술도 마찬가지

● 우리에겐 Google, Stack OverFlow 가 있다.

Page 5: 개발자를 위한 공감세미나 tensor-flow

Alphago / AI / Machine Learning

● Alphago

● Deep Learning

● Machine Learning

● Tensor Flow

Page 6: 개발자를 위한 공감세미나 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 …

Page 7: 개발자를 위한 공감세미나 tensor-flow

Java Cafe 오프라인 스터디 모집

● 혼자서는 공부가 힘들 수도 있겠다.

● 여러명이 모여서 의논하다 보면

뭔가 더 도움이 될것 같다.

● 온오프믹스로 텐서플로우 스터디 모집

Page 8: 개발자를 위한 공감세미나 tensor-flow

스터디는 진행했으나 수많은 진입 장벽들

● 스터디원 모두 인공지능 / 머신 러닝 관련 지식들이 전무

● 난무하는 새로운 용어들

● 영어 능력 부족 (관련 자료들 대부분이 영어자료)

● 수학 손뗀지 오래

→ 한국어 동영상 강의로 스터디 진행 http://hunkim.github.io/ml/

Page 9: 개발자를 위한 공감세미나 tensor-flow

머신러닝 이란?

● 일반적인 프로그램은 프로그래머가 프로그램의 동작 방식을 설계

● Explicit programming 으로 처리하기 곤란한 문제들

(Explicit programming)

● 프로그램이 스스로 학습하게 만들어 문제를 해결하자

EX) 스팸필터, 자동주행 : 너무 많은 룰이 필요해서 어려움

Page 10: 개발자를 위한 공감세미나 tensor-flow

머신러닝 - Supervised Learning

● Supervised / Unsupervised Learning

● 지도 학습

→ 학습데이터(Training Set) 로 학습

Page 11: 개발자를 위한 공감세미나 tensor-flow

머신러닝 기본 개념 - 학습 데이터

Page 12: 개발자를 위한 공감세미나 tensor-flow

머신러닝 기본 개념 - 기계가 학습한다는 것은?

● 결국 입력값에 대한 결과를 예측하는 소프트웨어

● 학습 데이터를 이용해 결과 예측 알고리즘을

● 어떻게 이런 소프트웨어를 만들까?

스스로 수정하는 소프트웨어

Page 13: 개발자를 위한 공감세미나 tensor-flow

Linear Regression

● 입력과 결과가 비례 관계에 있다고 보여지는 사건들

→ 이를 테면 “공부를 많이하면 공부를 잘할 것이다” 같은 것.

Page 14: 개발자를 위한 공감세미나 tensor-flow

Linear Regression - 학습 데이터

학습시간

토익성적학습시간(시간) 토익성적(점)54 8008 320

30 60024 63046 70012 68020 73037 72040 70048 920

Page 15: 개발자를 위한 공감세미나 tensor-flow

Linear Regression - 가설 H(X)

Y = ax + bh(x) = wx + b

학습시간

토익성적학습시간(시간) 토익성적(점)54 8008 320

30 60024 63046 70012 68020 73037 72040 70048 920

Page 16: 개발자를 위한 공감세미나 tensor-flow

Linear Regression 에서 학습의 의미

● Linear Regression 에서 프로그램이 학습한다는 의미

→ 학습 데이터를 기반하여 가설 H(x) 에서 최적의 w(가중치) 와 b(상수) 값을 찾는 것

→ H(x) = wx + b

● 어떻게 최적의 값을 찾을것인가?

→ Cost Function 설계

Page 17: 개발자를 위한 공감세미나 tensor-flow

Cost Function

비용 = (실제값1 - 예측값1) 2 + (실제값2 - 예측값2)

2 + …..

학습시간

토익성적학습시간(시간) 토익성적(점)54 8008 320

30 60024 63046 70012 68020 73037 72040 70048 920

Page 18: 개발자를 위한 공감세미나 tensor-flow

Cost Function

● 학습하는 프로그램은 Cost Function 의 결과가 가장 적은 최적의 W 와 b 를 찾는 것

● (w, b) 를 하나로 묶어 W 로 취급 → H(x) = WX

● 어떻게 Cost Function 의 결과를 최적화 할 것인가?

Page 19: 개발자를 위한 공감세미나 tensor-flow

Gradient Descent Algorithm

Cost Function 을 그래프로 그려보면?

Page 20: 개발자를 위한 공감세미나 tensor-flow

Gradient Descent Algorithm

● 현재 예측된 W 값에서 기울기를 구하고 기울기가 양수인 경우 W 값을 Step 만큼 감소, 음수인 경우 Step 만큼 증가

● 임의의 W값을 선택

● 해당 점에서 Cost 값이 적은 쪽으로 Step에 따라 경사를 타고 내려감

● 결국 해당 점에서 미분이 필요

Page 21: 개발자를 위한 공감세미나 tensor-flow

Gradient Descent Algorithm

(새로운 예측 W) = (현재의 W) - (Cost 함수의 미분값 * Step)

Page 22: 개발자를 위한 공감세미나 tensor-flow

Linear Regression - Tensor Flow

# Run Code

Page 23: 개발자를 위한 공감세미나 tensor-flow

Convex Function

Page 24: 개발자를 위한 공감세미나 tensor-flow

Linear Regression 요약

● 비례관계에 있다고 여겨지는 사건을 예측할 때 사용 가능

● 프로그램이 학습한다는 의미는 h(x) = wx + b 에서 최적의 w, b 를 찾는 것

● (w, b) 를 찾기 위하여 (실제값 - 예측값)^2 을 비용으로 하는 함수 설계

● 임의의 w, b 를 구하고 해당 값에서 cost 를 줄이는 방향으로 w 와 b 를 수정.

Page 25: 개발자를 위한 공감세미나 tensor-flow

MultiVariable Linear Regression

학습시간(시간) 토익성적(점)54 8008 320

30 60024 63046 70070 30020 92037 72040 70048 920

Page 26: 개발자를 위한 공감세미나 tensor-flow

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

Page 27: 개발자를 위한 공감세미나 tensor-flow

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

● 결국 기존 가설을 그대로 적용 가능

Page 28: 개발자를 위한 공감세미나 tensor-flow

MultiVariable Linear Regression - Tensor Flow

# Run Code

Page 29: 개발자를 위한 공감세미나 tensor-flow

Logistic Classifier

● TRUE, FALSE 로 결과가 정해져야 하는 사건들의 경우

● 이를테면 “스팸 필터” 등

● 혹은 주식에서 주가 상승, 주가 하락 예측

Page 30: 개발자를 위한 공감세미나 tensor-flow

Logistic Classifier

● Linear Regression 가설을 그대로 적용한다면?

Page 31: 개발자를 위한 공감세미나 tensor-flow

Logistic Classifier

학습시간 기술이민

54 PASS8 FAIL

30 PASS24 FAIL46 PASS12 FAIL20 FAIL37 PASS40 PASS48 PASS

Page 32: 개발자를 위한 공감세미나 tensor-flow

Logistic Classifier

120

학습시간 기술이민

54 PASS8 FAIL

30 PASS24 FAIL46 PASS12 FAIL20 FAIL37 PASS40 PASS48 PASS

Page 33: 개발자를 위한 공감세미나 tensor-flow

Sigmoid

● H(x) 결과값을 Sigmoid 함수에 넣으면

알아서 0 ~ 1 사이 값이 샤샥 리턴

● Linear Regression 에서 사용했던 H(x) = WX

를 그대로 유지하고 H(x) 의 결과 값을

Sigmoid g(z) 로 변환

Page 34: 개발자를 위한 공감세미나 tensor-flow

Logistic Regression - Cost Function

● Cost 함수의 목적은 예측 결과와 실제 결과가 다르면 비용이 높게, 그렇지

않으면 낮게 나오는 것

Page 35: 개발자를 위한 공감세미나 tensor-flow

Logistic Regression - Cost Function

Page 36: 개발자를 위한 공감세미나 tensor-flow

Logistic Regression - Tensor Flow

# Run Code

Page 37: 개발자를 위한 공감세미나 tensor-flow

Multinomial Logistic Regression

● 결과가 A, B, C 등 특정 타입으로 정해지는 경우

● 이를테면 학점 A, B, C, D, F

Page 38: 개발자를 위한 공감세미나 tensor-flow

Multinomial Logistic Regression - Sigmoid

● 여러개의 타입을 계산하는 것이 아닌 각 결과인가 아닌가에 대한

● EX) 학점 A, B, C, D, F 인 경우

→ A[FALSE], B[TRUE], C[FALSE], D[FALSE], F[FALSE]

TRUE, FALSE 를 구함

Page 39: 개발자를 위한 공감세미나 tensor-flow

Softmax

● 각 분류에 대한 Sigmoid 를 구하고 Sigmoid 총합에 자기자신의 비중을

구함

● EX) A, B, C, D, F 에 대한 확률을 구함. 각 확률을 더하면 1

→ Sigmoid 총합에 자기자신의 비중이므로 각 분류별 % 값이 나오게 됨.

Page 40: 개발자를 위한 공감세미나 tensor-flow

Cross Entropy

● 각 결과에 대한 Sigmoid 값을 더한 함수

● L 은 결과값 array

Page 41: 개발자를 위한 공감세미나 tensor-flow

Cost Function

Page 42: 개발자를 위한 공감세미나 tensor-flow

Softmax - Sample

학습시간(시간) 해외거주(월) 영어 학점54 12 B8 0 D

30 12 C24 15 C46 12 C70 0 D20 36 A37 12 C40 12 C48 24 A

Page 43: 개발자를 위한 공감세미나 tensor-flow

Softmax - TensorFlow

# Run Code

Page 44: 개발자를 위한 공감세미나 tensor-flow

MNIST - TensorFlow Basic Tutorial

Mixed National Institute of Standards and Technology database

Page 45: 개발자를 위한 공감세미나 tensor-flow

MNIST

● MNIST 데이터 역시 행렬로 취급하면 된다.

● 지금까지 배운 정보로도 충분히 ML Software 제작 가능

● 결과값이 0~9 이므로 Softmax 사용

Page 46: 개발자를 위한 공감세미나 tensor-flow

MNIST - TensorFlow

# Run Code

Page 47: 개발자를 위한 공감세미나 tensor-flow

MNIST - TensorFlow

● 이게 정말 제대로 돌고 있는가?

● 올바른 방향으로 스터디 하고 있는가?

● 실행할때마다 결과가 달라지니 확신할 수가 없음

Page 48: 개발자를 위한 공감세미나 tensor-flow

Client

MNIST 테스트 소스 제작

HTMLJAVASCRIPT

Server

FLASK

opencv

tensorflow

Page 49: 개발자를 위한 공감세미나 tensor-flow

MNIST 테스트 소스 제작

https://github.com/ahn-kj/javacafe-tensorflow

Page 50: 개발자를 위한 공감세미나 tensor-flow

MNIST 테스트 소스

# Run Code

Page 51: 개발자를 위한 공감세미나 tensor-flow

Deep Learning - NN

http://sebastianraschka.com/

Page 52: 개발자를 위한 공감세미나 tensor-flow

Deep Learning(Neural Network)

● 신호에 적절한 가중치 곱 과 적절한 상수값이

더해짐

● Activation Function 으로 다음 뉴런에 신호를

전달할지 안할지가 결정됨

Page 53: 개발자를 위한 공감세미나 tensor-flow

NN - Activation Function

Page 54: 개발자를 위한 공감세미나 tensor-flow

NN - AND / OR GATE

Page 55: 개발자를 위한 공감세미나 tensor-flow

NN - AND / OR GATE

Page 56: 개발자를 위한 공감세미나 tensor-flow

NN - AND / OR

Page 57: 개발자를 위한 공감세미나 tensor-flow

NN - XOR Problem

Page 58: 개발자를 위한 공감세미나 tensor-flow

NN - XOR Problem

Page 59: 개발자를 위한 공감세미나 tensor-flow

NN - Backpropagation

Page 60: 개발자를 위한 공감세미나 tensor-flow

NN - Backpropagation Problem

Page 61: 개발자를 위한 공감세미나 tensor-flow

NN - Backpropagation Problem

Page 62: 개발자를 위한 공감세미나 tensor-flow

Convolutional NN

Page 63: 개발자를 위한 공감세미나 tensor-flow

Convolutional NN

Page 64: 개발자를 위한 공감세미나 tensor-flow

NN - ImageNet

Page 65: 개발자를 위한 공감세미나 tensor-flow

NN - ImageNet

Page 67: 개발자를 위한 공감세미나 tensor-flow

NN - summary of findings up today

Page 68: 개발자를 위한 공감세미나 tensor-flow

RNN - Sequence Data

Page 69: 개발자를 위한 공감세미나 tensor-flow

RNN - hypothesis

Page 71: 개발자를 위한 공감세미나 tensor-flow

TensorFlow 어떻게 쓸 수 있을까?

● 오이 품종 자동 분류 기계

● 일본에서 TensorFlow 로 개발

● link

Page 72: 개발자를 위한 공감세미나 tensor-flow

발표에서 제대로 다루지 못한 것들

● Recurrent Neural Network

● Convolutional Neural Network

● Backpropagation Problem

● Google Cloud Machine Learning

Page 73: 개발자를 위한 공감세미나 tensor-flow

스터디 하며 어려웠던 점들 (삽질들)● 딥러닝의 경우 GPU 가속이 중요

→ Macbook 에서는 세팅 어려움, 우분투 추천

● 부족한 한글자료

→ 최근에는 점차 늘어나는 추세

● 오랜만에 보는 수학공식들

→ 개발자 관점에서 크게 중요하지 않을 수 있음. 원리를 이해하고 응용만 해도 충분.

● Learning Rate 조절

→ Cost 가 발산하는 경우 확인 필요

Page 74: 개발자를 위한 공감세미나 tensor-flow

자바카페 커뮤니티 PPL

● 오프라인 스터디 위주 개발자 모임

● 원하는 경우 각종 세미나서 발표기회 제공

● 오프라인 모임만 가질수 있는 장점

● 오픈소스 활동