4-4 NN(Neural Network), Deep Learning(?) , CNN(???) 이 뭔지 참고로 일독해 보자.
1959년 하바드 의과대학의 후벨과 위젤 ( Hubel & Wiesel)교수는 원숭이 대뇌 실험을 통해 시각피질에서 웜숭이가 시각적으로 보게 되는 오브젝트들의 특징을 탐지한다는 사실을 발견하여 훗날에 신경 병리학(Physiology)분야의 업적으로 노벨 의학상을 수상하게 된다.
다음 사진에서 당신의 뇌속의 CNN을 사용하여 숨은 고양이를 찾아 보기 바란다.
일단 원숭이든 고양이든 사진에서처럼 옴짝 달짝 못하게 지그로 꽉 고정 시킨 후 뇌의 시각피질 (visual cortex)에 전극을 설치하는 한편 고양이 에게 실험용 작대기를 여러 가지 양상으로 보여주면서 시각피질에서 나오는 전기 신호를 오실로스코프로 관찰한다
이들은 특히 오브젝트의 상태에 따른 고양이의 시각 피질 반응 연구를 통해서 뇌의 신경세포들이 어떻게 구성되어 시각적인 인식을 낳게 되는지 상세한 메카니즘을 밝혔음과 아울러 평생 동안 2000년 이후에 이르기까지 이 분야를 연구하여 특히 머신 러닝 발전에 획기적인 기여를 하였다(필자가 보기에). 후벨과 위젤이 밝힌 시각인식의 메커니즘의 핵심이 바로 컨볼류션(Convilution)으로서 하나의 이미지 전체의 픽셀을 한방에 다 보는 것이 아니고 작은 단위로 나누어 컨볼루션 과정을 통해 얻어지는 정보를 종합하여 이미지를 인식하게 되는 것이다.
컨볼류션(Convilution)이라는 단어가 익숙치 않을 수 있는데 revolution 이라는 단어를 비교해보자. 아주 알기 쉽게 서부영화에서 흔히 보는 6 발짜리 리볼버(Revolver)권총을 생각하면 된다. volution 은 돌린다는 의미며 revolve 는 하나의 중심 축을 중심으로 돌린 다는 뜻임에 반해 Convolve 는 큰 사각형 안에서 작은 사각형을 위에서부터 양쪽 모서릴 사이를 왔다 갔다 하는 TV 주사선 방식으로 스캔하면서 움직인다는 의미이다.
그 이유는 우리가 재미로 많이하는 숨은 그림 찾기를 생각하면 된다. 사각형 그림 안에 특징이 있는 물건을 숨겨 놓고 찾아내는 게임이다. 바로 그 원리를 말하는 것이다. 그림의 세부 세부를 훑어 보거나그림을 옆으로 또는 아래 위로 뒤집어 보든가 해야 한다.
CNN(Convilutional Neural Network) 이전에 이미 NN을 여러 차례 블로그에 올렸으며 그 코딩 구조에 관해서 알아보았다. 자연계의 신경망을 모방한 이 NN을 사용하여 상당히 까다로운 XOR 로직 문제를 해결할 수 있음을 확인한 바 결국 NN 은 생명체의 실제 뉴론은 아니지만 그래도 아주 비슷한 역할 수행이 가능한 인공 뉴론이라 할 수 있을 것이다. 따라서 이 NN을 가지고 CNN을 구성한다면 오브젝트 이미지를 인식할 수 있는 가능성이 열리게 될 것이다.
CNN 코딩을 해보기 전에 아직도 NN에 대해서 몇가지 기본적인 특성을 알아야 한다. NN 이 꼭 CNN에만 사용되는 것이 아니고 요즈음 세간에 유행했던 Deep Learning 의 핵심이기도 하기 때문에 몇가지 특성을 확실히 파악해야 제대로 알고서 CNN에도 적용이 가능하다는 의미이다. Deep Learning 이란 머신 러닝 분야의 용어가 널리 알려졌는데 갑자기 툭 튀어나온 것은 아니며 NN 연구가 무려 60년간에 걸쳐 너무 지지부진하였기에 최근에 머신러닝이 급발전을 하면서 새롭게 명명이 된 것이다. 내용은 NN에서 크게 벗어난게 없으며 다음에 이어서 설명하는 내용까지 보충해서 Deep Learning 이라 하면 될 것이다.
그렇다면 과연 NN을 가지고 파악해야할 어떤 중요한 내용이 있는지 알아보자.
첫째로 XOR 로직 문제를 처리하기 위해서 몇 단의 은닉(hidden) 레이어가 필요한가? 이론적으로 layer 수 제한은 없지만 layer 수를 늘려 나가면 컴퓨터 계산상의 부작용이 필연적으로 발생한다. 그렇다면 그 대안은 무엇인가? 은닉층을 무작정 많은 수로 늘려 버렸을 때 과연 Backpropagation 에 의한 수치 계산이 원활하게 이루어질 것인가? 이런 문제를 시험 보기 위해서 Minsky 와 Papert 교수가 제안했던 3개의 레이어를 가지는 수준의 NN 모델을 XOR 로직 문제에 적용하여 성과를 확인해 볼 필요가 있다. 그 다음에는 위 그림 수준만큼의 은닉 층을 실패를 확인해 보기 위해서 시험해 보기로 한다.
실제로 NN 을 기본구성단위로 하여 CNN을 구성할 경우 위 그림에서의 단수만큼 정도의 레이어구성은 기본적으로 필요하다는 점을 지적해 두자.
둘째로 은닉층을 코딩할 때에 몇 개의 웨이트를 설정할 것인가? 코드 작성자가 임의로 설정이 가능한데 가급적 최소화 하는게 좋을 듯하다. 모델링 작을 할때에 불필요하게 파라메터들을 많이 잡게 되면 오히려 모델링에 실패하기 십상이다. 마찬가지로 항상 적정선이 있을 것이며 잘 모르겠으면 웨이트 수를 변동시켜 시험해 보도록 하자.
갑작스럽게 머신 러닝의 내용이 점프한다는 생각이 들수도 있겠지만 허구한 날 데이터 1,2,3, 선형 회귀 문제라든지 , AND, OR, XOR 로직 문제가 되니 안되니 해왔는데 사실 그 부분이 도입부분 전체로 이해하면 될 것이다. 일단 도입되고 나면 이론이고 쥐뿔이고 다 필요 없고 오직 코딩으로 결과를 보여주는 수밖에는 없다.
글 잘 보고 갑니다 아직 초보라 무슨 말인지 모르겠지만 어쨌든 잘 보고 갑니다 ^^
보팅 너무 감사합니다 ㅋ
자주 뵀으면 좋겠습니다