복잡한 계산을 거꾸로 추적한다: 역전파(Backpropagation)
정보 손실 없이 깊게 쌓기: 잔차 연결(skip connection)
1장에서는 머신러닝(Machine Learning)과 딥러닝(Deep Learning)이 데이터를 보고 스스로 배우는 기술이라고 설명했습니다. 여기서 궁금한 점이 하나 생깁니다. 컴퓨터는 어떻게 '배운다'고 할 수 있을까요? 사람처럼 뇌에 기억을 저장하는 것도 아니고, 선생님이 일일이 가르쳐 주는 것도 아닌데 말이죠. 그런데 컴퓨터가 점점 더 똑똑해진다고 하는 이유는 무엇일까요?
이번 장에서는 바로 이 질문에 답을 해 보겠습니다. 딥러닝 모델이 학습을 통해 어떻게 조금씩 더 똑똑해지는지, 그 과정을 알아보는 것이 목표입니다. 이때 꼭 이해해야 하는 개념이 바로 '최적화(Optimization)'라는 것입니다. 최적화란 쉽게 말하면 문제를 풀 때 가장 좋은 답을 찾는 방법을 의미합니다.
예를 들어 볼까요?
여러분이 수학 시험을 봤다고 생각해 보세요. 처음 문제를 풀었을 때는 틀린 문제가 많을 수 있습니다. 그러면 틀린 문제들을 모아서 오답노트를 만들겠죠? 오답노트를 보면서 어떤 부분에서 실수했는지 하나씩 확인하고 다시 공부합니다. 이렇게 하면 다음 시험에서는 틀리는 문제가 점점 줄어들고 더 좋은 점수를 받을 수 있습니다. 딥러닝 모델도 이와 비슷합니다. 처음에는 틀린 답을 내놓을 때가 많습니다. 하지만 틀릴 때마다 '왜 틀렸을까?'를 스스로 찾아보고, 다음에는 같은 실수를 하지 않도록 계속 수정하면서 배우는 것이죠.
이렇게 딥러닝 모델은 최적화 과정을 통해 점점 정확한 답을 찾아갑니다. 결국엔 매우 똑똑하고 정확한 예측을 할 수 있게 됩니다. 이제부터 딥러닝 모델이 어떻게 최적화를 하고, 그 과정에서 어떤 방법과 원리를 사용하는지 천천히 함께 살펴보겠습니다.
예측이 틀렸다는 걸 어떻게 알까? 손실 함수란 무엇인가
컴퓨터가 틀린 것을 고치려면 먼저 자신이 얼마나 틀렸는지를 알아야 합니다. 우리가 수학 문제를 풀고 나면 꼭 채점을 하죠? 그러면 정답과 내가 쓴 답을 비교하면서 어디가 틀렸는지 알 수 있습니다. 딥러닝 모델도 이와 비슷한 방법으로 자기 예측이 얼마나 정확한지 확인할 필요가 있습니다. 이때 사용하는 중요한 개념이 바로 ‘손실 함수(Loss Function)’입니다.
손실 함수는 간단히 말해, 모델이 예측한 값과 실제 정답 사이의 차이를 숫자로 알려주는 도구입니다. 이 숫자가 크면 모델이 틀린 것이고, 작을수록 정확한 예측을 했다는 뜻입니다. 따라서 모델은 이 손실 값을 최대한 작게 만드는 것을 목표로 삼습니다.
손실 함수는 여러 가지가 있지만, 가장 흔하게 쓰이는 것이 바로 ‘교차 엔트로피(Cross-Entropy)’입니다. 이 용어가 조금 어렵게 느껴질 수도 있지만, 그 뜻은 매우 단순합니다. 모델이 정답을 맞출 가능성이 높은 쪽으로 예측할수록 손실은 작아지고, 반대로 잘못된 답을 확신 있게 말할수록 손실은 커지게 되는 것입니다.
조금 더 쉽게 예를 들어볼까요? 한 모델이 강아지와 고양이를 구분하는 일을 한다고 생각해 보겠습니다. 만약 모델이 사진 한 장을 보고 "이 사진은 강아지일 가능성이 90%, 고양이일 가능성은 10%"라고 예측했는데, 실제로는 고양이라면 어떻게 될까요? 이때 모델의 예측은 완전히 틀린 것입니다. 따라서 손실 값이 크게 나타나게 됩니다. 반면에 같은 상황에서 모델이 "강아지일 가능성 49%, 고양이일 가능성 51%"처럼, 비록 헷갈리긴 했어도 정답에 더 가까운 예측을 했다면 손실 값은 상대적으로 작아집니다.
이렇게 손실 값을 통해 컴퓨터는 자신이 얼마나 틀렸는지 구체적으로 확인할 수 있게 됩니다. 하지만 틀렸다는 사실을 확인했다면, 이제는 어디를 어떻게 고쳐야 하는지 방법도 알아야겠죠? 바로 이 문제를 해결하는 방법이 다음에 설명할 ‘경사 하강법(Gradient Descent)’입니다.
조금씩 내려가다 보면 언젠가는 가장 낮은 곳에 도달한다
‘경사 하강법(Gradient Descent)’이라는 말이 처음에는 어렵게 느껴질 수 있지만, 간단한 예시로 쉽게 이해할 수 있습니다. 산에 올라갔다가 안개 때문에 길이 잘 보이지 않는 상황을 상상해 보세요. 우리는 산의 전체 모습을 다 보지는 못해도 내가 지금 있는 곳에서 어떤 방향이 아래로 내려가는 길인지 정도는 알 수 있습니다. 그래서 매 순간 조금씩 낮은 방향을 찾아 걸어 내려갑니다. 이렇게 한 걸음씩 계속 내려가다 보면 결국엔 산에서 가장 낮은 곳에 도착하게 되겠죠? 경사 하강법이란 바로 이와 같이 가장 낮은 지점을 찾아가는 방법입니다.
컴퓨터 역시 비슷한 방법으로 문제를 해결합니다. 여기서 산은 ‘손실 함수(Loss Function)’라는 것으로 만들어진 산입니다. 이 산에서 가장 낮은 지점은 모델의 예측이 실제 정답과 가장 가까워지는 곳을 의미합니다. 그러면 여기서 ‘정답’이란 무엇일까요? 바로 사람이 미리 정해둔 ‘레이블(label)’입니다.
레이블이란, 사람이 직접 정답이라고 표시한 데이터입니다. 예를 들어, 컴퓨터에게 강아지와 고양이 사진을 구별하도록 가르칠 때 사람이 사진마다 ‘이건 강아지’, ‘이건 고양이’라고 미리 표시해 둡니다. 이 표시가 바로 ‘레이블’입니다. 컴퓨터는 자신의 예측과 이 레이블을 비교해서 얼마나 틀렸는지 계산하고, 이를 바탕으로 자신의 예측 방식을 점점 더 정확하게 고쳐 나갑니다.
이 과정에서 중요한 역할을 하는 것이 ‘기울기(Gradient)’입니다. 기울기는 지금 있는 위치에서 어느 방향으로 가면 손실 값을 더 낮출 수 있는지 알려주는 힌트와 같습니다. 컴퓨터는 이 힌트를 따라, 모델이 가진 여러 가지 값(파라미터, parameter)을 조금씩 바꿔 가면서 더 정확한 답을 찾습니다.
이렇게 한 번씩 값을 바꾸는 과정을 ‘한 스텝(step)’이라고 합니다. 하지만 단 몇 번의 스텝으로 완벽한 결과를 얻기는 어렵습니다. 그래서 컴퓨터는 수천 번, 수만 번 스텝을 반복하며 조금씩 더 정답에 가까워지게 됩니다. 마치 운동을 매일 반복해서 실력이 늘어나는 것처럼, 컴퓨터도 이런 과정을 반복하면서 스스로 배우고 발전하게 됩니다.
복잡한 계산을 거꾸로 추적한다: 역전파(Backpropagation)
딥러닝(Deep Learning) 모델은 실제로 수백만 개에서 많게는 수억 개나 되는 매우 많은 파라미터(parameter)를 가지고 있습니다. 파라미터는 컴퓨터가 입력된 데이터를 보고 어떤 결정을 내릴 때 사용하는 작은 '기준'들입니다. 예를 들어 사람이라면 친구를 구별할 때 키, 얼굴 모양, 목소리처럼 다양한 기준을 사용하듯이, 모델도 파라미터를 사용해 데이터를 판단합니다. 그런데 이렇게 파라미터가 너무 많다 보니 어떤 파라미터가 잘 작동하고, 어떤 파라미터가 틀린 예측을 만들었는지 일일이 따져 보는 건 매우 어려운 일입니다.
하지만 이런 복잡한 문제를 해결하는 좋은 방법이 있습니다. 바로 '역전파(Backpropagation)'라는 방법입니다. 역전파는 쉽게 말해서, 결과에서 시작해 계산을 거꾸로 되짚어 가는 방식입니다. 예를 들어, 학교에서 수학 문제를 풀었는데 답이 틀렸다면 우리는 계산을 처음부터 하나씩 거꾸로 살펴보며 어디서 잘못됐는지 찾는 경우가 있습니다. 또 다른 예시로는, 요리를 했는데 맛이 이상하다면 처음 넣었던 재료부터 하나씩 다시 확인하며 어디서 실수했는지 찾아보는 것과 비슷합니다. 이처럼 역전파도 컴퓨터가 예측한 결과에서 출발해 거꾸로 계산을 따라 올라가면서, 각 파라미터가 얼마나 오류(손실)에 영향을 미쳤는지 하나하나 확인하는 것입니다.
수학적으로는 '연쇄 법칙(Chain Rule)'이라는 미적분 개념을 이용해서 이 과정을 계산하지만, 복잡한 공식 자체를 다 외우거나 이해하지 않아도 괜찮습니다. 중요한 것은 역전파를 통해서 모델이 어떤 부분을 얼마나 고쳐야 할지 정확히 알아낼 수 있다는 점입니다.
이렇게 딥러닝 모델은 네 가지 단계를 반복하면서 학습합니다. 첫 번째로 모델이 데이터를 보고 예측(prediction)을 합니다. 두 번째로, 그 예측과 사람이 미리 정해놓은 정답(레이블)을 비교해 손실(loss)을 계산합니다. 세 번째로, 역전파를 사용해 틀린 이유를 찾아냅니다. 마지막 네 번째로, 그 정보를 바탕으로 파라미터를 수정합니다. 이 네 가지 과정을 전부 한 번씩 진행한 것을 '에포크(epoch)'라고 부릅니다. 한 번의 에포크는 주어진 데이터를 전부 학습한 것을 의미하고, 실제 학습할 때는 보통 수십 번에서 많게는 수백 번 반복하며 모델을 더욱 정확하게 만듭니다.
경사하강법의 다양한 방식들
기본적인 경사 하강법(Gradient Descent)은 데이터 전체를 한꺼번에 모두 사용하여 손실 값을 계산하고 파라미터를 수정하는 방식입니다. 쉽게 말하면, 반 전체 학생의 시험지를 한 번에 모두 확인하고 그 결과를 통해 수업 방식을 고치는 것과 비슷합니다. 하지만 학생 수가 너무 많다면 한꺼번에 모두 점검하는 것이 시간이 오래 걸리고 힘들겠죠? 컴퓨터도 마찬가지로, 전체 데이터를 한 번에 처리하려면 많은 시간이 걸리고 자원도 많이 사용해야 합니다.
그래서 실제 딥러닝에서는 데이터 전체가 아니라 그 중 일부만 골라서 학습하는 ‘미니배치(mini-batch)’ 방식을 많이 씁니다. 미니배치는 반 전체 학생이 아닌 몇 명의 학생 성적만 먼저 확인한 후, 그 결과를 바탕으로 수업 방식을 조금씩 바꾸는 것과 같습니다. 이렇게 하면 빠르게 문제점을 파악하고 개선할 수 있어서 더 효율적입니다.
이 밖에도 경사 하강법을 더 효과적으로 만들기 위해 다양한 방법들이 개발되었습니다. 그 중 하나가 ‘모멘텀(momentum)’이라는 방식입니다. 모멘텀은 이전에 이동했던 방향과 속도를 기억하고 이를 활용해서 더 빨리 목표에 도달하게 도와줍니다.
이 방식을 간단한 예시로 이해해볼까요? 언덕 위에서 수레를 밀어서 내려가는 장면을 생각해 보세요. 처음엔 천천히 움직이지만, 점점 속도가 붙어서 빠르게 내려갑니다. 이처럼 모멘텀도 모델이 내려가던 방향과 속도를 기억해 그 방향으로 계속 나아가도록 힘을 줘서 빠르게 목표 지점에 도착하게 도와줍니다.
또 하나 많이 쓰이는 방법으로는 ‘아담(Adam)’이라는 방식이 있습니다. 아담은 모델이 학습을 할 때 필요한 '학습률(learning rate)'을 자동으로 조정해 줍니다. 학습률은 모델이 한 번에 얼마나 많이 수정될지를 결정하는 값인데, 이 값이 너무 크거나 작으면 학습이 잘 이루어지지 않습니다. 아담은 이 값을 자동으로 알맞게 조절해 주기 때문에 사용하기 편리하고 매우 효율적입니다. 그래서 많은 딥러닝 모델이 현재 이 방식을 사용합니다.
이러한 다양한 방식들은 모두 공통적으로 컴퓨터가 더 빠르고 정확하게 학습할 수 있도록 돕습니다. 덕분에 복잡한 문제들도 효율적으로 해결할 수 있게 되는 것입니다.
깊은 신경망에서 생기는 문제들
신경망을 깊게 쌓으면 더욱 복잡한 문제도 잘 해결할 수 있을 것처럼 보입니다. 실제로도 어느 정도는 그렇습니다. 층이 많아질수록 데이터를 분석하는 과정에서 더 다양하고 세부적인 특징을 잡아낼 수 있기 때문입니다. 예를 들어, 복잡한 사진에서 사람의 얼굴이나 사물을 더 정확하게 구별하거나, 긴 문장에서 더 정확하게 의미를 파악할 수 있게 됩니다.
하지만 신경망을 너무 깊게 만들면 예상치 못한 새로운 문제가 나타나게 됩니다. 그 중 대표적인 것이 바로 ‘기울기 소실 문제(Vanishing Gradient Problem)’입니다. 앞에서 설명했던 것처럼, 기울기(Gradient)는 컴퓨터가 학습할 때 어떤 방향으로 얼마나 수정해야 하는지 알려주는 중요한 힌트입니다.
그런데 신경망의 층이 많아질수록 역전파 과정에서 이 기울기 값을 여러 번 계속 곱하게 되는데, 이 값이 너무 작아져서 결국 거의 0에 가까워지는 문제가 생기게 됩니다. 예를 들어, 계산기를 사용해서 계속해서 작은 숫자(0.1)를 곱해 보면, 값이 점점 작아져 결국엔 0에 가까운 숫자가 되어 버리는 것과 비슷한 상황입니다. 이렇게 되면 앞쪽 층에서는 기울기가 거의 전달되지 않아 학습이 더 이상 제대로 이루어지지 않습니다.
반대로 기울기가 너무 커지는 문제도 발생할 수 있습니다. 이 문제는 ‘기울기 폭주(Exploding Gradient)’라고 부릅니다. 예를 들어, 계산기를 써서 큰 숫자(예: 10)를 계속 곱하면 값이 급격히 커지는 것과 비슷한 상황입니다. 이 경우에는 파라미터 값이 갑자기 크게 튀면서 정상적인 학습이 어려워집니다.
이 두 가지 문제 외에도 컴퓨터가 숫자를 저장하는 방식 때문에 또 다른 어려움이 생기기도 합니다. 컴퓨터는 ‘부동소수점(floating-point number)’이라는 방법으로 숫자를 저장하는데, 이 방식은 숫자를 정해진 정밀도로만 표현할 수 있습니다. 예를 들어, 우리가 계산기에서 0.0000000001과 같은 매우 작은 숫자를 입력하면 계산기는 화면에 0으로 표시할 수도 있습니다. 이는 계산기나 컴퓨터가 아주 작은 숫자를 저장할 수 있는 자릿수가 제한되어 있기 때문입니다. 컴퓨터도 마찬가지로 너무 작은 숫자는 정확히 저장하지 못하고 0에 가까운 숫자로 간략히 표현해버립니다. 이렇게 숫자가 제대로 저장되지 않으면 학습 과정에서 정확한 기울기 값을 얻기 어렵게 되고, 결국 모델이 원래 의도한 대로 정확히 학습하지 못하게 되는 문제가 발생합니다. 따라서 신경망을 깊게 만들 때는 이런 문제들을 극복하기 위한 특별한 기술이나 전략을 함께 사용하는 것이 중요합니다.
정보 손실 없이 깊게 쌓기: 잔차 연결(skip connection)
이런 문제들을 해결하기 위해 만들어진 대표적인 방법이 바로 ‘잔차 연결(skip connection)’입니다. 잔차 연결이란 간단히 말해, 여러 층을 지나가는 길 중간에 빠르게 갈 수 있는 지름길을 만들어 주는 것입니다. 예를 들어, 학교에서 복도 끝까지 돌아서 교실에 가는 대신 바로 앞 교실 문을 통해 지름길로 가는 것과 비슷합니다. 이렇게 하면 먼 길을 돌아가는 동안 생길 수 있는 정보의 손실을 막고 더 빠르게 목적지에 도달할 수 있습니다.
신경망에서는 층이 많아질수록 정보가 뒤쪽으로 전달되는 과정에서 점점 희미해지는 문제가 생깁니다. 특히 학습에 필요한 기울기(Gradient)가 앞쪽 층까지 제대로 전달되지 않는 문제가 발생합니다. 이런 상황에서 잔차 연결이 있다면, 기울기가 먼 길을 돌아가는 대신 직접 앞으로 빠르게 전달될 수 있게 됩니다.
예를 들어, 층 A → 층 B → 층 C 순서로 기울기가 전달되는 상황에서, 잔차 연결이 있으면 층 A에서 층 C로 바로 연결되는 길이 생깁니다. 이렇게 하면 기울기가 손실되지 않고 효과적으로 전달될 수 있습니다.
잔차 연결을 활용한 대표적인 모델이 바로 ‘ResNet(ResNet, Residual Network)’입니다. 이 모델은 50층, 100층, 심지어 150층 이상의 깊이를 가지고도 문제없이 잘 작동할 수 있게 만들어졌습니다. ResNet이 성공할 수 있었던 핵심은 모든 층마다 이런 잔차 연결을 넣어 안정적인 학습을 가능하게 했기 때문입니다. 신경망은 꼭 모든 층에서 새로운 것을 배우지 않아도 되고, 필요하면 입력된 정보를 그대로 다음 층으로 넘겨줄 수도 있어 학습이 매우 안정적이고 효율적으로 이루어질 수 있습니다.
언어를 이해할 때 필요한 '지름길'의 중요성
잔차 연결의 아이디어는 사진을 분석하는 컴퓨터 비전(Computer Vision) 분야뿐 아니라, 언어를 다루는 자연어 처리(Natural Language Processing) 분야에서도 널리 사용됩니다. 그 대표적인 예가 ‘트랜스포머(Transformer)’라는 모델입니다. 트랜스포머는 문장의 뜻을 이해하거나 다음에 올 단어를 예측할 때 뛰어난 성능을 발휘합니다.
트랜스포머에서도 잔차 연결이 매우 중요한 역할을 합니다. 트랜스포머는 정보를 처리하는 여러 층으로 구성되어 있는데, 각 층에서 새로운 정보를 계산한 뒤 원래의 정보를 다시 더해줍니다. 쉽게 말하면, 새로운 정보와 원래 정보를 합쳐서 문장의 의미가 정확하게 유지되도록 도와줍니다.
특히 문장은 길이가 다양하고 문맥에 따라 의미가 달라질 수 있어 매우 복잡합니다. 잔차 연결 덕분에 트랜스포머는 깊은 층을 통과하면서도 문장의 문맥을 잘 유지하고, 중요한 정보가 변형되거나 잃어버리는 것을 방지합니다.
잔차 연결은 단순히 층을 건너뛰는 연결 하나를 추가하는 것보다 훨씬 더 큰 의미가 있습니다. 정보가 손실되지 않고 잘 전달될 수 있도록 도와주고, 학습 과정이 안정적이고 효율적으로 이루어지도록 만들어줍니다. ResNet 이후로 나온 거의 모든 딥러닝 모델들은 다양한 방식으로 잔차 연결의 개념을 활용하고 있으며, 앞으로 등장할 더 뛰어난 모델들 또한 이런 건너뛰기 연결 방식을 계속 사용할 가능성이 매우 높습니다.
실제로 딥러닝 모델은 어떻게 배우는 걸까?
딥러닝 모델이 실제로 학습하는 과정은 몇 가지 중요한 단계로 이루어집니다. 처음에는 모델의 구조를 정해야 합니다. 마치 건물을 짓기 전에 설계도를 그리는 것처럼, 모델도 어떤 층을 몇 개 쌓을지, 각 층에서 어떤 계산을 할지를 미리 설계하는 것입니다.
그다음에는 모델이 잘못된 예측을 했을 때 얼마나 틀렸는지를 숫자로 알려줄 수 있는 손실 함수(Loss Function)를 정합니다. 쉽게 말하면, 시험에서 틀린 문제를 점수로 표시하는 채점표와 같은 역할입니다. 손실 함수가 정해지면, 모델의 초기 기준(파라미터, parameter)을 임의로 설정해 놓습니다. 이 기준들은 모델이 데이터를 판단할 때 사용하는 작은 규칙들이라고 생각하면 됩니다.
이제 실제 데이터를 모델에 입력합니다. 예를 들어, 강아지 사진을 보여주면서 "이것이 강아지다"라는 정답(레이블)을 함께 알려줍니다. 모델은 입력된 데이터를 바탕으로 예측을 하고, 그 예측이 정답과 얼마나 차이가 나는지 손실 함수로 확인합니다. 만약 모델이 "고양이"라고 잘못 예측했다면 손실 값은 커지게 됩니다.
그다음 단계가 역전파(Backpropagation)입니다. 역전파는 이 틀린 예측을 거꾸로 따라가면서 모델의 어떤 기준들이 잘못된 예측에 영향을 주었는지 찾아내는 과정입니다. 예를 들어, 시험에서 틀린 문제를 다시 풀어보며 어디서 실수했는지 하나씩 확인하는 것과 같습니다.
역전파로 잘못된 기준들을 찾았다면, 이제는 이 기준들을 수정해야 합니다. 이때 사용하는 방법이 바로 경사 하강법(Gradient Descent)입니다. 이 방법은 마치 틀린 문제를 연습해서 다시는 같은 실수를 하지 않도록 노력하는 것과 같습니다. 이렇게 해서 모델은 조금 더 정확한 예측을 하도록 기준 값을 고쳐나가게 됩니다.
이런 과정이 단 한 번만 이루어지는 것은 아닙니다. 데이터를 전부 학습할 때까지 수십 번, 많게는 수백 번 반복됩니다. 사람이 어떤 운동이나 공부를 꾸준히 반복하면서 실력이 점점 늘어나는 것과 같은 원리입니다. 모델도 마찬가지로 계속 반복해서 학습하며 더 정확하고 정교한 예측을 하게 됩니다.
하지만 학습이 항상 순조롭게 되는 것은 아닙니다. 때로는 모델이 연습할 때 사용했던 데이터에 너무 익숙해져서, 새로운 데이터를 만나면 오히려 잘못된 예측을 하는 경우가 있습니다. 이를 ‘과적합(Overfitting)’이라고 합니다. 예를 들어, 학교 시험에서 특정 문제만 완벽히 외우고 시험을 봤을 때, 비슷하지만 조금 다른 문제가 나오면 제대로 풀지 못하는 상황과 비슷합니다.
과적합을 막기 위해서는 일부러 데이터를 약간 변형하거나(노이즈, noise 추가), 학습 중간중간에 모델의 일부 기능을 꺼두는 방법인 ‘드롭아웃(Dropout)’을 사용합니다. 운동할 때 같은 동작만 반복하면 쉽게 피곤해지고 다칠 수 있듯이, 드롭아웃은 모델이 특정 기준에만 너무 의존하지 않고 여러 기준을 골고루 사용하도록 돕습니다. 이렇게 하면 새로운 데이터가 들어왔을 때도 더 정확하게 잘 작동하는 모델이 될 수 있습니다.
인공지능이 배우는 세상은 어떤 모습일까
마지막으로 딥러닝 모델이 학습하는 과정을 이해하는 데 도움을 주는 흥미로운 비유를 살펴보겠습니다. 모델이 점점 손실 값을 줄여가며 배우는 과정은 마치 우리가 복잡한 미로를 탐험하는 것과 비슷합니다. 이 미로는 ‘손실 지형(Loss Landscape)’이라고 부릅니다.
손실 지형은 그냥 단순한 미로가 아니라, 우리가 평소에 생각하는 것보다 훨씬 더 복잡한 모습입니다. 이곳에는 높은 언덕과 깊은 골짜기, 그리고 넓고 평평한 고원처럼 다양한 형태의 지형들이 있습니다. 심지어는 올라가기도 내려가기도 애매한 중간 지점(이런 곳을 ‘안장점’ 또는 saddle point라고 합니다)도 있어서 더 복잡합니다.
모델은 가장 낮은 곳, 즉 손실 값이 가장 작은 곳을 찾으려고 이 복잡한 미로를 탐험합니다. 손실 값이 작아질수록 모델은 더 정확한 예측을 하게 됩니다. 하지만 다행스럽게도, 반드시 이 미로에서 한 군데만 있는 완벽한 최저점만을 찾을 필요는 없습니다. 최근 연구에 따르면, 이 손실 지형에는 적당히 낮은 손실 값을 가진 여러 좋은 지점들이 많이 있어서, 꼭 한 곳에만 집착하지 않아도 충분히 좋은 모델이 될 수 있습니다.
이것은 마치 시험에서 만점을 받지 않아도, 어느 정도 높은 점수를 꾸준히 유지하면 충분히 좋은 성적을 거둘 수 있는 것과 같습니다. 오히려 무리하게 완벽한 점수를 받으려 하면 시험에만 맞춰진 공부를 하게 되어, 진짜 실력은 늘지 않는 상황과 비슷합니다. 딥러닝 모델도 너무 낮은 손실 값만을 무리하게 추구하면 특정 데이터에만 잘 맞고 새로운 데이터에는 잘못된 결과를 내는 ‘과적합(Overfitting)’ 문제가 생길 수 있으므로 주의해야 합니다.
결국 모델은 복잡한 지형 속에서 최선의 길을 찾아 꾸준히 나아가면서, 점점 더 똑똑하고 정확하게 학습해 나가는 것입니다.
딥러닝의 학습 과정을 다시 정리하며
2장에서는 딥러닝이 데이터를 보고 실제로 어떻게 배우는지 자세히 살펴보았습니다. 딥러닝 모델은 손실 함수(Loss Function)를 사용해서 자신의 예측이 얼마나 틀렸는지를 숫자로 확인합니다. 그리고 이 틀린 점을 고치기 위해 경사 하강법(Gradient Descent)과 역전파(Backpropagation)를 이용해서 기준(파라미터)을 조금씩 조정해 나갑니다. 이러한 과정이 반복되면서 모델은 점점 더 정확한 예측을 할 수 있게 됩니다.
또한, 신경망이 더 깊어질수록 생길 수 있는 문제들도 함께 알아봤습니다. 예를 들어, 기울기가 너무 작아져서 학습이 어려워지는 기울기 소실 문제(Vanishing Gradient)나, 반대로 기울기가 너무 커지는 기울기 폭주 문제(Exploding Gradient)가 있었습니다. 이런 문제를 해결하기 위해 층을 건너뛰어 지름길을 만드는 잔차 연결(Skip Connection)이라는 구조도 배웠습니다.
다음 장에서는 딥러닝이라는 큰 건물이 어떻게 만들어지는지, 그 구조를 이루는 벽돌 하나하나를 살펴보려 합니다. 가장 간단한 기본 벽돌인 선형 회귀(Linear Regression)부터 시작해서, 복잡한 패턴을 그릴 수 있게 도와주는 활성화 함수(Activation Function), 여러 층을 겹쳐 쌓아 더 높은 건물을 만드는 방법, 그리고 이미지나 언어처럼 다양한 재료를 다룰 수 있도록 발전해 온 신경망의 구조까지 천천히 차례대로 들여다보겠습니다..
[저작권자ⓒ META-X. 무단전재-재배포 금지]