프랑크 로젠블라트가 1957년에 고안한 알고리즘
인공신경망(딥러닝)의 기원이 되는 알고리즘
원리:
다수의 신호를 입력으로 받아 하나의 신호를 출력함
출력하는 신호는 0과 1 두 가지 값만을 가질 수 있음
저자 제작
위의 원을 뉴런 혹은 노드라고 부름
x는 입력 신호, w는 가중치, y는 출력 신호
각 입력신호에 그에 상응하는 가중치가 곱해지고 정해진 한계(임계값θ)를 넘으면 1, 보다 작으면 0
임계값을 넘는 것을 '뉴런이 활성화한다'라고도 표현
$$
y = \begin{cases} 0 & \text{$(w_1x_1+w_2x_2\le\theta)$}\\ 1 & \text{$(w_1x_1+w_2x_2\gt\theta)$}\end{cases} $$
입력 신호 각각에 고유한 가중치가 부여됨
가중치: 각 신호가 결과에 주는 영향력을 조절하는 매개변수 - 클수록 해당 신호가 더 중요
θ를 편향으로 치환하여 다음과 같은 식으로 출력을 정의할 수 있음
$$
y = \begin{cases} 0 & \text{$(b+w_1x_1+w_2x_2\le0)$}\\ 1 & \text{$(b+w_1x_1+w_2x_2\gt0)$}\end{cases} $$
편향: 뉴런이 얼마나 쉽게 활성화(출력이 1)되느냐를 조정하는 매개변수 - 활성화 함수를 정한 후 결정 추천
*가중치와 편향과 같은 매개변수에 적절한 값을 정하는 것을 학습이라고 함
사람은 퍼셉트론의 구조(모델)을 고민하며 컴퓨터에게 학습할 데이터를 넘겨주는 역할을 함
진리표: 입력 신호와 출력 신호의 대응 표
AND 게이트:
입력이 모두 1인 경우 1을 반환, 나머지 경우는 0을 반환
진리표:
저자 제작
def AND(x1, x2):
w1, w2, theta = 1, 1, -1.5
val = w1*x1 + w2*x2 + theta
if val <= 0:
return 0
else:
return 1
-----------------------
AND(0, 0) 0
AND(1, 0) 0
AND(0, 1) 0
AND(1, 1) 1
NAND 게이트:
입력이 모두 1인 경우 0을 반환, 나머지 경우는 1을 반환 - AND 게이트의 반대
진리표:
저자 제작
def NAND(x1, x2):
w1, w2, theta = -1, -1, 1.5
val = w1*x1 + w2*x2 + theta
if val <= 0:
return 0
else:
return 1
-----------------------
NAND(0, 0) 1
NAND(1, 0) 1
NAND(0, 1) 1
NAND(1, 1) 0
OR 게이트:
입력이 1과 0인 경우 1을 반환, 나머지 경우는 0을 반환
진리표:
저자 제작
def OR(x1, x2):
w1, w2, theta = 1, 1, -0.5
val = w1*x1 + w2*x2 + theta
if val <= 0:
return 0
else:
return 1
-----------------------
OR(0, 0) 0
OR(1, 0) 1
OR(0, 1) 1
OR(1, 1) 1
선형과 비선형 & 다층 퍼셉트론:
직선의 영역 - 선형 영역 (직선 하나로 표기 가능)| 곡선의 영역 - 비선형 영역
AND, NAND, OR는 단층 퍼셉트론으로 이는 비선형 영역을 분리할 수 없는 한계를 지님
다층 퍼셉트론:
단층 퍼셉트론으로 표현하지 못한 것을 층을 늘려 구현할 수 있음
저자 제작 - 경우에 따라 위의 그림은 2층 퍼셉트론 혹은 3층 퍼셉트론 으로 불림
*파이썬은 배열의 시작 인덱스가 0이기 때문에 층 번호를 0부터 표기하는게 편리
XOR 게이트:
배타적 논리합 - 두 입력이 서로 다를 때 1을 반환, 나머지는 0을 반환
진리표:
저자 제작
def XOR(x1, x2):
s1, s2 = NAND(x1, x2), OR(x1, x2)
val = AND(s1, s2)
return val
결론**:**
다층 퍼셉트론은 복잡한 회로를 만들 수 있으며 퍼셉트론의 층이 많아지면 이론적으로 컴퓨터도 만들 수 있음