머신러닝

머신러닝에의 초대

coding art 2020. 9. 20. 14:46
728x90

머신 러닝과 인공지능은 최근에 활성화된 것은 사실이나 그 연원은 결국 2차 세계 대전이 끝날 무렵으로서 컴퓨터의 시작 시기인 튜링이나 폰노이만 시대까지 거슬러 올라간다. 아울러 50년대 중반 반도체 시대의 문을 열었던 노벨상에 빛나는 트랜지스터의 발명을 통해 컴퓨터 하드웨어 및 소프트웨어 발전의 포문을 열게 된다. 이어서 50년대 말 Rosenblatt의 퍼셉트론 하드웨어 및 소프트웨어 코드 개발 성공과 아울러 컴퓨터의 인공지능화에 대한 환상에 불을 당기게 된듯하다.

 

머신 러닝의 초창기는 1957년으로 거슬러 올라간다. 이미 1956년에 실리콘 밸리에서 활약했던 윌리암 쇼트키를 비롯한 3인의 과학자가트랜지스터 발명에 대한 업적으로 노벨상을 수상한 다음 해인데 이미 집적회로(IC:Integrated Circuit)가 제작되어 보급되던 시기였으며 당시에 컴퓨터가 보급이 활발하게 이루어지던 상황이었다. 그때 아이비리그에 속하는 코넬 대학에서 머신러닝의 실질적인 창시자라고 볼 수 있는 심리학과 교수였던 Rosenblatt이 최초로 머신러닝이 가능한 퍼셉트론을 발표하므로서 시작이 되었다. 당시 그는 400개의 조도센서(Cds 센서)를 사용하여 20X20 카메라 이미지 센서 보드를 제작하여 Mark I 컴퓨터와 인터페이스 한 후 영어 알파벳 문자 이미지를 인식할 수 있는 알고리듬을 고안하여 코딩하였다. 바로 이 시스템이 퍼셉트론으로서 인류 역사이래 최초의 인공지능으로서 오늘 날 머신러닝에 입문하면 초기에 접해 볼 수 있는 알고리듬이다. 결국 이러한 종류의 문제는 오늘 날 주차장에서 흔하게 사용되고 있다. 즉 자동차 정면 사진을 촬영하여 번호판의 문자 이미지를 추출하는 자동차 번호판 인식 인공지능 OpenCV 문제가 바로 대표적인 예제일 것이다.

 

당시에 이러한 알고리듬을 기반으로 하는 퍼셉트론 컴퓨터 코드를 제안할 수 있었던 배경 중의 하나는 1957년도에 출현한 FORTRAN 컴파일러의 등장도 무시할 수 없을 듯하다. 지금 2020년만 해도 머신러닝 입문 단계에서 맞닥뜨려야 할 대표적인 예제가 MNIST 수기문자 인식 문제란 것을 생각해보면 그때나 지금이나 크게 변한 것은 없다는 생각이 들기도 한다. 따라서 이 퍼셉트론이 과연 무엇인지 어떻게 해서 퍼셉트론이 인공지능 또는 머신러닝의 시발점인지 이해가 가능하다면 이미 머신러닝을 반은 이해했다고 봐도 무방할 것이다. 그 이후로도 수많은 연구가 있었지만 이 세상에 처음 퍼셉트론을 발표했을 때 온 세계가 받았던 충격에 비하면 그로부터 경과된 63년간의 눈부신 발전을 모조리 합한다고 해봐야 비교도 안 되는 듯하다. 즉 지금 2020년 현재 다루고 있는 대부분의 뉴럴 네트워크 및 딥 러닝을 포함하는 머신 러닝 문제들은 1960년대 ROsenblatt이 이미 다 다루어 보았거나 다루던 주제 정도이며 그가 만약 살아 있었다면 1980년 이전에 이론적으로는 웬만큼 다 정리 되었을 주제이다. 머신 러닝의 원리라든지 뉴론을 대상으로 딥 레이어를 구성하여 웨이트를 평가하고⦁⦁⦁ 하는 모든 것이 즉 다음 그림의 발표자료 이 한 페이지만 보면 이 말이 수긍이 갈 것이다. 다시 말해서 최근에 머신 러닝 분야에 뛰어 들었다면 그리 늦은 편은 아니며 당신은 이미 Rosenblatt과 같은 천재 과학자와 함께 공동 연구를 하는 셈이 된다고 말할 수 있다.

 

