99강에서 헤세 행렬을 세우고 이렇게 썼습니다.
그런데 물결표가 무엇을 뜻하는지 말하지 않았습니다. 95강에서 일차 근사를 세울 때는 나머지가 라고 정확히 규정했는데, 이차 근사에는 아직 그런 규정이 없습니다.
이 강의가 세 가지를 답합니다.
| 질문 | 답 |
|---|---|
| 이차 근사가 정말 더 좋은가 | 오차가 으로 줄어듭니다 |
| 나머지를 얼마로 잡을 수 있는가 | \tfrac12\lVert H\rVert\lVert\mathbf{h}\rVert^ |
| 왜 이차에서 멈추는가 | 3계부터는 텐서라 다룰 수 없습니다 |
방법은 이미 손에 있습니다. 99강 심화 2에서 로 두면 한 변수 함수가 된다고 했고, 그 미분들이 와 였습니다.
이 강의의 결과가 101강 판정의 증명 도구입니다. 그리고 심화 3에서 얻는 오차 상한이 110강에서 학습률의 조건을 정합니다.
문제. 와 원점을 봅니다.
(1) , , 을 구하세요.
(2) 에 대해 일차 근사와 이차 근사의 오차를 구하세요.
(3) 두 오차의 비를 보세요.
생각의 실마리. 항을 하나 더 넣었으니 더 정확할 것입니다. 얼마나 더 정확한지를 수치로 봅니다.
풀이. (1) , 이므로 입니다. 한 번 더 미분하면
(2)와 (3) 검산에서
| 일차 오차 | 이차 오차 | 비 | |
|---|---|---|---|
| 10^ | 1.685892\times10^ | 1.858920\times10^ | |
| 10^ | 1.518362\times10^ | 1.836216\times10^ | |
| 10^ | 1.501834\times10^ | 1.833625\times10^ | |
| 10^ | 1.500183\times10^ | 1.833422\times10^ |
비가 가 십분의 일이 될 때마다 열 배씩 커집니다. 가까이 갈수록 이차 근사의 우위가 커진다는 뜻입니다.
이 문제에서 배우는 것: 이차 테일러 다항식.
이차 테일러 다항식. 가 일 때
를 에서의 이차 테일러 다항식이라 합니다.
54강의 한 변수 형태와 나란히 놓습니다.
| 차원 | 이차 테일러 |
|---|---|
| f(a)+f'(a)h+\tfrac12f''(a)h^ | |
| f(\mathbf{a})+\nabla f\cdot\mathbf{h}+\tfrac12\mathbf{h}^{\top}H\mathbf |
대응이 정확합니다. 가 로, 가 로, 곱하기가 내적과 이차형식으로 바뀝니다. 이 붙는 것도 그대로입니다.
계수가 인 이유는 두 번 미분해도 원래 값이 나오게 하기 위해서입니다. 를 로 두 번 미분하면 가 나옵니다. 99강 심화 2의 계산이 이를 확인합니다.
바로 확인 1.
확인 1-1. 이차 테일러 다항식을 쓰세요.
답. 입니다.
확인 1-2. 이 붙는 이유를 쓰세요.
답. 두 번 미분했을 때 가 되도록 하기 위해서입니다.
확인 1-3. 의 원점 헤세를 쓰세요.
답. 입니다.
문제. 문제 1의 두 오차를 봅니다.
(1) 일차 오차를 으로 나눈 값을 구하세요.
(2) 이차 오차를 으로 나눈 값을 구하세요.
(3) 두 결과가 무엇을 말하는지 쓰세요.
생각의 실마리. 어떤 양이 에 비례하면 으로 나눈 값이 상수로 수렴합니다. 94강 심화 5에서 오차 차수를 이렇게 확인했습니다.
풀이. 검산에서
| 일차 오차/t^ | 이차 오차/t^ | |
|---|---|---|
| 10^ | ||
| 10^ | ||
| 10^ | ||
| 10^ |
(3) 각각 와 로 수렴합니다. 일차 오차는 에, 이차 오차는 에 비례합니다.
이 문제에서 배우는 것: 오차 차수.
차수가 하나씩 오릅니다. 차 테일러 다항식의 오차는 입니다.
수렴하는 상수의 정체도 확인할 수 있습니다. 일 때
이므로 일차 오차의 계수 가 이차항의 크기 자체입니다. 이차 근사가 이 항을 정확히 잡아내므로 오차가 한 차수 내려갑니다.
의 정체는 3계 항입니다. 를 전개하면
이고 입니다. 검산의 와 맞습니다.
이 차수 차이가 왜 중요한지를 정리합니다.
| 근사 | 정확도를 배 올리려면 |
|---|---|
| 일차 | 거리를 배 줄입니다 |
| 이차 | 거리를 배 줄입니다 |
이차 근사는 같은 정확도를 더 넓은 범위에서 줍니다. 112강의 뉴턴법이 경사하강법보다 빠른 근본 이유가 여기 있습니다. 더 넓은 범위에서 믿을 수 있으니 더 크게 걸을 수 있습니다.
바로 확인 2.
확인 2-1. 일차 근사의 오차 차수를 쓰세요.
답. 입니다.
확인 2-2. 이차 근사의 오차 차수를 쓰세요.
답. 입니다.
확인 2-3. 차 테일러 다항식의 오차 차수를 쓰세요.
답. 입니다.
문제. 일차 근사의 나머지를 봅니다.
(1) 선분 위에서 의 최댓값을 이라 할 때, 나머지의 상한을 추측하세요.
(2) 문제 1의 함수에서 실제 나머지와 그 상한을 비교하세요.
(3) 상한이 얼마나 빡빡한지 판정하세요.
생각의 실마리. 95강 심화 3에서 이 상한을 예고했습니다. 이제 확인할 차례입니다.
풀이. (1) 나머지가 이차항에서 오고 이차형식의 크기가 레일리 몫으로 통제되므로
(2)와 (3) 검산에서
| 실제 나머지 | 상한 | 상한/실제 | |
|---|---|---|---|
| 10^ | 1.685892\times10^ | 2.762927\times10^ | |
| 10^ | 1.518362\times10^ | 2.525125\times10^ | |
| 10^ | 1.501834\times10^ | 2.502501\times10^ | |
| 10^ | 1.500183\times10^ | 2.500250\times10^ |
비가 로 수렴합니다. 상한이 실제보다 크지만 차수가 정확하고 상수도 작습니다.
이 문제에서 배우는 것: 테일러 정리의 나머지항.
다변수 테일러 정리(라그랑주 나머지). 가 와 를 잇는 선분을 포함하는 열린집합에서 이면, 그 선분 위의 어떤 점 가 있어
입니다.
를 어디서 재느냐가 핵심입니다. 에서는 에서 쟀는데, 정확한 등식에서는 선분 위의 알 수 없는 점 에서 잽니다. 그 차이가 3계 항으로 나타납니다.
여기에 90강의 레일리 몫 부등식을 쓰면 상한이 나옵니다.
07단원에서 만든 노름이 여기서 쓰입니다. 90강 문제 4의 일관성 부등식이 그대로 적용됩니다.
같은 방식으로 이차 근사의 나머지도 잡힙니다.
여기서 은 3계 미분의 크기입니다. 112강의 뉴턴법 수렴 증명이 이 상한을 씁니다.
바로 확인 3.
확인 3-1. 일차 근사 나머지의 상한을 쓰세요.
답. 이며 은 선분 위 의 최댓값입니다.
확인 3-2. 테일러 정리에서 를 어디서 잽니까?
답. 선분 위의 어떤 점 에서 잽니다.
확인 3-3. 상한 유도에 쓰는 부등식을 쓰세요.
답. 입니다.
문제. 의 원점 이차 근사를 봅니다.
(1) 를 명시적으로 쓰세요.
(2) , , 에서 실제값과 비교하세요.
(3) 이차형식이 이 되는 방향을 구하세요.
생각의 실마리. 근사를 세웠으면 어디까지 믿을 수 있는지 봐야 합니다.
풀이. (1) 과 이므로
(2) 검산에서
| 점 | 실제 | 이차 근사 | 오차 |
|---|---|---|---|
멀어질수록 나빠집니다. 원점에서 거리가 , , 이고 오차가 , , 입니다. 거리가 세 배가 되자 오차가 배가 됐으며 세제곱 법칙에 대략 맞습니다.
(3) 이므로 , 즉 입니다. 검산에서 그 방향의 가 으로 **참값 **입니다.
이 문제에서 배우는 것: 이차형식의 영방향.
영방향. 인 단위벡터 를 이차형식의 영방향이라 합니다.
영방향에서는 이차 근사가 일차 근사와 같아집니다. 이차항이 사라지므로 오차 개선이 없고, 실제로 방향으로는 이차 근사의 정확도가 일차와 같습니다.
이 방향들이 어디서 왔는지 보면 익숙합니다. 은 93강 문제 5에서 본 안장의 등고선이고, 두 직선 였습니다.
| 개념 | 같은 것의 다른 이름 |
|---|---|
| 이차형식의 영방향 | 93강 안장의 등고선 |
| 부정부호 이차형식 | 87강의 분류 |
| 쌍곡선의 점근선 | 초등기하 |
영방향의 존재가 부정부호의 특징입니다. 양정치이면 이라 영방향이 없고, 부정부호이면 양수 영역과 음수 영역 사이에 반드시 영방향이 있습니다. 연속성 때문입니다.
바로 확인 4.
확인 4-1. 영방향의 정의를 쓰세요.
답. 인 단위벡터입니다.
확인 4-2. 의 영방향을 구하세요.
답. 방향, 즉 입니다.
확인 4-3. 양정치 이차형식에 영방향이 있습니까?
답. 없습니다. 모든 방향에서 양수입니다.
문제. 을 봅니다.
(1) 과 를 구하세요.
(2) 고유값을 구하고 원점의 성격을 판정하세요.
(3) 여러 방향에서 을 구하고 와 비교하세요.
생각의 실마리. 이 함수는 이차형식 자체입니다. 3계 이상의 항이 없으니 이차 근사가 정확할 것입니다.
풀이. (1) 이므로 원점에서 입니다. 헤세는
(2) 검산에서 고유값이 과 입니다. 부호가 섞여 안장입니다.
(3) 검산에서
| 방향 | G(t\mathbf{u})/t^ | \tfrac12\mathbf{u}^{\top}H\mathbf |
|---|---|---|
| 0^ | ||
| 45^ | ||
| 135^ |
정확히 같습니다.
이 문제에서 배우는 것: 임계점에서 함수는 이차형식입니다.
이면 테일러 전개에서 일차항이 사라져
함숫값의 변화가 통째로 이차형식입니다. 그래서 87강의 분류가 그대로 극값 판정이 됩니다.
방향에서 값이 음수인 것이 안장의 증거입니다. 방향으로는 올라가고 방향으로는 내려갑니다. 93강 문제 5에서 에 대해 축을 따라 본 것과 같은 관찰이며, 이번에는 헤세의 고유벡터가 그 극단 방향을 정확히 알려 줍니다.
고유벡터를 구하면 에 , 에 입니다. **에서 이고 에서 **이라 정확히 입니다.
101강이 이 관찰을 정리로 만듭니다. 다만 한 가지를 조심해야 합니다. 위 등식의 는 가 아니라 에서 잰 것이라, 의 고유값으로 결론을 내려면 연속성 논증이 필요합니다. 그 논증이 101강 증명의 핵심입니다.
바로 확인 5.
확인 5-1. 임계점에서 테일러 전개는 어떻게 됩니까?
답. 일차항이 사라져 이차형식만 남습니다.
확인 5-2. 의 원점 성격을 쓰세요.
답. 고유값이 과 로 섞여 안장입니다.
확인 5-3. 고유벡터 방향의 는 무엇입니까?
답. 입니다.
| 개념 | 내용 |
|---|---|
| T_ | f(\mathbf{a})+\nabla f\cdot\mathbf |
| T_ | T_{1}+\tfrac12\mathbf{h}^{\top}H\mathbf |
| 일차 오차 | |
| 이차 오차 | |
| 라그랑주 나머지 | \tfrac12\mathbf{h}^{\top}H(\mathbf{c})\mathbf |
| 상한 | \tfrac12 M\lVert\mathbf{h}\rVert^ |
| 임계점에서 | 내용 |
|---|---|
| 일차항 | 사라집니다 |
| 변화량 | 이차형식이 됩니다 |
| 고유벡터 방향 | |
| 영방향 | 이차 근사가 일차와 같아집니다 |
| 자주 하는 실수 | 바로잡기 |
|---|---|
| 을 빠뜨립니다 | 두 번 미분해 확인합니다 |
| 나머지의 를 에서 잽니다 | 선분 위의 입니다 |
| 이차 근사를 멀리까지 씁니다 | 오차가 세제곱으로 커집니다 |
| 3계 항을 쉽게 쓸 수 있다고 봅니다 | 텐서라 다루기 어렵습니다 |
문제 6. 의 에서 를 구하세요.
답. , , 이므로 입니다.
문제 7. 의 원점 를 구하세요.
답. 이고 이므로 입니다.
문제 8. 의 원점 를 구하세요.
답. 입니다.
문제 9. 의 원점 를 구하세요.
답. 이고 (는 모든 성분이 )이므로 입니다.
문제 10. 일차 근사의 오차를 절반으로 줄이려면 거리를 몇 배로 줄여야 합니까?
답. 배입니다.
문제 11. 이차 근사에서는 몇 배입니까?
답. 배입니다.
문제 12. 이고 이면 일차 나머지의 상한은 얼마입니까?
답. 입니다.
문제 13. 이차 근사가 정확한 함수의 예를 쓰세요.
답. 이차 이하의 다항식입니다. 3계 이상의 미분이 모두 입니다.
문제 14. 의 영방향을 구하세요.
답. 이므로 인 방향입니다.
문제 15. 양정치 헤세에 영방향이 있습니까?
답. 없습니다.
문제 16. 임계점에서 의 최댓값을 쓰세요.
답. 입니다.
문제 17. 변수에서 3계 편미분은 몇 개입니까?
답. 대칭성을 쓰면 개입니다. 이면 개입니다.
문제 18. 에서 3계 텐서의 성분 수를 어림하고 쓸 수 있는지 판단하세요.
답. 개이며 쓸 수 없습니다. 그래서 이차에서 멈춥니다.
심화 1. 다변수 테일러 정리를 증명하세요.
전략은 차원을 낮추는 것입니다. 99강 심화 2에서 쓴 방법을 그대로 씁니다.
로 두면 인 한 변수 함수이고
입니다. 99강 심화 2의 계산에서
여기에 54강의 한 변수 테일러 정리를 적용합니다. , 로 두면 과 사이의 어떤 가 있어
각 항을 되돌려 쓰면
이고 가 선분 위의 점입니다.
증명이 짧은 이유가 방법에 있습니다. 다변수 정리를 처음부터 세우지 않고, 직선 위로 제한해 이미 아는 정리를 쓴 뒤 되돌립니다.
이 전략이 이 단원 전체에서 되풀이됩니다.
| 결과 | 어떤 한 변수 정리를 옮겼나 |
|---|---|
| 96강 방향도함수 | 37강 미분 |
| 99강 심화 2 | 두 번 미분 |
| 100강 테일러 | 54강 테일러 |
| 101강 판정 | 44강 이계도함수 판정 |
조건이 필요한 곳이 한 군데입니다. 선분 전체가 정의역 안에 있어야 하고 거기서 여야 합니다. 정의역이 볼록하지 않으면 두 점을 잇는 선분이 밖으로 나갈 수 있으며, 그래서 정리에 "선분을 포함하는 열린집합"이라는 조건이 붙습니다.
심화 2. 고차 항을 다중지표로 쓰고 왜 이차에서 멈추는지 논하세요.
3계 항까지 쓰면 이렇게 됩니다. 변수에서
이항계수 이 나타납니다. 클레로 정리로 이라 같은 것이 세 번 세어지기 때문입니다.
일반적으로는 다중지표로 씁니다.
다중지표. 이 음이 아닌 정수의 조라 할 때
로 정의합니다.
이 표기로 테일러 전개가 한 줄이 됩니다.
깔끔하지만 계산은 그렇지 않습니다. 계 편미분의 서로 다른 개수가
입니다. 표로 봅니다.
| 10^ | 5\times10^ | 1.7\times10^ | 4\times10^ |
| 10^ | 5\times10^ | 1.7\times10^ | 4\times10^ |
마지막 줄이 답입니다. 이면 헤세조차 저장할 수 없고 3계는 논외입니다.
그런데 이차까지만으로도 최적화에는 충분합니다. 이유가 둘 있습니다.
첫째, 극값 판정에 필요한 것이 이차입니다. 준정치인 예외적 경우를 빼면 헤세의 부호가 결론을 냅니다.
둘째, 수렴 속도가 이미 이차입니다. 112강의 뉴턴법은 매회 유효자릿수가 두 배가 되는데, 3계까지 쓰는 방법을 써도 세 배가 될 뿐이라 비용 대비 이득이 없습니다.
99강 심화 4에서 본 대로 만 계산하는 기법이 있어 이차 정보는 실제로 쓸 수 있습니다. 3계에는 그런 우회로가 마땅치 않습니다.
심화 3. 근사를 믿을 수 있는 반지름을 정하세요.
문제 3의 상한을 뒤집으면 실용적인 질문에 답할 수 있습니다.
오차를 이하로 유지하려면 얼마나 가까이 있어야 하는가.
일차 근사에서
곡률이 크면 반지름이 작습니다. 이므로 가장 심하게 휘는 방향이 반지름을 정합니다.
| 일 때 반지름 | |
|---|---|
| 10^ |
이것이 학습률의 정체입니다. 109강의 경사하강법은 현재 점의 일차 근사를 믿고 한 발 내딛는데, 그 발이 신뢰 반지름을 넘으면 근사가 무너져 손실이 오히려 늘 수 있습니다.
99강 심화 5에서 정확한 조건을 유도했습니다.
두 결과가 같은 것을 말합니다. 곡률이 클수록 조심스럽게 움직여야 합니다.
차수가 다른 이유는 재는 대상이 달라서입니다. 앞은 "근사 오차가 이하"를 요구하고, 뒤는 "반복이 발산하지 않음"을 요구합니다. 실무에서는 뒤쪽이 기준이 됩니다.
이차 근사를 쓰면 반지름이 넓어집니다.
이 작을 때 세제곱근이 제곱근보다 크므로 더 크게 걸을 수 있습니다. 뉴턴법이 빠른 두 번째 이유입니다.
심화 4. 이차 모형이 그대로 알고리즘이 되는 방식을 설명하세요.
이차 근사를 최소화할 대상으로 삼는 것이 이차 최적화 방법의 발상입니다.
이 모형은 명시적으로 최소화할 수 있습니다. 에서
뉴턴법의 갱신식이며 99강 문제 5에서 다른 경로로 얻은 것과 같습니다.
그런데 문제가 둘 있습니다.
첫째, 가 양정치가 아니면 가 최소가 아닙니다. 안장이나 최대일 수 있고, 그러면 손실이 늘어납니다. 음의 고유값 방향으로는 모형이 아래로 무한히 내려가 최소가 아예 없습니다.
둘째, 모형은 근사일 뿐입니다. 심화 3에서 본 신뢰 반지름을 넘어가면 모형이 실제 함수와 무관해집니다.
두 문제를 함께 푸는 것이 신뢰영역법입니다.
모형을 믿을 만한 반경 안에서만 최소화합니다. 제약이 붙어 있으므로 가 부정부호여도 해가 존재합니다.
| 상황 | 해의 위치 |
|---|---|
| 양정치이고 | 내부, 뉴턴 걸음 |
| 그 밖 | 경계 위 |
를 어떻게 조절하는지가 알고리즘의 핵심입니다.
가 에 가까우면 모형이 잘 맞으니 를 키우고, 에 가깝거나 음수면 줄입니다. 근사의 품질을 스스로 측정해 보폭을 조절하는 구조이며, 112강에서 다룹니다.
경사하강법도 이 틀에 들어갑니다. 대신 를 쓰면
경사하강법은 헤세를 로 근사한 뉴턴법입니다. 96강 심화 3에서 노름 선택으로 본 것과 같은 통합이며, 관점이 하나 더 늘었습니다.
| 방법 | 쓰는 이차 모형 |
|---|---|
| 경사하강법 | |
| 뉴턴법 | 그대로 |
| 준뉴턴법 | 를 갱신하며 근사 |
| Adam | 대각행렬 |
심화 5. 이차 근사가 결론을 내지 못하는 경우를 논하세요.
99강 문제 4의 넷째 줄이 남겨 둔 문제입니다. 헤세가 준정치이면 어떻게 되는지 봅니다.
세 함수를 나란히 놓습니다.
| 함수 | 원점 헤세 | 원점의 성격 |
|---|---|---|
| x^ | 최소, 유일하지 않음 | |
| x^{2}+y^ | 유일한 최소 | |
| x^{2}-y^ | 안장 |
헤세가 똑같은데 성격이 다릅니다. 이차 근사가 으로 셋 모두 같기 때문이며, 차이가 4계 항에 있습니다.
이 상황이 실무에서 드물지 않습니다. 신경망의 손실 지형에서 헤세는 고유값이 대부분 근처인 경우가 많습니다. 파라미터가 과다해 여러 방향으로 값이 거의 변하지 않기 때문입니다.
| 관찰 | 뜻 |
|---|---|
| 고유값이 근처에 몰립니다 | 평탄한 방향이 많습니다 |
| 큰 고유값이 소수입니다 | 가파른 방향은 적습니다 |
| 음의 고유값이 조금 있습니다 | 완전한 극소가 아닙니다 |
셋째 줄이 흥미롭습니다. 훈련이 멈춘 지점이 극소가 아니라 안장인 경우가 많고, 고차원에서는 모든 방향이 양수일 확률이 낮아 안장이 훨씬 흔합니다. 고유값이 개인데 모두 같은 부호일 확률이 이 클수록 낮기 때문입니다.
그래서 실무의 관심이 "안장을 어떻게 빠져나가는가"로 옮겨갑니다. 111강의 모멘텀이 도움이 되는 이유 중 하나가 이것이며, 평탄한 방향에서 속도를 누적해 빠져나갑니다.
이론적으로는 판정이 어렵다는 사실을 인정해야 합니다. 준정치인 경우 임의 차수의 정보가 필요할 수 있고, 모든 방향으로 무한번 미분해도 결정되지 않는 예까지 있습니다. 101강에서 판정법의 범위를 정확히 밝힙니다.
심화 6. 101강과 102강으로 어떻게 이어지는지 정리하세요.
이 강의에서 임계점 근처의 함수가 이차형식임을 보였습니다.
101강이 이 식에서 판정을 증명합니다. 논증의 요점은 를 로 바꾸는 데 있습니다. 는 알 수 없는 점이지만 가 작으면 에 가깝고, 가 연속이므로 고유값도 가깝습니다.
가 양정치이고 이면, 충분히 작은 근방에서 의 최소 고유값도 보다 큽니다. 따라서
엄밀한 극소입니다. 부등식이 정량적이라 "얼마나 최소인지"까지 말해 줍니다.
102강은 방향을 바꿔 기하로 갑니다. 이 강의의 이차형식이 곡면의 휘어짐을 나타내므로, 그것을 곡률로 정식화합니다.
| 개념 | 이 단원의 대응 |
|---|---|
| 주곡률 | 헤세의 고유값 |
| 주방향 | 헤세의 고유벡터 |
| 평균곡률 | 대각합, 라플라시안 |
| 가우스곡률 | 행렬식 |
99강 심화 3에서 대각합과 행렬식의 뜻을 물었는데, 102강이 기하적 답을 줍니다. 가우스 곡률의 부호가 곧 임계점 분류의 부호이며, 안장점의 이름이 실제 말안장 모양에서 왔음을 확인합니다.
02단원이 끝나면 03단원에서 적분으로 옮겨가고, 04단원에서 이 단원의 결과를 알고리즘으로 만듭니다.
import numpy as np
f = lambda x, y: np.exp(x)*np.cos(y)
Hf = lambda x, y: np.array([[np.exp(x)*np.cos(y), -np.exp(x)*np.sin(y)],
[-np.exp(x)*np.sin(y), -np.exp(x)*np.cos(y)]])
a = np.array([0.0, 0.0])
g0 = np.array([1.0, 0.0])
H0 = np.array([[1.0, 0.0], [0.0, -1.0]])
# --- 문제 1: 일차와 이차 근사의 오차 ------------------------------------
print(" f(0,0) = %.0f, grad = %s" % (f(*a), g0))
print(" H(0,0) =\n", H0)
print(" t 일차 오차 이차 오차 비 (일차/이차)")
for k in range(1, 5):
t = 10.0**(-k)
h = np.array([t, 2*t])
e1 = abs(f(*(a+h)) - (f(*a) + g0 @ h))
e2 = abs(f(*(a+h)) - (f(*a) + g0 @ h + 0.5*h @ H0 @ h))
print(" 1e-%d %12.6e %12.6e %12.1f" % (k, e1, e2, e1/e2))
# f(0,0) = 1, grad = [1. 0.]
# H(0,0) =
# [[ 1. 0.]
# [ 0. -1.]]
# t 일차 오차 이차 오차 비 (일차/이차)
# 1e-1 1.685892e-02 1.858920e-03 9.1
# 1e-2 1.518362e-04 1.836216e-06 82.7
# 1e-3 1.501834e-06 1.833625e-09 819.1
# 1e-4 1.500183e-08 1.833422e-12 8182.4
# 가까이 갈수록 이차 근사의 우위가 열 배씩 커집니다.
# --- 문제 2: 오차가 거리의 몇 제곱인가 ----------------------------------
print(" t 일차 오차/t^2 이차 오차/t^3")
for k in range(1, 5):
t = 10.0**(-k)
h = np.array([t, 2*t])
e1 = abs(f(*(a+h)) - (f(*a) + g0 @ h))
e2 = abs(f(*(a+h)) - (f(*a) + g0 @ h + 0.5*h @ H0 @ h))
print(" 1e-%d %13.8f %13.8f" % (k, e1/t**2, e2/t**3))
# t 일차 오차/t^2 이차 오차/t^3
# 1e-1 1.68589204 1.85892039
# 1e-2 1.51836216 1.83621567
# 1e-3 1.50183362 1.83362459
# 1e-4 1.50018333 1.83342230
# 1.5 와 1.8333 으로 수렴합니다. 뒤의 값은 3계 계수 11/6 입니다.
# --- 문제 3: 나머지항의 상한 --------------------------------------------
print(" t 실제 나머지 상한 상한/실제")
for k in range(1, 5):
t = 10.0**(-k)
h = np.array([t, 2*t])
rem = abs(f(*(a+h)) - (f(*a) + g0 @ h))
ss = np.linspace(0, 1, 2001)
nmax = max(np.linalg.norm(Hf(*(a + s*h)), 2) for s in ss)
bound = 0.5*nmax*(h @ h)
print(" 1e-%d %12.6e %12.6e %8.3f" % (k, rem, bound, bound/rem))
# t 실제 나머지 상한 상한/실제
# 1e-1 1.685892e-02 2.762927e-02 1.639
# 1e-2 1.518362e-04 2.525125e-04 1.663
# 1e-3 1.501834e-06 2.502501e-06 1.666
# 1e-4 1.500183e-08 2.500250e-08 1.667
# 비가 5/3 으로 수렴합니다. 상한의 차수가 정확합니다.
# --- 문제 4: 이차 근사를 실제로 써 보기 ---------------------------------
q = lambda x, y: 1 + x + 0.5*(x**2 - y**2)
print(" (x,y) 실제 f 이차 근사 오차")
for p in [(0.1, 0.2), (0.3, -0.2), (0.5, 0.5)]:
print(" (%+.1f,%+.1f) %12.8f %12.8f %+.8f" % (p[0], p[1], f(*p), q(*p), f(*p)-q(*p)))
print(" 영방향 확인: 이차형식 (x^2-y^2)/2 가 0 이 되는 방향")
for th in [np.pi/4, -np.pi/4]:
u = np.array([np.cos(th), np.sin(th)])
print(" %6.1f도 u^T H u = %+.3e" % (np.degrees(th), u @ H0 @ u))
# (x,y) 실제 f 이차 근사 오차
# (+0.1,+0.2) 1.08314108 1.08500000 -0.00185892
# (+0.3,-0.2) 1.32295150 1.32500000 -0.00204850
# (+0.5,+0.5) 1.44688904 1.50000000 -0.05311096
# 영방향 확인: 이차형식 (x^2-y^2)/2 가 0 이 되는 방향
# 45.0도 u^T H u = +2.220e-16
# -45.0도 u^T H u = +2.220e-16
# 참값은 0 이며 93강에서 본 안장의 c=0 등고선 y = ±x 입니다.
# --- 문제 5: 임계점에서 이차항만 남는다 ---------------------------------
G = lambda x, y: x**2 + 3*x*y + y**2
HG = np.array([[2.0, 3.0], [3.0, 2.0]])
print(" grad G(0,0) = (0, 0), H =\n", HG)
print(" 고유값 %s -> 부호가 섞여 안장" % np.linalg.eigvalsh(HG))
print(" 방향 G(t u)/t^2 u^T H u / 2")
for th in [0.0, np.pi/4, 3*np.pi/4]:
u = np.array([np.cos(th), np.sin(th)]); t = 1e-3
print(" %6.1f도 %+14.8f %+14.8f" % (np.degrees(th), G(*(t*u))/t**2, 0.5*(u @ HG @ u)))
# grad G(0,0) = (0, 0), H =
# [[2. 3.]
# [3. 2.]]
# 고유값 [-1. 5.] -> 부호가 섞여 안장
# 방향 G(t u)/t^2 u^T H u / 2
# 0.0도 +1.00000000 +1.00000000
# 45.0도 +2.50000000 +2.50000000
# 135.0도 -0.50000000 -0.50000000
# 고유벡터 방향에서 정확히 lambda/2 입니다. 5/2 와 -1/2 입니다.
세 결과가 이 강의의 요지입니다. 이차 근사의 오차가 세제곱으로 줄고, 상한의 차수가 정확하며, 임계점에서 함수가 이차형식이 됩니다.
101강에서 이 사실을 판정으로 만듭니다.
정답.
| 기호 | 읽는 법 | 뜻 |
|---|---|---|
| 이차 테일러 다항식 | 이차까지의 근사입니다 | |
| 나머지항 | 차 근사의 오차입니다 | |
| \mathbf | 중간점 | 선분 위의 알 수 없는 점입니다 |
| M=\max\lVert H\rVert_ | 곡률의 크기 | 상한의 계수입니다 |
| 영방향 | null direction | 입니다 |
| 다중지표 | 고차 항을 적는 표기입니다 | |
| 다중지표 계승 | 입니다 | |
| 이차 모형 | 최적화가 최소화할 대상입니다 | |
| 신뢰반경 | 모형을 믿는 범위입니다 |
다음 101강에서는 임계점의 분류를 다룹니다. 이 강의의 나머지항과 99강의 레일리 몫을 합쳐 고유값의 부호가 극값을 결정함을 증명합니다. 이변수에서 와 만으로 판정하는 실용적인 방법을 세우고, 심화 5에서 본 준정치의 경우를 정확히 다룹니다.