판단하는 모델, 퍼셉트론
계산에서 판단으로
인공 신경망은 여러 입력이 결과에 미치는 영향을 가중치로 표현하고, 데이터에 맞게 그 가중치를 조정하며 입력과 결과 사이의 관계를 찾아갈 수 있다는 데 의미가 있습니다. 이렇게 학습한 가중치를 이용하면 새로운 입력이 들어왔을 때도 결과를 계산할 수 있습니다. 예를 들어 집의 면적, 위치, 건축 연도 등을 바탕으로 집값을 예측하거나, 이미지에 담긴 정보를 분석해 고양이인지 강아지인지 구분하는 데 활용할 수 있습니다.
하지만 입력값과 가중치의 가중합만으로는 한계가 있습니다. 가중합은 입력값을 하나의 숫자로 계산할 뿐, 그 자체로 어떤 대상을 분류하거나 ‘예’ 또는 ‘아니요’를 판단하는 기준까지 정해 주지는 않습니다.
우리가 머신러닝을 통해 만들고자 하는 것은 데이터를 바탕으로 사람이 하던 판단의 일부를 수행할 수 있는 모델입니다. 그렇다면 계산 결과를 바탕으로 ‘예’ 또는 ‘아니요’와 같은 판단을 내리려면 어떻게 해야 할까요? 이러한 아이디어를 구현한 초기 인공 신경망 모델이 **퍼셉트론(perceptron)**입니다.
판단 기준 정하기
퍼셉트론은 여러 입력을 받아 하나의 결과를 출력하는 단순한 인공 신경망 모델입니다. 기본적인 구조는 앞서 살펴본 인공 뉴런과 비슷하지만, 계산 결과를 바탕으로 두 가지 결과 중 하나를 선택한다는 특징이 있습니다.
퍼셉트론 역시 여러 입력값에 각각의 가중치를 곱한 뒤 그 결과를 모두 더합니다. 이렇게 계산한 가중합은 각 입력이 판단에 얼마나 영향을 미치는지를 종합한 점수라고 볼 수 있습니다. 하지만 점수 자체가 곧 판단은 아닙니다. 퍼셉트론은 이 점수를 바탕으로 두 가지 결과 중 하나를 선택합니다.
이때 판단의 기준을 조절하기 위해 사용하는 값이 **편향(bias)**입니다. 편향은 가중합에 더해지는 값으로, 편향이 커지면 같은 입력값에서도 특정 결과를 더 쉽게 선택할 수 있고, 반대로 작아지면 더 높은 가중합이 필요할 수 있습니다.
이렇게 가중합에 편향을 더한 값을 기준으로 퍼셉트론은 최종 판단을 내립니다.
퍼셉트론이 실제로 어떻게 판단을 내리는지 살펴보기 위해, 스팸 메일을 가려내는 간단한 예시를 생각해 봅시다. 메일에 포함된 몇 가지 단서를 바탕으로 스팸인지 아닌지를 판단하는 퍼셉트론을 만들어 보겠습니다.
퍼셉트론은 메일에 포함된 여러 단서에 가중치를 적용하고, 여기에 편향을 더해 평가 점수를 계산합니다. 이 점수가 0보다 크면 스팸으로, 0 이하이면 정상 메일로 판단하도록 하겠습니다.
먼저 스팸 메일을 판단할 때 어떤 단서를 사용할지 정해야 합니다. 여기서는 “무료”라는 표현이 있는지, 모르는 발신자가 보낸 메일인지를 기준으로 삼겠습니다. “무료”라는 표현이 있으면 x₁을 1, 없으면 0을 부여합니다. 마찬가지로 모르는 발신자가 보낸 메일이면 x₂를 1, 아니면 0을 부여합니다.
“무료”라는 표현을 더 중요한 단서로 보고, x₁의 가중치는 2, x₂의 가중치는 1로 설정하겠습니다. 편향은 우선 -2로 정하겠습니다. 이 값이 판단에 어떤 영향을 미치는지는 계산 결과를 통해 살펴보겠습니다.
이제 “무료”라는 표현이 포함되어 있고, 모르는 발신자가 보낸 메일이 들어왔다고 가정해 봅시다. 가중합에 편향을 더하면 (1 × 2) + (1 × 1) - 2 = 1이 됩니다. 평가 점수가 0보다 크므로, 퍼셉트론은 이 메일을 스팸으로 판단합니다.
반대로 모르는 발신자가 보냈지만 “무료”라는 표현이 없다면, 가중합에 편향을 더한 값은 (0 × 2) + (1 × 1) - 2 = -1이 됩니다. 평가 점수가 0 이하이므로, 퍼셉트론은 이 메일을 정상 메일로 판단합니다.
편향은 가중합에 더해져, 스팸으로 판단하는 기준을 조절하는 값입니다. 이 예시에서 모르는 발신자라는 단서만 있으면 가중합은 1점이고, “무료”라는 표현까지 있으면 3점입니다. 편향이 없다면 두 경우 모두 평가 점수가 0보다 크므로 스팸으로 판단하게 됩니다.
하지만 여기에 편향 -2를 더하면 평가 점수가 각각 -1점과 1점이 되어, 두 단서가 모두 있을 때만 스팸으로 판단하게 됩니다. 결국 이 예시에서 편향 -2는 가중합이 2점을 초과할 때만 스팸으로 판단하도록 기준을 설정합니다. 이처럼 편향을 조절하면 같은 입력과 가중치를 사용하더라도 판단 결과가 달라질 수 있습니다.
기계적으로 판단하기
방금 예시에서는 평가 점수가 0점을 넘는지 직접 확인해 스팸 여부를 판단했습니다. 하지만 퍼셉트론은 평가 점수를 계산하는 데서 끝나지 않고, 그 점수를 바탕으로 스팸인지 아닌지 최종 결과까지 결정할 수 있습니다. 이때 평가 점수를 최종 결과로 바꾸는 역할을 하는 것이 **활성화 함수(activation function)**입니다.
활성화 함수가 하는 일은 단순합니다. 입력으로 받은 평가 점수를 기준점인 0점과 비교합니다. 평가 점수가 1점처럼 0점보다 크면 1을 출력하고, -1점처럼 0점 이하이면 0을 출력합니다.
이 활성화 함수의 동작을 결정 트리처럼 나타내면 다음과 같습니다.
이와 같이 기준점을 넘는 순간 결과를 0과 1로 나누는 방식은 판단이 분명하다는 장점이 있습니다. 하지만 평가 점수가 -0.01점에서 0.01점으로 아주 조금만 달라져도 출력은 0에서 1로 갑자기 바뀝니다. 두 점수가 거의 비슷하더라도 결과는 완전히 달라지는 것입니다.
또한 0과 1만으로는 평가 점수가 판단 기준에 얼마나 가까운지 표현하기 어렵습니다. 예를 들어 평가 점수가 0.01점이든 100점이든 모두 1을 출력하므로, 두 점수의 차이가 최종 결과에 드러나지 않습니다.
따라서 더 복잡한 문제를 다루고 가중치를 효율적으로 조정하려면, 입력값의 변화에 더 부드럽게 반응하거나 다양한 값을 출력하는 활성화 함수가 필요합니다. 이를 위해 여러 형태의 활성화 함수가 개발되었으며, 각각 입력값을 서로 다른 방식으로 변환합니다.
그래프의 가로축 z는 평가 점수를 의미합니다. 지금까지 스팸 메일 예시에서는 z가 0점을 넘는지에 따라 0 또는 1을 출력하는 **계단 함수(step function)**를 사용했습니다.
한편 평가 점수의 변화에 더 부드럽게 반응하는 **시그모이드 함수(sigmoid function)**나, 0보다 큰 입력값을 그대로 출력하는 ReLU 함수처럼 다른 활성화 함수도 있습니다. 문제의 특성과 학습 방식에 따라 적절한 활성화 함수는 달라집니다. 특히 ReLU 계열은 계산이 단순하고 학습 효율이 높아 현대 딥러닝 모델에서 널리 사용됩니다.
지금까지 배운 내용을 모두 적용하면, 퍼셉트론의 전체 계산 과정을 이해할 수 있습니다. 먼저 입력값에 각각 가중치를 곱해 더하고, 여기에 편향을 더해 평가 점수를 구합니다. 이어서 활성화 함수가 이 점수를 최종 출력값으로 변환합니다.
두 입력을 사용하는 퍼셉트론의 전체 계산은 y = activation(w₁x₁ + w₂x₂ + b)로 나타낼 수 있습니다. 이를 그림으로 나타내면 다음과 같습니다.
z는 가중합에 편향을 더한 평가 점수이고, φ(파이)는 활성화 함수를 나타내는 기호입니다. 활성화 함수는 평가 점수 z를 받아 정해진 규칙에 따라 최종 출력값 y로 변환합니다.
틀리면서 배우기
스팸 메일 예시에서는 w₁을 2, w₂를 1, 편향 b를 -2로 미리 정했습니다. 어떤 단서에 얼마만큼의 점수를 줄지, 스팸으로 판단할 기준을 모두 알려 준 셈입니다. 이처럼 사람이 미리 규칙을 정해 둔 것은 머신러닝이 아니라, 정해진 규칙에 따라 계산하는 프로그램입니다.
머신러닝에서는 사람이 가중치와 편향의 값을 정답처럼 알려 주지 않습니다. 대신 퍼셉트론에 다양한 입력값과 스팸 메일인지 아닌지가 표시된 여러 예시를 보여 줍니다. 퍼셉트론은 이 예시를 바탕으로 가중치와 편향의 적절한 값을 스스로 찾아갑니다.
원리는 간단합니다. 먼저 현재의 가중치와 편향으로 결과를 예측하고, 그 결과를 실제 정답과 비교합니다. 예측이 틀렸다면 가중치와 편향을 조금씩 조정합니다. 이 과정을 반복하면서 퍼셉트론은 틀린 판단을 줄여 갑니다.
학습 목표
이때 모델이 얼마나 틀렸는지를 하나의 숫자로 나타낸 값을 **손실(loss)**이라고 합니다. 그리고 예측값과 정답을 바탕으로 이러한 손실을 계산하는 함수를 손실 함수(loss function)라고 합니다. 손실 함수에는 여러 종류가 있으며, 문제의 특성에 따라 적절한 함수를 선택해 사용합니다.
가장 간단한 손실 함수의 예로 제곱 오차(squared error)가 있습니다. 정답을 t, 모델의 예측을 y라고 하면 다음과 같이 계산합니다.
제곱 오차 방식에서는 두 값의 차이를 제곱하기 때문에 손실은 항상 0 이상이며, 예측이 정답에서 멀어질수록 손실이 더 크게 증가합니다. 예를 들어 정답이 1일 때 예측이 0.8이면 두 값의 차이인 0.2를 제곱해 손실은 0.04가 됩니다. 반면 예측이 0.2이면 두 값의 차이인 0.8을 제곱해 손실은 0.64가 됩니다. 예측이 정답에서 멀어질수록 손실이 커집니다.
실제 문제에서는 목적에 따라 다양한 손실 함수를 사용하지만, 학습의 목표는 같습니다. 가중치와 편향을 조정해 손실을 줄이는 것입니다. 손실 함수는 모델의 예측이 얼마나 틀렸는지를 숫자로 나타내어, 학습이 얼마나 잘 이루어지고 있는지 판단할 수 있게 해 줍니다.
학습 과정
앞에서 사용한 두 단서의 조합별로 100개의 메일을 모았다고 가정해 봅시다. “무료”라는 표현이 있고, 모르는 발신자가 보낸 메일은 스팸인 비율이 가장 높고, 두 단서가 모두 없는 메일은 가장 낮습니다.
“무료” 포함 (x₁) |
모르는 발신자 (x₂) |
스팸 메일 수 | 스팸 비율 |
|---|---|---|---|
| 1 | 1 | 91 / 100 | 91% |
| 1 | 0 | 42 / 100 | 42% |
| 0 | 1 | 18 / 100 | 18% |
| 0 | 0 | 3 / 100 | 3% |
이 비율 자체를 퍼셉트론에 넣는 것은 아닙니다. 대신 퍼셉트론에 모든 학습 데이터를 하나씩 입력하며, 각 메일에서 “무료”라는 표현이 있는지, 모르는 발신자가 보낸 것인지와 같은 단서를 바탕으로 스팸 여부를 예측하고 실제 정답과 비교합니다. 퍼셉트론은 이러한 예시를 반복적으로 학습하면서, “무료”라는 표현과 모르는 발신자라는 단서가 함께 나타날 때 스팸일 가능성이 높다는 패턴을 찾아갑니다.
이제 퍼셉트론이 실제로 어떻게 학습하는지 자세히 살펴보겠습니다. 학습을 시작할 때는 w₁, w₂, b에 초기값을 설정합니다. 여기에서는 모두 0으로 시작합니다.
먼저 “무료”라는 표현이 있고, 모르는 발신자가 보낸 실제 스팸 메일을 살펴봅시다. 현재 평가 점수는 0입니다. 평가 점수가 0 이하이면 스팸이 아니라고 판단하는 기준에 따라, 퍼셉트론은 이 메일을 스팸이 아니라고 예측합니다. 하지만 실제 정답은 스팸이므로 틀린 판단입니다.
이 메일은 실제로는 스팸인데 스팸이 아니라고 예측했으므로, 다음에는 평가 점수가 더 커지도록 가중치와 편향을 조정해야 합니다. x₁과 x₂가 모두 1이므로 두 가중치 w₁과 w₂가 평가 점수에 영향을 줍니다. 편향은 입력값과 관계없이 평가 점수에 항상 더해지는 값이므로, 편향을 높이는 것도 평가 점수를 높이는 방법입니다.
여기서는 간단하게 w₁, w₂, b를 각각 1씩 증가시켜 보겠습니다. 그러면 평가 점수는 (1 × 1) + (1 × 1) + 1 = 3이 됩니다. 이제 퍼셉트론은 이 메일을 스팸으로 올바르게 예측합니다.
이번에는 두 단서가 모두 없는 실제 정상 메일을 살펴봅시다. x₁과 x₂가 모두 0이므로 가중치를 곱한 값도 모두 0이 됩니다. 여기에 현재 편향인 1을 더하면 최종 평가 점수는 1이 됩니다. 따라서 퍼셉트론은 이 메일을 스팸으로 잘못 예측합니다.
이번에는 평가 점수를 낮추기 위해 편향을 1만큼 줄여 0으로 조정합니다. 그러면 평가 점수도 0이 되어, 퍼셉트론은 이 메일을 정상 메일로 올바르게 판단합니다.
이렇게 데이터셋의 여러 예시를 통해 예측 오류를 바로잡는 과정을 반복하면, 앞서 스팸 메일 예시에서 사용했던 w₁=2, w₂=1, b=-2와 같이 스팸을 구별하는 데 적절한 가중치와 편향의 조합을 찾아갈 수 있습니다.
학습에 영향을 주는 값들
각 메일에 대해 틀린 예측을 바로잡는 방향으로 값을 조금씩 수정하면서, 퍼셉트론은 데이터에 맞는 w₁, w₂, b를 찾아갑니다.
데이터셋의 모든 학습 예시를 한 번씩 사용해 학습하는 과정을 **에포크(epoch)**라고 합니다. 실제 학습에서는 에포크를 여러 번 반복하며, 매 에포크마다 틀린 예측이 얼마나 발생했는지 확인할 수 있습니다. 모든 예시를 올바르게 판단하거나, 더 이상 오류가 줄어들지 않거나, 미리 정한 횟수에 도달하면 학습을 멈출 수 있습니다.
앞선 예시에서는 계산을 쉽게 하기 위해 예측이 틀릴 때마다 가중치와 편향을 1씩 조정했습니다. 실제 학습에서는 **학습률(learning rate)**이라는 값을 사용해 한 번에 얼마나 조정할지 결정합니다. 예를 들어 학습률이 0.1이면 조정 대상 값을 0.1씩, 0.5이면 0.5씩 변경할 수 있습니다.
학습률은 학습의 속도와 안정성에 영향을 줍니다. 너무 크면 적절한 값을 지나쳐 학습이 불안정해질 수 있고, 너무 작으면 학습에 오랜 시간이 걸릴 수 있습니다.
1장에서 고양이 사진을 구별하는 모델을 함수 f(x) = ax + b로 표현하면서, a와 b처럼 함수의 계산 결과를 결정하는 값들을 파라미터라고 했습니다. 퍼셉트론에서 살펴본 가중치와 편향 역시 파라미터에 해당하며, 학습을 통해 이러한 값들을 조정합니다.
2020년에 공개된 OpenAI의 GPT-3는 무려 1,750억 개의 파라미터를 학습했습니다. 이 숫자만으로도 대규모 언어 모델이 얼마나 많은 값을 조정하며 학습하는지 짐작할 수 있습니다. 최근에는 정확한 파라미터 수를 공개하지 않는 경우가 많아졌지만, 인공지능 기술이 발전하면서 모델의 규모도 점점 커지고 있습니다.
그렇다면 앞서 살펴본 학습률도 파라미터일까요? 학습률은 모델이 데이터에서 스스로 찾아내는 값이 아니라, 학습 과정에서 가중치와 편향을 얼마나 조정할지 결정하기 위해 사람이 미리 정하는 값입니다. 이처럼 학습 과정과 결과에 영향을 주지만, 모델이 학습을 통해 직접 조정하지 않는 설정값을 **하이퍼파라미터(hyperparameter)**라고 합니다. 쉽게 말해, 파라미터를 어떻게 학습할지 결정하는 상위 수준의 파라미터라는 의미입니다.
하이퍼파라미터는 학습의 속도와 최종 결과에 큰 영향을 줍니다. 따라서 여러 값을 시도하고 성능을 비교하면서 적절한 값을 선택합니다. 이렇게 문제와 데이터에 맞는 하이퍼파라미터를 찾는 과정을 **하이퍼파라미터 튜닝(hyperparameter tuning)**이라고 합니다.
정답은 하나가 아니다
퍼셉트론이 올바르게 판단하도록 만드는 가중치와 편향의 조합은 하나만 있는 것이 아닙니다. 예를 들어 앞서 사용한 w₁=2, w₂=1, b=-2 대신 모든 값을 두 배로 늘린 w₁=4, w₂=2, b=-4를 사용해도 결과는 같습니다.
평가 점수는 두 배가 되지만, 계단 함수는 점수가 1이든 2든 0보다 크기만 하면 같은 결과를 내기 때문입니다. 즉, 가중치와 편향의 값이 서로 달라도 같은 판단을 내릴 수 있습니다.
그렇다면 여러 조합 중 어떤 것을 선택해야 할까요? 중요한 것은 가중치와 편향이 어떤 값이냐가 아니라, 그 조합으로 처음 보는 데이터에서도 올바르게 판단할 수 있는가입니다. 이처럼 학습한 내용을 새로운 데이터에도 적용하는 것을 **일반화(generalization)**라고 합니다. 따라서 학습에 사용한 데이터에만 잘 맞는 조합보다, 처음 보는 데이터에서도 좋은 결과를 내는 조합을 찾는 것이 중요합니다.
이를 확인하기 위해 데이터셋의 일부를 학습에 사용하지 않고 미리 따로 빼두는데, 이를 **검증 데이터(validation data)**라고 합니다. 검증 데이터는 모델이 얼마나 잘 학습했는지 확인하기 위한 것으로, 모델의 예측을 실제 정답과 비교해 처음 보는 데이터에서도 얼마나 정확하게 판단하는지 평가합니다. 이를 통해 새로운 데이터에서도 좋은 결과를 내는 조합을 선택할 수 있습니다.
실습 과제
다음 문장이 맞으면 O, 틀리면 X를 선택하세요.
- 편향은 퍼셉트론이 결과를 선택하는 판단 기준을 조절하는 값이다.
- 손실이 작을수록 모델의 예측이 정답에 가깝다는 뜻이다.
- 데이터셋의 모든 예시를 한 번씩 사용해 학습하는 한 바퀴를 에포크라고 한다.
- 학습률이 클수록 학습은 언제나 더 안정적이다.
- 가중치와 편향은 사람이 미리 정하는 하이퍼파라미터다.
정답·해설
- O — 편향은 평가 점수에 더해져 퍼셉트론이 결과를 선택하는 기준을 조절합니다.
- O — 손실은 모델의 예측이 정답과 얼마나 차이 나는지를 나타내는 값입니다.
- O — 한 에포크는 데이터셋 전체를 한 번 사용해 학습하는 단위입니다.
- X — 학습률이 너무 크면 적절한 값을 지나쳐 판단 기준이 흔들릴 수 있습니다.
- X — 가중치와 편향은 데이터에서 찾아가는 파라미터입니다. 학습률처럼 사람이 정하는 값이 하이퍼파라미터입니다.