[ML BASIC REVIEW 1]

Updated:

ML_BASIC_REVIEW 1

Grdient Descent

  1. 직관적인 이해
    • 길을 모르더라도 산 정상으로 가는 방법은 간단
    • 현재 위치에서 가장 경사가 가파른 방향으로 산을 오르다 보면 언젠가는 산 정상에 다다른다.
    • 반대로 깊은 골짜기를 찾고 싶은 경우에는 가장 가파른 내리막 방향으로 산을 내려가다 보면 언제가는 산 골짜기에 다다른다.
    • 즉, 이와 같이 특정 함수의 극대점을 찾기 위해 현재 위치에서 gradient 방향으로 이동해가는 방법을 gradient ascent 방법, 극소점을 찾기 위해 gradient 반대 방향으로 이동해가는 방법을 gradient descent 방법이라 부른다.
  2. Gradient란
    • 어떤 다변수 함수 f(x1,x2,…,xn)이 있을 때, 함수 f의 gradient는 아래와 같이 정의된다.
      gradient
    • 즉, gradient는 각 변수로의 일차 편미분 값으로 구성되는 벡터를 의미한다.
    • 이 gradient 벡터는 함수 f의 값이 가장 가파르게 증가하는 방향을 나타낸다. (벡터의 크기는 그 증가의 가파른 정도, 기울기를 나타냄)
    • 반대로, gradient 벡터에 음수를 취하게 되면 이는 함수 f값이 가장 가파르게 감소하는 방향을 나타낸다.
    • 이러한 gradient 특성은 함수의 극점을 찾는 용도로 활용될 수 있다.
  3. Gradient descent 방법
    • 최적화 알고리즘 중 하나로서 gradient의 특성을 활용하여 특정 cost function의 값을 최소화시키기 위한 parameter값을 점진적으로 찾아내는 방법
      gradient_descent
    • 즉, 어떤 초기값 벡터 x0부터 시작하여 위 식에 따라 gradient 반대 방향으로 x를 조금씩 이동시키면 함수 f(x)가 극소가 되는 x를 찾을 수 있다
    • 이 때, lambda는 알고리즘의 수렴속도를 조절하는 paramter로 주로 learning rate이라 일컫어진다.
  4. Gradient descent 방법의 문제점
    • learning rate이 너무 작으면 학습시간이 오래걸리고 local minimum에 빠질 수 있다.
    • learning rate이 너무 크면 알고리즘이 수렴하지 못하고 발산할 수 있다.
    • 정답에 가까워질수록 gradient 벡터의 크기가 0에 수렴하기 때문에 수렴속도가 매우 느려진다. 이 경우 learning rate을 크게 해서 수렴속도를 조절하려고 하면 오히려 알고리즘이 발산할 수 있다. (따라서 실제로 사용할때는 구간별로 다른 learning rate를 적용해가면서 수렴속도를 조절한다.)

Batch Gradient Descent (BGD)

  1. 배경지식
    • 딥러닝에서 Batch란 일괄적으로 처리되는 집단, 즉 한번에 처리되는 데이터의 집합을 의마한다. (iteration 1회당 사용되는 train dataset의 집합)
    • 여기서 iteration은 정해진 batch size를 사용하여 학습(forward-backward)를 반복하는 횟수를 의미한다.
    • Batch size별로 여러 iteration을 거쳐 전체 train set이 모두 1번 학습된 경우를 1 epoch이라고 한다.
  2. Batch Gradient Descent란
    • Batch를 전체 Train set으로 사용하는 경우 Batch Gradient Descent라고 한다.
    • 전체 Train set에 대한 error를 계산한 후에 gradient를 한번만 계산하여 모델의 parameter를 update시킨다. 아래 식에서 볼 수 있듯이 L(theta)에 대한 gradient의 반대 방향으로 learning rate만큼 paramter를 업데이트 하는 과정을 여러 iteration을 반복하며 최적의 paramter를 찾아낸다.
      loss
    • 여기서 혼동되면 안되는 부분이 gradient descent 알고리즘 자체는 loss function을 입력 데이터 x가 아닌 weight paramter w에 대해서 편미분하는 것이므로, 입력 데이터 x의 개수와는 상관이 없다.
  3. BGD의 장점
    • 전체 데이터에 대해 weight update가 한번에 이루어지기 때문에 SGD보다 update 횟수가 적다.
    • 전체 데이터에 대해 error값을 기반으로 gradient를 계산하기 때문에 optimal minimum 값으로의 수렴이 안정적으로 진행된다.
    • GPU 병렬 처리에 유리하다
  4. BGD의 단점
    • 1 step에 모든 train dataset을 사용하므로 학습이 오래 걸리며 매 iteration마다 전체 데이터에 대한 loss function을 계산해야 하므로 엄청난 계산량이 필요하다.
    • 전체 학습 데이터에 대한 error를 모델의 update가 이루어지기 전까지 기억해야 하므로 더 많은 메모리가 필요하다.
    • local optimal 상태가 되면 빠져나오기 힘들다.

