layout: docs title: “03.1 퍼셉트론에서 # 03.1 퍼셉트론에서 신경망으로
신경망은 앞 장에서 설명한 퍼셉트론과 공통점이 많습니다. 이번 절에서는 퍼셉트론과 다른 점을 중심으로 신경망의 구조를 설명합니다.
지니가 단층 퍼셉트론과 다층 구조의 신경망의 차이점을 칠판에 그리며 설명하고 있어요.
지니의 설명
- 지니: “단층 퍼셉트론은 입력층과 출력층만 있는 직선 형태의 벽이지만, 신경망은 그 사이에 숨겨진 은닉층이 있어서 복잡한 곡선 형태의 마법도 표현할 수 있어!”
- 도로시: “아하! 은닉층은 마법사들의 비밀 방 같아서 우리 눈에는 보이지 않지만, 그 안에서 아주 중요한 계산들이 일어나는구나!”
- 토토: “크르릉 멍! 입력에서 은닉층을 거쳐 출력으로 흐르는 마법 신호가 신기해!”
3.1.1 신경망의 예
신경망을 그림으로 나타내면 [그림 3-1]처럼 됩니다. 여기에서 가장 왼쪽 줄을 입력층, 맨 오른쪽 줄을 출력층, 중간 줄을 은닉층이라고 합니다. 은닉층의 뉴런은 (입력층이나 출력층과 달리) 사람 눈에는 보이지 않습니다. 그래서 ‘은닉’인 것이죠. 또한, 이 책에서는 입력층에서 출력층 방향으로 차례로 0층, 1층, 2층이라 하겠습니다(층 번호를 0부터 시작하는 이유는 파이썬 배열의 인덱스도 0부터 시작하여, 나중에 구현할 때 짝짓기 편하기 때문입니다). [그림 3-1]에서는 0층이 입력층, 1층이 은닉층, 2층이 출력층이 됩니다.
그림 3-1 신경망의 예
WARNING_ [그림 3-1]의 신경망은 모두 3층으로 구성됩니다만, 가중치를 갖는 층은 2개뿐이기 때문에 ‘2층 신경망’이라고 합니다. 문헌에 따라서는 신경망을 구성하는 층수를 기준으로 [그림 3-1]을 ‘3층 신경망’이라고 하는 경우도 있으니 주의해야 합니다. 이 책에서는 실제로 가중치를 갖는 층의 개수(입력층, 은닉층, 출력층의 합계에서 1을 뺀 값)를 기준으로 하겠습니다.
[그림 3-1]은 앞 장에서 본 퍼셉트론과 특별히 달라 보이지 않습니다. 실제로 뉴런이 연결되는 방식은 앞 장의 퍼셉트론에서 달라진 것이 없답니다. 자, 그럼 신경망에서는 신호를 어떻게 전달할까요?
3.1.2 퍼셉트론 복습
신경망의 신호 전달 방법을 보기 전에 퍼셉트론을 살짝 복습해보기로 하죠. 먼저 [그림 3-2]와 같은 구조의 네트워크를 생각해봅시다.
그림 3-2 퍼셉트론 복습
[그림 3-2]는 x1과 x2라는 두 신호를 입력받아 y를 출력하는 퍼셉트론입니다. 이 퍼셉트론을 수식으로 나타내면 [식 3.1]이 됩니다.
y = 1 (b + w1x1 + w2x2 > 0)
여기서 b는 편향을 나타내는 매개변수로 뉴런이 얼마나 쉽게 활성화되느냐를 제어합니다. 한편, w1과 w2는 각 신호의 가중치를 나타내는 매개변수로, 각 신호의 영향력을 제어합니다.
그런데 [그림 3-2]의 네트워크에는 편향 b가 보이지 않습니다. 만약 편향을 명시한다면 [그림 3-3]과 같이 나타낼 수 있습니다.
그림 3-3 편향을 명시한 퍼셉트론
지니가 편향 조절 다이얼을 돌려 뉴런이 더 쉽게 전기를 통하게 조절하고 있어요. 토토가 그 옆에서 신기한 듯 짖고 있네요.
[그림 3-3]에서는 가중치가 b이고 입력이 1인 뉴런이 추가되었습니다. 이 퍼셉트론의 동작은 x1, x2, 1이라는 3개의 신호가 뉴런에 입력되어, 각 신호에 가중치를 곱한 후, 다음 뉴런에 전달됩니다. 다음 뉴런에서는 이들 신호의 값을 더하여, 그 합이 0을 넘으면 1을 출력하고 그렇지 않으면 0을 출력합니다. 참고로, 편향의 입력 신호는 항상 1이기 때문에 그림에서는 해당 뉴런을 회색으로 채워 다른 뉴런과 구별했습니다.
그럼 [식 3.1]을 더 간결한 형태로 다시 작성해보죠. 이를 위해서 조건 분기의 동작(0을 넘으면 1을 출력하고 그렇지 않으면 0을 출력)을 하나의 함수로 나타냅니다. 이 함수를 h(x)라 하면 [식 3.1]을 다음과 같이 [식 3.2]와 [식 3.3]으로 표현할 수 있습니다.
h(x) = 1 (x > 0)
[식 3.2]는 입력 신호의 총합이 h(x)라는 함수를 거쳐 변환되어, 그 변환된 값이 y의 출력이 됨을 보여줍니다. 그리고 [식 3.3]의 h(x) 함수는 입력이 0을 넘으면 1을 돌려주고 그렇지 않으면 0을 돌려줍니다. 결과적으로 [식 3.1]이 하는 일과 [식 3.2]와 [식 3.3]이 하는 일은 같습니다.
3.1.3 활성화 함수의 등장
조금 전 h(x)라는 함수가 등장했는데, 이처럼 입력 신호의 총합을 출력 신호로 변환하는 함수를 일반적으로 활성화 함수 activation function라 합니다. ‘활성화’라는 이름이 말해주듯 활성화 함수는 입력 신호의 총합이 활성화를 일으키는지를 정하는 역할을 합니다.
도로시가 활성화 함수 버튼을 누르자 총합 에너지가 포탈을 거쳐 출력 신호로 방출되고 있어요.
도로시의 깨달음
- 도로시: “아! 가중치를 곱하고 편향을 더해서 얻은 값(a)을 그대로 쓰는 게 아니라, 이 활성화 함수(h)라는 통로를 거쳐야만 최종 마법의 출력(y)이 완성되는구나!”
- 지니: “맞아! 그 활성화 함수가 계단 함수처럼 딱딱하냐, 아니면 매끄럽냐에 따라 퍼셉트론과 신경망의 성격이 완전히 달라지게 된단다.”
그럼 [식 3.2]를 다시 써봅시다. [식 3.2]는 가중치가 곱해진 입력 신호의 총합을 계산하고, 그 합을 활성화 함수에 입력해 결과를 내는 2단계로 처리됩니다. 그래서 이 식은 다음과 같은 2개의 식으로 나눌 수 있습니다.
[식 3.4]는 가중치가 달린 입력 신호와 편향의 총합을 계산하고, 이를 a라 합니다. 그리고 [식 3.5]는 a를 함수 h()에 넣어 y를 출력하는 흐름입니다.
지금까지와 같이 뉴런을 큰 원(○)으로 그려보면 [식 3.4]와 [식 3.5]는 [그림 3-4]처럼 나타낼 수 있습니다.
그림 3-4 활성화 함수의 처리 과정
보시다시피 [그림 3-4]에서는 기존 뉴런의 원을 키우고, 그 안에 활성화 함수의 처리 과정을 명시적으로 그려 넣었습니다. 즉, 가중치 신호를 조합한 결과가 a라는 노드가 되고, 활성화 함수 h()를 통과하여 y라는 노드로 변환되는 과정이 분명하게 나타나 있습니다. 참고로 이 책에서는 뉴런과 노드라는 용어를 같은 의미로 사용합니다. 방금 a와 y의 원을 노드라고 했는데, 이는 지금까지 뉴런이라고 한 것과 같은 의미입니다.
뉴런을 그릴 때 보통은 지금까지와 마찬가지로 [그림 3-5]의 왼쪽처럼 뉴런을 하나의 원으로 그립니다. 그리고 신경망의 동작을 더 명확히 드러내고자 할 때는 오른쪽 그림처럼 활성화 처리 과정을 명시하기도 합니다.
그림 3-5 왼쪽은 일반적인 뉴런, 오른쪽은 활성화 처리 과정을 명시한 뉴런(a는 입력 신호의 총합, h()는 활성화 함수, y는 출력)
그럼 계속해서 활성화 함수와 더 친해져보기로 하죠. 이 활성화 함수가 퍼셉트론에서 신경망으로 가기 위한 길잡이랍니다.
WARNING_ 이 책에서는 퍼셉트론이라는 말이 가리키는 알고리즘을 엄밀히 통일하지는 않았습니다. 일반적으로 단순 퍼셉트론은 단층 네트워크에서 계단 함수(임계값을 경계로 출력이 바뀌는 함수)를 활성화 함수로 사용한 모델을 가리키고 다층 퍼셉트론은 신경망(여러 층으로 구성되고 시그모이드 함수 등의 매끄러운 활성화 함수를 사용하는 네트워크)을 가리킵니다.