신경망으로 가기 전에, 신경망을 이루는 가장 작은 부품 하나를 손으로 만들어 본다. 퍼셉트론은 1957년 프랑크 로젠블라트가 고안한, 여러 신호를 받아 하나의 신호를 내보내는 아주 단순한 알고리즘이다. 단순하지만 이 부품 안에는 앞으로 이 책 전체를 관통할 두 가지가 이미 들어 있다 — 가중치편향이라는 조절 손잡이, 그리고 그 손잡이를 어떻게 정할 것인가라는 질문이다.

이 장에서 우리는 그 손잡이를 손으로 돌린다. AND·NAND·OR를 만들려면 가중치를 얼마로 줘야 하는지 사람이 직접 계산해서 넣는다. 그리고 XOR 앞에서 이 방식이 벽에 부딪히는 것을 본다. 그 벽을 넘는 방법 — 층을 쌓는 것 — 이 다층 퍼셉트론이고, 손으로 정하던 손잡이를 데이터가 스스로 정하게 만드는 것이 4장 이후의 “학습”이다. 이 장은 그 두 계단의 첫 번째 디딤돌이다. 1장에서 벼려 둔 넘파이 배열 감각 — 원소별 곱과 합 — 이 이 장에서 처음으로 “판단하는 장치”로 조립된다.

퍼셉트론이라는 부품

퍼셉트론은 입력 신호 몇 개를 받아 하나의 출력을 낸다. 입력이 두 개인 경우를 그림으로 그리면, 원(뉴런, 노드) 두 개가 왼쪽에 있고 화살표를 따라 오른쪽 원 하나로 신호가 흘러 들어간다. 각 화살표에는 고유한 가중치 가 붙어 있다. 뉴런은 흘러 들어온 신호에 각자의 가중치를 곱해 모두 더하고, 그 합이 정해진 한계(임계값 )를 넘으면 1을 출력한다. “뉴런이 활성화한다”고도 말한다.

수식으로 적으면 이렇다.

여기 등장하는 두 종류의 값을 구분해 두는 것이 이 장의 첫걸음이다. 는 매번 바뀌는 입력이고, 는 한 번 정해 두면 고정되는 매개변수다. 퍼셉트론을 “설계한다”는 것은 곧 이 매개변수를 정하는 일이다.

가중치는 각 신호가 결과에 주는 영향력의 크기다. 가중치가 클수록 그 신호가 세게 반영된다. 저항기의 저항값이 전류의 흐름을 억제하듯, 가중치는 클수록 대응하는 신호의 중요도가 커진다 — 방향이 반대일 뿐 “흐름을 조절하는 값”이라는 점에서 닮았다. 여기서 핵심은, 이 구조가 AND든 NAND든 OR든 다 똑같다는 것이다. 뉴런의 배선도 계산 규칙도 완전히 같고, 오직 라는 세 숫자만 다르다. 같은 하드웨어에 다른 설정값을 꽂아 다른 논리 게이트를 만드는 셈이다.

판단 기준: 여러 논리 게이트를 구현할 때 구조를 매번 새로 짜지 말고, 구조는 하나로 고정하고 파라미터만 바꿀 수 있는지 먼저 물어라 — 퍼셉트론이 정확히 그런 부품이다. 함정: 가중치와 임계값을 “정답이 있는 값”으로 오해하기 쉽다. AND를 만드는 조합은 무수히 많다. 하나의 정답이 아니라 조건을 만족하는 영역이 있을 뿐이다.

손으로 AND를 만들어 보기

진리표를 먼저 적는다. AND는 두 입력이 모두 1일 때만 1을 낸다.

000
100
010
111

이 표를 만족하는 를 손으로 찾아본다. 을 넣어 네 줄을 하나씩 검산해 보자.

  • : 가중합 → 출력 0 ✓
  • : → 출력 0 ✓
  • : → 출력 0 ✓
  • : → 출력 1 ✓

