인공 신경망(딥러닝) 분야의 초창기 알고리즘 (by Frank Rosenblatt, 1957) @Jihyun Choi @여준 윤 @Hyun Ahn
2.1 퍼셉트론이란?
•
인공 신경망(Artificial Neural Networks): 사람의 지능을 구현하는 뇌신경 구조와 신호 전달 체계를 모형화
•
퍼셉트론(Perceptron): 사람의 뇌신경을 구성하는 가장 기본 요소인 뉴런 단위의 신호 처리 과정을 모형화
•
퍼셉트론은 다수의 입력 신호(예: 를 입력으로 받아 하나의 출력 신호(예: )를 생성
◦
1: ‘신호가 흐른다’
◦
0: ‘신호가 흐르지 않는다’
◦
원(circle): 뉴런 또는 노드
◦
가중치(): 입력 신호의 세기를 조절하는 역할
퍼셉트론의 기본 구조: 입력 신호(x1, x2), 가중치(w1, w2), 출력 신호(y)
•
출력 신호(): 뉴런에서 전달한 신호의 총합이 정해진 한계를 넘을 때 1을 출력함
◦
이를 “뉴런이 활성화(activate)한다.” 라고 표현
◦
정해진 한계 = 임계값(threshold, )
◦
가중치의 역할이 중요함. 가중치가 크다 → 해당 입력 신호가 중요함
2.2 단순한 논리 회로
2.2.1 AND 게이트
•
입력된 두 개의 신호가 모두 1일 때, 1의 신호 값을 출력
•
나머지 경우는 모두 0의 신호 값을 출력
•
퍼셉트론으로 AND 게이트 구현하기: 를 결정
x1 | x2 | y |
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
•
[Ex] 퍼셉트론으로 AND 게이트를 구현하기 위해 매개변수 값들의 예를 제시하라.
◦
즉,
◦
일 때, 이므로 을 출력
◦
일 때, 이므로 을 출력
◦
일 때, 이므로 을 출력
◦
일 때, 이므로 을 출력
2.2.2 NAND 게이트와 OR 게이트
•
NAND 게이트는 Not AND를 의미하며 AND 게이트의 출력과 정반대
•
[Ex] 퍼셉트론으로 NAND 게이트를 구현하기 위해 매개변수 값들의 예를 제시하라.
◦
x1 | x2 | y |
0 | 0 | 1 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
•
OR 게이트는 두 입력 신호 중 하나 이상 1일 때 1의 신호 값을 출력
•
[Ex] 퍼셉트론으로 OR 게이트를 구현하기 위해 매개변수 값들의 예를 제시하라.
◦
x1 | x2 | y |
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
•
학습과 기계학습의 정의
◦
학습(learning)이란 가중치(매개변수)를 적절하게 선택하는 작업
◦
퍼셉트론 기본 모델에서는 사람이 진리표(학습 데이터)를 보고 적절한 매개변수를 직접 선택
◦
그러나, 기계학습에서는 매개변수 선택을 컴퓨터가 자동으로 수행
◦
기계학습에서 사람은 퍼셉트론의 구조(모델)를 고민하고 컴퓨터에 학습할 데이터를 주는 역할을 수행
2.3 퍼셉트론 구현하기
•
: 가중치, 각 입력 신호가 결과에 주는 영향력(중요도)조절 매개변수
•
: 편향, 뉴런의 활성화(=1) 조건을 조정하는 매개변수
◦
를 편향 로 치환
◦
=-0.1일 때, 각 입력 신호에 가중치를 곱한 값들의 합이 0.1을 초과하면 뉴런 활성화
2.3.1 간단한 구현부터
•
입력 신호 x1, x2에 가중치를 곱한 후 합한 값이 를 넘으면 1, 넘지 않으면 0 출력
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
# 출력
AND(0, 0) # 0
AND(1, 0) # 0
AND(0, 1) # 0
AND(1, 1) # 1
Python
복사
2.3.2 가중치와 편향 도입
import numpy as np
x = np.array([0, 1]) # 입력
w = np.array([0.5, 0.5]) # 가중치
b = -0.7 # 편향
# 출력
w*x # [0. 0.5]
np.sum(w*x) # 0.5
np.sum(w*x)+b # -0.19999999999999996
Python
복사
2.3.3 가중치와 편향 구현하기
•
AND 게이트
◦
입력 신호 x1, x2에 가중치를 곱한 값과 편향을 합한 값이 를 넘으면 1, 넘지 않으면 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
Python
복사
•
NAND 게이트
def NAND(x1, x2):
x = np.array([x1, x2])
w = np.array([-0.5, -0.5]) # AND와는 가중치(w,b)만 다름
b = 0.7
tmp = np.sum(w*x) + b
if tmp <= 0:
return 0
else:
return 1
Python
복사
•
OR 게이트
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
Python
복사
2.4 퍼셉트론의 한계
2.4.1 도전! XOR 게이트
•
XOR 게이트
◦
배타적 논리합 논리 회로
▪
배타적 논리합 : 두 개의 명제 중 하나만 참일 때 결과값이 참인 논리 연산
x1 | x2 | y |
0 | 0 | 0 |
1 | 0 | 1 |
0 | 1 | 1 |
1 | 1 | 0 |
2.4.2 선형과 비선형
•
XOR 게이트를 퍼셉트론으로 구현 → 불가능
◦
선형으로 분리 가능한 AND, OR과 달리 XOR은 비선형으로만 분리 가능하기 때문
▪
선형 : 직선의 영역
▪
비선형 : 곡선의 영역
OR게이트 영역 구분(회색 영역=0) → 퍼셉트론 O
XOR게이트 영역 구분 → 퍼셉트론 X
“단층 퍼셉트론으로는 XOR 게이트를 표현할 수 없다” ⇒ 다층 퍼셉트론
2.5 다층 퍼셉트론이 출동한다면
•
다층 퍼셉트론 : 층이 여러 개인 퍼셉트론
•
가중치를 갖는 층을 하나의 층으로 봄(결과 는 층에 포함하지 않음)
2.5.1 기존 게이트 조합하기
•
AND, NAND, OR 게이트 기호
•
AND, NAND, OR 게이트 조합으로 표현한 XOR 게이트
◦
을 입력으로 받은 NAND, OR 게이트의 출력이 다시 AND의 입력이 됨
•
뉴런으로 표현한 XOR의 퍼셉트론
◦
첫 번째 층의 두 뉴런이 입력 신호를 받아 출력한 값을 두 번째 층으로 보내면, 두 번째 층은 받은 신호를 입력으로 받아 최종적으로 를 출력한다.
•
XOR 게이트 진리표
x1 | x2 | s1 | s2 | y |
0 | 0 | 1 | 0 | 0 |
1 | 0 | 1 | 1 | 1 |
0 | 1 | 1 | 1 | 1 |
1 | 1 | 0 | 1 | 0 |
2.5.2 XOR 게이트 구현하기
def XOR(x1, x2):
s1 = NAND(x1, x2)
s2 = OR(x1, x2)
y = AND(s1, s2)
return y
Python
복사
XOR(0, 0) # 0
XOR(1, 0) # 1
XOR(0, 1) # 1
XOR(1, 1) # 0
Python
복사
2.6 NAND에서 컴퓨터까지
•
NAND 조합만으로도 컴퓨터를 만들 수 있다
•
(The Elements of Computin Systems: Building a Modern Computer from First Principles(The MIT Press, 2005) → 실제 NAND로 테트리스가 작동하는 컴퓨터 제작
2.7. 정리
•
퍼셉트론은 입출력을 갖춘 알고리즘이다. 입력을 주면 정해진 규칙에 따른 값을 출력한다.
•
퍼셉트론에서는 ‘가중치’와 ‘편향’을 매개변수로 설정한다.
•
퍼셉트론으로 AND, OR 게이트 등의 논리 회로를 표현할 수 있다.
•
XOR 게이트는 단층 퍼셉트론으로는 표현할 수 없다.
•
2층 퍼셉트론을 이용하면 XOR 게이트를 표현할 수 있다.
•
단층 퍼셉트론은 직선형 영역만 표현할 수 있고, 다층 퍼셉트론은 비선형 영역도 표현할 수 있다.
•
다층 퍼셉트론은 (이론상) 컴퓨터를 표현할 수 있다.