오늘의 포스팅은 수업시간에 배운 합성곱에 대해 작성해보려한다.
포스팅을 시작하기 앞서 항상 느끼는게 있다.
포스팅을 하기 전에는 수업시간에 열심히 듣는다해도 코드부분을 그냥 의미없이 따라치게만 되었고,
그러다보면 항상 개념에 대한 기억은 휘발성으로 날아가버리기 마련이었다.
그래서 포스팅을 수업시간 중에 함께 하다가 언제부턴가 수업 이후 시간에 남기는 버릇을 들였는데,
포스팅을 하며 다시한번 찾아보는 과정이 도움되는것 같다. (그렇다고 다 기억하는건 아니지만....ㅋㅋㅋ)
이제 시작해보자!
1. 합성곱이란?
딥러닝의 합성곱은 이미지 처리와 패턴 인식 작업에 사용하는 중요한 연산이다.
간단히 실행 과정을 설명하자면, 입력 데이터에 작은 커널을 적용해 새로운 특성맵을 생성한다.
이 과정을 통해서 입력 데이터로부터 중요한 특징을 추출해내고, 추출한 특징들로 더 복잡한 패턴을 학습하는데 사용한다.
# 완전 연결층과 합성곱 연산 비교
환전 연결층은 입력 특성 공간에 있는 전역 패턴을 학습하고, 합성곱 연산을 지역 패턴을 학습한다는 차이가 있다.
2. 합성곱 연산의 특징!
1) 평행이동 불변성
이미지 내에서 패턴을 찾는 과정으로 학습된 패턴은 이미지 내에서 어느 위치에 나타나도 인식 가능하다.
2) 적은 훈련 샘플로 일반화 능력
합성곱 신경망은 상대적으로 적은 양의 훈련 데이터로도 이미지 내의 중요한 패천을 잘 파악하고 일반화 가능하다.
즉, 네트워크가 패턴을 더 효과적으로 추출하고 활용할 수 있다.
3) 공간적 계층 구조 학습
이미지의 작은 영역에서 특징을 추출하며 결과물을 조합해 점차적으로 더 복잡한 특징을 학습한다.
그 결과 네트워크가 이미지의 공간적인 계층 구조를 파악하고 의미있는 정보를 추출할 수 있다.
4) 인간의 이미지 인식 모방
합성곱 신경망은 이미지 인식에서 인간의 시각 체계를 모방한다.
우리의 뇌도 공가적 계층 구조로 이미지를 이해하며 다양한 특징을 인식한다.
이러한 기반들로 이미지 처리 작업에 탁월한 성과가 나올 수 있다.
5) 특성맵 적용
합성곱 연산의 결과로 출력되는 것을 특성맵이라 하며, 이 맵은 입력 이미지에서 추출된 중요한 정보를 표현한다.
특성맵은 다양한 필터를 통해 이미지 내의 다양한 패턴과 특징을 나타낸다.
6) 커널 적용
입력 데이터 위를 필터 즉, 커널이 이동하며 원소별 곱셈을 수행하고 곱셈 결과를 모두 더해 출력 특성 맵의 각 위치에 대해 값을 얻는다.
합성곱 연산을 수행할 때, 출력 특성 맵의 크기는 입력 데이터의 크기, 커널의 크기, 스트라이드, 패딩 등에 따라 정해지지만, 아래의 규칙을 적용한 규격이 정해져 있다.
입력 이미지의 크기 : (H_in, W_in)
커널(필터)의 크기 : (H_k, W_k)
스트라이드 : S
패딩 : P
출력 특성 맵의 크기는 다음과 같이 계산된다 :
출력 높이 (H_out) :
H_out = ((H_in + 2P - H_k) / S) + 1
출력 너비 (W_out) :
W_out = ((W_in + 2P - W_k) / S) + 1
3. 합성곱에서 쓰는 용어
합성곱에서 쓰이는 다양한 용어들에 대한 정리를 해보자
1) 특성맵
위에서 개념에 대해 언급했기에, 설명을 덧붙이자면 특성맵은 3차원의 구조를 가지며, 높이 너비 깊이로 구성된다.
깊이는 각 위치에서 추출된 특징의 다양한 측면을 의미한다.
그리고 입력 데이터의 작은 부분에서 추출한 정보로 이루어지는데 이 부분을 패치로 본다.
패치는 입력 데이터의 특정 위치에서 커널을 적용해 얻어진 특징을 나타낸다.
2) Conv2D
입력 이미지와 커널 사이의 합성곱 연산을 수행하는데 이 연산은 입력 이미지 위에 커널이 스트라이드 간격으로 이동하며,
작은 영역에서 원소별 곱셈을 수행해 결과를 모두 더해 출력 특성맵을 생성한다.
입력 이미지와 필터의 합성곱 연산을 직접 하는 과정이다.
그리고 Conv2D는 모든 위치에서 3차원으로 이루어진 패치를 추출한다.
# 합성곱에서 필터의 파라미터는 사용자가 조정하는 것이 아닌, 학습 데이터 기반 자동 생성이다.
3) Padding
패딩은 입력 데이터 주변을 추가적인 값으로 채우는 것으로, 주로 출력크기를 조정하거나 경계 픽셀을 처리할 때 사용한다.
# 패딩의 값을 0으로 같이 설정하는 것과 사용하지 않는 경우는 큰 차이가 있다.
패딩을 사용하지 않는다면, 출력 특성맵의 크기가 입력 데이터보다 작아지는 경우가 생길 수 있다.
즉, 입력 데이터의 가장자리 부분이 무시되어 출력 특성맵의 크기가 줄어든다는 것이다.
4) Stride
커널이 입력 데이터 위를 얼마나 건너뛰며 이동하는지를 나타낸 값이다.
한마디로 합성곱 연산에서 커널이 입력 데이터를 탐색하는 간격을 조절하는데 사용한다.
스트라이드가 1이면 커널은 한 픽셀씩 이동하며 입력 데이터를 탐색해 특성맵의 크기는 그대로지만,
2 이상이면 커널이 입력 데이터를 더 큰 간격으로 이동해 특성맵의 크기가 줄어들며 입력 데이터의 공간적 정보를 더 많이 손실하게 된다.
한마디로 작은 스트라이드는 모델이 입력데이터의 작은 변화나 패턴을 민감하게 감지하며, 딥러닝 설계시 조절가능하다.
5) MaxPooling2D
딥러닝에서 사용하는 풀링 연산으로 이미지나 특성 맵의 크기를 줄이고 중요한 정보를 강조하는데 사용한다.
MaxPooling2D는 입력 데이터의 작은 각각의 영역에서 최댓값을 선택해 출력 특성맵을 생성한다.
@ MeanPooling 이라고 평균값으로 하는 연산도 있다.
작은 변화에도 안정적인 트성을 생성할 수 있는 지역 불변성을 가진다.
특성의 크기와 갯수를 줄이기 때문에 계산 효율성이 높아지고, 과적합이 감소된다.
이렇게 합성곱에 대해 알아보았다.
'데이터' 카테고리의 다른 글
[크롤링] 웹 크롤링에 대한 기초 지식을 알아보자! (0) | 2024.03.11 |
---|---|
[NLP] 딥러닝 자연어 처리 입문 개별 스터디 - 상편 (5) | 2024.01.27 |
머신러닝과 딥러닝의 알고가야 할 중요한 개념! (0) | 2023.08.24 |
[데이터 분석] 딥러닝의 사용 목적과 TensorFlow 사용하기 (0) | 2023.08.24 |
[데이터 분석] 머신러닝 lightgbm로 예측하기 (0) | 2023.08.23 |