퍼셉트론 알고리즘
- 신경망(딥러닝)의 기원이 되는 알고리즘
- 1957년 프랑크 로젠블라트 고안
- 퍼셉트론이란?
- 다수의 신호를 입력 받아 하나의 신호로 출력
- 당연히 컴퓨터에서는 0/1값으로 처리
로직 : 뉴런에서 보내온 신호의 총합이 정해진 한계를 넘는경우, 1을 출력
→ "뉴런을 활성화 한다" 라고 표현
→ 정해진 한계 -> "임계값" 이라고 표현 - 이런 조건에 따라서 신경망을 활성화 할지 말지를 정하는것이다.
- w1, w2 : 입력 신호가 결과에 주는 영향력(중요도)를 조절하는 매개변수
- θ : 얼마나 쉽게 활성화(결과 1)출력을 하느냐 조정하는 매개변수
- 수식으로 표현
θ 값(임계값) 보다 크면 1을 반환
θ 값(임계값) 보다 작으면 0을 반환
위에 식에서 θ 값만 편향시키면 같은 로직의 식이 구성된다.
- 단순한 논리 회로
- AND 게이트 : input이 모두 1일 때, 1의 값 출력
- 계산 방법
(w1, w2, θ)이 (0.5, 0.5, 0.7), (0.5, 0,5, 0.8), (1.0, 1.0, 1.0) 모두 조건을 통과합니다.
예를 들어서 계산을 해보면
(w1, w2, θ)의 값을 (0.5, 0.5, 0.7)이라고 가정하였을때 계산이다.
(0*0.5) + (0*0.5) = 0.0 < 0.7 → 0
(1*0.5) + (0*0.5) = 0.5 < 0.7 → 0
(0*0.5) + (1*0.5) = 0.5 < 0.7 → 0
(1*0.5) + (1*0.5) = 1.0 > 0.7 → 1
- 계산 방법
- AND 게이트 : input이 모두 1일 때, 1의 값 출력
-
- NAND게이트 : AND gate의 반대(Not AND)
- (w1, w2, θ)이 (-0.5, -0.5, -0.7) 이라면
(0*-0.5) + (0*-0.5) = 0.0 > -0.7 → 1
(1*-0.5) + (0*-0.5) = 0.5 > -0.7 → 1
(0*-0.5) + (1*-0.5) = 0.5 > -0.7 → 1
(1*-0.5) + (1*-0.5) = -1.0 > -0.7 → 0
- (w1, w2, θ)이 (-0.5, -0.5, -0.7) 이라면
- OR게이트 : input 중 하나라도 1이면 1의 값 출력
- NAND게이트 : AND gate의 반대(Not 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
- θ 을 편향 (왼쪽으로 이동시켜서) 넘파이 코드 작성해보기
# 해당 코드를 보면서, 왜 Numpy를 사용해야 하는지 알수 있다. import numpy as np x = np.array([0, 1]) # 입력값 w = np.array([0.5, 0.5]) # 가중치 b = -0.7 np.sum(x*w) + b # (입력과 가중치를 곱하고 가중치를 더해서 0보다 큰지 작은지 비교) # 결과 (-0.19999999999999996)
- AND, NAND, OR에 대해서 파이선 로직이 달라지지 않는다.
- 가중치(w1, w2)값과 θ 값만 달라지는 것이다.
- P.53
- 파이션 코드로 간단히 구성해보기
- 퍼셉트론의 한계
- XOR 게이트 : 배타적 논리합 ('베타적 의미' : 자기 외에는 거부한다는 말!!)
- x1, x2 중 한쪽이 1일때만 1을 출력함 (자기만 1일때 인정하고 2명다 1인것도 부정하는 베타!!적 논리)
- 위에서 구현한 로직으로는 커버가 되지 않음
- XOR를 처리 하기 위해서, 곡선으로 표현하는 비선형 영역이 나오게 되었습니다.
- 곡선 : 비선형 영역
- 직선 : 선형 영역
- XOR 게이트 : 배타적 논리합 ('베타적 의미' : 자기 외에는 거부한다는 말!!)
- 다중 퍼셉트론이 충돌한다면
- 퍼셉트론으로는 XOR을 표현할 수 없습니다.
- 퍼세트론의 층을 쌓아서, 다층 퍼셉트론을 구성할 수 있습니다.
위 그림과 같이 X1,X2에 값에 대해서
Step1) NAND 연산값을 구하고
Step2) OR 연산값을 구하고
Step3) step1, step2에서 구한값으로 AND연산을 수행한다.
- 나중에 읽어 볼만한 글
- https://sacko.tistory.com/10
- https://blog.naver.com/jevida/221849155477
- https://jiny-blog.tistory.com/3
'book' 카테고리의 다른 글
밑바닥부터 시작하는 딥러닝.2 (0) | 2021.10.06 |
---|---|
밑바닥부터 시작하는 딥러닝.1 (chap6 : 학습관련 기술들) (0) | 2021.09.13 |
밑바닥부터 시작하는 딥러닝.1 (chap5 : 오차역전파법) (0) | 2021.09.13 |
밑바닥부터 시작하는 딥러닝.1 (chap4 : 신경망 학습) (0) | 2021.09.13 |
밑바닥부터 시작하는 딥러닝.1 (intro) (0) | 2021.09.07 |