Home 밑시딥1 2강. 퍼셉트론
Post
Cancel

밑시딥1 2강. 퍼셉트론

이번 글에서는 본격적으로 밑바닥부터 시작하는 딥러닝1 책에 대한 리뷰를 시작합니다.
딥러닝의 가장 기초 개념이라고 할 수 있는 퍼셉트론이 무엇인지에 대해 학습합니다.
또한 AND, NAND, OR 게이트 등을 통해서 퍼셉트론의 구조와 동작 원리도 함께 배울 수 있습니다.


ChapterTitleMain Topics
1강헬로 파이썬파이썬 기초 문법 소개, numpy, matplotlib
2강퍼셉트론AND, NAND, OR 게이트
3강신경망활성화 함수, 다차원 배열 계산, 출력층 설계, MNIST
4강신경망 학습손실 함수, 경사 하강법
5강오차역전파법역전파, 활성화 함수 구현
6강학습 관련 기술들매개변수 갱신, 배치 정규화, 하이퍼파라미터 값 찾기
7강합성곱 신경망 (CNN)합성곱 계층, 풀링 계층, CNN 구현
8강딥러닝 (Deep learning)초기 역사, 딥러닝 활용
AppendixSoftmax with loss 계층의 계산 그래프-

Chapter 2. 퍼셉트론

2.1 퍼셉트론이란?

  • 신경망 (딥러닝)의 기원이 되는 알고리즘인 퍼셉트론
  • 퍼셉트론의 구조를 배우는 것은 신경망 및 딥러닝을 배우는데 기초가 될 것
  • 퍼셉트론은 다수의 신호 (흐름이 있는 것)를 입력으로 받아서 하나의 신호를 출력하는 것

  • 이 그림은 입력으로 2개의 신호를 받은 퍼셉트론의 예
  • 그림에서 원은 뉴런 혹은 노드라고 부름
  • 입력 신호가 뉴런에 보내질 때는 각각 고유한 가중치가 곱해짐
    • $x_1, x_2$는 입력 신호, $y$는 출력 신호, $w_1, w_2$는 가중치
  • 뉴런에서 보내온 신호의 총합이 정해진 한계를 넘어설 때만 1을 출력 (뉴런 활성화)
    • 한계값을 임계값이라고 하고, $\theta$로 표현
  • 퍼셉트론은 복수의 입력 신호 각각에 고유한 가중치 부여
  • 가중치는 각 신호가 결과에 주는 영향력을 조절하는 요소로 작용 (신호가 클수록 그만큼 중요하다는 것)

2.2 단순한 논리 회로

2.2.1 AND 게이트

  • AND 게이트는 입력이 둘이고, 출력은 하나
  • AND 게이트는 두 입력이 모두 1일 때만, 1을 출력하고 그 외에는 0을 출력

2.2.2 NAND 게이트와 OR 게이트

  • NAND 게이트는 Not AND를 의미하고, AND 게이트의 출력을 뒤집은 것
  • OR 게이트는 입력 신호 중 하나 이상이 1이면 출력이 1이 되는 것

2.3 퍼셉트론 구현하기

2.3.1 간단한 구현부터

1
2
3
4
5
6
7
8
def AND(x1, x2):
    w1, w2, theta = 0.5, 0.5, 0.7
    tmp = x1*w1 + x2*w2
    return 0 if tmp <= theta else 1

for xs in [(0, 0), (1, 0), (0, 1), (1, 1)]:
    y = AND(xs[0], xs[1])
    print(str(xs) + " -> " + str(y))
1
2
3
4
(0, 0) -> 0
(1, 0) -> 0
(0, 1) -> 0
(1, 1) -> 1

2.3.2 가중치와 편향 도입

  • 기존에 퍼셉트론 동작 원리의 식에서 $\theta$를 $-b$로 치환하면 다음의 식 확인 가능
  • 여기에서 $b$를 편향 (bias)이라 하고, $w_1, w_2$는 그대로 가중치
  • 퍼셉트론은 입력 신호에 가중치를 곱한 값과 편향을 더해서, 출력값을 결정

2.3.3 가중치와 편향 구하기

  • $w_1, w_2$ (가중치)는 각 입력 신호가 결과에 주는 영향력 (중요도)을 조절하는 매개변수
  • $b$ (편향)는 뉴런이 얼마나 쉽게 활성화 (결과를 1로 출력) 하느냐를 조정하는 매개변수
    • $b$가 -0.1이면, 각 입력 신호에 가중치를 곱한 값들의 합이 0.1을 초과하면 활성화
    • $b$가 -20.0이면, 각 입력 신호에 가중치를 곱한 값들이 20을 넘어야 활성화
    • 이처럼 편향의 값은 뉴런이 얼마나 쉽게 활성화 되는지 결정할 수 있음