그림의 Original Perceptron 배선과 하단의 네트워크를 비교 관찰해 보자. 웨이트 값을 조절하기 위한 가변저항까지의 배선을 관찰해 보면 오늘 날의 이미지 센서처럼 매트릭스 방식으로 처리하는 것이 아니라 실제 우리 눈의 망막의 시각세포 (retina) 뉴론 연결 네트워크 구조를 흉내내어 시뮬레이션 하는 것으로 보인다. 웨이팅 처리된 신호를 합한 후 문턱신호(threshold) 처리 즉 firing을 통해 출력하게 되는 것으로 오늘날의 신경망 레이어 구조에 비해 전혀 차이점이 없다는 것을 알 수 있다.

 

신경망을 공부하려면 도대체 웨이트란 것이 뭐고 웨이트 값을 왜 조절해야 하는가 하는 의문이 당연히 들 수 있을 것이다. 조명 센서에 빛이 조사되어 입력 신호가 발생하게 될 경우 시신경 조직 내부에서는 체액의 이온 농도 변화 전파에 따른 웨이트 값 조절이 일어날 것이다. 이렇게 처리된 결과를 합하여 문턱신호(threshold) 처리를 통해 firing 하여 출력하게 되는데 오늘날의 머신러닝에서는 학습과정에서 초기에 랜덤 넘버 값으로 부여된 입력을 대상으로 back-propagation 알고리듬에 의해 웨이트의 제값을 찾아내게 된다.

인간이나 포유동물이 반복된 학습을 하게 되면 학습결과가 저장되어 후에 비슷하지만 겪어 보지 못한 새로운 상황 하에서는 학습 결과를 사용하여 능숙하게 대처한 경험을 익히 알고 있을 것이다. 이렇게 찾아진 웨이트 값을 기억하고 있다면 그 이후에 입력될 수 있는 unseen 데이터에 대해서도 즉각적으로 웨이팅 된 합을 계산할 수 있으며 문턱신호(threshold) 처리를 통해 출력이 가능해지는 것이다.

 

요약해보면 Rosenblatt의 퍼셉트론이 오늘날의 신경망 레이어와 하등 다를 것이 없으나 적절한 웨이트 값을 찾아냄에 있어서 오늘 날의 머신 러닝은 cost 함수를 사용한다는 점일 것이다. 퍼셉트론 알고리듬으로도 웬만한 로직을 처리할 수 있긴 하지만 오늘날의 cost 함수 사용에 비해서 웬지 복잡하면서도 쉽게 이해가 되지 않는 그런 측면이 있는 것도 분명한 사실이다. 하지만 컴퓨터 보급이 이루어진 바로 그 당시 1957년에 이미 저런 수준의 알고리듬을 즉각 고안하여 문자인식을 실현했다는 점은 인류 역사상 탁월한 지적 소산의 결과로 볼 수 있을 것이다.

 

다행스럽게도 그때로부터 몇 년 되지 않아 스탠포드 대학의 위로우 교수와 그의 박사과정 학생인 호프의 논문에 의해서 신경망 레이어에서의 cost 함수를 도입 적용하게 되었다. 물론 cost 함수를 도입하는 신기원을 이룩한 것은 사실이나 처음에 이 방법론은 제어공학적으로 또는 필터링 작업에 사용되었음에 주목하자. 즉 임의의 웨이트 값 출력이 목표 값과 에러를 보이게 되면 입력 단으로 이득을 주어 피드백 시키는 것이 제어공학의 방법론이다.

 

하지만 한 가지 머신러닝에서 사용하는 출력 값과 학습 값 사이의 에러 보정은 피드백이 아니라 그 후 훨씬 뒤인 1980년대에 출현한 역전파(Back-propagation) 알고리듬에 의해 설명이 가능하다. Back-propagation 알고리듬은 최종 출력 단에서 에러가 있을 경우 웨이트 값 업데이트 적용을 통해서 cost 함수를 최소화 할 수 있도록 재평가를 해야 하는데 파드백 방식이 아니라 멀티레이어 네트워크 각 레이어별로 합성함수 편미분 기법을 사용하여 입력 단에서 필요로 하는 cost함수의 각 웨이트 들에 대한 편미분을 수치적으로 계산하는 알고리듬이다. cost함수의 각 웨이트 들에 대한 편미분들은 Gradient Descent 기법 적용 시에 필요한 편미분 계수에 해당하게 되며 다음 단계에 적용할 웨이트 값을 설정할 수 있도록 learning rate 값 설정이 필요하게 된다. learning rate 값은 대개 상수이지만 특히 cost 함수의 최소 값을 찾아내는 과정이 굉장히 불규칙한 즉 Stochastic 한 경우에 많이 사용하는 Adam Optimizer

