14.5 현대 딥러닝의 일반화와 스케일링

실습 · 연습문제 2개

최소 노름 보간과 경사하강의 도착점 min-norm-interpolation

과소결정 선형 회귀 Xw=y\mathbf{X}\mathbf{w} = \mathbf{y}(X\mathbf{X}는 N×pN \times p, p>Np > N, 행들은 일차독립)에는 데이터를 정확히 맞추는 해가 무수히 많다. 두 함수를 완성한다.

  1. min_norm_solution(X, y): 보간하는 해 중 ℓ2\ell_2 노름이 가장 작은 해.

    w^=X⊤(XX⊤)−1y.\hat{\mathbf{w}} = \mathbf{X}^\top(\mathbf{X}\mathbf{X}^\top)^{-1}\mathbf{y}.

    np.linalg.pinv를 쓰지 말고 위 식을 np.linalg.solve로 계산한다(테스트가 pinv 결과와 비교한다).

  2. gd_limit(X, y, w0): 손실 12∥Xw−y∥2\frac12\lVert\mathbf{X}\mathbf{w} - \mathbf{y}\rVert^2에 안정적인 학습률로 경사하강을 무한히 반복했을 때, 초기값 w0\mathbf{w}_0에서 출발해 도달하는 해. 반복하지 말고 닫힌 형태로 계산한다.

    힌트: 경사하강의 업데이트는 항상 X\mathbf{X}의 행 공간 안에 있으므로 w∞−w0\mathbf{w}_\infty - \mathbf{w}_0도 행 공간 안에 있다. 행 공간 안의 벡터 X⊤a\mathbf{X}^\top\mathbf{a} 중 X(w0+X⊤a)=y\mathbf{X}(\mathbf{w}_0 + \mathbf{X}^\top\mathbf{a}) = \mathbf{y}를 만족하는 것을 찾는다. 결과는 w0\mathbf{w}_0에 1번 함수의 식을 "잔차 y−Xw0\mathbf{y} - \mathbf{X}\mathbf{w}_0"에 적용한 것을 더한 꼴이 된다.

인자 shape
X (N, p)
y (N,)
w0 (p,)

테스트는 다음을 확인한다.

  • 두 해 모두 데이터를 정확히 맞춘다.
  • min_norm_solution은 pinv 해와 같고, 영공간 방향의 벡터를 더한 어떤 보간 해보다 노름이 작다.
  • gd_limit(X, y, 0)은 최소 노름 해와 같다.
  • gd_limit은 실제로 경사하강을 많이 반복한 결과와 같다.
  • gd_limit의 해는 보간하는 해 중 w0\mathbf{w}_0에 가장 가깝다.

바닥이 있는 멱법칙 맞추고 외삽하기 power-law-floor

학습 곡선(데이터 크기 NN에 따른 시험 손실 LL)을 다음 꼴로 요약한다.

L(N)=aNb+c,a>0, b<0.L(N) = a N^{b} + c, \qquad a > 0,\ b < 0.

cc는 줄일 수 없는 바닥이다. 두 함수를 완성한다.

  1. fit_power_law(N, L, floor=0.0): 바닥 cc = floor가 주어졌을 때, log⁡(L−c)=log⁡a+blog⁡N\log(L - c) = \log a + b\log N을 최소제곱으로 맞춰 (a, b)를 반환한다. 모든 LL이 floor보다 커야 하고, 그렇지 않으면 ValueError를 낸다.
  2. fit_with_floor(N, L, floors): 후보 바닥 배열 floors의 각 값에 대해 1번으로 맞춘 뒤, 원래 척도에서의 제곱오차 ∑i(Li−L^i)2\sum_i (L_i - \hat{L}_i)^2이 가장 작은 (a, b, c)를 반환한다. floor가 min⁡L\min L 이상인 후보는 건너뛴다.

테스트는 다음을 확인한다.

  • 잡음 없는 L=0.3N−0.6+0.05L = 0.3N^{-0.6} + 0.05에서 바닥을 알려 주면 a,ba, b를 정확히 찾는다.
  • 바닥을 0으로 두고 작은 범위(N≤200N \le 200)에서 맞추면, N=3200N = 3200의 손실을 실제보다 낮게 예측한다(본문의 실패).
  • fit_with_floor가 바닥을 대략 맞게 찾고, 그 외삽이 바닥 0의 외삽보다 정확하다.
  • 바닥이 손실보다 크거나 같으면 ValueError를 낸다.