진리표와 정확히 맞는다. 이나 도 똑같이 동작한다 — 임계값이 “두 개 다 켜졌을 때의 합(1.0)“과 “하나만 켜졌을 때의 합(0.5)” 사이에만 있으면 되기 때문이다. 정답이 영역이라는 말이 이런 뜻이다.

NAND는 AND의 정반대다(모두 1일 때만 0). 놀랍게도 AND의 부호를 통째로 뒤집기만 하면 된다 — . 가중합의 부등호가 그대로 뒤집히니 출력도 뒤집힌다. OR는 어느 하나라도 1이면 1을 내는 게이트로, 하나만 켜져도 넘도록 처럼 임계값을 낮추면 된다. 셋 다 같은 계산, 다른 숫자다.

판단 기준: 게이트를 손으로 설계할 때는 진리표의 각 줄이 부등식 한 줄이 된다고 보고, 그 부등식들을 동시에 만족하는 파라미터 영역을 좁혀 가라. 함정: 한 줄만 맞춰 놓고 만족하는 것 — 네 줄을 전부 검산하지 않으면 나머지에서 어긋난다. 게이트 설계는 진리표 전체를 동시에 만족시키는 연립부등식 풀이다.

편향 — 임계값을 이항하다

이제 첫 리팩터링을 한다. 위 수식에서 를 좌변으로 옮겨 편향(bias) 라 부른다. 로 두면 수식이 이렇게 바뀐다.

기호만 바꿨을 뿐 하는 일은 똑같다. 그런데 이 사소한 이항에는 중요한 관점 전환이 있다. 이제 판정 기준은 언제나 0으로 고정되고, 편향 가 “뉴런이 얼마나 쉽게 활성화되는가”를 조절한다. 이면 가중합이 0.1만 넘어도 발화하지만, 이면 20을 넘어야 겨우 발화한다. 편향은 발화의 문턱을 정하는 값이다 — 값이 클수록(0에 가깝거나 양수일수록) 뉴런이 쉽게 켜지고, 음수로 깊이 내려갈수록 켜지기 어려워진다.

가중치 와 편향 는 역할이 다르다. 는 각 입력 신호의 중요도를 조절하는 매개변수이고, 는 입력과 무관하게 뉴런이 발화하는 정도를 조절하는 매개변수다. 입력 가 둘 다 0이어도 는 살아남아 판정에 참여한다 — 그래서 편향은 “입력이 없어도 있는 항”이다. 이 구분은 앞으로 계속 유효하다. 신경망에서도 각 층은 가중치 행렬 와 편향 벡터 를 따로 가지고, 1장에서 본 브로드캐스트로 편향이 모든 샘플에 얹힌다.

판단 기준: 임계값 방식과 편향 방식은 완전히 같은 퍼셉트론이다. 편향 방식을 택하는 이유는 판정 기준을 0으로 통일해 이후 넘파이 행렬 연산과 학습으로 매끄럽게 잇기 위해서다. 함정: 편향을 가중치와 뭉뚱그려 “그냥 상수항”으로만 보면, 초기화나 정규화에서 와 다르게 다뤄야 하는 순간(6장)을 놓친다. 편향은 입력이 없어도 살아 있는 항이라 성격이 다르다.

숫자로 따라가기 — AND 가중합을 손으로 검산한다

편향 방식으로 갈아탔으니, 이번에는 임계값이 아니라 가 0을 넘느냐로 판정한다. 앞에서 쓴 것과 같은 숫자 을 넣고 네 입력을 하나도 빠짐없이 종이에 그대로 적어 보자. 가중합을 계산하고, 거기에 편향을 더한 값을 보고, 그 값이 0을 넘는지로 출력을 정한다.

가중합 ?출력
000.00.00.0아니오0
100.50.00.5아니오0
010.00.50.5아니오0
110.50.51.01

