퍼셉트론(Perceptron)

Stop._.bmin·2023년 2월 1일
0
post-custom-banner

인공 신경망은 수많은 머신 러닝 방법 중 하나이다.
전통적인 머신 러닝과 딥 러닝을 구분해서 딥러닝을 이해하기 위해서는 인공 신경망에 대한 이해가 필요하다.

1. 퍼셉트론(Perceptron)

프랑크 로젠블라트가 1957년에 제안한 초기 형태의 인공신경망
다수의 입력으로부터 하나의 결과를 내보내는 알고리즘! 신경 세포 뉴런의 동작과 매우 유사하다.

아래는 신경 세포 뉴런이다.

가지돌기에서 신호를 받아들이고, 역치 이상의 크기를 가지게 되면 축삭돌기를 통해서 신호를 전달한다.

아래는 퍼셉트론 그림이다.

신경 세포 뉴런의 입력 신호와 출력신호가 퍼셉트론에서는 각각 입력값과 출력에 해당된다.

그림에서 x 는 입력값을 의미하며, w 는 가중치, y는 출력값이다. 그림 안의 원은 인공 뉴런에 해당한다.
축삭돌기의 역할을 퍼셉트론에서는 가중치가 대신한다. 인공 뉴런에서 보내진 입력값은 각각의 가중치와 함께 종착지인 인공 뉴런으로 전달된다.

각각의 입력값에는 각각의 가중치가 있다. 이때 가중치 값이 크면 클수록 해당 입력 값이 중요해진다.

각 입력값이 가중치와 곱해져서 인공뉴런에 보내지고, 각 입력과 그에 해당하는 가중치의 곱의 전체 합이 임계치(threshold)를 넘으면 종착지에 있는 인공 뉴런은 출력 신호로 1을 출력하고, 그렇지 않을 경우 0을 출력한다.

이러한 함수를 계단 함수(Step function)라고 하며, 아래와 같다.


이때 계단 함수에 사용된 임계치값을 수식으로 표현할 때는 보통 세타로 표현한다.

위의 식에서 임계치를 좌변으로 넘기면 편향 b(bias)로 표현할 수 있다. 편향 또한 퍼셉트론의 입력으로 사용된다. 보통 그림으로 표현할 때는 입력값이 1로 고정되고 편향 b가 곱해지는 변수로 표현된다.

이렇게 뉴런에서 출력값을 변경시키는 함수를 활성화 함수(Activation Function)라고 한다.

초기 인공 신경망 모델(퍼셉트론)은 활성화 함수로 계단함수를 사용하였으나, 그 뒤에 등장한 여러가지 발전된 신경망들은 계단 함수 외에도 여러 다양한 함수를 사용하고 있다. (가령, 시그모이드 함수나 소프트맥스 함수)

2. 단층 퍼셉트론(Single-Layer Perceptron)

앞에서 배운 퍼셉트론을 단층 퍼셉트론이라고 한다. 퍼셉트론은 단층과 다층 퍼셉트론으로 나뉜다.

  • 단층 퍼셉트론: 값을 보내는 단계와 값을 받아서 출력하는 2단계
    • 각 단계를 층(layer)
    • 두 개의 층을 각각 입력층(input layer)과 출력층(output layer)라고 부른다

1) 단층 퍼셉트론은 어떤 일을 하나?

컴퓨터는 두 개의 값 (0과 1)을 입력해 하나의 값을 출력하는 회로가 모여 만들어진다. 이 회로를 게이트(gate)라고 부른다. 초기형태의 인공 신경망(퍼셉트론)은 간단한 XOR 게이트조차 구현할 수 없었다. 그러나 단층 퍼셉트론을 이용하면 AND, NAND, OR 게이트는 구현이 가능하다.

  • 게이트 연산에는 두 개의 입력값과 하나의 출력값이 쓰인다.

1. AND 게이트

AND 게이트는 두 개의 입력값 모두 1인 경우에 출력값 y가 1이 나오는 구조이다.

def AND_gate(x1, x2):
    w1 = 0.5
    w2 = 0.5
    b = -0.7
    result = x1*w1 + x2*w2 + b
    if result <= 0:
        return 0
    else:
        return 1

위의 코드는 오직 두 입력값이 1인 경우에만 1을 출력한다.

