Machine Learning

Machine Vision-4. 인공지능의 발전사 / 신경망 / 합성곱 신경망 / 허블과 토르스텐의 고양이 1차 시각피질 상호작용 실험

DOT-ICD 2022. 1. 25. 15:37
728x90

1.    인공지능의 발전사

 인공지능의 발전사에 대해 조금 더 알아본다면, 딥러닝 알고리즘의 발전을 이해하기 더욱 쉽다. 1943년 워런 매컬러와 윌터 피츠는 뇌의 뉴런 개념을 발표했고, 1950년에 앨런 튜링은 인공지능과 사람의 수준을 비교하는 튜링 테스트를 제안한다. 이후 1956년 다트머스 AI컨퍼런스에서는 인공지능에 대한 전망을 낙관적으로 파악하는 등 이 시기를 기점으로 인공지능에 대한 학문적 발전이 태동하기 시작했다.

 

 이후, 1957년 프랑크 로젠블라트가 사람의 시각뉴런을 수학적으로 모델링한 퍼셉트론을 발표하여 로지스틱 회귀의 기초를 놓았고, 1959년에는 앞서말한 데이비드 허블과 토르스텐 비셀이 고양이의 두뇌를 이용하여 시각 피질의 뉴런들의 상호작용 과정을 연구하여 노벨상을 수상하였다. 이후 이와 같은 이론들을 기반으로 인공지능을 구현하고자 하는 시도가 계속되었다.

 

 그러나, 컴퓨터 성능의 한계로 인해, 간단한 문제를 해결하는 수준의 알고리즘을 구현하는 것 이상의 목표를 달성할 수는 없었고, 이로 인해 첫번째 AI 겨울이 도래했다. [1] 이후 기호주의와 지식 기반 및 규칙 기반의 전문가 시스템(expert system)이 등장하여 두번째 AI붐이 시작됐지만, 곧 한계가 드러나 두번째 AI 겨울이 도래했다.

 

 마지막으로, 딥러닝 모델 최적화와 관련된 여러 문제(나쁜 가중치 초기화, 공변량변화,상대적으로 비효율적인 시그모이드 함수의 과도한 사용 등.[2])를 해결할 알고리즘의 개발, Nvidia사의 CUDA기반 CNN연산[3]을 통한 비용대비 컴퓨팅 성능의 비약적 발전과 여러 센서의 발달로 인해 데이터가 쏟아지면서 딥러닝을 기반으로 한 AI붐이 도래했고, 이는 4차 산업혁명으로 이어져 현재까지 많은 발전이 이루어지고 있다.

이러한 흐름에 맞추어, 영상 처리 분야 역시 전통적인 머신러닝 방법을 기반으로 하는 영상인식 기술보다 딥러닝을 기반으로 하는 영상인식 기술이 가장 인기있는 방식이 되었다.


2. 신경망

우선, 딥러닝이란 여러 층의 인공 뉴런으로 구성된 네트워크를 의미한다. 이때, 각각의 층을 구성하는 방법이 계속해서 제시되고 있다. 딥러닝은 다음의 층을 필수적으로 가지는데, 다음과 같다.


i.  입력층

신경망에 데이터를 주입하는 층


ii.  은닉층

입력층에서 주입된 데이터의 특성을 학습하는 층을 의미한다. 3개 이상의 층으로 구성되는 것이 일반적이다. 이때, 다목적으로 흔히 사용되는 층은 밀집층(Dense Layer)이다. 밀집층을 이루는 모든 뉴런은 이전 층의 모든 뉴런에서 정보를 전달받아 연산을 수행한다. 이 외에도, 데이터의 특성 또는 학습의 목표에 따라 전문화된 층을 사용하기도 하는데, 대표적으로 순환신경망층이 존재한다.


iii.  출력층

신경망이 출력할 값을 위한 층을 의미한다. 입력된 데이터를 은닉층을 거친 직후 바로 출력을 하게 된다면, 사람이 직관적으로 이해할 수 없는 출력이 생성된다. 따라서, 이 데이터를 종합하여, 우리가 목표하는 결과를 얻을 수 있도록 출력층을 설계하고, 결과값을 얻어낸다.


