일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- 모델성능평가지표
- cyclegan mode collapse
- fsim
- mlp
- CPU
- 의료 영상 용어
- 파이썬
- GAN
- cyclegan generator
- cyclegan architecture
- 재귀함수
- cyclegan discriminator
- cyclegan loss
- 의료 용어
- cyclegan 구성
- gan mode collapse
- 영상 의료 용어
- 의학 기본 용어
- lpips
- mode collapse
- antslibrary
- minmax loss
- alternative loss
- 역전파
- cyclegan 구조
- 단일 퍼셉트론
- 자료구조
- 케라스 창시자에게 배우는 딥러닝
- CNN
- cnn mlp
- Today
- Total
JH 개발자의 성장일지
Deep Learning Study (4) / 24.09.06 본문
5장 컴퓨터 비전을 위한 딥러닝
층 ⇒ 데이터의 특성에 맞게 합성곱, 순환, 완전 연결 층 등을 적절히 배치
자동차 공장의 조립 공정, 층을 지나면서 데이터가 점점 유용한 정보로 변환
종류
(1) Convolutional Layer (Conv 층)
- 주요 역할: 지역적 패턴을 추출하고, 공간적 관계를 학습하는 역할을 합니다.
- 동작 방식: 이미지나 입력 데이터의 작은 부분을 필터(커널)를 사용해 스캔하여 패턴을 추출합니다. 필터는 작은 영역에서 엣지, 텍스처 같은 저차원 특징을 학습하고, 여러 층을 쌓아갈수록 점점 더 복잡한 고차원 특징을 학습하게 됩니다.
- 적용 분야: 이미지, 영상 데이터 처리에서 주로 사용되며, CNN(Convolutional Neural Network)의 핵심입니다.
- 특징: 데이터를 작은 지역적 단위로 학습하며, 공간적 구조를 유지합니다. FCN과 달리, 데이터를 벡터로 변환하지 않고 2D 또는 3D 구조를 그대로 학습합니다.
(2) Fully Connected Layer (FC 층, Dense Layer)
- 주요 역할: 모든 뉴런이 연결되어 전체 입력 데이터를 기반으로 학습하고, 최종 결정을 내리는 역할을 합니다.
- 동작 방식: 각 뉴런이 이전 층의 모든 뉴런과 연결되어 전체 데이터를 학습합니다. 이미지 데이터를 처리할 때는 일반적으로 마지막에 FC 층을 추가해 분류나 예측을 수행합니다.
- 적용 분야: 모든 종류의 데이터에 사용될 수 있지만, 이미지 처리에서는 주로 CNN의 마지막 단계에 사용됩니다.
- 특징: 모든 입력을 학습하며, 데이터의 전체 패턴을 다룹니다. 하지만 지역적 패턴이나 공간적 관계를 직접적으로 학습하는 데는 적합하지 않습니다.
(3) Pooling Layer (풀링 층)
- 목적: 차원 축소 및 공간적 정보의 유지.
- 동작 방식: 입력 데이터의 특정 영역에서 최댓값(Max Pooling)이나 평균값(Average Pooling)을 취해 크기를 줄입니다. 이는 연산을 효율적으로 하고 과적합을 방지하는 효과도 있습니다.
- 특징: 파라미터를 학습하지 않고, 미리 정해진 방식으로 데이터를 축소합니다.
(4) Dropout Layer (드롭아웃 층)
- 목적: 과적합 방지.
- 동작 방식: 학습 중 무작위로 일부 뉴런을 비활성화하여, 특정 뉴런에 과도하게 의존하는 것을 방지합니다. 테스트 시에는 모든 뉴런을 사용합니다.
- 특징: 학습 시 매번 다른 신경망을 학습하는 것처럼 만들어 일반화 성능을 높이는 데 도움이 됩니다.
(5) Batch Normalization Layer (배치 정규화 층)
- 목적: 학습 속도 개선 및 과적합 방지.
- 동작 방식: 각 층의 출력값을 정규화(Normalization)하여 학습이 빠르고 안정적으로 이루어지게 합니다.
- 특징: 신경망의 각 층에서 입력 데이터의 분포가 일정하게 유지되도록 하여, 가중치 학습을 더 잘하도록 돕습니다.
(6) Recurrent Layer (순환 층)
- 목적: 순차적 데이터(시계열 데이터, 자연어 등)를 처리.
- 동작 방식: 과거의 출력값을 메모리로 저장하고, 현재 입력과 함께 처리하여 순차적 관계를 학습합니다.
- 예시: RNN(Recurrent Neural Network), LSTM(Long Short-Term Memory), GRU(Gated Recurrent Unit).
(7) Attention Layer (어텐션 층)
- 목적: 입력 데이터의 중요 부분에 집중하여 학습.
- 동작 방식: 입력 데이터의 각 부분에 가중치를 부여하여, 신경망이 중요한 정보에 집중할 수 있도록 합니다.
- 특징: 주로 자연어 처리(NLP)에서 많이 사용되며, 특히 Transformer 모델에서 핵심적인 역할을 합니다.
활성화 함수 ⇒ 각 층의 출력이 적절하게 변환되도록 선택해 모델이 복잡한 데이터 패턴을 학습할 수 있도록 함
각 공정에서의 검사관, 데이터가 제대로 가공되었는지 확인하고, 중요한 정보만 통과시킴
종류
(1) ReLU (Rectified Linear Unit)
- 특징: 음수를 0으로 만들고, 양수는 그대로 통과시킵니다.
- 주로 사용되는 곳: 합성곱 층, 완전 연결 층 등에서 매우 일반적으로 사용됩니다.
- 이유: 연산이 간단하고, 기울기 소실 문제(Vanishing Gradient Problem)를 완화하여 학습이 잘 이루어지도록 돕습니다.
(2) Softmax
- 특징: 출력값을 확률 분포로 변환하여, 각 클래스의 확률을 계산할 수 있게 합니다.
- 주로 사용되는 곳: 주로 완전 연결 층의 마지막 층에서 분류 문제를 해결할 때 사용됩니다.
- 이유: 클래스 확률을 계산하고, 가장 높은 확률을 가지는 클래스를 선택하기 위해 사용됩니다.
(3) Sigmoid
- 특징: 출력값을 0과 1 사이로 변환하는 함수. 이진 분류 문제에서 주로 사용됩니다.
- 사용되는 곳: 이진 분류 문제의 마지막 층에서 많이 사용되며, RNN 같은 순환 신경망에서도 사용됩니다.
(4) Tanh
- 특징: -1과 1 사이의 값을 출력하며, Sigmoid와 비슷하지만 출력을 중앙으로 집중시킵니다.
- 사용되는 곳: ReLU가 등장하기 전에는 주로 많이 사용되었으며, 여전히 RNN 계열에서 많이 사용됩니다.
(5) Leaky ReLU
- 특징: ReLU와 유사하지만, 음수 값에서도 작은 기울기를 유지합니다. ReLU의 단점인 '죽은 뉴런(Dead Neuron)' 문제를 완화합니다.
- 사용되는 곳: 합성곱 층이나 완전 연결 층 등에서 사용될 수 있습니다.
(6) Swish
- 특징: 최근에 나온 활성화 함수로, ReLU보다 더 나은 성능을 보이는 경우가 있습니다.
- 사용되는 곳: 합성곱 층 및 완전 연결 층 등에서 사용 가능합니다.
합성곱 신경망
= 컨브넷 (CNN) = Conv 층을 주요 구성 요소로 사용하는 신경망 → 이미지나 영상 데이터를 처리하는 신경망에서 자주 사용
컨브넷(CNN)의 구성 요소
- Conv 층: 지역적 패턴을 추출하는 핵심 층입니다. 입력 이미지의 작은 영역을 필터로 스캔하며, 엣지나 텍스처 같은 중요한 특징을 학습합니다. ⇒ 활성화 함수 relu 많이 사용
- Pooling 층: 데이터의 차원을 줄이고, 중요한 특징을 요약합니다. 주로 Max Pooling이나 Average Pooling을 사용해 데이터의 크기를 줄이고 과적합을 방지합니다. ⇒ 활성화함수 필요하지 않음. (단순히 데이터의 크기를 줄이고, 이후 단계로 전달하는 역할만 하기 때문에)
- Flatten 층: 마지막에 사용되며, 2D로 된 데이터를 1D 벡터로 변환해, Dense 층으로 전달합니다. ⇒ 활성화 함수 필요하지 않음 (데이터 형태를 바꾸는 것 외에 계산을 수행하지 않기 때문에)
- Dense 층(완전 연결 층): Conv와 Pooling 층에서 추출된 특징을 바탕으로 최종 예측을 수행하는 층입니다. 분류 문제에서 주로 사용됩니다. ⇒ 활성화 함수 : (중간층에서) ReLU 또는 Tanh / (출력층에서) 다중 클래스 분류로는 Softmax, 이진 분류로는 Sigmoid, 회귀문제에서는 Linear
합성곱 연산
- 입력 데이터 : 이미지인 경우 (4D 텐서) → 지역적 패턴을 학습하기 위해 2D 윈도우(공간만 학습)로 처리 / 영상인 경우 (5D 텐서) → 지역적 패턴을 학습하기 위해 3D 윈도우(시간과 공간 함께 학습)로 처리
- 특징
- 학습된 패턴은 평행 이동 불변성을 가진다 : FCN은 위치 의존적 학습 방식. 한편 CNN은 위치 독립적 학습 방식 ⇒ CNN이 일반화 능력이 좋아서 효율성이 좋다.
- 패턴의 공간적 계층 구조를 학습할 수 있다 : 층이 더 쌓일 수록 이전보다 더 큰 지역의 패턴을 학습함.
- 특성 맵(feature map) : 2D 윈도우로 스캔한 작은 영역에서 감지한 특징 및 패턴들을 기록하는 3D 텐서 (영상인 경우 4D 텐서)
- 입력 특성 맵 : 각 층의 입력 데이터로, 첫 번째 층에서는 원본 이미지가 되고, 그다음 층부터는 이전 층의 출력 특성 맵이 됨.
- 출력 특성 맵 : 합성곱 연산 후에 필터가 감지한 특징들을 기록한 맵으로, 그다음 층으로 전달됨.
- 응답 맵 : 필터가 감지한 반응을 기록한 맵, 특성 맵과 같은 개념
- 파라미터
- 패치 크기 (window_height, window_width) : 주로 33, 55
- 출력 깊이 : 합성곱으로 계산할 필터 수
- 처리 과정
- 단일 이미지 처리에서의 합성곱 연산 과정
- 단일 이미지: 28x28 크기의 RGB 이미지 (28x28x3)
- 커널 개수: 32개 (3x3 크기의 2D 텐서, 각 커널은 다른 필터링 작업을 수행)
- 딱 한 번만 하며 28개의 커널이 병렬적으로 동시에 컨볼루션 작업(합성곱 연산)이 진행
- 28개의 각 커널의 결과로 28개의 26x26 크기의 2D 특성 맵 생성
- 최종 출력은 26x26x32 크기의 3D 텐서 → CNN의 다음 층으로 전달
- 배치 크기를 포함한 이미지 처리 과정
- 이미지 : 28x28 크기의 RGB 이미지 (28x28x3)
- 배치 크기: 12 (즉, 한 번에 12개의 이미지를 CNN에 입력)
- 커널 개수: 32개
- 배치 크기 만큼의 이미지 CNN에 한 번에 입력 (12개의 28x28x3 크기의 RGB 이미지가 배치)
- 배치 내의 각 이미지를 독립적으로 스캔 & 병렬적으로 처리 → 32개의 커널에서도 병렬적으로 각 배치에 대해 동시에 연산 수행
- 각 이미지마다 32개의 2D 특성 맵이 생성 → 26x26x32 크기의 특성 맵
- 배치 크기에 따라 CNN의 최종 출력은 12개의 26x26x32 크기의 4D 텐서 특성 맵으로 구성
*커널 = 마스크 = 2D 윈도우
경계 문제와 패딩
입력의 높이와 너비와 동일한 출력 특성 맵을 얻고 싶다 ⇒ 패딩 사용
합성곱 스트라이드
: 커널이 입력 이미지 위에서 한 번에 몇 칸씩 이동할지를 설정하는 값 → 출력 특성 맵의 크기가 작아짐. (다운샘플링)
But, 보통 최대 풀링을 더 자주 사용함.
최대 풀링 연산
: CNN에서 특성 맵의 크기를 줄이기 위해 사용하는 연산 → 고정된 크기의 윈도우를 사용해 입력 데이터를 나누고, 각 윈도우 내에서 가장 큰 값 선택
- 목적 : 특성 맵의 크기를 줄여서 모델의 파라미터 수와 연산량을 감소 / 중요한 특성만 남기고 나머지 값들은 제거 / 작은 변형이나 잡음에 덜 민감하도록 만들기
⇒ 평균 풀링보다 더 유용
소규모 데이터셋에서 컨브넷 훈련하기
적은 샘플 : 수백 ~ 수만 개 사이 → 컨브넷은 지역적, 평행 이동으로 변하지 않는 특성 학습 ⇒ 적은 이미지 데이터 셋에서 훈련해도 납득할만한 결과 만들 수 있음.
데이터 전처리
ImageDataGenerator : 디스크에 있는 이미지 파일을 전처리된 배치 텐서로 자동으로 바꾸어주는 파이썬 제너레이터
fit_generator :
데이터 증식
보통 데이터가 적으면 과대적합이 일어남 ⇒ 데이터 증식 사용
5장 컴퓨터 비전을 위한 딥러닝
층 ⇒ 데이터의 특성에 맞게 합성곱, 순환, 완전 연결 층 등을 적절히 배치
자동차 공장의 조립 공정, 층을 지나면서 데이터가 점점 유용한 정보로 변환
종류
(1) Convolutional Layer (Conv 층)
- 주요 역할: 지역적 패턴을 추출하고, 공간적 관계를 학습하는 역할을 합니다.
- 동작 방식: 이미지나 입력 데이터의 작은 부분을 필터(커널)를 사용해 스캔하여 패턴을 추출합니다. 필터는 작은 영역에서 엣지, 텍스처 같은 저차원 특징을 학습하고, 여러 층을 쌓아갈수록 점점 더 복잡한 고차원 특징을 학습하게 됩니다.
- 적용 분야: 이미지, 영상 데이터 처리에서 주로 사용되며, CNN(Convolutional Neural Network)의 핵심입니다.
- 특징: 데이터를 작은 지역적 단위로 학습하며, 공간적 구조를 유지합니다. FCN과 달리, 데이터를 벡터로 변환하지 않고 2D 또는 3D 구조를 그대로 학습합니다.
(2) Fully Connected Layer (FC 층, Dense Layer)
- 주요 역할: 모든 뉴런이 연결되어 전체 입력 데이터를 기반으로 학습하고, 최종 결정을 내리는 역할을 합니다.
- 동작 방식: 각 뉴런이 이전 층의 모든 뉴런과 연결되어 전체 데이터를 학습합니다. 이미지 데이터를 처리할 때는 일반적으로 마지막에 FC 층을 추가해 분류나 예측을 수행합니다.
- 적용 분야: 모든 종류의 데이터에 사용될 수 있지만, 이미지 처리에서는 주로 CNN의 마지막 단계에 사용됩니다.
- 특징: 모든 입력을 학습하며, 데이터의 전체 패턴을 다룹니다. 하지만 지역적 패턴이나 공간적 관계를 직접적으로 학습하는 데는 적합하지 않습니다.
(3) Pooling Layer (풀링 층)
- 목적: 차원 축소 및 공간적 정보의 유지.
- 동작 방식: 입력 데이터의 특정 영역에서 최댓값(Max Pooling)이나 평균값(Average Pooling)을 취해 크기를 줄입니다. 이는 연산을 효율적으로 하고 과적합을 방지하는 효과도 있습니다.
- 특징: 파라미터를 학습하지 않고, 미리 정해진 방식으로 데이터를 축소합니다.
(4) Dropout Layer (드롭아웃 층)
- 목적: 과적합 방지.
- 동작 방식: 학습 중 무작위로 일부 뉴런을 비활성화하여, 특정 뉴런에 과도하게 의존하는 것을 방지합니다. 테스트 시에는 모든 뉴런을 사용합니다.
- 특징: 학습 시 매번 다른 신경망을 학습하는 것처럼 만들어 일반화 성능을 높이는 데 도움이 됩니다.
(5) Batch Normalization Layer (배치 정규화 층)
- 목적: 학습 속도 개선 및 과적합 방지.
- 동작 방식: 각 층의 출력값을 정규화(Normalization)하여 학습이 빠르고 안정적으로 이루어지게 합니다.
- 특징: 신경망의 각 층에서 입력 데이터의 분포가 일정하게 유지되도록 하여, 가중치 학습을 더 잘하도록 돕습니다.
(6) Recurrent Layer (순환 층)
- 목적: 순차적 데이터(시계열 데이터, 자연어 등)를 처리.
- 동작 방식: 과거의 출력값을 메모리로 저장하고, 현재 입력과 함께 처리하여 순차적 관계를 학습합니다.
- 예시: RNN(Recurrent Neural Network), LSTM(Long Short-Term Memory), GRU(Gated Recurrent Unit).
(7) Attention Layer (어텐션 층)
- 목적: 입력 데이터의 중요 부분에 집중하여 학습.
- 동작 방식: 입력 데이터의 각 부분에 가중치를 부여하여, 신경망이 중요한 정보에 집중할 수 있도록 합니다.
- 특징: 주로 자연어 처리(NLP)에서 많이 사용되며, 특히 Transformer 모델에서 핵심적인 역할을 합니다.
활성화 함수 ⇒ 각 층의 출력이 적절하게 변환되도록 선택해 모델이 복잡한 데이터 패턴을 학습할 수 있도록 함
각 공정에서의 검사관, 데이터가 제대로 가공되었는지 확인하고, 중요한 정보만 통과시킴
종류
(1) ReLU (Rectified Linear Unit)
- 특징: 음수를 0으로 만들고, 양수는 그대로 통과시킵니다.
- 주로 사용되는 곳: 합성곱 층, 완전 연결 층 등에서 매우 일반적으로 사용됩니다.
- 이유: 연산이 간단하고, 기울기 소실 문제(Vanishing Gradient Problem)를 완화하여 학습이 잘 이루어지도록 돕습니다.
(2) Softmax
- 특징: 출력값을 확률 분포로 변환하여, 각 클래스의 확률을 계산할 수 있게 합니다.
- 주로 사용되는 곳: 주로 완전 연결 층의 마지막 층에서 분류 문제를 해결할 때 사용됩니다.
- 이유: 클래스 확률을 계산하고, 가장 높은 확률을 가지는 클래스를 선택하기 위해 사용됩니다.
(3) Sigmoid
- 특징: 출력값을 0과 1 사이로 변환하는 함수. 이진 분류 문제에서 주로 사용됩니다.
- 사용되는 곳: 이진 분류 문제의 마지막 층에서 많이 사용되며, RNN 같은 순환 신경망에서도 사용됩니다.
(4) Tanh
- 특징: -1과 1 사이의 값을 출력하며, Sigmoid와 비슷하지만 출력을 중앙으로 집중시킵니다.
- 사용되는 곳: ReLU가 등장하기 전에는 주로 많이 사용되었으며, 여전히 RNN 계열에서 많이 사용됩니다.
(5) Leaky ReLU
- 특징: ReLU와 유사하지만, 음수 값에서도 작은 기울기를 유지합니다. ReLU의 단점인 '죽은 뉴런(Dead Neuron)' 문제를 완화합니다.
- 사용되는 곳: 합성곱 층이나 완전 연결 층 등에서 사용될 수 있습니다.
(6) Swish
- 특징: 최근에 나온 활성화 함수로, ReLU보다 더 나은 성능을 보이는 경우가 있습니다.
- 사용되는 곳: 합성곱 층 및 완전 연결 층 등에서 사용 가능합니다.
합성곱 신경망
= 컨브넷 (CNN) = Conv 층을 주요 구성 요소로 사용하는 신경망 → 이미지나 영상 데이터를 처리하는 신경망에서 자주 사용
컨브넷(CNN)의 구성 요소
- Conv 층: 지역적 패턴을 추출하는 핵심 층입니다. 입력 이미지의 작은 영역을 필터로 스캔하며, 엣지나 텍스처 같은 중요한 특징을 학습합니다. ⇒ 활성화 함수 relu 많이 사용
- Pooling 층: 데이터의 차원을 줄이고, 중요한 특징을 요약합니다. 주로 Max Pooling이나 Average Pooling을 사용해 데이터의 크기를 줄이고 과적합을 방지합니다. ⇒ 활성화함수 필요하지 않음. (단순히 데이터의 크기를 줄이고, 이후 단계로 전달하는 역할만 하기 때문에)
- Flatten 층: 마지막에 사용되며, 2D로 된 데이터를 1D 벡터로 변환해, Dense 층으로 전달합니다. ⇒ 활성화 함수 필요하지 않음 (데이터 형태를 바꾸는 것 외에 계산을 수행하지 않기 때문에)
- Dense 층(완전 연결 층): Conv와 Pooling 층에서 추출된 특징을 바탕으로 최종 예측을 수행하는 층입니다. 분류 문제에서 주로 사용됩니다. ⇒ 활성화 함수 : (중간층에서) ReLU 또는 Tanh / (출력층에서) 다중 클래스 분류로는 Softmax, 이진 분류로는 Sigmoid, 회귀문제에서는 Linear
합성곱 연산
- 입력 데이터 : 이미지인 경우 (4D 텐서) → 지역적 패턴을 학습하기 위해 2D 윈도우(공간만 학습)로 처리 / 영상인 경우 (5D 텐서) → 지역적 패턴을 학습하기 위해 3D 윈도우(시간과 공간 함께 학습)로 처리
- 특징
- 학습된 패턴은 평행 이동 불변성을 가진다 : FCN은 위치 의존적 학습 방식. 한편 CNN은 위치 독립적 학습 방식 ⇒ CNN이 일반화 능력이 좋아서 효율성이 좋다.
- 패턴의 공간적 계층 구조를 학습할 수 있다 : 층이 더 쌓일 수록 이전보다 더 큰 지역의 패턴을 학습함.
- 특성 맵(feature map) : 2D 윈도우로 스캔한 작은 영역에서 감지한 특징 및 패턴들을 기록하는 3D 텐서 (영상인 경우 4D 텐서)
- 입력 특성 맵 : 각 층의 입력 데이터로, 첫 번째 층에서는 원본 이미지가 되고, 그다음 층부터는 이전 층의 출력 특성 맵이 됨.
- 출력 특성 맵 : 합성곱 연산 후에 필터가 감지한 특징들을 기록한 맵으로, 그다음 층으로 전달됨.
- 응답 맵 : 필터가 감지한 반응을 기록한 맵, 특성 맵과 같은 개념
- 파라미터
- 패치 크기 (window_height, window_width) : 주로 33, 55
- 출력 깊이 : 합성곱으로 계산할 필터 수
- 처리 과정
- 단일 이미지 처리에서의 합성곱 연산 과정
- 단일 이미지: 28x28 크기의 RGB 이미지 (28x28x3)
- 커널 개수: 32개 (3x3 크기의 2D 텐서, 각 커널은 다른 필터링 작업을 수행)
- 딱 한 번만 하며 28개의 커널이 병렬적으로 동시에 컨볼루션 작업(합성곱 연산)이 진행
- 28개의 각 커널의 결과로 28개의 26x26 크기의 2D 특성 맵 생성
- 최종 출력은 26x26x32 크기의 3D 텐서 → CNN의 다음 층으로 전달
- 배치 크기를 포함한 이미지 처리 과정
- 이미지 : 28x28 크기의 RGB 이미지 (28x28x3)
- 배치 크기: 12 (즉, 한 번에 12개의 이미지를 CNN에 입력)
- 커널 개수: 32개
- 배치 크기 만큼의 이미지 CNN에 한 번에 입력 (12개의 28x28x3 크기의 RGB 이미지가 배치)
- 배치 내의 각 이미지를 독립적으로 스캔 & 병렬적으로 처리 → 32개의 커널에서도 병렬적으로 각 배치에 대해 동시에 연산 수행
- 각 이미지마다 32개의 2D 특성 맵이 생성 → 26x26x32 크기의 특성 맵
- 배치 크기에 따라 CNN의 최종 출력은 12개의 26x26x32 크기의 4D 텐서 특성 맵으로 구성
*커널 = 마스크 = 2D 윈도우
경계 문제와 패딩
입력의 높이와 너비와 동일한 출력 특성 맵을 얻고 싶다 ⇒ 패딩 사용
합성곱 스트라이드
: 커널이 입력 이미지 위에서 한 번에 몇 칸씩 이동할지를 설정하는 값 → 출력 특성 맵의 크기가 작아짐. (다운샘플링)
But, 보통 최대 풀링을 더 자주 사용함.
최대 풀링 연산
: CNN에서 특성 맵의 크기를 줄이기 위해 사용하는 연산 → 고정된 크기의 윈도우를 사용해 입력 데이터를 나누고, 각 윈도우 내에서 가장 큰 값 선택
- 목적 : 특성 맵의 크기를 줄여서 모델의 파라미터 수와 연산량을 감소 / 중요한 특성만 남기고 나머지 값들은 제거 / 작은 변형이나 잡음에 덜 민감하도록 만들기
⇒ 평균 풀링보다 더 유용
소규모 데이터셋에서 컨브넷 훈련하기
적은 샘플 : 수백 ~ 수만 개 사이 → 컨브넷은 지역적, 평행 이동으로 변하지 않는 특성 학습 ⇒ 적은 이미지 데이터 셋에서 훈련해도 납득할만한 결과 만들 수 있음.
데이터 전처리
ImageDataGenerator : 디스크에 있는 이미지 파일을 전처리된 배치 텐서로 자동으로 바꾸어주는 파이썬 제너레이터
fit_generator :
데이터 증식
보통 데이터가 적으면 과대적합이 일어남 ⇒ 데이터 증식 사용
5장 컴퓨터 비전을 위한 딥러닝
층 ⇒ 데이터의 특성에 맞게 합성곱, 순환, 완전 연결 층 등을 적절히 배치
자동차 공장의 조립 공정, 층을 지나면서 데이터가 점점 유용한 정보로 변환
종류
(1) Convolutional Layer (Conv 층)
- 주요 역할: 지역적 패턴을 추출하고, 공간적 관계를 학습하는 역할을 합니다.
- 동작 방식: 이미지나 입력 데이터의 작은 부분을 필터(커널)를 사용해 스캔하여 패턴을 추출합니다. 필터는 작은 영역에서 엣지, 텍스처 같은 저차원 특징을 학습하고, 여러 층을 쌓아갈수록 점점 더 복잡한 고차원 특징을 학습하게 됩니다.
- 적용 분야: 이미지, 영상 데이터 처리에서 주로 사용되며, CNN(Convolutional Neural Network)의 핵심입니다.
- 특징: 데이터를 작은 지역적 단위로 학습하며, 공간적 구조를 유지합니다. FCN과 달리, 데이터를 벡터로 변환하지 않고 2D 또는 3D 구조를 그대로 학습합니다.
(2) Fully Connected Layer (FC 층, Dense Layer)
- 주요 역할: 모든 뉴런이 연결되어 전체 입력 데이터를 기반으로 학습하고, 최종 결정을 내리는 역할을 합니다.
- 동작 방식: 각 뉴런이 이전 층의 모든 뉴런과 연결되어 전체 데이터를 학습합니다. 이미지 데이터를 처리할 때는 일반적으로 마지막에 FC 층을 추가해 분류나 예측을 수행합니다.
- 적용 분야: 모든 종류의 데이터에 사용될 수 있지만, 이미지 처리에서는 주로 CNN의 마지막 단계에 사용됩니다.
- 특징: 모든 입력을 학습하며, 데이터의 전체 패턴을 다룹니다. 하지만 지역적 패턴이나 공간적 관계를 직접적으로 학습하는 데는 적합하지 않습니다.
(3) Pooling Layer (풀링 층)
- 목적: 차원 축소 및 공간적 정보의 유지.
- 동작 방식: 입력 데이터의 특정 영역에서 최댓값(Max Pooling)이나 평균값(Average Pooling)을 취해 크기를 줄입니다. 이는 연산을 효율적으로 하고 과적합을 방지하는 효과도 있습니다.
- 특징: 파라미터를 학습하지 않고, 미리 정해진 방식으로 데이터를 축소합니다.
(4) Dropout Layer (드롭아웃 층)
- 목적: 과적합 방지.
- 동작 방식: 학습 중 무작위로 일부 뉴런을 비활성화하여, 특정 뉴런에 과도하게 의존하는 것을 방지합니다. 테스트 시에는 모든 뉴런을 사용합니다.
- 특징: 학습 시 매번 다른 신경망을 학습하는 것처럼 만들어 일반화 성능을 높이는 데 도움이 됩니다.
(5) Batch Normalization Layer (배치 정규화 층)
- 목적: 학습 속도 개선 및 과적합 방지.
- 동작 방식: 각 층의 출력값을 정규화(Normalization)하여 학습이 빠르고 안정적으로 이루어지게 합니다.
- 특징: 신경망의 각 층에서 입력 데이터의 분포가 일정하게 유지되도록 하여, 가중치 학습을 더 잘하도록 돕습니다.
(6) Recurrent Layer (순환 층)
- 목적: 순차적 데이터(시계열 데이터, 자연어 등)를 처리.
- 동작 방식: 과거의 출력값을 메모리로 저장하고, 현재 입력과 함께 처리하여 순차적 관계를 학습합니다.
- 예시: RNN(Recurrent Neural Network), LSTM(Long Short-Term Memory), GRU(Gated Recurrent Unit).
(7) Attention Layer (어텐션 층)
- 목적: 입력 데이터의 중요 부분에 집중하여 학습.
- 동작 방식: 입력 데이터의 각 부분에 가중치를 부여하여, 신경망이 중요한 정보에 집중할 수 있도록 합니다.
- 특징: 주로 자연어 처리(NLP)에서 많이 사용되며, 특히 Transformer 모델에서 핵심적인 역할을 합니다.
활성화 함수 ⇒ 각 층의 출력이 적절하게 변환되도록 선택해 모델이 복잡한 데이터 패턴을 학습할 수 있도록 함
각 공정에서의 검사관, 데이터가 제대로 가공되었는지 확인하고, 중요한 정보만 통과시킴
종류
(1) ReLU (Rectified Linear Unit)
- 특징: 음수를 0으로 만들고, 양수는 그대로 통과시킵니다.
- 주로 사용되는 곳: 합성곱 층, 완전 연결 층 등에서 매우 일반적으로 사용됩니다.
- 이유: 연산이 간단하고, 기울기 소실 문제(Vanishing Gradient Problem)를 완화하여 학습이 잘 이루어지도록 돕습니다.
(2) Softmax
- 특징: 출력값을 확률 분포로 변환하여, 각 클래스의 확률을 계산할 수 있게 합니다.
- 주로 사용되는 곳: 주로 완전 연결 층의 마지막 층에서 분류 문제를 해결할 때 사용됩니다.
- 이유: 클래스 확률을 계산하고, 가장 높은 확률을 가지는 클래스를 선택하기 위해 사용됩니다.
(3) Sigmoid
- 특징: 출력값을 0과 1 사이로 변환하는 함수. 이진 분류 문제에서 주로 사용됩니다.
- 사용되는 곳: 이진 분류 문제의 마지막 층에서 많이 사용되며, RNN 같은 순환 신경망에서도 사용됩니다.
(4) Tanh
- 특징: -1과 1 사이의 값을 출력하며, Sigmoid와 비슷하지만 출력을 중앙으로 집중시킵니다.
- 사용되는 곳: ReLU가 등장하기 전에는 주로 많이 사용되었으며, 여전히 RNN 계열에서 많이 사용됩니다.
(5) Leaky ReLU
- 특징: ReLU와 유사하지만, 음수 값에서도 작은 기울기를 유지합니다. ReLU의 단점인 '죽은 뉴런(Dead Neuron)' 문제를 완화합니다.
- 사용되는 곳: 합성곱 층이나 완전 연결 층 등에서 사용될 수 있습니다.
(6) Swish
- 특징: 최근에 나온 활성화 함수로, ReLU보다 더 나은 성능을 보이는 경우가 있습니다.
- 사용되는 곳: 합성곱 층 및 완전 연결 층 등에서 사용 가능합니다.
합성곱 신경망
= 컨브넷 (CNN) = Conv 층을 주요 구성 요소로 사용하는 신경망 → 이미지나 영상 데이터를 처리하는 신경망에서 자주 사용
컨브넷(CNN)의 구성 요소
- Conv 층: 지역적 패턴을 추출하는 핵심 층입니다. 입력 이미지의 작은 영역을 필터로 스캔하며, 엣지나 텍스처 같은 중요한 특징을 학습합니다. ⇒ 활성화 함수 relu 많이 사용
- Pooling 층: 데이터의 차원을 줄이고, 중요한 특징을 요약합니다. 주로 Max Pooling이나 Average Pooling을 사용해 데이터의 크기를 줄이고 과적합을 방지합니다. ⇒ 활성화함수 필요하지 않음. (단순히 데이터의 크기를 줄이고, 이후 단계로 전달하는 역할만 하기 때문에)
- Flatten 층: 마지막에 사용되며, 2D로 된 데이터를 1D 벡터로 변환해, Dense 층으로 전달합니다. ⇒ 활성화 함수 필요하지 않음 (데이터 형태를 바꾸는 것 외에 계산을 수행하지 않기 때문에)
- Dense 층(완전 연결 층): Conv와 Pooling 층에서 추출된 특징을 바탕으로 최종 예측을 수행하는 층입니다. 분류 문제에서 주로 사용됩니다. ⇒ 활성화 함수 : (중간층에서) ReLU 또는 Tanh / (출력층에서) 다중 클래스 분류로는 Softmax, 이진 분류로는 Sigmoid, 회귀문제에서는 Linear
합성곱 연산
- 입력 데이터 : 이미지인 경우 (4D 텐서) → 지역적 패턴을 학습하기 위해 2D 윈도우(공간만 학습)로 처리 / 영상인 경우 (5D 텐서) → 지역적 패턴을 학습하기 위해 3D 윈도우(시간과 공간 함께 학습)로 처리
- 특징
- 학습된 패턴은 평행 이동 불변성을 가진다 : FCN은 위치 의존적 학습 방식. 한편 CNN은 위치 독립적 학습 방식 ⇒ CNN이 일반화 능력이 좋아서 효율성이 좋다.
- 패턴의 공간적 계층 구조를 학습할 수 있다 : 층이 더 쌓일 수록 이전보다 더 큰 지역의 패턴을 학습함.
- 특성 맵(feature map) : 2D 윈도우로 스캔한 작은 영역에서 감지한 특징 및 패턴들을 기록하는 3D 텐서 (영상인 경우 4D 텐서)
- 입력 특성 맵 : 각 층의 입력 데이터로, 첫 번째 층에서는 원본 이미지가 되고, 그다음 층부터는 이전 층의 출력 특성 맵이 됨.
- 출력 특성 맵 : 합성곱 연산 후에 필터가 감지한 특징들을 기록한 맵으로, 그다음 층으로 전달됨.
- 응답 맵 : 필터가 감지한 반응을 기록한 맵, 특성 맵과 같은 개념
- 파라미터
- 패치 크기 (window_height, window_width) : 주로 33, 55
- 출력 깊이 : 합성곱으로 계산할 필터 수
- 처리 과정
- 단일 이미지 처리에서의 합성곱 연산 과정
- 단일 이미지: 28x28 크기의 RGB 이미지 (28x28x3)
- 커널 개수: 32개 (3x3 크기의 2D 텐서, 각 커널은 다른 필터링 작업을 수행)
- 딱 한 번만 하며 28개의 커널이 병렬적으로 동시에 컨볼루션 작업(합성곱 연산)이 진행
- 28개의 각 커널의 결과로 28개의 26x26 크기의 2D 특성 맵 생성
- 최종 출력은 26x26x32 크기의 3D 텐서 → CNN의 다음 층으로 전달
- 배치 크기를 포함한 이미지 처리 과정
- 이미지 : 28x28 크기의 RGB 이미지 (28x28x3)
- 배치 크기: 12 (즉, 한 번에 12개의 이미지를 CNN에 입력)
- 커널 개수: 32개
- 배치 크기 만큼의 이미지 CNN에 한 번에 입력 (12개의 28x28x3 크기의 RGB 이미지가 배치)
- 배치 내의 각 이미지를 독립적으로 스캔 & 병렬적으로 처리 → 32개의 커널에서도 병렬적으로 각 배치에 대해 동시에 연산 수행
- 각 이미지마다 32개의 2D 특성 맵이 생성 → 26x26x32 크기의 특성 맵
- 배치 크기에 따라 CNN의 최종 출력은 12개의 26x26x32 크기의 4D 텐서 특성 맵으로 구성
*커널 = 마스크 = 2D 윈도우
경계 문제와 패딩
입력의 높이와 너비와 동일한 출력 특성 맵을 얻고 싶다 ⇒ 패딩 사용
합성곱 스트라이드
: 커널이 입력 이미지 위에서 한 번에 몇 칸씩 이동할지를 설정하는 값 → 출력 특성 맵의 크기가 작아짐. (다운샘플링)
But, 보통 최대 풀링을 더 자주 사용함.
최대 풀링 연산
: CNN에서 특성 맵의 크기를 줄이기 위해 사용하는 연산 → 고정된 크기의 윈도우를 사용해 입력 데이터를 나누고, 각 윈도우 내에서 가장 큰 값 선택
- 목적 : 특성 맵의 크기를 줄여서 모델의 파라미터 수와 연산량을 감소 / 중요한 특성만 남기고 나머지 값들은 제거 / 작은 변형이나 잡음에 덜 민감하도록 만들기
⇒ 평균 풀링보다 더 유용
소규모 데이터셋에서 컨브넷 훈련하기
적은 샘플 : 수백 ~ 수만 개 사이 → 컨브넷은 지역적, 평행 이동으로 변하지 않는 특성 학습 ⇒ 적은 이미지 데이터 셋에서 훈련해도 납득할만한 결과 만들 수 있음.
데이터 전처리
ImageDataGenerator : 디스크에 있는 이미지 파일을 전처리된 배치 텐서로 자동으로 바꾸어주는 파이썬 제너레이터
fit_generator :
데이터 증식
보통 데이터가 적으면 과대적합이 일어남 ⇒ 데이터 증식 사용
'Deep Learning' 카테고리의 다른 글
Deep Learning Study (7) / 24.09.11 (0) | 2024.09.11 |
---|---|
Deep Learning Study (6) / 24.09.10 (1) | 2024.09.10 |
Deep Learning Study (5) / 24.09.09 (1) | 2024.09.09 |
Deep Learning Study (3) / 24.09.04 (10) | 2024.09.04 |
Deep Learning Study (1) / 24.09.03 (0) | 2024.09.04 |