경우에는 내부적으로 learning rate을 조절하기도 한다.

평면 상에서 표현할 수 있는 단일 종속변수에 대한 간단한 함수 문제를 고려한다면 일차 도함수를 사용하여 미소거리 만큼 이동한 위치에서 함수의 근사 값을 계산하는 알고리듬에 해당한다. 이때에 도함수 값이 바로 Gradient 에 해당하며 미소거리가 바로 learning rate 에 해당하게 된다. 결론적으로 Gradient Descent 기법의 최종 목표는 웨이트 값을 업데트 해도 더 이상 cost함수 값이 그다지 변동이 없는 위치 즉 cost 함수가 최소값을 가지는 웨이트 값들을 발견하는 것이다.

 

1950년대 말 당시에 Rosenblatt 의 퍼셉트론은 미국에서 미래의 인공지능의 가능성에 대한 장밋빛 환상을 일으켰다. 장밋빛이라 폄하하는 내용을 살펴보면 크게 잘못되었다는 점을 알 수 있을 것이다. 사실 Rosenblatt 이 그 당시에 자신의 인공지능의 가능성에 대한 미래 예측은 사실 상 63년이 지난 지금 100% 완벽하게 이루어졌던 것이다. 이는 다시 말해서 Rosenblatt을 일개 그냥 좀 뛰어난 교수로 생각하는 경향이 있는 듯한데 크게 잘못된 판단이다. 사실 Rosenblatt 은 물리학계의 아인슈타인 이상의 천재였던 것으로 보인다. 1950년대의 컴퓨터 MARK I으로 퍼셉트론을 발명해서 성능을 실험해 본 후 반세기 이후에 이루어질 비전을 정확하게 내다 본 것이었다. 천재는 요절한다는 속설처럼 1972년 물놀이 사고로 요절함에 따라 정상적으로 발전되었을 법한 머신 러닝분야가 힘을 잃고 좌초하게 된 것이었다. 그래도 불씨는 꺼지지 않았으며 많은 시간이 허비되었던 것도 사실이지만 2000년 이후 지속적으로 끝없는 발전이 이루어지고 있다.

 

퍼셉트론에 관해서는 별도로 머신 러닝의 로직문제 처리 과정에서 XOR 로직 코딩 문제를 다루어 보도록 하자. 이 간단한 로직 문제로 인해 왜 머신 러닝의 발전에 제동이 걸렸는지 그리고 그 해결책은 뭐였는지 이유를 알아보도록 한다.

퍼셉트론의 발명자는 Rosenblatt인데 엉뚱하게도 남의 발명품에 대한 전문 서적을 출간했던 사람들이 있었던 듯하다. 1969년에 Rosenblatt 에 미칠 수는 없겠지만 역시 인공지능 분야를 주도했던 MITMinsky Papert 교수 두 사람 쓴 Perceptron이라는 제명의 책은 일종의 Rosenblatt이 발명한 퍼셉트론을 부정적으로 디스하는 내용을 담고 있는 서적이다. 사실 Misky 교수가 1960년대 당시의 MIT 인공지능 랩의 교수였기에 미국에 있어서 인공지능 분야의 연구 심사에 영향력이 대단히 큰 인물이었던 것으로 보인다. 물론 Minsky 교수가 그의 공저에서 퍼셉트론으로는 XOR 로직을 처리할 수 없다는 점을 신랄하게 지적했다. 컴퓨터 분야에서 XOR 로직 문제를 다루게 된 배경은 다름 아닌 1948년 윌리엄 쇼트키를 포함한 벨랩에서 트랜지스터 발명 후 1960년대 초에 집적회로 개발로 이어지게 된다. 트랜지스터야 말로 AND, OR, XOR과 같은 컴퓨터 로직을 구성하는 기본적인 게이트로 알려져 있으며 그 중에서 XOR 로직 처리 능력이 없다는 점을 지적했던 것이다.