Stochastic Gradient Descent (SGD)

  1. Stochastic Gradient Descent란
    • Mini-batch 사이즈가 1인 경우를 Stochastic Gradient Descent라고 한다.
    • Stochastic(확률적)이라는 용어는 각 배치를 포함하는 하나의 예가 무작위로 선택된다는 것을 의미한다.
    • SGD는 입력 데이터 1개만을 사용하기 때문에 1개의 데이터를 ‘벡터’로 표현하여 특정 레이어 층에 입력하는 것으로 이해할 수 있다.
  2. SGD의 장점
    • local minimum에 빠질 리스크가 적다
    • 1 step에 걸리는 시간이 짧기 때문에 수렴속도가 상대적으로 빠르다
  3. SGD의 단점
    • global minimum를 찾지 못 할 가능성이 있다.
    • 데이터를 1개씩 처리하기 때문에 GPU의 성능을 전부 활용할 수 없다.

Mini-Batch Gradient Descent

  1. Mini-Batch Gradient Descent란
    • 딥러닝 모델의 학습은 대부분 mini-batch stochastic gradient descent를 기반으로 이루어지는데, 이 때 batch size는 실제 모델 학습시 매우 중요한 parameter이다.
    • 전체 데이터 셋을 여러개의 mini-batch로 나누어, 한 개의 mini-batch마다 기울기를 구하고(Mini-batch 안의 데이터 m 개에 대해서 각 데이터에 대한 기울기를 m 개 구한 뒤, 그것의 평균 기울기 사용) 모델을 업데이트 하는 방법
    • 예를 들어 전체 데이터의 개수가 1000개인데 batch size를 10으로 하면 100개의 mini-batch가 생성되는 것으로, 이 경우 100 iteration 동안 모델이 업데이트 되어 1 epoch이 끝나게 된다.
  2. Mini-Batch Gradient Descent의 장점
    • Batch Gradient Descent보다 local minimum에 빠질 리스크가 적다
    • SGD보다 병렬처리에 유리하다
    • 전체 학습데이터가 아닌 일부분의 학습데이터만 사용하여 1 iteration을 반복하기 때문에 메모리 사용량이 Batch Gradient Descent보다 적다.
  3. Mini-Batch Gradient Descent의 단점
    • batch size를 설정해야 한다.
    • error에 대한 정보를 mini-batch 크기만큼 기억해서 계산해야 하므로 SGD보다는 메모리 사용량이 많다.

Momentum

  • Momentum은 Gradient descent 기반의 optimization algorithm이고 이를 수식으로 표현하면 아래와 같다.
    momentum
  • v의 영향으로 인해 가중치가 감소하던(혹은 증가하던) 방향으로 더 많이 변화하게 되는 방법이다.
  • 아래 예시를 보면 자세히 이해할 수 있다.
    equ graph

