안녕하세요~
오늘은 신경망의 기본! 퍼셉트론에 대해 알아보겠습니다~
퍼셉트론이란? 다수의 신호를 입력받아 하나의 신호를 출력하는 알고리즘입니다.
1943년 미국 신경외과 의사인 워렌 멕컬록에 의해서 발단이되었고
1957년 프랑크 로젠 블라트가 퍼셉트론 알고리즘을 고안했습니다.
사람의 뇌의 동작을 전기 스위치의 on / off 로 흉내낼 수 있다는 이론을 증명하였습니다.
간단히 말하면, 인간의 신경 세포 하나를 흉내낸 것으로
기본 가정은 아래와 같습니다.
1. 자극(simulus) 2. 역치(threshold) 3. 반응(response)
" 특정 자극이 있다면 그 자극이 어느 역치(theta: 임계값) 이상이어야지만 세포가 반응한다. "
입력신호의 연결강도가 가중치(Weight)인데,
입력신호가 뉴런에 보내질 때는 각각의 고유한 가중치가 곱해집니다.
퍼셉트론은 n 개의 이진수가 하나의 뉴런을 통과해서
가중치의 합이 0보다 크면 활성화되는 가장 간단한 신경망입니다.
문제1. 위의 식을 파이썬 Numpy 패키지로 구현하시오.
가정: theta = 0 ; x1 = 0; x2 = 1; w1 = 0.5; w2 = 0.5
퍼셉트론으로 단순한 논리 회로 4가지를 구현해보도록 하겠습니다.
1. AND 게이트
def AND(x1, x2): x = np.array([x1,x2]) w = np.array([0.5,0.5]) theta = 0.7 if np.sum(w*x) <= theta: return 0 else: return 1
inputData = np.array([[0,0],[1,0],[0,1],[1,1]])
for x in inputData: print(x[0],", ",x[1]," ==> ",AND(x[0],x[1]), sep = '')
2. OR 게이트
def OR(x1,x2): x = np.array([x1,x2]) w = np.array([?,?]) # 채워넣으세요~ theta = ? # 채워넣으세요~ if np.sum(w*x) <= theta: return 0 else: return 1
inputData = np.array([[0,0],[1,0],[0,1],[1,1]]) for x in inputData: print(x[0],", ",x[1]," ==> ",OR(x[0],x[1]), sep = '')
3. NAND 게이트
def NAND(x1,x2): x = np.array([x1,x2]) w = np.array([?,?]) # 채워넣으세요~ theta = ? # 채워넣으세요~ if np.sum(w*x) <= theta: return 0 else: return 1
inputData = np.array([[0,0],[1,0],[0,1],[1,1]]) for x in inputData: print(x[0],", ",x[1]," ==> ",NAND(x[0],x[1]), sep = '')
4. XOR 게이트
XOR 게이트를 퍼셉트론으로 해결해보세요!
결과는 다음 포스팅에서!
오늘은 여기까지~
다음 포스팅은
활성함수로 돌아오겠습니다!
'PYTHON으로 딥러닝하기' 카테고리의 다른 글
Python으로 딥러닝하기 | 퍼셉트론 vs 신경망? & 출력함수(항등함수, Softmax 함수) (0) | 2018.08.21 |
---|---|
파이썬으로 딥러닝하기 | XOR & 신경망 활성화 함수(계단, 시그모이드, ReLU 함수) (0) | 2018.08.17 |
딥러닝에 필요한 파이썬 기본 문법 | numpy & matplotlib (0) | 2018.08.16 |
Gradient Descent(경사하강법) 와 SGD( Stochastic Gradient Descent) 확률적 경사하강법 (0) | 2018.08.01 |
파이썬으로 웹크롤하기 | requests & BeautifulSoup with (NaverAPI & encoding) (2) | 2018.07.18 |