맨 오른쪽 열이 AND 진리표와 한 칸도 어긋나지 않는다. 여기서 눈여겨볼 것은 여섯 번째 열( 값)의 부호다. 세 줄은 음수()라 0을 못 넘어 죽고, 한 줄만 양수()라 살아 발화한다. 편향 이 하는 일이 이 표에 그대로 보인다 — 가중합에서 0.7을 깎아 내려, “둘 다 켜져 합이 1.0이 된” 경우에만 겨우 0 위로 올라오게 만든다. 문턱을 0.7만큼 높여 둔 셈이다.

편향을 조금만 바꾸면 게이트가 통째로 바뀌는 것도 숫자로 확인된다. 에서 로 올리면(문턱을 낮추면) 값이 으로 양수가 되어 살아난다 — 하나만 켜져도 발화하니 이건 OR다. 반대로 가중치와 편향의 부호를 통째로 뒤집어 로 두면, 이라 발화(출력 1)하고 이라 죽어(출력 0), 표가 통째로 뒤집힌 NAND가 된다. 같은 표를 세 번 다시 그려 보면, “구조는 하나, 숫자만 다름”이라는 말이 손끝에서 확인된다.

판단 기준: 게이트가 의심스러우면 이 일곱 칸짜리 표를 네 줄 다 채워 검산하라 — 머릿속 암산이 아니라 종이에 값의 부호를 적는 순간 어긋난 줄이 바로 드러난다. 함정: 가중합만 보고 편향을 빠뜨리는 것. 판정하는 값은 가중합이 아니라 가중합에 편향을 더한 뒤의 값이고, 부등호의 기준은 가 아니라 언제나 0이다. 다섯 번째 열이 아니라 여섯 번째 열로 판정해야 한다.

가중치와 편향을 그림으로 — 손잡이가 직선을 어떻게 움직이나

가 “손잡이”라고 여러 번 말했으니, 그 손잡이를 돌리면 무엇이 움직이는지 좌표평면에서 보자. 뒤에 나올 XOR 그림을 이해하는 준비운동이다. (기울기·절편·좌표평면이라는 말이 낯설면 먼저 수학부록1을 한 번 훑고 오면, 아래 이야기가 훨씬 수월하다.) 판정 경계는 가중합이 정확히 0이 되는 자리 이고, 이를 에 대해 풀면 직선의 표준형이 나온다.

이 한 식에 세 손잡이가 각자의 자리를 갖는다. 가중치의 비 가 직선의 기울기를 정하고(어느 입력을 더 중히 보느냐가 경계의 방향을 튼다), 편향 가 절편을 정한다(문턱을 올리고 내리는 것이 곧 직선을 평행 이동시키는 것이다). 그래서 “는 중요도, 는 발화 난이도”라는 앞의 말은 기하로 옮기면 “는 경계선의 기울기, 는 경계선의 위치”가 된다. 같은 이야기를 대수로 하면 매개변수, 기하로 하면 직선이다.

이렇게 보면 단층 퍼셉트론 하나가 가진 자유가 정확히 얼마인지가 눈에 들어온다. 우리가 조절할 수 있는 것은 직선 하나의 기울기와 위치뿐이다. 평면 위에 직선을 어디에 어떻게 긋느냐 — 그 이상도 이하도 아니다. AND·NAND·OR가 전부 이 자유 안에 들어오는 문제였고(직선 하나로 갈렸고), XOR만 이 자유를 벗어난다(직선 하나로 안 갈린다). 뒤에서 “층을 쌓는다”가 하는 일은, 이렇게 직선 하나밖에 못 긋는 장치를 여러 개 이어 붙여 결과적으로 굽은 경계를 만드는 것이다.

판단 기준: 어떤 파라미터가 결과를 어떻게 바꾸는지 헷갈리면, 대수식을 직선의 표준형으로 정리해 기울기·절편에 무엇이 대응하는지 보라 — 매개변수의 역할이 기하로 번역되어 직관이 선다. 함정: 처럼 특수한 값을 잊는 것. 가 0이면 위 나눗셈이 성립하지 않고 경계가 수직선 이 된다 — 표준형에 기대다 보면 이런 세로 경계를 놓친다. 직선 전체가 표현 대상이지, 꼴만이 아니다.