3.    합성곱 신경망 CNN (Convolutional neural network)

 딥러닝 입문 또는 영상 처리 입문 과정에서 접해보는 MNIST예제를 생각해보자. 이 예제에서는 28*28 픽셀의 흑백 이미지를 다루기에, 학습을 진행하는 밀집층에 존재하는 뉴런 하나는 785개의 파라미터에 대응된다. 그러나, 우리가 실제로 영상 처리에서 다루는 프레임 한 개의 크기는 적어도 200*200 이상의 풀컬러 RGB 이미지의 크기를 가질 것이다. 이 경우, 밀집층의 뉴런 하나는 12,001개의 파라미터가 필요하다. 만약, 이 밀집층이 수십개의 뉴런으로 이루어져 있다면, 우리는 우리가 구성한 단 한 개의 층을 학습시키기 위해 수백만개의 파라미터를 여러 수학적 방법을 통해 조정해야 한다. 이는 하나의 신경망 층을 학습시키기 위해 천문학적 컴퓨팅 자원이 필요하다는 것을 의미한다. 따라서, 연산의 양을 줄이기 위해 합성곱 신경망이 제시되었다.

허블과 토르스텐이 밝혀낸 우리 뇌의 시각 인지 메커니즘

 허블과 토르스텐 비셀은 고양이의 일차 시각 피질에 존재하는 단순 뉴런들(simple neuron)이 직선의 방향에 큰 영향을 받아 활성화된다는 점을 발견했다. 이 활성화 정보는 복잡한 뉴런(complex neuron)에 전달되어, 여러 직선 방향을 종합하여 더욱 복잡한 형태를 인식하고, 이 정보는 또다시 다음의 복잡한 뉴런에 전달된다. 궁극적으로는 우리의 신경계를 이루는 뉴런의 층이 깊어질수록(뉴런의 연결이 많아질수록) 더욱 다양한 사물을 구별할 수 있게 된다는 점을 알 수 있다. 이와 같은 점은 이제 알아볼 합성곱 신경망의 구조와 매우 유사하다. (사실, 합성곱 신경망의 출발 자체가 이 연구 결과를 바탕으로 시작된 것이다. 즉, 합성곱층은 우리 뇌의 시각 피질의 작동과정을 모방한 것이다!)

 합성곱 층은 일련의 커널 또는 필터로 구성된다. 이때, 커널은 입력으로 주어진 이미지에서 이미지의 일부분만을 연산하는 행렬을 의미한다. 입력으로 주어진 하나의 이미지에서 커널은 왼쪽 위 모서리부터 오른쪽 아래 모서리까지 이동하며 이미지를 스캔(합성곱 연산을 수행함을 의미)한다. 이때, 커널의 크기와, 커널이 한번에 이동하는 스트라이드 크기(스텝 크기), 활성화 맵의 크기를 맞추어 주는 패딩 등을 적절히 조합하여 커널이 훑고 지나가는 형태를 결정한다. 이 커널은 밀집층을 이루는 인공뉴런과 마찬가지로 오차역전파를 통해 학습되는 가중치로 구성된다. 합성곱 신경망을 MNIST예제에 적용해보자. 하나의 커널을 3*3의 크기로 구성한다면, 이 커널은 가중치 9개와 절편1개를 더해 총 10개의 파라미터를 갖는다.

 

 일반적으로, 합성곱 층 하나에는 여러 개의 커널-필터를 사용한다. 하나의 층에 존재하는 커널 중 한 커널은 스캔하는 범위의 픽셀에서 수직선 구조가 있는지 파악하는 필터 역할을 할 수 있고, 또다른 커널은 색 변화와 같은 특성을 파악하는 필터 역할을 할 수도 있다. , 한 개의 층에 존재하는 여러 개의 커널은 각각 특정한 형태의 부분 이미지에서 큰 활성화 값을 출력한다. 이 출력 값들은 커널이 전체 이미지를 왼쪽 위에서 오른쪽 아래로 훑으면서 계속해서 생성되고, 이는 2차원 활성화 배열의 형태로 새로운 데이터 형식으로 저장된다.  이때, 2차원 활성화 배열 형태의 데이터를 활성화 맵(activation map)이라 부른다.

 

 허블과 토르스텐 비셀의 실험에서 알 수 있었던 생물학적 시각 시스템의 계층적 구조와 유사하게, 합성곱 층을 여러 층을 쌓아 계층 구조를 만들어 낼 수 있다. 이때, 각 층은 직전 층의 활성화 맵을 입력으로 받아들인다. 생체 시스템과 유사하게, 층이 깊어질수록 각 층에 존재하는 필터들은 단순한 특성에서 그러한 특성들이 복잡하게 조합된 패턴에 반응하도록 학습된다. 결과적으로, 복잡하고 추상적인 공간패턴을 학습하고 분류할 수 있게 된다.

 이와 같은 특성을 정리해보면 다음과 같다.


  1. 많은 개수의 커널을 사용하면 더욱 복잡한 특성을 구분할 수 있다. , 연산에 소용되는 비용 역시 그에 비례하여 증가한다. 따라서, 해결하고자 하는 문제의 복잡성에 따라 적절한 커널의 개수와 크기를 고려해야 한다.
  2. CNN의 여러 레이어로 구성된 신경망 모델에서 얕은 부분에서는 간단한 특성을, 깊은 부분에서는 간단한 특성이 조합된 복잡한 특성을 감지한다는 점을 유의해야 한다. 즉, 얕은 층에는 많은 수의 커널을 사용할 필요가 없고, 깊은 층에서는 적은 양의 커널을 사용한다면 충분한 성능을 얻을 수 없다. 따라서, 얕은 층보다 깊은 층의 CNN에 더 많은 수의 커널을 배치해야 한다.
  3. 결국 좋은 모델을 개발하는 것은 계산 복잡도를 줄이는 것이다. 이는 각각의 층에서 몇 개의 커널이 존재하는지에 연관되어 있다. 따라서, 시행착오를 통해 모델의 검증 점수가 증가하지 않는 선에서 최소한의 커널 만을 사용해야 한다.

