합성곱 신경망(Convolutional Neural Network)이란 무엇인가?
간단히 말해서 'CNN'은 이미지 처리 분야에서 딥 러닝 알고리즘을 응용한 것이다.
'SVM(Support Vector Machines)' 등과 유사하다.
여전히 분류기로 사용할 수 있으며 여전히 블랙박스처럼 사용할 수 있다.
따라서 합성곱 신경망은 일반 완전히 연결된 신경망(딥 신경망이라고도 할 수 있습니다.)의 최적화된 버전으로 이해할 수 있다.
완전히 연결된 심층 신경망은 다층 퍼셉트론 레이어의 완전 연결된 방법을 채택하여 레이어별로 심층 특징을 추출하여 샘플의 효과적인 특징을 보다 효율적으로 추출한다.
그러나 완전히 연결된 신경망으로 이미지를 처리하는 데에는 다음과 같은 세 가지 문제가 있다.
완전히 연결된 신경망은 이미지를 벡터로 확장해야 하므로 이미지 공간 정보가 손실된다.
완전 연결 신경망의 가중치 값과 같은 매개 변수의 수가 너무 많아 과적합이 쉽게 발생한다.
데이터 훈련 동안 메모리는 많은 양을 차지하고 오랜 시간을 소비한다.
그러나 합성곱 신경망을 사용하면 위의 세 가지 문제를 잘 해결할 수 있다.
로컬 수용 필드(local receptive field), 가중치 공유(weight sharing 또는parameter sharing), 컨볼루션(convolution 연산) 및 풀링(pooling 연산)의 세 가지 메커니즘을 사용하여 이러한 문제를 개선하기 때문이다.
합성곱신경망의 구조
우리는 이미 완전히 연결된 신경망에 대해 논의했습니다. 사실, 그들 사이에는 많은 유사점이 있다.
즉, 컨볼루션 네트워크는 완전 연결되지 않은 방법을 사용하여 완전 연결 네트워크의 선형 변환된 부분을 계산한다.
따라서 완전히 연결된 네트워크는 자신과 같은 크기의 컨볼루션 커널을 사용하여 자신과 컨볼루션 연산을 수행하는 것으로도 이해될 수 있다.
매개변수가 몇 개나 되나?$$N_W = \sum_{l=1}^{L} N_l
= \sum_{l=1}^{L} \left( n_{l-1} + 1\right) \times n_l
$$\(n\) 계층 완전 연결 네트워크의 매개변수 수를 나타낸다.
MNIST(필기 숫자 인식 데이터 세트)를 예로 들면 각 사진에는 28x28 픽셀이 있다.
그러면 784개의 입력 노드와 0에서 9까지 10개의 출력이 있으며, 위의 공식을 통해 7850개의 매개변수를 얻을 수 있다.
이것 도 너무 많다! 사실 우리가 다루는 사진은 더 복잡하고 모델 레이어의 수도 더 많다!
컨볼루션 과정은 선형 연산을 통해 가중치를 부여하는 이전 과정이다.
컨볼루션 커널과 '외모가 유사한' 부분은 모두 가중치를 주어 표시할 기회를 얻고, 컨볼루션 커널과 '외모가 유사하지 않은' 부분은 버린다.
여기서 완전 연결 네트워크와 관련이 있는데, 사실 그 구조가 더 복잡합니다(신은 공평하기 때문에 컴퓨팅 성능을 향상시키는 것은 필연적으로 구조적 복잡성으로 이어질 것이다-_-!).
컨볼루션 신경망은 주로 입력 레이어, 컨볼루션 레이어, ReLU 레이어, 풀링 레이어 및 완전 연결 레이어와 같은 유형의 레이어로 구성된다.
실제 응용에서 컨볼루션 레이어와 ReLU 레이어는 종종 컨볼루션 레이어로 통칭되기 때문에 컨볼루션 레이어도 컨볼루션 연산 후에 활성화 함수를 통과한다.
특히, 컨볼루션 계층과 완전 연결 계층이 입력에 대해 변환 작업을 수행할 때 활성화 함수뿐만 아니라 많은 매개변수, 즉 가중치 'w'와 신경 노드의 편차 'b'가 사용된다.
완전히 연결된 네트워크와 다르지 않다.
그러나 CNN 입력 데이터는 사진이다.
각 픽셀은 축으로 간주될 수 있으며 모든 고유 픽셀은 n차원 벡터 공간을 구성한다.
n차원 이미지는 그리기가 어려우며 그러한 '조잡한' 방식으로만 표현할 수 있다.
따라서 선형 변환 부분은 '분류'에 사용되는 초평면이다.
이러한 분류는 '부드러움'이 충분하지 않다.
임의로 구부릴 수 있는 초평면이어야 한다.
사실 초평면은 표면이 아니라 벡터 공간보다 한 차원 낮은 부분 공간이다.
따라서 ReLU 계층의 활성화 변환을 통과해야 한다.
이것은 전체 CNN의 핵심 구조이다.
그런 다음 FCNN과 유사한 최적화 프로세스가 있다.
ReLU 계층과 풀링 계층은 고정 기능 연산을 수행한다.Convolutional Layer와 Full Connected Layer의 매개변수는 Gradient Descent 과정을 통해 학습되므로 Convolutional Neural Network에서 계산한 분류 결과는 비교적 높은 정확도를 얻을 수 있다.
시뮬레이션에서 최적화까지의 이 과정을 분류 또는 특징 추출이라고 할 수 있으며, 핵심적인 의미는 같다.
컨볼루션 레이어
컨볼루션 계층은 컨볼루션 신경망을 구성하는 핵심 계층으로, 네트워크에서 대부분의 계산을 생성한다.
그리고 컨볼루션 커널은 슬라이딩 과정에서 컨볼루션 연산을 수행하는데, 즉 커널(Convolution Kernel) \(w\)와 그 영역이 커버하는 영역은 행렬 내적 연산을 수행하고 최종적으로 그 결과를 컨볼루션 계층에 매핑한다.
그래서 이 단계는 완전히 연결된 네트워크에서 과잉 계산 문제를 크게 줄인다.
그렇다면 이 컨볼루션 커널을 어떻게 이해하나?
컨볼루션 커널은 수학의 명사이며, 이미지 처리 분야에서는 필터라고도 한다.
그것은 본질적으로 완전히 연결된 신경망의 선형 변환 부분의 가중치 부분이고,정확히는 '심각하게 축소된' 가중치 행렬입니다.따라서 위는 \(w\)로 표시된다.
다음 두 가지 중요한 메커니즘은 우리가 잘 이해하는 데 도움이 될 수 있다.
이미지와 같은 고차원 입력을 처리할 때 각 뉴런이 이전 계층의 모든 뉴런에 완전히 연결되는 것은 비현실적이라는 것을 알고 있다.
대신 각 뉴런이 입력 데이터의 로컬 영역에만 연결되도록 합니다. 이 연결의 크기를 뉴런의 수용장이라고 한다.
그 사이즈는 하이퍼파라미터(실제로는 필터의 공간적 크기)이다.
정상적인 상황에서 길이와 너비는 홀수(예: 3x3, 5x5)이고 채널 수(깊이라고도 함)는 입력 그림과 동일하다.
그 원리는 인간의 시각을 모방하는 것이다(인공 신경망이 인간의 뉴런을 기반으로 구성되는 것처럼).
사람들이 사물을 볼 때 윤곽에서 세부 사항으로 이동하기 때문이다.
따라서 컨볼루션 커널의 추상적 표현은 관찰 대상의 '부분적 세부 사항'이다.
이 모든 작은 세부 사항이 결합되어 관찰 대상의 모든 '특징'을 형성한다.
여기서 강조점은 '부분이 전체를 나타낼 수 있다'는 것이다.
이것은 각 특징의 '작은 컨볼루션 커널'이 전체 이미지의 '큰 컨볼루션 커널'보다 이미지의 원래 공간 구조를 더 잘 보존할 수 있음을 의미한다!
수용 필드 메커니즘은 '부분 연결'이 합리적임을 알려준다.
그러나 컨볼루션 커널에서 각 수용 필드가 다른 가중치 값을 사용한다면(컨볼루션 커널의 값이 다름) 그러한 네트워크의 매개변수 수는 매우 커질 것이다.
가중치 공유는 합리적인 가정을 기반으로 한다.
고유 행렬이 특정 공간 위치\(\left (x_1,y_1\right )\) 를 계산하는 데 유용하면 다른 위치\(\left (x_2,y_2\right)\) 를 계산하는 것도 유용하다.
이 가정을 기반으로 매개변수의 수를 크게 줄일 수 있다.
여기에서 강조하는 것은 '재사용 가능'이다.
마지막으로 컨볼루션 계산 과정을 공식으로 표현하는데, 완전 연결 신경망을 이해하면 아주 간단하다.
$$O(i, j)=(K * I)(i, j)=\sum_{m} \sum_{n} I(i+m, j+n) K(m, n)$$
위의 공식에서\(I\)는 입력행렬, \(O\)는 출력행렬, \(K\)는 \(m×n\) 형태의 커널행렬을 나타낸다.우리는 출력 행렬 \(O\)의 위치 \((i,j)\)에 있는 요소를 얻고 싶다.
사실, 입력 행렬과 커널 행렬의 해당 위치에 있는 숫자를 곱한 다음 더한다.
이해가 안되면 그림을 그려라(그림은 인간의 가장 친한 친구이다)!
컨볼루션이 시작된다!
오른쪽으로 한 칸 이동!
역동적인 사진이 그것을 보여준다!
ReLU 레이어
선형 변환과 비선형 변환 간의 상호 의존성은 이전에 완전 연결 네트워크에서 논의되었다.
CNN은 특별한 신경망이기 때문에 자연스럽게 비선형 레이어도 필요합니다. \(ReLU\)(발음: ['relju])는 현재 더 나은 효과를 가지고 있다.
\(Sigmoid\)와 \(tanh\)의 일반적인 \(gradient\) 소멸 문제를 처리할 수 있으며 가장 빠른 \(gradient\)를 계산하는 활성화 함수이기도 한다.
\(ReLU\)의 본명 \(Rectified\) \(Linear\) \(Unit\)(수정된 선형 단위)라고 한다.
신경 과학 연구에서 비롯되었습니다.생물학적 관점에서 다음 그림과 같이 신호를 수신하는 뇌 뉴런의 보다 정확한 활성화 모델이 시뮬레이션된다.
가로축은 시간(ms), 세로축은 신경세포의 발화율(Firing Rate)을 나타낸다.
수학적으로 추상화되면 아래 그림에서 자주 보는 것이 된다.
위의 그림에서 \(ReLU\) 함수는 실제로 모든 음수 값을 0으로 바꾸고 양수 값은 변경하지 않는 조각별 선형 함수라는 것을 어렵지 않게 알 수 있다.
이 작업을 일방적인 억제라고 한다.
신경망의 뉴런도 희박한 활성화(인간 뇌의 뉴런 중 1~4%만이 동시에 활성화되기 때문에 작업이 희박하다.)를 갖는 것은 일방적인 억제 때문이다.
따라서 \(ReLU\) 로 구현된 희소 모델은 관련 기능을 더 잘 마이닝하고 훈련 데이터에 적합할 수 있습니다.따라서 다음과 같은 장점이 있다.
첫째, 선형 연산만 하기 때문에 연산 속도가 다른 비선형 활성화 함수보다 빠르다.
둘째, 음이 아닌 구간의 기울기가 일정하므로 기울기의 소멸에 대한 의문이 없으므로 모델의 수렴율이 안정적인 상태를 유지하다.
물론 다음과 같은 단점도 있다.
첫 번째는 \(Dead ReLU\) 문제이다.
입력이 음수이면 ReLU는 완전히 무효이다.
순방향 전파 과정에서 이것은 문제가 되지 않다.
민감한 부분도 있고 그렇지 않은 부분도 있기 때문이다.
그러나 역전파 과정에서 음수를 입력하면 기울기가 완전히 0이 된다!
둘째, 출력은 평균이 0이 아닙니다.그리고 '제로 평균화'는 'Z 업데이트'를 피할 수 있다.
다시 말하면, 앞으로 전파할 때 입력이 모두 양수(또는 모두 음수)이면 가중치 w를 곱하여 얻은 기울기도 모두 양수(또는 음수)이다.
그리고 역전파와 순전파는 대칭적인 구조로, '\(\frac{\partial Loss}{\partial w} \)'편도함수가 모두 양수이거나 모두 음수인 것으로 이해할 수 있다.
따라서 뉴런 w는 동일한 방향으로 업데이트되어 "Z형 업데이트" 현상이 발생하다.
따라서 업데이트 속도가 매우 느려지다.
충전 레이어(Padding)
앞에서 볼 수 있듯이 입력 이미지와 컨볼루션 커널의 컨볼루션 결과 값의 일부가 손실된다.
입력 이미지의 가장자리가 '잘림'된다(가장자리에서 픽셀의 일부만 감지되고 이미지 테두리의 많은 정보가 손실됨).
이는 가장자리의 픽셀이 결코 컨볼루션 커널의 중심에 있지 않기 때문입니다.또한, 컨볼루션 커널은 가장자리 영역을 넘어 확장될 수 없다.
그래서 우리는 입력과 출력 사진의 크기가 동일하게 유지되기를 바란다.
즉, 컨볼루션 연산을 수행하기 전에 원래 행렬에 테두리를 채우고(Padding), 행렬의 크기를 늘리기 위해 행렬의 테두리에 일부 값을 채워 넣은다.
일반적으로 0으로 채워지다.
풀링 레이어(Pooling)
\(Pooling\)은 \(downsampling\)을 하는 것과 같으며, convolution에 의한 특집 사진(feature map) 출력이 매우 클 때(Receptive Field가 작고, Step size가 작음), feature layer는 차원을 더 줄여 네트워크 매개변수를 줄일 수 있다(차원만 깊이를 변경하지 않고 감소).
일반적으로 사용 풀링에는 두 가지 방법이 있다.
최대 풀링(max pooling): 풀링 영역의 최대값을 취하여 전체 영역의 값을 나타낸다.
평균 풀링(avg pooling): 풀링 영역의 평균 값을 취하여 전체 영역의 값을 나타낸다.
풀링은 회전 불변성을 보장하면서 매개변수의 양을 더욱 줄일 수 있어 추출된 특징을 보다 안정적으로 만든다.
보충 지식: 스텝 길이(Stride)
컨볼루션 커널을 슬라이딩할 때 입력의 왼쪽 상단 모서리에서 시작하여 한 번에 한 열씩 오른쪽 또는 아래로 슬라이드한다.
출력을 하나씩 계산합니다.슬라이드당 행 또는 열의 수를 Stride라고 합니다. 이전 그림에서는 Stride=1이고 아래 그림에서는 Stride=2이다.
어떤 경우에는 정보의 손실을 피하기 위해 convolution 과정에서 padding이 필요하다.
그리고 어떤 경우에는 convolution 과정에서 일부 정보를 압축하거나 출력 크기를 입력 크기보다 작게 만들기 위해 stride가 필요하다.
컨벌루션 계산식
$$Output \ Height = \frac{I_h+2P-F_h}{S}+1$$
$$Output Width = \frac{I_w+2P-F_w}{S}+1$$
\(I_h:\)입력 높이
\(I_w:\) 입력 너비
\(F_h:\) 필터 높이
\(F_w:\) 필터 너비
\(P:\) \(padding\) 크기
\(S:\) \(stride\) 크기
풀링 계산식
$$OutputRowSize = \frac{InputRowSize}{Pooling Size}$$
$$OutputColumnSize = \frac{InputColumnSize}{Pooling Size}$$
Convolution Neural Network이 가지는 성질
컨볼루션 신경망은 겉보기에 상반되는 두 가지 속성을 가지고 있다.
변환 등가성(Translation equivalence)과 변환 불변성(Translation invariance)이다.
다른 위치에서 시스템의 작동 원리는 동일하지만 목표 위치의 변경에 따라 응답이 변경됨을 의미한다.
예를 들어 이미지 분류 작업의 경우 이미지의 대상 부분을 어디로 이동하든 결과(레이블)는 동일해야 한다.
간단히 말해서, 컨볼루션 + 풀링은 번역 불변성과 거의 같다.
내 이해: 대상이 이미지의 왼쪽 상단 모서리에 있으면 컨볼루션 후 대상 기능도 기능 맵의 왼쪽 상단 모서리에 있다.
대상이 이미지의 오른쪽 하단 모서리에 있으면 동일한 컨볼루션 커널 컨볼루션, 대상 피처 또한 피처 맵의 오른쪽 하단 모서리에 있다.
최대 풀링과 같은 풀링의 경우 수신 필드의 최대값을 반환한다.
최대값이 이동했지만 여전히 이 수신 필드에 있는 경우 풀링 계층은 여전히 동일한 최대값을 출력한다.
즉, 대상의 모습이 어떤 식으로든 변해도 여전히 인식할 수 있다.
Comments
niubi
@XM 아이고~~~