넘파이로 옮기고 일반형으로

편향 도입까지 마쳤으면 넘파이로 옮긴다. 입력과 가중치를 배열로 묶으면 곱셈과 합을 np.sum(w * x) 한 줄로 벡터화할 수 있고, 게이트 세 개가 거의 같은 형태로 정리된다. 여기서 w * x는 1장에서 강조한 원소별 곱임을 놓치지 말자 — 두 (2,) 배열의 자리마다 곱이고, np.sum으로 눌러야 스칼라 가중합이 된다. 이 한 줄이 3장에서 여러 뉴런으로 갈라지며 np.dot 행렬 곱으로 자란다.

아래 스텝 플레이어가 이 장의 코드 전부다 — AND를 손으로 하드코딩하는 데서 출발해, 편향을 도입하고, 넘파이 일반형으로 정리한 뒤, 마지막에 이 부품을 층으로 쌓아 XOR까지 나아간다. 각 스텝의 shape 주석을 따라가면 스칼라 계산이 배열 계산으로 옮겨 가는 과정이 보인다.

Refactoring Step AND를 임계값으로 하드코딩
1/5
def AND(x1, x2):    w1, w2, theta = 0.5, 0.5, 0.7    tmp = w1 * x1 + w2 * x2       # 스칼라 가중합    if tmp <= theta:        return 0    else:        return 1# AND(0,0)=0, AND(1,0)=0, AND(0,1)=0, AND(1,1)=1# 가중치도 임계값도 사람이 눈으로 찾아 박아 넣은 숫자다. 아직 배열은 없다.

판단 기준: 게이트마다 별도 함수 구조를 짜지 말고, 넘파이 일반형 하나에 만 갈아 끼워라 — 세 게이트가 같은 부품임이 코드로 드러난다. 함정: w * x를 행렬곱 np.dot으로 착각하기 쉽다. 여기서는 1차원 배열의 원소별 곱이고, np.sum으로 합쳐야 스칼라가 된다. 정사각처럼 shape가 우연히 맞으면 둘이 다른 값을 조용히 내놓으니(1장의 침묵 버그), 이 구분은 3장에서 입력이 여러 뉴런으로 갈라질 때 결정적으로 중요해진다.

XOR — 직선 하나로는 가를 수 없다

XOR(배타적 논리합)는 두 입력이 서로 다를 때만 1을 낸다.

000
101
011
110

이걸 만족하는 를 손으로 찾으려 하면, 아무리 애써도 찾을 수 없다. 우연이 아니라 원리적으로 불가능하다. 왜 그런지는 수식만 노려봐서는 답답하고, 좌표평면에 점을 찍어 그림으로 봐야 또렷해진다.

퍼셉트론 하나의 판정식 - 평면 위의 직선 하나다. 이 직선의 한쪽은 출력 1(가중합이 양수인 영역), 반대쪽은 출력 0(음수인 영역)이다. 즉 단층 퍼셉트론이 할 수 있는 일은 “평면을 직선 하나로 두 조각 내고, 한쪽은 1 다른 쪽은 0으로 판정”하는 것 딱 그것뿐이다.

이제 XOR의 네 점을 평면에 찍어 본다. 정사각형의 네 꼭짓점 에 각각 진리표의 출력을 적어 넣는다.

 x2
  1 |  ●(0,1)=1        ○(1,1)=0
    |
    |
  0 |  ○(0,0)=0        ●(1,0)=1
    +--------------------------- x1
        0                1

   ● = 출력 1,  ○ = 출력 0

