Backend
home
🧮

프로그래밍과 AI를 위한 수학 기초 — 개발자 수학 로드맵

태그
Math
게시일
2026/04/18
최종 편집 일시
2026/04/18 12:07
1 more property
수학은 AI와 알고리즘의 언어임. 겁먹을 필요 없고, 개발자 관점에서 '왜 쓰이는가'를 먼저 잡으면 생각보다 빠르게 익힐 수 있음. 이 글은 처음 수학을 공부하는 개발자를 위한 빌드업 로드맵임.

1. 왜 개발자에게 수학이 필요한가

수학을 몰라도 코드를 짤 수 있음. 하지만 다음 상황에서 반드시 막히게 됨.
알고리즘 설계: 시간 복잡도 O(n log n)이 왜 O(n²)보다 빠른지 이해하려면 로그(log) 개념이 필요함.
머신러닝 / 딥러닝: 모델이 학습되는 원리(경사하강법), 예측 오류를 줄이는 방법(손실 함수), 데이터를 표현하는 방법(벡터·행렬) 모두 수학임.
그래픽스 / 게임 엔진: 회전·이동·투영 변환은 행렬 곱셈으로 구현됨.
암호학 / 보안: RSA 암호화는 소수론과 모듈러 산술 위에 세워짐.
데이터 분석: 평균, 분산, 상관관계, 정규분포를 모르면 데이터를 해석할 수 없음.
수학을 공부하는 목적은 수식을 외우는 게 아니라, 개념의 구조를 이해해서 코드로 구현하거나 논문을 읽을 수 있는 역량을 키우는 것임.

2. 수학 표기법 읽는 법

논문이나 교재를 보면 기호가 가득함. 먼저 기호에 익숙해지는 것이 첫 번째 관문.

2-1. 자주 쓰는 기호

기호
영어 읽기
의미
예시
Σ
Sigma
합산 (for loop의 수학 버전)
Σᵢ₌₁ⁿ i = 1+2+…+n
Π
Pi
곱셈
Πᵢ₌₁ⁿ i = n!
For all
모든 ~ 에 대해
∀x ∈ ℝ, x² ≥ 0
There exists
~가 존재한다
∃x : x² = 4
Element of
~의 원소
3 ∈ {1,2,3}
Subset of
부분집합
{1,2} ⊆ {1,2,3}
Maps to
함수 정의역 → 치역
f: ℝ → ℝ
Nabla / del
그래디언트 (편미분 벡터)
∇f
‖v‖
Norm
벡터의 크기(길이)
‖[3,4]‖ = 5
Infinity
무한대
limₓ→∞ 1/x = 0

2-2. Σ (시그마) — 개발자 관점

# 수학: Σᵢ₌₁ⁿ i # 코드로 읽으면 그냥 for loop def sigma(n): total = 0 for i in range(1, n + 1): total += i return total # 또는 result = sum(range(1, n + 1)) # Σᵢ₌₁ⁿ xᵢ² → 각 원소를 제곱해서 다 더하기 x = [1, 2, 3, 4, 5] result = sum(xi**2 for xi in x) # = 1+4+9+16+25 = 55
Python
복사

2-3. 함수 표기법

A = 정의역 (Domain): 입력값의 집합
B = 공역 (Codomain): 출력값이 올 수 있는 집합
f(A) = 치역 (Range/Image): 실제 출력값의 집합 (공역의 부분집합)
# f: ℤ → ℤ, f(x) = x² # 정의역: 정수 전체 # 공역: 정수 전체 # 치역: 0, 1, 4, 9, 16, ... (음수는 나올 수 없음) def f(x: int) -> int: return x ** 2
Python
복사

3. 집합론 기초

집합(Set)은 수학 전체의 언어임. 데이터베이스의 테이블, 프로그래밍의 타입 시스템, 확률론 모두 집합 위에 세워져 있음.

3-1. 집합 연산

