김성훈 딥러닝 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
드론과 지도
드론이 세상을 바꾸고 있습니다.드론의 활용처가 계속 넓어지고 있고, 글로벌 기업들의 참여가 많아지고 있으며, 새로운 기술들이 속속 등장하고 있습니다. 하지만 우리나라의 드론 산업은 일부 기업을 제외하면 중국에서 생산된 드론을 가져다가 조립하는 수준이 대부분입니다. 드론은 하드웨어, 소프트웨어, 데이터처리가 복합된 기술입니다. 어떤 기술들을 어떻게 조합할지에 성패가 달렸죠. 5년뒤 10년뒤에 이 블로그엔 어떤 글이 적힐까요? 그것이 궁금합니다.
by 푸른하늘이
Profile for bluesky61

달력

«   2018/09   »
            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            

카테고리

전체보기 (1586)
구글어스 (829)
공간정보 (236)
사진 (103)
드론/쿼드콥터 (239)
지오캐싱 (47)
기타 (131)
  • 4,494,852
  • 106406
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.