출력이 0인 점(○)은 — 왼쪽 아래와 오른쪽 위, 한 대각선의 양 끝이다. 출력이 1인 점(●)은 — 오른쪽 아래와 왼쪽 위, 나머지 대각선의 양 끝이다. 두 부류가 대각선으로 엇갈려(교차해) 놓여 있다. 이 네 점을 직선 하나로 ○끼리 한쪽, ●끼리 다른 쪽으로 가르려 해 보라. 직선을 어디로 기울여 긋든, 한쪽 영역에는 반드시 ○과 ●이 섞여 든다. 손으로 몇 번 그어 보면 금방 포기하게 된다 — 대각선으로 엇갈린 네 점은 직선 하나로 갈리지 않는다.

반면 OR를 같은 방식으로 그려 보면 만 0이고 나머지 셋은 1이라, 한 점만 왼쪽 아래 구석에서 떼어 내는 직선을 얼마든지 그을 수 있다. AND도(오른쪽 위 한 점만 떼면 된다), NAND도 마찬가지로 직선 하나로 갈린다. 이렇게 직선 하나로 두 부류를 나눌 수 있는 문제를 선형 분리 가능(linearly separable)하다고 하고, XOR처럼 그럴 수 없는 문제를 선형 분리 불가라고 한다. 단층 퍼셉트론의 한계가 곧 선형 분리 가능성의 한계다.

만약 직선이라는 제약을 풀어 곡선을 그을 수 있다면 XOR의 두 부류도 가를 수 있다. 예컨대 두 ● 점을 감싸는 굽은 경계선이면 된다. 곡선으로 나뉘는 영역을 비선형 영역이라 부른다. 하지만 퍼셉트론 하나는 곡선을 만들 수 없다 — 판정식이 1차식이라 반드시 직선이다. 곡선을 얻으려면 무언가를 더해야 하고, 그 무언가가 바로 층이다.

판단 기준: 어떤 분류 문제를 단층으로 풀 수 있을지 판단하려면, 정답이 1인 점과 0인 점을 좌표에 찍고 직선 하나로 갈리는지 눈으로 확인하라. 갈리면 단층으로 충분하고, 엇갈려 있으면 층을 쌓아야 한다. 함정: XOR가 안 되니 “퍼셉트론은 쓸모없다”고 결론짓는 것 — 실제로 1969년 민스키와 페퍼트의 이 지적이 신경망 연구의 첫 겨울을 불렀다. 하지만 막힌 건 단층뿐이고, 층을 쌓으면 뚫린다는 것이 이 장의 반전이다.

숫자로 따라가기 — XOR가 안 되는 것을 부등식으로 못박기

“직선으로 못 가른다”를 그림 없이 숫자만으로도 확인할 수 있다. 이게 더 확실하다 — 그림은 “내가 못 그은 것”일 수도 있지만, 부등식은 “누구도 못 그음”을 증명한다. XOR를 푸는 단층 퍼셉트론 만약 있다고 가정하고, 진리표의 네 줄을 각각 부등식으로 옮겨 적어 보자. 편향 방식이므로 출력 1은 가중합에 편향을 더한 값이 양수, 출력 0은 0 이하다.

입력필요한 출력조건식
0
1
1
0

네 줄이 넷 다 동시에 성립해야 XOR가 된다. 그런데 가운데 두 줄을 그냥 더해 보면 모순이 튀어나온다. 줄과 줄을 양변끼리 더하면

여기서 첫 줄 조건 을 쓰면 이므로, 위 식의 좌변에서 로 줄이면 값은 더 커지거나 같다 — 즉 . 정리하면

그런데 이건 네 번째 줄 이 요구하는 과 정면으로 부딪힌다. 같은 값 가 0보다 크면서 동시에 0 이하일 수는 없다. 가정이 무너졌다 — XOR를 푸는 존재하지 않는다. 그림에서 “직선을 어디로 그어도 섞인다”고 손으로 포기했던 그 사실이, 여기서는 세 줄을 더하고 빼는 것만으로 반박 불가능하게 못 박힌다.