A = {1, 2, 3, 4} B = {3, 4, 5, 6} # 합집합 (Union): A ∪ B — A 또는 B에 있는 원소 union = A | B # {1, 2, 3, 4, 5, 6} # 교집합 (Intersection): A ∩ B — A와 B 모두에 있는 원소 intersect = A & B # {3, 4} # 차집합 (Difference): A \ B — A에는 있지만 B에는 없는 원소 diff = A - B # {1, 2} # 대칭차집합 (Symmetric Difference): A △ B — 한쪽에만 있는 원소 sym_diff = A ^ B # {1, 2, 5, 6} # 부분집합 확인 print({1, 2} <= A) # True (⊆) print({1, 2} < A) # True (⊊, 진부분집합)
Python
복사

3-2. 카디널리티 (Cardinality) — 집합의 크기

A = {1, 2, 3, 4, 5} print(len(A)) # |A| = 5 # 유한집합: len()으로 셀 수 있음 # 무한집합: 자연수 ℕ, 정수 ℤ, 실수 ℝ # |ℕ| < |ℝ| — 실수가 자연수보다 '더 큰' 무한 (칸토어의 대각선 논법)
Python
복사

3-3. 실무 연결 — SQL의 집합 연산

-- UNION : A ∪ B SELECT id FROM table_a UNION SELECT id FROM table_b; -- INTERSECT : A ∩ B SELECT id FROM table_a INTERSECT SELECT id FROM table_b; -- EXCEPT : A \ B SELECT id FROM table_a EXCEPT SELECT id FROM table_b;
SQL
복사

4. 함수의 성질 — 단사·전사·전단사

AI와 암호학에서 핵심적으로 쓰이는 개념.

4-1. 세 가지 함수 유형

단사함수 (Injective / One-to-One): 서로 다른 입력은 반드시 서로 다른 출력을 가짐.
# f(x) = 2x 는 단사함수 # f(1)=2, f(2)=4, f(3)=6 → 출력이 겹치지 않음 # 역함수가 존재하려면 단사여야 함 # 암호화 함수는 반드시 단사여야 복호화가 가능함 def is_injective(func, domain): outputs = [func(x) for x in domain] return len(outputs) == len(set(outputs)) # 중복 없으면 단사
Python
복사
전사함수 (Surjective / Onto): 공역의 모든 원소가 최소 하나의 입력에 의해 커버됨.
# f: {1,2,3} → {a,b}에서 # f(1)=a, f(2)=a, f(3)=b → 전사 (a,b 모두 커버) # f(1)=a, f(2)=a, f(3)=a → 전사 아님 (b 미커버) # 해시 함수(Hash Function): # 무한한 입력 → 유한한 출력 → 전사지만 단사가 아님 (충돌 발생)
Python
복사
전단사함수 (Bijective): 단사 + 전사. 입력과 출력이 1:1 완전 대응.
# 전단사이면 역함수가 유일하게 존재함 # 예: f(x) = x + 1 → f⁻¹(y) = y - 1 # 암호화에서 전단사: # 평문 → 암호문 (전단사) → 역함수로 복호화 가능 # RSA, AES 같은 대칭/비대칭 암호화 모두 전단사 기반
Python
복사

5. 선형대수 입문 — 벡터와 행렬

AI의 핵심 도구. 신경망의 모든 연산은 행렬 곱셈으로 표현됨.

5-1. 벡터 (Vector)

