09_DL(Deep_Learning)

08_합성곱 신경망_구성요소

chuu_travel 2025. 4. 24. 17:34
728x90
# CNN, RNN - 한글로 치면 기역니은

 

 

합성곱 신경망(Convolution Neural Networks)

 

 

7 + 5 + 10 + 15 + 3
40

 

  • 합성곱: 입력 데이터에서 유용한 특성만 드러나게 하는 것
    • 합성곱 계산을 통해 만들어진 출력을 특성맵(feature map)이라고 부름
    • 사람의 시신경 구조를 모방한 구조로써 데이터의 특징을 추출하여 패턴을 파악
  • 1989년 필기체 zip code인식 알고리즘 개발 프로젝트에서 시작됨
    • 인간은 시신경이 인식하는 픽셀 단위에서 "A"라는 글자가 채워진 영역의 형태를 기억했다가 이와 비슷한 모양을 보았을 때 "A"라고 인식
    • CNN도 마찬가지로 각 픽셀 단위에 값이 채워져 있는가를 구분하여 전체 픽셀 조합이 어떤 알파벳과 유사한지 판단하여 결과를 출력
      • 하지만 픽셀 단위가 커지게 되면 연산해야할 양이 기하급수적으로 증가하여 모든 픽셀 단위를 일일이 연산하는 것은 비효율적
      • 또한 같은 "A"라도 글씨체나 위치, 크기 등이 조금이라도 바뀌면 이와 동일한 새로운 학습 데이터로 학습해야함
    • 따라서 CNN은 Convolution과 Pooling 의 단계를 통해 데이터를 효율적으로 연산
  • 일반적으로 1개 이상의 합성곱 층을 사용한 인공신경망을 합성곱 신경망이라고 부름
    • 합성곱층만을 이용한 신경망은 아님
  • 합성곱과 밀집층의 차이
    • 밀집층에서는 유닛마다 입력 개수만큼의 가중치가 존재
    • 합성곱은 입력 데이터의 일부에 가중치를 곱함
    • 합성곱 신경망에서는 유닛을 필터(filter) 또는 커널(kernel) 이라고 부름
  • 입력 데이터가 2차원 배열이라면 필터도 2차원이어야 함
  • 위 이미지에서 커널 크기는 (3, 3)
  • 밀집층에서 여러 개의 유닛을 사용하듯이 합성곱 층에서도 여러 개의 필터를 사용할 수 있음
  • 합성곱은 2차원의 형태를 유지함
    • 공간적 특성의 손실을 줄일 수 있기 때문에 이미지 처리 분야에서 성능이 뛰어남
  • 합성곱 연산 순서
    1. 왼쪽 위 모서리부터 합성곱을 시작
    2. 1개의 출력을 계산
    3. 오른쪽으로 이동
      • 오른쪽으로 이동 할 수 없으면 아래로 이동
    4. 2 ~ 3의 과정을 반복해서 합성곱 연산을 수행

 

 

from tensorflow import keras

 

# 합성곱
keras.layers.Conv2D(10, kernel_size = (3, 3), activation = "relu", padding = "same", strides = 1)
# 10: 입력 데이터로부터 10개의 특징을 찾아내겠다는 의미
<Conv2D name=conv2d, built=False>

 

  • Conv2D 의 첫 번째 매개변수는 필터의 개수(필수)
  • kernel_size : 필터의 크기(필수)
    • 일반적으로 (3, 3)이나 (5, 5)의 크기로 사용(취향대로 사용, 논문에서 많이 사용됐던 값))
  • 활성화 함수
    • 합성곱 신경망에서 특성맵은 절편과 활성화함수를 적용한 후의 결과물

 

 

패딩

 

  • 입력 배열의 주위를 가상의 원소로 채우는 것
  • 합성곱층을 통과하면 출력의 크기가 입력데이터의 크기보다 작아지게 되는데 이것을 방지하기 위해 사용
    • 마치 (4, 4)보다 더 큰 입력이 들어온 것처럼 계산
    • (6, 6)의 데이터를 (3, 3)크기의 커널로 합성곱 연산을 하면 출력의 크기가 (4, 4)로 유지됨
  • 실제로는 입력값이 아니기 때문에 패딩은 0으로 채움
    • 값이 0으로 채워져있기 때문에 계산에 영향을 미치지 않음
  • 세임 패딩(same padding) : 입력과 특성맵의 크기를 동일하게 만들기 위해 입력 데이터 주위에 0으로 패딩하는 것
    • 일반적으로는 세임 패딩이 많이 사용됨
  • 밸리드 패딩(valid padding): 패딩 없이 순수한 입력 배열에서만 합성곱을 하여 특성맵을 만드는 것
    • 특성맵의 크기가 입력보다 줄어듦
  • 패딩을 사용하는 이유
    • 패딩을 사용하지 않으면 입력값의 가운데에 있는 원소와 모서리 부분의 비율이 크게 차이남
    • 적절하게 패딩을 사용하면 이미지 주변의 정보 소실을 막을 수 있음

 

