!수정중
Neural network ? 인간이 사물을 구분하고 언어를 이해하는 것은 컴퓨터가 뛰어넘을 수 없다. 이런 한계를 뛰어넘기 위해 인간의 뇌를 모방해서 만든 것이 Neural network의 시초이다. 수많은 신경세포가 연결되어 뇌를 구성하는 것 처럼 Neural network는 다수의 node로 구성되어 입력 값을 받아 계산을 수행한다.
Perceptron ? 퍼셉트론은 초기 인공 신경망으로 기본적으로 여러개의 input과 하나의 output을 출력하는 알고리즘이다.
위의 그림에서 x는 input data를 의미하며, w는 가중치, y는 출력값이다. 각 입력값이 가중치와 곱해지고 이를 합산한 결과가 임계치(threshold)를 넘으면 출력신호 1을 출력하고, 그렇지 않을 경우에는 0을 출력한다.
이렇게 출력값을 0, 1로 변경시키는 함수를 활성화 함수(activation function)라고한다. 위의 예시처럼 0 또는 1의 값으로 출력하는 함수는 step function이라고 하며 이외에도 sigmoid, Relu, softmax 등 다양한 활성화 함수가 존재한다.
-단층 퍼셉트론(Single-Layer Perceptron)
위에서 설명한 것과 같이 단순히 데이터를 받고, 출력하는 구조로 이루어진 퍼셉트론은 단층 퍼셉트론이라고 한다. 즉 단층 퍼셉트론은 데이터를 입력받는 input layer와 결과를 출력하는 output layer 두개로 구성된다.
단층 퍼셉트론은 AND, NAND, OR 게이트를 구현할 수 있다.
AND 게이트는 두 입력 값이 모두 1일 때만 1을 출력하는 게이트이다.
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
print(XOR(1, 1)) #1
print(XOR(1, 0)) #0
print(XOR(0, 1)) #0
print(XOR(0, 0)) #0
NAND게이트는 반대로 두 입력 값이 모두 1일 때만 0을 출력하는 게이트이다.
def NAND(x1, x2):
w1, w2, theta = 0.5, 0.5, 0.7
tmp = x1*w1 + x2*w2
if tmp <= theta:
return 1
elif tmp > theta:
return 0
print(XOR(1, 1)) #0
print(XOR(1, 0)) #1
print(XOR(0, 1)) #1
print(XOR(0, 0)) #1
OR게이트는 두 입력값이 모두 0인 경우에만 출력 값이 0이고 나머지는 모두 1을 출력하는 게이트이다.
def OR(x1, x2):
w1, w2, theta = 0.5, 0.5, 0.3 ## only change here
tmp = x1*w1 + x2*w2
if tmp <= theta:
return 0
elif tmp > theta:
return 1
print(XOR(1, 1)) #1
print(XOR(1, 0)) #1
print(XOR(0, 1)) #1
print(XOR(0, 0)) #0
단층 퍼셉트론은 위와 같이 AND, NAND, OR 게이트를 구현할 수 있다. 단층 퍼셉트론은 구현할 수 없는 게이트가 있는데 그게 XOR 게이트이다. XOR게이트는 두 입력 값이 다른 값을 가지고 있을 때 1을 출력하고 입력값이 서로 같은 값을 가지면 0을 출력하는 게이트다.
def XOR(x1,x2):
y1 = NAND(x1, x2)
y2 = OR(x1, x2)
return AND(y1, y2)
print(XOR(1, 1)) #0
print(XOR(1, 0)) #1
print(XOR(0, 1)) #1
print(XOR(0, 0)) #0
AND, NAND, OR 게이트는 모두 직선으로 데이터를 나눌 수 있지만, XOR게이트는 하나의 직선으로 나누는 것이 불가능하다. 더욱 복잡한 문제를 해결하기 위해서는 XOR 게이트를 해결할 수 있어야하는데, 위의 코드와 같이 AND, NAND, OR 게이트를 조합하면 XOR 게이트를 구현할 수 있다.
- 다층 퍼셉트론(Multi-Layer Perceptron)
여러 단층 퍼셉트론을 조합한 것 즉 다수의 레이어가 있는 모델을 다층 퍼셉트론이라고 한다. 다층 퍼셉트론은 input 레이어와 out 레이어 뿐만 아니라 가운데에 다수의 hidden 레이어(은닉층)가 추가된다. 다층 퍼셉트론은 MLP라고도 불린다. 은닉층이 2개 이상인 모델은 심층 신경망(딥러닝)이라고 한다. 다층 퍼셉트론은 보다 복잡한 문제를 해결하기 위해 은닉층을 추가할 수 있다. 하지만 은닉층이 너무 많아지면 오버피팅 문제가 발생하기 때문에 주의해야한다.
reference
socome.github.io/%EC%9D%B4%EB%A1%A0/2019/01/23/Chapter-8.html
'AI > Deeplearning' 카테고리의 다른 글
YOLOv5 (0) | 2021.04.21 |
---|---|
Convolutional Neural Networks (0) | 2021.04.19 |
GPT, BERT (0) | 2021.04.15 |
Attention, Transformer (0) | 2021.04.15 |
rnn / lstm / gru (0) | 2021.04.15 |