본문 바로가기

AI/수학

[AI] 학습과정 원리

좋다. sigmoid 빼고, 숫자만 넣어서 설명해볼게.
실제 Word2Vec은 sigmoid/softmax를 쓰지만, 원리는 아래 예제와 거의 같다.

핵심은 이것이다.

“학교”와 “선생님”의 점수가 목표보다 낮으면,
“학교” 벡터의 각 숫자를 얼마나 바꿔야 점수가 올라가는지 계산한다.


1. 64차원은 복잡하니까 2차원으로 줄여보자

실제로는 64차원이라면:

학교 = [w1, w2, w3, ..., w64]
선생님 = [t1, t2, t3, ..., t64]

인데, 설명을 위해 2차원만 쓰자.

학교   = [0.20, -0.10]
선생님 = [0.50,  0.30]

두 단어가 얼마나 가까운지는 일단 내적 점수로 계산한다고 하자.

점수 = 학교 · 선생님

계산하면:

점수 = 0.20 × 0.50 + (-0.10) × 0.30
     = 0.10 + (-0.03)
     = 0.07

현재 “학교-선생님” 점수는 0.07이다.

그런데 학습 데이터에서 “학교” 주변에 “선생님”이 자주 나왔다고 하자.
그러면 우리는 이 점수가 높아지길 원한다.

목표 점수를 임의로 이렇게 잡자.

목표 점수 = 1.00
현재 점수 = 0.07

차이는:

부족한 점수 = 1.00 - 0.07 = 0.93

즉, 현재 모델은 “학교와 선생님은 가까워야 한다”는 걸 충분히 반영하지 못하고 있다.


2. 그러면 학교 벡터의 어느 값을 바꿔야 하나?

학교 벡터는 두 숫자로 되어 있다.

학교 = [0.20, -0.10]
        ↑      ↑
       1번값   2번값

점수 계산식은 이거였다.

점수 = 학교1 × 선생님1 + 학교2 × 선생님2

값을 넣으면:

점수 = 학교1 × 0.50 + 학교2 × 0.30

즉:

점수 = 0.50 × 학교1 + 0.30 × 학교2

여기서 바로 알 수 있다.

학교1을 1만큼 올리면 점수는 0.50 올라간다.
학교2를 1만큼 올리면 점수는 0.30 올라간다.

왜냐하면 선생님 벡터가:

선생님 = [0.50, 0.30]

이기 때문이다.

즉, 학교의 각 차원을 얼마나 바꿔야 하는지는 상대 단어인 선생님의 해당 차원 값에 의해 결정된다.


3. 학습률을 정하자

한 번에 너무 많이 바꾸면 위험하니까 조금만 바꾼다.

학습률 = 0.1

그리고 부족한 점수는:

부족한 점수 = 0.93

그러면 학교 벡터를 이렇게 바꾼다.

학교 변경량 = 학습률 × 부족한 점수 × 선생님 벡터

값을 넣으면:

학교 변경량 = 0.1 × 0.93 × [0.50, 0.30]

먼저:

0.1 × 0.93 = 0.093

그러면:

학교 변경량 = 0.093 × [0.50, 0.30]

각 차원별로 계산하면:

1번 차원 변경량 = 0.093 × 0.50 = 0.0465
2번 차원 변경량 = 0.093 × 0.30 = 0.0279

따라서 학교 벡터는 이렇게 바뀐다.

기존 학교 = [0.20, -0.10]

변경량   = [0.0465, 0.0279]

새 학교 = [0.20 + 0.0465, -0.10 + 0.0279]
        = [0.2465, -0.0721]

학교 벡터가 바뀌었다.

학교: [0.20, -0.10]
  ↓
학교: [0.2465, -0.0721]

4. 정말 점수가 올라갔는지 확인해보자

변경 전 점수는:

학교   = [0.20, -0.10]
선생님 = [0.50,  0.30]

점수 = 0.20 × 0.50 + (-0.10) × 0.30
     = 0.10 - 0.03
     = 0.07

변경 후 학교 벡터는:

새 학교 = [0.2465, -0.0721]
선생님  = [0.50,    0.30]

다시 점수를 계산하면:

점수 = 0.2465 × 0.50 + (-0.0721) × 0.30

각각 계산하면:

0.2465 × 0.50 = 0.12325
-0.0721 × 0.30 = -0.02163

더하면:

새 점수 = 0.12325 - 0.02163
        = 0.10162

즉:

기존 점수 = 0.07000
새 점수   = 0.10162

올라갔다.

아직 목표 1.00에는 한참 못 미치지만, 한 번 학습했을 때 조금 가까워진 것이다.
이걸 수백만, 수억 번 반복하면 벡터 구조가 점점 잡힌다.