같은 계산을 구체적인 숫자로도 느껴 보자. 하나만 켜진 두 점 을 양쪽 다 발화시키려면 편향을 꽤 넉넉히(0에 가깝게) 잡아야 한다. 예컨대 OR처럼 를 넣으면 , 으로 잘 켜진다. 그런데 그 순간 이 되어 같이 켜져 버린다 — XOR가 꺼야 할 점이 켜진다. 을 끄려고 편향을 아래로 깊이 내리면, 이번엔 으로 같이 꺼진다. 편향이라는 손잡이 하나로는 “하나 켜진 둘은 켜고, 둘 켜진 하나는 끄기”를 동시에 못 한다. 세 점의 가중합이 으로 단조롭게 커지는데, XOR가 원하는 출력은 으로 중간에서 꺾이기 때문이다. 문턱(직선) 하나로는 이 꺾임을 만들 수 없다.

판단 기준: 어떤 게이트가 단층으로 되는지 원리적으로 확정하고 싶으면, 진리표 네 줄을 부등식으로 적고 서로 더해 모순이 나오는지 보라 — 모순이 나오면 파라미터를 아무리 튜닝해도 불가능하다는 증명이다. 함정: 몇 번 직선을 그어 보고 “내가 못 찾은 것뿐일지도”라며 미련을 두는 것. XOR는 시도가 부족한 게 아니라 해가 없는 문제다. 부등식의 모순이 그 종지부다.

왜 하필 직선인가 — 판정식의 대수

직선이라는 한계가 어디서 오는지 대수로 못박아 두자. OR를 예로 편향 방식 파라미터 를 넣으면 판정식은 이다. 에 대해 정리하면 이렇다.

이것은 기울기 , 절편 1차 직선이다. 이 직선 위쪽()은 가중합이 양수라 출력 1, 아래쪽은 출력 0이다. OR의 네 점 중 만 이 직선 아래에 떨어지고 나머지 셋은 위에 있으니, 진리표가 그대로 재현된다. 직선을 그어 확인해 보면 정말로 한 점만 아래쪽 구석에 홀로 남는다.

핵심은 판정식이 입력에 대한 1차식이라는 점이다. 에는 같은 곱항도, 같은 제곱항도 없다. 1차식이 0이 되는 자리(경계)는 언제나 직선이지 곡선이 될 수 없다. 그래서 파라미터를 어떻게 골라도 단층 퍼셉트론이 그을 수 있는 경계는 직선 한 개로 못 박힌다. XOR가 안 되는 이유를 한 문장으로 줄이면 — 두 부류를 가르는 데 곡선이 필요한데, 1차식은 곡선을 만들 수 없다. (여담으로, 만약 판정식에 항을 손으로 끼워 넣을 수 있다면 XOR도 단층으로 풀린다. 하지만 그건 입력을 미리 비선형 가공해 주는 것이고, 퍼셉트론 스스로 그 항을 만들지는 못한다 — 그 일을 층이 대신한다.)

판단 기준: 어떤 모델의 표현력을 가늠하려면 그 판정식이 입력에 대해 몇 차식인지 보라. 1차식이면 경계는 직선(고차원에서는 초평면)에 갇힌다. 함정: 가중치를 아무리 정교하게 튜닝해도 1차식의 이 한계는 뚫리지 않는다 — 표현력을 늘리는 길은 파라미터 튜닝이 아니라 층을 쌓아 비선형을 들이는 것이다. 파라미터 미세조정과 구조 변경을 혼동하지 말 것.

층을 쌓으면 표현력이 는다

XOR를 새 게이트로 발명할 필요는 없다. 이미 만든 AND·NAND·OR를 조합하면 된다. 진리표로 확인해 보자. 입력을 NAND와 OR에 각각 통과시켜 새 신호 를 만들고, 그 둘을 AND로 묶는다.

=NAND=OR=AND()
00100
10111
01111
11010

