728x90
반응형
퍼셉트론은 다수의 신호를 입력 받아 하나의 신호를 출력합니다.
입력에 상수(가중치)를 곱해 전부 더한 값이 특정 값보다 크면 1, 아니면 0을 출력합니다.
여기서 특정 값은 임계값이라고 하며, theta로 나타냅니다.
위 내용을 아래로 나타내면 다음과 같습니다.
퍼셉트론은 입력 신호 각각에 고유한 가중치를 부여합니다. 가중치가 클수록 해당 신호가 그만큼 더 중요함을 나타냅니다.
그럼 퍼셉트론을 활용한 간단한 문제를 살펴보겠습니다.
위에서 퍼셉트론은 다수의 입력을 받아 하나의 신호를 출력한다고 했죠?
AND 게이트를 예로 들면 2개 이상의 입력을 받아 하나의 출력값을 결정해줍니다.
이를 위해 할 일은 진리표대로 작동하는 x1,x2,theta의 값을 정하는 것입니다.
다음과 같은 그림을 파이썬으로 구현해보겠습니다.
다음과 같이 2개의 입력을 넣으면 1개의 출력(0 혹은 1)이 나오네요!
OR, NAND 문제 또한 동일하게 생각할 수 있겠네요
import numpy as np
def activation(x):
if x>0:
return 1
else:
return 0
def AND(x):
return activation(2*x[0]+2*x[1]-3)
def OR(x):
return activation(2*x[0]+2*x[1]-1)
def NAND(x):
return activation(-2*x[0]-2*x[1]+3)
test1 = np.array([0,1])
test2 = np.array([1,1])
test3 = np.array([0,0])
test4 = np.array([1,0])
print('========== AND =========')
print(f'AND({0},{1}) = {AND(test1)}')
print(f'AND({1},{1}) = {AND(test2)}')
print(f'AND({0},{0}) = {AND(test3)}')
print(f'AND({1},{0}) = {AND(test4)}')
print('========== OR =========')
print(f'OR({0},{1}) = {OR(test1)}')
print(f'OR({1},{1}) = {OR(test2)}')
print(f'OR({0},{0}) = {OR(test3)}')
print(f'OR({1},{0}) = {OR(test4)}')
print('========== NAND =========')
print(f'NAND({0},{1}) = {NAND(test1)}')
print(f'NAND({1},{1}) = {NAND(test2)}')
print(f'NAND({0},{0}) = {NAND(test3)}')
print(f'NAND({1},{0}) = {NAND(test4)}')
하지만 퍼셉트론으로는 XOR문제를 해결할 수 없었습니다.
하지만 이후, 이 문제를 해결할 수 있던 방법은 하나의 퍼셉트론을 더 추가하여 다층퍼셉트론을 구현하는 것이였습니다.
def XOR(x):
a=[]
a.append(NAND(x))
a.append(OR(x))
return AND(a)
print('========== XOR =========')
print(f'XOR({0},{1}) = {XOR(test1)}')
print(f'XOR({1},{1}) = {XOR(test2)}')
print(f'XOR({0},{0}) = {XOR(test3)}')
print(f'XOR({1},{0}) = {XOR(test4)}')
다음과 같이 NAND와 OR퍼셉트론을 더하여 다수의 퍼셉트론을 만듦으로써 퍼셉트론의 한계를 이겨냈습니다.
오늘은 퍼셉트론에 대해서 알아보았습니다.
요약하자면,
- 퍼셉트론은 입력을 주면 규칙에 따른 값을 출력한다
- 퍼셉트론으로 AND,OR,NAND 문제를 표현할 수 있다
- 다층퍼셉트론을 이용하면 XOR문제를 해결할 수 있다
감사합니다!
728x90
반응형
'AI > AI' 카테고리의 다른 글
[AI] 전이학습 | Cifar10 | MobileNetV2 (0) | 2022.11.23 |
---|---|
[AI] MNIST 데이터 사용하여 신경망 배우기 (0) | 2022.11.07 |
[AI] K-Nearest Neighbors 직접 구현 (0) | 2022.10.19 |
[OpenCV] 이미지 마스킹 기초 (2) | 2022.10.12 |
[AI] OpenCV - 이미지 트리밍 / 변환 (3) | 2022.10.05 |