4.    풀링 층 (Pooling Layer)

 지속적으로 설명했듯, 딥러닝 모델을 구성할 때, 가장 중요한 것은 정확성과 계산 복잡도이다. 아무리 정확성이 좋더라도, 계산 복잡도가 너무나도 높아 연산에 너무 많은 비용이 소요된다면, 그 모델은 실제로 사용할 수 없다. 따라서, 우리는 정확성을 유지하면서 계산 복잡도를 줄일 필요가 있다. 이를 위해, 풀링 층을 사용할 수 있다. 풀링 층의 경우, 학습되는 가중치가 존재하지 않는다. , 인공 뉴런의 개념을 포함하지는 않는다. (따라서 풀링 함수라고 불리기도 한다.) 대신, 파라미터의 개수와 계산복잡도를 줄이기 위한 별도의 연산 과정을 수행한다.

 

 앞에서 설명하였듯, 하나의 CNN Layer는 여러 개의 커널을 가질 수 있고, 각각의 커널은 연산 수행의 결과물을 2차원 배열 형태의 활성화 맵으로 출력한다. 최종적으로, 하나의 CNN Layer는 여러개의 커널의 활성화 맵을 하나로 묶어 3차원 배열 즉, 3차 텐서의 형태로 해당 층에서의 연산 결과값을 출력한다.

 

 풀링 층은 활성화 맵의 공간 차원을 축소시키고, 깊이 차원은 그대로 두는 연산을 수행한다. 이를 위해 풀링 층은 CNN Layer와 유사하게 두개의 요소를 갖는데, 필터 크기와 스트라이드 크기를 갖는다. 필터 크기의 경우 수용장(receptive field)이라는 용어로 표현되기도 하는데, 결국 커널의 크기를 의미한다. 합성곱 층에서 커널이 입력된 데이터 위를 왼쪽 위부터 오른쪽 아래까지 슬라이딩하며 학습하는 것처럼, 풀링 층의 필터 입력된 수용장과 스트라이드에 따라 입력된 활성화 맵 위를 슬라이딩하며 데이터 축소 연산을 진행한다.

 이때 사용되는 데이터 축소 연산의 경우 여러 종류의 연산이 존재하는데, 대표적으로 max연산이 있다. 이 연산은 수용장에서 가장 큰 활성화 값만을 취하고 나머지 값을 무시한다. 이 과정을 통해, 공간 차원을 축소시키며 파라미터의 개수를 감소시킨다. 일반적으로 필터의 크기를 2*2, 스트라이드의 크기를 2로 설정하는데, 이 경우 풀링 층의 필터가 각 위치에서 4개의 활성화 값을 비교해 가장 큰 1개의 값을 남긴다. 따라서, 활성화 맵이 4배만큼 작아지게 된다. 당연히, 이 연산은 깊이와는 독립적으로 수행되므로, 입력된 활성화 맵의 깊이에는 영향을 주지 않는다. 이와 같은 특성으로 인해, 풀링 과정은 서브샘플링 과정이라 불리기도 한다.

 


[1] 박해선, ‘혼자 공부하는 머신러닝+딥러닝’, 2020, 한빛미디어, p27

[2] 존 크론, 그랜트 베일레벨드, 아그레이 바슨스, ‘딥러닝 일러스트레이드’, 2021, 시그마프레스, p13.

[3] 기철민, ‘CUDA를 이용한 Convolution Neural Network의 효율적인 구현’, 2017, 한국정보통신학회논문지 Vol.21, No.6 : 1143~1148

 

728x90