1. 퍼셉트론
- 다수의 신호를 입력 받아 하나의 신호를 출력하는 체계를 의미
- 퍼셉트론 신호는 흐름을 만들고 정보를 앞으로 전달해줌
- 퍼셉트론의 OutPut은 1/0 두가지 논리값을 가짐(1: 전류흐름 / 0: 전류 흐름X)
- 다음은 퍼셉트론의 구조를 의미
변수 설명 -------------------------------------------------------------------------------------------------
x1,x2 : input
w1,w2 : 가중치(weight)
y : Output
-----------------------------------------------------------------------------------------------------------

- 해당 그림의 원은 뉴런 또는 노드라고 부름
- 뉴런에서 전달 받은 신호의 총합이 임계값을 넘기면 y 에서 1을 출력하고 아니면 0을 출력
- 이를 수식으로 나타내면 다음과 같음.

- 수식을 보면 x1,x2에 가중치가 곱해지면서 x1,x2의 영향력을 조절해줄 수 있음
- 즉, 가중치(weight)가 클수록 해당 input이 상대적으로 중요함을 의미
2. 단순한 논리회로
- 이러한 퍼셉트론으로 간단한 논리회로를 구현해보자.
2.1. AND 게이트
- AND게이트의 진리표는 다음과 같다.

- 입력값 두개가 전부 True일때만 True
- 한개라도 False면 False를 리턴해준다, 이를 boolean에서 integer로 변환한 진리표를 봐보자.

- 이를 나타내는 퍼셉트론을 구현해보자.
- (w1,w2,theta) = (0.5,0.5,0.7) 이라고 두면 이를 만족한다.

- 이를 파이썬을 이용하여 간단히 구현해보자.
- Input
def AND(x1,x2):
w1,w2,theta = 0.5,0.5,0.7
y = x1*w1 + x2*w2
if y > theta:
return 1
else:
return 0
-Output
print(AND(0,0))
print(AND(1,0))
print(AND(0,1))
print(AND(1,1))
----------------------------------------
0
0
0
1
2.2. OR 게이트
- OR 게이트의 진리표를 보면 다음과 같다.

- x1,x2중 하나만 True여도 True가 반환되고,
- 둘다 False라면 False가 반환된다.
- (w1,w2,theta) = (0.5,0.5,0.2)로 두면 퍼셉트론을 간단히 구현 가능하다.

- 이를 파이썬 코드로 나타내보자.(기존의 AND게이트를 나타낸 코드에서 가중치와 임계값만 변경해주면 된다.)
#INPUT
def OR(x1,x2):
w1,w2,theta = 0.5,0.5,0.2
y = x1*w1 + x2*w2
if y > theta:
return 1
else:
return 0
print(OR(0,0))
print(OR(1,0))
print(OR(0,1))
print(OR(1,1))
--------------------------------------------------------
#OUTPUT
0
1
1
1
2.3. NAND게이트
- NAND게이트의 진리표는 다음과 같다.

- AND게이트의 정확히 반대라고 생각하면 편하다.
- (w1,w2,theta) = (-0.5,-0.5,-0.7)로 잡으면 쉽게 구현이 가능하다.

- 이를 파이썬으로 한번 구현해보자.
#INPUT
def NAND(x1,x2):
w1,w2,theta = -0.5,-0.5,-0.7
y = x1*w1 + x2*w2
if y > theta:
return 1
else:
return 0
print(NAND(0,0))
print(NAND(1,0))
print(NAND(0,1))
print(NAND(1,1))
------------------------------------------
#OUTPUT
1
1
1
0
3. 단층 퍼셉트론의 한계
- 우리는 지금까지 단층 퍼셉트론 즉, 한개의 퍼셉트론으로 AND, NAND,OR게이트들을 구현하였다.
- 이번엔 XOR 게이트를 한번 바라보자.
3.1. XOR 게이트
- XOR게이트는 베타적 논리합을 의미하는데, 진리표는 다음과 같다.

- 입력값이 둘다 다르면 True를 반환, 둘다 같으면 False를 반환해준다.
- 이를 단층 퍼셉트론으로 나타내보자 하면 불가능하다.
- 우선 퍼셉트론은 직선으로 하나로 나눈 영역 즉, 선형 영역만 구분 가능하다.
- 이 사실을 인지한 채, XOR게이트를 나타낸 다음 그림을 보자.

- 절대 하나의 직선으로 구분할 수 없다는 것을 알 수 있다.
3.2. 다층 퍼셉트론
- 하지만 XOR게이트를 단층 퍼셉트론 여러개
- 즉, 다층 퍼셉트론으로 구현이 가능하다.
- 우리가 단층 퍼셉트론으로 구현했던 AND, OR, NAND게이트를 이용하여 나타내면 다음과 같다.


- 이를 바탕으로 XOR 게이트를 파이썬 코드로 나타내보자.
#INPUT
def XOR(x1,x2):
z1 = OR(x1,x2)
z2 = NAND(x1,x2)
return AND(z1,z2)
print(XOR(1,1))
print(XOR(1,0))
print(XOR(0,1))
print(XOR(0,0))
-----------------------------------------------
#OUTPUT
0
1
1
0
'DS Study > 밑바닥부터 시작하는 딥러닝 1' 카테고리의 다른 글
[밑시딥1] [5] 손실함수(Loss Function) (0) | 2024.07.29 |
---|---|
[밑시딥1] [4] MNIST (0) | 2024.07.29 |
[밑시딥1] [3] 인공신경망(ANN) (1) | 2024.07.26 |
[밑시딥1] [2] 활성화함수 (Activation Function) (0) | 2024.07.26 |
1. 퍼셉트론
- 다수의 신호를 입력 받아 하나의 신호를 출력하는 체계를 의미
- 퍼셉트론 신호는 흐름을 만들고 정보를 앞으로 전달해줌
- 퍼셉트론의 OutPut은 1/0 두가지 논리값을 가짐(1: 전류흐름 / 0: 전류 흐름X)
- 다음은 퍼셉트론의 구조를 의미
변수 설명 -------------------------------------------------------------------------------------------------
x1,x2 : input
w1,w2 : 가중치(weight)
y : Output
-----------------------------------------------------------------------------------------------------------

