[머신러닝] #2 퍼셉트론 |
"Deep Learning from Scratch” 책을 보고 제가 필요한 내용만 정리한 내용입니다.
자세한 내용은 책을 구매해서 보세요~
-
퍼셉트론(perceptron) 은 프랑크 로젠블라트라는 사람이 1957년에 고안한 알고리즘이다.
고대 화석 같은 녀석인데 퍼셉트론이 신경망(딥러닝)의 기원이 되는 알고리즘이다.
그래서 알아두어야 한다.
2.1. 퍼셉트론이란?
-
퍼셉트론은 다수의 신호를 입력으로 받아 하나의 신호를 출력한다.
여기서 신호란 전류나 강물처럼 흐름이 있는 것을 상상하면 좋다.
실제 전류와 달리 퍼셉트론 신호는 0, 1 값만 갖는다.
-
x1, x2 는 입력 신호
y 는 출력 신호
w1, w2 는 가중치를 말한다. (w 는 weight 의 머릿글자)
그림의 원을 뉴런 혹은 노드라고 부른다.
입력 신호가 뉴런에 보내질 때 각각 고유한 가중치가 곱해진다. ( w1x1, w2x2)
뉴런에서 보내온 신호의 총합이 정해진 한계, 임계값 Θ(theta, 세타) 를 넘어서면 1을 출력하고 그렇지 않으면 0을 출력한다.
1을 출력할 때 “뉴런이 활성화한다” 라고 표현하기도 한다.
-
퍼셉트론의 동작 원리는 아래와 같다.
y = 0 if (w1x1 + w2x2 <= Θ )
= 1 if (w1x1 + w2x2 > Θ)
-
퍼셉트론은 복수의 입력 신호 각각에 고유한 가중치를 부여한다.
가중치는 각 신호가 결과에 주는 영향력을 조절하는 요소로 작동한다.
가중치가 클수록 해당 신호가 그만큼 더 중요함을 뜻한다.
-
가중치는 전류에서 말하는 저항에 해당된다.
저항은 전류의 흐름을 억제하는 매개변수로 저항이 낮을수록 큰 전류가 흐른다.
한편 퍼셉트론의 가중치는 그 값이 클수록 강한 신호를 흘려보낸다.
이처럼 서로 작용하는 방향은 반대지만 신호가 얼마나 잘(혹은 어렵게) 흐르는가를 통제한다는 점에서 저항과 가중치는 같은 기능을 한다.
2.2. 단순한 논리 회로
2.2.1. AND 게이트
-
AND 게이트는 입력이 둘이고 출력은 하나.
입력 신호와 출력 신호의 대응 표를 진리표라고 한다.
-
AND 게이트 진리표를 퍼셉트론으로 표현하는 경우에는 이를 만족시키는 조합이 무한히 많다.
(w1, w2, Θ) 가 (0.5, 0.5, 0.7)일 때, (0.5, 0.5, 0.8), (1.0, 1.0, 1.0) 때 모두 AND 게이트의 조건을 만족한다.
2.2.2. NAND 게이트와 OR 게이트
-
NAND 는 Not AND 를 의미하며, 그 동작은 AND 게이트의 출력을 뒤집은 것
NAND 는 AND 게이트의 매개변수 부호를 모두 반전하면 된다.
-
위의 방식은 퍼셉트론의 매개변수 값을 정하는 것은 컴퓨터가 아니라 인간이다.
인간이 직접 진리표라는 학습 데이터를 보면서 매개변수의 값을 생각한다.
기계학습 문제는 이 매개변수의 값을 정하는 작업을 컴퓨터가 자동으로 하도록 한다.
“학습”이란 적절한 매개변수 값을 정하는 작업이며, 사람은 퍼셉트론의 구조(모델)을 고민하고 컴퓨터에 학습할 데이터를 주는 일을 한다.
-
AND, NAND, OR 논리 회로에서 중요한 것은 퍼셉트론의 구조는 세개의 게이트에서 모두 같다는 것.
세 가지 게이트에서 다른 것은 매개변수(가중치와 임계값)의 값 뿐이다.
2.3. 퍼셉트론 구현하기
2.3.1. 간단한 구현부터
-
AND 게이트를 구현해보자
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
2.3.2. 가중치와 편향 도입
-
Θ 를 -b 로 치환하면 퍼셉트론의 동작이 아래와 같이 변경된다.
y = 0 if b + w1x1 + w2x2 <= 0
= 1 if b + w1x1 + w2x2 > 0
여기서 b 를 편향(bias)라고 한다.
이를 해석하면.. 퍼셉트론은 입력신호에 가중치를 곱한 값과 편향을 합하여, 그 값이 0을 넘으면 1, 그렇지 않으면 0을 출력한다.
2.3.3. 가중치와 편향 구현하기
-
w1, w2 는 각 입력 신호가 결과에 주는 영향력(중요도)를 조절하는 매개변수이고,
편향은 뉴런이 얼마나 쉽게 활성화(결과로 1을 출력)하느냐를 조정하는 매개변수이다.
예를 들어 b 가 -0.1 이면, 각 입력 신호에 가중치를 곱한 값들의 합이 0.1을 초과할 때만 뉴런이 활성화한다.
반면 b가 -20.0 이면 각 입력 신호에 가중치를 곱한 값들의 합이 20.0을 넘지 않으면 뉴런은 활성화하지 않는다.
이처럼 편향은 뉴런이 얼마나 쉽게 활성화되는지를 결정한다.
-
편향이라는 용어는 한쪽으로 치우쳐 균형을 깬다라는 의미를 담고 있다.
실제로 두 입력이 모두 0이어도 결과로 0이 아닌 편향 값을 출력한다.
2.4. 퍼셉트론의 한계
2.4.1. 도전! XOR 게이트
-
XOR 게이트는 베타적 논리합으로, x1, x2 중 한쪽이 1일 때만 1을 출력한다.
XOR 게이트는 현재까지 본 퍼셉트론으로 구현할 수 없다.
-
AND, OR, NAND 는 직선으로 input 값에 대한 구분선을 그릴 수 있었다.
그러나 XOR 은 직선으로 input 값에 대한 구분선을 그릴 수 없다. ( 그래프는 책 참고 )
직선인 이유는 지금까지 배운 퍼셉트론이 직선에 대한 식이기 때문.
2.4.2. 선형과 비선형
-
직선으로는 XOR 를 표현할 수 없다.
(단층)퍼셉트론은 직선 하나로 나눈 영역만 표현할 수 있다는 한계가 있다.
곡선으로 표현한 영역을 비선형 영역이라 부르고, 직선의 영역을 선형 영역이라 부른다.
단층 퍼셉트론은 single-layer perceptron 이라 부른다.
단층 퍼셉트론으로는 비선형 영역을 분리할 수 없다.
2.5. 다층 퍼셉트론이 출동한다면
-
퍼셉트론의 아름다움(?) 은 ‘층을 쌓아’ 다층 퍼셉트론(multi-layer perceptron)을 만들 수 있다는 데 있다.
2.5.1. 기존 게이트 조합하기
-
XOR 은 OR, NAND, AND GATE 의 조합으로 만들 수 있다.
x1 ->
NAND ->
x2 ->
AND -> y
x1 ->
OR ->
x2 ->
2.5.2. XOR 게이트 구현하기
-
이 책에서는multilayer perceptron 에서 왼쪽부터 0층, 1층, 2층.. 라고 부른다.
-
단층 퍼셉트론으로는 표현하지 못한 것을 층을 하나 늘려 구현 할 수 있었다.
퍼셉트론은 층을 쌓아(깊게 하여) 더 다양한 것을 표현할 수 있다.
2.6. NAND 에서 컴퓨터까지
-
NAND 게이트의 조합만으로 컴퓨터를 만들 수 있다.
즉 퍼셉트론으로 컴퓨터를 표현할 수 있다.
이론상 2층 퍼셉트론이면 컴퓨터를 만들 수 있다. ( 실제로는 어렵다. )
-
비선형인 시그모이드 함수를 활성화 함수로 이용하면 임의의 함수를 표현할 수 있다는 사실이 증명되었다.
2.7. 정리
-
퍼셉트론은 입출력을 갖춘 알고리즘이다. 입력을 주면 정해진 규칙에 따른 값을 출력한다.
퍼셉트론에서는 “가중치”와 “편향”을 매개변수로 설정한다.
퍼셉트론으로 AND, OR 게이트 등의 논리 회로를 표현할 수 있다.
XOR 게이트는 단층 퍼셉트론으로는 표현할 수 없다.
2층 퍼셉트론을 이용하면 XOR 게이트를 표현할 수 있다.
단층 퍼셉트론은 직선형 영역만 표현할 수 있고, 다층 퍼셉트론은 비선형 영역도 표현할 수 있다.
다층 퍼셉트론은 (이론상) 컴퓨터를 표현할 수 있다.
'프로그래밍 놀이터 > 머신러닝, AI, 딥러닝' 카테고리의 다른 글
[머신러닝] #4 신경망 학습 #2 (0) | 2018.07.06 |
---|---|
[머신러닝] #4 신경망 학습 #1 (0) | 2018.07.05 |
[머신러닝] #3 신경망 #2 (0) | 2018.07.04 |
[머신러닝] #3 신경망 #1 (0) | 2018.07.03 |
[머신러닝] #1 헬로 파이썬 (0) | 2018.07.01 |
댓글