파이썬 라이브러리 없이 C++로 선형회귀부터 직접 구현하며 딥러닝 수학을 이해하는 연재의 전체 지도입니다. 각 편의 주제와 읽는 순서를 정리했습니다.
딥러닝 입문서를 펼치면 대부분 파이썬과 넘파이로 시작합니다. 몇 줄이면 모델이 학습되고 그래프가 그려지지만, 그 몇 줄 안에서 실제로 어떤 계산이 일어나는지는 잘 보이지 않습니다. 이 딥러닝 수학 C++ 구현 연재는 그 계산을 C++로 한 줄씩 직접 써 보면서 딥러닝의 수학을 이해하는 기록입니다.
한 줄 답변
이 연재는 외부 라이브러리 없이 C++17만으로 선형회귀를 구현하고, 실제로 실행한 숫자와 그래프를 근거로 경사하강법·학습률·역전파·미니배치·Feature Scaling을 차례로 설명합니다. 수식을 외우는 대신 “직접 돌려 보니 이렇게 나왔다”를 확인하면서 딥러닝 학습의 기본 구조를 몸으로 익히는 것이 목표입니다.
이 글에서 바로 답하는 것
- 딥러닝 수학을 왜 C++로 구현해 보는지
- 연재 12편이 어떤 순서로 이어지는지
- 각 편을 읽을 때 무엇을 준비하면 되는지
- 처음 읽는 분이 어디서부터 시작하면 좋은지
딥러닝 수학 C++로 구현하는 이유
파이썬으로 딥러닝을 배우면 편리한 만큼 가려지는 부분이 생깁니다. 배열끼리 곱하면 알아서 크기를 맞춰 주고, 미분은 프레임워크가 대신 계산하고, 그래프는 한 줄로 그려집니다. 덕분에 빨리 결과를 볼 수 있지만, 모델이 왜 학습되는지 묻는 순간 설명이 막히기 쉽습니다.
C++로 옮기면 그런 편의 기능이 하나도 없습니다. 배열 길이가 다르면 어떻게 계산할지 직접 정해야 하고, 미분값은 손으로 유도한 식을 그대로 코드에 적어야 하고, 난수 하나도 어떤 엔진에서 뽑을지 정해야 합니다. 번거롭지만 바로 그 번거로움 덕분에 “학습이 일어나는 계산”이 숨김없이 드러납니다.
이 연재에서 C++를 쓰는 이유는 C++가 딥러닝에 더 좋은 언어라서가 아닙니다. 실무에서는 여전히 파이썬과 프레임워크를 쓰는 것이 맞습니다. 다만 원리를 이해하는 단계에서는 모든 계산을 직접 써야 하는 언어가 좋은 선생님이 됩니다.
이 연재가 다른 점
1. 숫자는 모두 직접 실행한 결과입니다
글에 나오는 학습된 값, 반복 횟수, loss 값은 모두 실제로 실행해서 얻은 결과입니다. 원본 C++ 예제의 학습 기록은 같은 계산을 파이썬으로 다시 해서 상대오차 10⁻¹⁰ 아래로 일치하는 것을 확인했고, 본문에 실은 C++ 코드와 파이썬 코드는 둘 다 실행해 같은 출력이 나오는 것을 확인했습니다.
2. 그래프도 실행 결과로 그렸습니다
그림은 C++ 예제가 CSV 파일로 저장한 학습 기록이나, 본문 코드와 같은 계산을 파이썬으로 다시 실행한 결과로 그렸습니다. 그래서 그림 속 곡선과 본문 숫자가 서로 어긋나지 않습니다.
3. C++와 파이썬 코드를 나란히 보여 드립니다
C++로 구현했지만, 같은 계산을 파이썬 코드로도 함께 실었습니다. 파이썬에 익숙한 분은 아는 코드와 비교하면서 C++에서 무엇이 더 드러나는지 볼 수 있고, C++ 개발자는 딥러닝 자료에서 흔히 보는 파이썬 코드를 읽는 연습을 할 수 있습니다.
4. 수식은 꼭 필요한 만큼만 씁니다
각 편에서 핵심 수식은 한두 개만 다룹니다. 수식이 나오면 바로 아래에 그 수식이 코드에서 어떤 한 줄이 되는지 함께 보여 드립니다.
연재에 자주 나오는 딥러닝 용어
연재 전체에서 반복해서 쓰는 용어입니다. 각 용어가 실제 계산에서 무엇을 뜻하는지는 1편에서 실험과 함께 자세히 설명합니다.
| 용어 | 한 줄 설명 |
|---|---|
| 파라미터 (parameter) | 학습으로 바뀌는 모델 안의 값 |
| 가중치 (weight) | 입력에 곱해지는 파라미터. 직선이라면 기울기 |
| 바이어스 (bias) | 입력과 상관없이 더해지는 파라미터. 직선이라면 절편 |
| 손실 (loss) / 비용 (cost) | 샘플 하나의 오차 / 여러 샘플 오차의 평균 |
| 기울기 (gradient) | 파라미터를 바꿀 때 loss가 변하는 방향과 크기 |
| 경사하강법 (gradient descent) | 기울기 반대 방향으로 파라미터를 조금씩 옮기는 학습 방법 |
| 학습률 (learning rate) | 한 번에 얼마나 크게 옮길지 정하는 값 |
| 에폭 (epoch) | 전체 데이터를 한 바퀴 다 써서 학습하는 단위 |
| 배치 (batch) | 한 번 갱신할 때 함께 쓰는 샘플 묶음 |
| 역전파 (backpropagation) | 복잡한 식의 기울기를 계산 그래프를 거꾸로 따라가며 구하는 방법 |
연재 전체 지도
연재는 크게 두 단계로 나뉩니다. 1단계는 기울기 하나만 있는 가장 단순한 모델 ŷ = θx이고, 2단계는 여기에 절편(bias)을 더한 ŷ = θ1·x + θ0입니다. 파라미터가 하나에서 둘로 늘어나는 것만으로도 등고선, 지그재그 경로, Feature Scaling 같은 새로운 문제가 생깁니다.
| 편 | 제목 | 핵심 질문 |
|---|---|---|
| 0 | 연재 로드맵 (이 글) | 무엇을 어떤 순서로 배우나 |
| 1 | 딥러닝 선형회귀부터 시작하는 이유 3가지 | 왜 하필 선형회귀부터 시작하나 |
| 2 | 딥러닝 경사하강법 갱신식, 미분 한 번으로 유도 (공개 예정) | θ ← θ + 2αx(y − ŷ)는 어디서 나오나 |
| 3 | 딥러닝 학습률, 수렴·진동·발산 가르는 기준 (공개 예정) | 왜 어떤 학습률은 수렴하고 어떤 학습률은 발산하나 |
| 4 | 딥러닝 역전파, 계산 그래프 노드 5개로 이해 (공개 예정) | 복잡한 식의 미분을 어떻게 나눠서 계산하나 |
| 5 | 딥러닝 데이터 분포가 학습을 망치는 이유 (공개 예정) | 입력값의 평균과 퍼짐이 학습에 왜 영향을 주나 |
| 6 | 딥러닝 미니배치, Batch·SGD 차이 총정리 (공개 예정) | 샘플을 몇 개씩 묶어 학습해야 하나 |
| 7 | 딥러닝 bias 하나 추가하면 달라지는 것 (공개 예정) | 파라미터가 둘이 되면 무엇이 달라지나 |
| 8 | 딥러닝 cost 등고선으로 보는 학습 지형 (공개 예정) | 오차 지형은 어떤 모양인가 |
| 9 | 딥러닝 경사하강법 경로, 왜 지그재그일까 (공개 예정) | 학습 경로는 왜 지그재그로 휘나 |
| 10 | 딥러닝 Feature Scaling 안 하면 생기는 일 (공개 예정) | 입력 크기만 바꿨는데 왜 학습이 살아나나 |
| 11 | 딥러닝 C++ 구현, 파이썬에서 옮기며 배운 것 (공개 예정) | 넘파이 없이 같은 결과를 내려면 무엇이 필요하나 |
1~6편은 1단계 모델, 7~10편은 2단계 모델을 다룹니다. 11편은 개발자 관점에서 구현 과정 자체를 정리한 글입니다. 이후에는 다변수 선형회귀, 다항회귀와 과적합, 로지스틱 회귀, Cross Entropy로 이어지는 2차 연재를 준비하고 있습니다.
각 글은 이렇게 구성됩니다
모든 편은 같은 순서로 읽을 수 있게 맞췄습니다.
- 한 줄 답변: 그 편의 결론을 먼저 말합니다.
- 직관 설명: 수식 없이 그림과 비유로 설명합니다.
- 핵심 수식: 꼭 필요한 식 한두 개만 다룹니다.
- C++·파이썬 코드: 수식이 코드에서 어떻게 되는지 두 언어로 나란히 보여 줍니다.
- 실행 결과: 실제로 돌려서 나온 숫자와 그래프를 봅니다.
- 흔한 오해: 결과를 잘못 읽기 쉬운 부분을 짚습니다.
편마다 그 글에서 새로 쓰는 용어를 표로 먼저 정리하고, 끝에는 직접 해 볼 수 있는 작은 실습을 붙였습니다.
읽기 전에 준비하면 좋은 것
- 수학: 중학교 수준의 일차함수와 이차함수, 그리고 “기울기”라는 말의 뜻이면 충분합니다. 미분은 필요한 만큼 본문에서 다시 설명합니다.
- C++ 또는 파이썬: 둘 중 하나로 반복문과 함수를 읽을 수 있으면 됩니다. C++는 4편의 간단한 노드 클래스와 11편의 템플릿 함수 하나를 빼면 함수와 반복문만 씁니다.
- 실행 환경: C++17을 지원하는 컴파일러면 됩니다. 저는 Windows에서 MSVC와 VS Code를 사용했습니다. 외부 라이브러리는 쓰지 않았고, 결과는 CSV로 저장되므로 엑셀로도 그래프를 그릴 수 있습니다. 파이썬 코드는 1편만 NumPy를 쓰고, 나머지는 표준 라이브러리만으로 실행됩니다.
코드를 직접 실행하지 않고 글만 읽어도 흐름을 따라갈 수 있도록 실행 결과를 본문에 모두 실었습니다.
처음이라면 이 순서로 읽으세요
- 딥러닝 학습 원리가 처음인 분: 1편 → 2편 → 3편 순서로 읽으면 “모델이 스스로 값을 찾아간다”는 말의 의미가 잡힙니다.
- 역전파가 늘 헷갈렸던 분: 2편으로 갱신식을 확인한 뒤 4편으로 바로 넘어가도 됩니다.
- 학습이 잘 안 되는 이유가 궁금한 분: 3편(학습률)과 10편(Feature Scaling)을 먼저 보시면 실전에서 자주 마주치는 문제를 빠르게 이해할 수 있습니다.
- C++ 개발자: 11편에서 구현 구조를 먼저 보고 1편부터 읽어도 좋습니다.
학습 출처와 작성 원칙
이 연재는 패스트캠퍼스 「수학적으로 접근하는 딥러닝」 강의로 공부하면서, 실습 내용을 C++로 직접 다시 구현한 과정을 정리한 것입니다. 강의 자료의 슬라이드나 코드 원문은 싣지 않습니다. 글에 나오는 코드, 그래프, 숫자는 모두 제가 직접 작성하고 실행한 결과입니다.
틀린 부분이나 더 쉬운 설명 방법이 있다면 댓글로 알려 주세요. 연재를 진행하면서 계속 고쳐 나가겠습니다.
지금 바로 시작하기
첫 글에서는 딥러닝 공부를 왜 선형회귀에서 시작하는지, 그리고 기울기 하나짜리 모델이 실제로 값을 찾아가는 모습을 숫자로 확인합니다.
