김성훈 딥러닝 8 - 딥러닝의 기본개념

기타 2018.02.14 00:58 Posted by 푸른하늘 푸른하늘이

Lec 08-1 딥러닝의 기본 개념 : 시작과 XOR 문제

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

  • 인간의 궁극적 목적 : 대신 생각해주는 기계

    • 전체적으로 매우 복잡하지만, 그것을 구성하는 뉴런은 매우 단순함
    • 이것을 수학적으로 만들면 다음과 같음.
      • body에서 여러개의 신호 $ x_0 , x_1 $ 등을 가중치 $ w_0 w_1 $로 받아 모두 합치고, 
      • 여기에 bias를 추가한 값이 activation function의 일정한 threshold를 넘으면 output =1

  • 이는 Logistic regression 과 유사

  • Hardware 구현

    • AND/OR 연산을 하면 스스로 학습가능하고 재생산가능한 인공지능이 가능할 것이라고 생각함. 이는 단순한 전기적 신호처리로도 가능하다.

    • 그런데 단순한 XOR도 처리할 수 없었다.

  • MIT AI Lab에서 Perceptrons(1969) 에서 불가능함을 수학적으로 증명
    • 여러개를 합치면 MLP (MultiLayer perceptros) 가능하지만, 학습이 불가능하다고 함
    • 이후 인공지능에 대한 관심이 10년 이상 후퇴함

  • 1974년... 80년대 후반에 이르러 이 학습문제 해결가능해짐

  • 고양이 실험 LeCun
    • 특정 모양에 대해서 특정 뉴런만 반응한다는 것을 알게됨
    • 일부 신경들의 신경망들이 나중에 조합

  • Convolutional Neural Networks
    • 부분을 잘라서 보낸 뒤 나중에 합치는 방법으로
    • Alphago도 이 방법 사용
    • 글자 인식 등에 90% 이상의 성능을 발휘.

    • 84-94 : 자동주행차량 연구에 사용

    • 터미네이터2 에도 Neural-net 이 나옴.
  • 문제에 봉착함.
    • Backpropagation이 layer가 많아질수록 성능이 나빠짐.
    • SVM 등의 새로운 간단한 알고리듬이 나옴.
    • LeCun 교수도 1995 년에 비효율적이라고 하고 포기함.

Lec- 08-2 Back-propagation 과 2006/2007 '딥'의 출현

  • CIFAR (Canadian Institute for Advanced Research)
    • 당장 성과가 없어도 연구하도록 장려. 1987년 Hinton은 캐나다로 이주함.
  • 2006, 2007 년 Hinton/Bengio 가 장벽을 깨는 논문을 발표함.
    • Layer가 많을 경우에도, weight를 잘 초기화시키면 training이 가능핟.
    • 어려운 문제에 대해서는 Deep machine learning 방법이 훨씬 효율적이다.
    • 이름을 Deep Learning 으로 Rebranding
  • IMAGENET 대규모 시각인식 챌린지 대회에서 주목을 받게됨.
    • 140만개의 영상에서 1000개의 object class 를 분류하는 것.

    • 2010년에 에러율 30%. 겨우 몇 %정도씩 발전. 그런데 2012년에 급격한 발전. 박사과정 논문. 계속 발전하여, MSRA 연구에서 3% 대 오류로. 사람(스탠포드 학생) 보다 더 나음.

    • 그림을 설명할 수 있게됨

    • Deep API
      • 자연어를 해석하여 필요한 API를 자동으로 끌어와서 프로그램 생성
      • 정확도가 65% 정도로 올라갔음.

  • 소음이 많은 환경에서 음성 인식도 획기적으로 개선.

  • Alphago

  • Geoffrey Hinton 박사가 발견한 사항
    • 아직 labelled dataset이 수천분의 일 수준으로 부족하다.
    • 컴퓨터가 백만배 더 빨라야 한다.
    • 아직도 가중치 초기화가 불합리하다.
    • 비선형 유형을 잘못사용하고 있다.
  • 왜 인공지능에 신경을 써야 하나?
    • 뭔가 데이터를 만지고, 판매하고 있다면 인공지능에 대해 아는 것이 도움 많다.
      • 유튜브 자막, 페이스북 추천, 구글 검색결과
      • 네플릭스, 아마존 등의 경우도 추천.
    • 실생활에서도 활용가능. 진열품 배치 등

  • 왜 지금 해야 하나?
    • 지금 시작해도 세계적인 전문가가 되기에 늦지 않다.
    • 수학적으로도 복잡하지 않다.
    • 현재 90% 이상의 정확도.
    • 도구가 많이 공개되어 있다. 
    • Python 과 같은 쉬운 언어.
    • 매우 즐겁다!!

Lab 8 - Tensor Manipulation

  • 텐서 행렬 처리

import tensorflow as tf
import numpy as np
import pprint

tf.set_random_seed(777)

pp = pprint.PrettyPrinter(indent=4)
sess=tf.InteractiveSession()

t = np.array([0, 1, 2, 3, 4, 5, 6])

print(t.ndim) # rank -> 1
print(t.shape) #shage ->7
print(t[0], t[1], t[-2])
print(t[2:5], t[4:-1])

t = np.array([[1,2,3], [4,5,6], [7,8,9], [10,11,12]])
pp.pprint(t)
print(t.ndim)
print(t.shape)

  • Shape, Rank, Axis

t=tf.constant([1,2,3,4])
tf.shape(t).eval()  #4
t=tf.constant([[1,2,3], [5,4,6]])
tf.shape(t).eval()  # 2,3

