매개변수 (parameter)

“매개변수”란 머신 러닝 모델의 내부적인 상태값을 나타내는 말입니다. 모델의 학습 과정에서 최적의 매개변수 값을 찾아내는 것이 모델 학습의 목표 중 하나입니다.

매개변수는 일상생활에서 남녀 관계에서 자주 사용되는 ‘조건’에 비유할 수 있습니다.

예를 들어, 데이트를 하러 갈 때 여자친구가 “나한테 좋은 말 좀 해줘”라고 요구한다면, 이때의 ‘좋은 말’은 매개변수 역할을 합니다. 여자친구는 조건으로 ‘좋은 말’을 지정하고, 이에 따라 남자친구는 이를 만족시키기 위해 노력합니다. 이때, 남자친구가 여러 가지 방법으로 ‘좋은 말’을 전달하면서 여자친구의 반응을 관찰하며 조금씩 조정하고 개선해 나가는 것은 머신러닝에서 말하는 ‘학습’ 과정과 유사합니다.

머신러닝에서도 모델에 입력되는 다양한 변수들 중에서 중요한 역할을 하는 변수들이 있습니다. 이러한 변수들을 매개변수라고 부르며, 모델이 데이터를 학습하면서 이 매개변수들의 값을 조정하면서 예측 결과를 개선해 나가게 됩니다.

머신 러닝 모델은 입력 데이터에 대해 예측값을 출력하는데, 이때 모델은 일련의 연산 과정을 통해 입력을 처리하고 출력을 생성합니다. 이때 모델의 매개변수는 이러한 연산 과정에서 사용되는 가중치(weight)와 편향(bias) 등의 값들을 의미합니다. 모델 학습 과정에서는 이러한 매개변수 값을 최적화하여 입력에 대한 정확한 예측을 할 수 있도록 합니다.

“ChatGPT-3″의 경우, 1750억개의 매개변수를 가지는데, 이는 모델이 처리할 수 있는 언어의 다양성과 정확도를 높이기 위해 매우 많은 수의 매개변수를 사용하는 것입니다. 이렇게 많은 매개변수를 가지는 모델은 매우 복잡한 함수를 근사(approximate)할 수 있으므로, 자연어 처리 분야에서 높은 성능을 보이고 있습니다.

매개변수의 개수가 1750억개라는 것은, ChatGPT-3 모델 내부에 사용되는 가중치(weight)와 편향(bias) 값 등을 모두 합쳐서 1750억개가 있다는 것입니다. 즉, 이 매개변수들이 모델 내부에서 각각 어떻게 설정되느냐에 따라 모델이 입력된 데이터를 처리하고 출력하는 방식이 결정됩니다.

따라서, 이 매개변수들을 조정하는 것은 모델의 학습 과정에서 이루어지며, 이를 위해서는 대량의 데이터와 연산능력이 필요합니다. 그러므로, 모델을 학습시키기 위해서는 대규모 컴퓨팅 자원과 많은 시간이 필요합니다.

매개변수  10개의 경우

예를 들어, 매개변수를 다음과 같이 정의해보겠습니다.

  1. 외모 – 0은 싫어하고 1은 좋아합니다.
  2. 부모님 – 0은 싫어하고 1은 좋아합니다.
  3. 자신감 – 0은 낮고, 1은 높습니다.
  4. 돈 – 0은 많이 없으면 싫어하고, 1은 많으면 좋아합니다.
  5. 관심사 – 0은 맞지 않으면 싫어하고, 1은 맞으면 좋아합니다.
  6. 유머감각 – 0은 없으면 싫어하고, 1은 있으면 좋아합니다.
  7. 자신감 – 0은 없으면 싫어하고, 1은 있으면 좋아합니다.
  8. 성격 – 0은 싫어하고, 1은 좋아합니다.
  9. 연봉 – 0은 적으면 싫어하고, 1은 많으면 좋아합니다.
  10. 교육 – 0은 낮으면 싫어하고, 1은 높으면 좋아합니다.

위의 매개변수를 사용하여, 다음과 같은 코드를 작성할 수 있습니다.

실행하기

import random
# 매개변수 초기화
params = [random.randint(0, 1) for _ in range(10)]

# 여자가 "사랑해" 라고 출력하는 함수
def say_love(params):
score = 0
score += 2 * params[0] - 1
score += 2 * params[1] - 1
score += 2 * params[2] - 1
score += 2 * params[3] - 1
score += 2 * params[4] - 1
score += 2 * params[5] - 1
score += 2 * params[6] - 1
score += 2 * params[7] - 1
score += 2 * params[8] - 1
score += 2 * params[9] - 1
if score > 0:
return "사랑해"
else:
return "싫어해"

print(say_love(params))

위 코드는 10개의 매개변수를 초기화한 후, say_love 함수를 사용하여 남자의 조건을 입력하면 여자가 “사랑해” 또는 “싫어해”를 출력합니다. 각 매개변수는 0 또는 1의 값을 가지며, 남자의 조건을 평가하는데 사용됩니다. 함수 내부에서는 매개변수의 값들을 합산하여 score 값을 계산하고, score 값이 양수인 경우 “사랑해”, 음수인 경우 “싫어해”를 출력합니다.

위의 예시 프로그램에서 가중치(weight)는 남자가 여자에게 제시하는 조건들로, 편향(bias)은 조건들이 여자에게 얼마나 긍정적인 영향을 끼치는지를 조절하는 값입니다. 가중치와 편향은 모델의 학습을 통해 최적화되며, 최적화된 가중치와 편향이 사용됩니다. 즉, 이 프로그램에서는 가중치와 편향을 사람이 수동으로 조절하는 것이 아니라, 머신 러닝 알고리즘이 학습을 통해 최적의 값을 찾아내는 것입니다.

위의 프로그램에서 예를 들어 score += 2 * params[5] – 1 을 통해 가중치와 편향을 보겠습니다.params[5]는 가중치(weight)에 해당합니다. 가중치는 모델이 학습을 통해 자동으로 조정하는 값으로, 입력 데이터와 곱해져서 중요한 특성을 강조하거나 약화시키는 역할을 합니다.

2는 가중치에 곱해지는 계수(coefficient)로, 이 값이 높을수록 해당 가중치가 결과값에 미치는 영향이 더 커집니다.

-1은 편향(bias)에 해당합니다. 편향은 모델이 학습을 통해 자동으로 조정하는 값으로, 입력 데이터에 더해져서 결과값에 일정한 영향을 끼치는 역할을 합니다. 이 예시에서는 -1을 더해주므로, 편향이 음의 영향을 끼치게 됩니다.