새로운 데이터에도 잘 작동할까: 일반화란 무엇인가
딥러닝은 특징마저 스스로 학습한다
오늘날 인공지능이라는 단어는 더 이상 낯설지 않습니다. 스마트폰의 얼굴 인식 기능, 이메일의 스팸 필터, 유튜브에서 사용자의 취향을 알아서 추천해주는 영상 목록에 이르기까지, 우리는 이미 일상 속에서 인공지능과 함께 살아가고 있습니다. 그런데 이 인공지능이 도대체 어떻게 그런 일을 해내는 걸까요? 우리가 아무것도 가르쳐주지 않아도, 컴퓨터는 어떻게 스스로 학습하고, 판단하고, 결정까지 할 수 있는 걸까요? 이 질문에 대한 첫 번째 실마리가 바로 머신러닝(Machine Learning)이라는 기술입니다.
데이터에서 스스로 규칙을 찾는다: 머신러닝의 출발점
머신러닝(Machine Learning)이란 사람이 하나하나 자세히 가르쳐주지 않아도 컴퓨터가 데이터를 보고 스스로 규칙이나 패턴을 찾아내는 기술입니다. 컴퓨터가 스스로 배운다고 생각하면 됩니다.
예를 들어 볼까요? 이메일을 받을 때, 광고성 이메일을 뜻하는 ‘스팸 메일’이 자주 옵니다. 예전에는 사람이 직접 규칙을 정해서, 메일 속에 ‘무료’, ‘당첨’, ‘광고’와 같은 단어가 있으면 스팸이라고 정해줘야 했습니다. 하지만 지금은 머신러닝 기술 덕분에 이렇게 복잡하게 하지 않아도 됩니다. 컴퓨터에게 수천 개의 이메일을 보여주고, 그중 어떤 메일이 스팸인지 아닌지만 알려주면 됩니다. 그러면 컴퓨터가 스스로 스팸 메일과 정상 메일의 차이를 발견해서 나름대로 판단 기준을 만들어 냅니다. 나중에 새로운 메일이 와도 스스로 판단해서 스팸인지 아닌지 정확하게 가려낼 수 있게 되는 것이죠.
머신러닝의 방법에는 크게 세 가지가 있습니다. 첫 번째는 정답을 알려주면서 배우는 방법이고, 두 번째는 정답을 알려주지 않고 스스로 특징을 찾아내는 방법이며, 세 번째는 스스로 해보고 잘한 행동을 찾아 배우는 방법입니다.
첫 번째 방법을 ‘지도학습(Supervised Learning)’이라고 부릅니다. 마치 학교에서 선생님이 정답을 미리 알려주면서 학생을 가르치는 것과 같습니다. 두 번째 방법은 ‘비지도학습(Unsupervised Learning)’입니다. 이것은 마치 아무런 힌트 없이 혼자 퍼즐의 그림을 맞춰보는 것과 비슷합니다. 마지막 방법은 ‘강화학습(Reinforcement Learning)’이라고 하며, 이것은 스스로 시도해보고 시행착오를 통해 어떤 행동이 좋은지를 배우는 것입니다. 게임을 할 때 좋은 점수를 얻는 방법을 스스로 깨닫는 것과 비슷합니다.
이제부터 하나씩 구체적으로 알아보겠습니다. 먼저 지도학습을 이해하고, 이후에 비지도학습과 강화학습까지 차례대로 살펴보겠습니다. 각 방식들이 어떤 문제를 해결하는 데 좋은지 알게 되면, 우리가 일상에서 사용하는 인공지능(AI)들이 왜 그렇게 만들어졌는지도 자연스럽게 이해할 수 있게 될 것입니다.
머신러닝의 작동 원리: 물고기를 구분하는 예시
그럼 이제 머신러닝이 어떻게 작동하는지 이해하기 위해서 쉬운 예를 들어 보겠습니다.
어떤 수산물 공장이 있다고 생각해 보세요. 이 공장에서는 매일 수백 마리의 연어와 농어를 분류해야 합니다. 사람이 일일이 손으로 분류하면 힘들고 실수도 할 수 있으니, 기계를 써서 자동으로 분류하기로 했습니다. 하지만 기계가 스스로 물고기 종류를 알아보려면 어떻게 해야 할까요?
먼저, 사람은 연어와 농어의 사진을 여러 장 준비합니다. 그리고 그 사진들마다 ‘이것은 연어다’, ‘이것은 농어다’라고 미리 이름표를 붙여줍니다. 그 후에 이 사진들을 컴퓨터에게 모두 보여줍니다. 컴퓨터는 사진들을 자세히 관찰하면서 두 물고기의 차이를 스스로 찾아내게 됩니다. 예를 들어 연어는 전체적으로 색깔이 좀 더 밝고, 농어는 어두운 편이라고 컴퓨터가 깨달을 수도 있습니다. 이렇게 컴퓨터가 스스로 물고기를 구분하는 기준을 배우고 나면, 앞으로 처음 보는 물고기 사진이 들어오더라도 이것이 연어인지 농어인지 스스로 맞힐 수 있게 됩니다. 바로 이 과정이 지도학습(Supervised Learning)의 기본 원리입니다.
이 예시에서처럼 물고기의 색깔과 같은 간단한 기준 하나만으로도 컴퓨터가 물고기를 어느 정도 구별할 수 있다면 아주 좋겠지만, 실제로 세상은 이보다 훨씬 복잡합니다. 물고기의 크기, 모양, 무늬 등 다양한 특징들이 모두 복합적으로 작용하기 때문이죠. 하지만 머신러닝의 좋은 점은 사람이 직접 복잡한 규칙을 정하지 않아도 컴퓨터가 다양한 특징을 스스로 발견하고 이를 활용해 더욱 정확하게 판단한다는 것입니다.
조금 더 일상적인 예를 들어보겠습니다. 학교에서 새 학기가 되면 여러분은 새로운 친구들을 만나게 됩니다. 처음에는 친구들의 이름을 잘 몰라서 헷갈리지만, 하루 이틀 지나고 나면 자연스럽게 친구들의 얼굴이나 목소리, 헤어스타일 같은 특징을 보고 이름을 구분할 수 있게 되죠. 머신러닝도 바로 이런 식입니다. 친구들의 이름이 ‘정답’이라고 한다면, 친구들의 얼굴이나 목소리 같은 정보는 ‘데이터’가 됩니다. 여러분이 친구들을 알아가는 과정처럼, 컴퓨터도 데이터를 통해 조금씩 배워서 결국은 새로운 정보도 정확히 구분할 수 있게 되는 것이죠.
이렇게 머신러닝을 통해서 우리는 복잡한 문제들을 훨씬 간단하고 편하게 해결할 수 있습니다. 앞으로 더 다양한 사례를 통해 지도학습이 어떤 문제들을 해결하는지 더 자세히 알아보도록 하겠습니다.
새로운 데이터에도 잘 작동할까: 일반화란 무엇인가
이제 우리는 한 가지 중요한 질문을 해볼 수 있습니다. 앞에서 설명한 방식으로 컴퓨터가 물고기 사진을 보고 잘 배웠다고 하더라도, 과연 이 컴퓨터는 우리가 가르쳐 준 사진들에만 잘 작동하는 걸까요? 아니면 한 번도 본 적 없는 새로운 물고기 사진에도 잘 작동할 수 있을까요?
이처럼 컴퓨터가 이미 배운 것들을 토대로 새로운 데이터에서도 잘 판단할 수 있는 능력을 ‘일반화(Generalization)’라고 합니다. 좀 더 쉽게 설명하면, 학교에서 수학 문제를 배운 후 시험장에서 새로운 문제를 보았을 때도 풀 수 있는 능력과 비슷합니다. 만약 수업 시간에 배운 문제만 그대로 외웠다면, 시험에 조금만 바뀐 문제가 나와도 못 풀겠죠. 반대로 원리를 제대로 이해했다면 처음 보는 문제도 풀어낼 수 있습니다. 바로 이렇게 원리를 이해하고 새로운 상황에 적용할 수 있는 능력이 일반화입니다.
하지만 컴퓨터가 일반화를 잘하려면 적절한 수준의 복잡성이 필요합니다. 여기에는 두 가지 극단적인 경우가 생길 수 있는데, 첫 번째는 너무 단순하게 배워서 충분히 구분하지 못하는 경우이고, 두 번째는 너무 복잡하게 배워서 모든 것을 외워버리는 경우입니다. 첫 번째처럼 너무 단순하게 배우는 것을 ‘과소적합(Underfitting)’이라고 하고, 두 번째처럼 너무 복잡하게 배우는 것을 ‘과적합(Overfitting)’이라고 합니다.
쉽게 이해하기 위해 다음과 같은 예시를 들어 보겠습니다.
앞서 물고기를 밝기만으로 구분하는 예를 들었습니다. 만약 이 방법이 너무 단순해서 실제로 밝기만으로는 농어와 연어를 제대로 구분할 수 없다면, 이것은 컴퓨터가 제대로 배우지 못한 경우입니다. 즉, 과소적합입니다. 학교 수학시험에 비유하면, 덧셈 문제만 공부하고 시험장에 들어갔는데 곱셈 문제가 나오는 상황과 비슷합니다. 이러면 당연히 문제를 제대로 풀지 못하겠죠.
반대로, 컴퓨터가 물고기 사진을 너무 자세히 암기해 버린 경우도 문제가 됩니다. 예를 들어 연어 사진 중에 딱 한 장이 우연히 파란색 배경이었다고 합시다. 컴퓨터가 이것까지 암기해버려서, “연어는 파란색 배경이다!”라고 잘못된 기준을 만들어버리면, 다른 배경을 가진 연어 사진을 보았을 때 “이것은 연어가 아니다”라고 잘못 판단하게 됩니다. 이렇게 아주 사소하고 우연한 특징까지도 모두 기억하는 것이 바로 ‘과적합’입니다.
일상생활에서 비슷한 예를 들면, 친구의 얼굴을 기억할 때를 생각해 보세요. 만약 친구가 어느 날 빨간색 모자를 쓰고 있었다고 해서, 친구를 기억할 때 항상 빨간색 모자로만 기억한다면 나중에 그 친구가 모자를 벗고 나타났을 때 알아보지 못할 것입니다. 이렇게 사소한 특징만 기억하는 것이 바로 과적합입니다. 친구의 진짜 특징인 얼굴의 형태, 눈, 코, 입의 모양 같은 것들을 기억해야 진짜로 친구를 구분할 수 있겠죠.
따라서 좋은 컴퓨터 모델은 너무 단순하지도 않고, 너무 복잡하지도 않아야 합니다. 다시 말해, 모델이 꼭 기억해야 할 중요한 특징만을 골라서 배우는 것이 필요합니다. 그렇다면, 정말 중요한 특징이란 무엇일까요? 바로 데이터에서 반복적으로 나타나며 의미 있게 구별되는 특징입니다. 예를 들면 물고기의 색깔뿐 아니라 길이, 무늬, 형태 등 실제 물고기의 종류를 나타내는 주요한 정보들입니다. 마찬가지로 사람의 얼굴을 기억할 때도 얼굴 형태나 눈, 코, 입의 모양 같은 중요한 특징들을 기억하면, 친구가 옷이나 모자를 바꿔도 여전히 알아볼 수 있게 되는 것입니다.
앞으로 우리는 어떻게 하면 컴퓨터가 이런 중요한 특징들을 잘 찾아낼 수 있을지, 또 어떤 방법으로 컴퓨터가 더 잘 배울 수 있는지 구체적으로 살펴보겠습니다.
좋은 모델은 좋은 특징에서 시작된다
머신러닝에서 ‘특징(Feature)’이란 어떤 물체나 대상을 잘 설명해주는 숫자나 정보를 말합니다. 앞에서 물고기 사진의 ‘평균 밝기’를 특징으로 사용했던 것 기억하시나요? 사진의 밝기처럼 하나의 숫자로 표현할 수 있는 정보가 바로 특징의 예입니다.
머신러닝이 처음 등장했을 때는 컴퓨터가 이런 특징을 스스로 발견하지 못했기 때문에, 사람들이 직접 어떤 특징을 사용해야 좋을지 정해줘야 했습니다. 이 과정을 ‘특징 공학(Feature Engineering)’이라고 합니다. 쉽게 말하면, 데이터를 보고 어떤 정보가 중요한지 사람이 직접 골라주는 작업이라고 생각하면 됩니다.
예를 들어, 얼굴을 인식하는 문제에서는 어떤 특징이 중요할까요? 당연히 눈, 코, 입의 위치나 모양이 중요하겠죠. 과거 연구자들은 사진을 보면서, 눈과 코 사이의 밝기 차이, 입과 볼의 색상 차이 같은 특징들을 손으로 직접 설계했습니다. 그리고 컴퓨터가 이 특징들을 이용해 사진 속에 얼굴이 있는지 없는지를 판단하도록 했습니다. 대표적인 예로 ‘비올라-존스(Viola-Jones)’라는 알고리즘이 있습니다. 이 알고리즘 덕분에 예전의 디지털 카메라는 사람이 찍힐 때 자동으로 얼굴에 초점을 맞출 수 있게 되었습니다. 하지만 이러한 방식은 하나하나 사람이 직접 설계해야 했기 때문에 시간도 오래 걸리고, 전문가만이 잘 할 수 있는 어려운 일이었습니다.
좀 더 이해하기 쉽게 예를 들어볼까요? 친구와 함께 반 친구들을 특징만으로 설명한다고 생각해 보세요. 키가 큰 친구, 안경을 쓴 친구, 머리가 긴 친구처럼 간단한 특징만으로도 친구를 구분할 수 있겠지만, 실제로는 이런 특징만으로 완벽하게 친구를 구분하는 게 쉽지 않습니다. 결국, 어떤 특징을 골라야 하는지를 잘 정하는 게 매우 중요합니다.
딥러닝은 특징마저 스스로 학습한다
그런데 최근에는 이 과정이 완전히 바뀌었습니다. 바로 ‘딥러닝(Deep Learning)’이라는 기술이 등장했기 때문입니다. 딥러닝의 등장으로 이제는 컴퓨터가 스스로 어떤 특징이 중요한지 알아낼 수 있게 되었습니다. 사람이 직접 하나하나 특징을 만들어주지 않아도 됩니다. 딥러닝 덕분에 컴퓨터가 데이터에서 좋은 특징을 직접 발견해 배우게 된 것입니다.
딥러닝은 사람의 뇌를 모방한 ‘인공신경망(Artificial Neural Network)’이라는 구조를 사용합니다. 이름은 조금 어렵지만, 이해하기 쉽도록 비유를 들어 보겠습니다. 사람의 뇌는 한 번에 모든 것을 이해하지 않고, 단계적으로 차근차근 이해합니다. 예를 들어, 우리가 글을 읽을 때 처음에는 글자의 모양을 보고, 그다음 글자들을 모아서 단어를 이해하고, 단어들이 모이면 문장을 이해하는 것과 같습니다. 딥러닝의 인공신경망도 비슷합니다. 여러 층이 쌓인 구조로, 각 층에서 점점 더 복잡한 정보를 이해하도록 만들어졌습니다.
이러한 방식은 사진이나 목소리처럼 복잡한 데이터를 다룰 때 매우 뛰어난 능력을 보여줍니다. 실제로 딥러닝의 우수성이 알려진 결정적인 사건이 있었습니다. 2012년에 열린 ‘이미지넷(ImageNet)’이라는 이미지 인식 대회에서 ‘알렉스넷(AlexNet)’이라는 딥러닝 모델이 등장하면서부터입니다. 알렉스넷은 기존의 전통적인 방법으로 만들어진 모델들을 압도하며 우승을 차지했습니다. 그 이유는 알렉스넷이 수백만 장의 이미지를 스스로 학습하면서 처음에는 선이나 모서리 같은 아주 단순한 정보를 이해하고, 그 다음에는 동물의 귀, 눈과 같은 복잡한 형태를 이해하며, 마지막 단계에서는 강아지, 고양이 같은 사물의 전체 모습을 스스로 구분하는 방법을 배웠기 때문입니다.
이것을 일상 속에서 이해하기 쉽게 비유해보겠습니다. 여러분이 친구의 얼굴을 기억할 때, 처음엔 얼굴의 전체적인 모양이나 헤어스타일 같은 간단한 것부터 눈에 들어옵니다. 그러다 시간이 지나면 친구의 눈동자 색깔, 코 모양, 입술 모양 같은 좀 더 세부적인 특징을 기억하게 됩니다. 결국 나중에는 얼굴 표정이나 걸음걸이 같은 미세한 특징까지 구별할 수 있게 됩니다. 딥러닝 모델도 이와 비슷하게 점차 깊은 층으로 들어가면서 데이터를 더 자세히 이해하는 것입니다.
이제부터는 이런 딥러닝 모델이 어떻게 특징을 배우고, 얼마나 정확한 판단을 할 수 있는지 좀 더 구체적으로 살펴보도록 하겠습니다.
이미지 분석에 최적화된 CNN 구조
딥러닝이 어떻게 스스로 특징을 배우는지 잘 보여주는 대표적인 예가 바로 합성곱 신경망(Convolutional Neural Network), 줄여서 CNN이라는 구조입니다. CNN은 특히 이미지를 분석하는 데 매우 뛰어난 구조입니다.
일반적인 신경망에서는 입력된 모든 데이터가 모든 뉴런에 연결되어 있어서, 마치 반 전체가 동시에 떠드는 교실처럼 복잡합니다. 하지만 CNN은 그렇게 하지 않습니다. CNN은 이미지를 작은 부분으로 나누어 하나씩 꼼꼼히 살펴봅니다. 쉽게 생각해보면, 커다란 그림을 볼 때 한눈에 보려고 하기보다 작은 돋보기를 들고 구석구석 조금씩 살펴보는 것과 비슷합니다.
이렇게 이미지의 일부분씩 나누어 보면서 정보를 분석하는 방식을 ’합성곱(Convolution)’이라고 부릅니다. 합성곱이란, 작은 창(이것을 필터 혹은 커널이라고 부릅니다)을 이미지 위에서 조금씩 움직이며 해당 부분의 정보를 분석하는 과정입니다. 마치 커다란 지도 위에 작은 돋보기를 하나씩 움직이며 세부 사항을 확인하는 것과 같습니다. 이 작은 창(필터)은 아주 간단한 계산을 수행하며, 이 창 하나가 전체 이미지를 조금씩 움직이면서 반복적으로 사용됩니다.
이 방식이 왜 유리할까요? 첫째, 이렇게 같은 필터를 반복적으로 사용하면 컴퓨터가 배워야 할 정보(매개변수)의 양이 크게 줄어듭니다. 마치 시험범위가 좁아지면 공부할 양이 적어지는 것처럼, 컴퓨터도 더 빠르게 배울 수 있게 됩니다. 둘째, 이미지의 어느 부분에서든 동일한 특징을 쉽게 발견할 수 있습니다. 예를 들어, 고양이의 귀 모양을 학습한 필터는 사진의 어떤 위치에 고양이 귀가 나타나도 즉시 찾아낼 수 있게 되는 것입니다.
CNN에서 자주 사용하는 또 다른 중요한 과정은 바로 ’풀링(Pooling)’입니다. 풀링은 간단히 말해 이미지의 크기를 줄여서 핵심적인 정보만 남기는 작업입니다. 특히 가장 많이 사용하는 방식이 ‘최대값 풀링(Max Pooling)’이라는 방법입니다. 이것은 이미지를 작은 구역(예를 들어 2×2 크기)으로 나눈 후, 그 구역 안에서 가장 큰 숫자 하나만 남기고 나머지는 버리는 방식입니다.
조금 더 쉽게 일상에서 비유해 볼까요? 여러분이 하루 동안 찍은 수많은 사진 중에서 인스타그램에 올릴 최고의 사진 한 장을 고르는 과정과 비슷합니다. 그 수많은 사진 중에서 가장 마음에 드는 한 장을 고르는 것이 최대값 풀링과 같은 과정입니다. 이렇게 하면 정보량이 줄어들어 관리하기 쉽고, 가장 중요한 특징만 남기기 때문에 모델이 더 안정적으로 작동합니다. 즉, 이미지가 약간 흔들리거나 조금 이동해도 모델이 쉽게 혼란스러워하지 않게 되는 것입니다.
정리하면 CNN은 이미지를 작게 나누어 꼼꼼히 살펴보는 방식(합성곱)과, 중요한 정보만 골라서 요약하는 방식(풀링)을 함께 사용합니다. 덕분에 복잡한 이미지를 효과적으로 분석하고, 중요한 특징을 잘 찾아내는 데 뛰어난 성능을 발휘할 수 있는 것입니다.
이제부터 CNN이 구체적으로 어떻게 작동하고, 우리 생활 속에서 어떻게 활용되고 있는지 조금 더 자세히 알아보겠습니다.
CNN은 점점 더 복잡한 개념을 알아낸다
CNN(합성곱 신경망)은 층(layer)을 여러 개 쌓으면 쌓을수록 더 복잡한 특징과 개념을 배울 수 있습니다. 쉽게 생각하면, CNN은 층이 깊어질수록 그림을 더 자세히 살펴보는 능력이 좋아지는 구조입니다.
처음에 있는 가장 낮은 층은 아주 간단한 정보부터 배웁니다. 예를 들면 수직선, 수평선, 또는 대각선 같은 단순한 선들을 찾아냅니다. 그다음 위층으로 올라가면, 이 선들을 이용해 사각형, 삼각형, 원 같은 간단한 모양을 인식합니다. 조금 더 위의 층으로 가면 이제 더 복잡한 형태를 이해하게 됩니다. 예를 들면 눈, 코, 자동차의 바퀴 같은 물체의 일부분을 구별합니다. 그리고 최상위 층에 도달하면 사람의 얼굴이나 자동차 전체와 같은 구체적인 사물을 스스로 인식할 수 있게 됩니다.
놀라운 점은 이런 기능을 사람이 직접 지정해 준 것이 아니라, CNN이 데이터를 보면서 스스로 배운다는 것입니다. 실제로 잘 훈련된 CNN을 자세히 들여다보면 특정 뉴런(신경 세포)이 고양이나 강아지처럼 아주 구체적인 물체를 스스로 알아보는 경우도 있습니다. 마치 여러분이 처음에 글자를 배우고, 글자를 조합해서 단어를 알고, 단어들을 모아서 문장을 이해하는 것처럼 CNN도 단계별로 더 복잡한 개념을 배우게 됩니다.
일상에서 친숙한 예시로 생각해보면, 처음 피아노를 배울 때는 한 음씩 건반을 누르는 것부터 시작합니다. 그러다 조금 더 배우면 간단한 멜로디를 연주할 수 있게 되고, 더 배우면 복잡한 음악 전체를 연주할 수 있는 것과 같습니다. CNN도 마찬가지로 단계적으로 더 높은 개념을 이해하게 되는 것이죠.
분류의 마지막 단계: 소프트맥스 함수
딥러닝 모델이 물체나 이미지를 분류할 때는 마지막 단계에서 여러 대상 중 하나를 최종적으로 선택해야 합니다. 이때 사용하는 특별한 수학적 방법이 ‘소프트맥스(Softmax)’라는 함수입니다.
소프트맥스 함수가 하는 일은 아주 간단합니다. 컴퓨터가 여러 가지 가능성을 계산하면, 소프트맥스 함수는 그 결과를 우리가 이해하기 쉬운 확률로 바꿔줍니다. 예를 들어 어떤 사진을 보여주었을 때, 컴퓨터가 “이 사진이 고양이일 확률은 10%, 강아지일 확률은 70%, 자동차일 확률은 20%입니다.”라고 계산했다면, 가장 확률이 높은 70%를 선택하여 “이 사진은 강아지입니다!”라고 판단하게 되는 것입니다.
소프트맥스는 모델의 판단을 사람이 보기 쉽게 만들어줄 뿐 아니라, 실제로 컴퓨터가 더 정확한 판단을 배우는 과정에서도 중요한 역할을 합니다. 어떻게 그럴 수 있을까요?
예를 들어, 컴퓨터가 어떤 사진을 보고 ‘강아지’라고 예측했는데, 실제로는 고양이 사진이었다고 생각해 보겠습니다. 그러면 컴퓨터는 자기가 예측한 결과와 실제 정답의 차이를 보면서, 다음에는 같은 실수를 반복하지 않도록 자기 내부의 수치를 조금씩 고치게 됩니다. 이런 과정을 반복하면 점점 더 정확하게 맞추게 되는 것입니다.
이때 실제 정답과 컴퓨터의 예측 사이의 차이를 계산하는 것을 ‘교차 엔트로피(Cross-Entropy)’라는 어려운 이름의 손실 함수(loss function)를 사용하여 측정합니다. 교차 엔트로피는 컴퓨터가 얼마나 틀렸는지 정확하게 알려주는 역할을 합니다. 그래서 소프트맥스 함수와 교차 엔트로피 손실 함수는 함께 사용되면서 컴퓨터가 더 정확한 결정을 내릴 수 있도록 도와줍니다.
소프트맥스 함수가 ChatGPT를 움직이는 원리
소프트맥스 함수는 ChatGPT와 같은 언어 모델에서도 매우 중요한 역할을 합니다. 여러분이 ChatGPT에게 말을 걸면, ChatGPT는 다음에 어떤 단어를 말해야 자연스러운지 계속해서 고민합니다. 여기서 중요한 건 바로 ‘다음 단어를 예측하는 것’입니다. ChatGPT는 단어 하나를 말할 때마다, 마치 객관식 시험 문제를 풀 듯 수만 개의 후보 단어 중에서 가장 적절한 단어 하나를 선택해야 합니다. 이때 소프트맥스 함수가 그 수많은 단어들을 각각 확률로 바꿔주어, 가장 가능성이 높은 단어를 고르게 해주는 것이죠.
예를 들어, 여러분이 ChatGPT에게 “오늘 날씨가”라고 입력하면, ChatGPT는 다음에 나올 가능성이 있는 단어들을 확률로 계산합니다. “좋다”는 40%, “춥다”는 30%, “덥다”는 20%, “배고프다”는 10%로 계산될 수 있습니다. 이때 소프트맥스 함수가 이 확률을 계산해 주기 때문에, ChatGPT는 가장 높은 확률을 가진 “좋다”라는 단어를 선택해서 문장을 이어가게 되는 것입니다.
그런데 이렇게 다음 단어를 고르는 과정을 한 번으로 끝내지 않고 계속 반복하면 어떻게 될까요? ChatGPT는 방금 골라낸 단어를 가지고 다시 한번 다음 단어를 고민합니다. 예를 들어, 방금 “좋다”라는 단어를 골랐다면, 이번엔 “좋다” 다음에 올 단어들을 또 예측하게 됩니다. 이번엔 “그래서”가 30%, “산책하기”가 20%, “기분이”가 50%라고 계산되었다면, 가장 높은 확률의 “기분이”를 고르겠죠. 이렇게 단어를 선택하는 과정이 반복되면 점점 긴 문장이 완성되는 것입니다.
이것을 일상생활에서 비유하면, 여러분이 친구들과 함께 돌아가면서 한 단어씩 이어서 문장을 만드는 게임과 비슷합니다. 예를 들어 첫 친구가 “나는”이라고 말하면, 다음 친구는 “어제”, 그다음 친구는 “저녁에”, 그다음 친구는 “맛있는”, 그다음 친구는 “치킨을”, 또 그다음 친구는 “먹었어.”라고 차례로 단어를 말하면, 최종적으로 “나는 어제 저녁에 맛있는 치킨을 먹었어.”라는 자연스러운 문장이 완성되겠죠.
마찬가지로, ChatGPT도 매 순간마다 가장 적절한 단어를 골라내는 과정을 반복하면서 문장을 만들어 나갑니다. 이 과정이 매우 빠르게 진행되기 때문에 우리가 질문을 던지면 마치 사람이 답하는 것처럼 자연스러운 문장과 대화를 만들어낼 수 있게 되는 것이죠.
이렇게 보면, 사진에서 강아지나 고양이를 구분하는 간단한 분류 문제나, ChatGPT처럼 다음에 올 단어를 계속해서 예측하여 문장을 만들어내는 복잡한 인공지능 모델까지 모두 같은 원리로 작동한다는 것을 알 수 있습니다. 즉, 딥러닝 모델은 수많은 가능성 중에서 가장 적절한 하나를 계속 선택하는 과정을 반복할 뿐입니다. 이 단순한 방식이 반복되면서 사람처럼 자연스럽고 의미 있는 대화를 만들어 내는 놀라운 결과로 이어지게 되는 것이죠.
클러스터링을 통해 구조를 발견하다: 비지도학습
지금까지는 컴퓨터에게 정답이 있는 데이터를 보여주고 배우게 하는 지도학습(Supervised Learning)에 대해서 알아봤습니다. 하지만 세상에는 정답이 없는 데이터도 많이 있습니다. 예를 들어, 우리가 동물 사진을 아주 많이 가지고 있는데, 이 사진에 ‘고양이’, ‘강아지’, ‘토끼’ 같은 이름표를 아무도 붙여주지 않았다면, 컴퓨터는 어떻게 이 사진들을 구분할 수 있을까요? 이럴 때 사용하는 방법이 바로 ‘비지도학습(Unsupervised Learning)’입니다.
비지도학습은 컴퓨터가 데이터의 특징을 스스로 발견하고 비슷한 데이터끼리 자동으로 묶어주는 방법입니다. 이 중 가장 대표적인 방법이 바로 ‘클러스터링(Clustering)’입니다. 클러스터링이란 간단히 말하면 ‘비슷한 것끼리 묶어주는 것’을 뜻합니다.
더 쉬운 예를 들어볼까요?
새 학기가 시작된 교실을 떠올려 봅시다. 처음엔 친구들끼리 서로 잘 모르기 때문에 모두 어색하게 섞여 있습니다. 그런데 시간이 조금 지나면 관심사가 비슷한 친구들끼리 자연스럽게 함께 모입니다. 축구를 좋아하는 친구들은 운동장으로 나가고, 그림 그리기를 좋아하는 친구들은 미술실이나 교실 한쪽에 모이게 됩니다. 누가 강제로 그룹을 만들라고 하지 않아도, 비슷한 친구끼리 자연스럽게 그룹이 형성되는 것이죠. 클러스터링이 하는 일도 바로 이와 같습니다. 컴퓨터는 데이터 안에서 비슷한 특징을 가진 것들을 스스로 찾아내서 자동으로 묶어주는 것입니다.
예를 들어 사진으로 돌아와 볼까요? 우리가 토끼, 오리, 고슴도치 사진을 잔뜩 가지고 있지만, 어떤 사진이 어떤 동물인지 모른다고 해봅시다. 클러스터링 알고리즘을 사용하면, 컴퓨터는 사진 속 동물의 생김새나 특징을 비교하면서 비슷한 사진끼리 자동으로 묶어줍니다. 그렇게 되면 우리는 결과를 보고 “여기엔 귀가 긴 동물들이 모였으니까 아마도 토끼겠구나”, “부리가 있는 동물들이 모였으니 오리겠구나”하고 추측할 수 있게 됩니다. 이렇게 이름표가 없어도 컴퓨터는 데이터를 자연스럽게 이해할 수 있게 되는 것입니다.
클러스터링 알고리즘 중 가장 유명하고 자주 쓰이는 방법이 바로 ‘K-평균(K-means)’ 알고리즘입니다. 이 방법도 아주 간단하게 생각해 볼 수 있습니다. 먼저 데이터들을 몇 개의 그룹으로 나눌지 정하고, 각 그룹의 대표 지점을 정합니다. 그리고 모든 데이터를 가장 가까운 대표 지점과 연결합니다. 이 작업을 여러 번 반복하면서 점점 더 잘 맞는 그룹으로 정리해 갑니다. 마치 반 친구들을 몇 개의 모둠으로 나눌 때, 처음에는 대충 나눴다가 서로 친하거나 성격이 맞는 친구끼리 다시 조정하는 과정과 비슷합니다.
클러스터링에서는 정해진 하나의 정답이 없기 때문에, 어떤 특징을 중심으로 묶느냐에 따라 결과가 달라질 수도 있습니다. 예를 들어, 반 친구들을 좋아하는 과목별로 나눌 수도 있고, 좋아하는 음식별로 나눌 수도 있겠죠. 그래서 데이터를 어떻게 바라볼 것인지 목적에 맞게 결정하는 것이 중요합니다.
이제 클러스터링이라는 개념이 무엇인지 조금 더 친숙해졌기를 바랍니다. 다음으로는 실제로 클러스터링 같은 비지도학습이 어떻게 활용되는지, 또 어떤 방식들이 있는지 좀 더 구체적으로 알아보겠습니다.
행동과 보상으로 배우는 방식: 강화학습
지금까지 살펴본 지도학습과 비지도학습은 데이터를 통해 규칙을 배우는 방식이었습니다. 하지만 이번에 알아볼 ‘강화학습(Reinforcement Learning)’은 조금 다른 방식으로 학습합니다. 강화학습은 간단히 말해 ‘행동’과 ‘보상’을 통해 스스로 배우는 방법입니다.
이것을 사람의 실제 학습 과정과 비슷한 예를 들어 설명해 보겠습니다. 여러분이 자전거를 처음 배울 때를 떠올려 보세요. 처음에는 균형을 잡기 어려워서 자꾸 넘어집니다. 하지만 몇 번 넘어지고 다시 도전하면서 점점 넘어지지 않고 앞으로 나아갈 수 있는 방법을 깨닫게 됩니다. 넘어지면 ‘아, 이렇게 하면 안 되는구나’ 하는 것을 배우고, 잘 나가게 되면 ‘아, 이렇게 하면 되는구나’ 하고 깨닫게 되는 것입니다. 이처럼 행동(자전거 타기)을 하고 그 결과(넘어지지 않고 잘 가기)에 따라 좋은지 나쁜지를 판단하면서 점점 더 잘하게 되는 과정이 바로 강화학습의 핵심입니다.
또 다른 예로는 바둑 인공지능인 ‘알파고(AlphaGo)’가 있습니다. 알파고는 처음에는 바둑을 어떻게 두는지 잘 몰랐습니다. 하지만 수많은 경기를 스스로 해보면서, 어떤 수를 두었을 때 이기고 어떤 수를 두었을 때 지는지를 경험으로 배우게 되었습니다. 그렇게 계속 연습하다 보니, 결국 사람도 이길 수 있는 뛰어난 바둑 실력을 갖추게 되었습니다.
이렇게 강화학습은 게임, 로봇의 움직임, 자율주행 자동차처럼 스스로 반복된 경험과 시행착오를 통해 점점 더 좋은 전략을 찾는 문제들에서 폭넓게 사용됩니다.
탐색과 이용의 균형
강화학습에서는 ‘탐색(Exploration)’과 ‘이용(Exploitation)’이라는 두 가지 행동 사이에서 균형을 맞추는 것이 중요합니다. 말이 조금 어렵게 느껴질 수도 있지만, 쉽게 말하면 ‘새로운 방법을 시도하는 것’과 ‘이미 잘 되는 방법을 계속 쓰는 것’ 사이의 균형을 유지하는 것입니다.
예를 들어 여러분이 평소에 자주 가는 맛있는 떡볶이 가게가 있다고 생각해 봅시다. 그 가게는 항상 맛이 좋기 때문에 늘 만족합니다. 그래서 매번 그 떡볶이 가게만 간다면 항상 맛있는 떡볶이를 먹을 수는 있지만, 혹시라도 근처에 더 맛있는 떡볶이 가게가 생겼다면 영영 발견하지 못할 수도 있습니다. 그렇다고 매일 다른 새로운 가게만 시도하면, 입맛에 맞지 않는 떡볶이를 자꾸 먹게 될 수도 있겠죠.
강화학습을 사용하는 인공지능도 이와 비슷하게 행동합니다. 예를 들어 게임을 하는 인공지능은 이미 성공했던 전략만 계속 사용하면 더 좋은 방법을 발견하지 못할 수 있습니다. 그래서 대부분의 경우에는 안정적으로 이길 수 있는 방법을 사용하지만, 가끔은 일부러 새로운 방법을 시도해 봅니다. 예를 들어 바둑을 두는 인공지능이 있다면, 평소에 가장 높은 승률을 가진 전략을 주로 쓰다가도 가끔씩은 이전에 잘 쓰지 않았던 전략을 실험적으로 사용해 보는 것입니다. 그렇게 새로운 전략을 시도했을 때 만약 더 좋은 결과가 나오면, 인공지능은 다음부터 그 새로운 전략을 더 자주 쓰게 됩니다.
또 다른 예로, 로봇 청소기가 집안을 청소할 때도 마찬가지입니다. 평소에는 이미 알고 있는 효율적인 경로로 집안을 청소하지만, 가끔은 일부러 다른 경로를 시도해 봅니다. 이렇게 하면 혹시 더 효율적인 청소 경로를 발견할 수도 있기 때문입니다. 만약 새로운 경로가 기존 경로보다 더 효율적이라면, 로봇은 다음번 청소 때부터 그 경로를 더 많이 선택하게 됩니다.
이렇게 강화학습은 단순한 반복 훈련이 아니라, 마치 전략 게임을 하는 것처럼 다양한 선택지를 가지고 그 결과를 평가하면서 점점 더 좋은 방법을 찾아가는 과정입니다. 사람이 게임이나 운동을 할 때 여러 가지 방법을 시도해 보면서 더 좋은 방법을 찾아가는 것과도 아주 비슷한 방식으로 배우는 것이죠.
머신러닝의 세 가지 학습 방식
1장에서는 머신러닝(Machine Learning)과 딥러닝(Deep Learning)의 가장 기본적인 개념을 바탕으로, 세 가지 대표적인 학습 방식들이 어떻게 작동하는지 하나씩 살펴보았습니다.
먼저 지도학습(Supervised Learning)을 통해 ‘정답이 있는 데이터’를 가지고 컴퓨터가 스스로 규칙을 배우는 과정을 알아보았습니다. 예를 들어 연어나 농어 사진에 미리 이름표를 붙여 주면, 컴퓨터는 이 데이터를 보면서 두 물고기의 차이를 스스로 찾아낼 수 있었습니다.
다음으로는 비지도학습(Unsupervised Learning)도 살펴봤습니다. 비지도학습은 정답이 없는 데이터를 가지고 스스로 비슷한 것끼리 묶어주는 방식으로 배우는 것입니다. 예를 들면, 새로운 반 친구들이 서로 비슷한 성격이나 취미를 가지고 자연스럽게 모이는 것처럼, 클러스터링(Clustering)을 통해 데이터를 묶어주는 방법을 알게 되었습니다.
마지막으로는 강화학습(Reinforcement Learning)을 통해 행동과 그 결과(보상)를 이용해 스스로 학습하는 방식을 다뤘습니다. 강화학습은 자전거를 배우면서 넘어지고 다시 타면서 균형 잡는 법을 배우는 것과 비슷합니다. 인공지능 역시 여러 번 시도하고, 실패하거나 성공하면서 스스로 가장 좋은 방법을 찾게 되는 것입니다.
처음 보는 용어나 개념들이 조금 어렵고 낯설게 느껴졌을 수도 있습니다. 하지만 지도학습이든, 비지도학습이든, 강화학습이든 모두 데이터를 통해 스스로 배우고 발전해가는 과정을 중심에 두고 있습니다. 이 세 가지 학습 방식은 서로 다른 상황과 문제를 해결하는 데 사용되며, 인공지능을 제대로 이해하고 활용하기 위해 반드시 알아두어야 할 중요한 출발점이 됩니다.
다음 장에서는 이렇게 학습하는 모델이 실제로 어떤 과정을 통해 계산하고, 얼마나 정확하게 맞추었는지를 평가하는지, 또 성능을 높이기 위해 어떤 방법들이 사용되는지를 더 자세히 살펴보겠습니다. 예를 들어 손실 함수(Loss Function), 경사하강법(Gradient Descent), 역전파(Backpropagation)와 같은 용어들이 나오게 될 텐데요. 이 개념들도 어렵게 느껴지지 않도록 쉬운 설명과 일상적인 예시를 들어 천천히, 그리고 편안하게 함께 알아보도록 하겠습니다.
[저작권자ⓒ META-X. 무단전재-재배포 금지]