지노랩 /JinoLab
10. 비교(compare) / 오차(error) 계산 본문
1. 학습 과정의 세 단계
- 예측(Predict)
입력값과 현재 가중치를 이용해 모델이 출력을 생성 - 비교(Compare)
모델 출력(예측값)과 실제 관측값(정답)을 비교해 오차(error) 를 계산 - 학습(Learn)
오차를 줄이도록 가중치를 조정 (경사하강법 등)
이번 글에서는 ❷ 비교 단계, 즉 오차 계산에 집중합니다.
2. 오차(Error)란?
- 예측값 y^
- 실제값(정답, 레이블) y
- 이 둘의 차이를 오차(error) 라고 부르며, 학습의 핵심은 이 오차를 최소화하는 가중치 w를 찾는 것
3. 오차 함수(Loss Function)
3.1 제곱 오차(Squared Error)

- 절댓값 대신 제곱을 쓰는 이유
- 부호(양수·음수) 상관없이 오차를 양수로 취급
- 미분 시 연속·매끄러운 함수가 되어, 경사하강법 등 최적화 기법 적용 가능
3.2 평균 제곱 오차(Mean Squared Error, MSE)

- NN개의 샘플에 대해 오차를 평균내면, 배치 학습(batch training) 시 사용
4. 단일 퍼셉트론 예제
4.1 예제 파라미터
- 입력 x=25x = 25
- 가중치 w=0.8w = 0.8
- 실제값 y=26y = 26
4.2 오차 계산 과정
- 예측

- 차이(Residual)

- 제곱 오차

이 값(36)이 현재 모델의 오차이며, 학습 단계에서 이 값을 줄이도록 ww를 업데이트하게 됩니다.
5. 의사코드(Pseudocode)
function compute_error(x, w, y):
y_pred = x * w
e = y_pred - y
E = e * e # 제곱 오차
return E
6. C 언어 예제 코드
#include <stdio.h>
/**
* @brief 단일 입력·단일 출력용 제곱 오차 계산
* @param x 입력값
* @param w 가중치
* @param y_true 실제값(정답)
* @return 제곱 오차 (error)
*/
double compute_squared_error(double x, double w, double y_true) {
double y_pred = x * w; // 예측
double diff = y_pred - y_true; // 차이
return diff * diff; // 제곱 오차
}
int main(void) {
double x = 25.0;
double w = 0.8;
double y_true = 26.0;
double error = compute_squared_error(x, w, y_true);
printf("입력 x = %.1f, 가중치 w = %.2f, 실제 y = %.1f\n", x, w, y_true);
printf("예측값 y_pred = %.1f\n", x * w);
printf("제곱 오차 E = %.1f\n", error);
return 0;
}
빌드 & 실행 예시:
gcc -o compute_error main.c
./compute_error
입력 x = 25.0, 가중치 w = 0.80, 실제 y = 26.0
예측값 y_pred = 20.0
제곱 오차 E = 36.0
7. 다음 단계: 학습(Learn)
- 경사하강법(Gradient Descent) 을 이용해,

방식으로 가중치 조정

- 학습률 η를 적절히 설정해 오차가 점차 줄어들도록 반복 학습 수행
'프로그래밍 > C언어를 이용한 Deep Learning' 카테고리의 다른 글
| 12. 학습(Learn) / 단일 입력·단일 출력 퍼셉트론에서 오차를 줄이기 위해 가중치 (3) | 2025.08.07 |
|---|---|
| 11. 텐서(Tensor) 기본 개념 (2) | 2025.08.06 |
| 9. 은닉층(hidden layer) (4) | 2025.08.04 |
| 8. 다중 입력·다중 출력(Multiple Input, Multiple Output, MIMO) 퍼셉트론 (2) | 2025.08.03 |
| 7. 다중 입력·단일 출력 퍼셉트론을 C 언어로 (1) | 2025.08.02 |