PyTorch를 이용한 DL/ML에 필요한 3가지 과정.
- 1) 모델 정의 (문제 해결을 위한)
- 2) 손실 함수 정의(예측값과 실제 값의 차이를 최소화 하는), 옵테이마이저 정의(파라미터의 업데이트를 최적화 하는)
- 3) Train cycle (forward, backward, update)
DL/ML에서 '학습'의 목표는 loss function(손실함수)의 최소값을 찾는 것.
여기서 'loss function(손실함수)의 최소값'을 찾아가는 것을 Optimization(최적화)라 함.
이 Optimization(최적화)를 수행하는 알고리즘이 'Optimizer'
1. basic
1.1) torch
- main namespace로 tensor등의 다양한 수학 함수가 패키지에 포함되어 있습니다.
- NumPy와 같은 구조를 가지고 있어서 numpy와 상당히 비슷한 문법 구조를 가지고 있습니다.
1.2) torch.autograd
- 자동 미분을 위한 함수가 포함되어 있습니다.
- 자동 미분의 on, off를 제어하는 enable_grad 또는 no_grad나 자체 미분 가능 함수를 정의할 때 사용하는 기반 클래스인 Function등이 포함됩니다.
1.3) torch.nn
- 신경망을 구축하기 위한 다양한 데이터 구조나 레이어가 정의되어 있습니다.
- CNN, LSTM, 활성화 함수(ReLu), loss 등이 정의되어 있습니다.
1.4) torch.multiprocessing
1.5) torch.optim
- SGD 등의 파라미터 최적화 알고리즘 등이 구현되어 있습니다.
1.6) torch.utils
1.7) torch.onnx
- ONNX(Open Neural Network eXchange) 포맷으로 모델을 export 할 때 사용합니다.
- ONNX는 서로 다른 딥러닝 프레임워크 간에 모델을 공유할 때 사용하는 새로운 포맷입니다.
2. Tensors
- 데이터를 표현하기 위한 가장 기본적인 구조
- 데이터를 담기위한 컨테이너(container)로서 일반적으로 수치형 데이터를 저장
Scalar: 하나의 값을 표현할 때 1개의 수치로 표현한 것 (0차원의 텐서)
Vector: 하나의 값을 표현할 때 2개 이상의 수치로 표현한 것 (1차원의 텐서)
Matrix: 2개 이상의 벡터 값을 통합해 구성된 값(2차원의 배열) (2차원의 텐서)
Tensor: 2차원 이상의 배열 (3차원 이상의 텐서)
https://gaussian37.github.io/dl-pytorch-snippets/
https://www.youtube.com/watch?v=k60oT_8lyFw&t=5073s
https://wikidocs.net/53560
3. 용어
3.1) Epoch: One Epoch is when an ENTIRE dataset is passed forward and backward through the neural network only ONCE.
- 1 epoch은 data set 전체에 대해 1번 학습을 완료한 상태.
- epoch은 underfitting 또는 overfitting에 영향을 미침.
- epoch의 횟수가 너무 많으면 overfitting에 대한 위험이 있고, 반대로 너무 적으면 underfitting에 대한 위험이 있다.
3.2) Batch size: Total number of training examples present in a single batch.
- 한 번에 학습시키는 data의 수.
- batch_size 100 => 한 번에 100개의 data를 학습시킨다.
3.3) Iteration: The number of passes to complete one epoch.
- 1epoch data/batch_size
- data가 1,000개 batch size가 10이면 '100 iteration'
예) 100,000개의 data set을 학습한다고 가정했을 때,
batch_size = 10,000 iteration = 10 epoch = 10