Gitsunmin

TIL

TIL
(=Today I Learned)

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 * error

6. Learning Rate (학습률)

  • 역할: 학습할 때 오차에 대해 얼마나 빠르게 가중치를 업데이트할지를 결정
  • 작을 경우: 수렴은 안정적이지만 학습 속도가 느림
  • 클 경우: 빠르게 학습하나 불안정하거나 발산할 위험 존재

적절한 값을 선택하는 것이 중요하며, 보통 0.1 또는 0.01에서 시작해 실험적으로 조정한다.