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

Post on 16-Apr-2017

606 Views

Category:

Software

2 Downloads

Preview:

Click to see full reader

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 - summary of findings up today

RNN - Sequence Data

RNN - hypothesis

TensorFlow 어떻게 쓸 수 있을까?

● 오이 품종 자동 분류 기계

● 일본에서 TensorFlow 로 개발

● link

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

● Recurrent Neural Network

● Convolutional Neural Network

● Backpropagation Problem

● Google Cloud Machine Learning

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

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

● 부족한 한글자료

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

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

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

● Learning Rate 조절

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

자바카페 커뮤니티 PPL

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

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

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

● 오픈소스 활동

top related