Notice
Recent Posts
Recent Comments
Link
관리 메뉴

Douglas' Space

CNN 신경망을 통해 이해하는 딥러닝 본문

Computing Tech. Diary/Artificial Intelligence

CNN 신경망을 통해 이해하는 딥러닝

똘키아빠 2022. 4. 28. 16:20
지금까지는 ANN의 기본적인 개념 및 용어에 대해서 소개했습니다. 앞으로는 실제 ANN을 이용한 다양한 응용분야를 중심으로 소개하고자 합니다. CNN(Convolutional Neural Net)은 딥러닝 분야의 전성기를 촉발시킨 ANN로서 가장 대표적인 ANN모델입니다. 이 CNN에 대해 I/O를 중심으로 소개하고 기본적으로 학습이 어떻게 수행되는 가를 소개하고자 합니다. 
CNN은 컴퓨터비전에서 객체인식에 대한 문제를 해결하기 위해 제안되었습니다. 객체인식을 위해서 CNN은 객체가 존재하는 사진이미지를 입력받고, 학습한 사진에 존재하는 객체의 종류를 구분합니다.  예를 들어 손으로 쓴 숫자를 인식하여 0부터 9까지를 구별하는 CNN을 개발한다고 한다면 다음과 같이 CNN 모델이 구성될 수 있습니다.  
위의 모델의 입력을 보면 3이라는 그레이스케일의 사진이미지가 있습니다. 이미지는 32X32의 픽셀로 구성되어 있습니다. 각 픽셀에는 3을 표현하는 그레이스케일의 값이 존재합니다. 그림에서는 정확하게 표현이 되지 않았지만 CNN의 입력은 위에서 오른쪽 방향으로 각 픽셀을 1차원 벡터로 구성하여 입력합니다.  즉 1,024의 벡터로 입력이 됩니다. 
학습 데이터가 입력되면 Forward propagation에 따라 출력 방향으로 신경망의 각 노드가 활성화되어 출력 값을 계산하고,  최종 출력에서 0~9까지의 해당하는 확률값을 계산합니다. 즉, 마지막 출력 layer의 활성화 함수는 softmax 활성화함수를 사용하여 확률값이 계산됩니다. 
학습은 계산된 확률값과 정답(해당 노드의 확률값 1, 나머지는 0)을 비교하여 그 차이 만큼을 보정하기 위해 backward propagation 을 수행하여 각 링크의 가중치 값을 조정합니다.  따라서 학습은 설정한 하이퍼파라미터에 따라 모든 학습데이타셋에 대해 동일하게 forward 및 backward propagation을 반복해 가면서 가중치를 계속 조정한 후 종료됩니다. 학습이 종료되면 학습한 최종 모델에 대해 테스트 데이터를 입력하여 그 결과를 검증하여 모델의 정확도를 계산합니다. 
CNN의 내부를 살펴보면 크게 feature extraction 부분(특징추출기)과 classification 부분(분류기)으로 구분합니다. 분류기는 우리가 지금까지 알고 있는 일반적인 ANN형태(이를 fully connected layer라 함)로 구성되어 있습니다. 그러나 특징추출기에는 convolution layer(합성곱계층)라는 특별한 layer가 존재하는데 이 layer가 바로 CNN의 특징을 규정짓는 layer입니다. 이 layer를 통해서 해당 이미지의 특징을 추출합니다. 이는 우리의 시신경을 분석하니 특정 부분에서만 뇌가 활성화하는 것을 알게 되었고. 이를 착안하여 특징 추출을 위한 필터를 사용하여 입력값과 합성곱을 계산합니다. 이렇게 하면 이미지의 지역적 특징들을 잘 학습하게 됩니다.  subsampling layer(또는 pooling layer)는 합성곱의 결과인 feature map의 크기를 감소하여 크기를 조정하는 역할을 담당합니다. 
아래 그림은 ImageNet이라는 이미지 데이터베이스를 이용하여 객체를 인식하는 대회(ILSVRC : ImageNet Large Scale Visual Recognition Challenge)에서 우승한 CNN 모델들을 보여주고 있습니다. 그림의 적색 선은 ResNet 이후의 CNN들은 사람의 오차율 5%보다 낮다는 것을 의미합니다.
위의 모델들은 기본적인 CNN의 모델을 기반으로 하이퍼파라미터를 조정하여 만들어진 변형된 CNN 모델들 입니다. 보통 신경망의 층수를 점점 많이 쌓아서 만들어 졌습니다. (이를 통해 Deep Neural Net이라고 부르게 되었습니다.) 그러나 결론적으로는 이미지의 크기와 분류할 객체의 종류에 따라 입출력 계층의 크기만 결정하고 가장 최적의 모델을 선택해서 사용하면 됩니다. (이러한 신경망을 구성하고, 데이타를 입력하여 학습을 수행하고, 모델을 만들어주는 놈이 바로 Tensorflow나 Pytorch 같은 딥러닝 프레임워크 소프트웨어입니다. 이들은 모두 Open Soruce Software입니다.)
Comments