머신러닝

2-15 Rosenblatt 퍼셉트론의 웨이트 업데이트 알고리듬을 쉽게 이해해 보자!

coding art 2021. 7. 1. 15:31
728x90

Rosenblatt의 퍼셉트론 알고리듬이 1957년 세상에 출현한지도 60년이 넘어가고 있다. 이미 아주 오래 전에 출현한 알고리듬이긴 하지만 오늘날의 머신 러닝이 갖춰야 할 필수적인 부분들이 거의 망라되어 있어 보인다. 물론 당시에 오늘날 TensorFlow를 비롯한 모든 머신 러닝 소프트웨어에서 사용하는 Hypothesis 설정과 이를 이용한 cost 함수의 구성 및 경사하강법(GradientDescent) 적용과 같은 형태를 갖춘 것은 아니나 1980년대를 넘어가면서 해결이 된 뉴럴 네트워크(Neural Network) 문제를 원초적으로 배태하고 있었다는 점이다.

아울러 Rosenblatt의 퍼셉트론의 일차적인 연구 목표는 의학적인 관점에서의 시지각 뉴론의 특성을 반영하여 이미지 센서와 컴퓨터를 사용한 비전 시스템을 구성하였다는 점이다. 이 비전 시스템에 의한 이미지 지각은 뉴럴 네트워크를 확장하여 오늘날의 CNN(Convolutionary Neural Network)으로 발전하였다.

 

Rosenblatt 이 사용했던 이미지 센서 즉 일명 포토센서 내지는 조도센서는 오늘날 고해상도의 스마트폰 카메라 이미지 센서의 원형으로 볼 수 있을 것이다.

포토센서 하나인 N = 1 인 경우의 문제는 밝다와 어둡다 즉 명암 문제로 귀착이 된다. 으로 라벨 명을 부여할 수 있으며 또는 “+1”“-1” 로 이진분류(binary classification)할 수도 있을 것이다.

포토 센서의 수가 늘어나게 되면 MNIST 수기 숫자 인식 문제에서처럼 28X28 이미지 데이터를 처리할 수도 있게 된다. 아울러 이러한 classification 작업은 오늘 날 CNN을 비롯한 머신 러닝에서 흔하게 사용하는 softmax classifier 기법을 적용하게 되는 계기를 제공했다고도 보인다.

 

특히 N = 2 인 경우에 대해서 랜덤한 입력

를 고려해 보자. 각 랜덤 입력 값의 범위는 [0, 1] 를 구간 범위로 두자. 이 랜덤 입력 값들은 조도 센서의 밝기일 수도 있으며 아니면 붓꽃 데이터 문제에서처럼 붓꽃의 petal(꽃잎) sepal(꽃받침) 값 일 수도 있는데 이들은 각각 길이와 폭 두 가지 값들을 가지고 있다.

 

사실 머신 러닝을 공부하다 보면 적절한 예를 들어 줄만한 실제 사례가 대단히 드물다. 조도센서 프로젝트를 N = 1 또는 N = 2 사례는 오늘날 빛의 밝기에 따라 ON OFF 해야 하는 가로등 시스템을 생각할 수 있을 것이다.

그러한 사례보다는 위 붓꽃 데이터에서처럼 꽃잎 길이와 꽃받침 길이라는 잘 수집된 랜덤 데이터를 사용하여 classification을 해보는 게 그래도 가장 괜찮은 사례라 볼 수 있을 것이다. 사실 붓꽃 데이터는 성격상 통계학 분야의 데이터이기 때문에 붓꽃 종류를 분류하는 작업에 대단히 적합한 유일무이한 사례라 볼 수 있다.

 

한편 Rosenblatt 당시에는 오늘날처럼 Hypothesis를 설정하고 cost 함수를 구성하여 GradientDescent 적용과 같은 접근법이 없었다. 지금 trainning을 진행하기 위하여 우리가 사용하는 웨이트 업데이트 방식은 1986년에 캐나다의 Hinton 교수가 연구했던 Backpropagation 기법에 의한 것이다. 따라서 Rosenblatt 은 뉴론 관찰에서 얻어진 특성을 그대로 사용하는 웨이트 업데이트 기법을 적용되었다.

