CNN

Minjung·2023년 10월 11일
1

ANN, DNN,CNN

ANN

인공신경망 ANN은 간략히 신경망이라고도 하는데, 인간이 뉴런이 연결된 형태를 수학적으로 모방한 모델이다

뇌에서 뉴런들이 어떤 신호, 자극 등을 받고, 그 자극이 어떠한 임계값을 넘어서면 결과 신호를 전달하는 과정에서 착안

ANN뉴런은 어떤 입력값을 받아서 일정 수준이 넘어서면 활성화되어 출력값을 내보낸다.

ANN은 뉴런들을 여러개 쌓아, 두 개의 층 이상으로 구성되는 것이 특징이다.

DNN

ANN이후 모델 내 은닉층을 많이 늘려서 학습의 결과를 향상시키는 방법

DNN은 ANN에 비해 더 적은 수의 유닛만으로 복잡한 데이터를 모델링할 수 있게 해준다.

컴퓨터가 스스로 분류 레이블을 만들어내고 공간을 왜곡하고 데이터를 구분짓는 과정을 반복하여 최적의 구분선을 도출해낸다.

많은 데이터와 반복학습, 사전 학습과 오류역전파 기법을 통해 현재 널리 사용되고 있다.

일반 DNN은 기본적으로 1차원 형태의 데이터를 사용한다. 하지만 만약 이미지와 같은 2차원 형태의 데이터일 시(1024x1024)라면 1차원으로 만들어야하기 때문에 이 과정에서 이미지의 공간적/지역적 정보가 손실되게 된다. 또한 추상화 과정 없이 바로 연산과정으로 넘어가기 때문에 학습 시간과 능률의 효율성이 저하된다.

CNN

  • 기존의 방식은 데이터에서 지식을 추출해 학습이 이루어졌지만 합성곱 신경망인 CNN은 데이터의 특징을 추출하여 특징들의 패턴을 파악하는 구조
  • CNN알고리즘은 Convolution과정과 pooling과정을 통해 진행
  • Convolution Layer와 Pooling Layer를 복합적으로 구성하여 알고리즘을 생성
  • 위의 DNN의 문제점을 보완하는 CNN은 이미지를 날것 그대로 받아 공간적/지역적 정보를 유지한채 특성들의 계층을 빌드업한다.
  • DNN의 포인트는 이미지 전체보다는 부분을 보는법(특징을 찾는 것) 이미지의 한 픽셀과주변 픽셀들의 연관성을 살리는것

Convolution

  • 합성곱

    합성곱에서의 계산은 밀집층의 계산과는 다름

    입력데이터 전체에 가중치를 곱하는 것이 아닌, 일부에 가중치를 곱하는 것

    input(입력데이터) = [1,2,3,4,5,6,7,8]

    w(가중치) = [1,2,3]

    b(절편)

    input[0] x w[0] + input[1] x w[1] + input[2] x w[2] + b = 출력값 1

    input[1] x w[0] + input[2] x w[1] + input[3] x w[2] + b = 출력값 2

    input[2] x w[0] + input[3] x w[1] + input[4] x w[2] + b= 출력값 3

    input[3] x w[0] + input[4] x w[1] + input[5] x w[2] + b= 출력값 4



    input[5] x w[0] + input[6] x w[1] + input[7] x w[2] = 출력값 6

    → 입력데이터에서 한칸씩 밀면서 가중치를 곱해나감(이때 가중치는 같은값을 순서대로 사용함)

    총 6개의 출력값이 나옴

    위의 입력데이터는 1차원이지만, 입력데이터가 2차원일 때는 가중치 또한 2차원


    input

    a1a2a3
    a4a5a6
    a7a8a9




    w(커널크기 2 x 2로 가정)

    w1w2
    w3w4




    합성곱 시작

    a1 x w1 + a2 x w2 +

    a4 x w3 + a5 x w5 = 출력값 1

    a2 x w1 + a3 x w2 +

    a5 x w3 + a6 x w4 = 출력값 2

    a4 x w1 + a5 x w2 +

    a7 x w3 + a8 x w4 = 출력값 3

    a5 x w1 + a6 x w2 +

    a8 x w3 + a9 x w4 = 출력값 4

    이렇게 나온 출력값들을 입력의 위치에 맞게 2차원으로 배치, 즉 왼쪽 위, 오른쪽 위, 왼쪽 아래, 오른쪽 아래로 배치

    이렇게 나온 합성곱의 출력을 특성맵 이라고 함

    이렇게 필터들의 값(가중치 행렬)을 바꾸어서 여러개의 특성맵을 만들 수 있음

    만약 위의 입력 데이터에 다른 가중치 행렬을 2개 더 적용(총 3개)시킨다면 특성맵의 개수는 3개가 되며 (2,2,3)으로 표현할 수 있음.

Filter(=Kernal=neuron)

  • 연결신경망에서는 뉴런이 출력을 찍어낸다고 표현하지만, CNN(합성곱 신경망)에서는 뉴런보다는 필터, 커널이라고 부름

