Convolution Neural Network란?
Convolution Neural Network란 얀 르쿤이 부흥 시킨 신경망 기법이다. 보통 이미지 분류에서 많이 사용된다. ANN이 인간의 뉴런을 모방하여 구조화한 것과 같이 CNN은 인간의 시신경을 모방하여 구조화했다. 다음에서 하나씩 살펴보자.
Convolution
컨볼루션은 이전에 신호와 시스템 강의에서 이미 배운적이 있는 연산이기에 간단하게 보고 넘어간다.
우선 위의 식은 전기전자, 통신 분야의 공학도들은 모두 친숙한 convolution 연산식이다.
위의 그림은 웃는 표정인 Input Image를 Feature Detector이다.
단순하게 보면 Input Image에서 Feature Detector의 사이즈에 맞는 배열을 찾아가며 Feature Detector와 1의 위치가 일치하는 개수를 Feature Map에 입력하는 것이다.
전부 진행하고 나면 위와 같이 Feature Map이 그려지는 것을 볼 수 있다.
보이듯이 Feature Detector를 통과하면서 이미지가 작아져서 다루기 쉬워지는 것을 볼 수 있다.
추가적으로 의미있는 특징점을 찾아서 너무 방대한 양의 이미지중 필요한 부분들만 처리를 하는것에 도움을 준다.
다양한 Feature Detector를 통과시켜서 다양한 Feature Maps를 얻어내서 Convolution Layer을 구성한다. 어떤 이미지에서 한가지 특성만 감지해내는 것은 의미가 없기 때문이다.
위 그림을 보면 사진을 명확하게 보기위해 main pixel이 5이고 주변이 대조되는 -1임을 볼 수 있다.
반면 위 그림은 중요도를 비슷하게 부여하여 확실하게 구분이 안됨을 볼 수 있다.
위 그림은 edge detecting을 위해 main pixel을 죽이고 그 주변을 1로 설정해준 것을 볼 수 있다.
그러나 위와 같은 과정들을 인간이 설정하는 것은 아니고 신경망이 알아서 적절한 특징점들을 파악하고 구성한다.
ReLU Layer
ReLU는 Rectifier Linear Unit의 줄임말로 흔히 쓰이는 유용한 활성화 함수이다.
ReLU Layer를 이용하여 비선형성을 강화하여 이미지 데이터의 선형성이 너무 강해지지 않도록 하는 역할을 한다.
Pooling
다음과 같은 똑같은 치타더라도 수많은 차이가 존재하는 이미지들을 토대로 학습을 제대로 할 수 있도록 도와주는 것이 풀링이다.
신경망이 공간적 불변성을 지니고 있어야하는데 이는 이미지의 특징점을 어떤 사진에서도 찾아낼 수 있다는 것이다. 이를 돕기 위해 풀링이라는 개념이 사용된다. 풀링에는 Mean pooling, Max pooling, Sum pooling등 다양한 풀링이 존재하는데
풀링이 어떤식으로 적용이 되는지 Max pooling의 간단한 예시로 살펴보자.
Max Pooling의 경우 여기서는 2X2배열을 기준으로 해당 배열내에서 가장 큰 값만 Pooled Feature Map에 입력하는 것이다. 이 과정을 통해 5X5배열에서 3X3배열로 줄여서 특징점을 찾는데 이 과정에서 75%의 필요없는 데이터들은 사라지게 된다. 4번 특징점이 조금 움직여서 맨 왼쪽 세번째 칸에 들어가 있다고 쳐도 Pooling을 진행하게되면 Pooled Feature Map에서는 동일한 위치에 자리하게 된다.
추가적으로 데이터의 크기를 줄여주니 매겨변수의 수를 줄여주면서 모델 성능을 높이는데 일조한다.
위와 같이 Pooling Layer를 거치면 사이즈가 줄어드는 것을 확인할 수 있다.
Flattening
Flattening은 말 그대로 데이터를 납작하게 만드는 것이다.
위와 같이 2차원 배열을 하나의 리스트로 만들어주는 과정이다.
풀링된 데이터를 신경망의 Input데이터로 사용할 수 있는 1차원 배열 형태로 만들어주는 것이다.
Full Connection
아래와 같이 완전한 신경망 구조를 완성해 보도록하자.
CNN에서는 Hidden Layer를 전결합층 즉 Fully Connected Layer이라고 부른다.
Flattening된 배열 데이터를 Input을 받아서 이미 특징이 보일 수도 있는 해당 데이터를 인공 신경망이 학습하여 더욱 좋은 추정 결과를 내도록 활용한다.
위는 입력층에는 Feature가 5개 있고 첫번째 전결합층은 뉴런이 6개, 두번째 전결합층에는 뉴런이 8개, 출력층은 두개가 있는 인공 신경망 구조이다. 하나의 결과를 추정해 내야하는 신경망이 아니기에 두개의 출력층이 있음을 볼 수 있다.
결과를 예측하고 오차를 계산하여 가중치를 재설정하는 과정이 진행이 되는데 이때 Feature detector도 재설정된다.
역전파를 통해 지속적으로 오차를 줄여나가는 것이다.
개를 찾는다고 보면 개 출력층에 연결된 모든 시냅스에 가중치를 얼마나 부여해야하는지 즉 어떤 뉴런이 개에게 실제로 중요한지 파악하는 것이 신경망이 학습하는 과정이라고 생각하면 된다.
두번째 전결합층에 위와 같이 가중치가 부여되어 있다고 가정하면 가중치가 1에 가까운 뉴런은 본인이 특징을 제대로 잡았다고 판단하고 출력층에 신호를 보낸다.
예를들어 가중치가 1인 한 뉴런이 귀의 특징점을 잡아서 축처진 귀라는 특징을 계속해서 보내면 Dog 출력층은 본인의 특징 뉴런임을 파악하고 Cat 출력층은 본인의 특징 뉴런이 아님을 파악하게 된다.
따라서 이러한 신호가 들어오면 Dog출력층은 본인이 중요시하는 뉴런에서 낮은 수가 들어오므로 본인이 아님을 파악하고 Cat은 본인의 특징을 말하는 것을 파악하게 되어 Cat을 판단을 내리게된다.
위와 같이 각 출력층을 판단하는 강력한 기준이 되는 뉴런이 무엇인지 파악하도록 학습이 되는 것이다.
이제 개의 사진이 들어가면
아래와 같이 숫자가 부여되고 Dog라는 결과를 출력하게된다.
고양이의 경우도 똑같다.
이러한 방식으로 아래의 사진들도 신경망이 판단하고 가능성있는 결과를 출력하고 있는 것을 볼 수 있다.
'Drawing (AI) > DeepLearning' 카테고리의 다른 글
Recurrent Neural Network (0) | 2023.05.02 |
---|---|
Udemy - 딥러닝의 모든 것(Softmax & Cross-Entropy) (0) | 2023.04.23 |
Pytorch Basic (0) | 2023.03.18 |
Udemy - 딥러닝의 모든 것(ANN 구축하기) (0) | 2023.01.06 |
Udemy - 딥러닝의 모든 것(ANN) (0) | 2022.12.27 |