물론 퍼셉트론이 한계점이 있는 것은 사실이었다. 하지만 연구란 것이 한 번에 다 끝나는 것이 아니고 계속 바톤을 이어 받아 새로운 이론이나 기술이 지속적으로 개발 되는 것이 당연하지 않은가? 그럼에도 불구하고 디스성의 출간을 통해 Minsky 교수가 얻은 것은 뭐였는가? 어쨌든 Rosenblatt 생존 시 1970년대에 들어 미 의회에서 인공지능 분야의 투자 대비 실적 전무로 관련 연구개발 예산을 깡그리 날려버리는 일이 일어났으며 그로 인해 인공지능의 흑 역사로 불리우는 시기가 도래하게 되었다. 하지만 Rosenblatt 이 열정적인 연구자였기에 개의치 않으며 머신 러닝 연구가 지속되었으나 1972년 불의의 사고로 인한 천재과학자의 인적 손실에 따라 머신러닝의 발전이 완전히 멈춘 듯한 암흑기가 도래하게 된다.

 

1980년대 초에 들어서는 Caltech Hopfield 교수가 정보 기억이 가능한 Hopfield 네트워크를 발표하게 된다. 이 네트워크는 지금도 실제로 컴퓨터의 FlipFlop 메모리 회로에서 Address를 사용하여 저장 및 불러내는 기능으로 실용화되어 사용되고 있으며 아직도 많은 연구개발이 필요한 분야이다.

 

1980년대 중반에 가서는 현재 머신 러닝 분야의 중요한 리더 중의 1인이었던 Hinton 교수가 3저자로 참여했던 Back-propagation 논문으로서 오늘 날 우리가 배우는 머신러닝의 골격이 어느 정도 갖추어지게 된 것이다. 그 이 후로도 2000년대 중반에 멀티레이어 신경망에서 각 레이어 별로 필요로 하는 활성화 함수인 Relu를 도입하는 업적을 남겼다.

 

이와 같은 머신 러닝 발달사의와 무관하게 보일지도 모르지만 너무나 중요했던 하버드대 의대의 Hubel Wisel 교수의 고양이 시각피질 반응에 관한 1959년 연구를 지적하지 않을 수 없다. 흑백 TV에서 기울어진 엣지를 생성 시킨 후 이 엣지를 회전시키거나 움직일 경우에 고양의의 시각 피질의 반응을 최초로 연구하였다. 이는 훗날 1990년대에 들어 멀티 레이어 신경망 기술이 확립되 나감에 따라 CNN(Convolutional Neural Network)과 결합하여 현대의 image classification 알고리듬을 구축하는데 기여하였다.

이와 같이 20년 이상 연구개발이 거의 단절되었던 인공지능의 흑역사로 인해 사실 인공지능분야는 여타의 과학과 공학 분야 중에서 상대적으로 가장 낙후 된 분야가 되었지만 90년대부터 부활하기 시작한지 불과 20여년 만에 활성화 되어 4차 산업혁명의 최첨단을 이끌고 있는 듯하다.

 

머신러닝 분야가 새로운 분야로서 각광을 받는다기보다는 제법 오래 된 히스토리를 가지고 있으므로 그 흐름을 잘 파악한다면 머신 러닝 입문에 도움이 될 수 있으리라 기대된다.

본인의 저서는 이러한 흐름을 이해하는 과정에서 저절로 얻어진 부산물일수도 있겠지만 그래도 입문의 방향성을 설정하는데 도움이 될 수 있는 사례라고 여겨진다.

특히 한가 지 지적해 둘 점은 책의 목차 구성에 있어서 일반 책 구성의 관점에서 보면 부록 정도로 처리할 수도 있는 내용이겠지만 직접 코드 작업을 시도해 봐야 하는 머신러닝의 속성상 1장은 즉 텐서플로우나 OpenCV 사용을 위한 프론드 엔드 즉 아나콘다 설치법이 되어야 할 것이다. 이 또한 업그레이드 영향을 워낙 많이 받기 때문에 개정판을 준비하고는 있으나 시간이 필요한 상황이라 별도의 블로그 글들을 통해 아나콘다 업그레이드 설치에 관한 내용을 이미 올려 두었으니 검색하여 찾아보기 바란다.