스트라이드

 

  • 커널을 적용하는 위치의 간격(이동의 크기)
  • 기본값은 1
    • 오른쪽으로 이동하는 크기와 아래쪽으로 이동하는 크기를 (1, 1)과 같이 튜플로 각각 지정할 수도 있음
    • 하지만 일반적으로는 가로세로의 크기를 똑같이 지정
    • 1보다 큰 스트라이드를 사용하는 경우도 드문 편이었으나
      • 최근에는 pooling을 사용하지 않고 스트라이드를 높이는 방식도 점점 도입됨(경량화하기 위해) ※ 성능과 경량화를 트렌드에 맞게 향상시킴

 

풀링

 

 

# convolution은 영역이 겹치게 도장을 찍지만, 풀링은 영역이 겹치지 않게 찍음
# 풀링을 하면 출력의 크기는 줄어들지만 화질을 낮게 하여 찾고자 하는 특징을 더 잘 찾게 함
# 보통 convolution뒤에 풀링이 붙음

 

  • 합성곱 층에서 만든 특성맵의 가로세로 크기를 줄이는 역할을 수행
    • 특성맵의 개수는 변하지 않음
  • 합성곱 층에서 추출한 특징을 유지하면서 계산량을 줄여주고 다음 계층 신경망과 쉽게 연결해주기 위해서 사용
  • 풀링에는 가중치가 없고 최댓값을 계산하거나(max pooling) 평균값을 계산(average pooling)
    • average pooling 보다는 max pooling이 많이 사용됨
    • average pooling은 특성맵의 중요한 정보를 평균 계산하는 과정에서 희석될 수 있기 때문에
  • 합성곱은 커널이 겹치는 부분이 있지만 풀링은 겹치지 않고 이동
  • 최근에는 신경망이 점점 깊어지면서 미세하지만 중요한 특징들이 소실되는 현상을 막기 위해서 풀링층 사용을 줄이는 방식도 도입되고 있음
    • 하지만 여전히 풀링은 적은 계산량으로 좋은 성능을 유지하는 데에 유용한 신경망 계층임

 

 

# 풀링
keras.layers.MaxPool2D(2, strides = 2, padding = "valid")
 
<MaxPooling2D name=max_pooling2d, built=True>

 

  • MaxPool2D의 첫 번째 매개변수는 풀링의 크기
    • 일반적으로 2를 사용(가로세로 크기를 절반으로 줄임)
    • 가로세로 방향의 풀링 크기를 다르게 하려면 튜플로 입력가능하지만 실제로 사용되는 경우는 매우 드문 편
  • strides : 자동으로 풀링의 크기가 입력되기 때문에 따로 지정할 필요는 없음
  • padding : 기본값은 valid. 일반적으로 valid를 사용
    • valid : 남는 모서리 부분이 pool_size와 맞지 않을 경우 무시
    • same : 0값을 추가하여 사이즈를 맞춘 뒤 처리(남는 부분에 0을 채워서 풀링을 진행)

 

합성곱 신경망의 구조

 

  • 합성곱 신경망은 너비와 높이는 점점 줄어들고 깊이는 점점 깊어지는 것이 특징
  • 마지막 분류 신경망에서 특성맵을 모두 펼쳐서 밀집층의 입력으로 사용
  • 합성곱 신경망에서 필터는 이미지에 있는 어떤 특징을 찾는 역할
    • 필터의 개수를 늘릴수록, 층이 깊어질 수록 데이터의 구체적인 특징을 감지
    • 어떤 특징이 이미지의 어느 위치에 놓이더라도 쉽게 감지할 수 있도록 너비와 높이를 압축(풀링)

 

 

컬러 이미지를 사용한 합성곱

 

# (데이터개수, 높이, 너비, 채널(3차원처럼 보임))
# conv2d라도 입력데이터가 3차원이 될것을 전체로 깔고있음

 

  • 흑백 이미지는 2차원 배열로 표현할 수 있음
  • 컬러 이미지는 RGB(빨강, 초록, 파랑) 채널로 구성되어 있기 때문에 하나의 이미지는 3차원 배열로 표시
  • 깊이가 있는 입력에서 합성곱을 수행하기 위해서는 커널도 깊이가 있어야 함(3차원으로 구성되어야 함)
    • 커널 배열의 깊이는 항상 입력의 깊이와 같음
  • 입력이나 필터의 차원이 몇 개인지와 관계없이 항상 출력은 하나의 값
  • 케라스의 합성곱층은 기본적으로 3차원 입력에 맞춰져 있음
    • 흑백 이미지는 깊이 차원이 1인 3차원 배열로 변환하여 전달
728x90

'09_DL(Deep_Learning)' 카테고리의 다른 글

10_합성곱 신경망_시각화(부츠)  (1) 2025.04.25
09_합성곱 신경망(컬러 이미지 분류)  (0) 2025.04.24
07_보스턴 집값 예측  (0) 2025.04.24
06_초음파 광물 예측  (0) 2025.04.24
05_다중분류(Iris)  (0) 2025.04.23