5. 선생님 벡터도 같이 바꾼다

방금은 학교 벡터만 바꿨다.
실제로는 선생님 벡터도 같이 바꾼다.

선생님 벡터를 바꿀 때는 반대로 학교 벡터 방향으로 움직인다.

기존 값:

학교   = [0.20, -0.10]
선생님 = [0.50,  0.30]

선생님 변경량은:

선생님 변경량 = 학습률 × 부족한 점수 × 학교 벡터

값을 넣으면:

선생님 변경량 = 0.1 × 0.93 × [0.20, -0.10]

먼저:

0.1 × 0.93 = 0.093

그러면:

선생님 변경량 = 0.093 × [0.20, -0.10]

각 차원별 계산:

1번 차원 변경량 = 0.093 × 0.20 = 0.0186
2번 차원 변경량 = 0.093 × (-0.10) = -0.0093

그래서 선생님 벡터는:

기존 선생님 = [0.50, 0.30]

변경량      = [0.0186, -0.0093]

새 선생님   = [0.50 + 0.0186, 0.30 - 0.0093]
            = [0.5186, 0.2907]

즉:

선생님: [0.50, 0.30]
   ↓
선생님: [0.5186, 0.2907]

6. 둘 다 바꾼 뒤 점수를 다시 계산해보자

새 값은:

새 학교   = [0.2465, -0.0721]
새 선생님 = [0.5186,  0.2907]

점수:

점수 = 0.2465 × 0.5186 + (-0.0721) × 0.2907

각각 계산하면:

0.2465 × 0.5186 = 0.1278349
-0.0721 × 0.2907 = -0.02095647

더하면:

새 점수 = 0.1278349 - 0.02095647
        = 0.10687843

정리하면:

처음 점수 = 0.07000
학교만 업데이트 후 = 0.10162
학교와 선생님 둘 다 업데이트 후 = 0.10688

점수가 더 올라갔다.

즉, “학교”와 “선생님”은 더 가까워졌다.


7. 그럼 64개 중 뭘 업데이트하는지 다시 보자

2차원에서는 이렇게 했다.

학교 = [0.20, -0.10]
선생님 = [0.50, 0.30]

학교의 1번 차원 변경량:

0.1 × 0.93 × 0.50 = 0.0465

학교의 2번 차원 변경량:

0.1 × 0.93 × 0.30 = 0.0279

왜 1번 차원이 더 많이 바뀌었을까?

선생님 벡터의 1번 값이 더 컸기 때문이다.

선생님 1번 값 = 0.50
선생님 2번 값 = 0.30

그래서 학교의 1번 값이 더 크게 움직였다.

즉:

상대 단어의 해당 차원 값이 크면 → 더 많이 업데이트
상대 단어의 해당 차원 값이 작으면 → 덜 업데이트
상대 단어의 해당 차원 값이 음수면 → 반대 방향으로 업데이트

8. 음수 값이 있으면 어떻게 되냐?

이번에는 선생님 벡터가 이렇게 생겼다고 해보자.

학교   = [0.20, -0.10]
선생님 = [0.50, -0.40]

현재 점수:

점수 = 0.20 × 0.50 + (-0.10) × (-0.40)
     = 0.10 + 0.04
     = 0.14

목표는 1.00이라고 하자.

부족한 점수 = 1.00 - 0.14 = 0.86
학습률 = 0.1

학교 변경량:

학교 변경량 = 0.1 × 0.86 × [0.50, -0.40]

먼저:

0.1 × 0.86 = 0.086

각 차원별 계산:

1번 차원 변경량 = 0.086 × 0.50 = 0.043
2번 차원 변경량 = 0.086 × (-0.40) = -0.0344

새 학교 벡터:

기존 학교 = [0.20, -0.10]
변경량   = [0.043, -0.0344]

새 학교 = [0.243, -0.1344]

여기서 2번 값은 더 작아졌다.

왜?

선생님의 2번 값이 음수였기 때문이다.

선생님 2번 값 = -0.40

그 방향으로 가까워지려면 학교의 2번 값도 음수 방향으로 가는 게 점수를 올리는 데 유리하다.

확인해보자.

변경 전 점수:

0.20 × 0.50 + (-0.10) × (-0.40)
= 0.10 + 0.04
= 0.14

변경 후 점수:

0.243 × 0.50 + (-0.1344) × (-0.40)
= 0.1215 + 0.05376
= 0.17526

점수가 올라갔다.

0.14 → 0.17526