import numpy as np # 벡터: 방향과 크기를 가진 수의 배열 # 실무에서는 '데이터 포인트 하나'를 벡터로 표현함 # 예: 사용자 [나이=25, 구매횟수=3, 평점=4.5] → [25, 3, 4.5] v = np.array([3, 4]) # 2차원 벡터 u = np.array([1, 2]) # 벡터 덧셈: 성분별 덧셈 print(v + u) # [4, 6] # 스칼라 곱: 벡터 크기 조절 print(2 * v) # [6, 8] # 벡터의 크기 (노름, Norm): ||v|| = √(3²+4²) = 5 norm = np.linalg.norm(v) print(norm) # 5.0 # 내적 (Dot Product): v · u = 3×1 + 4×2 = 11 # 두 벡터의 유사도를 측정하는 데 사용 dot = np.dot(v, u) print(dot) # 11 # 코사인 유사도: 두 벡터가 얼마나 같은 방향인지 (AI 추천 시스템) cosine_similarity = np.dot(v, u) / (np.linalg.norm(v) * np.linalg.norm(u)) print(cosine_similarity) # 0.9838... (1에 가까울수록 유사)
Python
복사

5-2. 행렬 (Matrix)

import numpy as np # 행렬: 벡터를 행(row)으로 쌓은 2D 배열 # 신경망 레이어 하나 = 입력 벡터 × 가중치 행렬 + 편향 A = np.array([[1, 2], [3, 4]]) B = np.array([[5, 6], [7, 8]]) # 행렬 덧셈: 같은 위치 성분끼리 print(A + B) # [[6, 8], # [10, 12]] # 행렬 곱셈 (Matrix Multiplication): 핵심 연산 # C[i][j] = A의 i번째 행 · B의 j번째 열의 내적 print(A @ B) # np.matmul(A, B)와 동일 # [[19, 22], # [43, 50]] # 전치행렬 (Transpose): 행과 열 교환 print(A.T) # [[1, 3], # [2, 4]] # 신경망 순전파 예시 # 입력 x (배치 크기 4, 특성 3) x = np.random.randn(4, 3) # (4, 3) 행렬 # 가중치 W (특성 3 → 은닉 5) W = np.random.randn(3, 5) # (3, 5) 행렬 # 편향 b b = np.zeros(5) # (5,) 벡터 # 순전파: z = xW + b z = x @ W + b # (4, 5) 행렬 print(z.shape) # (4, 5)
Python
복사

5-3. 행렬식 & 역행렬 개념

import numpy as np A = np.array([[2, 1], [5, 3]]) # 행렬식 (Determinant): det(A) # det(A) ≠ 0 이면 역행렬 존재 (선형 독립) det = np.linalg.det(A) print(f"det(A) = {det:.1f}") # 1.0 # 역행렬 (Inverse): A⁻¹, A × A⁻¹ = I (단위행렬) A_inv = np.linalg.inv(A) print(A_inv) # [[ 3, -1], # [-5, 2]] # 연립방정식 Ax = b 풀기 # 2x + y = 4 # 5x + 3y = 7 b = np.array([4, 7]) x = np.linalg.solve(A, b) print(x) # [5. -6.] → x=5, y=-6
Python
복사

6. 확률과 통계 기초

AI 모델의 출력은 '확률'임. 확률을 모르면 모델 결과를 해석할 수 없음.

6-1. 확률의 기본 개념

import numpy as np # 확률 P(A): 사건 A가 일어날 가능성 (0 ≤ P(A) ≤ 1) # P(A) + P(A의 여사건) = 1 # 조건부 확률: P(A|B) = P(A∩B) / P(B) # "B가 주어졌을 때 A의 확률" # 예: 스팸 메일(B)이 주어졌을 때 '무료'(A)가 포함될 확률 # 베이즈 정리: P(A|B) = P(B|A) × P(A) / P(B) # 머신러닝에서 사후 확률(Posterior) 계산에 핵심 # 스팸 필터, 의료 진단, 자연어처리에 광범위하게 활용 # 시뮬레이션: 동전 1000번 던지기 flips = np.random.choice(['H', 'T'], size=1000) heads = np.sum(flips == 'H') print(f"앞면: {heads}/1000 = {heads/1000:.3f}") # 약 0.5
Python
복사

6-2. 핵심 통계량

