지노랩 /JinoLab
21. Deep Learning을 위한 미분(calculus) 본문
1. 미분이 뭐예요?
- 함수 f(x)의 미분은 “함수 값이 얼마나 빨리 변하는지”를 나타내는 수학적 도구예요.
- 기하학적으로는 접선의 기울기를 뜻해요.

- 즉, x를 아주 조금 Δx 만큼 바꿨을 때, f가 얼마나 변하는지( Δf )를 Δx로 나누면, 그 비율이 미분값이에요.
2. 주요 미분 공식
- 상수배 법칙

상수 cc는 그대로 밖으로 나온다!
- 거듭제곱 법칙 (Power Rule)

- 합의 법칙

- 차의 법칙 (합과 같음)

- 곱의 법칙 (Product Rule)

- 체인 룰 (Chain Rule)


3. 접선 기울기 계산 예시
예: f(x) = 3x 일 때, x=2에서 기울기는 항상 3! (직선이라 일정)
예: g(x) = x^2 일 때, g′(x) = 2x 이므로, x = 3에서 기울기는 2⋅3 = 6
4. C 언어로 “수치 미분(Numerical Derivative)” 구현하기
실제 딥러닝 라이브러리는 자동으로 미분을 계산해 주지만, 개념을 잡기 위해 작은 변화 Δx\Delta x 를 이용한 근사 미분 코드를 만들어 봅시다.
#include <stdio.h>
// 예시 함수 1: f(x) = 3x
double f1(double x) {
return 3.0 * x;
}
// 예시 함수 2: f(x) = x^2
double f2(double x) {
return x * x;
}
// 예시 함수 3: h(x) = (3x + 2x^2)^2
double h(double x) {
double u = 3.0*x + 2.0*x*x;
return u * u;
}
// 수치 미분: (f(x+h) - f(x)) / h
double numerical_derivative(double (*func)(double), double x) {
double h = 1e-6; // 매우 작은 값
return (func(x + h) - func(x)) / h;
}
int main(void) {
double x;
// f1 미분
x = 2.0;
printf("f1(x)=3x, x=%.2f -> f'(x)≈%.6f (정답=3.0)\n",
x, numerical_derivative(f1, x));
// f2 미분
x = 3.0;
printf("f2(x)=x^2, x=%.2f -> f'(x)≈%.6f (정답=2x=6.0)\n",
x, numerical_derivative(f2, x));
// h 미분 (체인룰 예시)
x = 1.0;
printf("h(x)=(3x+2x^2)^2, x=%.2f -> h'(x)≈%.6f (정답=2u·u' = 2*(3+2)* (3+4*1) = 2*5*7=70)\n",
x, numerical_derivative(h, x));
return 0;
}
어떻게 동작하나요?
- 작은 h (10^-6)를 더한 뒤 함수 값을 구하고, 원래 값과 빼서 Δf를 얻어요.
- Δf를 Δx로 나누면 미분값을 근사할 수 있습니다.
- 실제 수학 식으로 미분한 결과(3.0, 6.0, 70.0)와 아주 가까운 값을 확인할 수 있어요.
마무리
- 딥러닝에서 역전파(Backpropagation) 와 경사하강법(Gradient Descent) 에는 이 미분 개념이 숨어 있어요.
- 오늘 배운 미분 공식을 잘 이해하면, 다음 시간에 “오차를 줄이는 방향”을 계산할 때 수식이 더 명확하게 다가올 거예요!
'프로그래밍 > C언어를 이용한 Deep Learning' 카테고리의 다른 글
| 20. “근육량 예측 신경망”의 순전파(Forward Propagation) 과정을 C 언어로 (2) | 2025.08.15 |
|---|---|
| 19. 활성화 함수(Activation Function) (3) | 2025.08.14 |
| 18. 은닉층·출력층 가중치 행렬 (2) | 2025.08.13 |
| 17. 데이터 정규화(Normalization) 과정 (0) | 2025.08.12 |
| 16. 헬스장 데이터(운동 시간·휴식 시간 → 근육량 증가) Forward Propagation (2) | 2025.08.11 |