04.1 데이터에서 학습한다!
신경망의 특징은 데이터를 보고 학습할 수 있는 점입니다. 데이터에서 학습한다는 것은 가중치 매개변수의 값을 데이터를 보고 자동으로 결정한다는 뜻이죠. 아주 멋진 소식입니다! 만약 모든 가중치 매개변수를 수작업으로 결정해야 한다고 상상해보세요. 생각만 해도 끔찍합니다. 이를테면 2장의 퍼셉트론 예에서는 진리표를 보면서 사람이 수작업으로 가중치 매개변수 값을 설정했었죠. 하지만 이때는 매개변수가 겨우 3개였습니다. 자, 그렇다면 실제 신경망에서는 매개변수가 몇 개나 될까요? 정답은 수천에서 수만입니다. 나아가 층을 깊게 한 딥러닝 정도 되면 그 수는 수억에 이를 수도 있습니다. 이쯤 되면(아니 훨씬 전부터) 매개변수를 수작업으로 정한다는 것은 아예 불가능하죠. 이번 장에서는 신경망 학습(데이터로부터 가중치 매개변수의 값을 정하는 방법)에 대해서 설명하고 파이썬으로 MNIST 데이터셋의 손글씨 숫자를 학습하는 코드를 구현해봅니다.
NOTE_ 2장의 퍼셉트론도 직선으로 분리할 수 있는(선형 분리 가능) 문제라면 데이터로부터 자동으로 학습할 수 있습니다. 선형 분리 가능 문제는 유한 번의 학습을 통해 풀 수 있다는 사실이 퍼셉트론 수렴 정리 perceptron convergence theorem로 증명되어 있습니다. 하지만 비선형 분리 문제는 (자동으로) 학습할 수 없습니다.
4.1.1 데이터 주도 학습
기계학습은 데이터가 생명입니다. 데이터에서 답을 찾고 데이터에서 패턴을 발견하고 데이터로 이야기를 만드는, 그것이 바로 기계학습이죠. 데이터가 없으면 아무것도 시작되지 않습니다. 그래서 기계학습의 중심에는 데이터가 존재합니다. 이처럼 데이터가 이끄는 접근 방식 덕분에 사람 중심 접근에서 벗어날 수 있습니다.
그런데 보통 어떤 문제를 해결하려 들 때, 특히 어떤 패턴을 찾아내야 할 때는 사람이 이것저것 생각하고 답을 찾는 것이 일반적이죠. “이 문제는 아무래도 이런 규칙성이 있는 것 같아”, “아니, 근본 원인은 다른 데 있을지도 몰라”와 같이 사람의 경험과 직관을 단서로 시행착오를 거듭하며 일을 진행합니다. 반면 기계학습에서는 사람의 개입을 최소화하고 수집한 데이터로부터 패턴을 찾으려 시도합니다. 게다가 신경망과 딥러닝은 기존 기계학습에서 사용하던 방법보다 사람의 개입을 더욱 배제할 수 있게 해주는 중요한 특성을 지녔습니다.
구체적인 문제를 하나 생각해보죠. 가령 이미지에서 ‘5’라는 숫자를 인식하는 프로그램을 구현한다고 해봅시다. [그림 4-1]과 같은 자유분방한 손글씨 이미지를 보고 5인지 아닌지를 알아보는 프로그램을 구현하는 것이 목표입니다. 자, 비교적 단순해 보이는 문제입니다. 그런데 당장 머릿속에 떠오르는 알고리즘이 있나요?
그림 4-1 손글씨 숫자 ‘5’의 예 : 사람마다 자신만의 필체가 있다.

