LLM 시대, LangChain(랭체인)으로 배우는 AI 소프트웨어 개발
손실함수는 모델의 성능을 평가하는 지표로 값이 작을수록 모델이 정확하게 예측함을 의미합니다. 학습의 목적은 손실함수의 값을 최소화하도록 모델의 파라미터를 조정하는 것입니다. 전체모델, 즉 손실함수도 포함한 모델은 파라미터를 입력으로 받아 손실함수의 값을 출력하는 거대한 함수로 볼 수 있습니다. 이를 수식으로 표현하면 아래와 같습니다.
여기서 L은 손실함수 값이고, i는 모델에 포함된 모든 파라미터의 집합을 나타냅니다. 예를 들어, Transformer의 경우, i에는 임베딩층, 어텐션 메커니즘, FFNN의 가중치 등이 포함됩니다. 학습에서는 이 함수 f의 값을 최소화하도록 파라미터를 조정합니다.
그렇다면, 이 복잡한 비선형 함수 f의 최소값을 만드는 파라미터를 어덯게 찾을 수 있을까요? 해석적으로 최소값을 구하기는 어렵기 때문에 경사하강법(Gradient Descent)를 사용합니다.
경사하강법은 함수의 기울기를 계산하여 그 기울기를 이용하여 파라미터를 업데이트하여 함수의 최소값을 찾는 최적화알고리즘입니다. 모은 것으로 기울기가 양이면 함수값이 증가하고, 음이면 함수값이 감소함을 의미합니다. 따라서, 기울기가 음수인 ㅂ방향으로 파라미터를 업데이트하면 함수의 최소값에 가까워질 수 있습니다. 이것은 마치 산길에서 내리막 방향으로 걸어가며 바닥에 도달하는 것과 유사합니다.
먼저 경사하강법을 시각적으로 확인해 보겠습니다. 해당 함수의 정의는 다음과 같이 제공됩니다.
이 함수의 최소값은 (x, y) = (0, 0)일 때, f(0, 0) = 0이지만 위 그림에서 경사하강법을 통해 최소값을 찾는 과정을 확인할 수 있습니다.
위 그림은 함수의 등고선 플롯과 경사하강법에 의한 파라미터 업데이트 과정을 보여줍니다. 화살표는 기울기 벡터의 역방향을 나타내며 경사하강버에 의한 파라미터 업데이트 방향을 의미합니다. (x, y) = (-1, 0.8)에서 시작하여 경사하강법에 따라 파라미터가 최소값에 가까워지는 모습을 보여줍니다.
이 과정을 공식으로 나타내면 다음과 같습니다.
여기 xt와 yt는 t셋쨰 업데이트 시점의 파라미터값으로 α는 학습률로 파라미터 업데이트의 크기를 조정합니다.
는 각각 x와 y에 대한 f의 편미분을 나타냅니다.
함수 기울기는 x에 대한
이 c의 미분이 0이 된다는 점을 고려하여,
여기(x, y) = (-1, 0.8)인 경우 기울기를 확인해 보면,
학습률 α = 0.4를 적용하면 파라미터는 다음과 같이 업데이트됩니다.
위 그림의 그래프에서 시작점(-1, 0.8)에서 위와 같이 업데이트되어 (-0.84, 0.704)로 이동하는 것을 확인할 수 있습니다. 이러한 과정을 반복하면 파라미터는 점차 최소값에 수렴하게 됩니다.
학습률은 파라미터 업데이트 폭을 조정하는 하이퍼파라미터입니다. 이전 그림의 예에서는 학습률을 0.4로 설정하여 파라미터를 업데이트했습니다. 만약, 학습률을 변경하면 업데이트 속도에 어떻게 달라지는지를 확인할 수 있습니다. 아래 그림에서는 학습률을 1로 설정한 결과를 보여줍니다. 이 경우 학습률이 지나치게 커서 소실됩니다. 따라서 적절한 학습률을 설정하는 것이 효과적인 학습에 매우 중요합니다.
경사하강법을 통한 파라미터
현재 파라미터에서 손실함수의 기울기(Gradient)를 계산합니다.
기울기의 반대방향으로 파라미터를 업데이트합니다.
모든 훈련 데이터를 소진할 때까지 (1에 포크)
여러 에포크(epoch)에 걸쳐 학습을 진행하며, 손실함수가 수렴할 때까지 1
이 과정을 반복하면 손실함수 값이 점차 줄어들고 결국 최소값에 도달하게 됩니다. 에포크에 걸쳐 데이터를 반복 사용합ㅂ니다. 각 에포크마다 훈련 데이터는 무작위로 혼합된 뒤, 적용되고, 파라미터가 업데이트됩ㅂ니다. 1에 포크가 끝나면 일반적으로 에포크수가 많아질수록 모델이 훈련데이터에 더 적합합니다.
기울기(Gradient)는 파라미터에 대해 손실함수를 편미분하여 계산됩니다. 모델에 포함된 모든 파라미터를 하나의 벡터 θ라고 할 때, θ에서의 손실 L의 기울기는 다음과 같이 표현할 수 있습니다.
여기 θ1, θ2, ..., θn는 각 파라미터를 나타냅니다.
경사하강법에는 배치 경사하강법(Batch Gradient Descent), 확률적 경사하강법(SGD), 미니 배치 SGD의 3가지 방식이 있습니다. 이들은 미니배치 크기에 따라 구분됩니다.
데이터세트 전체를 사용하여 기울기를 계산하므로, 기울기 추정은 정확하지만, 대규모 데이터세트에서는 계산비용이 큽니다. SGD는 각 업데이트 단계마다 하나의 데이터 샘플만 사용하므로, 미니배치 SGD는 배치경사하강법과 SGD의 중간형태로 매 업데이트 단계에서 읿부 데이터 샘플(미니배치)만을 사용하여 기울기를 계산합니다. 실제 학습에서는 미니매치 SGD가 주로 사용되는데 이것은 GPU벙렬처리와 잘 맞아 떨어지기 떄문에 미니배치의 크기 m은 GPU의 코어수와 메모리 용량에 따라 적절한 값으로 설정됩니다.
경사하강법의 파생기법으로는 Adam(Adaptive Moment Estimation), RMSProp, AdaGrad등이 있습니다.
Adam은 각 파라미터마다 적응적인 학습률을 계산하고 기울기의 일차 모멘트 미니배치단위로 Adam을 적용하는 업데이트식은 다음과 같습니다.
이와 같이 Adam과 같은 파생기법을 사용하면, 학습률이 상황에 맞게 자동조절되어 최적화과정의 안전성을 가져줍니다.
Adam은 현재 딥러닝 분야에서 가장 많이 사용되는 최적화 기법중 하나입니다.
지시튜닝이나 RLHF에서는 이전 단계에서 학습한 파라미터를 초기값으로 사용합니다. 반면에 사전학습에서는 파라미터에 초기값을 설정해야 합니다. 초기화되는지는 학습의 효율성과 성능에 큰 영향을 미칩니다.
Xavier 초기화는 활성화 함수가 tanh 또는 sigmoid인 경우에 적합합니다. 이 방법은 가중치를 다음과 같이 초기화합니다.
이 초기화 방법에 의해 각 층의 출력분산이 일정하게 유지되어 기울기손실과 기울기 폭발을 방지합니다.
He 초기화는 활성화 함수로 ReLU 및 그 파생형(LeakyRuLU, PReLU등)을 사용하는 경우에 적합합니다. 이 방법에서는 가중치를 다음과 같이 초기화합니다.
여기서
He 초기화는 ReLU함수의 특성을 고려하여 설계되었으며, 깊은 뉴럴 네트워크의 학습을 안정화하는데 도움을 줍니다. 파생형이 사용되고 있기 때문에 He 초기화가 일반적으로 널리 사용됩니다.
BIAS항은 일반적으로 0으로 초기화됩니다. 이것은 대칭성을 유지하고 학습 초기 단계에서 모든 뉴런이 동일하게 작동하도록 하기 위한 것입니다. 다만 출력층의 BIAS항은 문제에 따라 적절한 값으로 초기화될 수 있습니다.
©2024-2025 GAEBAL AI, Hand-crafted & made with Damon Jaewoo Kim.
GAEBAL AI 개발사: https://gaebalai.com
AI 강의 및 개발, 컨설팅 문의: https://talk.naver.com/ct/w5umt5