파이썬 머신러닝 (1)
Training Machine Learning Algorithms for Classification
perceptron 과 adaptive linear 사용해서 classification 구현해보자.
이 장의 주제는 다음과 같다.
- 머신러닝 알고리즘을 위한 직관 설계
- NumPy 같은 관련 라이브러리 사용
- 파이썬으로 linear classification algorithms 구현
인공 뉴런 (Artificial Neurons) - 기계 학습의 초기 역사
Warren McCullock 과 Walter Pitts 1943년에 MCP뉴런이라는 단순한 뇌세포의 개념을 처음으로 발표했다. McCullock 과 Pitts는 그런 신경 세포를 두개의 출력을 가진 단순한 논리 게이트로 설명했다.
여러 신호가 수상돌기에 도착하면 세포 내에서 통합되고, 통합된 신호가 임계값을 넘으면 축색 돌기에서 전달될 출력 신호가 생성된다.
몇 년 후에 Frank Rosenblatt가 MCP 뉴런 모델에 기초한 perceptron이 배우는 규칙의 개념에 대해 발표했다. Rosenblatt는 perceptron rule과 함께 뉴런이 작동하는지 아닌지를 결정하기 위해 입력 feature와 곱해지는 최적의 weight값을 스스로 학습하는 알고리즘을 제안했다.
supervised learning 과 classification의 관점에서 이런 알고리즘은 하나의 클래스 혹은 다른 클래스에 속하는지 예측하는데 사용될 수 있다.
좀 더 공식적으로 우리는 이 문제를 단순화하기 위해 이진 분류 작업이라고 말할 수 있다. 그리고 우리는 특정한 입력값 x와 이에 상응하는 가중치 벡터 w의 선형 조합을 가진 활성화 함수를 정의할 수 있다.
x 샘플의 activation 즉 출력값이 임계값 θ보다 크다면 우리는 클래스1과 -1을 예측한다. 다시 말해 perceptron 알고리즘에서 활성화 함수는 Heaviside step function라고 불리는 단순한 단위 스텝 함수이다.
아래 그림을 보면 z = wTx 가 perceptron의 활성화 함수에 의해 어떻게 이진 출력(1, -1)으로 채워지는지 그리고 그것이 두 개의 분리가능한 클래스를 어떻게 구별하는지 보여준다.
MCP 뉴런과 Rosenblatt의 퍼셉트론 모델에 대한 생각은 환원법학자 접근법을 사용하여 뇌에서 하나의 뉴런이 어떻게 작동하는지를 모방하는 것이다.
Rosenblatt의 초기 퍼셉트론 규칙은 매우 간단하며 다음과 같은 단계로 요약할 수 있다.
- 가중치를 0이나 아주 작은 값으로 초기화해라.
- 각 training 샘플 입력값에 대하여 다음의 단계를 수행하라.
1) 출력값 y 계산
2) 가중치 갱신
여기서 출력값은 우리가 앞에서 정의한 단위 스텝 함수에 의해 예측된 클래스 label 값이고, 동시에 각 가중치 wj 값이 갱신된다.
wj := wj + ∆wj
∆wj 값은 perceptron learning rule에 의해 계산된다.
∆wj = η(y(i) - y’(i))xj(i)
η이 0과 1사이의 learning rate일때, y(i)는 트레이닝 샘플 i번째의 정답 클래스 label이고 y’(i)는 예측한 클래스 label 이다. 가중치 벡터에서 모든 가중치가 동시에 갱신되는 것은 중요하다. 즉, 모든 가중치의 ∆wj값이 갱신되기 전에 y’(i)값은 계산하지 않는다.
위의 그림은 퍼셉트론이 샘플 x의 입력을 받아서 가중치 w와 결합하여 계산하는 방법을 보여준다.
입력값은 이진 출력(1, -1)을 생성하는 활성화 함수(여기에서는 단위 스텝 함수)로 전달된다.
학습 단계 동안, 이 출력은 예측 오류값을 계산하고 가중치를 갱신하는데 사용된다.