‘5’를 제대로 분류하는 프로그램을 직접 고안해 설계하기란 의외로 어려운 문제임을 알 수 있습니다. 사람이라면 어렵지 않게 인식하지만, 그 안에 숨은 규칙성을 명확한 로직으로 풀기가 만만치 않습니다. 사실 [그림 4-1]을 잘 보면, 사람마다 버릇이 달라 ‘5’를 특징짓는 규칙을 찾기도 쉽지 않고 시간도 오래 걸릴 것 같다는 느낌이 들 겁니다.
이쯤 되면 ‘5’를 인식하는 알고리즘을 밑바닥부터 ‘설계하는’ 대신, 주어진 데이터를 잘 활용해서 해결하고 싶어질 겁니다. 그런 방법의 하나로, 이미지에서 특징 feature을 추출하고 그 특징의 패턴을 기계학습 기술로 학습하는 방법이 있습니다. 여기서 말하는 특징은 입력 데이터(입력 이미지)에서 본질적인 데이터(중요한 데이터)를 정확하게 추출할 수 있도록 설계된 변환기를 가리킵니다. 이미지의 특징은 보통 벡터로 기술하고, 컴퓨터 비전 분야에서는 SIFT, SURF, HOG 등의 특징을 많이 사용합니다. 이런 특징을 사용하여 이미지 데이터를 벡터로 변환하고, 변환된 벡터를 가지고 지도 학습 방식의 대표 분류 기법인 SVM, KNN 등으로 학습할 수 있습니다.
이와 같은 기계학습에서는 모아진 데이터로부터 규칙을 찾아내는 역할을 ‘기계’가 담당합니다. 무로부터 알고리즘을 설계하는 것보다 효율이 높아 문제를 해결해야 하는 사람의 부담도 덜어주죠. 다만, 이미지를 벡터로 변환할 때 사용하는 특징은 여전히 ‘사람’이 설계하는 것임에 주의해야 합니다. 이 말은 문제에 적합한 특징을 쓰지 않으면(혹은 특징을 설계하지 않으면) 좀처럼 좋은 결과를 얻을 수 없다는 뜻입니다. 예를 들어 개의 얼굴을 구분하려 할 때는 숫자를 인식할 때와는 다른 특징을 ‘사람’이 생각해야 할지도 모릅니다. 즉, 특징과 기계학습을 활용한 접근에도 문제에 따라서는 ‘사람’이 적절한 특징을 생각해내야 하는 것이죠.
지금까지 기계학습의 두 가지 접근법을 이야기했습니다. 이 두 방식 모두 그림으로 나타내면 [그림 4-2]의 중간과 같습니다. 반면 신경망(딥러닝) 방식은 [그림 4-2]의 아래처럼 사람이 개입하지 않는 블록 하나로 그려집니다.
그림 4-2 ‘사람’ 손으로 규칙 만들기에서 ‘기계’가 데이터로부터 배우는 방식으로의 패러다임 전환 : 회색 블록은 사람이 개입하지 않음을 뜻한다.

