nn.Sequential : 여러개의 레이어를 사용할때
**kernel_size=3, padding=1, stride=1 이면 input과 output size가 같음!
🐹전이학습
합성곱 신경망 기반의 딥러닝 모델을 훈련시키기 위해서는 많은 양의 데이터가 필요하나, 이러한 데이터셋을 얻는것은 쉽지 않다. 이런 현실적 어려움을 해결하기 위해 전이학습을 사용한다.
전이학습이란 이미지넷(ImageNet)과 같이 아주 큰 데이터셋을 써서 훈련된 모델의 가중치를 가져와 우리가 해결하려는 과제 에 맞게 보정해서 사용하는 것을 의미한다. 전이학습을 사용하면 비교적 적은 수의 데이터를 가지고도 우리가 원하는 과제를 해결할 수 있다.
- 전이학습의 두 가지 주요 접근 방식은 특징 추출(Feature Extraction)과 미세 조정(Fine-Tuning)이 있다.
데이터가 많을때는 전체 재학습, 데이터가 충분치 않을때는 finetuning함
1. 특징 추출 (Feature Extraction)
정의: 사전 학습된 모델에서 특징을 추출하고, 이 특징을 새로운 데이터셋에서 학습하는 방법. 주로 사전 학습된 모델의 사전 학습된 가중치는 고정하고, 마지막 분류기 레이어만 학습.
절차:
- 사전 학습된 모델 로드: VGG, ResNet, BERT 등의 모델을 로드.
- 특징 추출기 설정: 사전 학습된 모델의 중간 레이어까지의 가중치를 고정하고, 새로운 데이터셋에 대해 분류기를 추가.
- 새로운 데이터셋에 대해 학습: 추가된 분류기 레이어만 학습.
장점:
- 빠른 학습: 기존 모델의 특징을 그대로 사용하므로 학습이 빠르다.
- 적은 데이터: 작은 데이터셋에서도 좋은 성능을 발휘할 수 있다.
단점:
- 제한된 학습: 사전 학습된 모델의 가중치를 수정하지 않으므로, 새로운 데이터셋의 특성을 완전히 반영하지 못할 수 있다.
2. 미세 조정 (Fine-Tuning)절차:
- 사전 학습된 모델 로드: VGG, ResNet, BERT 등의 모델을 로드한다.
- 모델의 마지막 레이어 수정: 새로운 데이터셋의 레이블 수에 맞게 마지막 레이어를 변경한다.
- 모델의 일부 또는 전체 레이어 학습: 모델의 가중치를 새로운 데이터셋에 맞게 미세 조정한다.
- 정의: 사전 학습된 모델의 가중치를 새롭게 조정하여 새로운 데이터셋에 맞게 모델을 최적화하는 방법입니다. 모든 레이어 또는 일부 레이어를 학습하는 방식이다.
장점:
- 높은 성능: 모델의 가중치를 새로운 데이터셋에 맞게 조정하여 더 나은 성능을 기대할 수 있다.
- 유연성: 모델의 다양한 레이어를 조정하여 데이터셋의 특성을 반영할 수 있다.
단점:
- 더 많은 데이터: Fine-Tuning은 더 많은 데이터와 시간, 연산 자원이 필요할 수 있다.
- 오버피팅 위험: 새로운 데이터셋에 과적합(overfitting)할 수 있다.
requires_grad = False로 설정
True는 gradient를 가짐 -> weight update / false는 weight 업데이트를 하지 않음 따라서 모델의 일부를 고정하고 나머지를 학습하고자 할때는 false로 설정한다.
requires_grad가 켜져 있는애만 학습
이렇게 키면 디폴트로 켜져잇음
따라서 마지막의 완전 연결 레이어만 학습됨
🐹이미지 분류를 위한 신경망
LeNet-5
LeNet-5는 합성곱 신경망이라는 개념을 최초로 얀르쿤(Yann LeCun)이 개발한 구조 이다.
LeNet-5는 합성곱(convolutional)과 다운 샘플링(sub-sampling)(혹은 풀링)을 반복적으로 거치면서 마지막에 완전연결층에서 분류를 수행한다.
AlexNet
AlexNet은 제프리힌튼이 개발한, ImageNet 영상 데이터베이스를 기반으로 한 화상 인식 대회인 ‘ILSVRC 2012’에서 우승한 CNN 구조. 암흑기였던 신경망 구조를 떠오르게 했다. 신경망은 많은 데이터와 병렬연산구조(GPU)가 필요했다. 마지막으로 AlexNet의 알고리즘이 합쳐져 딥러닝의 시대가 도래했다.
AlexNet은 합성곱층 총 다섯 개와 완전연결층세개로구성되어있으며, 맨 마지막 완전 연결층은 카테고리1000개를 분류하기위해 소프트맥스활성화 함수를 사용하고 있다.
전체적으로보면 GPU 두개를 기반으로한 병렬 구조인 점을 제외하면 LeNet 5와 크게다르지않다. (그전까지의 모델을 직렬연산구조였다.)
- CNN은 다음그림과 같이3차원구조를 갖는다는것을 이해해야함(이미지를 다루기때문에 기본적으로 3차원 데이터를 다룸)
- 이미지 크기를 나타내는 너비(width)와 높이(height)뿐만 아니라 깊이(depth)를 갖음
- 보통색상이많은 이미지는 R/G/B 성분세개를 갖기 때문에 시작이 3이지만, 합성곱을 거치면서 특성맵이 만들어지고 이것에 따라 중간영상의 깊이가 달라짐
- 네트워크에는 학습 가능한 변수가 총6600만개 있음
- 네트워크에 대한 입력은 227×227×3 크기의 RGB 이미지이며, 각 클래스(혹은 카테고리)에 해당하는1000×1 확률 벡터를 출력
- AlexNet의 첫 번째 합성곱층 커널의 크기는11×11×3이며, 스트라이드를 4로 적용하여특성맵을 96개 생성하기 때문에55×55×96의 출력을갖음
- 첫번째 계층을 거치면서 GPU-1에서는 주로 컬러와 상관없는 정보를 추출하기 위한 커널이 학습되고, GPU-2에서는 주로 컬러와 관련된 정보를 추출하기위한 커널이학습
VGGNet
VGGNet은 카렌 시모니안(Karen Simonyan)과 앤드류 지서만(Andrew Zisserman)이 2015 ICLR에 게재한 “Very deep convolutional networks for large scale image recognition” 논문에서 처음 발표되었다.
VGGNet은 합성곱층의 파라미터 수를 줄이고 훈련 시간을 개선하려고 탄생했다. ( 즉, 네트워크를 깊게 만드는것이 성능에 어떤 영향을 미치는지 확인하고자나온 것이 VGG)
VGG 연구팀은 깊이의 영향만 최대한 확인하고자 합성곱층에서 사용하는 필터/커널의 크기를 가장 작은3×3으로 고정한다.
- 네트워크계층의 총개수에따라 여러유형의 VGGNet(VGG16, VGG19 등)이 있으며, 이 중 VGG16 네트워크의 구조적 세부사항은 다음그림과 같음
- VGG16에는 파라미터가 총1억3300만 개있음
- 여기에서 주목할점은 모든 합성곱커널의 크기는3×3, 최대 풀링 커널의크기는 2×2이며, 스트라이드는 2라는 것
- 결과적으로64개의224×224 특성 맵(224×224×64)들이 생성
- 또한, 마지막 16번째 계층을제외하고는 모두ReLU 활성화함수가 적용
GoogLeNet
GoogLeNet은 주어진 하드웨어 자원을 최대한 효율적으로 이용하면서 학습 능력은 극대화 할 수 있는 깊고 넓은 신경망이다.
깊고 넓은 신경망을 위해 GoogLeNet은 인셉션(inception) 모듈을 추가했다. 인셉션모듈에서는 특징을 효율적으로 추출하기위해 1×1, 3×3, 5×5의 합성곱 연산을 각각수행한다.
3×3최대 풀링은 입력과 출력의 높이와 너비가 같아야 하므로 풀링 연산에서는 드물게 패딩을추가해야한다.
결과적으로GoogLeNet에 적용된 해결 방법은희소연결(sparse connectivity)이다.
CNN은 합성곱, 풀링, 완전연결층들이 서로 밀집(dense)(정교하고 빽빽하게)하게 연결되어있다.
빽빽하게연결된신경망대신관련성(correlation)이 높은 노드끼리만 연결하는 방법을 희소연결이라고 한다. 이것으로 연산량이 적어지며 과적합도 해결할 수 있다.
딥러닝을 이용하여 ImageNet과 같은 대회에 참여하거나서비스를 제공하려면 대용량데이터를 학습해야함
심층신경망의 아키텍처에서 계층이넓고(뉴런이많고) 깊으면(계층이많으면) 인식률은좋아지지만, 과적합이나기울기소멸문제(vanishing gradient problem)를 비롯한 학습 시간 지연과 연산 속도등의 문제가 있음
특히 합성곱 신경망에서 이러한 문제들이 자주 나타나는데, GoogLeNet(혹은 인셉션이라고도불림)으로 이러한 문제를 해결할수있다고생각하면 된다.
결과적으로 훨씬 간단한 VGG에 밀렸다.
ResNet
ResNet은 마이크로소프트에서 개발한 알고리즘으로“Deep Residual Learning for Image Recognition”이라는 논문에서 발표되었다.
ResNet 핵심은 깊어진 신경망을 효과적으로 학습하기위한 방법으로 레지듀얼(residual) 개념을 고안한 것이다.
일반적으로 신경망깊이가 깊어질수록 딥러닝 성능은 좋아질 것 같지만, 실상은 그렇지않다. “Deep Residual Learning for Image Recognition” 논문에 따르면, 신경망은 깊이가 깊어질수록 성능이 좋아지다가 일정한 단계에 다다르면 오히려 성능이 나빠진다고한다. ResNet은 바로 이러한문제를해결하기위해 레지듀얼블록(residual block)을 도입했다. 레지듀얼블록은기울기가 잘 전파 될 수 있도록 일종의 숏컷(shortcut, skip connection)을 만들어 준다.
색상별(보라색, 노란색등)로 블록을구분했는데 이렇게묶인계층들을 하나의레지듀얼블록(residual block)이라고 함
레지듀얼블록을 여러개 쌓은것을 ResNet이라고 함
병목블록
ResNet34는 기본 블록(basic block)을 사용하며, ResNet50은 병목 블록을 사용한다.
기본블록의경우파라미터수가39.3216M인 반면, 병목블록의경우파라미터수가 6.9632M로, 깊이가 깊어졌음에도 파라미터수는 감소한다.
합성곱층을 자세히보면 ResNet34와는 다르게 ResNet50에서는 3×3 합성곱층 앞뒤로 1×1 합성곱층이 붙어있는데, 1×1 합성곱층의 채널수를 조절하면서 차원을 줄였다 늘리는것이 가능하기때문에 파라미터수를 줄일 수 있었던것이다. 이부분이병목과 같다고하여 병목 블록이라고한다.
실습코드
https://github.com/joomj2000/DeepLearning/blob/main/LeNet_catndog.ipynb
DeepLearning/LeNet_catndog.ipynb at main · joomj2000/DeepLearning
Contribute to joomj2000/DeepLearning development by creating an account on GitHub.
github.com
'SKT FLY AI > Pytorch' 카테고리의 다른 글
자연어 처리 (0) | 2024.07.23 |
---|---|
Object Detection (0) | 2024.07.22 |
Pytorch 기초 (0) | 2024.07.19 |