네이버 부스트캠프에서 AI 관련된 좋은 강의가 있어 듣게 되었다.
🏷️ Introduction to Pytorch
PyTorch는 TensorFlow와 함께 가장 대표적인 딥러닝 프레임워크로 대부분의 연구에서 사용되고 있습니다. 이번 강의에서는 딥러닝 프레임워크의 종류와 PyTorch의 기본적인 작동 구조에 대해 학습합니다. 우리는 딥러닝의 모든 수식과 연산을 직접 개발하기에는 어려움이 있어 이를 손쉽게 개발할 수 있도록 제공되는 딥러닝 프레임워크를 사용합니다.
Why Pytorch?
- Define by Run
- 즉시 확인 가능 → pythonic code
- GPU support, Good API and community
- AutoGrad 지원
🏷️ Pytorch Basis
이번 강의에서는 PyTorch에서 데이터들의 연산을 위한 Tensor 사용법 및 자동 미분 기능인 AutoGrad에 대해 학습합니다. Tensor를 학습하여 추후 Custom Network를 작성할 수 있는 기본 지식을 익히고, AutoGrad의 작동 원리를 배워 backward 함수가 학습 시 어떻게 내부적으로 동작되는지 확인합니다.
Tensor
- 다차원 Arrays를 표현하는 pytorch 클래스
- numpy의 ndarray랑 같다고 생각하면 된다.
- 기본적으로 tensor가 가질 수 있는 data 타입은 numpy와 동일
- 그러나 GPU를 쓸 수 있게해주냐 마냐만 다르다.
- pytorch의 tensor는 GPU에 올려서 사용 가능
- tensor의 shape을 변환하는 rehsape말고 view를 사용하자.
- view는 기존 메모리 주소를 불러오지만, reshape은 새로운 메모리에 할당한다.
- 내적곱 dot과 mm 중에서는 mm을 쓰자.
- dot은 행렬이 아닌 벡터의 곱에 좋다.
- mm과 matmul은 broadcasting 지원의 차이가 있다.
- torch.nn.functional 모듈을 통해 다양한 수식 변화 지원
AutoGrad
Pytorch의 핵심은 자동 미분의 지원 → backward 함수 사용
🏷️ PyTorch 프로젝트 구조 이해하기
이번 강의에서는 Jupyter 노트북을 사용하는 것을 넘어서기 위해 PyTorch 학습 프로젝트 구성에 대해 학습합니다. OOP와 모듈의 개념을 통해 프로젝트를 구성하는 방법과 PyTorch에서 구성되는 모듈들을 함께 살펴봅니다. 기본적인 PyTorch 사용법과 함께 VSCode와 SSH로 연결해서 Colab을사용하는 방법등 딥러닝 학습을 위해 환경을 구축하는 방법도 다룹니다.
주로 실행, 데이터, 모델, 설정, 지표, 로깅, 유틸리티 등 다양한 모듈들을 분리하여 템플릿화 한다.
🔽 아래 링크에서 템플릿을 찾을 수 있다.
pytorch-template
victoresque • Updated Dec 9, 2025
pytorch-template/ │ ├── train.py - main script to start training # 실행 ├── test.py - evaluation of trained model # 실행 │ ├── config.json - holds configuration for training # 설정 ├── parse_config.py - class to handle config file and cli options # 설정 │ ├── new_project.py - initialize new project with template files │ ├── base/ - abstract base classes # abstract module │ ├── base_data_loader.py │ ├── base_model.py │ └── base_trainer.py │ ├── data_loader/ - anything about data loading goes here # data │ └── data_loaders.py │ ├── data/ - default directory for storing input data │ ├── model/ - models, losses, and metrics # model - architecture, loss, metric │ ├── model.py │ ├── metric.py │ └── loss.py │ ├── saved/ # 저장소 - 로그, 모델 상태 │ ├── models/ - trained models are saved here │ └── log/ - default logdir for tensorboard and logging output │ ├── trainer/ - trainers # 학습 수행 │ └── trainer.py │ ├── logger/ - module for tensorboard visualization and logging # 로깅 설정 │ ├── visualization.py │ ├── logger.py │ └── logger_config.json │ └── utils/ - small utility functions # 유틸리티 ├── util.py └── ...
📘 파라미터 | 모델이 학습을 통해 자동으로 찾는 값 (예: 가중치, 편향) |
🔧 하이퍼파라미터 | 학습 전에 사람이 직접 지정하는 값 (예: 학습률, 에폭 수 등) |
Further Question
PyTorch의 딥러닝 프로젝트에서 주요 구성 요소 외에도 고려해야 할 다른 중요한 측면이나 구성 요소는 무엇이라고 생각하시나요?
🏷️ Autograd & Optimizer
이번 강의에서는 Pytorch의 Module, Parameter와 Backward 과정 - Optimizer에 대해 학습합니다. nn.Module을 통해 기본적으로 PyTorch에 구현되어 있는 네트워크 텐서 모듈들을 살펴보고 nn.Parameter이 Module 내부에서 어떤 역할을 하는지 학습합니다. 마지막으로 Backward 함수가 작동하는 방식을 확인해 직접 구현해보는 시간을 가집니다.
torch.nn.Module