- 해당 그림의 원은 뉴런 또는 노드라고 부름
- 뉴런에서 전달 받은 신호의 총합이 임계값을 넘기면 y 에서 1을 출력하고 아니면 0을 출력
- 이를 수식으로 나타내면 다음과 같음.

- 수식을 보면 x1,x2에 가중치가 곱해지면서 x1,x2의 영향력을 조절해줄 수 있음
- 즉, 가중치(weight)가 클수록 해당 input이 상대적으로 중요함을 의미
2. 단순한 논리회로
- 이러한 퍼셉트론으로 간단한 논리회로를 구현해보자.
2.1. AND 게이트
- AND게이트의 진리표는 다음과 같다.

- 입력값 두개가 전부 True일때만 True
- 한개라도 False면 False를 리턴해준다, 이를 boolean에서 integer로 변환한 진리표를 봐보자.

- 이를 나타내는 퍼셉트론을 구현해보자.
- (w1,w2,theta) = (0.5,0.5,0.7) 이라고 두면 이를 만족한다.

- 이를 파이썬을 이용하여 간단히 구현해보자.
- Input
def AND(x1,x2):
w1,w2,theta = 0.5,0.5,0.7
y = x1*w1 + x2*w2
if y > theta:
return 1
else:
return 0
-Output
print(AND(0,0))
print(AND(1,0))
print(AND(0,1))
print(AND(1,1))
----------------------------------------
0
0
0
1
2.2. OR 게이트
- OR 게이트의 진리표를 보면 다음과 같다.

- x1,x2중 하나만 True여도 True가 반환되고,
- 둘다 False라면 False가 반환된다.
- (w1,w2,theta) = (0.5,0.5,0.2)로 두면 퍼셉트론을 간단히 구현 가능하다.

- 이를 파이썬 코드로 나타내보자.(기존의 AND게이트를 나타낸 코드에서 가중치와 임계값만 변경해주면 된다.)
#INPUT
def OR(x1,x2):
w1,w2,theta = 0.5,0.5,0.2
y = x1*w1 + x2*w2
if y > theta:
return 1
else:
return 0
print(OR(0,0))
print(OR(1,0))
print(OR(0,1))
print(OR(1,1))
--------------------------------------------------------
#OUTPUT
0
1
1
1
2.3. NAND게이트
- NAND게이트의 진리표는 다음과 같다.

- AND게이트의 정확히 반대라고 생각하면 편하다.
- (w1,w2,theta) = (-0.5,-0.5,-0.7)로 잡으면 쉽게 구현이 가능하다.

- 이를 파이썬으로 한번 구현해보자.
#INPUT
def NAND(x1,x2):
w1,w2,theta = -0.5,-0.5,-0.7
y = x1*w1 + x2*w2
if y > theta:
return 1
else:
return 0
print(NAND(0,0))
print(NAND(1,0))
print(NAND(0,1))
print(NAND(1,1))
------------------------------------------
#OUTPUT
1
1
1
0
3. 단층 퍼셉트론의 한계
- 우리는 지금까지 단층 퍼셉트론 즉, 한개의 퍼셉트론으로 AND, NAND,OR게이트들을 구현하였다.
- 이번엔 XOR 게이트를 한번 바라보자.
3.1. XOR 게이트
- XOR게이트는 베타적 논리합을 의미하는데, 진리표는 다음과 같다.

- 입력값이 둘다 다르면 True를 반환, 둘다 같으면 False를 반환해준다.
- 이를 단층 퍼셉트론으로 나타내보자 하면 불가능하다.
- 우선 퍼셉트론은 직선으로 하나로 나눈 영역 즉, 선형 영역만 구분 가능하다.
- 이 사실을 인지한 채, XOR게이트를 나타낸 다음 그림을 보자.

- 절대 하나의 직선으로 구분할 수 없다는 것을 알 수 있다.
3.2. 다층 퍼셉트론
- 하지만 XOR게이트를 단층 퍼셉트론 여러개
- 즉, 다층 퍼셉트론으로 구현이 가능하다.
- 우리가 단층 퍼셉트론으로 구현했던 AND, OR, NAND게이트를 이용하여 나타내면 다음과 같다.


- 이를 바탕으로 XOR 게이트를 파이썬 코드로 나타내보자.
#INPUT
def XOR(x1,x2):
z1 = OR(x1,x2)
z2 = NAND(x1,x2)
return AND(z1,z2)
print(XOR(1,1))
print(XOR(1,0))
print(XOR(0,1))
print(XOR(0,0))
-----------------------------------------------
#OUTPUT
0
1
1
0
'DS Study > 밑바닥부터 시작하는 딥러닝 1' 카테고리의 다른 글
[밑시딥1] [5] 손실함수(Loss Function) (0) | 2024.07.29 |
---|---|
[밑시딥1] [4] MNIST (0) | 2024.07.29 |
[밑시딥1] [3] 인공신경망(ANN) (1) | 2024.07.26 |
[밑시딥1] [2] 활성화함수 (Activation Function) (0) | 2024.07.26 |