즉, 어떤 차원은 커지고, 어떤 차원은 작아질 수 있다.
그 결정은 수학적으로 계산된다.


9. 이번에는 멀어져야 하는 단어를 보자

“학교”와 “선생님”은 가까워져야 한다.
하지만 “학교”와 “자동차”는 가까워지면 안 된다.

자동차 벡터를 이렇게 두자.

학교   = [0.20, -0.10]
자동차 = [0.40, -0.60]

현재 점수:

점수 = 0.20 × 0.40 + (-0.10) × (-0.60)
     = 0.08 + 0.06
     = 0.14

그런데 “학교-자동차”는 가까운 쌍이 아니라고 하자.
그러면 목표 점수를 낮게 잡는다.

목표 점수 = 0.00
현재 점수 = 0.14

현재 점수가 너무 높다.
그래서 줄여야 한다.

줄여야 할 점수 = 현재 점수 - 목표 점수
              = 0.14 - 0.00
              = 0.14

이번에는 자동차 방향으로 가까워지면 안 되니까, 학교 벡터를 자동차 반대 방향으로 움직인다.

학교 변경량 = - 학습률 × 줄여야 할 점수 × 자동차 벡터

값을 넣자.

학습률 = 0.1
줄여야 할 점수 = 0.14
자동차 = [0.40, -0.60]
학교 변경량 = - 0.1 × 0.14 × [0.40, -0.60]

먼저:

0.1 × 0.14 = 0.014

그럼:

학교 변경량 = - 0.014 × [0.40, -0.60]

각 차원별 계산:

0.014 × 0.40 = 0.0056
0.014 × (-0.60) = -0.0084

앞에 마이너스가 있으니까:

학교 변경량 = [-0.0056, +0.0084]

새 학교 벡터:

기존 학교 = [0.20, -0.10]
변경량   = [-0.0056, +0.0084]

새 학교 = [0.1944, -0.0916]

점수가 정말 줄었는지 보자.

변경 전:

학교   = [0.20, -0.10]
자동차 = [0.40, -0.60]

점수 = 0.20 × 0.40 + (-0.10) × (-0.60)
     = 0.08 + 0.06
     = 0.14

변경 후:

새 학교 = [0.1944, -0.0916]
자동차  = [0.40, -0.60]

점수 = 0.1944 × 0.40 + (-0.0916) × (-0.60)

각각 계산:

0.1944 × 0.40 = 0.07776
-0.0916 × -0.60 = 0.05496

더하면:

새 점수 = 0.07776 + 0.05496
        = 0.13272

점수가 줄었다.

0.14000 → 0.13272

즉, “학교”는 “자동차”에서 조금 멀어졌다.


10. 한 번의 학습에서 실제로는 이런 일이 동시에 일어난다

학습 데이터에서 이런 쌍이 나왔다고 하자.

긍정 쌍: 학교 - 선생님
부정 쌍: 학교 - 자동차

그러면 모델은 동시에 이런 방향으로 움직인다.

학교는 선생님 쪽으로 이동
학교는 자동차 반대쪽으로 이동

숫자로 보면:

1단계: 학교-선생님 가까워지기

학교   = [0.20, -0.10]
선생님 = [0.50, 0.30]

점수 = 0.07
목표 = 1.00
부족 = 0.93
학습률 = 0.1

학교 변경량 = 0.1 × 0.93 × [0.50, 0.30]
            = [0.0465, 0.0279]

학교는:

[0.20, -0.10] + [0.0465, 0.0279]
= [0.2465, -0.0721]

2단계: 학교-자동차 멀어지기

자동차가:

자동차 = [0.40, -0.60]

라고 하자.

현재 학교는 1단계 이후:

학교 = [0.2465, -0.0721]

학교-자동차 점수:

점수 = 0.2465 × 0.40 + (-0.0721) × (-0.60)
     = 0.0986 + 0.04326
     = 0.14186

목표는 0이라고 하자.

목표 = 0.00
현재 = 0.14186
줄여야 할 점수 = 0.14186

학교 변경량:

학교 변경량 = -0.1 × 0.14186 × [0.40, -0.60]

먼저:

0.1 × 0.14186 = 0.014186

각 차원 계산:

0.014186 × 0.40 = 0.0056744
0.014186 × (-0.60) = -0.0085116

반대 방향으로 가야 하니까:

학교 변경량 = [-0.0056744, +0.0085116]

최종 학교 벡터:

1단계 후 학교 = [0.2465, -0.0721]
2단계 변경량  = [-0.0056744, +0.0085116]

최종 학교 = [0.2408256, -0.0635884]

처음 학교는:

처음 학교 = [0.20, -0.10]

최종 학교는:

최종 학교 = [0.2408256, -0.0635884]

이 한 번의 학습으로 학교 벡터가 이렇게 움직인 것이다.

학교는 선생님 쪽으로 당겨지고,
자동차 쪽에서는 밀려났다.

11. 이걸 64차원으로 바꾸면?

2차원에서는 이렇게 했다.

학교 = [0.20, -0.10]
선생님 = [0.50, 0.30]

64차원이면 그냥 숫자가 64개다.

학교 = [
  w1, w2, w3, w4, ..., w64
]

선생님 = [
  t1, t2, t3, t4, ..., t64
]

점수는:

점수 =
w1×t1 +
w2×t2 +
w3×t3 +
...
w64×t64

목표 점수와 현재 점수의 차이를 구한다.

부족한 점수 = 목표 점수 - 현재 점수

그리고 학교의 각 차원을 이렇게 업데이트한다.

w1 변경량 = 학습률 × 부족한 점수 × t1
w2 변경량 = 학습률 × 부족한 점수 × t2
w3 변경량 = 학습률 × 부족한 점수 × t3
...
w64 변경량 = 학습률 × 부족한 점수 × t64

즉, 64개 중 하나를 고르는 게 아니다.

64개 전부를 계산한다.
다만 각 차원의 변경량이 다르다.

어떤 차원은 많이 바뀌고, 어떤 차원은 조금 바뀌고, 어떤 차원은 반대 방향으로 바뀐다.


12. “뭘 업데이트해야 가까워지는지”를 어떻게 아는가?

아주 직관적으로 말하면 이렇다.

점수 계산식이:

점수 = 학교1×선생님1 + 학교2×선생님2

라고 하자.

선생님1이 0.50이면, 학교1을 올릴 때 점수가 꽤 올라간다.

학교1을 0.01 올리면
점수는 0.01 × 0.50 = 0.005 올라감

선생님2가 0.30이면, 학교2를 올릴 때 점수가 조금 덜 올라간다.

학교2를 0.01 올리면
점수는 0.01 × 0.30 = 0.003 올라감

선생님2가 -0.40이면, 학교2를 올리면 오히려 점수가 내려간다.

학교2를 0.01 올리면
점수는 0.01 × (-0.40) = -0.004 내려감

그러면 모델은 알 수 있다.

이 차원은 올려야 점수가 올라가는구나.
이 차원은 내려야 점수가 올라가는구나.
이 차원은 많이 움직여야 하는구나.
이 차원은 조금만 움직여야 하는구나.

이걸 모든 차원에 대해 계산하는 것이 미분이고, 경사하강법이다.


13. 더 쉽게 비유하면

학교 벡터가 이런 조절 버튼 64개라고 생각하면 된다.

학교 = [버튼1, 버튼2, 버튼3, ..., 버튼64]

선생님 벡터는 각 버튼의 영향력이다.

선생님 = [0.50, 0.30, -0.20, ..., 0.05]

그러면:

버튼1을 올리면 점수가 0.50만큼 잘 올라감
버튼2를 올리면 점수가 0.30만큼 올라감
버튼3을 올리면 점수가 -0.20만큼 내려감

그래서 모델은 이렇게 한다.

점수를 올리고 싶다?
→ 영향력이 양수인 차원은 올린다.
→ 영향력이 음수인 차원은 내린다.

점수를 내리고 싶다?
→ 영향력이 양수인 차원은 내린다.
→ 영향력이 음수인 차원은 올린다.

14. 핵심 정리

너의 질문:

“64개의 가중치 중 뭘 업데이트해야 가까워지는지 수학적으로 어떻게 계산하냐?”

답:

현재 점수와 목표 점수의 차이를 구하고,
그 차이에 상대 단어 벡터의 각 차원 값을 곱해서
각 차원의 변경량을 계산한다.

숫자로는 이런 식이다.

학교 = [0.20, -0.10]
선생님 = [0.50, 0.30]

현재 점수 = 0.07
목표 점수 = 1.00
부족한 점수 = 0.93
학습률 = 0.1

학교 변경량 =
0.1 × 0.93 × [0.50, 0.30]
= [0.0465, 0.0279]

새 학교 =
[0.20, -0.10] + [0.0465, 0.0279]
= [0.2465, -0.0721]

이게 핵심이다.

각 차원을 얼마나 바꿀지는 “예측이 얼마나 틀렸는지”와 “상대 단어의 해당 차원 값”으로 자동 계산된다.

반응형

'AI > 수학' 카테고리의 다른 글

[AI]행렬곱의 근원  (0) 2026.06.28
[AI] 수학  (0) 2025.11.30