예측 오차를 줄이며 직선 찾기
인공지능응용 · 6주차
이번 주 목표 · 데이터·예측·Loss(손실)·Gradient(기울기)·갱신이 어떻게 이어지는지 확인합니다.
실행: Colab에서 내 Drive에 사본을 저장한 뒤 Code Cell의 ▶ 또는 Shift+Enter로 위에서부터 실행하세요. ⟦직접 입력⟧ 표시가 있는 Text Cell은 더블클릭해서 수정합니다.
알고 있는 직선의 식에서 학습으로
직선의 기울기와 절편을 알면 입력값에서 출력값을 계산할 수 있습니다. 데이터로 모델을 만드는 일은 순서가 반대입니다. 입력과 측정 결과를 보고, 그 관계를 설명할 기울기와 절편을 찾습니다.
이번 실습에서는 문제를 단순하게 만들어 절편을 0으로 고정합니다. 따라서 찾을 값은 기울기 하나이고, 예측식은 입니다. 이 가정은 원점을 지나는 직선만 후보로 허용한다는 뜻입니다.
기울기를 바꾸면 각 데이터에서 예측 오차가 달라집니다. 이 오차들을 MSE Loss 하나로 모으고, Loss가 줄어드는 방향으로 기울기를 조금씩 바꾸는 것이 이번 학습 과정입니다. Gradient는 어느 방향으로 바꿀지 판단하는 데 사용합니다.
학습을 많이 한다고 모델의 가정까지 저절로 바뀌지는 않습니다. 원점을 지나지 않는 관계라면 기울기 하나만 조절해서 모든 오차를 없애기 어렵습니다. 실습에서는 직접 계산한 해와 반복 학습을 비교하며, 선택한 모델 안에서 무엇을 찾았는지 확인합니다.
예측 오차를 줄이는 학습 과정
Hypothesis는 입력으로부터 예측값을 구하는 함수이며, 코드에서는 model(x)로 계산합니다. 예측과 정답 사이의 오차를 나타내는 Cost로 MSE Loss를 사용합니다. nn.Linear가 Weight와 Bias를 저장하고, SGD가 Gradient의 반대 방향으로 값을 조금씩 바꿉니다. 이번 기본 예제는 Bias를 0으로 고정해 Weight 하나에 집중합니다. Bias를 없앤 것은 모든 Linear Regression의 규칙이 아니라 이 예제의 조건입니다.
1. 먼저 어떤 직선을 찾는지 정하기
일반적인 Linear Regression은 입니다. 이번 과제는 bias=False로 원점을 지나는 를 다룹니다. 같은 데이터에서도 b의 유무에 따라 풀고 있는 문제가 달라집니다.
먼저 어떤 직선을 찾는지 정하기
nn.Linear(1,1,bias=False)는 입력 특징 하나를 출력 하나로 바꿉니다. x와 y를 (N,1)로 맞추면 의도하지 않은 broadcasting을 예방할 수 있습니다.
2. 오차 여러 개를 하나의 Loss로
각 표본에서 예측과 정답의 차이를 제곱하고 평균한 값이 MSE입니다. loss가 작다는 것은 이 데이터에서 예측 오차가 작다는 뜻입니다. 학습 전 그래프와 loss를 남겨 비교 기준을 만드세요.
오차 여러 개를 하나의 Loss로
제곱을 사용하면 큰 오차가 더 크게 반영됩니다. 부호가 서로 반대인 오차들이 평균에서 상쇄되는 문제도 피합니다.
3. Gradient로 조금씩 갱신하기
먼저 model(x)로 예측하고 정답과 비교해 Loss를 구합니다. zero_grad로 이전 Gradient를 지운 뒤 backward로 현재 Loss의 Gradient를 구합니다. 마지막으로 step이 그 Gradient를 이용해 Weight를 바꿉니다. 바뀐 Weight로 다시 예측하는 것이 다음 학습의 시작입니다.
Gradient로 조금씩 갱신하기
Gradient는 기본적으로 누적됩니다. 일반적인 한 번의 Batch 갱신에서는 이전 Gradient를 지워야 합니다. Learning Rate(학습률) 비교는 같은 초기 파라미터와 같은 반복 횟수로 시작해야 공정합니다.
4. 반복 학습과 직접 계산 비교
선형 최소제곱 문제는 Pseudoinverse(의사역행렬)로도 풀 수 있습니다. pinv(A)@B와 반복 학습 결과를 비교하면 학습이 무엇을 찾는지 확인할 수 있습니다. 결과뿐 아니라 입력 행렬의 shape와 함께 예측값에서 정답을 뺀 값(Residual)도 기록하세요.
반복 학습과 직접 계산 비교
(AᵀA)⁻¹Aᵀ는 A의 열이 독립인 경우의 식입니다. pinv는 열이 독립이지 않은 경우에도 Pseudoinverse를 계산할 수 있습니다. Learning Rate·반복 횟수·수치 오차에 따라 반복 해가 직접 해와 조금 다를 수 있습니다.
학습 내용 확인
- 코드에 넣을 값은 무엇이며, 결과 배열의 각 행·열은 무엇을 뜻하나요? 물리량을 계산한다면 단위도 확인했나요?
- 조건을 하나 바꿨을 때 다시 실행해야 하는 부분을 찾을 수 있나요?
- 실행 결과가 예상과 맞나요? 다르다면 출력값이나 그래프를 보고 이유를 설명할 수 있나요?
실습 자료
- AI_Applications_Week06_LinearRegression.ipynbColab 노트북 미리보기 · Colab 노트북 다운로드
- L13_Linear_Regression.ipynbColab 노트북 미리보기 · Colab 노트북 다운로드