Quiet Time


- 머신러닝과 딥러닝의 차이점은? 
     붓꽃의 종을 구별하는 임무가 있다고 했을때 머신러닝은
     사람이 붓꽃의 특성을 정의하고 데이터 세트를 만들고나서
     컴퓨터가 데이터 세트를 기반으로 붓꽃을 구별하는 판별식을 결정하는 방법


머신러닝





딥러닝


 딥러닝은 알고리즘에 의해 컴퓨터가 붓꽃의 사진을 보고 스스로 특성을 찾아내고 판별해 내는 방법이다. 



■ 복습 
  1. 머신러닝과 딥러닝의 차이? 
     딥러닝은 알고리즘에 의해 컴퓨터가 붓꽃의 사진을 보고 스스로 특성을 찾아내고 판별해내는 방법

     '깊은 학습'
     
     신경망츠잉 여러개이기 때무넹
  1. 신경망을 구현하기 위한 라이브러리 2개? 
     - numpy 
     - matplotlib

■ 2장. 퍼셉트론 (Perceptron) 

     머신러닝의 한 부류인 딥러닝(이미지를 기계가 직접 인식해서 학습) 
                         ↓
         퍼센트론 ---> 신경망

결론은 ? 분류를 하겟다.

신경망을 통해서 구현하고자 하는 목표는 ? 분류 
     
           - 붓꽃 사진을 보고 종을 분류
           - 고양이 사진, 개 사진 분류 

퍼셉트론도 분류인데 숫자 0과 1을 분류한다. 


     

1943년에 미국의 신경외과 의사인 워렌 맥컬록에 의해 발다닝 되었고

1957년에 프랑크 로젠 블라트가 퍼센트론 알고리즘을 고안했다

사람의 뇌의 동자긍ㄹ 전기 스위치의 on/off로 흉내 낼 수 있다는 이론을 
증명하였다.

간단히 말하면 인간의 신경세포 한를 흉대는 냈는데

고등하굑 생물시간에 배운  3가지 용어 ?

  1. 자극(stinulus)
  2. 반응(response)
  3. 역치(threshold)

 "특정 자극이 있다면 그 자극이 어느 역치 이상이여야만 세포가 반응한다."

예 : 짜게 먹는 사람은 자기가 평소에 먹는 만큼 음식이 짜지 않으면 싱겁다고 느낀다.
    ( 역치 이하의 자극은 무시) 
 
      싱겁게 먹는 사람이 짜게 먹기 시작해서 오랜 시간이 지나면 
      예전에 먹던 싱거운 음식에 만족하지 못한다( 역치가 올라감)

1969년 : 퍼센터론은 단순 선형분류기에 불과하다
          왜냐면? xor분류도 못한다고 단정을 지음 

          인공지능의 침체기 (인공지능의 빙하기)

1970년 중반 : 중요한 논문이 하나 발표 : 역전파 알고리즘  (다층 퍼센트론) 

     당시의 컴퓨터 연산으로는 이 이론을 구현하기가 어려웠음 


1986년 : 은닉층을 갖는 다층 퍼센트론 + 오류 역전파 학습 알고리즘 구현 되기 시작함 

          ↓
        오늘날


입력 신호               가중치         출력신호

입력신호의 연결강도가 가중치인데 가중치의 갑싱 클수록 강한 신호이다

입력신호가 뉴런에 보내질때는 각각의 고유하 가중치가 곱해진다.

w1 * x1 + w2 * x2 <= 임계값(θ) ---> 0 (신호가 안 흐른다)
w1 * x1 + w2 * x2 > 임계값(θ) ---> 1 (신호가 흐른다)

뉴런에서 보내온 신호의 총합이 정해진 한계(임계값)을 넘어설때만 1을 출력한다.

퍼셉트론은 n 개의 이진수가 하나의 뉴런을 통과해서 가중의 합이 0 보다 크면 활성화되는
가장 간단한 신경망이다. 

퍼셉트론을 학습시키는 방법은 간단한데, 보통 목표치를 정해주고 
현재 계산한 값이 목표치와 다른면 그 만큼의 오차를 다시 퍼센트론에 
반영해서 오차를 줄여나가는 방법 
















문제27. 아래의 식을 파이썬으로 구현하시오 ! 

 x1  w1
     ↘
         ?
     ↗
 x2  w2