AdaGrad

  • learning rate가 너무 작으면 학습 시간이 너무 길어지고, 반대로 learning rate가 너무 크면 loss값이 발산하면서 학습이 제대로 이루어지지 않는다.
  • 위와 같은 문제를 AdaGrad 알고리즘은 learning rate decay를 통해 해결한다.
    adagrad
  • 위의 수식을 보면 h에 이전 기울기의 제곱들이 누적해서 더해지게 되는데 이는 parameter를 update할 때 learning rate를 조정하게 된다. (많이 움직인 element의 학습률이 낮아지는 효과를 준다)
  • AdaGrad 알고리즘은 오래 학습을 하다보면 어느 순간 h값이 너무 커져서 학습이 진행이 안될수가 있는데, 이 문제는 아래 나오는 RMSProp 알고리즘을 통해 개선될 수 있다.

RMSprop

  • 앞서 언급한 AdaGrad의 문제점을 개선하고자 RMSProp 알고리즘은 기울기를 단순 누적하지 않고 Exponentially weighted moving average를 사용하여 최신 기울기들이 더 크게 반영되도록 개선한 알고리즘이다.
    rms
  • 위의 수식을 보면 이전 AdaGrad의 h에 새로운 hyper paramter p(로우)를 추가하여 p(로우)가 작을수록 가장 최신의 기울기를 더 크게 반영하게 된다.

Adam

  • Adam 알고리즘은 쉽게 말해 Momentum + RMSProp이라고 볼 수 있다. (말이 쉽지…. 내부를 뜯어보면 복잡하다….!) adam

optimizer

Loss Surface

  1. 배경 지식
    • Loss Surface를 알기 위해서 공부해야 되는 개념은 Loss function이다. (Cost function이라고도 일컫어진다.)
    • Loss function은 모델이 내놓은 예측값과 실제 정답이 얼마나 다른지를 나타내는 지표로서 정의된다. (모델 학습의 목표는 loss값을 최소화하는 W,B를 찾는 것이다)
    • Loss function은 대표적으로 MSE(Mean Squared Error)와 CEE(Cross Entropy Error)가 자주 사용되며, 그 외 다양한 loss function이 존재한다. loss
  2. Loss Surface란
    • 딥러닝에서 모델은 Loss function의 내놓은 값(Loss)을 줄이는 방향으로 학습이 진행된다.
    • 이 과정에서 parameter가 변함에 따라서 loss값이 변하게 되는데, parameter 개수가 2개이하가 아닌이상 사람이 알아볼 수 있는 형태로 loss 그래프를 그리기가 어렵다.
    • 아래 예시는 parameter가 2개일때 loss값(z축)이 어떻게 변하는지를 나타낸 그림이고 loss값들로 이루어진 surface를 loss surface라고 한다. loss_surface

Sigmoid Function

  1. 배경지식
    • 딥러닝 네트워크에서는 노드에 들어오는 값들에 대해 곧바로 다음 레이어로 전달하지 않고 주로 비선형 함수를 통과시킨 후 전달하는데, 이 때 사용하는 함수를 activation function이라 한다.
    • 비선형 함수를 사용하는 이유는 선형함수를 사용할 경우 층을 깊게 하는 의미가 줄어들기 때문이다 (선형함수 여러번 통과시켜도 결국 선형함수 형태!)
  2. Sigmoid 함수란
    • activation function으로서 사용되는 함수로서 Logisitc function이라 불리기도 한다.
      sigmoid sig_graph
    • Sigmoid 함수는 함수값이 (0,1)로 제한되며 x가 매운 큰 값을 가지면 함수값은 1에 수렴하고, x가 매우 작은 값을 가지면 함수값은 0에 수렴한다. (x가 0일때는 함수값이 1/2이다)
  3. Sigmoid 함수의 단점
    • 딥러닝 초기 시절에는 sigmoid가 많이 사용되었던 반면, 최근에는 여러 단점들 때문에 잘 사용하지 않는다.
    • 가장 큰 문제점으로서 gradient vanishing 현상이 발생하는데 sigmoid를 미분한 그래프를 보면 x=0 에서 최대값 1/4를 가지고 x값이 일정부분을 넘어가면 함수값이 0에 수렴하게 된다.
    • 이는 이후 gradient backpropagation시 이전의 gradient값과 local gradient를 곱해서 error를 전파하는 backpropagation의 특성에 의해 뉴런에 흐르는 gradient값이 사라질 가능성이 크다
    • 함수값 중심이 0이 아니기 때문에 학습이 느려질 수 있다.
    • Sigmoid 함수의 출력값은 (0,1) 사이의 양수로 정해지고 이는 다음 레이어의 입력값이 된다. 즉, 다음 레이어의 입력값이 모두 양수가 되는데 이때 발생하는 문제는 아래와 같다.
      equ
    • 즉, parameter의 gradient값은 입력값에 의해 영향을 받게 되며, 입력값이 모두 양수인 경우 모든 parameter의 부호가 같게 된다.
    • 이렇게 되면 gradient descent를 진행할 대 정확한 방향으로 가지 못하고 지그재그로 수렴하는 문제가 발생하여 학습이 느려지게 된다.

