본문 바로가기

딥러닝 & 머신러닝/[2020-2] 머신러닝 수업

머신러닝 과제 (옵티마이저, 파이토치 기능 조사)

# 옵티마이저

 

SGD: 전체 데이터의 일부(mini batch)만 보고 loss function 값을 계산해 빠르게 loss function의 최솟값을 찾아나가는 방법.

 

AdaGrad: 많이 변화하지 않은 가중치들은 step size를 크게 하고, 많이 변화했던 가중치들은 step size를 작게 하는 방법.

 

RMSProp: 학습이 진행될수록 가중치 업데이트 강도가 약해지는 Adagrad의 단점을 보완하고자 제안된 방법. 과거의 gradient 값은 잊고 새로운 gradient 값을 크게 반영해서 가중치를 업데이트하는 방법.

 

Adam: RMSProp과 모멘텀(momentum)이라는 개념을 함께 사용함으로써, 진행 방향과 learning rate 모두를 적절하게 유지하면서 가중치를 업데이트할 수 있도록 고안된 방법.

 

Adamx: Adam의 수식에 있는 vt 라는 항에 다른 형태의 norm이 들어간 방법.

 

ASGD: Averaged Stochastic Gradient Descent. 기존 SGD에서 평균화 기법을 적용해서 SGD의 속도를 더 높이고자 고안된 방법.

 

LBFGS: Limited-memory quasi-Newton methods의 한 예시, Hessian 행렬을 계산하거나 저장하기 위한 메모리 비용이 합리적이지 않을 경우 유용하게 사용되는 최적화 방법.

 

RProp: 기존 Back Propagation과는 비슷하지만 조금 다른 최적화 방법. Back Propagation보다 속도가 빠르며, learning rate 같은 하이퍼 파라미터를 필요로 하지 않는다.

 

# 파이토치

 

Pytorch: Tensors

 

NumPy는 GPU를 사용하여 수치 연산을 가속화할 수 없기 때문에 현대의 딥러닝에 사용하기 부적절하다. 그러나 Numpy와 달리 PyTorch Tensor는 GPU를 활용하여 수치 연산을 가속화할 수 있다. PyTorch Tensor는 개념적으로 NumPy 배열과 동일하다: Tensor는 N차원 배열이며, PyTorch는 Tensor 연산을 위한 다양한 함수들을 제공한다. NumPy 배열처럼 PyTorch Tensor는 계산 그래프나 gradient를 추적할 수 있으며, 과학적 분야의 연산을 위한 포괄적인 도구이다.

 

Pytorch: Autograd and Tensors

 

작은 신경망에서 역전파 단계를 직접 구현하는 것은 그리 어려운 일이 아니나, 크고 복잡한 신경망에서는 매우 조심스러운 일일 것이다.  PyTorch의 Autograd 패키지는 ‘자동 미분’을 통해 신경망에서 역전파 단계의 계산을 자동화한다. Autograd를 사용할 때, 신경망의 순전파는 연산 그래프를 정의하게 된다. 이 그래프의 노드는 Tensor, 엣지는 입력된 Tensor에서 출력 Tensor를 만들어내는 함수가 된다. 이 계산 그래프를 통해 역전파하면 gradient를 쉽게 계산할 수 있다.

 

Pytorch: nn module

 

Tensorflow는 Keras, TensorFlow-Slim이나 TFLearn 같은 패키지들이 신경망을 구축하는데 유용하도록 계산 그래프를 더 높은 수준으로 추상화하여 제공한다. PyTorch에서는 nn패키지가 동일한 목적으로 제공된다. nn패키지는 신경망 레이어들과 거의 동일한 Module의 집합을 정의한다. Module은 입력 Tensor를 받고 출력 Tensor를 계산할 뿐만 아니라, 학습 가능한 파라미터를 갖는 Tensor 같은 내부 상태를 갖는다. 또한 nn패키지는 신경망을 학습시킬 때 주로 사용하는 유용한 손실 함수들도 갖고 있다.