x1 * w1 + x2 * w2 = ?

x1 : 0 
x2 : 1
w1 : 0.5
w2 : 0.5

(0 1) * (0.5 0.5)

input=np.array([0,1])
weight=np.array([0.5, 0.5])
np.sum(input*weight)

문제28. 위의 식에 책 52쪽에 나오는 편향을 더해서 완성한 아래의 식을 
       파이썬으로 구현하시오 !
       
       b + w1*x1 + w2*x2 

b(편향) = -0.7

x1 : 0 
x2 : 1
w1 : 0.5
w2 : 0.5


input=np.array([0,1])
weight=np.array([0.50.5])
b=0.7
print(np.sum(input*weight) + b)


문제29. AND게이트를 파이썬으로 구현하시오 

def AND(x1, x2):
     return x1&x2

def AND(x1, x2):
     w1, w2, theta = 0.5, 0.5, 0.7
     tmp = x1*w1 + x2*w2
     if tmp <= theta :
          return 0 
     elif tmp > theta:
          return 1

■ 편향까지 포함해서 AND 게이트를 구현

 "가중치는 입력신호가 결과에 주는 영향력(중요도)를 조절하는 
  매개변수이고 편향은 뉴런이 얼마나 쉽게 활성화(결과로 1을 출력) 
  하느냐를 조정하는 매개변수이다. "

  예를들어 b 가 -0.1 이면 각 입력신호에 가중치를 곱한 값들의 합이 0.1 을
  초과할 때만 뉴런이 활성화 된다.

  만약 편향이 -20 이면 입력신호에 가중치를 곱한 ㅎ바이 20을 넘지 않으면 뉴런은 활성화
  되지 않는다. 

문제30. 문제29번의 편향을 포함해서 AND 게이트 함수를 구현하시오 !

가중치 : 0.5, 0.5
편 향 : -0.7



def AND(x1, x2):
     w1, w2, theta = 0.5, 0.5, -0.7
     tmp = x1*w1 + x2*w2
     if tmp <= theta :
          return 0 
     elif tmp > theta:
          return 1

  1. 다층 퍼셉트론 
          -XOR 게이트 구현

AND  X1  X2  Y
      0   0  0 
      0   1  0 
      1   0  0
      1   1  1

OR   X1  X2  Y
      0   0  0
      0   1  1 
      1   0  1 
      1   1  1

NAND  X1  X2  Y
       0   0  1
       0   1  1 
       1   0  1
       1   1  1

xor 는 eXclusive OR 라는 뜻으로 둘중에 하나만 1일때 1 이 된다.

XOR    x1   x2   y
            0     0   0
            0     1   1
            1     0   1
            1     1   1

"이 처럼 층이 여러개인 퍼셉트론을 다층 퍼셉트론이라고 한다."

문제31. AND 함수를 이용해서 NAND함수를 만드시오 

def AND(x1, x2):
    x = np.array([x1,x2])
    w = np.array([0.5,0.5])
    b = -0.7
    tmp = np.sum(w*x) + b
    if tmp <= 0:
        return 0
    elif tmp > 0:
        return 1

def NAND(x1, x2):
    x = np.array([x1,x2])
    w = np.array([-0.5,-0.5])
    b = 0.7
    tmp = np.sum(w*x) + b
    if tmp <= 0:
        return 0
    elif tmp > 0:
        return 1
문제32. OR 함수를 파이썬으로 구현하시오 

def OR(x1, x2):
    x = np.array([x1, x2])
    w = np.array([0.50.5])
    b = -0.3
    tmp = np.sum(w * x) + b
    if tmp <= 0:
        return 0
    elif tmp > 0:
        return 1

문제33. XOR 함수를 파이썬으로 구현하시오 !

print(XOR(1,0))


def XOR(x1, x2):
    s1 = NAND(x1, x2)
    s2 = OR(x1, x2)
    y = AND(s1, s2)
    return y

print(XOR(0,0))
print(XOR(0,1))
print(XOR(1,0))
print(XOR(1,1))

#

























 









































 

'딥러닝' 카테고리의 다른 글

딥러닝 5장 .  (0) 2017.07.26
딥러닝 4장. 신경망 학습  (0) 2017.07.26
딥러닝 3장. 신경망  (0) 2017.07.26
딥러닝 1장. Numpy, matplotlib 사용법  (0) 2017.07.26