마지막 열이 XOR의 진리표와 정확히 일치한다. 이것이 앞의 스텝 플레이어 마지막 단계의 XOR 함수가 한 일이다. NAND는 “둘 다 켜진 경우만” 걸러 0으로 만들고, OR는 “둘 다 꺼진 경우만” 걸러 0으로 만든다. 그 둘을 AND로 묶으면 양 끝(둘 다 켜짐·둘 다 꺼짐)이 죽고 가운데(서로 다름)만 살아남는다 — 정확히 XOR다.

그림으로 보면 무슨 일이 일어났는지 분명하다. 원래 입력 공간에서는 네 점이 직선 하나로 못 갈렸다. 그런데 NAND와 OR라는 두 직선(두 개의 선형 판정)을 먼저 통과시키면, 네 점이 새로운 좌표 공간으로 옮겨 심긴다. 위 표의 가운데 두 열이 그 새 좌표다. 이 옮겨진 공간에서 네 점을 다시 찍어 보면 — — 출력 0인 두 점이 로, 출력 1인 두 점이 둘 다 로 모인다. 이제 이 배치는 직선 하나(AND의 경계)로 깔끔하게 갈린다. 층을 쌓는다는 것은 곧 “직선으로 못 가르는 점들을, 먼저 다른 공간으로 옮겨 직선으로 갈리게 만드는 것”이다. 여러 직선을 겹쳐 결과적으로 곡선 같은 경계를 그리는 것과 같다.

이렇게 만든 XOR는 입력층·은닉층·출력층의 3개 층으로 이루어졌다고 보며(가중치를 가진 층은 2개이므로 흔히 2층 퍼셉트론이라 부른다), 단층이 표현하지 못하던 것을 표현한다. 층을 하나 더 쌓았을 뿐인데 표현할 수 있는 것의 범위가 넓어졌다 — 층을 깊게 하면 표현력이 는다. 이 한 문장이 이 책 전체의 씨앗이다. 3장에서 계단 함수를 매끄러운 활성화 함수로 바꿔 층을 진짜 신경망으로 키우고, 앞으로 층을 계속 쌓아 손글씨를 알아보는 심층 신경망까지 간다. 그 모든 것의 원리가 여기, 두 층으로 XOR를 푸는 이 작은 장면에 이미 다 들어 있다.

판단 기준: 단층으로 안 되는 문제를 만나면, 새 알고리즘을 발명하기 전에 이미 가진 부품을 층으로 쌓아 조합할 수 있는지 먼저 보라. 실제로 퍼셉트론을 여러 층 쌓으면 이론상 컴퓨터가 하는 어떤 처리든 표현할 수 있다(NAND 게이트만으로 컴퓨터를 만들 수 있으므로, NAND를 만드는 퍼셉트론을 쌓으면 무엇이든 된다). 함정: “층을 쌓으면 좋다”를 무한정 밀어붙이는 것 — 층이 깊어질수록 정할 파라미터가 폭증한다. XOR는 게이트 세 개를 손으로 배선했지만, 층이 깊고 뉴런이 많은 진짜 신경망에서는 손 배선이 불가능하다. 이 지점이 다음 계단의 동기다.

손으로 정하기의 한계, 그리고 학습의 예고

이 장 내내 우리가 한 일을 되짚어 보자. AND를 만들려고 눈으로 찾아 박아 넣었고, NAND는 부호를 뒤집었고, OR는 편향을 조정했고, XOR는 세 게이트를 손으로 배선했다. 파라미터를 정한 것도, 게이트를 조합한 것도 전부 사람이다. 퍼셉트론의 매개변수는 우리가 밖에서 넣어 주는 값이었다.