1
2
3
4
5
6
7
8
9
10
11
12
13
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
    return 0 if tmp <= 0 else 1
    
for xs in [(0, 0), (1, 0), (0, 1), (1, 1)]:
    y = AND(xs[0], xs[1])
    print(str(xs) + " -> " + str(y))
1
2
3
4
(0, 0) -> 0
(1, 0) -> 0
(0, 1) -> 0
(1, 1) -> 1
1
2
3
4
5
6
7
8
9
10
11
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
    return 0 if tmp <= 0 else 1

for xs in [(0, 0), (1, 0), (0, 1), (1, 1)]:
    y = NAND(xs[0], xs[1])
    print(str(xs) + " -> " + str(y))
1
2
3
4
(0, 0) -> 1
(1, 0) -> 1
(0, 1) -> 1
(1, 1) -> 0
1
2
3
4
5
6
7
8
9
10
11
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
    return 0 if tmp <= 0 else 1

for xs in [(0, 0), (1, 0), (0, 1), (1, 1)]:
    y = OR(xs[0], xs[1])
    print(str(xs) + " -> " + str(y))
1
2
3
4
(0, 0) -> 0
(1, 0) -> 1
(0, 1) -> 1
(1, 1) -> 1
  • 기존에 퍼셉트론 동작 원리의 식에서 $\theta$를 $-b$로 치환하면 다음의 식 확인 가능
  • 여기에서 $b$를 편향 (bias)이라 하고, $w_1, w_2$는 그대로 가중치
  • 퍼셉트론은 입력 신호에 가중치를 곱한 값과 편향을 더해서, 출력값을 결정

2.4 퍼셉트론의 한계

2.4.1 도전! XOR 게이트

  • XOR 게이트는 배타적 논리합이라는 논리 회로
  • $x_1, x_2$ 중에서 하나가 1일 때만 1을 출력

2.4.2 선형과 비선형

  • 선형식 (직선)으로 XOR 게이트를 표현하는 것은 사실상 불가
  • 하지만 비선형 (곡선)으로는 다음과 같이 표현 가능
  • 즉, 퍼셉트론은 직선 하나로 나눈 영역만 표현할 수 있다는 한계가 있음

2.5 다층 퍼셉트론이 출동한다면

  • 단일 퍼셉트론으로는 XOR 게이트를 구현할 수 없었음
  • 하지만 층을 쌓아서 올리는 다층 퍼셉트론 (Multi-layer perceptron)으로는 구현 가능

2.5.1 기존 게이트 조합하기

2.5.2 XOR 게이트 구현하기

1
2
3
4
5
6
7
8
9
def XOR(x1, x2):
    s1 = OR(x1, x2)
    s2 = NAND(x1, x2)
    y = AND(s1, s2)
    return y

for xs in [(0, 0), (1, 0), (0, 1), (1, 1)]:
    y = XOR(xs[0], xs[1])
    print(str(xs) + " -> " + str(y))
1
2
3
4
(0, 0) -> 0
(1, 0) -> 1
(0, 1) -> 1
(1, 1) -> 0
  • XOR 게이트는 다음과 같은 다층 구조의 네트워크
  • 이처럼 층이 여러 개인 퍼셉트론을 다층 퍼셉트론이라고 함
    • 0층의 두 뉴런이 입력 신호를 받아서 1층의 뉴런으로 신호를 보냄
    • 1층의 뉴런이 2층의 뉴런으로 신호를 보내고, 2층의 뉴런은 y를 출력
  • 단층 퍼셉트론으로는 표현하지 못한 것을 층을 하나 더 늘려서 구현
  • 퍼셉트론은 층을 깊게 쌓아서 더 다양한 것들을 표현할 수 있음

2.6 NAND에서 컴퓨터까지

  • NAND 게이트의 조합만으로 컴퓨터가 수행하는 일을 재현할 수 있음

2.7 정리

  • 퍼셉트론은 입출력을 갖춘 알고리즘
  • 퍼셉트론은 입력을 주면, 정해진 규칙에 따른 값을 출력
  • 퍼셉트론은 가중치와 편향을 매개변수로 설정
  • 퍼셉트론으로 AND, OR 같은 논리회로 표현 가능
  • XOR 게이트는 단층 퍼셉트론 (직선)은 불가능하지만, 다층 퍼셉트론 (곡선)으로 구현 가능



출처: 밑바닥부터 시작하는 딥러닝1 책 리뷰 -> 강의 내용 정리 깃허브 링크

This post is licensed under CC BY 4.0 by the author.

프로그래머스 인공지능 데브코스 3주차 정리 및 후기

밑시딥1 3강. 신경망