Softmax Function

  1. Softmax 함수란
    • Softmax 함수는 activation function 중 하나로서, 주로 classification 문제를 해결할 때 마지막 레이어의 activation function으로 사용된다. (이로 인해 마지막 레이어의 개수는 클래스의 개수와 동일하게 되고, softmax 함수를 거쳐 나온 출력값 역시 클래스 개수만큼의 차원을 가지게 된다)
    • Softmax 함수는 모든 입력값들을 0과 1 사이로 정규화해주는 역할을 하는데 이를 통해 나온 출력값들의 합은 항상 1이 되어 출력값들을 각각의 클래스에 대한 확률값으로 해석할 수 있다.
    • class 개수가 3인 classification 문제를 푼다고 가정했을 때, softmax함수가 입력으로 받는 값은 3차원 벡터([z1,z2,z3])이며 출력값은 아래와 같다.
      softmax
  2. Softmax vs. Hardmax
    • Softmax와 같이 등장하는 개념으로 Hardmax라는 용어가 있는데, 이는 말 그대로 가장 큰 값만을 1로 나머지 값들을 모두 0으로 출력하는 함수이다.
  3. 그림을 통한 Softmax 함수의 이해
    그림1 그림2 그림3

Train set, Validation set, Test set

  1. 데이터셋에 대한 이해
    • 딥러닝에서 모델을 학습하고 평가하기 위해서는 dataset이 필요하다.
    • 이 때 사용하는 dataset을 특성에 맞게 Train set, Validation set, Test set 3가지로 분류한다.
  2. Train set
    • 모델을 학습하기 위한 dataset이다.
    • 어느 상황에서든 꼭 명심해야 하는 사실은 “모델을 학습하는데에는 오직 Train set만 이용한다” 이다.
    • Train set을 이용해서 모델 구조에 변화를 주거나 epoch 등 다양한 hyperparameter를 바꿔가면서 다양한 실험을 진행한다.
  3. Validation set
    • 학습이 완료된 모델을 검증하기 위한 dataset이다.
    • 헷갈리면 안되는 사실 중 하나가 validation set은 직접적으로 학습을 시키지는 않지만 ‘학습’에 관여는 한다.
    • Train set처럼 data 자체를 학습시키지는 않지만 hyperparamter튜닝(어떤 parameter로 모델을 설계했을 때 가장 좋은 성능을 보이는지 테스트)과정에서 validation set이 사용된다.
    • 딥러닝 모델의 목표는 결국 unseen data에 대해서 좋은 성능을 보이는 것이기에 validation set(unseen data)를 기반으로 가장 좋은 performance를 보이는 hyperparamter를 채택해 모델을 최종 설계한다.
    • 즉, validation set이 중요한 이유는 train data에 overfitting되는 현상을 막아줌과 동시에 unseen data에 대해 좋은 성능을 보이는 모델을 설계하기 위함이다.
  4. Test set
    • 학습과 검증이 완료된 모델의 성능을 평가하기 위한 dataset이다.
    • 학습에 사용되지도 않고, validation set과는 다르게 학습에 관여하지도 않는다.
    • 순전히 unseen data로서 모델의 최종 성능을 평가하기 위해 사용된다.

Categories:

Updated:

Leave a comment