[Deep Learning] 밑바닥부터 시작하는 딥러닝(사이토 코기, 한빛미디어) : 7장 합성곱 신경망(CNN)

한은기·2021년 7월 21일
0

Deep Learning

목록 보기
6/12
post-thumbnail

7.1. 합성곱 신경망(CNN, Convolutional neural network)

  1. 이미지 인식분야에서 딥러닝 활용해 많이 씀
  1. 합성곱 계층(convolution layer)과 풀링 계층(pooling) 을 조합해 만들 수 있음
  1. 이전(~6장) 신경망
    1) 완전연결(전결합, fully-connected) : 입접 계층의 모든 뉴런과 결합됨
    2) 이전 신경망은 완전히 연결된 계층을 Affine 계층으로 구현했었음. 이미지 입력 시 Affine과 ReLU를 번갈아가며 거치며, Affine->Softmax 거쳐 최종 결과인 확률을 출력

  2. 이전 신경망과의 차이
    1) Conv-ReLU-(Pooling)이 반복해 나타남
    2) 출력에 가까운 층은 Affine-ReLU 구성을 사용 가능
    3) 마지막 출력 계층에서 Affine-Softmax 조합 그대로 사용


7.2. 합성곱 계층

  1. 완전연결 계층의 문제점
    1) 인접하는 계층의 뉴런이 모두 연결되고 출력의 수를 임의 설정 가능
    2) 데이터 형상이 무시됨. 이미지는 세로, 가로, 채널(색상)으로 구성되어 있는데, 3차원 데이터를 1차원으로 평탄화 해 (1, 28, 28)줘야함
  1. 합성곱 계층
    1) 이미지를 3차원 데이터로 입력받고 3차원 데이터로 형상 유지해 전달 -> 형상을 가진 데이터 제대로 이해 가능
    2) 특징 맵(feature map) : 합성곱 계층의 입출력 데이터
  1. 합성곱 연산
    1) 합성곱 계층에서 처리하는 연산으로, 이미지 처리에서의 ‘필터 연산’
    2) 입력 데이터에 필터 적용해, 단일곱셈-누산(fused multipy-add, FMA) 이용. 편향이면 (1X1) 하나만 있어, 하나의 값을 필터의 모든 원소에 적용
  1. 패딩(padding) : 합성곱 연산을 수행하기 전, 입력 데이터 주변을 특정값으로 채우는 것
    1) 출력의 크기를 조정할 목적으로 사용
    2) 합성곱 연산을 복수 번 수행하는 심층 신경망에서는, 합성곱 연산을 거칠 때마다 출력 크기가 작아지면 문제 발생. 이를 막기 위해 패딩 적용
    3) 입력 데이터의 공간적 크기를 고정한 채로 다음 계층에 전달 가능
  1. 스트라이드(stride) : 필터를 적용하는 위치의 간격. 윈도우 이동 간격. 스트라이드 증가 -> 출력 크기 감소. 스트라이드 감소 -> 출력 크기 증가
  1. 입력 크기, 필터 크기, 출력 크기, 패딩, 스트라이드의 관계
  1. 3차원 데이터의 합성곱 연산
    1) 길이방향(채널 방향)으로 특징 맵 확장
    2) 입력 데이터와 필터의 합성곱 연산을 채널마다 수행 -> 결과 더해 하나의 출력
    3) 입력 데이터의 채널 수와 필터의 채널 수 같아야 함. 모든 채널의 필터 크기 같아야 함
  1. 블록으로 생각하기
    1) 데이터의 형상 = (채널C, 높이H, 너비W) / 필터의 형상 = (채널C, 높이FH, 너비FW) / 편향의 형상 = (FN, 1, 1) / 출력 데이터의 형상 = (1, 높이OH, 너비OW)
    2) 합성곱의 연산 출력으로 다수의 채널을 내보내려면, 필터(가중치)를 다수 사용.

7.3. 풀링 계층

  1. 풀링 : 가로, 세로 방향의 공간을 줄이는 연산
    1) 풀링의 윈도우 크기와 스트라이드를 보통 같은 값으로 설정
    2) 최대 풀링(max pooling) : 최댓값을 구하는 연산. 이미지 인식 분야에서 주로 사용
    3) 학습해야 할 매개변수 없음 : 대상 영역에서 최댓값/평균 취하는 명확한 처리이므로 특별히 학습할 것이 없음
    4) 채널 수 불변 : 채널마다 독립적으로 계산해 입력 데이터 채널 수 그대로 출력 데이터로 내보냄.
    5) 입력의 변화에 영향을 적게 받음(강건함) : 입력 데이터가 조금 변해도 풀링의 결과는 잘 바뀌지 않음.

