jsung0228 / 2023-Q1-DL-Book-Review

0 stars 0 forks source link

Ch.02 #1

Open jsung0228 opened 1 year ago

jsung0228 commented 1 year ago

Ch.2 퍼셉트론

딥러닝의 가장 기초에 해당하는 알고리즘


2.1 퍼셉트론

다수의 신호, 하나의 출력값 퍼셉트론 신호는 1과 0의 두 가지 값을 가진다.

image


2.2 단순 논리 회로

image

2.2.1 AND 게이트

AND 게이트


2.2.2 NAND 게이트

NAND게이트


2.2.2 OR 게이트

※ Perceptron의 구조는 AND, NAND, OR 게이트 모두 같으나, Weight와 Critical Value만 다르다.


2.3 퍼셉트론 구현

2.3.1 간단한 구현부터

# AND 논리 Gate
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(AND(0,0))  # 0을 출력
print(AND(1,0))  # 0을 출력
print(AND(0,1))  # 0을 출력
print(AND(1,1))  # 1을 출력

2.3.2 가중치와 편향

'''python

AND 논리게이트

import numpy as np

x = np.array([0, 1]) w = np.array([0.5, 0.5]) b = -0.7

print(wx) print(np.sum(wx)) print(np.sum(w*x)+b)

### 2.3.3 가중치와 편향 구현하기

import numpy as np

#AND 논리게이트
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

#NAND 논리게이트    
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

#OR 논리게이트    
def OR(x1, x2):
    x = np.array([x1, x2])
    w = np.array([0.5, 0.5])
    b = -0.2
    tmp = np.sum(w*x) + b
    if tmp <= 0:
        return 0
    else:
        return 1

2.4 퍼셉트론의 문제점

2.4.1 XOR 게이트

OR 게이트와 NAND 게이트를 시각화 하면 아래와 같이 직선으로 나뉜 두 영역으로 표현이 가능하지만 XOR 게이트는 하나의 직석으로는 표현이 불가능하다.

사실 위의 표현이 잘 이해가 가지는 않는다.


2.5 다층 퍼셉트론

1-layer 퍼셉트론으로는 XOR 게이트를 표현할 수 없지만, 하지만 이를 쌓아서 '다층 퍼셉트론(multi-layer perceptron)'으로 구성할 수 있다.

2.5.1 기존 게이트 조합

기존에 알고있는 AND, NAND, OR 게이트를 조합하면 아래와 같이 XOR 게이트처럼 작동하는 구조를 만들 수 있다.

#XOR 논리게이트
from ch02_src_code_03 import AND, NAND, OR

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

※ 퍼셉트론 + 비선형인 시그모이드 함수를 활성화 함수로 이용하면 임의의 함수를 표현 가능

위의 멘트도 이해가 안간다.


hyunjunekim commented 1 year ago

@jsung0228 2.4.1 을 제 생각대로 표현해봤습니다. 마지막 AND 연산은 집합의 교 집합과 같습니다. 아래 X, O 두 데이터를 일차 함수로 분류가 불가능 합니다. 1층 퍼셉트론은 x1w1+x2w2+b 이기에 일차 함수이며 그렇기에 뉴런을 여러 층을 쌓아서 비선형 문제(XOR문제)를 풀어야 합니다.

20230309_202333

hyunjunekim commented 1 year ago

퍼셉트론 + 비선형인 시그모이드 함수를 활성화 함수로 이용하면 임의의 함수를 표현 가능

3장에 가면 활성함수 내용이 나옵니다. 저게 있는 이유는 생물의 뉴런과 같은 작용을 하기 위해서 입니다. 뉴런 세포 마지막 출력으로 중요하면 화학적 물질을 많이 분비하고 중요하지 않은 내용은 적을 양의 물질을 분비하는데 그걸 수학적으로 도와주는 역할을 해주는게 활성화 함수 입니다.

사실 논리게이트의 활성화 함수는 사실 tmp <= 0 작으면 0을 크면 1을 전달하는 부분일 것 같습니다.

그리고 뉴런넷을 모델링 할 때 활성화 함수는 비선형 함수(휘어진) 여야 합니가.

hyunjunekim commented 1 year ago

AND 합집합 -> 교집합