Padding

  • 합성곱을 계산할 때 예시로 (4,4)입력데이터에 (3,3)크기의 커널(필터)를 적용한다고 칠 때, 출력의 크기는 (2,2)가 나오게 되는데, 출력의 크기를 변경하고자 한다면 어떻게 해야할까?

    → 입력데이터에 Padding을 적용해 입력데이터의 크기를 늘린다. 실제 입력 크기는 (4,4)이지만, 출력의 크기가 (4,4)가 나오기 위해서는 입력 크기가 (6,6)이 되어야 한다. 이를 위해 실제 입력 데이터에 0을 붙여 (6,6)의 크기로 만들 수 있다.

    값은 0으로 채워져있기 때문에 출력 값에 영향을 미치지 않음 입력데이터(Padding 전)
    1234
    5678
    9012
    3456
    입력데이터(Padding 후)
    000000
    012340
    056780
    090120
    034560
    000000


    📌 Padding 을 사용하는 이유
    패딩을 사용하지 않는다면, 입력데이터에서 모서리 부분의 값들과 중앙쪽에 몰려있는 값이 필터에 포함되는 비율이 달라지게 된다.

    예를 들어 4x4 입력데이터에 3x3 커널을 적용한다 치자(위의 예시데이터 참고). 위의 입력데이터에서 중앙에 있는 값인 6,7,0,1은 커널이 합성곱을 수행할 때 항상 포함이 되지만, 이외의 꼭짓점에 있는 값들(1,4,3,6)은 1번씩 밖에 합성곱에 적용되지 않는다.

    이처럼 필터가 합성곱을 수행할 때의 각각의 입력데이터가 적용되는 횟수가 차이가 나게 되며, 이때 모서리에 있는 입력데이터 값이 중요한 정보를 가지고 있다면 커널로 잘 전달이 되지 않을 가능성이 높다.

    그래서 Padding을 주어 각 값들이 정보를 전달하는 비율을 동등하게 만든다.

Stride

지금까지 본 합성곱 연산의 경우, 커널은 한칸씩 이동(상,하,좌,우)하며 합성곱을 수행하게 되는데, 이를 2칸씩,3칸씩 이동할 수 있다. 이렇게 이동하는 칸 수가 커질수록 특성맵의 크기는 줄어들기 때문에, 기본적으로 1칸씩 이동한다. 이때 이동하는 거리를 Stride로 표현한다.

Pooling(Max Pooling, Average Pooling)

Pooling은 합성곱 연산을 통해 만든 특성맵의 크기를 줄이는 역할을 한다. 예를들어 만들어진 특성맵이 (2,2,3)일 때, Pooling을 적용하면 마지막 차원 개수인 3은 그대로 유지하고 너비와 높이만 줄어들어 (1,1,3)이 된다.

Pooling을 하는 방법은 최대풀링(Max pooling)과 평균풀링(Average pooling)이 있다.

특성맵

123
456
789

(3,3,3)의 특성맵이 있을 때, (위의 표와 같은 크기의 다른 수를 가진 특성맵이 3개 있다고 가정,3차원을 말함) (2,2)의 최대 풀링을 적용한다고 가정한다. 이때 왼쪽 위에서는 5, 오른쪽 위에서는 6, 왼쪽 아래에서는 8, 오른쪽 아래에서는 9가 적용되어 풀링을 수행하였을 때 최종 값은 아래 표와 같은 형태로 나오게 된다.

56
89

이때 특성맵이 3개라는 가정하에, 위와 같은 방식으로 나머지 2개의 특성맵 또한 풀링을 진행한다. 그럼 (2,2,3)형태의 특성맵이 만들어지게 된다.

구현하기

구조

  1. Convolutional layer

    합성곱계층인 convolutional는 입력된 이미지의 특징을 반영하여 새로 처리된 이미지를 생성하는 계층이다. 합성곱 계층에서는 이미지에 대해 필터 연산을 수행하게 되는데 필터의 개수, 크기에 따라 이미지 연산이 달라진다.

  2. Pooling layer

    풀링 계층은 합성곱 계층을 통과한 이미지의 대표적인 픽셀만 뽑는 역할으르 한다. 대표적인 pooling 방법에는 max pooling, golbal mean pooling 방법이 있는데 일반적으로 cnn에서는 max pooling을 사용한다. max pooling 은 n x n 픽셀에서 가장 큰 값만 추출한다.

    pooling의 장점

    • 이미지 데이터의 크기가 줄어 cnn에서 계산량을 줄이고, complexity또한 줄일 수 있다.
    • 이미지의 국소적인 영역에서는 픽셀의 위치가 바뀌어도 pooling 결과는 동일하기 때문에 이미지를 구성하는 요소가 바뀌어도 cnn의 출력값이 영향을 받지 않는다.
  3. Fully connected layer

    완전연결계층에서는 앞에서 모든 처리를 거친 이미지데이터를 1d array(flatten)로 변환하여 softmax함수를 적용할수있게 변환한다.

1개의 댓글

comment-user-thumbnail
2024년 1월 14일

어려운 내용들을 깔끔하게 정리해주셔서 감사합니다!!

답글 달기