
학습 내용
퍼셉트론 학습
학습 목표
이 레슨을 완료하면:
- •"학습"이 뭔지, 왜 AI에서 가장 중요한 개념인지 설명할 수 있어요
- •가중치 업데이트 공식이 어떤 원리로 작동하는지 이해해요
- •학습률(learning rate)이 왜 필요하고, 어떤 값이 좋은지 알아요
- •OR 게이트를 퍼셉트론이 스스로 학습하는 전체 과정을 따라갈 수 있어요
- •수렴(convergence)이 뭔지, 언제 학습이 끝나는지 판단할 수 있어요
핵심 메시지
"AI의 학습은 마법이 아닙니다. 예측하고, 틀리면 고치고, 다시 해보는 것. 그게 전부예요!"
사람이 시행착오를 통해 배우듯, 퍼셉트론도 똑같은 방식으로 배웁니다. 이번 레슨에서 그 과정을 한 걸음씩 따라가 볼게요.
1. "학습"이 대체 뭘까요?
일상의 비유: 농구 자유투 연습
농구 자유투를 처음 던진다고 상상해보세요.
- •첫 시도: 힘 조절을 몰라서 링에 한참 못 미침
- •깨달음: "아, 힘이 부족했구나" → 다음엔 좀 더 세게 던짐
- •두 번째 시도: 이번엔 너무 세서 백보드를 맞고 나옴
- •또 깨달음: "너무 셌나" → 살짝 줄여봄
- •반복: 수십 번 던지면서 점점 정확해짐
이 과정을 정리하면 이렇습니다:
시도 → 결과 확인 → 조정 → 다시 시도 → ... → 점점 잘해짐!
퍼셉트론의 학습도 완전히 같은 원리예요!
| 농구 자유투 | 퍼셉트론 학습 |
|---|---|
| 공을 던짐 | 입력 데이터로 예측함 |
| 링에 안 들어감 | 예측이 틀림 |
| "힘을 더 줘야겠다" | 오차를 계산함 |
| 힘 조절해서 다시 던짐 | 가중치를 조정함 |
| 수십 번 반복 후 골인! | 여러 번 반복 후 정확해짐! |
왜 이게 AI에서 중요할까요? AI가 "똑똑해진다"는 건 결국 이 학습 과정을 거친다는 뜻이에요. ChatGPT도, 이미지 인식 AI도, 자율주행차도 전부 이 기본 원리 위에 만들어졌어요. 지금 배우는 퍼셉트론의 학습법은 그 모든 것의 출발점입니다!
2. 퍼셉트론의 학습 4단계
퍼셉트론의 학습은 딱 4단계로 이루어져요. 계속 돌아가는 바퀴라고 생각하면 됩니다:
text[1단계] 예측하기 ↓ [2단계] 오차 확인하기 ← 정답과 비교해서 얼마나 틀렸나? ↓ [3단계] 가중치 조정하기 ← 틀린 만큼 수정! ↓ [4단계] 반복하기 → 다시 1단계로 돌아감 ↓ (점점 정확해짐!)
핵심을 한 문장으로 말하면:
학습 = "최적의 가중치와 편향을 찾아가는 과정"
이전 레슨에서 퍼셉트론의 출력은 가중치(w)와 편향(b)에 의해 결정된다고 배웠죠? 그 가중치와 편향을 적절한 값으로 맞춰주는 게 바로 학습이에요. 처음엔 엉망인 값에서 시작하지만, 반복하면서 점점 좋은 값을 찾아갑니다.
3. 오차(Error) 계산 - "얼마나 틀렸나?"
비유: 시험 채점
시험 답안을 채점한다고 생각해보세요. 정답이 O인데 학생이 X라고 쓰면? "틀렸다"는 걸 알 수 있죠. 중요한 건 어떻게 틀렸는지도 알 수 있다는 거예요.
퍼셉트론의 오차 계산도 이렇게 단순해요:
오차(error) = 정답(target) - 예측(prediction)
이 한 줄짜리 공식이 놀라울 정도로 많은 정보를 담고 있어요:
| 상황 | 정답 | 예측 | 오차 | 무슨 뜻인가요? |
|---|---|---|---|---|
| 과소 반응 | 1 | 0 | +1 | "더 크게 반응해야 해!" → 가중치를 키워야 함 |
| 과대 반응 | 0 | 1 | -1 | "너무 민감해!" → 가중치를 줄여야 함 |
| 정답! | 1 | 1 | 0 | "완벽해! 그대로 유지!" → 수정 불필요 |
| 정답! | 0 | 0 | 0 | "완벽해! 그대로 유지!" → 수정 불필요 |
오차의 부호(+/-) 가 "어느 방향으로 고쳐야 하는지"를 알려주고, 오차의 크기가 "얼마나 많이 고쳐야 하는지"를 알려줍니다.
이렇게 간단한 뺄셈 하나로 학습의 방향이 정해져요!
4. 가중치 업데이트 공식 - "어떻게 고치나?"
비유: 요리 간 맞추기
된장찌개를 끓이는데 간이 싱거워요. 그러면 소금을 얼마나 넣을지 결정해야 하죠.
- •얼마나 싱거운지 (오차의 크기) → 많이 싱거우면 많이 넣고
- •그 재료가 얼마나 들어갔는지 (입력값) → 이미 많이 넣은 재료는 조금만 조정
- •한 번에 얼마씩 넣을지 (학습률) → 소심하면 조금씩, 대담하면 많이
퍼셉트론의 가중치 업데이트 공식이 바로 이 논리예요:
text가중치 업데이트: w_new = w_old + learning_rate x error x input 편향 업데이트: b_new = b_old + learning_rate x error
공식의 각 요소가 하는 역할
| 요소 | 기호 | 역할 | 비유 |
|---|---|---|---|
| 오차 | error | 방향과 크기 결정 | "얼마나 틀렸나?" |
| 입력값 | input | 기여도 반영 | "이 재료를 얼마나 넣었나?" |
| 학습률 | η (에타) | 조정 보폭 결정 | "한 번에 얼마씩 고칠까?" |
왜 입력값(input)을 곱하나요?
이게 직관적으로 잘 이해가 안 될 수 있어요. 예를 들어볼게요.
두 개의 입력 x1=5, x2=0이 있고, 예측이 틀렸다고 합시다.
- •x1 = 5: 이 입력이 크게 기여했으니까, 이 입력에 연결된 w1을 많이 바꿔야 해요
- •x2 = 0: 이 입력은 아예 기여를 안 했으니까, w2를 바꿔봤자 소용없어요
입력값을 곱하면 이런 "기여도"가 자연스럽게 반영돼요!
5. 학습률(Learning Rate) - "한 걸음의 크기"
비유: 눈 감고 보물찾기
놀이공원에서 눈을 가리고 보물을 찾는 게임을 한다고 상상해보세요. 친구가 "왼쪽!" 하고 외쳐주면 왼쪽으로 움직이는데...
한 걸음을 얼마나 크게 뗄 건가요?
| 걸음 크기 | 상황 | 결과 |
|---|---|---|
| 너무 큰 걸음 (5m씩) | 보물 바로 옆인데 5m를 가버림 | 보물을 계속 지나침! 왔다갔다만 반복 |
| 너무 작은 걸음 (1cm씩) | 방향은 맞는데 너무 느림 | 해가 져도 못 찾음 |
| 적당한 걸음 (30cm씩) | 방향 맞고 속도도 적당 | 효율적으로 보물 발견! |
학습률이 바로 이 "걸음 크기"예요!
학습률에 따른 학습 결과
| 학습률 (η) | 특징 | 결과 |
|---|---|---|
| 너무 큼 (예: 1.0) | 한 번에 가중치를 확 바꿈 | 정답을 자꾸 지나침 (발산) |
| 너무 작음 (예: 0.0001) | 아주 조금씩만 바꿈 | 수렴은 하지만 시간이 너무 오래 걸림 |
| 적당함 (예: 0.01~0.1) | 적절한 크기로 조정 | 빠르고 안정적으로 정답에 도달! |
실전 팁: 처음 시작할 때는 보통 0.01 ~ 0.1 사이에서 시작해요. 학습이 잘 안 되면 키워보고, 불안정하면 줄여보는 식으로 조절합니다.
왜 이게 AI에서 중요할까요? 현대 AI 모델(GPT 등)도 학습률 설정이 성능을 좌우해요. 수십억 개의 가중치를 학습할 때, 학습률 하나 잘못 잡으면 며칠간의 학습이 물거품이 될 수도 있어요!
6. 실전 예제: OR 게이트 학습 과정
이제 퍼셉트론이 실제로 OR 게이트를 학습하는 과정을 처음부터 끝까지 따라가 볼게요!
OR 게이트란?
"둘 중 하나라도 1이면 1" — 이전 레슨에서 배운 내용이죠.
| x1 | x2 | 정답 (OR) |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 1 |
초기 설정
아직 아무것도 모르는 상태에서 시작해요:
text가중치: w1 = 0, w2 = 0 편향: b = 0 학습률: η = 0.5 활성화 함수: 계단 함수 (z > 0이면 1, 아니면 0)
Epoch 1: 첫 번째 순회
모든 데이터를 한 바퀴 도는 걸 에포크(epoch) 라고 해요. 첫 번째 에포크를 따라가 볼까요?
데이터 1: 입력 (0, 0), 정답 0
text1) 계산: z = 0x0 + 0x0 + 0 = 0 2) 예측: z = 0, 0보다 크지 않으므로 → 출력 0 3) 오차: 정답(0) - 예측(0) = 0 4) 오차가 0이니까 → 수정 불필요! 그대로 유지 결과: w1=0, w2=0, b=0 (변화 없음)
데이터 2: 입력 (0, 1), 정답 1
text1) 계산: z = 0x0 + 0x1 + 0 = 0 2) 예측: z = 0, 0보다 크지 않으므로 → 출력 0 3) 오차: 정답(1) - 예측(0) = +1 ← 틀렸다! 4) 업데이트: w1 = 0 + 0.5 x (+1) x 0 = 0 w2 = 0 + 0.5 x (+1) x 1 = 0.5 ← 바뀜! b = 0 + 0.5 x (+1) = 0.5 ← 바뀜! 결과: w1=0, w2=0.5, b=0.5
벌써 변화가 생겼죠? w2와 b가 올라갔어요. "x2가 1일 때 더 크게 반응해야 한다"는 걸 배운 거예요!
데이터 3: 입력 (1, 0), 정답 1
text1) 계산: z = 0x1 + 0.5x0 + 0.5 = 0.5 2) 예측: z = 0.5 > 0 → 출력 1 3) 오차: 정답(1) - 예측(1) = 0 4) 정답! → 수정 불필요 결과: w1=0, w2=0.5, b=0.5 (변화 없음)
데이터 4: 입력 (1, 1), 정답 1
text1) 계산: z = 0x1 + 0.5x1 + 0.5 = 1.0 2) 예측: z = 1.0 > 0 → 출력 1 3) 오차: 정답(1) - 예측(1) = 0 4) 정답! → 수정 불필요 결과: w1=0, w2=0.5, b=0.5 (변화 없음)
Epoch 1 결과 점검
에포크 1이 끝났어요. 현재 가중치로 전체 데이터를 다시 확인해보면:
| 입력 (x1, x2) | 정답 | z = 0x1 + 0.5x2 + 0.5 | 예측 | 맞았나? |
|---|---|---|---|---|
| (0, 0) | 0 | 0.5 | 1 | 틀림! |
| (0, 1) | 1 | 1.0 | 1 | 맞음 |
| (1, 0) | 1 | 0.5 | 1 | 맞음 |
| (1, 1) | 1 | 1.0 | 1 | 맞음 |
아직 (0,0)을 틀리고 있어요. 에포크를 더 돌아야 합니다!
이런 식으로 에포크를 여러 번 반복하면, 가중치가 점점 조정되면서 결국 모든 데이터를 맞추는 값을 찾게 돼요. 보통 OR 게이트는 2~5 에포크 안에 학습이 완료됩니다.
7. 수렴(Convergence) - "학습은 언제 끝나나요?"
비유: 퍼즐 맞추기
퍼즐을 맞출 때, 마지막 조각까지 다 맞추면 "완성!"이라고 하죠. 퍼셉트론도 마찬가지예요.
수렴 = 모든 데이터에 대해 오차가 0이 되는 상태
더 이상 고칠 게 없으니, 학습이 자연스럽게 끝납니다.
textEpoch 1: 4개 중 3개 정답 → 아직 학습 중... Epoch 2: 4개 중 3개 정답 → 아직 학습 중... Epoch 3: 4개 중 4개 정답 → 수렴! 학습 완료!
중요한 한계: 항상 수렴할까요?
정답은 "아니요" 입니다.
퍼셉트론은 선형 분리 가능한 문제만 풀 수 있어요. 직선 하나로 두 그룹을 나눌 수 있는 문제만 가능하다는 뜻이에요.
| 문제 유형 | 수렴 가능? | 예시 |
|---|---|---|
| 선형 분리 가능 (AND, OR, NOT) | 가능 (반드시 수렴!) | 직선으로 나눌 수 있음 |
| 선형 분리 불가 (XOR) | 불가능 (영원히 학습 안 됨) | 직선으로 나눌 수 없음 |
이 한계가 바로 다음 레슨들에서 다룰 XOR 문제이고, 이것을 해결하기 위해 다층 퍼셉트론(MLP) 이 탄생했어요!
8. 전체 학습 알고리즘 정리
지금까지 배운 내용을 하나의 알고리즘으로 정리해볼게요:
실행 가능한 코드로 확인해보기
python# 퍼셉트론 학습 알고리즘 - OR 게이트 data = [ ([0, 0], 0), ([0, 1], 1), ([1, 0], 1), ([1, 1], 1), ] w1, w2, b = 0.0, 0.0, 0.0 lr = 0.5 def step(z): return 1 if z > 0 else 0 for epoch in range(10): errors = 0 for inputs, target in data: x1, x2 = inputs z = w1 * x1 + w2 * x2 + b pred = step(z) error = target - pred if error != 0: errors += 1 w1 = w1 + lr * error * x1 w2 = w2 + lr * error * x2 b = b + lr * error print(f"Epoch {epoch+1}: 틀린 개수={errors}, w1={w1:.1f}, w2={w2:.1f}, b={b:.1f}") if errors == 0: print("학습 완료! 수렴했습니다!") break print(f"\n최종 가중치: w1={w1}, w2={w2}, b={b}") print("\n검증:") for inputs, target in data: x1, x2 = inputs z = w1 * x1 + w2 * x2 + b pred = step(z) print(f" 입력({x1},{x2}) -> 예측:{pred}, 정답:{target}, {'O' if pred==target else 'X'}")
위 코드를 실행하면 퍼셉트론이 실제로 OR 게이트를 몇 에포크 만에 학습하는지 볼 수 있어요!
핵심 정리
| 개념 | 설명 | 비유 |
|---|---|---|
| 학습 | 최적의 가중치와 편향을 찾아가는 과정 | 농구 자유투 연습 |
| 오차 | 정답 - 예측 (방향과 크기를 알려줌) | 시험 채점 |
| 가중치 업데이트 | w_new = w_old + η x error x input | 요리 간 맞추기 |
| 학습률 (η) | 한 번에 얼마나 크게 조정할지 결정 | 보물찾기의 걸음 크기 |
| 에포크 | 전체 데이터를 한 바퀴 도는 것 | 연습 1세트 |
| 수렴 | 모든 오차가 0이 되어 학습이 끝남 | 퍼즐 완성 |
| 한계 | 선형 분리 가능한 문제만 학습 가능 | 직선 하나로 나눌 수 있는 것만 |
학습 체크리스트
- • 학습의 4단계(예측 → 오차 확인 → 가중치 조정 → 반복)를 설명할 수 있다
- • 오차 = 정답 - 예측 공식이 왜 방향 정보를 담는지 이해한다
- • 가중치 업데이트 공식(w_new = w_old + η x error x input)을 쓸 수 있다
- • 공식에서 입력값(input)을 곱하는 이유를 설명할 수 있다
- • 학습률이 너무 크거나 작을 때 어떤 문제가 생기는지 안다
- • OR 게이트 학습 과정의 첫 에포크를 손으로 따라갈 수 있다
- • 수렴이 뭔지, 퍼셉트론이 수렴 못하는 경우가 있다는 걸 안다
다음 강의 예고
"AND, OR, NOT 게이트" 이번 레슨에서 OR 게이트 학습을 봤는데, 다음 시간에는 AND, OR, NOT 세 가지 논리 게이트를 퍼셉트론으로 직접 구현해봅니다. 각 게이트의 가중치가 어떻게 다른지, 왜 다른지 알아볼 거예요!
레슨 정보
- 레벨
- Level 1: AI 기초 이론
- 예상 소요 시간
- 6분 57초
- 참고 영상
- YouTube 링크
💡실습 환경 안내
코드 블록의 ▶ 실행 버튼을 누르면 브라우저에서 바로 Python을 실행할 수 있습니다.
별도 설치 없이 NumPy, Matplotlib 등 기본 라이브러리를 사용할 수 있습니다.