06-5 컨볼류셔널 뉴럴 네트워크 코딩을 위한 워밍업 CNN 필터와 스트라이딩

in #kr5 years ago (edited)

머신 러닝의 여러 가지 문제 중에서 CNN(Convolutional Neural Network)에 다다르게 되면 왜 이렇게 복잡한 코딩을 하는지 이해하기가 무엇보다 어렵다고 생각할지도 모르겠다.

그럴 때면 항상 머신 러닝의 발전과정을 단계적으로 돌이켜 볼 필요가 있다. 1940년대 초 이미 McCulloch 과 Pittsdp 의해 신경병리학적인 관찰 결과를 논리학적인 토대 위에 뉴론에 입력되는 신호들에 대하여 웨이트를 부여하는 신경망 모델이 제안되었다. 그로부터 시작해서 1957년에 Rosenblatt이 오늘날의 조도센서로 알려진 포토 센서를 사용하여 컴퓨터와 인터페이스를 통해 퍼셉트론을 시현했다. 이 퍼셉트론으로만 해도 이미 문자 인식이 가능했고 아울러 이미지 인식이라든지 인간처럼 말하거나 듣고 이해한다든지 오늘 날의 머신 러닝의 미래를 미리 예견했었다.
한편 당시에는 Rosenblatt이 연구하던 퍼셉트론과의 관계를 지우기 어렵겠지만 하바드의 후벨 박사에 의해 흑백 명암으로 구성된 edge 형 오브젝트에 대한 고양이 시각 피질 반응에 대한 연구가 이루어졌으며 그 후로도 평생 시각인식에 대한 연구에 헌신한 후벨 박사가 1981년에 노벨 의학상을 받게 되는 공로도 결국은 고양이 시각 피질 반응연구였다.

하지만 1960년대 머신 러닝의 발전이 지지부진했던 시기인 1969년에 Minsky 교수가 퍼셉트론이 XOR 로직문제를 풀어내지 못한다고 디스하던 시기를 거쳐 미제로 남겨졌던 뉴럴 네트워크가 1980년대 힌튼 교수에 이르러서 Backpropagation 이론 정립으로 간신히 명맥을 유지해 나가게 된다. 문헌에 의하면 1970년대 초 Rosenblatt의 사고사 이후 머신 러닝 분야 자체가 아예 사양화 되어 이 분야를 연구하는 사람 수가 당시의 논문 출판 결과물에 근거하여 판단해 보면 전 세계에 4∼5명 이내였던 시절이 있었던 것 같다.

1980년대 후반기에 이르면 마이클 잭슨과 같이 락큰롤 스타와 같은 인물이 머신 러닝 분야에 혜성과 같이 나타나는데 그가 바로 Yann LeCun으로서 현재 FaceBook에서 인공지능 연구를 이끄는 리더로 활약 중이다. 프랑스에서 컴퓨터 과학 분야에서 박사학위를 취득 후 1987 ∼1988년에 미국에서 완전 사멸되어 버린 머신 러닝 연구의 족보를 들고 캐나다에서 망명 캠프를 꾸리고 있던 힌튼 교수의 실험실에 박사후 과정(postdoctor)을 하게 된다. 이어서 미국 이공계 출신이 취업하고 싶어하는 꿈의 연구소라 불렸던 AT&T 밸랩에 연구원으로 가게된다.

그 당시 AT&T 는 우리로 치면 KT 에 해당하는데 미국의 많은 기업 중에 엄청난 수익을 올렸으며 특히 통신 업계의 독점자가 되어 버려 어쩔 수 없이 분할하게 되는 과정을 겪게된다. 여기서 LeCun 은 생물학 분야에서 영감을 받은 CNN 연구를 최초로 시작하게 된다.
이미 1970년대 후반부터 컴퓨터 과학 분야에서 광학카드판독기술 즉 OCR(Optical Card Reader)과 펀치 카드가 전 세계적으로 특히 우리나라에서는 그 당시 오늘날의 수능 시험인 예비고사 채점기술로 활용되고 있었다. OCR 에서는 사람이 직접 데이터를 보고 타이핑하여 펀치카드를 준비해야 한다. 즉 인식 작업은 사람이 담당하는 몫이었다.

LeCun의 연구 즉 MNIST 수기숫자 인식 분야의 연구는 OCR 기술을 넘어서야 하는 기술로서 생물학적인 영감을 받아서 새로운 즉 지금은 CNN 으로 알려진 기술을 창조해야 하는 엄청난 과제로 보아도 무방할 것이다.

