스터디/AI

[이론] 컨볼루션 신경망 이론 CNN

_leezoee_ 2023. 1. 27. 11:56

 

목차

1. 컨볼루션 신경망이란 무엇인가

2. 컨볼루션 연산

3. relu 레이어

3. Pooling

4. Flattening

5. Full Connection

6. 요약

+ 소프트맥스, 교차 엔트로피

 

 

컨볼루션 신경망

 

 

신경망은 이미지를 어떻게 인식하는지 그 기초가 되는 개념을 살펴보았다.

 

[신경망 특징 인식에 대한 기초 그림 설명]

 

우선 신경망은 흑백과 컬러로 나누어 이미지를 인식한다.

흑백이미지는 각 픽셀이 0에서 255까지(8비트 정보로 2의 8제곱 = 256, 색상의 채도를 나타내며 0은 검은색, 255는 흰색 픽셀로 표현)의 2차원 배열로 인식한다. 

컬러이미지는 3차원 배열로 RGB 픽셀을 가진다. 세 가지 값을 조합해 어떤 이미지, 해당 픽셀이 어떤 색인지 나타낼 수 있다. 

 

 

Step 1-1. 컨볼루션 Feature Detector

 

전체 컨볼루션 단계에서 특징 감지기의 가장 중요한 기능은 보다 쉽고 빠르게 이미지를 처리하기 위해 이미지의 크기를 줄이는 것. 

 

[스트라이드 1로 특징맵추출]

 

이렇게 특징을 추출하면 정보를 잃을까? 약간의 정보를 잃겠지만 이미지의 특징, 필수적인 부분을 감지할 수 있다. 

특징맵에서 가장 큰 숫자는 특징이 높게 일치했다는 것을 의미한다.  따라서 해당 부분에 특징이 감지 됐다고 할 수 있다.

컨볼루션 레이어에서는 이러한 특징맵을 여러개 만들어 사용한다.(하나 일때보다 많은 정보를 보존) 

특징을 찾고 네트워크가 학습을 통해 결정하고, 특정 유형이나 범주에 중요한 특징을 결정한다.

 

 

어떤 필터들을 적용할 수 있는지 살펴본다면

 

1. sharpen (선명한 그림)

[0 0 0 0 0

0 0 -1 0 0

0 -1 5 -1 0

0 0 -1 0 0

0 0 0 0 0] 

해당 필터를 적용하면 5는 중앙에 위치한 메인 픽셀로 강하게 효과를 주고 주변이 픽셀을 -1로 줄여서 선명한 그림을 표현할 수 있다.

 

2. Blur

[0 0 0 0 0

0 1 1 1 0

0 1 1 1 0

0 1 1 1 0

0 0 0 0 0]

중앙과 주변에 모든 픽셀에 동일한 의미를 주어 종합적으로 이미지를 흐리게 한다.

 

3. Edge Enhance

[0 0 0

-1 1 0

0 0 0]

중심에 위치한 메인 픽셀과 주변의 픽셀을 0으로 제거하고 1과 -1만 남겨두어 가장자리만 드러나게 표현.

 

4. Edge Detect

[0 1 0

1 -4 1

0 1 0]

중심 값을 줄이고 가장자리를 1로 해서 주변부의 강도를 높여 가장자리를 감지하도록 표현.

 

5.  Emboss

[-2 -1 0

-1 1 1

0 1 2]

양각으로 표현하기 위해 비대칭 필터를 써서 전면으로 그림이 튀어나온듯 보이도록 한다.

 

 

컨볼루션의 주 목적중 하나는 특징 추출을 이용해 이미지에서 특징을 찾아 그 특징을 특징 맵에 넣어 픽셀 사이의 공간적인 관계를 여전히 유지하도록 하는 것이다.

 

 

Step 1-2. ReLU Layer

 

앞선 컨볼루션 레이어에 ReLu(정류, Rectified Linear Unit) 함수를 적용

ReLu함수를 적용하는 이유는 컨볼루션 신경망 내의 비선형성을 높여주기 위해서이다. 선형성을 무너뜨리는 필터나 함수에 적용할 수 있다. 

=> 비선형성을 증가시키는 이유는 이미지 데이터 자체가 매우 비선형적이기 때문 + 컨볼루션 같은 수학연산이나 특징 추출을 실시 할 때 선형성을 만들 위험이 있어서 선형성을 내려줘야하기 때문

( 흰 -> 회 -> 검 으로 가는게 명암의 선형진행인데 이때 검은색을 빼면 이 선형성을 무너뜨릴 수 있음, 예를 들어 건물이 여러개인 사진에 필터를 씌우면 마치 건물과 건물 사이가 흰 -> 회 -> 검으로 선형적으로 이어지듯 처리 되는 경우가 많은데 이때 Lelu를 이용해 검은색을 빼서 비선형적으로 각 건물끼리 구분되어 인지 되도록 할 수 있음 )

 

 

Step 2. Max Pooling

 

풀링을 사용하는 이유는 신경망에 공간 불변성이라는 속성을 넣어서 특징이 약간 왜곡 되어도 신경망이 여전히 그 특징을 찾을 수 있도록 일정 수준의 유연성을 준다.

 