AND_gate(0, 0), AND_gate(0, 1), AND_gate(1, 0), AND_gate(1, 1)
AND_gate(0, 0), AND_gate(0, 1), AND_gate(1, 0), AND_gate(1, 1)

2. NAND 게이트

두 개의 입력값이 1인 경우에만 출력값이 0이다.

def NAND_gate(x1, x2):
    w1 = -0.5
    w2 = -0.5
    b = 0.7
    result = x1*w1 + x2*w2 + b
    if result <= 0:
        return 0
    else:
        return 1

단지 가중치와 편향을 바꾸면 퍼셉트론의 구조는 같기 때문에 성립한다.

NAND_gate(0, 0), NAND_gate(0, 1), NAND_gate(1, 0), NAND_gate(1, 1)
(1, 1, 1, 0)

3. OR 게이트

두 개의 입력이 모두 0인 경우에만 0이 출력된다.

def OR_gate(x1, x2):
    w1 = 0.6
    w2 = 0.6
    b = -0.5
    result = x1*w1 + x2*w2 + b
    if result <= 0:
        return 0
    else:
        return 1
OR_gate(0, 0), OR_gate(0, 1), OR_gate(1, 0), OR_gate(1, 1)
(0, 1, 1, 1)

위처럼 3가지 게이트(OR, AND, NAND)를 구현할 수 있으나 XOR 게이트는 구현할 수 없다.

  • 왜냐하면, 입력값 두 개가 서로 다를 때만 1이 출력되기 때문이다.
    • 아무리 수많은 가중치와 편향을 넣어봐도 XOR게이트를 구현하는 것은 불가능하다.
    • 단층 퍼셉트론은 직선 하나로 두 영역을 나눌 수 있는 문제에 대해서만 구현이 가능하기 때문이다.

각 게이트에 대한 단층 퍼셉트론 시각화

위에서 구현한 게이트들은 아래와 같이 시각화가 가능하다.

그러나 XOR 게이트의 경우에는 다르다.

하얀색 원과 검은색 원을 직선 하나로 나누는 것은 불가능하기에 단층 퍼셉트론으로는 구현이 불가능하다.
적어도 두 개의 선이 필요한데 다층 퍼셉트론을 통해 해결할 수 있다.

3. 다층 퍼셉트론(MultiLayer Perceptron, MLP)

XOR 게이트는 기존의 AND, NAND, OR 게이트를 조합하면 만들 수 있다. 즉 층을 더 쌓으면 만들 수 있다.
다층 퍼셉트론과 단층 퍼셉트론의 차이는

  • 단층 퍼셉트론은 입력층과 출력층만 존재하였으나,
  • 다층 퍼셉트론은 중간에 은닉층이 존재한다.

위 그림처럼 AND, NAND, OR 게이트를 조합하여 XOR 게이트를 구현한 다층 퍼셉트론의 예이다. XOR 예제에서는 은닉층 1개만으로 문제를 해결할 수 있지만, 다충 퍼셉트론은 은닉층이 1개 이상인 퍼셉트론, 즉 중간에 수많은 은닉층을 더 추가할 수 있다. 아래의 그림은 더 어려운 문제를 풀기 위해서 은닉층이 더 하나 추가되고 뉴런의 개수가 늘어난 다층 퍼셉트론이다.

위와 같이 은닉층이 2개 이상인 신경망을 심층 신경망(Deep NEural Network, DNN)이라고 한다. 다층 퍼셉트론만이 아니라 여러 변형된 다양한 신경망들도 은닉층이 2개 이상이 되면 심층 신경망이라 한다.

위의 예시들은 사람이 직접 가중치를 바꿔보면서 적절한 가중치를 수동으로 찾은 것인데, 이제는 기계가 가중치를 스스로 찾도록 자동화시켜야 한다. 이를 훈련(training) 또는 학습(Learning)라고 한다.

이때 로지스틱 회귀에서 사용했듯이 손실 함수(Loss function)와 옵티마이저(Optimizer)을 사용한다. 그리고 만약 학습을 시키는 인공 신경망이 심층 신경망인 경우에는 이를 심층 신경망을 학습시킨다고 하여, 딥 러닝(Deep Learning)이라고 한다.

profile
원하는 만큼만
post-custom-banner

0개의 댓글