인공지능 신경망 - 1

김찬울·2021년 9월 2일
0

첫 신경망이 만들어 졌을때는 기대와 많이 달라 신경망처럼 만든다고 인간을 흉내낼 수 없다고 생각하여 실망감과 더불어 암흑기가 왔던 때가 있었음.

알렉스 넷이 나타나기 전에는 비슷한 수준에서 고만고만 하였으나 (그럼에도 혁신이긴 했다.)

알렉스 넷이 나타났을 때 인공지능 시장은 열망했다. 그만큼 혁신적인 알고리즘이다.

퍼셉트론

다수의 신호를 입력받아 하나의 신호로 출력

뉴런 또는 노드로 불리는 입력신호들이 뇌의 신경망 형태로 이루어진 것.

입력 영상에 가중치를 곱해서(중요한 것, 즉 예측에서 영향력이 큰 것이 가중치가 더 크다.) 결과를 예측해낸다.

논리회로

and, nor, not, or 게이트를 통해서 출력하는 간단한 방식도 있다.

논리회로 게이트 예.

w를 가중치라 두고

x1 x2 로 y를 나타낼때

w1 x1 + w2 x2 > c(세타) 와
w1 x1 + w2 x2 <= c(세타)
의 식으로 true or false = 1 or 0이 나타난다.
이를 통해 나온 값을 통해 and, not 등의 논리 연산을 할 수 있다.

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

이렇게 나타낼 수도 있고

def AND_theta(x1, x2): #위와 같은 식
    w1, w2, theta = 0.5, 0.5, 0.7
    tmp = x1 * w1 + x2 * w2 - theta
    if tmp <= 0:
        return 0
    elif tmp > 0:
        return 1

세타값을 미리 빼주고 0과 비교할 수도 있다.

여기서 w1, w2는 가중치라 부르고

theta는 편향(bias)라고 부른다.

import numpy as np
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

이런식으로 numpy를 이용해서 형태가 같은 여러 값들에 대해서 간단히 np.sum으로 계산할 수도 있다.

퍼셉트론의 한계

xor 게이트에서 원과 삼각형을 나누는 직선을 만드는 것이 불가능 0,0 과 1,1이 정답이고 1,0 과 0, 1이 정답이 아닐때 하나의 직선으로 나눌 수 없다.

선형이거나 2개 이상의 직선으로 나눠야 한다.
직선이 여러개라는 것은 가중치가 여러개라는 말이다.

단층 퍼셉트론이 아닌

다층 퍼셉트론 인 것이다.

XOR연산

단층 퍼셉트론의 한계였던 XOR연산에서 다층 퍼셉트론을 이용해서 비선형의 문제를 풀 수 있다..

XOR연산에서는

NAND연산과 or연산을 and를 통해 XOR연산을 구현할 수 있다.

def OR(x1, x2):
    x = np.array([x1, x2])
    w = np.array([0.5, 0.5])
    b = -0.3
    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])
    b = 0.7
    tmp = np.sum(w * x) + b
    if tmp <= 0:
        return 0
    else:
        return 1

def XOR(x1, x2):
    s1 = NAND(x1, x2)
    s2 = OR(x1, x2)
    y = AND(s1, s2)
    return y

해당 코드를 통해 XOR을 구현할 수 있다. 3가지의 연산게이트(단층 퍼셉트론)를 이용해 만든다. = 다층 퍼셉트론

profile
코린코린이

0개의 댓글