Max Pooling은 최댓값을 기록하는 풀링 방법이다.

 

풀링 이후에도 여전히 특징을 유지할 수 있다.

특징을 보존하고 크기를 줄이고 특징의 왜곡을 처리할 수 있도록 하는 것이 풀링의 사용 이유이다. 파라미터 수를 줄이는 이점도 있다(거의 75%를 줄임) 신경망 최종 레이어에 들어갈 많은 파라미터 수를 줄이고 있으므로 과적합을 방지할 수 있다(관련 없는 정보들 삭제). 

 

Step 3. Flattening

 

풀링 된 특징 맵을 하나의 열로 평탄화 진행.

 

Step 4. Full Connection

 

인공신경망 전체를 컨볼루션 신경망에 추가.

시간이 지나면 네트워크에 쓸모없는 특성은 무시되고 유용한 특성으로 대체된다. 최종 레이어에는 실제로 분류하고자 하는 이미지의 특성 좋바을 많이 가지게 된다. 

네트워크가 학습되고 이후에 적용하는 방법을 살펴보면, 어떤 이미지를 input 으로 넣었을 때 값이 네트워크로 전파되고, 특징들을 얻는다.  최종 완전 연결 레이어에서 뉴런들은 해당 특징들에 대해서 투표를 진행하고(Final Fully Connected Layer) 이 가중치를 통해 최정적으로 분류에 대한 확률을 나타내게 된다.

 

 

 요약. 컨볼루션 신경망의 작동법

 

[CNN 작동 구조]

① 먼저 입력 이미지에 여러 개의 다양한 특징 검출기, 즉 필터를 적용해 특징 맵을 만든다. => 이러한 특징 맵들이 컨볼루션 레이어를 구성한다.

② 컨볼루션 레이어에 Lelu 를 적용해 선형성을 제거하고 이미지 비선형성을 증가시킨다.

③ 컨볼루션 레이어에 풀링 레이어를 적용 (모든 특징 맵이 각각 풀링 된 풀링 특징 맵을 만듦) => 풀링 레이어의 목적은 이미지에 공간적 불변성이 있는지 확인 가능하게 하는 것. 특징이 좀 왜곡되더라도 여전히 특징을 검출할 수 있도록 하고, 더불어 이미지의 크기 또한 줄일 수 있음(과적합방지 가능)

④ 평탄화를 진행하고 인공신경망의 input으로 입력한다.

⑤  완전 연결 인공신경망으로 앞서 넘어온 특징들이 네트워크를 통해 처리 된다. 인공신경망 파트에서는 가중치가 학습 될 뿐만 아니라 특징 검출기 또한 동일한 경사 하강법으로 학습이 조정된다.=> 가장 좋은 특징 맵을 만들수 있도록!

⑥ 최종 완전 연결 레이어에서 분류할 클래스에 투표를 진행한다. 이 모든 과정은 순전파 , 역전파 과정의 수많은 반복과 에포크를 거쳐 학습된다.

 

 

 

+ 추후 참고할만한 블로그

 

9개의 CNN에 대한 개요를 볼 수 있는 블로그 나중에 CNN 실습 이후 참고해보기 좋을듯하다. 다른 사람들의 CNN 구축 사례를 살펴 보면 분명 도움이 될 테니까!!!

https://adeshpande3.github.io/The-9-Deep-Learning-Papers-You-Need-To-Know-About.html

 

 

 

 

+ 소프트맥스, 크로스 엔트로피

 

* 소프트맥스(Softmax)

 

: 컨볼루션 신경망에서 마지막에 각 클래스 별로 확률을 예측해 내는데, 각 확률을 더했을때 1이 되는게 가장 최적의 확률값들이므로 저 확률값을 조정해줄 필요가 있다(예를들어 클래스가 두갠데 각각 80%, 45% 이러면 말이 안되니까,...), 이 때 최종 뉴런 확률값에 적용하는게 소프트 맥스 함수이다. 

: 소프트 맥스 함수는 정규화 지수 함수로써 0에서 1사이의 값으로 만들어 총 합이 1이 되도록 한다.

 

* 교차 엔트로피(Cross-Entropy)

 

: 컨볼루션 신경망에서 적용하는 손실 함수(비용함수X)

: 손실함수는 네트워크의 성능을 최대화하기 위해 최소화 하고자 하는 값이다.

: 출력값이 매우 작으면 경사하강법의 경사가 충분치 않고 신경망이 작동하여 가중치를 조정하고 움직이기 힘든데, 로그가 포함된 교차엔트로피를 사용하면 네트워크가 작은 오차도 평가하고 조치하도록 할 수 있음.

: 교차엔트로피는 분류를 위한 신경망에만 해당, 회귀는 평균 제곱 오차가 더 나음.

-> 이에대한 수학적인 설명을 잘 해준 블로그가 있어서 참조하면 좋을 듯 해서 추가하겠다.

http://simpling.tistory.com/entry/Mean-Squared-Error-VS-Cross-Entropy-Error