기타/WWW

김성훈 딥러닝 1 - 머신러닝 용어와 개념

하늘이푸른오늘 2017. 11. 14. 00:41

Lec 00 - 머신/딥러닝 수업의 개요와 일정

https://www.youtube.com/watch?v=BS6O0zOGX4E

  • 알파고의 충격. 
    • Dr. Andrew Ng 님의 주장 - 머신러닝을 잘 이해하는 것이 슈퍼파워를 가지는 것.
    • 그렇지 못한 사람에 비해 앞서나갈 수 있다.
  • 누가 봐야 하나
    • 머신러닝에 대해 이해하고 싶은 사람
    • 수학이나 컴퓨터 공학에 대해 잘 모르는 사람
    • 기본적인 이해 만으로 머신러닝을 블랙박스처럼 사용하고 싶은 사람
    • Tensorflow 와 Python을 사용하고 싶은 사람.
  • 목표
    • 머신러닝 알고리듬에 대한 기본적인 이해
      • Linear regression, Logistic regression (Classification)
      • Neural networks, Convolutional Neural Network, Recurrent Neural Network
    • 머신 러닝 도구를 사용한 문제해결
      • Tensorflow와 Python
  • 수업 구조
    • 10분짜리 강좌
    • Tensorflow를 사용한 프로그래밍 실습
  • Acknowledgement
  • 스케줄
    • 머신러닝 기본 컨셉
    • 선형회귀분석(Linear Regression)
    • 로지스틱회귀분석(Logistic regression) (Classification)
    • 다변수(Vector) 선형/로지스틱 regression
    • 신경망(Neural networks)
    • 딥러닝
      • CNN
      • RNN
      • Bidiretional Neural networks

Lec 01 - 머신러닝 용어와 개념

  • 기본 개념
    • 머신러닝 이란 무엇인가
    • 학습이란 무엇인가?
      • 감독 학습
      • 무감독 학습
    • Regression 이란 무엇인가?
    • 분류(Classification)이란 무엇인가?
  •  머신러닝이란...
    • 명시적(explicit) 프로그래밍은 한계가 있음
      • 예) 스팸필터 : 법칙이 너무 많아서 프로그래밍하기 힘듦
      • 예) 자동 주행 : 법칙이 너무 많음
    • 머신러닝 : "명시적으로 프로그램하지 않고 (자료 또는 현장에서) 컴퓨터가 학습할 수 있도록 하는 분야" - Arthur Samuel (1959)
  • 감독/무감독 학습
    • 감독 학습
      • label이 정해져있는 예제(labeled example, training set)를 사용하여 학습.
      • 예: 고양이, 개, 머그, 모자 등을 사람들이 미리 제공 (labeled example)
    • 무감독 학습 : un-labeled data. 데이터를 보고 스스로 학습
      • 예: 구글뉴스 그루핑.
      • 예: Word Clustering. 비슷한 단어 모으기.
  • 감독 학습
    • 대부분의 문제 형태임. 이 코스에서 주로 다룰 내용.
      • 이미지 분류(Image labelling) - 이미지 태그를 사용하여 학습
      • 이메일 스팸필터 : labelled 이메일로부터 학습
      • 시험점수 예측 - 기존이 시험점수와 투자 시간관계를 사용한 학습
  • Training data set 이란??

    • 머신러닝의 일반적과정은, X(특징, feature) -> Y로 답(label)이 정해져있는 여러 데이터셋을 ML에 제공하고, 이를 기반으로 학습하면 모델이 생성되는데, 여기에서 모르는 Xtest와 같은 새로운 데이터를 ML에 물어보면 이에 대한 답을 제공해 주는 과정이다. 여기에서 답이 정해져 있는 데이터셋을 training data set이라고 한다.
    • AlphaGo 의 경우
      • AlphaGo는 수많은 기보를 학습하여 바둑선수가 돌을 두면, 그에 대응하는 답을 제공하는 형태로, 감독 학습이다. 여기에서 입력한 기보들이 Training data set이다.
  • 감독 학습의 유형 - 대개 아래와 같은 세가지 유형으로 구분됨
    • 공부한 시간에 근거한 시험점수 예측 - regression (범위가 있음)
      • training set X : 공부시간, Y : 점수
        • (10, 90), (9, 80), (3, 50), (2, 30)
      • 이 경우, ML 모델은 Regression. 학습을 시킴
      • 그렇다면 x=7 이면 점수는? 이라는 문제에 대해 Y=75 라고 답이 나온다.
    • 공부한 시간에 근거한 합격/불합격 - binary classification (두가지로 분류)
      • training set X : 공부시간, Y: 합격여부
        • (10, P), (9 :P), (3, F), (2, F)
    • 공부한 시간에 근거한 학점 (A,B,C,D,F) - multi-label classification (label이 많음)
      • training set X : 공부시간, Y: 합격여부
        • (10, A), (9 : B), (3, C), (2, F)

