검색을 했을 때 상당히 중복된 내용이 많으므로, 본인이 이해하고 중요하다고 생각하는 내용만 정리를 해보도록 한다.
퍼셉트론이란?
- 인공 신경망을 구성하기 위한 하나의 알고리즘
- 1958년에 등장한 오래된 알고리즘
- 인공신경망과 딥러닝의 개념에 근간이 된다.
Input == 수상돌기
Weights == 가중치 부여
Output == 축삭을 통해 받은 전기적인 신호를 축삭 말단을 통해 출력
다수의 신호를 입력받아 하나의 신호를 출력한다.
- 흐른다 - 1
- 안흐른다 - 0
입력 신호가 뉴런에 보내질 때 각각 고유한 가중치가 곱해지고, 뉴런에서 보내온 신호의 총합이 정해진 threshold (한계점) 를 넘을 때, 1을 출력하고 활성화 된다.
이 때 이걸 표현해보면
- y = 0 (x1w1 + x2w2 <= 0)
- y = 1 (x1w1 + x2w2 > 0)
이렇게 표현이 된다.
컴퓨터의 연산 기능은 모두 AND, OR gate 로 되어있기 때문에
이것을 퍼셉트론으로 AND gate, OR gate 를 구현할 수 있다면, 상당히 복잡한 연산도 가능하다는 이론에 도달한다고 한다.
로젠블랫(Rosenblatt's) 알고리즘
- 퍼셉트론을 학습하기 위한 알고리즘
- 가중치(weight)는 랜덤하게 초기화 한다
- 하나의 샘플에 대해 예상 값(y_hat)을 출력 한다.
- y_hat = 0, y = 1 이면 가중치 값을 올린다.
- y_hat = 1, y = 0 이면 가중치 값을 내린다.
- 정답이 나올때 까지 계속 반복한다.
Bias 도입
- 편향이라는 의미를 가진다.
- 편향이란 한 쪽으로 치우친 성질
- threshold 대신에 사용한다.
- 어떤 수치를 가지느냐에 activation (즉, y = 1 이 되는 것) 이 되는지에 대한 기준이 된다.
- y = 0 (b + x1w1 + x2w2 <= 0)
- y = 1 (b + x1w1 + x2w2 > 0)
퍼셉트론의 한계
- 위 그림에서 직선 하나로 OR 게이트를 표현할 수 있는 것에 반해, XOR 게이트는 직선 하나로 구현할 수 없다.
- OR 게이트는 둘 중 하나만 1 이면 1이 나오는 단순한 녀석이지만, XOR는 x, y 값이 서로 다를 때만 1 이다.
- 퍼셉트론은 단층 구조(1-layer)로는 XOR 게이트를 구현할 수 없었다.
- 직선이라는 제약을 없앨 수 있을까 에 대한 회의론이 나왔고, 이후 다층 구조(Multi-layer)에 대한 알고리즘이 등장했다.
다층 퍼셉트론 (Multi-layer Perceptron)
- 퍼셉트론을 여러 층으로 쌓은 모델을 말한다.
- XOR 게이트를 예로 들 수 있다.
- 2-layer Perceptron
- Input Layer / Hidden Layer / Output Layer 로 나눠진다.
- Output Layer 의 값은 예측할 수 있다.
- 하지만 여기서 Hidden Layer 에서 어떤 값이 출력되어야하는지 정의가 되어있지 않았기 때문에, 로젠블랫 알고리즘을 적용할 수 없었다.
파이썬 코드로의 구현
- 논리게이트를 구현해본다.
- AND(), OR(), NAND() 를 먼저 구현해본다.
- 논리게이트에 대한 설명은 생략
- AND(NAND(), OR())=> XOR() 이다.
- 아무튼 논리게이트를 사용해서 복잡한 연산을 하는 시스템을 만들 수가 있다.
import numpy as np
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
for xs in [(0, 0), (1, 0), (0, 1), (1, 1)]:
y = XOR(xs[0], xs[1])
print(str(xs) + " -> " + str(y))
정리
- 퍼셉트론은 입출력을 갖춘 알고리즘
- 입력을 주면 정해진 규칙에 따른 값을 출력
- 퍼셉트론으로 AND, OR 게이트 등의 논리회로를 표현할 수 있다.
- XOR 게이트는 2층 퍼셉트론으로 표현할 수 있다.
- 단층 퍼셉트론은 직선형 영역만 표현하는 반면, 다층 퍼셉트론은 비선형 영역도 표현할 수 있다.
- 다층 퍼셉트론은 이론상 컴퓨터를 표현할 수 있다.
'Dev > AI' 카테고리의 다른 글
[리뷰] 랭체인으로 LLM 기반의 AI 서비스 개발하기 (0) | 2024.05.15 |
---|---|
[리뷰] 머신러닝 교과서: 파이토치 편 (0) | 2024.02.21 |
[인공지능개론] 신경망 학습에 대해서 (0) | 2022.05.02 |
[인공지능개론] 신경망(Neural network)에 대해서 (0) | 2022.04.18 |
파이썬으로 할 수 있는 것들. (0) | 2019.08.23 |