Perceptron
1. 퍼셉트론이란?
퍼셉트론은 1957년 프랭크 로젠블랫이 고안한 인공 뉴런 모델로, 생물학적 뉴런의 작동 원리를 수학적으로 모사한 것이다. 이는 머신러닝에서 가장 기초적인 지도 학습 알고리즘 중 하나로, 이진 분류 문제를 해결할 수 있다.
퍼셉트론은 입력과 출력을 가지는 하나의 함수로 볼 수 있으며, 입력값과 가중치의 선형 결합에 바이어스를 더한 후 활성화 함수를 적용해 결과를 도출한다.
2. 퍼셉트론의 구조
- 입력(Input): $x_1, x_2, …, x_n$
- 가중치(Weight): $w_1, w_2, …, w_n$
- 바이어스(Bias): $b$
- 가중합(Sum): $z = \sum w_i x_i + b$
- 출력(Output): 계단 함수에 따라 $z > 0$이면 1, 그렇지 않으면 0
이러한 구조는 논리 회로의 AND, OR 게이트와 유사하게 동작할 수 있다.
3. 퍼셉트론의 학습
퍼셉트론은 처음에는 어떤 게이트인지 알지 못한다. 학습은 주어진 입력과 정답(출력)을 비교하며, 오차를 바탕으로 가중치와 바이어스를 조정하는 과정이다.
- 오차(Error): 정답 - 예측
- 가중치 업데이트: 가중치 = 가중치 + 학습률 × 오차 × 입력값
- 바이어스 업데이트: 바이어스 = 바이어스 + 학습률 × 오차
이를 통해 퍼셉트론은 점점 더 정답에 가까운 출력을 하도록 학습하게 된다.
4. 주요 용어의 어원과 의미
4.1 Bias (바이어스)
- 어원: “편향, 치우침”이라는 뜻의 영어 단어
- 의미: 입력값이 0일 때에도 출력이 일정 수준을 넘도록 결정 경계를 이동시키는 역할
4.2 Epoch (에포크)
- 어원: 그리스어 “epokhē”, 영어로는 “시대, 주기”
- 의미: 학습 데이터 전체를 모델에 한 번 학습시키는 주기
4.3 Weight (가중치)
- 어원: 무게(weight), 중요도
- 의미: 입력값이 출력에 얼마나 중요한 영향을 미치는지를 나타내는 계수
5. Python을 이용한 퍼셉트론 구현 (OR 게이트 예시)
training_data = [
([0, 0], 0),
([0, 1], 1),
([1, 0], 1),
([1, 1], 1)
]
weights = [0.0, 0.0]
bias = 0.0
learning_rate = 0.1
def step_function(x):
return 1 if x > 0 else 0
for epoch in range(10):
for inputs, target in training_data:
weighted_sum = sum(w * i for w, i in zip(weights, inputs)) + bias
output = step_function(weighted_sum)
error = target - output
for i in range(len(weights)):
weights[i] += learning_rate * error * inputs[i]
bias += learning_rate * error6. Learning Rate (학습률)
- 역할: 학습할 때 오차에 대해 얼마나 빠르게 가중치를 업데이트할지를 결정
- 작을 경우: 수렴은 안정적이지만 학습 속도가 느림
- 클 경우: 빠르게 학습하나 불안정하거나 발산할 위험 존재
적절한 값을 선택하는 것이 중요하며, 보통 0.1 또는 0.01에서 시작해 실험적으로 조정한다.