Lab 01 TensorFlow 기본

https://www.youtube.com/watch?v=-57Ne86Ia8w

  • 구글에서 만든 인공지능(Machine Intelligence)을 위한 오픈소스 소프트웨어 라이브러리
  • TensorFlow외에도 다른 라이브러리 많음. 그러나 절대적으로 TensorFlow 사용자가 많음

  • data flow graphs 를 사용하여 수치적 계산을 하기 위한 오픈소스 소프트웨어 라이브러리

  • Data Flow Graph란?
    • 그래프에서 노드들은 수학적 연산을 표현함.
    • Edge는 그 사이에서 돌아다니는 다차원 데이터 배열(tensor)을 표현함.
      • 한마디로 데이터(Tensor)
    • 이처럼 데이터의 흐름을 표현한 것이 Data Flow Graph이고, 데이터(Tensor)가 돌아다닌다라고 할 수 있음 ->Tensor Flow.
  • TensorFlow 설치
    • https://www.tensorflow.org/install/  에 있는 설명에 따라 설치하면 된다.
    • 나의 경우엔 Anaconda 설치후, 'Anaconda Prompt' 를 실행한 후 나머지 실행
      • GPU 버전의 경우, 별도의 conda environment 를 설치한 후 실행
    • 제대로 설치되었는지 확인하는 방법
      • 'Anaconda Prompt' 실행 (윈도10 검색(좌측아래 두번째)에서 찾을 것)
      • (C:\Anaconda3) C:>activate tensorflow
      • (tensorflow) C:>python
      • >>>import tensorflow as tf
      • >>> tf.__version__

  '1.4.0' 등과 같이 출력되면 성공

  • Hello Tensorflow!

hello = tf.constant("Hello, TensorFlow!")  #default graph에 node를 추가하는 operation임.
sess = tf.Session()
print(sess.run(hello)  # hello 라는 노드를 실행하라는 것.

  • Computational Graph

#먼저, 그래프를 build 함

node1 = tf.constant(3.0, tf.float32)
node2 = tf.constant(4.0)
node3 = tf.add(node1, node2) 

print("node1 : ", node1, "node2 : ", node2)
print("node3 : ", node3)

#이것을 실행시키면 결과값이 나오는 것이 아니라, node1, node2, node의 데이터형만 알려줌. 실행을 시키려면 아래와 같이 돌려야 한다.

#세션을 만들고나서, 그것을 수행시킨다.

sess =tf.Session()
print("sess.run(node1, node2) : ", sess.run([node1, node2]))
print("sess.run(node3) : ", sess.run(node3))

  • Tensorflow를 실행시키는 것은 기존의 프로그램과는 달리... 
    • 첫번째 그래프를 build 하고, 
    • 두번째 sess.run(op)를 통해서 그래프를 실행시키면
    • 그래프에 있는 변수를 갱신하거나, 값을 반환하게 된다.

  • Placeholders (상수가 아닌 변수로 사용할 때)

a = tf.placeholder(tf.float32)
b = tf.placeholder(tf.float32)
adder_node = a + b            #이것은 tf.add(a,b)를 간단하게 쓴 것임.

print(sess.run(adder_node, feed_dict = {a:3, b:4.5}))
print(sess.run(adder_node, feed_dict ={a:[1,3], b:[2,4]}))

  • 모든 것이 Tensor다. (Everything is Tensor)
  • Tensor의 Rank

Rank 

Math entity 

Python 예 

 0

 스칼라

 s = 234

 1

 벡터

 v = [1.1, 2.3, 324]

 2

 매트릭스

 m =[[1,2,3],[4,5,6], [4,5,2]]

 3

 3-Tensor (cube)

 t = [[[2], [4], [6]], [[2],[5],[12]], [[14],[7], [12]]]

 4

 4-Tensor

 ....

  • Tensor의 Shape
    • 각각의 element에 몇개 들어 있는가...

Rank 

Shape 

차원-수 

 0

 []

 0-D

 0차원의 Tensor. 스칼라

 1

 [D0]

 1-D

 shape가 [5]인 1차원 Tensor

 2

 [D0,D1]

 2-D

 shape가 [3,4]인 2-D Tensor

 3

 [D0, D1, D2]

 3-D

 shape가 [1,5,3]인 3차원 Tensor 등

 n

 [D0, D1,... Dn-1]

 n-D

 

    • 예를 들어, t=[[1,5], [4,2], [4,4], [3,2]]의 shape는 [2,4] 이다.
  • Data Type

Data Type 

 Pythone type 

 설명

 DT_FLOAT

 tf.float32

 

 DT_DOUBLE

 tf.float64

 

 DT_INT8

 tf.int8

 

 DT_INT16

 tf.int16

 

 DT_INT32

 tf.int32

 

 DT_INT64

 tf.int64