7.4. 합성곱/풀링 계층 구현

  1. CNN에서 계층 사이를 흐르는 데이터는 4차원으로, (데이터 개수, 채널 개수, 높이, 너비)의 형상을 지님
  1. im2col(image to column) : 이미지에서 행렬로. 입력 데이터를 필터링(가중치 계산)하기 좋게 전개하는(펼치는) 함수
    1) 4차원 데이터의 합성곱 연산을 쉽게 하는 트릭. 배치 안의 데이터 수까지 포함한 4차원 데이터를 2차원으로 변환
  1. 합성곱 계층의 구현 중 forward(순전파) 함수 (자세한 소스 코드는 하단 링크 참조)
    1) im2col로 입력 데이터 전개
    2) 합성곱 계층의 필터(가중치)를 1열로 전개한 뒤, 두 행렬의 곱 계산(=완전 연결 계층의 Affine 계층 전개 방법)
    3) 2차원 행렬인 im2col 방식 출력 결과를 CNN에 사용하기 위해 4차원으로 변형(reshape)
  1. 풀링 계층의 구현 중 forward(순전파) 함수 (자세한 소스 코드는 하단 링크 참조)
    1) im2col으로 입력 데이터 전개하되, 풀링 적용 영역은 채널마다 독립적으로 전개

    2) 전개한 행렬에서 행별 최댓값 도출
    3) 적절한 형상으로 성형

7.5. CNN 구현하기

  1. 합성곱 계층과 풀링 계층을 구현 및 조합
  2. 손글씨 숫자 인식하는 CNN 구현
  3. 예제 소스 코드는 Convolution-ReLU-Pooling-Affine-ReLU-Affine-Softmax 순으로 계층을 가짐(하단 링크 참조)

7.6. CNN 시각화하기

  1. 학습 전후의 필터 비교
    1) 위 CNN 구현의 1번째 층의 합성곱 계층 필터를 이미지로 나타내 학습 전후 가중치 비교함
    2) 학습 전 필터 : 무작위로 초기화 → 흑백 정도에 규칙성 없음
    3) 학습 후 필터 : 규칙성 있음. 흰색에서 검은색으로 점차 변하는 필터와 덩어리(bolb, 블롭)가 진 필터 등 규칙 가짐
    4) 학습 후 규칙성을 갖게 된 필터는 에지(섹상이 바뀐 경계선) 및 블롭(국소적으로 덩어리진 영역)을 봄
    5) 따라서 한 필터는 대각선 에지에 반응하고 다른 필터는 가로 에지에 반응하는 등이 가능함
    6) 합성곱 계층의 필터는 에지나 블롭 등의 원시적 정보 추출 → 뒷 계층에 전달됨
  1. 층 깊이에 따른 추출 정보 변화
    1) 복수의 층을 가진 CNN의 각 계층에서는, 계층이 깊어질 수록 추출되는 정보가 더 복잡하고 추상화됨
    2) 층이 깊어지며 뉴런이 반응하는 대상이 단순 모양에서 고급 정보로 변화 (사물의 의미 이해)

7.7. 대표적 CNN

  1. LeNet(1998)
    1) CNN의 원조로, 손글씨 숫자를 인식하는 네트워크
    2) 합성곱 계층 & 풀링 계층을 반복한 뒤, 최종적으로 완전 연결 계층을 거쳐 결과 출력
    3) 풀링 계층은 원소를 단순히 줄이기만 하는 서브샘플링 계층임
    4) LeNet은 활성화 함수로 시그모이드 사용, 현재 CNN은 ReLU 사용
    5) LeNet은 서브샘플링으로 중간 데이터 크기 줄임, 현재 CNN은 최대 풀링이 주류
  1. AlexNet(2012)
    1) 딥러닝 주목의 배경이 된 네트워크
    2) 합성곱 계층과 풀링 계층을 교차반복하다, 최종적으로 완전연결 계층 거쳐 결과 출력
    3) 활성화 함수로 ReLU 사용
    4) LRN(Local Response Normalization) 계층 이용
    5) GPU 보급 및 빅데이터가 AlexNet 가능케한 주된 배경임

참조 링크

밑바닥부터 시작하는 딥러닝 예제 소스 링크

profile
🏫Inha Univ. Naval Architecture and Ocean Engineering & Computer Engineering (Undergraduate) / 🚢Autonomous Vehicles, 💡Machine Learning

0개의 댓글