리뷰에 앞서 이번에 공부할 책에 대해 소개를 하자면, 책의 이름은 '밑바닥부터 시작하는 딥러닝'이다. 총 3권으로 구성되어 있으며, 이번에 공부할 책은 밑시딥 1권이다. 밑시딥 1권에서는 딥러닝이 전반적으로 어떻게 학습되는지에 대해 서술하고 있으며 이후 convolution net에 대해 간략히 설명이 되어 있다. 밑시딥의 특징은 tensor flow, keras, pytorch와 같은 딥러닝 라이브러리나 모듈을 사용하지 않고 python numpy로 하드코딩하는 식으로 개념을 이해할 수 있도록 실습을 진행한다는 것이다. 이러한 점이 기초를 이해하기에 더욱 좋았다. 그렇다면 바로 본론으로 들어가보자!
- 퍼셉트론(perceptron)
퍼셉트론(Perceptron)은 인공 신경망(Aritificial Neural Network, ANN)의 구성 요소(unit)로서 다수의 값을 입력받아 하나의 값으로 출력하는 알고리즘이다. Perceptron은 perception과 neuron의 합성어이며 인공 뉴런이라고도 부른다. 즉, 퍼셉트론은 생물학적인 신경계(Neual Network)의 기본 단위인 신경세포(=뉴런)의 동작 과정을 통계학적으로 모델링한 알고리즘이다.
생물학적으로는 신경계의 수상돌기에서 인접한 다수의 뉴런 내 축삭돌기와 시냅스를 통해 신호를 입력받아 신경세포체에 저장한다. 해당 뉴런이 저장한 신호의 크기가 특정 값(=임계값) 이상이 될 때만 신호가 축삭돌기를 통해 외부로 전달되기 때문에, 출력신호를 제어할 수 있다. --> 입력과 출력이 있는데, 특정 값(임계값) 이상이 될 때 출력 신호를 낸다.
마찬가지로 컴퓨터관점에서도 입력을 받아 임계값을 기준으로 출력을 제어하는 알고리즘을 모방한다. 신호를 x, 출력을 y라고 하면
y = x * weight + bias로 표현할 수 있다. 다수의 입력갑 x에 대해서 weight와 bias에 따라 y가 결정되는 것이다. 이 출력 값이 입계값을 넘는지 안 넘는지를 가지고 출력을 제어하는 것이다.
W(weight)와 b(bias)의 역할
: 가중치는 전류에서 말하는 저항에 해당한다. 저항은 전류의 흐름을 억제하는 매개변수로, 저항이 낮을수록 큰 전류가 흐른다. 한편, 퍼셉트론의 가중치는 값이 클수록 큰 신호를 출력으로 흘려보낸다. 이처럼 전류와 퍼셉트론에서 가중치가 갖는 방향은 반대지만, 신호가 얼마나 크게(작게), 잘(어렵게) 흐르는 가를 통제하는 점에서 같은 기능을 한다.
그렇다면 2개의 신호를 받은 퍼셉트론은 어떻게 표현할까?
y = 0 (w1 * x1 + w2 * x2 ≤ 0)
or 1 (w1 * x1 + w2 * x2 > 0 )
그림으로 나타내면, 다음과 같다
-논리 회로와 퍼셉트론
개인적으로 처음 퍼셉트론의 개념을 듣고 이게 어떤 문제를 어떻게 해결하는데..?라고 궁금함이 들었다.
그래서 해당내용을 정리해 보았다.
단순한 논리 회로를 가지고 문제를 살펴보는 것이 이것을 이해하는데 큰 도움이 될 것 같다.
각 게이트(and gate, or gate, xor gate)의 진리표와 조건을 만족하는 임계값을 2차원으로 표현하면 다음과 같다.
각 게이트를 퍼셉트론으로 표현하기 위해서는 진리표대로 작동하는 w1, w2, 임계값을 정하는 것이다.
가령 AND gate에서 (w1, w2, 임계값) = (0.5, 0.5, 0.7)일 때, AND gate의 조건을 만족한다.
(w1 * l1 + w2 * l2 > 임계값 or w1 * l1 + w2 * l2 ≤ 임계값)
같은 흐름으로 OR gate도 매개변수를 어떻게 설정하는지 알면 해당 구조는 다 이해한 것이다.
즉, AND, OR gate(+ NAND gate) 모두 구조는 똑같고 매개변수(가중치와 임계값)만 다르다.
매개변수 값만 잘 조정하면 AND, OR gate를 만족하는 것이다!
하지만 XOR gate를 보면, 가중치 매개변수 두 쌍으로는 만족하는 조건을 만들 수 없다는 한계가 있다.
배타적 논리합 논리회로로 직선이 조건을 만족하기 위해서는 직선이 두 개가 필요하다.
이를 해결하기 위해서 직선이 아닌 비선형의 영역으로 영역을 표현하는 방법이 고안됐다.
퍼셉트론을 여러 층 쌓는다면 이러한 표현이 가능해지는 것이다.(다층 퍼셉트론의 등장)
- 다층 퍼셉트론으로 XOR gate 표현하기
다층 퍼셉트론으로 XOR gate를 표현할 수 있다고 했는데 이는 AND, NAND, OR gate를 조합하는 방식으로 이뤄진다.
하나의 퍼셉트론 층이 AND, NAND, OR gate를 표현한다고 했다. 각 gate를 조합하면 다음과 같다.
즉, XOR gate는 입력으로 받은 A, B가 OR gate와 NAND gate를 통과하면 그 결과를 AND gate로 통과시키면 된다.
실제로 XOR gate 진리표를 보고 판단하면 이해가 쉽다.
이를 코드로 구현해 보면 다음과 같다.
#x1, x2는 0과 1만 들어갈 수 있다.
# AND gate
def AND(x1, x2):
x = np.array([x1,x2])
w = np.array([0.5, 0.5]) #w, b의 값은 조합에 따라 달라질 수 있음!
b = -0.7
tmp = np.sum(x*w)+b
if tmp <= 0:
return 0
else:
return 1
# OR gate
def OR(x1, x2):
x = np.array([x1,x2])
w = np.array([0.5, 0.5]) #w, b의 값은 조합에 따라 달라질 수 있음!
b = -0.2
tmp = np.sum(x*w)+b
if tmp <= 0:
return 0
else:
return 1
# NAND gate
def NAND(x1, x2):
x = np.array([x1,x2])
w = np.array([-0.5, -0.5]) #w, b의 값은 조합에 따라 달라질 수 있음!
b = 0.7
tmp = np.sum(x*w)+b
if tmp <= 0:
return 0
else:
return 1
#XOR gate
def XOR(x1, x2):
s1 = NAND(x1, x2)
s2 = OR(x1, x2)
y = AND(s1,s2)
return y
이렇게 XOR gate를 파이썬 넘파이로 표현할 수 있다. 단층 퍼셉트론이 표현하지 못한 것을 더욱 깊은 층을 쌓음으로써 해결하는 것이다!
이론상 다층 퍼셉트론으로 컴퓨터 자체를 표현할 수 있다고 하니 복잡한 회로까지 구현할 수 있다는 점이 인상 깊다.
한 줄 정리. 딥러닝의 기반이 되는 퍼셉트론의 개념과, 논리 회로를 통한 다층 퍼셉트론->비선형적 표현이 가능해진다.
'Book Review > [밑바닥부터 시작하는 딥러닝 1] 리뷰' 카테고리의 다른 글
5장. 오차역전파법 (0) | 2023.11.09 |
---|---|
4장. 신경망 학습 (0) | 2023.10.04 |
3장. 신경망 (1) | 2023.10.04 |