기본 용어
배치 (Batch)
딥러닝에서 Batch란, 학습 데이터를 일정한 개수씩 묶어서 한 번에 처리하는 방법을 말한다. 이렇게 일정한 개수의 데이터를 묶어서 처리하는 이유는, 큰 규모의 데이터를 한 번에 처리하면 메모리 부족이나 연산 속도가 느려지는 문제가 발생하기 때문이다.
Batch를 사용하면 각 Batch별로 모델 파라미터를 업데이트할 수 있기 때문에, 전체 데이터를 사용하는 것보다 더욱 효율적인 학습이 가능하다. 또한 Batch를 사용하면 확률적 경사 하강법(Stochastic Gradient Descent, SGD)과 같은 최적화 알고리즘을 사용하여 모델을 학습할 때, 학습 속도를 빠르게 할 수 있다.
Batch 크기가 작으면 학습이 불안정해질 수 있다. 일단, 학습 시, 각 Batch의 데이터들에 대한 기울기를 계산하여 모델의 파라미터를 업데이트하는데, 이때 Batch 크기가 작으면 기울기 추정에 사용되는 샘플의 수가 적어져서 추정이 불안정해질 수 있다. 또한 Batch 크기가 작으면 모델의 파라미터 업데이트가 불안정해질 수 있다. 모델의 파라미터를 업데이트할 때 각 Batch에서 계산된 기울기의 평균을 사용하는데, Batch 크기가 작으면 이 평균값이 불안정해질 수 있다. 이렇게 불안정한 기울기를 사용하여 파라미터를 업데이트하면, 모델의 수렴이 느려지거나 발산할 수 있습니다.
반면 Batch 크기가 크면 메모리를 많이 사용하고 연산 속도가 느려질 수 있다. 따라서 Batch 크기는 적절한 값으로 설정해야 한다. 이를 통해 모델의 학습 속도와 정확도를 균형있게 유지할 수 있다. 보통은 메모리 한계와 연산 속도, 그리고 학습 정확도와의 균형을 고려하여 Batch 크기를 선택한다.
기울기 (Gradient)
Gradient(기울기)는 함수의 변수들에 대한 변화율을 나타내는 벡터이다. 머신 러닝에서는 일반적으로 손실 함수(loss function)를 최소화하는 모델의 파라미터를 학습하는데, 이때 Gradient를 사용하여 파라미터를 업데이트한다. 다시 말해 손실 함수를 모델의 파라미터로 미분한 값이 기울기가 된다.
손실 함수의 기울기 방향으로 파라미터를 업데이트하여 손실 함수 값을 줄이는 방향으로 모델을 학습하는 방법을 경사 하강법(Gradient Descent)이라고 한다.
로짓값 (Logit)
출력층에 들어오는 입력값 중 하나로, 각 클래스에 대한 점수(score)나 확률값을 의미한다. 로짓 값이 높을수록 해당 클래스가 정답일 확률이 높아지며, 이를 소프트맥스 함수를 이용하여 확률값으로 변환하여 다중 클래스 분류를 수행할 수 있다.
함수
손실 함수 (Loss Function)
손실 함수(loss function)는 머신 러닝에서 모델의 성능을 측정하고 평가하기 위해 사용되는 함수다. 손실 함수는 모델의 예측값과 실제 값 사이의 차이를 계산하여, 모델이 예측을 얼마나 잘하는지를 측정한다. 손실 함수 값이 작을수록 모델의 성능이 좋다는 것을 의미한다.
- 예를 들어, 분류 문제에서는 손실 함수로 cross-entropy loss function이 자주 사용된다. 이 함수는 모델이 예측한 확률과 실제 클래스의 One-Hot Encoding 값을 비교하여, 모델이 예측한 클래스와 실제 클래스 사이의 차이를 계산한다. 이를 통해 모델이 얼마나 정확하게 분류를 수행하는지를 측정할 수 있다.
- 회귀 문제에서는 평균 제곱 오차(mean squared error)와 같은 함수가 손실 함수로 사용된다. 이 함수는 모델이 예측한 값과 실제 값 사이의 차이를 제곱하여 계산하고, 이를 모든 데이터 포인트에 대해 평균한 값으로 손실을 계산한다.
손실 함수는 모델이 학습하는 동안 사용되며, 이를 최소화하는 모델 파라미터를 찾는 것이 목표다. 따라서 적절한 손실 함수를 선택하는 것은 머신 러닝 모델을 효과적으로 학습시키는 데 매우 중요하다.
로짓 (Logit) 함수
로짓(Logit)은 로지스틱 함수의 역함수이다. 로지스틱 함수는 입력값을 0과 1사이의 값으로 변환하는데, 로짓은 이와 반대로 0과 1사이의 값으로부터 원래의 입력값을 추정하는 함수다. 로짓 함수는 다음과 같은 식으로 정의된다.
logit(p) = log(p / (1 - p))
여기서 p는 0과 1사이의 값이다. 이 함수는 p의 값에 따라 음의 무한대에서 양의 무한대까지의 범위를 가지며, p가 0.5일 때 0의 값을 가진다. 로짓 함수는 로지스틱 회귀 분석 등에서 종종 사용된다.
정규화 함수
시그모이드 함수
소프트맥스 함수 (softmax fuction)
소프트맥스 함수는 다중 클래스 분류 문제에서 모델의 출력값을 클래스별 확률로 변환해주는 함수이다. 예를 들어, 오리/개/인간의 이미지를 분류하는 문제에서 인간 이미지를 넣어 해당 이미지의 출력값이 인간에서 6, 오리에서 -2, 개에서 1이 나왔다고 해 보자. 물론 이 값들 중 가장 큰 값을 가지는 클래스를 정답이라고 해낼 수도 있겠지만 우리는 인간일 확률, 오리일 확률, 개일 확률을 각각 출력하는 것을 바란다.
그런데 시그모이드 함수를 사용한다면 각 값의 합이 1이 된다는 보장이 없다. 다시 말해, 각 클래스별 값은 확률이 아니다. (총합이 1이 아니기 때문) 그래서 소프트맥스 함수를 사용한다.
소프트맥스 함수는 입력 벡터에서 가장 큰 값을 찾아 모든 원소에서 뺀 다음, exp(지수 함수)를 취하여 정규화를 수행한다. 소프트맥스 함수는 모델이 출력하는 클래스별 확률을 계산할 수 있도록 해주며, 이를 기반으로 가장 높은 확률을 가진 클래스를 선택할 수 있다. 또한, 소프트맥스 함수는 다중 클래스 분류 문제에서 모델이 예측한 확률 분포와 실제 클래스 간의 차이를 계산하는 cross-entropy loss function과 함께 사용된다.
소프트맥스 | 시그모이드 | |
함수식 | softmax(z_i) = exp(z_i) / sum(exp(z_j)) * exp(x)는 자연상수 e의 x제곱을 의미. |
sigmoid(z) = 1 / (1 + exp(-z)) |
입력값 | 여러 개의 로짓값(클래스별 점수) | 하나의 값 |
출력값 | 모든 클래스에 대한 확률값 | 0과 1 사이의 하나의 값(이진 분류) |
출력값 범위 | 0과 1 사이의 값 | 0과 1 사이의 값 |
출력값의 총합 | 1 | 1이 아닐 수도 있음 |
다중 클래스 분류 | 가능 | 불가능 |
이진 분류 | 불가능(다중 클래스 분류로 대체 가능) | 가능 |
미분 | 가능 | 가능 |
용례 | 다중 클래스 분류(softmax regression) | 이진 분류(logistic regression), 신경망의 활성화 함수 |
방법론/알고리즘
경사하강법 (Gradient Descent)
손실 함수의 기울기 방향으로 파라미터를 업데이트하여 손실 함수 값을 줄이는 방향으로 모델을 학습하는 방법을 경사 하강법(Gradient Descent)이라고 한다.
경사 하강법에서는 기울기가 모델 파라미터의 업데이트 방향과 크기를 결정한다. 기울기의 크기가 클수록 업데이트 속도가 빨라지며, 기울기의 방향이 손실 함수를 가장 빠르게 감소시키는 방향이 된다.
딥러닝에서는 기울기를 사용하여 모델의 파라미터를 업데이트하고, 이를 반복하여 손실 함수 값을 최소화하는 방향으로 모델을 학습한다.
확률적 경사하강법 (Stochastic Gradient Descent, SGD)
SGD는 전체 데이터셋을 한 번에 사용하는 것이 아니라, 작은 크기의 Batch 단위로 나누어서 모델을 학습한다. 각 Batch에서는 손실 함수를 계산하고, 해당 Batch에 대한 기울기를 계산하여 모델 파라미터를 업데이트한다.
즉, 모델 파라미터는 각 Batch에서 계산된 기울기를 사용하여 업데이트됩니다. 이를 통해 전체 데이터셋에 대한 기울기를 계산하는 것보다 기울기의 추정이 빠르고, 더 빠른 학습이 가능해진다.
하지만 각 Batch에서 계산된 기울기는 전체 데이터셋에서 계산된 기울기와 차이가 있을 수 있기 때문에, 모델 파라미터가 전체 데이터셋에 대해 최적화되는 것보다는 좀 더 불안정할 수 있다. 이러한 불안정성은 Learning Rate와 Momentum 같은 하이퍼파라미터를 조절하여 완화할 수 있다.
참고: https://mangkyu.tistory.com/62