지난 포스팅에서 컴퓨터 비전의 과거와 CNN(Convolution Neural Network)의 구성 요소, 퍼셉트론, 합성곱층에 대해 알아보았습니다. 합성곱층과 함께 풀링, 활성화 함수, 드랍아웃 등 다양한 요소를 활용한다면 모델의 성능을 더욱 향상시킬 수 있습니다. 오늘 포스팅에서는 CNN에서 사용될 수 있는 다양한 기법들과 함께 CNN의 학습이 어떤 방식으로 이루어지는지 살펴보도록 하겠습니다.
1. CNN의 구성요소
<그림 1> 심층 신경망 구조
심층 신경망은 <그림 1>과 같이 은닉층이 여러 겹 쌓여 있는 구조로 이루어져 있습니다. 이 은닉층을 어떤 식으로 배치하느냐에 따라 모델의 성능에 큰 영향을 끼칩니다. 이러한 배치 구조를 모델 아키텍쳐라고 부릅니다. CNN 아키텍쳐를 구성할 수 있는 요소들로는 합성곱층, 풀링, 패딩, 드랍아웃, FC layer 등이 있습니다. 지난 포스팅에 소개한 합성곱층 이외의 다른 요소들에 대하여 살펴보도록 하겠습니다.
1.1. 풀링(Pooling)
풀링은 CNN 모델에서 사용되는 기법 중 하나로, 이미지나 다차원 데이터의 공간적인 해상도를 줄이는 역할을 합니다. 주로 컨볼루션 레이어 다음에 적용되며, 주요 목적은 계산량을 줄이고 특징을 강조하는 것입니다. 풀링은 작은 윈도우(예: 2x2 또는 3x3)를 이동시키면서 해당 윈도우 내의 값들을 하나의 대표값으로 축소하는 역할을 합니다. 가장 일반적인 풀링 연산은 최대 풀링(Max Pooling)과 평균 풀링(Average Pooling)이 있습니다.
<그림 2 풀링>
- 최대 풀링(Max Pooling): 각 윈도우 내에서 가장 큰 값을 선택하여 그 값을 사용하는 방식으로, 특징을 가장 강조하는 역할을 합니다. 이미지에서 높은 민감도를 요구하는 특징을 강조하는 데에 유용합니다.
- 평균 풀링(Average Pooling): 각 윈도우 내의 값들의 평균을 계산하여 그 값을 사용하는 방식으로, 특징의 일반적인 형태를 유지하면서 해상도를 감소시킵니다. 이는 노이즈를 줄이는 효과를 가질 수 있습니다.
풀링을 통해 데이터의 크기를 줄이면서도 중요한 특징을 유지할 수 있어 연산량을 줄이고 모델의 일반화 능력을 향상시키는 데 도움을 줍니다.
1.2. 패딩(Padding)
<그림 3> 패딩
패딩(Padding)은 입력 데이터의 주변에 추가적인 값(일반적으로 0)을 채워 넣는 작업을 말합니다. 주로 컨볼루션 레이어에서 입력 데이터의 크기나 형태를 조정하기 위해 사용됩니다. 합성곱, 풀링을 수행하면 데이터의 크기가 줄어들고 특징이 압축됩니다. 데이터의 크기가 지나치게 줄어들면 추가적인 작업을 수행할 수 없기 때문에 패딩을 통해 크기와 형태를 조절해줍니다. 대부분의 CNN 아키텍쳐는 이러한 방식으로 데이터의 크기를 줄이고 늘리며 특징을 추출합니다.
1.3. 활성화 함수(Activation Function)
활성화 함수(Activation Function)는 인공 신경망(Artificial Neural Network)에서 사용되는 중요한 개념 중 하나입니다. 이 함수는 은닉층의 사이 혹은 출력층에서 사용됩니다. 활성화 함수의 역할은 입력 신호의 가중합을 받아 뉴런의 활성화 여부나 출력 값을 조절하는 것입니다. 예를 들어 Relu 함수의 경우 입력값이 0보다 작으면 0의 값을 출력하고, 0보다 크면 입력 값을 그대로 출력합니다.
<그림 4> Relu
<그림 5> 시그모이드 함수
시그모이드 함수는 입력층에서는 주로 사용되지 않습니다. 0과 1 사이의 값을 가지기 때문에 출력 값을 확률로 해석할 수 있습니다. 따라서 이진 분류의 출력층에 주로 사용됩니다. 일반적으로 출력 값이 0.5 이상이면 1, 미만이면 0으로 분류됩니다.
<그림 6> 소프트맥스 함수
소프트맥스(Softmax) 함수는 주로 다중 클래스 분류 문제의 출력 레이어에서 사용되는 활성화 함수입니다. 이 함수는 입력값을 받아 각 클래스에 속할 확률을 나타내는 값의 계산에 사용됩니다. 모든 확률의 합은 1이며 확률값이 가장 큰 클래스가 정답으로 선택됩니다.
<그림 7> 기타 활성화 함수
가장 일반적으로 사용되는 활성화 함수에는 다음과 같은 것들이 있습니다. 하이퍼볼릭 탄젠트(Tanh) 함수는 시그모이드와 비슷한 형태를 가지지만 -1과 1 사이의 값을 출력합니다. 입력이 0 근처에서는 더 가파른 경사를 가집니다. Leaky Relu 함수는 Relu의 변형으로 음수 입력에 대해 작은 기울기를 가지는 함수입니다. 데이터의 분포와 형태에 따라 알맞은 함수가 존재합니다. 따라서 여러 활성화 함수를 적용해본 뒤 챔피언 모델을 선정하는 방식으로 모델 구성을 진행해야 합니다.
1.4. Fully connected layer(FC layer)
<그림 8> Fully connected layer
FC layer는 "Fully Connected Layer"의 약자로, 완전 연결 레이어라고도 불립니다. FC layer는 입력 뉴런과 출력 뉴런이 모두 연결되어 있는 1차원 레이어를 말합니다. 2 차원 이미지에 FC layer를 적용하려면 <그림 8>처럼 행렬을 얇게 잘라 1 차원 벡터로 변환하는 Flatten 과정이 필요합니다. 보통 FC layer의 출력 값에 활성화 함수를 적용합니다.
1.5. Dropout
<그림 9> Drop out
드롭아웃(Dropout)은 신경망에서 과적합(Overfitting)을 줄이고 일반화 능력을 향상시키기 위한 정규화(regularization) 기법 중 하나입니다. 드롭아웃은 특정 뉴런을 랜덤하게 선택하여 학습에 제외시키는 것을 말합니다. 이로 인해 네트워크가 특정 뉴런에 지나치게 의존하지 않도록 하며 테스트 에러를 줄일 수 있습니다. 드롭아웃될 뉴런은 랜덤하게 선택되며 드롭아웃 비율은 일반적으로 20%나 50%와 같은 값을 선택합니다.
1.6. 다양한 모델 아키텍쳐
앞서 설명한 다양한 기법들을 조합하여 본인만의 모델 아키텍쳐를 구성할 수 있습니다. 이미지 분류 문제에 쓰이는 유명한 합성곱 신경망 아키텍쳐는 다음과 같습니다.
<그림 10> 유명한 이미지 분류 아키텍쳐
Alexnet은 2012년 이미지넷 대회에서 우승한 첫 번째 CNN 아키텍처로, 컴퓨터 비전 분야에서 딥러닝의 대중화를 이끈 모델입니다. VGG16은 16개의 레이어로 이루어진 모델입니다. VGG19는 19개의 레이어로 이루어진 모델입니다. 2014년 옥스포드 대학에서 개발한 아키텍쳐로 널리 사용되고 있습니다.
<그림 11> 아키텍쳐 순위
2023년 8월 이미지넷 분류 성능 기준으로 BASIC-L 모델이 가장 높은 성능을 기록하고 있습니다. 또한 눈여겨봐야할 모델로 12위를 기록한 Meta Pseudo Labels가 있습니다. BAISIC-L 대비 20%의 파라미터로 90.2%의 Top 1 Accuracy를 기록하였습니다. 적은 파라미터의 가벼운 모델은 모바일 등 리소스가 제한된 환경에서도 유용하게 활용될 수 있다는 장점이 있습니다.
2. 모형 학습
2.1. 경사 하강법(Gradient descent)
경사 하강법(Gradient descent)은 머신러닝과 딥러닝에서 최적화 문제를 해결하기 위해 사용되는 최적화 알고리즘 중 하나입니다. 이 알고리즘은 현재 위치에서 함수의 경사(기울기)를 따라 이동하여 최솟값을 찾아가는 방법입니다. 함수의 값이 작다는 것은 Error가 작다는 것을 의미합니다. 경사 하강법의 알고리즘은 다음과 같습니다.
<알고리즘> 합성곱 연산 수행
2.2. Momentum(관성)
Momentum(관성)은 경사 하강법의 Local minimum 문제를 극복하기 위해 고안된 방법입니다.
<그림 12> 로컬 미니멈과 글로벌 미니멈
Local minimum은 특정한 영역에서만 해당 값이 최소인 지점을 의미합니다. 다시 말해, 그 근방의 모든 점들보다 작은 값을 갖는 지점입니다. 하지만 함수의 전체 영역에서는 최소값이 아닐 수 있습니다. Global minimum은 함수의 전체 영역에서 가장 작은 값을 갖는 지점을 의미합니다. 이는 함수의 최소값 중에서도 가장 작은 값으로, 딥러닝 학습 목표는 Global minimum을 찾는 것입니다.
학습시 Local minimum에 빠지는 것을 방지하기 위해 고안된 Momentum은 다음 시점의 이동 거리를 계산할 때 전 시점의 이동 거리를 관성계수만큼 고려한다는 개념입니다. 관성을 적용한 이 방법은 얕은 Local minimum을 뛰어 넘어 Global minimum을 찾는데 도움이 될 수 있습니다.
3. 정리
오늘 포스팅에서는 풀링, 패딩, 활성화 함수, 드랍아웃 등 CNN에서 사용될 수 있는 다양한 기법들과 함께 CNN의 학습이 어떤 방식으로 이루어지는지 살펴보았습니다. 풀링은 데이터의 사이즈를 줄이는 기법, 패딩은 데이터의 사이즈를 늘리는 기법입니다. 활성화 함수는 입력값을 특정 조건에 따라 변형하여 출력값으로 내보내는 함수입니다. 은닉층에 쓰이는 경우가 있고 출력층에 쓰여 최종 출력값을 확률로 변환시키는 경우도 있습니다. 드랍아웃은 모델의 성능을 고의적으로 떨어트려 과적합(Overfitting)을 줄이고 일반화 능력을 향상시키기 위한 정규화(regularization) 기법 중 하나입니다.
모델의 학습은 경사 하강법을 통해 이루어집니다. 경사 하강법은 함수의 기울기를 이용하여 다음 step값을 업데이트하는 방법입니다. 이 때 기울기는 미분을 통해 계산됩니다. 경사 하강법은 Local minimum에 빠질 수 있는 단점이 있습니다. 이 단점을 극복하기 위해 관성 개념을 활용한 기법을 Momentum 알고리즘이라고 합니다.
지금까지 CNN의 이론에 대해 살펴보았습니다. 다음 포스팅에서는 SAS Viya에서 CNN을 이용하여 실제 분류, 회귀 문제를 해결하는 실습을 진행하도록 하겠습니다.