(Paper Review) CNN
CNN Paper Link : https://arxiv.org/pdf/1511.08458.pdf
Introduction
ANN(Artificial Neural Network) 은 생물학적 신경망에서 영감을 받은 계산 모델로, 일반적인 기계 학습 작업에서 이전 형태의 인공 지능에 비해 우수한 성능을 보여준다. ANN 아키텍처의 가장 효과적인 형태 중 하나는 CNN (Convolution Neural Network) 이다. CNN은 주로 복잡한 이미지 기반 패턴 인식 작업을 해결하는 데 사용된다.
ANN 은 인간의 뇌와 같은 생물학적 신경계가 작동하는 방식을 모방하도록 설계된 컴퓨터 처리 시스템이다. ANN은 뉴런이라고 하는 상호 연결된 수많은 계산 노드로 구성된다. 이러한 뉴런은 분산된 방식으로 함께 작동하여 입력으로부터 집합적으로 학습하고 최종 출력을 최적화한다.
ANN 입력값은 일반적으로 다차원 벡터의 형태로 input layer 에 로드된 다음 hidden layer에 분배된다. hidden layer는 이전 레이어를 기반으로 결정을 내리고 자체 내의 확률적 변화가 최종 출력에 미치는 영향을 평가한다. 이러한 학습 과정을 역전파라고 한다. hidden layer가 여러 개 겹쳐져 있는 것을 딥러닝이라고 한다.이를 통해 ANN은 입력 데이터의 더 복잡한 특징과 패턴을 학습할 수 있다.
ANN에서의 학습 과정에는 예측된 출력과 실제 출력 사이의 오차를 최소화하기 위해 뉴런의 가중치와 편향을 조정하는 과정이 포함된다. 이는 gradient descent 과 같은 최적화 알고리즘을 통해 수행된다.
FNN의 input layer 는 입력 데이터를 수신한 다음 hidden layer에 의해 처리된다. hidden layer 은 입력 데이터에 일련의 가중치와 편향을 적용하여 데이터의 패턴과 관계를 학습할 수 있도록 한다. output layer 은 입력 데이터와 숨겨진 계층에서 학습된 패턴을 기반으로 최종 예측을 생성한다.
CNN architecture
CNN은 Convolution layer, Pooling layer, Fully Connected layer 세 가지 유형의 계층으로 구성된다.
- Convolution layer는 입력 이미지에 필터 세트를 적용하여 입력 이미지의 특징을 탐지하는 역할을 한다. 이러한 필터는 학습 과정에서 학습되며 이미지에서 중요한 특징을 추출하는 데 사용된다.
- Pooling layer는 컨벌루션 계층 출력의 공간 차원을 줄이는 데 사용된다. 이는 네트워크의 계산 복잡성을 줄이고 입력 이미지의 작은 변화에도 더 견고하게 만들기 위한 것.
- Fully Connected layer는 입력 이미지의 최종 분류를 수행하는 데 사용됩니다. 이러한 계층은 이전 계층의 출력값을 가져와 입력 영상의 클래스를 예측하는 데 사용한다.
Convolutional layer
Convolution layer의 파라미터는 학습 가능한 커널의 사용에 초점을 맞추고 있다. 이 커널은 공간적 차원은 작지만 입력값의 깊이 전체에 퍼져 있다. 데이터가 convolution layer 에 도달하면, 계층은 입력값의 공간 차원을 따라 각 필터를 컨벌루션하여 2D 활성화 맵을 생성한다.
CNN에서는 입력 이미지가 일련의 컨벌루션 레이어를 통과하여 특징을 추출한다. 각 Convolution layer는 입력 이미지 위로 미끄러져 Convolution 연산을 수행하는 학습 가능한 필터 또는 커널 세트로 구성된다. 커널의 중앙 요소는 입력 이미지의 작은 부분인 입력 벡터 위에 위치한다.
그런 다음, 커널은 컨볼루션이라는 수학 연산을 수행한다. 이 연산에는 커널의 값에 입력 벡터의 해당 픽셀 값을 곱한 다음 합산하는 작업이 포함된다. 입력 이미지에서 커널의 가능한 모든 위치에 대해 이 과정이 반복되어 입력 이미지에 있는 특정 특징의 존재를 강조하는 특징 맵이 생성된다.
입력 벡터와 주변 픽셀의 가중치 합계를 커널에서 계산하여 입력 이미지 위의 커널의 각 위치에 대해 단일 출력 값을 생성한다. 커널의 가중치는 네트워크가 예측 출력과 실제 출력 간의 차이를 최소화하려고 하는 CNN의 훈련 과정에서 학습된다. Convolution layer은 CNN의 핵심 구성 요소이며, 이미지에서 의미 있는 특징을 추출하는 네트워크의 기능을 담당한다.
그 다음 출력 볼륨이 ReLU와 같은 활성화 함수를 통해 전달되어 모델에 비선형성이 도입된다. 활성화 함수의 출력은 CNN의 다음 계층으로 전달됩니다. 이 계층은 또 다른 컨벌루션 계층이나 풀링 계층이다.
Convolution layer 는 depth, stride, zero padding 세 가지 hyperparameter 를 통해 출력을 최적화하여 모델의 복잡성을 줄일 수 있다.
- depth는 입력 이미지에 적용되는 레이어 내의 필터 또는 뉴런의 수를 의미한다.
- stride는 입력 이미지 위로 필터가 이동하는 픽셀 수를 의미한다. stride 를 늘리면 출력량을 줄일 수 있지만 이로 인해 정보가 손실될 수도 있다.
- zero padding은 입력 이미지의 가장자리에 0을 추가하는 데 사용되는 기법으로, 출력 볼륨의 공간적 크기를 보존하는 데 도움이 될 수 있다.
Pooling layer
Pooling layer는 표현의 차원을 줄이는 것을 목표로 하는 CNN 의 레이어 유형이다.
차원을 줄이는 이유는 모델의 매개 변수 수와 계산 복잡도도 감소하기 때문. Pooling layer은 활성화 맵의 지정된 영역에서 최대값을 취하는 “MAX” 함수를 사용하여 활성화 맵의 차원을 조정한다. Pooling layer은 활성화 맵의 크기를 줄임으로써 관련 없는 정보는 버리고 입력에서 가장 중요한 특징을 추출하는 데 도움이 된다.
이렇게 하면 CNN의 후속 레이어가 더 효율적이게 된다. 처리해야 하는 데이터가 적고 가장 관련성이 높은 기능에 집중할 수 있기 때문이다
Fully Connected layer
인접한 두 계층은 일반적으로 컨벌루션 계층과 풀링 계층이다.
CNN의 Fully Connected layer 에서는 각 뉴런이 인접 계층의 모든 뉴런에 연결된다. 완전 연결 계층은 일반적으로 CNN의 마지막 계층이며 최종 분류 결정을 담당한다. fully connected layer의 출력은 일반적으로 softmax 계층에 공급되며, softmax 계층은 출력을 여러 클래스에 대한 확률 분포로 변환한다.
A Common CNN architecture
CNN의 일반적인 아키텍처 중 하나는 각 풀링 계층 앞에 두 개의 컨벌루션 계층을 쌓는 것이다. 컨벌루션 레이어를 여러 개 쌓으면 입력 벡터의 더 복잡한 특징을 선택할 수 있다. 각 컨벌루션 계층이 입력 이미지에서 서로 다른 특징을 식별하고 추출할 수 있기 때문. 또한, 여러 convolution layer 을 사용하면 네트워크가 더 추상적인 특징을 학습할 수 있어 객체 인식과 같은 작업에 유용할 수 있다.
하지만 convolution layer를 너무 많이 쌓으면 과적합이 발생하고, 계산 복잡성이 증가할 수 있다는 점에 유의해야 한다. 따라서 큰 convolution layer을 작은 계층으로 분할하여 계산 복잡성과 메모리 할당 문제를 줄이는 것이 좋다.