[개인공부] 딥러닝이란?

Jajuna_99·2022년 10월 16일
0

딥러닝이란?

딥러닝의 근간이 되는 이론은 프랭크 로젠블라트(Frank Rosenblatt)이 제안한 퍼셉트론(perceptron)(1957)이라는 선형 분류기에서 온다.

퍼셉트론은 뇌신경이 작동하는 방식에 영감을 받아 조합 논리 게이트로 구성된 단순한 알고리즘 모델이다. (어느 정도 영감을 받았지, 딥러닝의 메커니즘이 뇌의 구조와 같다는 근거는 없다.)

이 때 퍼셉트론은 ANDOR등의 게이트로 분류가 되나, XOR게이트는 데이터가 비선형적으로 분리되기 때문에 재데로 된 분류가 어렵다는 한계가 있다.

  • y=y = {0,(w1x1+x2x2)θ1,(w1x1+x2x2)>θ\begin{cases} 0, (w_1x_1 + x_2x_2) \le \theta\\ 1, (w_1x_1 + x_2x_2) \gt \theta \end{cases} , θ\theta = 활성화 임계값
'''
AND, NAND, OR 게이트 예시
'''
x = np.array([0, 1])  # 입력
w = np.array([0.5, 0.5])  # 가중치
b = -0.7  # 편향

def AND(x1, x2):
    x = np.array([x1, x2])
    w = np.array([0.5, 0.5])
    b = -0.7
    tmp = np.sum(w * x) + b
    if tmp <= 0:
        return 0
    else:
        return 1


def NAND(x1, x2):
    x = np.array([x1, x2])
    w = np.array([-0.5, -0.5])  # AND와는 가중치(w, b)만 다르다
    b = 0.7
    tmp = np.sum(w * x) + b
    if tmp <= 0:
        return 0
    else:
        return 1


def OR(x1, x2):
    x = np.array([x1, x2])
    w = np.array([0.5, 0.5])  # AND와는 가중치(w, b)만 다르다
    b = -0.2
    tmp = np.sum(w * x) + b
    if tmp <= 0:
        return 0
    else:
        return 1
        
print("AND")
print(AND(0, 0))  # 0
print(AND(0, 1))  # 0
print(AND(1, 0))  # 0
print(AND(1, 1))  # 1

print("NAND")
print(NAND(0, 0))  # 1
print(NAND(0, 1))  # 1
print(NAND(1, 0))  # 1
print(NAND(1, 1))  # 0

print("OR")
print(OR(0, 0))  # 0
print(OR(0, 1))  # 1
print(OR(1, 0))  # 1
print(OR(1, 1))  # 1

이를 극복하기위해 입력층출력층사이에 은닉층을 추가하여 비선형적으로 분류가 가능한 다층 퍼셉트론(multi-layer perceptron)을 제안했다.


#다층(비선형) 퍼셉트론 으로 XOR 게이트 구현하기
def XOR(x1, x2):
    s1 = NAND(x1, x2)
    s2 = OR(x1, x2)
    y = AND(s1, s2)
    return y


print("XOR")
print(XOR(0, 0))  # 0
print(XOR(0, 1))  # 1
print(XOR(1, 0))  # 1
print(XOR(1, 1))  # 0

이 다층 퍼셉트론의 은닉층이 여러개 두어, 층을 깊게 구성한 신경망을 심층 신경망 -> DNN(Deep Neural Network)라고 한다.

요약

딥러닝은 퍼셉트론이라는 모델이 근간이 되는 알고리즘이며, 비선형 분류 모델은 다층 퍼셉트론을 사용한다.

이 층을 많이, 깊게 사용하는 것이 딥러닝이다.

ref

profile
Learning bunch, mostly computer and language

0개의 댓글