2.1 퍼셉트론이란?
퍼셉트론 : 다수의 신호를 입력으로 받아 하나의 신호로 출력
(1 - 신호가 흐른다 / 0 - 신호가 흐르지 않는다)
입력신호 : x1, x2
출력신호 : y
가중치(weight) : w1, w2
뉴런(or 노드) : 그림의 원
입력신호가 뉴런에 보내질 때 각각 고유한 가중치가 곱해진다. (w1x1, w2x2)
뉴런에서 보내온 신호의 총합이 정해진 한계(임계값 θ)를 넘어설 때만 1을 출력한다. = 뉴런이 활성화한다.
가중치 : 각 신호가 결과에 주는 영향력을 조절하는 요소로, 가중치가 클수록 해당 신호가 더 중요함을 뜻함.
2.2 단순한 논리 회로
✔️ AND 게이트
(w1, w2, θ) = (0.5, 0.5, 0.7)
✔️ NAND 게이트와 OR 게이트
(w1, w2, θ) = (-0.5, -0.5, -0.7)
(w1, w2, θ) = (0.5, 0.5, 0.5)
2.3 퍼셉트론 구현하기
✔️ 간단한 구현부터
def AND(x1, x2):
w1, w2, theta = 0.5, 0.5, 0.7
tmp = x1*w1 + x2*w2
if tmp <= theta:
return 0
elif tmp > theta:
return 1
✔️ 가중치와 편향 도입
이 식을 좀 더 직관적으로 바꾸면 아래와 같이 된다. (theta를 -b로 치환)
이 때 b를 편향(bias)라 부른다.
✔️ 가중치와 편향 구현하기
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
편향은 뉴런이 얼마나 쉽게 활성화(결과로 1을 출력)하느냐를 조정하는 매개변수이다.
예를 들어 편향이 -0.1이면 입력신호와 가중치를 곱한 값들의 합이 0.1을 초과하면 뉴런이 활성화되지만 편향이 -20이면 20을 넘어야 한다.
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
2.4 퍼셉트론의 한계
✔️ XOR 게이트
OR 게이트는 그림 2-6과 같이 직선(선형)으로 나눠 한쪽 영역은 1, 다른 한쪽은 0으로 표현이 가능하다.
XOR게이트 : 배타적 논리합
XOR게이트를 퍼셉트론으로 구현하려면 어떻게 해야 할까?
✔️ 선형과 비선형
XOR 게이트는 그림 2-8과 같이 직선이 아닌 곡선(비선형)으로만 표현이 가능하다.
2-5. 다층 퍼셉트론이 출동한다면
다층 퍼셉트론 : 퍼센트론으로 층을 쌓아(조합하여) 표현
✔️ 기존 게이트 조합하기
XOR 게이트를 만드는 방법 : AND, NAND, OR 게이트를 조합
✔️ XOR 게이트 구현하기
def XOR(x1, x2):
s1 = NAND(x1, x2)
s2 = OR(x1, x2)
y = AND(s1, s2)
return y
이를 공장의 조립라인에 비유하면
1단(1층) 작업자는 부품을 다듬어 일을 완료하여 2단(2층) 작업자에 전달한다.
2단(2층) 작업자는 1단(1층) 작업자로부터 받은 부품을 다듬어 완성품을 출하(출력)한다.
이처럼 퍼셉트론은 층을 쌓아(깊게 하여) 더 다양한 것을 표현할 수 있다.
2.7 정리
- 퍼셉트론은 입출력을 갖춘 알고리즘이다. 입력을 주면 정해진 규칙에 따른 값을 출력한다.
- 퍼셉트론에서는 '가중치'와 '편향'을 매개변수로 설정한다.
- 퍼셉트론으로 AND, OR 게이트 등의 논리 회로를 표현할 수 있다.
- XOR 게이트는 단층 퍼셉트론으로는 표현할 수 없다.
- 2층 퍼셉트론을 이용하면 XOR 게이트를 표현할 수 있다.
- 단층 퍼셉트론은 직선형 영역만 표현할 수 있고, 다층 퍼셉트론은 비선형 영역도 표현할 수 있다.
- 다층 퍼셉트론은 (이론상) 컴퓨터를 표현할 수 있다.
참고 git : https://github.com/geonsangyoo/DeepLearning/tree/master
'Deep Learning' 카테고리의 다른 글
[밑바닥부터시작하는딥러닝1] Chapter 7. 합성곱 신경망(CNN) (0) | 2024.04.13 |
---|---|
[밑바닥부터시작하는딥러닝1] Chapter 6. 학습관련기술들 (0) | 2024.04.12 |
[밑바닥부터시작하는딥러닝1] Chapter 5. 오차역전파법 (0) | 2024.04.05 |
[밑바닥부터시작하는딥러닝1] Chapter 4. 신경망 학습 (0) | 2024.04.04 |
[밑바닥부터시작하는딥러닝1] Chapter 3. 신경망 (0) | 2024.04.03 |