퍼셉트론 목차
퍼셉트론
퍼셉트론을 배우는 이유는 딥러닝이 이 개념에서 확장한 것이기 때문이다.
그러므로 쉽다고 간과하지 말고 후에 딥러닝을 배울 때 이 개념을 참조하고 비교해가면서 읽기를 권장한다.
퍼셉트론이란?
- 의의
딥러닝의 기원이 되는 알고리즘
다수의 신호(0,1)를 입력으로 받아 하나의 신호를 출력 - 입력이 2개인 퍼셉트론
➡️ 입력 신호가 뉴런에 보내질 때는 각각 고유한 가중치가 곱해짐
\((w_1 x_1 , w_2 x_2 )\).
그리고 이 가중치를 통한 값의 결과를 통해서 해당 값이 임계점(θ)을 넘기면 이 뉴런이 활성화 되는지 아닌지가 정해진다.
자세한 것은 활성화 함수에서 다룰 것이다.
아래의 식은 활성화 함수의 예시이다.
y
\(= 0(w_1 χ_1 + w_2 x_2 ≤ θ)\)
\(= 1(w_1 χ_1 + w_2 x_2 > θ)\)
이 식을 해석할 때,
- 뉴런이 활성화한다: 뉴런에서 보낸 신호의 총합이 정해진 한계(임계값,θ, theta,세타)를 넘어설 때만 1을 출력하는 것
- 가중치가 더 큼: 그만큼 더 중요(전류에서는 저항으로 반대의미)
단순한 논리회로(1층퍼셉트론)
그럼 위의 개념을 확장해서 게이트를 만들어보겠다.
앞서 말했듯 입력뉴런에 따라 활성화 할지말지를 정해주는데 이 활성화 여부는 게이트의 종류에 따라 다르다.
아래의 게이트는 모두 단순 논리회로로 입력이 둘, 출력은 하나이다
AND 게이트
입력이 모두 1이여야 1을 출력
각 입력값과 출력값의 위의 노드 그림에 대응시켜서 생각해보면 편하다
📝 게이트 구현
앞서 말했던 식의 θ를 -b로 치환
y
\(= 0(w_1 χ_1 + w_2 x_2 ≤ θ)\)
\(= 1(w_1 χ_1 + w_2 x_2 > θ)\)
def AND(x1, x2):
# 임의로 정한 AND를 만족하는 매개변수 조합
w1, w2, theta = 0.5, 0.5, 0.7
tmp = x1*w1 + x2*w2
if tmp <= theta:
return 0
elif tmp > theta:
return 1
[가중치와 편향 구현하기]
- b: 편향 bias
- 뉴런이 얼마나 쉽게 활성화(결과로 1을 출력)하느냐를 조정하는 매개변수
- 문맥에 따라 셋 모두를‘가중치’라고 할 때도 있음
- \(w_1\),\(w_2\): 가중치
- 각 입력 신호가 결과에 주는 영향력(중요도)을 조절하는 매개변수
y
\(= 0(b + w_1 χ_1 + w_2 x_2 ≤ θ)\)
\(= 1(b + w_1 χ_1 + w_2 x_2 > 0)\)
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
NAND 게이트
Not AND, (동작) AND 게이트의 출력을 뒤집은 것
➡️ AND 게이트를 구현하는 매개변수의 부호를 모두 반전
OR 게이트
입력 신호 중 하나 이상이 1이면 출력이 1이 되는 논리 회로
예외) XOR 게이트
XOR 게이트는 배타적 논리합이라는 논리 회로
‘배타적’: 자기 외에는 거부
\(x_1\) 과 \(x_2\)중 한쪽이 1일 때만 1을 출력
그럼 이러한 가중치(매개변수)의 값의 지정은 누가할까?
[일반 매개변수 값 지정]
인간(인간이 직접 진리표라는 ‘학습 데이터’를 보면서 매개변수의 값을 생각)
[기계학습에서 매개변수의 값 지정]
매개변수의 값을 정하는 작업을 컴퓨터가 자동으로 하도록 함
- 학습: 적절한 매개변수 값을 정하는 작업
- 사람: 퍼셉트론의 구조(모델) 고민, 컴퓨터에 학습할 데이터를 주는 일 수행
퍼셉트론의 구조는 AND, NAND, OR 게이트 모두 같음(즉 먄 위의 간단한 노드 구조라는 것이다)
그러므로 세 가지 게이트에서 다른 것은 매개변수(가중치와 임계값) 의 값일 뿐이다.
퍼셉트론의 한계
AND게이트, NAND게이트, OR게이트들은 퍼셉트론(맨앞의 단순 구조)로 구현이 가능했다.
하지만 XOR게이트는 지금까지 배운 퍼셉트론으로 구현이 불가하다.
즉 선형적으로 구분이 불가하다는 것이다.
PS) 퍼셉트론은 직선 하나로 나눈 영역만 표현 가능
텍스트로는 이해가 힘들것 같으니 그림으로 비교해보자
[PROBLEM]
- 회색 영역은 0
선형으로 나눠지는 OR 게이트의 동작과 달리,
XOR 게이트 는 선형으로 나눌 수 없다.
그래서 ‘직선으로 나누자 라는 제한을 없애자’ 자는 개념을 도입해야한다.
SOLUTION 1
: 위의 퍼셉트론 직선이라는 제한 없으면 구현 가능
SOLUTION 2
다층 퍼셉트론의 충돌 시
위에서 배운 퍼셉트론을 조합하여 조금 더 복잡하고 새로운 퍼셉트론 생성이 가능하다.
또한 이렇게 다층 퍼셉트론이 충돌할 시(비선형으로 표현해야할 시) 비선형이라는 개념없이 기존 AND, NAND, OR 게이트를 조합하여 2(3)층의 다층 퍼셉트론으로 표현이 가능하다.
👀구현 코드 보기
def XOR(x1, x2):
s1 = NAND(x1, x2)
s2 = OR(x1, x2)
y = AND(s1, s2)
return y
이것으로 컴퓨터까지 구현할 수 있지만 이 가중치를 설정하는 것은 수동(매우 어려움)이다
정리
이번 장에서 배운 내용
● 퍼셉트론은 입출력을 갖춘 알고리즘이다. 입력을 주면 정해진 규칙에 따른 값을 출력
● 퍼셉트론에서는 ‘가중치’와 ‘편향’을 매개변수로 설정한다.
● 퍼셉트론으로 AND, OR 게이트 등의 논리 회로를 표현할 수 있다.
● XOR 게이트는 단층 퍼셉트론으로는 표현할 수 없다.
● 2층 퍼셉트론을 이용하면 XOR 게이트를 표현할 수 있다.
● 단층 퍼셉트론은 직선형 영역만 표현할 수 있고, 다층 퍼셉트론은 비선형 영역도 표현할 수 있다.