지니의 학습 패러다임 설명
- 지니: “도로시, 기계학습(Machine Learning)과 딥러닝(Deep Learning)의 가장 큰 차이는 바로 ‘특징(Feature)을 누가 설계하느냐’에 있어. 기계학습에서는 사람이 고민해서 특징(SIFT, HOG 등)을 컴퓨터가 이해하기 좋은 형태로 포장해서 건네줘야 하지만, 딥러닝은 원본 데이터 그대로를 신경망 성에 집어넣기만 하면 특징부터 결과까지 기계가 알아서 종단간(End-to-End) 학습한단다!”
- 도로시: “아! 사람이 중간에서 귀찮게 필터나 특징을 개발하지 않아도, 신경망 성벽의 뉴런들이 스스로 이미지의 선이나 모서리 같은 특징을 찾아낸다는 거네? 일손이 정말 많이 줄어들겠어!”
- 토토: “왈왈! (지니를 바라보며) 딥러닝은 날로 먹는 마법이구나 멍!”
지니가 칠판 앞에서 사람이 특징을 설계해야 하는 전통적 기계학습과 데이터에서 직접 학습하는 딥러닝의 차이를 설명하고 있고, 도로시와 토토가 경청하고 있어요.
[그림 4-2]와 같이 신경망은 이미지를 ‘있는 그대로’ 학습합니다. 2번째 접근 방식(특징과 기계학습 방식)에서는 특징을 사람이 설계했지만, 신경망은 이미지에 포함된 중요한 특징까지도 ‘기계’가 스스로 학습할 것입니다.
NOTE_ 딥러닝을 종단간 기계학습 end-to-end machine learning이라고도 합니다. 여기서 종단간은 ‘처음부터 끝까지’라는 의미로, 데이터(입력)에서 목표한 결과(출력)를 얻는다는 뜻을 담고 있죠.
신경망의 이점은 모든 문제를 같은 맥락에서 풀 수 있는 점에 있습니다. 예를 들어 ‘5’를 인식하는 문제는, ‘개’를 인식하는 문제든, 아니면 ‘사람의 얼굴’을 인식하는 문제든, 세부사항과 관계없이 신경망은 주어진 데이터를 온전히 학습하고, 주어진 문제의 패턴을 발견하려 시도합니다. 즉, 신경망은 모든 문제를 주어진 데이터 그대로를 입력 데이터로 활용해 ‘end-to-end’로 학습할 수 있습니다.
4.1.2 훈련 데이터와 시험 데이터
본격적인 신경망 학습 설명에 앞서, 기계학습에서 데이터를 취급할 때 주의할 점을 이야기하겠습니다.
기계학습 문제는 데이터를 훈련 데이터 training data와 시험 데이터 test data로 나눠 학습과 실험을 수행하는 것이 일반적입니다. 우선 훈련 데이터만 사용하여 학습하면서 최적의 매개변수를 찾습니다. 그런 다음 시험 데이터를 사용하여 앞서 훈련한 모델의 실력을 평가하는 것입니다. 그러면 왜 훈련 데이터와 시험 데이터를 나눠야 할까요? 그것은 우리가 범용적으로 사용할 수 있는 모델을 원하기 때문입니다. 이 범용 능력을 제대로 평가하기 위해 훈련 데이터와 시험 데이터를 분리하는 것이죠.
범용 능력은 아직 보지 못한 데이터(훈련 데이터에 포함되지 않는 데이터)로도 문제를 올바르게 풀어내는 능력입니다. 이 범용 능력을 획득하는 것이 기계학습의 최종 목표고 말이죠. 예를 들어 손글씨 숫자 인식의 최종 결과는 엽서에서 우편 번호를 자동으로 판독하는 시스템에 쓰일지도 모릅니다. 그렇다면 손글씨 숫자 인식은 ‘누군가’가 쓴 글자를 인식하는 능력이 높지 않으면 안 됩니다. 그 누군가는 ‘특정인의 특정 글자’가 아니라 ‘임의의 사람의 임의의 글자’입니다. 만약 수중에 있는 훈련 데이터만 잘 판별한다면 그 데이터에 포함된 사람의 글씨체만 학습했을 가능성이 있습니다.
그래서 데이터셋 하나로만 매개변수의 학습 and 평가를 수행하면 올바른 평가가 될 수 없습니다. 수중의 데이터셋은 제대로 맞히더라도 다른 데이터셋에는 엉망인 일도 벌어집니다. 참고로 한 데이터셋에만 지나치게 최적화된 상태를 오버피팅 overfitting*이라고 합니다. 오버피팅 피하기는 기계학습의 중요한 과제이기도 합니다.
도로시의 오버피팅 걱정
- 도로시: “윽, 지니! 훈련용 학습 데이터로 열심히 공부해서 100점을 맞았는데, 처음 보는 시험용 데이터로 시험을 치니까 50점밖에 안 나왔어! 도대체 이유가 뭘까?”
- 지니: “그게 바로 오버피팅(Overfitting, 과적합)이란다. 훈련 데이터의 특성에만 너무 과하게 적응해서 딱 그 유형의 문제만 달달 외워버린 거지. 실제 세상에서 범용적으로 쓰이려면 아직 학습하지 않은 새로운 데이터셋으로 평가했을 때도 높은 점수를 낼 수 있는 ‘범용 능력’이 중요해!”
- 토토: “크르릉 멍! (오답 시험지를 발로 밟으며) 꼼수 암기는 실전에서 통하지 않는다 멍!”
도로시가 훈련 데이터에서 100점을 맞았지만 시험 데이터에서 50점을 맞은 결과 시험지를 들고 절망하고 있고, 지니가 오버피팅의 예방법에 대해 충고하고 있어요.
* 옮긴이_ 과적합, 과학습, 과적응 등 다양하게 번역되는데, 이 책에서는 음차표기하도록 하겠습니다. 오버피팅을 다르게 설명해보자면, 한쪽 이야기(특정 데이터셋)만 너무 많이 들어서 편견이 생겨버린 상태라고 이해해도 좋습니다.