본문 바로가기
AI/공부

CNN

by 지수코딩 2019. 9. 30.

CNN 기본 이론

CNN(Convolution Neural Network) 탄생 배경

  • 이미지 처리를 하는 데 있어 다양한 각도의 이미지가 필요하다.
  • 이것은 데이터가 많이 필요하고 그만큼 학습 시간도 길어진다는 점을 시사한다.

그래서,

* 커널: 작은 가중치 텐서를 이미지의 모든 영역에 반복 적용해 패턴을 찾아 처리한다.

* 풀링 계층: 이미지 해상도를 줄여 다양한 크기의 패턴을 단계적 처리 -> 신경망의 파라미터 수 감소, 품질 향상

 

FC (Fully Connected Layer)의 가중치는 이미지 픽셀 수의 제곱에 비례

CNN의 가중치는 커널 크기를 바꾸지 않는 한 그 안의 파라미터 수는 변하지 않음

 

Convolution 연산

  • SAME: 입력 픽셀 행렬 가장자리에 0을 채워 출력 픽셀 행렬과 벡터 사이즈를 같게 함
  • VALID: 커널이 실제 입력 범위를 벗어나지 않을 때만 출력 픽셀을 생성

보통은 input 이미지의 각 셀을 255로 나눠준다 -> 범위 -1 ~ 1

 0.7 0.5 0.8
-0.2 0.1 0.3
-0.9 -0.6 -0.8

   [input image]

1 1 1
0 0 0
-1 -1 -1

        [filter]

 

input image * filter 했을 때 각 위치에 속한 값이 유사할수록(이미지 영역이 필터와 유사할수록) 양수가 출력되고, otherwise 음수 출력

 

 

 

                출력 픽셀 크기 = ((입력 필셀 크기 - 합성곱 커널 크기) / stride 크기) + 1

Convolution 연산 과정

 

stride란?

  • 건너뛰는 정도
  • stride 지정하지 않을 경우 [1,1]가 default
  • 다음 단계의 연산 부담을 줄여주지만 무시하는 정도 많을 수 있다

 

pooling layer?

  • 일정한 영역의 kernel 크기의 max나 average 값을 출력 값에 반영
  • max or average 값을 추출하는 과정에서 비교가 되기 때문에 stride처럼 일방적인 무시가 된다고 볼 수 없음

Pooling layer

feature map?

: convolution layer에서 출력되는 픽셀 이미지

 

  • 이미지에는 다양한 패턴과 특징 있을 수 있어서 채널이라는 차원 추가
  • 흑백 이미지에는 채널 하나, 컬러 이미지에는 채널 세 개
  • ex) [Height, Width, Channel]
  • 만약, [128,128,2] -> 2X2 pooling layer -> [64,64,2] => 채널 수를 2배로 늘렸지만, 결과론적으로 보면 정보량 1/4 감소(처음 정보량의 반)
  • 컬러 이미지: channel 수에 Red, Green, Blue 셋 들어감
  • channel 수가 6인 경우 6개의 값이 모여 하나의 픽셀  구성

Convolution layer 처리는

[mini_batch_size, input_rows, input_cols, input_channels] 형태의 4차원 입력을

-> [kernel_rows, kernel_cols, input_channels, output_channels] 형태의 4차원 커널로 처리

-> [mini_batch_size, output_rows, output_cols, output_channels] 형태의 4차원 출력

 

 

Under/Over Fitting

Underfitting

: 학습용 예제 자체를 제대로 풀지 못하는 현상(쉽게 말해 쓸 수 없을 정도로 예측이 안되는 경우)

해결 방법 ) 모델 용량 키우기, 학습 횟수 늘리기, 데이터양 늘리거나 품질 높이기

 

Overfitting

: 전체적인 문제 특성을 파악하지 못한 채 데이터 자체의 특이성을 외워버리는 현상(쉽게 말해 그 데이터에만 최적화 되어 있음, 굉장히 지역적인 것까지 학습을 해서 다른 데이터 혹은 테스트 데이터에 사용할 수 없는 현상)

해결 방법 ) 정규화 기법 (L1, L2, dropout, batch nomalization, noise inception)

 

 

정규화 기법 5가지

1. L1 loss

: 패널티 값을 loss function에 더해주는 기법

L' = L + (아래 식)

패널티 값

2. L2 loss

: 패널티 값을 loss function에 더해주는 기법

L' = L + (아래 식)*1/2

패널티 값

3. Dropout

: 어떤 계층의 출력을 다음 계층에서 모두 이용하지 않고 일부만 이용하면서 신경망을 학습시키는 기법

ex) dropout이 60%라고 하면 출력층의 각 항목에 대해 40%의 확률로 0을 만든다.

      -> 그렇다고 항상 40%의 출력 항목이 0이 되는 것은 아니다.

 

Dropout 과정 (X표시 된 것이 특정 퍼센티지 확률로 기울기가 0이 됨을 의미)

 

4. Batch Normalization

: 미니배치 내의 데이터들에 대해 벡터 성분별로 정규화를 수행하는 방식

mini batch 벡터를 convolution하기 전에 정규화 시키기(평균 0, 표준편차 1의 분포)

-> 성분별 불균형이 적어도 mini batch 내에서는 사라진다.

 

하지만, 편향 성분이 없는 데이터 분포를 초래하기 때문에 오히려 바람직하지 못한 결과를 가져올 수도 있다.

-> scale factor(아래 식:감마) 파라미터 곱하고, shift factor(아래 식:베타) 파라미터 더하기

=> 성분별 불균형, 편향에 해당하는 분포 특성 있는 새로운 값 만들어낸다.

Batch Normalizing Transform, applied to activation x over a mini-batch

5. Noise Inception

: 두 layer 사이에 적당한 형태의 noise를 추가하여 정규화하는 기법

   noise의 형태, 빈도, 강도는 직접 선택 가능

   backpropagation, evaluation 할 때는 무시하고 진행

 

 

인셉션 모델

: 병렬 처리 합성곱 신경망 구조를 반복적으로 활용하여 신경망의 규모를 크게 늘린 모델

  여러 방법으로 분석하고 그 결과를 종합 ex) ensemble, bagging

 

Alexnet, Resnet, VGG~~~~~~

반응형

'AI > 공부' 카테고리의 다른 글

[인과관계 추론] 9.Instrumental Variables  (0) 2021.08.06
[Book] 한국어 임베딩  (0) 2019.11.09
RNN & Automata (오토마타)  (0) 2019.09.24

댓글