튜토리얼 · 10
최소제곱
모든 것이 학습되지는 않는다. 모델이 매개변수에 대해 선형이면 가장 좋은 답은 바로
계산된다 — 학습률도, 단계도, 시드도 없이 — 그리고 linalg 가 그 일을 하는
borch 의 부분이다. 이 튜토리얼은 풀 수 있는 것을 풀고, 남은 시간을 더 쓸모 있는 기술에
쓴다. 정확한 답이 아무 값도 없을 때를 아는 일.
1 · 직선, 두 번
직선에서 벗어난 잡음 낀 점 마흔. 앞선 튜토리얼처럼 경사하강으로 맞추고, 다시
linalg.lstsq 로 맞춘다. 이쪽은 호출 하나이고 고리가 없다. 같은 질문에
답하고 있으니 같은 자리에 내려앉는다.
lstsq 는 학습된 답의 근사가 아니다. 정확한 최솟값이고, 학습된 쪽이 그리로
다가간다. 모델이 매개변수에 대해 선형일 때 옵티마이저를 집는 것은 더 늦게 도착하겠다는
선택이다. 그럼에도 그렇게 하는 이유는 크기다. 닫힌 형태는 행렬 전체를 한 번에 원한다.
2 · 정확히, 틀린 질문에
매끄러운 곡선에서 뜬 잡음 낀 점 열둘을 1·3·5·11 차 다항식으로 맞춘다. 11 차는 미지수가 점 개수와 같으므로 모든 점을 지나가고 학습 오차가 0 으로 간다. 그다음 각각에게 본 적 없는 점 이백 개에 대해 묻는다.
마지막 열이 쓸모 있는 열이다. linalg.cond 는 입력이 조금 움직일 때 답이
얼마나 움직일 수 있는지를 말하고, 어떤 결과를 보기도 전에 계산된다 — 큰 조건수는
손쓸 수 있는 때에 도착하는 경고다. 시험 오차는 이미 그 맞춤을 믿은 뒤에 도착한다.
3 · PCA 는 특잇값 분해다
대체로 한 방향에 놓인 이차원 점 구름. 중심을 옮기고 linalg.svd 를 취하면
vt 의 행이 구름의 방향으로, 긴 것부터 나오고 s 가 얼마나 긴지를
말한다. 맞춰진 것은 없다. 이것은 행렬의 성질이다.
4 · 실제로 몇 차원이 들어 있나
숨은 인자 셋으로 지은 여덟 열, 거기에 잡음. 특잇값은 각 방향이 얼마나 나르는지를 말하고,
답은 셋이어야 한다. 세는 일은 "작다" 가 어디서 시작하는지를 고르는 일이므로 두 번 센다 —
한 번은 여기 적어 둔 문턱으로, 한 번은 제 문턱을 스스로 고르는
linalg.matrixRank 로.
잡음이 신호보다 충분히 작은 동안에는 셋째 값 뒤에 절벽이 있고 사람은 셋을 센다. 마지막
줄에는 절벽이 없고, 세어진 수는 고른 문턱이 무엇이었나일 뿐이다.
linalg.matrixRank 는 내내 여덟이라 답하는데 틀린 것이 아니다 — 그 문턱은
float32 정밀도 근처의 수치적 문턱이고, 가장 큰 것의 천분의 일인 방향도 없는 방향은
아니다. 그것은
"거기 뭔가 있기는 한가" 에 답하고 질문은 "남길 값이 있는가" 였다. 둘 중 하나만 당신의
데이터에 대한 것이다.
linalg.qr,
linalg.cholesky, linalg.eigh 가 같은 모듈에 있고, 각각 2 번
블록이 말하는 종류의 "그리고 이것이 그 값이다" 를 하나씩 갖고 있다.