기계학습에서 손실에 항을 하나 더하는 일이 흔합니다.
가 하필 승수의 기호인 것이 우연일까요.
우연이 아닙니다. 이 문제는 제약 문제와 같습니다.
라그랑주 함수를 세우면 첫 형태가 그대로 나옵니다. 그리고 113강 문제 4의 해석으로 는 복잡도 예산의 가격입니다.
이 관점이 여러 질문에 답합니다.
| 질문 | 답 |
|---|---|
| 가 무엇인가 | 제약의 승수 |
| 이 왜 희소해를 주는가 | 단위구의 꼭짓점이 축 위에 있어서 |
| 능형은 왜 안 그런가 | 원에는 꼭짓점이 없어서 |
90강 문제 1에서 이미 예고했습니다. 그때 단위구가 마름모이고 그 꼭짓점이 축 위에 있어 해가 축에 붙기 쉽다고 했는데, 이 강의가 그 말을 정확히 합니다.
이것으로 05단원이 끝납니다.
문제. 능형회귀 를 봅니다.
(1) 해를 명시적으로 구하세요.
(2) 여러 에서 을 계산하세요.
(3) 제약 형태와의 관계를 말하세요.
생각의 실마리. 이차식이므로 미분해 으로 두면 풀립니다. 가 커지면 가 작아질 것입니다.
풀이. (1) 미분해 으로 두면
82강의 정규방정식에 가 더해진 형태입니다.
(2) 검산에서
| \lVert\mathbf{w}\rVert^ | 의 처음 세 성분 | |
|---|---|---|
가 커지면 이 줄어듭니다.
(3) 제약 형태에서 로 두면 같은 해입니다.
이 문제에서 배우는 것: 두 형태의 동치.
동치. 적절한 대응 아래
는 같은 해를 줍니다.
증명이 라그랑주 함수 자체입니다. 제약 형태의 라그랑주 함수가
이고 는 와 무관한 상수이므로 최소점에 영향을 주지 않습니다.
대응이 일대일은 아닙니다.
| 방향 | 성립 |
|---|---|
| 가 주어지면 가 정해집니다 | 성립합니다 |
| 가 주어지면 가 정해집니다 | 볼록이면 성립합니다 |
같은 곡선의 두 매개화이며, 검산의 표가 그 곡선 위의 점들입니다. 이면 제약이 없는 것과 같고, 이면 입니다.
실무에서는 벌점 형태를 씁니다. 제약 없는 문제라 04단원의 알고리즘을 그대로 쓸 수 있기 때문이며, 보다 가 조율하기 쉽습니다.
바로 확인 1.
확인 1-1. 능형회귀의 해를 쓰세요.
답. 입니다.
확인 1-2. 벌점 형태와 제약 형태의 관계를 쓰세요.
답. 라그랑주 함수에서 상수를 뺀 것이라 같은 해를 줍니다.
확인 1-3. 가 커지면 는 어떻게 됩니까?
답. 작아집니다.
문제. 같은 문제에서 제약 의 승수를 확인합니다.
(1) 여러 에서 와 잔차제곱합을 구하세요.
(2) 를 수치로 구하세요.
(3) 와 비교하세요.
생각의 실마리. 114강 문제 3의 포락선 정리를 씁니다. **부등식 제약에서 **였습니다.
풀이. 검산에서
| t=\lVert\mathbf{w}\rVert^ | RSS | 수치 | ||
|---|---|---|---|---|
정확히 일치합니다.
이 문제에서 배우는 것: 정규화 계수는 복잡도의 가격입니다.
**"복잡도 예산을 한 단위 늘리면 훈련오차가 만큼 줄어든다"**는 뜻입니다.
113강 문제 4의 잠재가격 해석이 그대로 옵니다.
| 분야 | 승수의 뜻 |
|---|---|
| 경제 | 자원 한 단위의 가치 |
| 물리 | 구속력의 크기 |
| 기계학습 | 복잡도 한 단위의 훈련오차 감소 |
를 고르는 일이 저울질임이 분명해집니다. 크면 훈련오차가 늘고 작으면 복잡도가 늡니다. 어디가 최선인지는 검증 성능이 정하며, 212강의 교차검증이 그 도구입니다.
이어야 하는 것도 114강에서 나옵니다. 예산을 늘리면 훈련오차가 늘 수 없으므로 부호가 정해집니다.
최적화 측면의 이득도 있습니다. 108강 심화 3에서 봤듯
조건수가 줄어 수렴이 빨라집니다. 91강에서 조건수가 큰 계를 다룰 때 정규화가 도움이 된다고 한 것과 같은 이야기입니다.
바로 확인 2.
확인 2-1. 와 의 관계를 쓰세요.
답. 입니다.
확인 2-2. 의 기계학습적 뜻을 쓰세요.
답. 복잡도 한 단위의 가격입니다.
확인 2-3. 정규화가 조건수에 미치는 영향을 쓰세요.
답. 로 줄어듭니다.
문제. 직교 설계에서 두 정규화의 해를 비교합니다.
(1) 라소의 해를 구하세요.
(2) 능형의 해를 구하세요.
(3) 이 되는 성분의 개수를 비교하세요.
생각의 실마리. 직교 설계이면 각 성분이 독립적으로 풀립니다. 한 변수 문제 개가 됩니다.
풀이. 의 열이 정규직교이면 이고 라 두면 목적함수가 성분별로 갈립니다.
(1) 라소는 각 성분에서
를 풀며, 답이
(2) 능형은
(3) 검산에서 일 때
| 라소 해 | 의 개수 | |
|---|---|---|
| 능형 해 | 의 개수 | |
|---|---|---|
라소는 정확히 을 만들고 능형은 절대 만들지 않습니다.
이 문제에서 배우는 것: 연성 문턱.
연성 문턱 연산자.
**이면 정확히 **입니다. 작은 계수가 잘려 나갑니다.
| 정규화 | 해 | 가 작을 때 |
|---|---|---|
| 능형 | 작아지지만 은 아닙니다 | |
| 라소 | 정확히 입니다 |
왜 이 차이가 나는지는 미분에 있습니다. 은 원점에서 미분이 이라 밀어내는 힘이 없습니다. 는 원점에서 미분불가능이고 **열등미분이 **라 그만큼의 힘이 있습니다.
KKT로 정확히 봅니다. 이면 정류 조건이
이고 이면 열등미분을 써서
둘째 식이 정확히 문턱 조건입니다. 107강 심화 4에서 본 열등경사가 여기서 쓰입니다.
114강의 상보성과 같은 구조입니다. 그때 이 "둘 중 하나는 "이었고, 여기서는 "계수가 이거나 문턱을 넘거나"입니다.
바로 확인 3.
확인 3-1. 연성 문턱 연산자를 쓰세요.
답. 입니다.
확인 3-2. 능형의 직교 설계 해를 쓰세요.
답. 이며 절대 이 되지 않습니다.
확인 3-3. 이 최적일 조건을 쓰세요.
답. 입니다.
문제. 같은 목적함수를 두 공 위에서 최소화합니다.
(1) 일 때 두 해를 구하세요.
(2) 일 때 구하세요.
(3) 언제 이 을 만드는지 판정하세요.
생각의 실마리. 90강 문제 1에서 단위구가 마름모라 했습니다. 꼭짓점이 축 위에 있습니다.
풀이. 검산에서
| 목표 \mathbf | 공 위 해 | 공 위 해 | 이 을 만드는가 |
|---|---|---|---|
| 예 | |||
| 아니오 |
**첫 줄에서 해가 정확히 꼭짓점 **입니다. 둘째 줄에서는 변 위에 있습니다.
이 문제에서 배우는 것: 희소성은 꼭짓점에서 옵니다.
기하로 읽으면 명확합니다. 등고선이 부풀어 오르다 공에 처음 닿는 자리가 해인데,
| 공 | 모양 | 닿는 자리 |
|---|---|---|
| \ell^ | 원 | 매끄러운 경계 위 아무 곳 |
| \ell^ | 마름모 | 꼭짓점에 닿기 쉽습니다 |
꼭짓점이 특별한 이유는 그곳에서 경계가 꺾이기 때문입니다. 접선이 하나로 정해지지 않고 여러 방향의 등고선이 모두 그 점에서 처음 닿을 수 있습니다.
차원이 오르면 효과가 커집니다. 차원 공은 개의 꼭짓점을 갖고, 각 꼭짓점에서 개 성분이 입니다. 게다가 낮은 차원의 면들도 여러 성분을 으로 만듭니다.
| 공의 면 | 인 성분 수 |
|---|---|
| 꼭짓점 | 개 |
| 모서리 | 개 |
| 차원 면 | 개 |
둘째 줄의 반례가 정직합니다. 이 언제나 희소해를 주는 것은 아니며, 목표가 대각선 방향이면 변 위에 놓입니다.
가 클수록 꼭짓점에 붙기 쉽습니다. 공이 작아지면 상대적으로 목표가 멀어지고, 문제 3에서 본 대로 문턱이 높아져 더 많은 성분이 잘립니다.
바로 확인 4.
확인 4-1. 단위구의 모양을 쓰세요.
답. 마름모이며 꼭짓점이 축 위에 있습니다.
확인 4-2. 희소성이 어디서 옵니까?
답. 꺾인 꼭짓점이 넓은 범위의 목표를 끌어당기기 때문입니다.
확인 4-3. 이 언제나 희소해를 줍니까?
답. 아닙니다. 목표가 대각선 방향이면 변 위에 놓입니다.
문제. 참 계수가 인 자료를 만듭니다.
(1) 여러 에서 라소를 풀고 이 된 성분을 세세요.
(2) 선택된 성분이 참 위치와 맞는지 보세요.
(3) 능형과 비교하세요.
생각의 실마리. 참 계수에 이 다섯 개입니다. 라소가 그 위치를 찾아낼 수 있을지 봅니다.
풀이. 검산에서
| 이 된 성분 수 | 선택된 성분 | 추정 오차 | |
|---|---|---|---|
에서 정확히 를 골랐습니다. 참 계수가 이 아닌 위치와 완전히 일치합니다.
(3) 능형은
| 이 된 성분 수 | 선택 | 추정 오차 | |
|---|---|---|---|
| 전부 | |||
| 전부 |
하나도 이 되지 않습니다.
이 문제에서 배우는 것: 정규화가 모형 선택을 합니다.
두 가지를 함께 얻는 것이 라소의 값어치입니다. 계수를 추정하면서 어느 변수가 필요한지도 답합니다.
의 저울질을 표에서 읽습니다.
| 선택 | 오차 | |
|---|---|---|
| 너무 작음 | 잡음까지 선택 | 과적합 |
| 적당 | 참 변수만 | 최선 |
| 너무 큼 | 계수가 과하게 축소 | 편향 |
가 변수 선택은 완벽한데 오차가 보다 큽니다. 선택된 계수들이 만큼 작아지는 축소 편향 때문이며, 실무에서는 선택한 뒤 다시 최소제곱으로 추정하는 이단계 방법을 쓰기도 합니다.
능형과의 역할 분담을 정리합니다.
| 상황 | 적합한 정규화 |
|---|---|
| 참 계수가 희소합니다 | 라소 |
| 모든 변수가 조금씩 기여합니다 | 능형 |
| 상관 높은 변수가 무리 지어 있습니다 | 엘라스틱 넷 |
| 조건수가 나쁩니다 | 능형 |
셋째 줄이 절충안입니다. 두 벌점을 함께 씁니다.
라소는 상관이 높은 변수 무리에서 하나만 고르는 경향이 있는데, 항이 그것을 완화해 무리째 선택합니다.
211강에서 이 주제를 정면으로 다루며, 210강의 편향-분산 분해가 선택의 이론적 근거입니다.
바로 확인 5.
확인 5-1. 라소가 동시에 하는 두 가지를 쓰세요.
답. 계수 추정과 변수 선택입니다.
확인 5-2. 가 너무 크면 무엇이 문제입니까?
답. 계수가 과하게 축소되어 편향이 생깁니다.
확인 5-3. 참 계수가 희소하지 않으면 어느 정규화가 낫습니까?
답. 능형입니다.
| 개념 | 내용 |
|---|---|
| 동치 | 벌점 제약 |
| 의 뜻 | 제약의 승수, 복잡도의 가격 |
| 포락선 | |
| 능형 해 | (X^{\top}X+\lambda I)^{-1}X^{\top}\mathbf |
| 라소 해(직교) |
| 정규화 | 공 | 희소성 | 최적화 |
|---|---|---|---|
| \ell^ | 원 | 없음 | 조건수 개선 |
| \ell^ | 마름모 | 있음 | 미분불가 |
| 엘라스틱 넷 | 둘의 혼합 | 무리째 | 절충 |
| 희소성의 근거 | 내용 |
|---|---|
| 기하 | 꼭짓점이 축 위에 있습니다 |
| 대수 | 원점에서 열등미분이 |
| KKT | 이면 |
| 연산 | 연성 문턱이 잘라 냅니다 |
| 자주 하는 실수 | 바로잡기 |
|---|---|
| 벌점과 제약을 다른 문제로 봅니다 | 같은 문제입니다 |
| 를 임의의 상수로 봅니다 | 제약의 승수입니다 |
| 이 항상 희소라 봅니다 | 경향일 뿐입니다 |
| 능형으로 변수 선택을 시도합니다 | 이 되지 않습니다 |
| 정규화를 일반화 도구로만 봅니다 | 최적화도 돕습니다 |
문제 6. 능형회귀의 해를 쓰세요.
답. 입니다.
문제 7. 벌점 형태와 제약 형태의 관계를 쓰세요.
답. 라그랑주 함수에서 상수 를 뺀 것이라 같은 해를 줍니다.
문제 8. 와 의 관계를 쓰세요.
답. 입니다.
문제 9. 연성 문턱 연산자를 쓰세요.
답. 입니다.
문제 10. 이고 이면 라소 해는 얼마입니까?
답. 이므로 입니다.
문제 11. 같은 상황에서 능형 해를 구하세요.
답. 이며 이 아닙니다.
문제 12. 이 라소 최적일 조건을 쓰세요.
답. 입니다.
문제 13. 단위구의 꼭짓점 개수를 차원에서 쓰세요.
답. 개입니다.
문제 14. 그 꼭짓점에서 인 성분은 몇 개입니까?
답. 개입니다.
문제 15. 정규화가 조건수에 미치는 영향을 쓰세요.
답. 로 줄어듭니다.
문제 16. 라소가 상관 높은 변수 무리에서 어떻게 행동합니까?
답. 하나만 고르는 경향이 있습니다.
문제 17. 그것을 완화하는 방법을 쓰세요.
답. 엘라스틱 넷으로 항을 함께 씁니다.
문제 18. 축소 편향을 줄이는 실무 기법을 쓰세요.
답. 라소로 변수를 고른 뒤 그 변수들로 다시 최소제곱을 합니다.
심화 1. 라소의 KKT 조건을 정확히 세우세요.
은 원점에서 미분불가능하므로 열등미분이 필요합니다.
목적함수 의 최적성 조건은
성분별로 풀어 씁니다. 라 두면
| 경우 | 조건 |
|---|---|
셋째 줄이 희소성의 정확한 근거입니다. 잔차와의 상관이 를 넘지 못하는 변수는 계수가 입니다.
114강의 상보성과 같은 구조입니다. 활성인 변수는 등식을, 비활성인 변수는 부등식을 만족합니다.
| 114강 | 116강 |
|---|---|
| 활성 제약 | 선택된 변수 |
| 비활성 | 배제된 변수 |
직교 설계에서 문제 3의 공식이 나옵니다. 이면 이므로
둘을 합치면 연성 문턱입니다.
**가 충분히 크면 모든 계수가 **입니다. 조건이 이므로
이 값이 정규화 경로의 시작점이며, 실무에서 범위를 로 잡습니다.
심화 2. 근위 경사법으로 라소를 푸는 방법을 설명하세요.
이 미분불가능하므로 04단원의 경사하강법을 그대로 쓸 수 없습니다. 매끄러운 부분과 그렇지 않은 부분을 나눕니다.
매끄러운 부분만 선형근사하고 나머지는 그대로 둡니다. 108강의 매끄러움 상한을 쓰면
이므로 오른쪽에 를 더한 것을 최소화합니다. 정리하면
**"경사하강 한 걸음 뒤 근위 연산자를 적용"**하는 형태입니다.
근위 연산자.
이면 근위 연산자가 연성 문턱입니다. 문제 3에서 푼 것이 정확히 이 문제입니다.
알고리즘이 두 줄이 됩니다.
114강 문제 5의 사영과 같은 자리입니다. 사영이 지시함수의 근위 연산자이므로, 근위 경사법이 사영 경사법의 일반화입니다.
| 근위 연산자 | |
|---|---|
| 지시함수 I_ | 사영 \Pi_ |
| \lambda\lVert\cdot\rVert_ | 연성 문턱 |
| \tfrac\lambda2\lVert\cdot\rVert^ | 축소 |
| 항등 |
수렴 속도도 04단원 그대로입니다. 이고 111강의 가속을 붙이면 가 되며, 그것이 FISTA입니다.
심화 3. 정규화의 확률적 해석을 소개하세요.
정규화가 사전분포로 읽힙니다. 150강의 최대사후추정을 미리 봅니다.
로그를 취하면
둘째 항이 정규화입니다.
| 사전분포 | 정규화 | |
|---|---|---|
| 가우스 | 능형 | |
| 라플라스 | 라소 | |
| 균등 | 상수 | 없음 |
둘째 줄이 라소의 확률적 정체입니다. 라플라스 분포는 가우스보다 꼬리가 두껍고 원점에서 뾰족해, 계수가 정확히 일 가능성을 높게 봅니다.
잡음이 크거나 사전분포가 좁으면 가 큽니다. 자료가 적어 잡음이 상대적으로 크면 강한 정규화가 맞다는 직관과 맞습니다.
이 해석의 이득이 둘 있습니다.
첫째, 에 뜻이 생깁니다. 임의로 고르는 상수가 아니라 사전 믿음의 강도입니다.
둘째, 불확실성을 얻습니다. 최대사후추정은 사후분포의 최빈값일 뿐이고, 전체 분포를 보면 계수의 신뢰구간까지 나옵니다.
다만 라소의 베이즈 해석에는 미묘한 점이 있습니다. 라플라스 사후분포의 최빈값은 희소하지만 평균은 희소하지 않습니다. 베이즈 관점에서 계수가 정확히 일 확률은 이며, 이 불일치가 희소 베이즈 방법의 연구 주제입니다.
150강과 210강에서 이 주제를 이어받습니다.
심화 4. 정규화가 일반화에 왜 도움이 되는지 논하세요.
210강의 편향-분산 분해를 미리 씁니다.
정규화는 편향을 늘려 분산을 줄입니다.
| 편향 | 분산 | |
|---|---|---|
| 작음 | 큼 | |
| 적당 | 중간 | 중간 |
| 큼 | 큼 | 작음 |
둘의 합이 최소가 되는 자리가 최적 이며, 검산의 문제 5에서 의 추정 오차가 가장 작았던 것이 그 근처입니다.
능형회귀의 분산 감소를 명시적으로 볼 수 있습니다. 82강의 최소제곱 추정량의 공분산이
인데, 의 조건수가 크면 이 값이 폭발합니다. 91강에서 경고한 그대로입니다.
능형에서는
이며 가 작은 고유값을 받쳐 분산이 크게 줍니다.
기하적 해석도 있습니다. 102강 심화 4에서 평탄한 최소가 잘 일반화한다고 했는데, 정규화는 손실 지형에 를 더해 평탄한 방향을 없앱니다. 파라미터가 조금 흔들려도 손실이 크게 변하지 않는 자리를 고르게 됩니다.
딥러닝에서는 더 복잡합니다. 명시적 정규화 없이도 SGD 자체가 암묵적 정규화 효과를 갖는다는 관찰이 있으며, 238강과 214강에서 다룹니다.
심화 5. 다른 정규화들을 정리하세요.
과 말고도 여럿 있습니다. 제약의 기하가 각각 다른 구조를 만듭니다.
| 정규화 | 형태 | 만드는 구조 |
|---|---|---|
| \ell^ | \lVert\mathbf{w}\rVert^ | 축소 |
| \ell^ | \lVert\mathbf{w}\rVert_ | 희소 |
| 엘라스틱 넷 | \alpha\lVert\cdot\rVert_{1}+(1-\alpha)\lVert\cdot\rVert^ | 무리 희소 |
| 그룹 라소 | \sum_{g}\lVert\mathbf{w}_{g}\rVert_ | 그룹 단위 희소 |
| 총변동 | 조각별 상수 | |
| 핵노름 | \lVert W\rVert_{*}=\sum\sigma_ | 저계수 |
넷째 줄이 흥미롭습니다. 그룹 안에서는 이고 그룹 사이에서는 이라, 그룹 전체가 통째로 이 되거나 전부 살아남습니다.
여섯째 줄이 88강과 이어집니다. 핵노름은 특이값의 합이며, 이 벡터에 하는 일을 행렬의 특이값에 합니다.
89강의 저계수 근사가 계수를 직접 정하는 방법이라면, 핵노름 정규화는 볼록 완화로 같은 효과를 냅니다. 계수 제약은 비볼록인데 핵노름은 볼록이라 다룰 수 있습니다.
| 원래 | 볼록 완화 |
|---|---|
| (영이 아닌 개수) | \lVert\mathbf{w}\rVert_ |
| \lVert W\rVert_ |
두 줄이 같은 발상입니다. 세는 것은 비볼록이라 어렵고, 크기를 재는 것으로 바꾸면 볼록해집니다.
딥러닝의 정규화는 성격이 다릅니다.
| 기법 | 방식 |
|---|---|
| 가중치 감쇠 | 벌점 |
| 드롭아웃 | 확률적 잡음 |
| 배치 정규화 | 척도 재조정 |
| 조기 종료 | 암묵적 정규화 |
| 자료 증강 | 불변성 부여 |
넷째 줄이 이 강의와 특히 이어집니다. 조기 종료는 명시적 벌점이 없지만, 경사하강법이 큰 고유값 방향부터 학습하므로 일찍 멈추면 작은 고유값 방향이 억제됩니다. 109강 문제 1에서 본 성분별 수렴 속도가 그 근거입니다.
심화 6. 05단원을 정리하고 06단원을 예고하세요.
05단원은 제약을 다루는 법을 세웠습니다.
| 강의 | 한 일 |
|---|---|
| 113 | 등식 제약과 승수의 뜻 |
| 114 | 부등식 제약과 상보성 |
| 115 | 쌍대 문제와 강쌍대성 |
| 116 | 정규화가 제약임을 확인 |
하나의 관점이 단원을 관통합니다.
| 강의 | 가격의 형태 |
|---|---|
| 113 | |
| 114 | , 부호가 정해짐 |
| 115 | 쌍대변수, 자원의 가격 |
| 116 | 복잡도 한 단위의 훈련오차 |
95강 문제 4가 이 단원 전체의 씨앗이었습니다. 기울기가 등고선에 수직이라는 사실 하나에서 라그랑주 조건이 두 줄로 나왔고, 나머지가 그 위에 쌓였습니다.
S4의 도구도 계속 쓰였습니다.
| S4 | 쓰인 곳 |
|---|---|
| 74강 네 부분공간 | 113강 심화 1의 증명 |
| 86강 레일리 몫 | 113강 심화 3의 고유값 문제 |
| 90강 단위구 | 116강 희소성의 기하 |
| 88강 특이값 | 116강 심화 5의 핵노름 |
06단원은 방향을 바꿉니다.
최적화를 시간에 따라 흐르는 연속 과정으로 봅니다. 109강의 경사하강법이 이 미분방정식을 이산화한 것이며, 그 관점에서 여러 가지가 새로 보입니다.
| 강의 | 하는 일 |
|---|---|
| 117 | 1계 미분방정식을 세웁니다 |
| 118 | 선형 미분방정식과 안정성 |
| 119 | 경사흐름과 연속시간 최적화 |
| 120 | 수치 적분법 |
118강이 101강과 만납니다. 평형점의 안정성을 야코비의 고유값으로 판정하는데, 경사흐름에서 그 야코비가 이므로 극소가 안정한 평형점이고 안장이 불안정한 평형점입니다.
119강이 111강을 다시 봅니다. 모멘텀이 감쇠 진동 방정식의 이산화였고, 그 관점에서 최적 감쇠를 물리로 이해할 수 있습니다.
120강이 이산화 자체를 다룹니다. 오일러법과 룽게쿠타를 배우면, 다른 이산화가 다른 최적화 알고리즘을 낳는다는 관점이 열립니다.
import numpy as np
rng = np.random.default_rng(20260809)
# 공통 자료
n, p = 60, 8
Xd = rng.standard_normal((n, p))
wt = np.array([3.0, -2.0, 0.0, 0.0, 1.5, 0.0, 0.0, 0.0])
yv = Xd @ wt + 0.5*rng.standard_normal(n)
# --- 문제 1: 벌점과 제약이 같은 문제다 ----------------------------------
print(" 능형: min |Xw-y|^2 + lam|w|^2 <-> min |Xw-y|^2 s.t. |w|^2 <= t")
G = Xd.T @ Xd; c = Xd.T @ yv
print(" lam |w|^2 = t w 의 처음 세 성분")
for lam in [0.0, 1.0, 10.0, 100.0]:
w = np.linalg.solve(G + lam*np.eye(p), c)
print(" %8.1f %12.6f %s" % (lam, w @ w, np.round(w[:3], 4)))
print(" lam 이 커지면 t 가 작아집니다. 둘은 같은 곡선의 두 매개화입니다")
# 능형: min |Xw-y|^2 + lam|w|^2 <-> min |Xw-y|^2 s.t. |w|^2 <= t
# lam |w|^2 = t w 의 처음 세 성분
# 0.0 15.156099 [ 3.0115 -1.9851 0.044 ]
# 1.0 14.592775 [ 2.9571 -1.9441 0.0411]
# 10.0 10.818732 [ 2.549 -1.6533 0.0255]
# 100.0 2.189623 [ 1.0981 -0.7345 0.0225]
# lam 이 커지면 t 가 작아집니다. 둘은 같은 곡선의 두 매개화입니다
# --- 문제 2: 승수가 정규화 계수다 ---------------------------------------
print(" 제약 |w|^2 <= t 의 승수가 lam 인지 확인합니다")
print(" lam t = |w|^2 RSS = |Xw-y|^2 수치 dRSS/dt -lam")
for lam in [1.0, 5.0, 20.0]:
h = 1e-4
def rss_of_lam(l):
w = np.linalg.solve(G + l*np.eye(p), c)
return np.sum((Xd @ w - yv)**2), w @ w
r0, t0 = rss_of_lam(lam)
rp, tp = rss_of_lam(lam - h); rm, tm = rss_of_lam(lam + h)
d = (rp - rm)/(tp - tm)
print(" %8.1f %12.6f %14.6f %14.6f %10.1f" % (lam, t0, r0, d, -lam))
# 제약 |w|^2 <= t 의 승수가 lam 인지 확인합니다
# lam t = |w|^2 RSS = |Xw-y|^2 수치 dRSS/dt -lam
# 1.0 14.592775 14.705845 -1.000000 -1.0
# 5.0 12.670548 20.312809 -5.000000 -5.0
# 20.0 8.240325 71.695722 -20.000000 -20.0
# dRSS/dt = -lam 이 정확히 맞습니다. lam 은 복잡도 한 단위의 가격입니다.
# --- 문제 3: L1 은 왜 정확히 0 을 만드는가 ------------------------------
print(" 직교 설계에서 라소의 해는 연성 문턱입니다")
Q, _ = np.linalg.qr(rng.standard_normal((n, p))) # 직교 열
z = np.array([3.0, -2.0, 0.6, -0.3, 1.5, 0.15, -0.05, 0.9])
ytmp = Q @ z
print(" lam 해 w (연성 문턱 sign(z) max(|z|-lam, 0)) 0 의 개수")
for lam in [0.0, 0.2, 0.5, 1.0]:
w = np.sign(z)*np.maximum(np.abs(z) - lam, 0.0) + 0.0
print(" %7.2f %s %d" % (lam, np.array2string(np.round(w, 3) + 0.0, max_line_width=200), int((w == 0).sum())))
print(" 능형은 같은 상황에서 z/(1+lam) 이라 0 이 되지 않습니다")
for lam in [0.2, 0.5, 1.0]:
w = z/(1+lam)
print(" %7.2f %s %d" % (lam, np.array2string(np.round(w, 3), max_line_width=200), int((np.abs(w) < 1e-12).sum())))
# 직교 설계에서 라소의 해는 연성 문턱입니다
# lam 해 w (연성 문턱 sign(z) max(|z|-lam, 0)) 0 의 개수
# 0.00 [ 3. -2. 0.6 -0.3 1.5 0.15 -0.05 0.9 ] 0
# 0.20 [ 2.8 -1.8 0.4 -0.1 1.3 0. 0. 0.7] 2
# 0.50 [ 2.5 -1.5 0.1 0. 1. 0. 0. 0.4] 3
# 1.00 [ 2. -1. 0. 0. 0.5 0. 0. 0. ] 5
# 능형은 같은 상황에서 z/(1+lam) 이라 0 이 되지 않습니다
# 0.20 [ 2.5 -1.667 0.5 -0.25 1.25 0.125 -0.042 0.75 ] 0
# 0.50 [ 2. -1.333 0.4 -0.2 1. 0.1 -0.033 0.6 ] 0
# 1.00 [ 1.5 -1. 0.3 -0.15 0.75 0.075 -0.025 0.45 ] 0
# 능형은 비율로 줄이고 라소는 일정량을 빼서 문턱 아래를 잘라 냅니다.
# --- 문제 4: 두 공의 모양이 결과를 가른다 -------------------------------
print(" 같은 목적함수를 L2 공과 L1 공 위에서 최소화합니다")
th = np.linspace(0, 2*np.pi, 400001)
P2 = np.stack([np.cos(th), np.sin(th)], 1)
s = np.linspace(-1, 1, 400001)
cand = np.vstack([np.stack([s, 1-np.abs(s)], 1), np.stack([s, np.abs(s)-1], 1)])
print(" 목표 b L2 공 위 해 L1 공 위 해 L1 이 0 을 만드는가")
for b2 in [np.array([1.5, 0.2]), np.array([1.0, 0.35])]:
q2 = P2[((P2-b2)**2).sum(1).argmin()]
q1 = cand[((cand-b2)**2).sum(1).argmin()]
print(" %-12s %-20s %-18s %s"
% (np.array2string(b2), np.array2string(np.round(q2,4)),
np.array2string(np.round(q1,4) + 0.0), "예" if np.any(np.abs(q1) < 1e-3) else "아니오"))
print(" 목표가 축에 가까우면 L1 해가 꼭짓점 (1,0) 에 붙습니다")
print(" L2 해는 어느 경우에도 성분이 0 이 되지 않습니다")
# 같은 목적함수를 L2 공과 L1 공 위에서 최소화합니다
# 목표 b L2 공 위 해 L1 공 위 해 L1 이 0 을 만드는가
# [1.5 0.2] [0.9912 0.1322] [1. 0.] 예
# [1. 0.35] [0.9439 0.3303] [0.825 0.175] 아니오
# 목표가 축에 가까우면 L1 해가 꼭짓점 (1,0) 에 붙습니다
# L2 해는 어느 경우에도 성분이 0 이 되지 않습니다
# 희소성은 보장이 아니라 경향입니다.
# --- 문제 5: 실제 자료에서 변수 선택 ------------------------------------
print(" 참 계수 w = %s (0 이 다섯 개)" % wt)
def lasso(X, y, lam, iters=20000):
w = np.zeros(X.shape[1]); L = np.linalg.norm(X, 2)**2
for _ in range(iters):
g = X.T @ (X @ w - y)
u = w - g/L
w = np.sign(u)*np.maximum(np.abs(u) - lam/L, 0.0)
return w
print(" lam 0 이 된 성분 수 선택된 성분 추정 오차")
for lam in [0.5, 5.0, 20.0, 50.0]:
w = lasso(Xd, yv, lam)
nz = np.where(np.abs(w) > 1e-8)[0]
print(" %7.1f %10d %-22s %.4f"
% (lam, p - len(nz), np.array2string(nz), np.linalg.norm(w - wt)))
print(" 능형은 어느 lam 에서도 0 이 나오지 않습니다")
for lam in [5.0, 50.0]:
w = np.linalg.solve(G + lam*np.eye(p), c)
print(" %7.1f %10d %-22s %.4f"
% (lam, int((np.abs(w) < 1e-8).sum()), "전부", np.linalg.norm(w - wt)))
# 참 계수 w = [ 3. -2. 0. 0. 1.5 0. 0. 0. ] (0 이 다섯 개)
# lam 0 이 된 성분 수 선택된 성분 추정 오차
# 0.5 1 [0 1 2 3 4 5 6] 0.0978
# 5.0 5 [0 1 4] 0.1720
# 20.0 5 [0 1 4] 0.5716
# 50.0 5 [0 1 4] 1.3763
# 능형은 어느 lam 에서도 0 이 나오지 않습니다
# 5.0 0 전부 0.3757
# 50.0 0 전부 1.8698
# lam=5 에서 참 계수의 위치 {0,1,4} 를 정확히 골라냈습니다.
문제 5의 결과가 이 강의의 결론입니다. 라소가 에서 참 계수의 위치를 정확히 찾아냅니다.
이것으로 05단원이 끝나고 117강에서 미분방정식으로 넘어갑니다.
정답.
| 기호 | 읽는 법 | 뜻 |
|---|---|---|
| 정규화 계수 | 제약의 승수입니다 | |
| 복잡도 예산 | 제약의 한도입니다 | |
| S_ | 연성 문턱 | 의 근위 연산자입니다 |
| \partial\lVert\cdot\rVert_ | 열등미분 | 원점에서 입니다 |
| 능형회귀 | ridge regression | 정규화입니다 |
| 라소 | lasso | 정규화입니다 |
| 엘라스틱 넷 | elastic net | 두 벌점의 혼합입니다 |
| \operatorname | 근위 연산자 | 사영의 일반화입니다 |
| 핵노름 | nuclear norm | 특이값의 합입니다 |
| \lambda_ | 경로의 시작 | 입니다 |
이것으로 05단원 제약이 있는 최적화가 끝납니다. 다음 117강부터 시작하는 06단원 미분방정식과 흐름에서는 최적화를 시간에 따라 흐르는 연속 과정으로 다시 봅니다. 109강의 경사하강법이 미분방정식 의 이산화이며, 그 관점에서 111강의 모멘텀이 감쇠 진동으로 읽힙니다. 120강 뒤에 관문 3이 62강부터 120강까지를 섞어 묻습니다.