위 왼쪽 사진을 처음 보면 도대체 왜 이런 복잡스런 배선을 만들었나 하는 의아심이 들 수 있는데 이 복잡한 배선은 실제 생체 뉴런들의 연결 상태를 모방한 fully connected 뉴럴 네트워크를 생각하면 될 것이다. 위 그림 오른쪽을 참조하면 시냅스 영역에서 입력 값들이 웨이팅되어 뉴론 안에서 이들의 합산이 이루어고 firing 조건에 따라 계단(step) 함수 처리가 이루어진다. 이 그림에서

로 가정하고  w0를 문자 b 로 표시한 후 이 b를 편향(바이어스)으로 두기로 하자. 뉴론에서 firing 조건은 즉 신호를 전달하는 통신선에 해당하는 축색 돌기를 통해 신호를 보낼지 말지 여부는 뉴론 내 체액의 막 전위 또는 막 전압의 threshold 값 판정에 따르게 된다. 예를 들면 ON OFF 모델이라면 (0, 1) 구간으로 모델화하여 0.5 이상이면 ON “1” 신호를 전송하게 된다. 또는 (-1, +1) 구간으로 모델화하면 0 보다 크면 “1” 이고 아니면 “-1” 로 처리하는 방법도 가능하다. Rosenblatt 은 후자의 방법을 택하고 있다.

 

Decision function으로 정의 되는 아래의 벡터 연산 알고리듬 표현을 살펴보자.  

sign() 으로 정의 하는 함수는 웨이트 벡터와 입력 벡터 값을 각각 곱하여 합산하고 편향(바이어스)을 더한 값이 threshold를 넘는지 아니지를 따져보기 위한 함수이다. sign() 이란 함수는 부호를 판별할 수 있도록 작성된 루틴이다. 의학적으로 관찰했던 뉴론의 특성을 컴퓨터 상에서 정확하게 수학적 계산으로 옮긴 것이다. 여기에 웨이트 업데이트 방식이 추가되면 Rosenblatt 의 퍼셉트론 알고리듬이 완성되는 것이다. 그런데 머신 러닝 초보자가 여기까지 내용을 읽어 보아도 Rosenblatt 이 도대체 무엇을 대상으로 뭘 어떻게 하겠다는 건지를 이해하기 어려워 보인다. 즉 머신 러닝이 어렵게 느껴질 수도 있는 부분이기도 하다. Rosenblatt 의 퍼셉트론 접근법은 아무런 문제가 없으나 컴퓨터 언어 방식으로 벡터계산 알고리듬이 대단히 간략하게 소개되어 있어 상당히 추상적이랄까 하는 느낌이 강하게 들고 Rosenblatt 진정한 코딩 의도를 이해하기가 쉽지 않은듯하다.

Rosenblatt이 직면했던 웨이트 업데이트 알고리듬은 1970년대를 지나 1980년대에 multi-layer 뉴럴 네트워크에 대한 back-propagation 알고리듬 완성으로 해결을 보았다. 하지만 Rosenblatt 당대에 뉴론의 단순 모델링으로 승부를 보아야 했던 이미지 센서 시스템은 400개의 포토 셀로 구성되며, 20X20 수준의 픽셀 데이터를 처리해야 하는 규모인데 그 당시의 컴퓨팅 파워로는 머신 러닝 코드 실행에 역부족이었을 것이다.

 

한편 Rosenblatt의 웨이트 업데이트 방식에 관한 자료를 검색해 보자.

 

위 그림의 코드에서 sign() 판별 후 목표 라벨 값에 도달하지 못했을 경우 웨이트와 바이아스를 업데이트하여 looping 작업을 하게 된다. 위 그림에서 빨간 색 박스 친 영역의 기하학적 설명이 Rosenblatt 의 퍼셉트론과 관련하여 언뜻 이해가 된다면 당신의 IQ 는 대단히 높다고 볼 수 있을 것입니다. 필자도 기하학적으로 표현된 내적 계산을 생각해 보았으나 지관적인 이해가 쉽게 오지 않았던 부분으로서 단지 컴퓨터 연산상으로만 그렇게 된다는 점을 이해했던 부분이다.