입력이 둘이고 게이트가 셋인 지금은 손으로 가능하다. 하지만 3장에서 볼 신경망은 입력이 784개(28×28 손글씨 이미지의 픽셀 수)이고, 은닉 뉴런이 수십 개, 가중치가 수만 개다. 이 수만 개의 숫자를 사람이 눈으로 찾아 넣는 것은 불가능하다. 여기서 퍼셉트론과 신경망이 갈린다 — 신경망은 이 가중치 매개변수의 적절한 값을 데이터로부터 자동으로 학습한다. 사람이 하는 일은 신경망의 구조(층과 뉴런의 배치)를 정하는 데까지고, 그 안을 채우는 수만 개의 숫자는 기계가 스스로 정한다. 이 장에서 손으로 정한 와, 4장에서 데이터가 정할 의 대비 — 그것이 이 책이 “퍼셉트론”에서 “학습하는 신경망”으로 건너가는 다리다.

그러려면 두 가지가 더 필요하다. 하나는 계단처럼 뚝 끊기는 판정을 매끄럽게 바꾸는 것(3장의 활성화 함수) — 매끄러워야 “이 방향으로 조금 바꾸면 답이 좋아진다”는 신호를 미분으로 뽑을 수 있기 때문이다. 계단 함수는 문턱에서 수직으로 튀고 나머지는 평평해 미분이 0이거나 무한대라, “조금 바꾸면 조금 좋아진다”는 신호를 낼 수 없다. 다른 하나는 그 미분을 따라 가중치를 조금씩 굴려 내려가는 절차(4장의 경사하강법과 학습)다. 이 장에서 손으로 돌리던 손잡이를, 데이터가 스스로 돌리게 만드는 여정이 거기서 시작된다.

판단 기준: 퍼셉트론과 신경망의 본질적 차이는 구조가 아니라 “가중치를 누가 정하는가”다. 손으로 정하면 퍼셉트론적 사고, 데이터로 정하면 신경망적 사고다. 함정: 이 장의 가중치가 “정답으로 계산된 유일한 값”이라고 생각하면, 4장에서 학습된 가중치가 사람이 이해할 수 없는 숫자 뭉치로 나오는 것을 이상하게 여긴다. 가중치는 조건을 만족하기만 하면 되는 값이지, 유일한 정답이 있는 값이 아니다 — 손으로 찾든 학습으로 찾든 마찬가지다.

요점

  • 퍼셉트론은 입력에 가중치를 곱해 더하고, 편향을 얹어 0을 넘으면 발화하는 부품이다. 가중치는 신호의 중요도, 편향은 발화의 문턱을 정한다. 입력 는 매번 바뀌고 매개변수 는 고정된다.
  • AND·NAND·OR는 구조가 완전히 같고 파라미터만 다르다. 하나의 넘파이 일반형 np.sum(w*x)+b에 숫자만 갈아 끼우면 된다. w*x는 원소별 곱, np.sum이 이를 스칼라 가중합으로 누른다.
  • AND에 을 넣고 네 입력을 손으로 검산하면, 세 줄은 가중합+편향이 음수라 죽고 으로 살아 발화한다 — 편향은 문턱을 0.7만큼 높인 값이다.
  • 단층 퍼셉트론의 판정식은 입력에 대한 1차식이라 평면 위의 직선 하나다. 그래서 직선으로 갈리는(선형 분리 가능한) 문제만 풀 수 있다.
  • XOR는 출력 0/1인 점들이 대각선으로 엇갈려 직선 하나로 못 가른다. 네 줄을 부등식으로 적어 더하면 가 0보다 크면서 동시에 0 이하여야 하는 모순이 나온다 — 해가 없음이 증명된다.
  • NAND·OR로 네 점을 다른 공간 로 옮긴 뒤 AND로 묶는 2층 구성이면 XOR가 풀린다. 층을 쌓으면 표현할 수 있는 것의 범위가 넓어진다 — 이 책 전체를 여는 첫 씨앗이다.
  • 이 장의 가중치는 사람이 손으로 정했다. 신경망은 이 수만 개의 값을 데이터로부터 스스로 학습한다는 것, 그리고 그러려면 계단을 매끄럽게 바꿔야 한다는 것이 다음 계단들의 핵심이다.

다음장으로 3장