t = tf.constant(
       [[[[ 1,  2,  3,  4],
         [ 5,  6,  7,  8],
         [ 9, 10, 11, 12]],

        [[13, 14, 15, 16],
         [17, 18, 19, 20],
         [21, 22, 23, 24]]]])
tf.shape(t).eval() # 제일 안쪽이 제일 뒷쪽. 안쪽부터 세기 (1, 2, 3, 4)

  • 축... rank =4 이므로 4개의 축이 있다.
    • 맨안쪽 [1,2,3,4]의 axis=3 (또는 -1) (0부터 시작하므로)
    • 1, 5, 9 방향이 axis=2
  • Matmul 과 multiply는 완전히 다른 개념. 주의할 것
    • 그냥 곱을 할 경우, broadcasting이 적용됨.
  • Broadcasting
    • shape가 다른 행렬에도 4칙연산이 가능하도록 확장시켜주는 것
    • 편리하지만, 잘못된 연산이 발생할 우려가 있음.

matrix1 = tf.constant([[1,2]])
matrix2 = tf.constant(3)
(matrix1+matrix2).eval()  # 3이 [3,3]으로 취급하여, [4,5]가 됨

  • Reduce mean

x = [[1., 2.],   [3,4]]
tf.reduce_mean(x).eval()   # 값 전체의 평균 : 2.5
tf.reduce_mean(x, axis=0).eval() # 세로방향 array([2., 3.])
tf.reduce_mean(x, axis=1).eval() # 가로방향 array([1.5, 3.5])

  • Reduce sum

tf.reduce_sum(x, axis=0).eval() # array([4,6], dtype=float32)
tf.reduce_mean(tf.reduce_sum(x, axis=-1)).eval() # [3, 7] -> 5.0

  • Argmax

x = [[ 0, 1, 2],
      [ 2. 1, 0]]
tf.argmax(x, axis=0).eval() # array([1, 0, 0])
tf.argmax(x, axis=1).eval() # array([2, 0])

  • Reshape ***

t = np.array([[[0, 1, 2],
                  [3, 4, 5]],
                 [[6, 7, 8],
                  [9,10,11]]])
t.shape # (2,2,3)
tf.reshape(t, shape=[-1,3]).eval()
tf.reshape(t, shape=[-1,1,3])eval()

  • Reshape(squeeze, expand)

tf.squeeze([[0], [1], [2]]).eval()   #array([0,1,2])
tf.expand_dims([0,1,2], 1).eval()  #array([[0], [1], [2]])

  • One hot

t=tf.one_hot([[0], [1], [2], [0]] , depth=3).eval() # array ([[[1,0,0]], [[0,1,0]], [[0,0,1]], [[1,0,0]]]) 
tf.reshape(t, shape=[-1,3]).eval() # array([[1,0,0], [0,1,0], [0,0,1], [1,0,0]]) 

  • Type Casting 

tf.cast([1.9, 2.2, 3.3, 4.9], tf.int32).eval()   # array ([1,2,3,4])
tf.cast([True, False, 1==1, 1==0], tf.int32).eval()   # array([1, 0, 1, 0])

  • Stack

x=[1,4]
y=[2,5]
z=[3,6]
tf.stack([x,y,z]).eval()   #array([[1,4], [2,5], [3,6]])
tf.stack([x,y,z], axis=1).eval()   #array([1,2,3], [4,5,6]])

  • Ones and Zeros like

x=[[0,1,2], [2,1,0]
tf.ones_like(x).eval()    #array([[1,1,1], [1,1,1]])
tf.zeros_like(x).eval()   #array([[0,0,0], [0,0,0]])

  • Zip

for x,y in zip([1,2,3], [4,5,6]) :
    print(x,y)                      # 1 4 / 2 5 / 3 6 으로 출력됨
for x,y,z in zip([1,2,3], [4,5,6], [7,8,9]) :
    print(x,y,z)                    # 1 4 7 / 2 5 8 / 3 6 9 로 출력됨


댓글을 달아 주세요

BLOG main image
공간정보와 인터넷지도
제 관심사는 계속 바뀝니다. 이 블로그를 유지하는 동안에도 벌써 여러번 주제가 빠뀐 것 같습니다. 돌고 돌아 이제 고향으로 돌아왔습니다. 공간정보입니다. 세계를 측정하고, 그 기준을 세우고, 데이터를 효율적으로 공유하는 것이 공간정보에서 다루는 내용입니다. 4차산업혁명이 데이터 기반이라고들 합니다. 데이터는 그냥 모아둔다고 정보가 되지 않습니다. 표준에 따른 공통 스키마를 기반으로 만들어져야 합니다. 누구나 언제든지, 쉽고 투명하게 데이터를 가져다 쓸
by 푸른하늘이
Profile for bluesky61

달력

«   2018/12   »
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31          

카테고리

전체보기 (1588)
공간정보 (238)
구글어스 (829)
사진 (103)
드론/쿼드콥터 (239)
지오캐싱 (47)
기타 (131)
  • 4,549,065
  • 108474
TNM Media textcube get rss

공간정보와 인터넷지도

푸른하늘이's Blog is powered by Tistory. / Supported by TNM Media.
Copyright by 푸른하늘이 [ http://www.ringblog.com ]. All rights reserved.

Textcube TNM Media
푸른하늘이's Blog is powered by Tistory. Designed by Qwer999. Supported by TNM Media.