kimyongtae.com
홈 / 강의 / AI 이미지·애니메이션 생성, 원리부터 / 0단계. 최소 기초

0-3. 신경망과 역전파

신경망은 "숫자를 넣으면 숫자가 나오는 함수"다. 그 함수 안에 조절 손잡이가 아주 많이 달려 있고, 학습은 그 손잡이를 조금씩 돌리는 일이다. 이번 수업은 이 두 문장을 풀어 쓴 것이다.

신경망은 함수다

0-1에서 "점을 데이터 분포 쪽으로 옮기는 방법을 신경망에게 가르친다"고 했다. 그 신경망이 하는 일은 이것이다.

숫자 묶음이 들어가서 숫자 묶음이 나온다. 함수다. 다만 식을 사람이 정하지 않는다. 식의 틀만 정해 놓고, 안에 든 숫자는 데이터를 보면서 맞춘다.

뉴런 하나

가장 작은 부품은 이렇게 생겼다.

출력 = 활성화( w₁·x₁ + w₂·x₂ + … + b )

w와 b가 조절 손잡이다. 이것을 파라미터라고 부른다. "모델이 120억 파라미터"라는 말은 손잡이가 120억 개라는 뜻이다. 모델 파일의 용량은 거의 전부 이 숫자들이다.

활성화가 없으면 안 되는 이유

곱하고 더하기만 하면 직선밖에 못 만든다. 층을 100개 쌓아도 합치면 여전히 곱하기 한 번, 더하기 한 번이다.

중간에 한 번씩 구부려 줘야 복잡한 모양을 만들 수 있다. 가장 단순한 활성화는 ReLU다. 음수는 0으로 만들고 양수는 그대로 둔다. 요즘 이미지 모델은 이것을 부드럽게 다듬은 SiLU나 GELU를 쓴다.

층을 쌓는다

뉴런을 옆으로 여러 개 놓으면 층이 된다. 층을 여러 개 이으면 신경망이다.

입력 → [층 1] → [층 2] → … → [층 N] → 출력

앞쪽 층은 단순한 특징을 잡고, 뒤쪽 층은 그것을 조합해 복잡한 특징을 잡는다. 이미지라면 선과 점 → 눈과 코 → 얼굴 순서다. 이것을 사람이 정해 주지 않는다. 학습하다 보면 그렇게 된다.

손실: 얼마나 틀렸는가

학습하려면 "틀린 정도"를 숫자 하나로 만들어야 한다. 이것이 손실이다. 가장 흔한 것은 제곱 오차다.

손실 = (예측 − 정답)²

0-2에서 본 대로, 가우시안을 다루는 생성 모델의 손실은 결국 이 제곱 오차가 된다. 여러 표본에 대해 평균 내면 MSE(mean squared error)다.

경사하강법: 손실이 줄어드는 쪽으로 조금씩

손잡이 하나를 아주 조금 돌렸을 때 손실이 얼마나 변하는지를 기울기라고 한다. 수학에서 말하는 미분이다.

그래서 규칙은 하나다. 기울기의 반대쪽으로 조금 움직인다.

w ← w − 학습률 × 기울기

학습률은 한 번에 얼마나 움직일지 정하는 숫자다. 너무 크면 정답을 지나쳐 튕겨 나가고, 너무 작으면 한참 걸린다.

숫자로 한 번 해 보자. 모델은 예측 = w·x 하나뿐이다. 입력 x = 2, 정답은 10, 지금 w = 3이다.

단계계산값
예측3 × 26
손실(6 − 10)²16
기울기2 × (6 − 10) × 2−16
갱신 (학습률 0.1)3 − 0.1 × (−16)w = 4.6
새 예측4.6 × 29.2
새 손실(9.2 − 10)²0.64

한 걸음에 손실이 16에서 0.64로 줄었다. 이것을 수없이 반복하는 것이 학습의 전부다.

역전파: 모든 손잡이의 기울기를 한 번에

손잡이가 하나면 위처럼 손으로 계산한다. 120억 개면 어떻게 할까.

층이 이어진 구조에서는 뒤에서 앞으로 거슬러 가면서 기울기를 차례로 구할 수 있다. 이유는 연쇄 법칙이다. "A가 B를 바꾸고 B가 C를 바꾸면, A가 C에 주는 영향은 두 영향의 곱"이라는 규칙이다.

  1. 입력을 넣어 출력과 손실을 구한다. 앞으로 가는 계산이다.
  2. 손실에서 출발해 마지막 층, 그 앞 층 순서로 기울기를 넘겨 준다. 뒤로 가는 계산이다.

2번을 역전파라고 한다. 계산 한 번으로 모든 손잡이의 기울기가 나온다. 직접 짤 필요는 없다. PyTorch 같은 도구가 loss.backward() 한 줄로 해 준다.

실제 학습의 모양

반복:
    데이터에서 미니배치를 뽑는다
    모델에 넣어 예측을 얻는다
    손실을 계산한다
    역전파로 기울기를 구한다
    파라미터를 조금 움직인다

알아 둘 말 몇 가지.

확인 문제

  1. 위 예시에서 학습률을 0.3으로 하면 w는 얼마가 되나? 그때 새 손실은?
  2. 활성화 함수를 전부 빼면 왜 층을 깊게 쌓는 의미가 없나?
  3. 입력 100개를 받아 출력 50개를 내는 층 하나의 파라미터는 몇 개인가?

풀이

  1. w = 3 − 0.3 × (−16) = 7.8이다. 새 예측은 15.6, 새 손실은 31.36이다. 손실이 오히려 커졌다. 학습률이 너무 크면 정답을 지나친다.
  2. 곱하고 더하는 계산을 여러 번 이어 붙여도 결국 곱하기 한 번, 더하기 한 번으로 합쳐진다. 직선밖에 표현하지 못한다.
  3. 5,050개다. 가중치 100 × 50 = 5,000개에 편향 50개를 더한다.
← 0-2 조건부 확률, 기대값, KL 발산 0-4 CNN과 U-Net →