퍼셉트론의 구성요소(입력노드, 가중치, 편향, 합, 활성화 함수, 출력노드)를 그림에서 짚을 수 있다
주어진 가중치로 퍼셉트론의 출력을 직접 계산할 수 있다
활성화 함수의 선택에 따라 퍼셉트론이 회귀와 분류를 모두 표현함을 안다
단일 퍼셉트론의 한계(XOR)를 설명할 수 있다
퍼셉트론 여러 개를 연결한 다층 퍼셉트론의 계산을 단계별로 할 수 있다
비선형 활성화 함수(Sigmoid, Tanh, ReLU)의 역할과 특성을 비교할 수 있다
인공신경망의 구조(입력층, 은닉층, 출력층)를 알고 가중치 개수를 셀 수 있다
퍼셉트론: 인공신경망의 기본단위
앞 장 끝에서 딥러닝을 다층 퍼셉트론(인공신경망) 구조를 쓰는 모형이라고 했다. 이 장에서는 그 구조를 가장 작은 단위부터 쌓아 올린다.
뇌의 신경처리 방식
사람의 뇌는 매우 많은 수의 뉴런이 서로 연결되어 있고, 인간의 생각과 행동은 뉴런 사이의 전기적 신호 처리로 이루어진다. 뉴런 하나는 여러 뉴런에서 신호를 받아 합치고, 그 결과를 다음 뉴런으로 내보낸다. 인공신경망은 이 “신호를 받아 합치고 내보내는” 처리를 수학으로 흉내 내려는 시도이고, 그 최소 단위가 퍼셉트론이다.
퍼셉트론 (Perceptron)
퍼셉트론 (Perceptron)
딥러닝을 구성하는 기본요소. 하는 일은 입력값을 출력값으로 변환하는 것이다.
아무리 복잡한 딥러닝 모델도 결국 퍼셉트론의 조합으로 이루어진다.
퍼셉트론은 다음 그림으로 나타낸다. 왼쪽에서 오른쪽으로 입력노드 → 가중치 → 합 → 활성화 함수 → 출력노드 순서로 데이터가 흐른다.
그림의 요소를 왼쪽부터 하나씩 정의한다.
노드
노드 (Node)
퍼셉트론의 입출력 단위. 그림의 동그라미(파란색 입력노드, 보라색 출력노드)가 노드이고, 퍼셉트론이 처리하는 데이터 값 하나를 뜻한다. 노드와 노드를 잇는 화살표를 아크(arc) 또는 연결이라 부른다.
입력노드
입력노드 (Input Node) \(x_1, x_2, \ldots, x_m\)
퍼셉트론에 입력되는 데이터. 데이터가 가진 특성(변수) 하나씩이 입력노드 하나에 대응된다. 변수가 \(m\)개면 입력노드도 \(m\)개다.
가중치
가중치 (Weight) \(w_1, w_2, \ldots, w_m\)
입력노드 하나당 곱해지는 계수. 입력노드에서 합으로 가는 아크 위에 적는다. 가중치가 클수록 그 입력노드가 출력에 미치는 영향이 크다.
편향
편향 (Bias)
데이터 특성에 의해 주어지는 입력노드 외에, 항상 1의 값을 갖는 기본 노드. 그림의 초록색 노드다. 이 노드에 곱해지는 가중치를 \(w_0\)로 쓴다. 입력값과 무관하게 합에 더해지는 기준값 역할을 한다.
합
합 (Sum) \(z\)
입력노드와 그에 해당하는 가중치를 곱해서 모두 더한 값. 편향 노드(값 1)에 \(w_0\)를 곱한 것도 함께 더한다.
합 \(z\)는 앞 절과 똑같고, 계단 함수가 그것을 0과 1로 바꿔 주었다. 같은 퍼셉트론이 활성화 함수 하나로 회귀도 되고 분류도 된다. 이것이 활성화 함수를 따로 두는 이유다.
연습을 더 하려면: 도장 2주차의 유형 A가 이 계산이다. 학번을 넣으면 본인만의 문제가 무한히 나온다.
단일 퍼셉트론의 한계
단일 퍼셉트론은 직선이다
계단 함수 퍼셉트론의 출력 패턴을 다시 보자. 입력 \((0,0), (1,0), (0,1), (1,1)\)에 대해 출력은 \((0, 1, 1, 1)\)이었다. “둘 중 하나라도 1이면 1”이라는 OR 게이트와 같다.
이것이 왜 가능했는지 보면 한계도 같이 보인다. 합 \(z = w_0 + w_1 x_1 + w_2 x_2\)는 선형회귀식과 똑같은 모양이고, 선형회귀식은 직선으로 패턴을 표현한다. 계단 함수는 \(z \ge 0\)이면 1, \(z < 0\)이면 0을 내므로, 출력이 갈리는 곳은 정확히 \(z = 0\)인 지점이다.
\((x_1, x_2)\) 평면 위의 직선 하나다. 직선 위쪽은 출력 1, 아래쪽은 출력 0이다. 이렇게 출력이 바뀌는 경계를 결정 경계(decision boundary)라 한다. OR 데이터는 \((0,0)\)만 0이고 나머지가 1이므로, \((0,0)\) 한 점을 직선으로 떼어낼 수 있어 퍼셉트론 하나로 풀렸다.
가중치 \(w_0, w_1, w_2\)를 바꾸면 직선의 위치와 기울기가 바뀐다. 아래 보드에서 확인해 보자.
인터랙티브 — 퍼셉트론의 가중치를 조절하며 결정 경계를 확인해 보세요
\(w_0\) (편향), \(w_1\), \(w_2\)를 조절하면 오른쪽 그림의 결정 경계(색이 바뀌는 선)와 네 점의 출력이 함께 바뀝니다. 계단 함수에서 출력 패턴이 OR, AND가 되는 가중치를 찾아보세요.
\(s_1\)은 \((0,1,1,1)\), \(s_2\)는 \((1,1,1,0)\)이다. \(s_2\)는 “둘 다 1일 때만 0”인 NAND 게이트다. XOR 정답 \((0,1,1,0)\)은 \(s_1\)과 \(s_2\)가 둘 다 1인 곳에서만 1이다.
퍼셉트론 하나를 더 얹기
\(s_1, s_2\)는 숫자이므로 다시 다른 퍼셉트론의 입력노드가 될 수 있다. \(s_1, s_2\)를 입력으로 받는 퍼셉트론 \(y\)를 하나 더 얹자. 가중치는 \(w_0 = -0.7,\ w_1 = 0.5,\ w_2 = 0.5\)(둘 다 1일 때만 1이 되는 AND 게이트)다.
네 경우 모두 정답과 일치한다. 퍼셉트론 하나로 불가능했던 XOR을 퍼셉트론 3개로 풀었다. 계산은 언제나 왼쪽 층부터: 입력노드에서 \(s_1, s_2\)를 먼저 구하고, 그 값을 다음 퍼셉트론에 넣는다.
결정 경계로 보면
무슨 일이 일어난 것인지 \((x_1, x_2)\) 평면에서 보자. 퍼셉트론 하나는 직선 하나를 긋는다고 했다. \(s_1\)은 \(z_1 = 0\)인 직선 \(x_1 + x_2 = 0.6\)을, \(s_2\)는 \(z_2 = 0\)인 직선 \(x_1 + x_2 = 1.4\)를 긋는다. 출력 퍼셉트론은 \(s_1 = 1\)이면서 \(s_2 = 1\)인 곳, 즉 두 직선 사이의 띠만 1로 골라낸다.
방금 한 일을 정리하자. 퍼셉트론 하나는 직선 하나였다. 퍼셉트론 \(s_1, s_2\)가 직선을 하나씩 긋고, 그 위에 얹은 퍼셉트론 \(y\)가 두 직선 사이의 띠만 골라냈다. 이렇게 퍼셉트론을 층을 거듭 쌓으면 직선으로는 안 되던 비선형적 표현이 가능해지고, 복잡한 패턴을 표현할 수 있다.
보편 근사 정리 (Universal Approximation Theorem)
충분한 수의 퍼셉트론과 비선형 활성화 함수를 가진 다층 퍼셉트론은 임의의 연속 함수를 원하는 정밀도로 근사할 수 있다. 이론상으로 컴퓨터가 수행하는 처리도 모두 표현 가능하다.
딥러닝은 이 다층 퍼셉트론을 활용하여 정보를 처리하는 장치다. 사진 분류, 음성 인식, 자연어 처리가 모두 이 위에서 이루어진다.
비선형 활성화 함수 (Activation Function)
왜 비선형이어야 하는가
앞 절에서 “비선형 활성화 함수”라는 조건이 붙었다. 왜 비선형이어야 하는지는 그 반대 경우를 따져 보면 분명해진다.
활성화 함수 가운데 가장 단순한 것은 회귀작업에서 쓴 항등 함수\(g(z) = z\)다. 항등 함수처럼 그래프가 직선인 함수를 선형 함수(linear function)라 하고, 그렇지 않은 함수를 비선형 함수(nonlinear function)라 한다.
이제 은닉노드 \(s_1, s_2\)와 출력노드 \(\hat{y}\)로 된 다층 퍼셉트론에서 활성화 함수를 전부 항등 함수로 두어 보자. 가중치는 어떤 값이든 좋다. 은닉노드는 합을 그대로 내보내므로
가 된다. 결과는 \(A + B x_1 + C x_2\), 즉 퍼셉트론 하나의 합과 똑같은 모양이다. 은닉노드를 몇 개 두든, 층을 몇 개 쌓든 이 정리는 되풀이되어 마지막에는 항상 같은 꼴로 돌아온다.
선형 함수만 쌓으면, 아무리 크고 깊은 신경망도 퍼셉트론 하나와 같다. 결정 경계는 여전히 직선 하나다.
비선형 함수를 쓰면 위의 대입과 정리가 되지 않는다. 예를 들어 \(s_1 = \sigma(a_1 + b_1 x_1 + c_1 x_2)\)는 \(x_1, x_2\)의 직선식으로 풀어쓸 수 없다. 은닉노드 하나하나가 입력 공간을 구부리고, 그 구부러진 결과를 다음 층이 다시 합치기 때문에, 층을 쌓을수록 직선으로는 만들 수 없는 경계가 생긴다. 앞 절에서 “층을 거듭 쌓으면 비선형적 표현이 가능하다”고 한 것은 활성화 함수가 비선형일 때만 성립하는 말이다.
활성화 함수의 조건
퍼셉트론의 활성화 함수는 보통 미분 가능한 비선형 함수를 사용한다.
비선형: 층을 쌓았을 때 비선형 패턴을 표현하기 위해 (위에서 확인)
미분 가능: 다음 장에서 배울 학습(경사하강법)이 기울기를 필요로 하기 때문. 계단 함수는 비선형이지만 기울기가 0 아니면 무한대여서 학습에 쓸 수 없다
활성화 함수의 종류
자주 사용되는 비선형 활성화 함수는 다음 세 가지다.
함수
수식
출력 범위
특징
Sigmoid
\(\sigma(z) = \dfrac{1}{1+e^{-z}}\)
\((-\infty, \infty) \to (0, 1)\)
출력을 확률로 읽을 수 있다. 분류의 출력노드에 쓴다
Hyperbolic Tangent
\(\tanh(z) = \dfrac{e^z - e^{-z}}{e^z + e^{-z}}\)
\((-\infty, \infty) \to (-1, 1)\)
0을 중심으로 대칭
ReLU
\(\max(0, z)\)
\((-\infty, \infty) \to [0, \infty)\)
계산이 단순하다. 현재 가장 많이 쓴다
코드
import numpy as npimport pandas as pdrows = []for z in [-4, -2, -0.5, 0, 0.5, 2, 4]: rows.append({'$z$': z,'Sigmoid': f'{1/(1+np.exp(-z)):.3f}','Tanh': f'{np.tanh(z):.3f}','ReLU': max(0, z), })pd.DataFrame(rows).to_html(index=False, border=0, escape=False)
표 5: 같은 z에 대한 활성화 함수별 출력
\(z\)
Sigmoid
Tanh
ReLU
-4.0
0.018
-0.999
0.0
-2.0
0.119
-0.964
0.0
-0.5
0.378
-0.462
0.0
0.0
0.500
0.000
0.0
0.5
0.622
0.462
0.5
2.0
0.881
0.964
2.0
4.0
0.982
0.999
4.0
인터랙티브 — 활성화 함수의 형태를 비교해 보세요
활성화 함수를 선택하면 \(g(z)\)의 그래프(붉은 실선)와 그 기울기 \(g'(z)\)(파란 점선)를 확인할 수 있습니다. Sigmoid는 \(z\)가 0에서 멀어지면 기울기가 0에 가까워지고, ReLU는 \(z > 0\)에서 기울기가 항상 1입니다. 이 차이가 왜 중요한지는 다음 장에서 학습을 배우며 드러납니다.
viewof actChoice = Inputs.radio(["sigmoid","tanh","relu"], {label:"활성화 함수",value:"sigmoid",format: k => k ==="sigmoid"?"Sigmoid σ(z)": k ==="tanh"?"Tanh":"ReLU"})