import numpy as np data = np.array([2, 4, 4, 4, 5, 5, 7, 9]) # 평균 (Mean): 데이터의 중심 mean = np.mean(data) # 5.0 # 분산 (Variance): 데이터가 평균에서 얼마나 퍼져있는지 # Var(X) = E[(X - μ)²] = Σ(xᵢ - μ)² / n var = np.var(data) # 4.0 # 표준편차 (Standard Deviation): 분산의 제곱근, 원래 단위와 동일 std = np.std(data) # 2.0 # 중앙값 (Median): 정렬 후 가운데 값 (이상치에 강건) median = np.median(data) # 4.5 print(f"평균: {mean}, 분산: {var}, 표준편차: {std}, 중앙값: {median}") # 정규화 (Normalization) vs 표준화 (Standardization) # 머신러닝 전처리에서 필수 # Min-Max 정규화: 0~1 사이로 조정 normalized = (data - data.min()) / (data.max() - data.min()) print(normalized) # Z-score 표준화: 평균=0, 표준편차=1 로 조정 standardized = (data - mean) / std print(standardized)
Python
복사

6-3. 확률분포

import numpy as np import random # 베르누이 분포: 결과가 0 또는 1인 실험 # P(X=1) = p, P(X=0) = 1-p # 예: 이진 분류 모델의 출력 # 이항 분포: n번 베르누이 시행 중 성공 횟수 # 예: 100개 메일 중 스팸 개수 trials, p = 100, 0.3 results = np.random.binomial(trials, p, size=1000) print(f"평균 스팸 수: {results.mean():.1f}") # ≈ 30 # 정규분포 (가우시안): N(μ, σ²) # 자연현상 대부분이 정규분포를 따름 # 딥러닝 가중치 초기화 시 사용 weights = np.random.normal(loc=0, scale=0.01, size=(100, 100)) print(f"가중치 평균: {weights.mean():.4f}, 표준편차: {weights.std():.4f}") # 소프트맥스: 다중 클래스 확률로 변환 (분류 모델 출력층) def softmax(x): exp_x = np.exp(x - np.max(x)) # 오버플로 방지 return exp_x / exp_x.sum() logits = np.array([2.0, 1.0, 0.1]) probs = softmax(logits) print(probs) # [0.659, 0.242, 0.099] print(probs.sum()) # 1.0
Python
복사

7. 미적분 핵심 — 경사하강법의 수학

딥러닝 학습의 본질은 미분임. 복잡한 미적분을 다 알 필요는 없고, 핵심만 이해하면 됨.

7-1. 도함수 (Derivative) — 변화율

# f(x) = x² → f'(x) = 2x # f'(x): x에서 함수의 기울기 (순간 변화율) # 수치 미분: 아주 작은 h를 이용해 근사 def numerical_diff(f, x, h=1e-5): return (f(x + h) - f(x - h)) / (2 * h) f = lambda x: x ** 2 df = lambda x: 2 * x # 해석적 미분 x = 3.0 print(f"수치 미분: {numerical_diff(f, x):.5f}") # ≈ 6.0 print(f"해석 미분: {df(x)}") # 6.0 # 연쇄 법칙 (Chain Rule): 합성함수 미분 # d/dx f(g(x)) = f'(g(x)) × g'(x) # 딥러닝 역전파(Backpropagation)의 수학적 기반
Python
복사

7-2. 편미분 (Partial Derivative) — 다변수 함수

import numpy as np # 편미분: 여러 변수 중 하나만 변화시켰을 때의 변화율 # ∂f/∂x: x에 대한 편미분 (다른 변수는 상수 취급) # f(x, y) = x² + 2xy + y² # ∂f/∂x = 2x + 2y # ∂f/∂y = 2x + 2y def f(x, y): return x**2 + 2*x*y + y**2 def partial_x(x, y, h=1e-5): return (f(x + h, y) - f(x - h, y)) / (2 * h) def partial_y(x, y, h=1e-5): return (f(x, y + h) - f(x, y - h)) / (2 * h) x, y = 2.0, 3.0 print(f"∂f/∂x = {partial_x(x, y):.2f}") # 2×2 + 2×3 = 10.0 print(f"∂f/∂y = {partial_y(x, y):.2f}") # 2×2 + 2×3 = 10.0
Python
복사

