Python으로 배우는 경사 하강법과 역전파
학습이란 손실을 줄이도록 가중치를 조정하는 것입니다. 기울기(gradient)는 손실이 커지는 방향을 알려 주므로, 경사 하강법은 반대 방향으로 작은 걸음을 옮깁니다. 역전파는 연쇄 법칙을 사용해 모든 가중치의 기울기를 계산합니다.
쉬운 말로 이해하는 개념
학습이란 손실을 줄이도록 가중치를 조정하는 것입니다. 기울기(gradient)는 손실이 커지는 방향을 알려 주므로, 경사 하강법은 반대 방향으로 작은 걸음을 옮깁니다. 역전파는 연쇄 법칙을 사용해 모든 가중치의 기울기를 계산합니다.
경사 하강법으로 뉴런을 학습시킵니다. 연쇄 법칙으로 각 가중치가 손실에 주는 영향을 구한 뒤 내리막으로 한 걸음 나아갑니다.
핵심 아이디어
- 기울기는 각 가중치에 대한 손실의 경사입니다.
- 학습률은 보폭을 정합니다. 너무 크면 지나치고, 너무 작으면 느립니다.
- 역전파는 출력에서 첫 번째 층으로 거슬러 올라가며 연쇄 법칙을 적용합니다.
- 1 에포크는 전체 학습 데이터를 한 번 훑는 것입니다.
언제 사용하나요?
- 신경망과 AI 라이브러리 내부에서 무슨 일이 일어나는지 이해합니다.
- 해당 챌린지에서 직접 구현하기 전에 아이디어를 익힙니다.
- 머신러닝 강의, 면접, 프로젝트를 준비합니다.
직접 움직여 보기
재생을 누르면 학습이 시작됩니다. 직선이 점들에 가까워지는 동안 주황색 경로가 손실 지형을 따라 가장 낮은 점으로 내려갑니다.
예제 코드
# Train one neuron y = w * x + b to fit points on the line y = 2x + 1.
data = [(0, 1), (1, 3), (2, 5), (3, 7)]
w, b = 0.0, 0.0
learning_rate = 0.05
for epoch in range(1, 201):
grad_w = grad_b = 0.0
for x, y in data:
error = (w * x + b) - y # prediction minus target
# Chain rule: d(error²)/dw = 2 * error * x, d(error²)/db = 2 * error
grad_w += 2 * error * x
grad_b += 2 * error
# Step against the gradient to make the loss smaller.
w -= learning_rate * grad_w / len(data)
b -= learning_rate * grad_b / len(data)
if epoch in (1, 10, 50, 200):
loss = sum(((w * x + b) - y) ** 2 for x, y in data) / len(data)
print(f"epoch {epoch:>3}: w={w:.3f} b={b:.3f} loss={loss:.4f}")
예상 출력
epoch 1: w=0.850 b=0.400 loss=7.0587
epoch 10: w=2.009 b=0.958 loss=0.0009
epoch 50: w=2.005 b=0.989 loss=0.0000
epoch 200: w=2.000 b=1.000 loss=0.0000
작동 원리
각 점의 오차는 예측값에서 목표값을 뺀 값입니다. 연쇄 법칙에 따라 제곱 오차의 기울기는 w에 대해 2·error·x, b에 대해 2·error입니다. 데이터 전체의 평균을 내고 기울기 반대 방향으로 이동하면 w와 b는 2와 1에 가까워지고 손실은 거의 0으로 떨어집니다.
값을 변경하고 Python 설치 없이 CodeUtility 온라인 Python 컴파일러에서 실행하세요.
연습 문제
입력값과 경계 조건을 바꾸고 더 큰 데이터에서도 동작을 확인하세요.
- 입력이나 가중치를 바꾸고 실행하기 전에 출력을 예상해 보세요.
- 중간 값을 출력해 계산의 각 단계를 따라가 보세요.
- 아래에 연결된 챌린지를 풀며 아이디어를 직접 구현해 보세요.
챌린지로 연습하기
이 레슨에서 배운 내용으로 실제 문제를 풀어 보세요. 모든 챌린지는 브라우저에서 실행되며 즉시 테스트와 AI 리뷰를 받을 수 있습니다.
- 활성화 함수의 도함수 sigmoid, ReLU, Leaky ReLU, tanh의 각 값에서의 도함수를 계산합니다. 역전파에 필요한 기울기입니다. 쉬움
- 하나의 뉴런의 기울기 연쇄 법칙으로 sigmoid 뉴런의 각 가중치와 편향에 따른 손실의 변화를 구합니다. 보통
- 2층 신경망의 역전파 sigmoid 은닉층 하나와 sigmoid 출력 하나를 가진 신경망의 모든 가중치와 편향 기울기를 계산합니다. 어려움
- 경사 하강법으로 뉴런 학습시키기 순전파, 기울기 계산, 가중치 갱신을 반복해 예제로부터 sigmoid 뉴런을 학습시킵니다. 보통
- XOR을 푸는 신경망 학습시키기 모든 것을 합쳐서: 2-2-1 sigmoid 신경망을 역전파로 XOR을 학습할 때까지 훈련합니다. 어려움