- 딥러닝을 구성하는 Layer의 base class
- Input, Output, Forward, Backward(AutoGrad가 다 해줌)정의
- 학습의 대상이 되는 parameter(tensor) 정의
다음과 같은 기본적인 과정을 꼭 거친다.
# 이게 batch 단위임. for inputs, labels in dataloader: optimizer.zero_grad() # ⬅️ 중요! outputs = model(inputs) # forward pass loss = criterion(outputs, labels) # loss 계산 loss.backward() # backward pass (gradient 계산) optimizer.step() # 가중치 업데이트
Epoch vs Batch
개념 | 의미 | 예시 |
Epoch | 전체 학습 데이터셋을 모델이 한 번 모두 학습하는 과정 | 데이터가 1,000개고 10 epoch이면 총 10번 반복 |
Batch | 학습 데이터를 일부로 나눈 묶음 (미니배치) | 한 번에 100개씩 학습시키면 한 epoch에 10 batch |
Batch Size | 한 번 학습할 때 사용할 데이터의 수 | 보통 16, 32, 64, 128 등 |
예를 들어, ‘전체 학습 데이터: 1,000개’ + ‘Batch size: 100’ + ‘1 Epoch = 100개씩 10번 반복’
- 만약 Epoch 5번이면 전체 데이터를 총 5,000개 학습하는 셈 (중복 학습)
- 1 epoch 내에 Batch마다 optimize가 이루어진다.
왜 나누어서 학습할까?
- 데이터가 너무 크면 한 번에 학습하기 어려움 (메모리 부족)
- 배치 단위로 학습하면 계산량이 작고 자주 업데이트 가능 → 학습이 빠르고 일반화에도 좋음
설정 | 장점 | 단점 |
Epoch ↑ | 학습 충분, 정확도↑ | 과적합, 시간↑ |
Epoch ↓ | 빠른 훈련, 과적합 방지 | 학습 부족 |
Batch size ↑ | 안정적, GPU 효율↑ | 일반화↓, 메모리↑ |
Batch size ↓ | 일반화↑, 더 자주 업데이트 | 느리고 불안정 |
🏷️ PyTorch Dataset & DataLoader
이번 강의에서는 Pytorch Dataset, Dataloader를 사용하는 방법을 학습합니다. 데이터 입력 형태를 정의하는 Dataset 클래스를 학습하여 Image, Video, Text 등에 따른 Custom Data를 PyTorch에 사용할 수 있도록 학습하고, DataLoader를 통해 네트워크에 Batch 단위로 데이터를 로딩하는 방법을 배웁니다. NotMNIST 데이터를 통해 직접 구현해보는 시간을 가집니다.
# 파이토치의 Dataset 클래스를 상속받아 CustomDataset 클래스를 정의합니다. class CustomDataset(Dataset): # 초기화 함수: 객체 생성 시 호출되며, 데이터와 레이블을 인자로 받아 저장합니다. def __init__(self, text, labels): # 레이블 정보를 저장합니다. self.labels = labels # 텍스트 데이터를 저장합니다. self.data = text # 데이터셋의 총 길이(데이터 개수)를 반환하는 함수입니다. def __len__(self): return len(self.labels) # 인덱스를 받아 해당 인덱스의 데이터와 레이블을 반환하는 함수입니다. def __getitem__(self, idx): # 해당 인덱스의 레이블을 가져옵니다. label = self.labels[idx] # 해당 인덱스의 텍스트 데이터를 가져옵니다. text = self.data[idx] # 텍스트와 레이블을 딕셔너리 형태로 묶어 반환합니다. sample = {"Text": text, "Class": label} return sample
# 텍스트 데이터와 해당 텍스트의 감정 레이블을 정의합니다. text = ['Happy', 'Amazing', 'Sad', 'Unhapy', 'Glum'] labels = ['Positive', 'Positive', 'Negative', 'Negative', 'Negative'] # CustomDataset 클래스를 사용하여 데이터셋 객체를 생성합니다. MyDataset = CustomDataset(text, labels)
# 배치 크기가 3인 DataLoader 객체를 생성하고 데이터를 섞어서 로드합니다. MyDataLoader = DataLoader(MyDataset, batch_size=3, shuffle=True) # DataLoader의 모든 배치 데이터를 순회하며 출력합니다. for dataset in MyDataLoader: print(dataset)
Output
{'Text': ['Amazing', 'Glum', 'Happy'], 'Class': ['Positive', 'Negative', 'Positive']}
{'Text': ['Unhapy', 'Sad'], 'Class': ['Negative', 'Negative']}DataLoader에서
sampler는 데이터를 어떤 순서로 불러올지 결정하는 역할이다.shuffle 과는 함께 사용할 수 없다.Sampler 종류 | 설명 | 사용하면 좋은 경우 |
SequentialSampler | 순차적으로 데이터 인덱스 리턴 | 평가/테스트 시 순서를 유지해야 할 때 |
RandomSampler | 무작위로 인덱스를 추출 | 학습 시, overfitting 방지를 위해 셔플 |
SubsetRandomSampler | 특정 인덱스 집합 중 무작위 추출 | validation set 또는 cross-validation split |
WeightedRandomSampler | 각 샘플마다 선택 확률을 달리함 | 클래스 불균형 문제 해결에 효과적 |
BatchSampler | 배치 단위로 샘플링 (Sampler + 배치 크기 조합) | 커스텀 배치 로직이 필요한 경우 |
🏷️ 모델 불러오기
이번 강의에서는 PyTorch 모델 저장 및 불러오는 방법과 이어 학습하기(Transfer Learning)를 학습합니다. state_dict의 의미와 모델의 파라미터를 여러 정보들과 함께 저장하고 불러오는 법을 배우고 사전에 학습되어 있는 모델을 활용하는 법을 배웁니다. 강의에서 배운 것을 통해 Loss와 Metric에 따라 모델을 저장하고, 이어학습하기, 더 나아가 public site에 있는 학습해둔 모델 활용법까지 익힙니다.
요즘에는 백본이라는 기본적으로 학습된 모델이 있고, 이것을 우리 데이터에 맞춰 파인튜닝하는 방법이 대세다.
model.save() 로 학습의 결과를 저장할 수 있다. 모델 형태와 파라미터를 저장한다.model을 불러올 때는
load_state_dict()를 사용한다.Checkpoints
- 학습의 중간 결과를 저장하여 최선의 결과를 선택한다.
- earlystooping 기법 사용시 이전 학습의 결과물을 저장한다.
- loss과 metric 값을 지속적으로 확인 저장한다.
Transfer learning
- 다른 데이터셋으로 만든 모델을 현재 데이터에 적용
- 일반적으로 대용량 데이터셋으로 만들어진 모델의 성능이 향상된다.
- 현재의 DL에서는 가장 일반적인 학습 기법이다.
TochVision은 다양한 기본 모델을 제공한다.
NLP는 HuggingFace가 사실상 표준이다.
Freezing
- pretrained model을 활용시 모델의 일부분을 frozen 시킨다.
- Frozen되면 Back-propagation 과정에서 파라미터의 weight들이 바뀌지 않는다.
requires_grad = False로 frozen을 시킬 수 있다.
Transfer Learning vs Fine-tuning에 대해서 잘 정리가 되어있다.

![[부스트캠프 AI Tech 프리코스] 인공지능 기초 다지기 (2)](https://www.notion.so/image/https%3A%2F%2Fssl.pstatic.net%2Fstatic%2Fm%2Fmooc%2Fp%2Fpartner%2Fboostcrs%2Fandroid-chrome-512x512.png?table=block&id=22d60608-ac17-8038-9a54-c4d38ab15509&cache=v2)
![[부스트캠프 AI Tech 프리코스] 인공지능 기초 다지기 (2)](https://www.notion.so/image/https%3A%2F%2Fcphinf.pstatic.net%2Fmooc%2F20250519_251%2F1747617774919TuLUs_PNG%2F%25BA%25CE%25C4%25DA_%25B0%25AD%25C0%25C7%25C4%25AB%25B5%25E5_AIT%25C7%25C1%25B8%25AE%25C4%25DA%25BD%25BA-2-1_250428.png?table=block&id=22d60608-ac17-8038-9a54-c4d38ab15509&cache=v2)