7-3. 그래디언트와 경사하강법

import numpy as np # 그래디언트(∇f): 모든 편미분을 벡터로 모은 것 # ∇f = [∂f/∂x₁, ∂f/∂x₂, ..., ∂f/∂xₙ] # 그래디언트 방향 = 함수가 가장 빠르게 증가하는 방향 # 경사하강법 (Gradient Descent): 손실을 최소화하는 파라미터 탐색 # θ ← θ - α × ∇L(θ) # θ: 파라미터, α: 학습률(learning rate), L: 손실함수 def gradient_descent_demo(): # f(x) = x² - 4x + 4 = (x-2)² → 최솟값: x=2 def f(x): return x**2 - 4*x + 4 def df(x): return 2*x - 4 # 해석적 그래디언트 x = 10.0 # 시작점 alpha = 0.1 # 학습률 for step in range(30): grad = df(x) x = x - alpha * grad # 그래디언트 반대 방향으로 이동 if step % 5 == 0: print(f"step {step:2d}: x = {x:.4f}, f(x) = {f(x):.6f}") print(f"\n최솟값 근사: x = {x:.4f} (정답: x = 2.0)") gradient_descent_demo() # step 0: x = 8.8000, f(x) = 47.0000 # step 5: x = 4.2634, f(x) = 5.0416 # step 10: x = 2.8670, f(x) = 0.7516 # step 15: x = 2.2884, f(x) = 0.0832 # ... # 최솟값 근사: x = 2.0002 (정답: x = 2.0)
Python
복사

8. 수학 학습 로드맵

8-1. 영역별 우선순위

수학 영역
필요한 분야
우선순위
선형대수 (벡터·행렬)
머신러닝, 딥러닝, 그래픽스
최우선
확률·통계
머신러닝, 데이터 분석, 베이즈 학습
최우선
미적분 (편미분·그래디언트)
딥러닝 역전파, 최적화
최우선
이산 수학 (집합·논리·그래프)
알고리즘, 자료구조, DB
중요
정보 이론 (엔트로피·KL 발산)
딥러닝 손실함수, 압축
중요
수치 해석
시뮬레이션, 과학 컴퓨팅
심화
위상수학
딥러닝 이론 연구
심화

8-2. 단계별 학습 순서

8-3. 추천 학습 자료

선형대수: 3Blue1Brown "Essence of Linear Algebra" (YouTube, 무료)
미적분: 3Blue1Brown "Essence of Calculus" (YouTube, 무료)
확률·통계: StatQuest with Josh Starmer (YouTube, 무료)
종합 교재: Mathematics for Machine Learning (캠브리지 대학, PDF 무료 공개)
실습: Khan Academy → 개념 → NumPy로 직접 구현

요약

개념
한 줄 요약
실무 연결
Σ / 수열
for loop의 수학 표현
손실 함수 계산
집합론
데이터 분류와 관계의 언어
SQL 집합 연산, 타입 시스템
함수 성질
입출력 대응 구조
암호화, 해시함수 설계
벡터·내적
방향과 유사도
추천 시스템, 임베딩
행렬 곱셈
변환과 투영의 도구
신경망 레이어, 그래픽스
편미분·그래디언트
어떤 방향으로 바꿔야 최솟값인가
역전파, 경사하강법
확률분포
불확실성을 수로 표현
분류 모델 출력, 데이터 생성
수학 공부의 핵심은 수식 암기가 아니라 개념이 왜 필요한지, 코드로 어떻게 연결되는지를 체감하는 것임. 빌드업은 여기서 시작하고, 다음 글에서 각 영역을 더 깊이 파고들 예정.