[Deep Learning 1] PyTorch Background
2024. 4. 4. 14:53ㆍMOOC
딥러닝알고리즘의기본적인내용이해
1. 데이터셋(x: Features, y: Labels)
2. 학습/ 검증/ 테스트데이터셋분할
3. 딥러닝알고리즘 학습진행
• 순전파연산을이용하여출력값을계산
• Labels 값과출력값간손실함수를이용하여오차계산 (Mean Squared Error, Cross Entropy, …)
• 역전파연산을이용하여딥러닝알고리즘의가중치값을업데이트
4. 학습이 완료된 딥러닝알고리즘의 성능평가
PyTorch: Tensors
GPU를 이용하기에 적절한 프레임워크:
- PyTorch는 CUDA와 같은 기술을 이용해 NVIDIA GPU에서 직접 텐서 연산을 수행할 수 있게 함으로써, CPU만 사용할 때보다 훨씬 빠른 연산 속도를 제공한다. 이는 특히 대규모 데이터셋을 사용하는 복잡한 딥러닝 모델을 학습할 때 매우 유용하다.
Numpy와의 비교:
- Numpy 는 GPU를 이용할 수 없다: Numpy는 Python의 핵심 과학 계산 라이브러리 중 하나로, 다차원 배열을 효과적으로 다룰 수 있지만, GPU를 활용하는 기능을 내장하고 있지 않다. 따라서 대규모 배열 연산에서는 PyTorch나 다른 딥러닝 프레임워크가 제공하는 GPU 가속 기능에 비해 연산 속도가 상대적으로 느리다.
- PyTorch Tensor와 Numpy array는 개념적으로 동일: PyTorch의 Tensor는 Numpy의 ndarray와 매우 유사한 인터페이스와 기능을 제공한다. 이는 사용자가 Numpy에서의 경험을 PyTorch로 쉽게 옮길 수 있게 해준다. 둘 다 다차원 배열을 다루는 데 사용되며, 대부분의 경우 코드를 쉽게 변환할 수 있다.
PyTorch Tensor는 GPU를 이용할 수 있다:
- PyTorch Tensor는 .cuda() 함수를 호출함으로써 쉽게 GPU 메모리로 옮겨질 수 있고, 이후의 모든 연산은 GPU에서 수행될 수 있다. 이는 PyTorch가 GPU의 병렬 처리 능력을 활용하여 훨씬 빠른 속도로 대규모 연산을 수행할 수 있게 해준다. GPU에서 Tensor를 CPU로 다시 옮기고 싶을 때는 .cpu() 메소드를 사용하면 된다.
PyTorch: Tensors and Autograd
Forward Pass:
- Forward Function computes output: 모델의 순전파 단계에서는 입력 데이터(Tensor)가 모델의 각 레이어와 연산을 순차적으로 거치며 최종 출력까지 계산된다. 이 과정에서 각 레이어는 입력 Tensor에 대해 정의된 연산(예: 합성곱, 활성화 함수)을 수행하고, 결과를 다음 레이어로 전달한다. 최종적으로 모델의 출력이 계산되는 것이다.
Backward Pass:
- Backward Function receives the gradient of the output: 순전파 과정을 통해 계산된 출력값과 실제 타겟값과의 차이(손실)를 계산한 후, 이 손실 함수의 기울기(gradient)를 구한다. 그런 다음, 역전파 과정에서는 이 기울기를 모델의 각 레이어를 거슬러 올라가며 전달한다. 각 레이어는 받은 기울기를 사용하여 자신의 가중치에 대한 손실 함수의 기울기를 계산하고, 이를 기반으로 가중치를 업데이트한다. 이 과정은 backward() 함수 호출을 통해 자동으로 수행된다.
PyTorch: Defining new autograd functions
- forward 함수:
- 이 함수는 연산의 순전파 단계를 정의한다. 즉, 입력 Tensor로부터 출력 Tensor를 계산한다.
- forward 함수는 입력 Tensor를 받아서, 해당 Tensor에 대한 연산을 수행한 결과를 반환한다.
- 이 메소드는 연산 중에 사용될 중간 데이터를 저장할 수 있으며, 이는 나중에 역전파 단계에서 사용될 수 있다.
- backward 함수:
- backward 함수는 연산의 역전파 단계를 정의한다. 즉, 연산에 대한 미분을 계산한다.
- 이 함수는 출력 Tensor에 대한 손실 함수의 기울기(gradient)를 입력으로 받는다.
- 그런 다음, 이 기울기를 사용하여, 연산의 입력 Tensor에 대한 기울기를 계산하고 반환한다. 이는 연쇄법칙(chain rule)에 따라 이루어진다.
- backward 함수는 forward 단계에서 저장된 데이터를 사용하여, 입력 Tensor의 기울기를 계산할 수 있다.
PyTorch: nn
1. Modules 정의
- Modules: PyTorch에서 nn.Module은 모든 신경망 레이어의 기본 클래스이며, 사용자는 이를 상속받아 자신만의 레이어나 모델을 정의할 수 있다. nn.Module은 레이어의 가중치, 업데이트 방식, 포워드 패스 등을 캡슐화한다. 간단한 레이어부터 복잡한 신경망까지, nn.Module을 통해 모듈화하여 구성할 수 있다.
2. 유용한 손실 함수들 정의
- 손실 함수(Loss Functions): 모델의 예측값과 실제값 사이의 차이를 측정하는 함수이다. PyTorch의 nn 모듈은 다양한 손실 함수를 제공하여, 다양한 종류의 문제(예: 회귀, 분류 등)에 적합한 최적화 목표를 설정할 수 있도록 한다. 주요 손실 함수들은 다음과 같다:
- nn.L1Loss: 절대 오차의 합을 계산하는 손실 함수로, 회귀 문제에 사용된다.
- nn.MSELoss: 평균 제곱 오차(Mean Squared Error)를 계산하는 손실 함수로, 회귀 문제에서 널리 사용된다.
- nn.CrossEntropyLoss: 분류 문제에서 사용되는 손실 함수로, 모델의 출력값과 실제 레이블 간의 크로스 엔트로피를 계산한다.
PyTorch: Custom NN Modules
6. nn.Module 의서브클래스화 를이용 하여 사용자 고유의 모듈 을쉽게 정의 할 수 있다.
• Defining a forward which receives input Tensors and produces output
PyTorch: Control Flow + Weight Sharing
7. 설계한 인공 신경망 알고리즘 내부의 가중치값 들을 쉽게 공유 하여 이용 할 수 있다.
• By simple reusing the same Module multiple times
• When defining the forward pass
'MOOC' 카테고리의 다른 글
| [Deep Learning 3] 3-1 최초의 인공지능 Perceptron (1) | 2024.04.07 |
|---|---|
| [Deep Learning 2] Chapter02_PyTorch_Background Coding (0) | 2024.04.07 |
| Scikit-Learn의 문서 전처리 기능 (데이터 사이언스 5) (1) | 2024.03.21 |
| 인공 신경망(Artificial Neural Networks, ANN) 딥러닝 학습1 (0) | 2024.03.14 |
| NLTK 자연어 처리 패키지 (데이터 사이언스 4) (0) | 2024.03.13 |