물론 생물학적 영감이란 것이 LeCun 의 머릿 속에 자연히 떠 오른 것이 아니라 Hubel 박사의 고양이 시각피질 반응 연구일 것이라 추정한다. 이미 인터넷에 LeCun이 출판한 논문들이 오픈소스화 되어 있으므로 읽어보게 되면 이에[ 단사를 찾을 수 있을지도 모르니 참고하기 바란다.

머신 러닝에서 후벨 박사의 연구 내용 즉 고양이가 흑백 명암으로 구성되는 기울어진 사선(edge)형 오브젝트에 대해 시각 피질의 특정 뉴론들이 반응한다는 사실을 컴퓨터 코드로 실현해야 하는데 바로 그 내용이 CNN 에 있어서 필터링에 해당한다.

CNN 에 있어서 특히 edge 형태의 오브젝트를 인식함에 있어서 이미지 전체를 한 방에 인식하는 것이 아니고 이미지보다 크기가 아주 작은 카메라로 TV에서 전자빔을 주사하듯 스트라이딩 시켜 뭔가 잘 알 수는 없지만 고양이 시각 피질이 수행하는 연산 결과와 동일한 결과를 CNN에서도 얻어 내야 한다. 그러한 필터 중에 가장 기본적인 것이 스트라이딩 하는 과정에서 필터에 대응하는 각 픽셀 값을 1로 곱한 후 합산 후 필터의 픽셀 수로 평균하여 얻은 값을 기록하게 되면 스트라이딩 이전의 이미지 매트릭스 보다 작은 크기의 필터링 된 이미지 매트릭스가 얻어진다.

noname01.png

CNN에서 사용하는 필터의 크기는 특별한 제한이 없겠지만 전체 이미지의 크기에 상관없이 대체로 연습 단계에서 2X2 나 3X3을 주로 사용한다. 위 그림에서처럼 필터링 할 때 마다 필터링 된 픽셀 값이 얻어지는데 우로 한칸씩 오른쪽 경계에 도달하면 좌측 경계로 아래로 한칸 이동하는 것을 1X1 스트라이딩이라고 한다. 좋은 인식률을 얻어내기 위해서는 다양한 스트라이딩 경우를 테스트해 봐야 할 것이다.

이와 같은 CNN 필터를 하나만 쓰는 것이 아니라 아예 파라메터화 하여 2, 4, 8, 16, 32 와 같이 임의로 갯수를 설정하여 사용하게 된다. 물론 첫 번째 필터는 매트릭스의 값이 1인 필터로 구성된다고 보면 된다. 그밖에도 많은 CNN 필터가 있는데 MNIST TensorFlow 해석에서는 그냥 파라메터화 되어 있기 때문에 갯수만 지정하면 된다. 아마도 LeCun 이 이미 1990년대에 필터 만드는 작업을 다 해버린 것 아니가 생각된다.

위 그림에서 그 픽셀 값이 1,2,3,...,9 로 표현된 전체 이미지는 이미지로서 특별한 의미는 없고 뒤따르는 CNN 코딩을 준비하기 위한 단순 수치 예제로 보면 된다.

스트라이딩의 첫 번째 단계에서 필터링 된 값은 3이 된다. 반드시 평균 값을 취해야 하는 이유는 예를 들어 픽셀 값이 0∼255 범위를 가진다면 픽셀 값 합한 수만큼 나누어 주어야 255를 넘지 않으므로 픽셀로서의 의미가 유지된다고 볼 수 있을 것이다.

두 번째 단계에서 필터링 된 값은 4이며, 세 번째는 6, 네 번째는 7이 된다.

noname02.png

CNN 이 처음에는 어렵고 생소하게 느껴질지 모르지만 단계적으로 처리과정을 따라 코딩 연습이 뒷받침하면서 따라가 보기로 한다.

Sort:  

jjm.jpeg
짱짱맨 호출에 응답하여 보팅하였습니다.

짱짱맨은 저자응원 프로그램입니다. 더 많은 저자 분들에게 더 큰 혜택을 드리고자 스파임대 스폰서를 받고 있습니다. 스폰서 참여방법과 짱짱맨 프로그램에 관해서는 이 글을 읽어 주세요. 기업형 예비증인 북이오(@bukio)가 짱짱맨 프로그램을 운영하고 있습니다. 여러분의 증인 보팅은 큰 힘이 됩니다. Vote for @bukio

Coin Marketplace

STEEM 0.30
TRX 0.12
JST 0.033
BTC 64143.01
ETH 3154.83
USDT 1.00
SBD 3.86