PostIT

[AI/Deep Learing] 인공지능을 위한 Deep Learning 맛 보기 공부(Perceptron과 신경망) - 1 본문

Deep Learning

[AI/Deep Learing] 인공지능을 위한 Deep Learning 맛 보기 공부(Perceptron과 신경망) - 1

shun10114 2017. 5. 24. 13:31

# [AI/Deep Learing] 인공지능을 위한 Deep Learning 준비(Perceptron과 신경망) - 1


  • ## 퍼셉트론(perceptron)

  • 인공신경망의 한 종류로서, 1957년에 코넬 항공 연구소(Cornell Aeronautical Lab)의 프랑크 로젠블라트 (Frank Rosenblatt)에 의해 고안되었다. 이것은 가장 간단한 형태의 피드포워드(Feedforward) 네트워크 - 선형분류기- 으로도 볼 수 있다.

    퍼셉트론이 동작하는 방식은 다음과 같다. 각 노드의 가중치와 입력치를 곱한 것을 모두 합한 값이 활성함수에 의해 판단되는데, 그 값이 임계치(보통 0)보다 크면 뉴런이 활성화되고 결과값으로 1을 출력한다. 뉴런이 활성화되지 않으면 결과값으로 -1을 출력한다.

    마빈 민스키와 시모어 페퍼트는 저서 "퍼셉트론"에서 단층 퍼셉트론은 XOR 연산이 불가능하지만, 다층 퍼셉트론으로는 XOR 연산이 가능함을 보였다.


논리회로

Code(Python) 

 

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

    else:

        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

    else:

        return 1 

 

 def OR(x1, x2):

    x = np.array([x1, x2])

    w = np.array([0.5,0.5]) 

    b = -0.2

    tmp = np.sum(w*x) + b

    if tmp <= 0:

        return 0

    else:

        return 1

 

 def XOR(x1, x2):

    s1 = NAND(x1, x2)

    s2 = OR(x1, x2)

    y = AND(s1,s2)

    return y



  • AND, OR, NAND는 단층 퍼셉트론
  • XOR은 다층 퍼셉트론(2층 퍼셉트론)
  • 단층 퍼셉트론은 직선형 영역만 표현할 수 있고, 다층 퍼셉트론은 비선형 영역도 표현할 수 있다.
  • 퍼셉트론은 층을 거듭 쌓으면 비선형적인 표현도 가능하고, 이론상 컴퓨터가 수행하는 처리도 모두 표현할 수 있다.


퍼셉트론에서 가중치를 설정하는 것이 수동으로 할 수 박에 없는 문제가 있습니다. 이를 위해 신경망을 통한 가중치 매개변수의 적절한 값을 데이터로부터 자동으로 학습하게 만들어주어야 합니다.



### 퍼셉트론을 통해 신경망으로 넘어가기


주의. 
단순 퍼셉트론은, 단층 네트워크에서 계단 함수(임계값을 경계로 출력이 바뀌는 함수)를 활성화 함수로 사용한 모델을 가리키고,
다층 퍼셉트론은, 신경망을 가리킵니다.


    1. b는 편향을 나타내는 매개변수로 뉴런이 얼마나 쉽게 활성화되느냐를 제어합니다. 
      w1과 w2는 각 신호의 가중치를 나타내는 매개변수로 각 신호의 영향력을 제어합니다.
      편향 b는 네트워크에서 보이지 않습니다. 

    2. 편향치와 가중치를 더해 1이 넘느냐 안넘느냐의 구별하는 것이 퍼셉트론입니다. 그렇다면, 이를 이와 같이 h(x) 함수로 정의할 수 있습니다.

      이처럼 입력 신호의 총합을 출력 신호로 변환하는 함수를 '활성화 함수'(Activation function)라고 합니다. 활성화 함수는 입력 신호의 총합이 활성화를 일으키는지를 정하는 역할을 수행합니다.




    3. 활성화 함수를 계단 함수에서 다른 함수로 변경하는 것이 신경망으로 나아가는 열쇠입니다.



### 계단 함수 & 그래프 구현하기

import numpy as np


# 계단 함수 구현


def step_function(x):

    if x>0:

        return 1

    else:

        return 0

# 인수 x는 실수(부동소수점)만 받아들입니다. 즉, step_function(3.0)은 되지만 numpy 배열을 인수로 넣을 수는 없습니다.



def step_function(x):

    y = x >0

    return y.astype(np.int)

# numpy 배열도 지원하도록 수정



x = np.array([-1.0,1.0,2.0])

x

    array([-1.,  1.,  2.])



y = x > 0

y

    array([False,  True,  True], dtype=bool)



y = y.astype(np.int)

y

    array([0, 1, 1])



# numpy 배열의 자료형을 변환할 때는 astype() 위처럼 메서드를 이용하면 됩니다.

# 계단 함수 그래프 구현


import matplotlib.pylab as plt

def step_function(x):

    return np.array(x > 0, dtype=np.int)



x = np.arange(-5.0, 5.0, 0.1)

y = step_function(x)

plt.plot(x, y)

plt.ylim(-0.1,1.1)

plt.show()




  • ## 신경망
    신경망은 입력층, 출력층, 은닉층으로 나뉘어 집니다. 은닉층은 사람 눈에는 보이지 않습니다. 이를 다시, 0층 1층 2층으로 하겠습니다.




## 참고

밑바닥부터 시작하는 딥러닝

Comments