높은 분산으로 신경망이 데이터를 과대적합하는 문제가 의심된다면 가장 처음 시도해야 할 것은 정규화입니다
높은 분산을 해결하는 다른 방법은 더 많은 훈련 데이터를 얻는 것입니다
꽤 믿을만한 방법이지만더 많은 훈련 데이터를 얻는 것은 비용이 많이 들어가게 마련입니다
그러나 정규화를 추가하는 것은 과대적합을 막고 신경망의 분산을 줄이는데 도움이 됩니다
정규화가 어떻게 작동하는지 살펴봅시다
로지스틱 회귀를 사용해 이 아이디어를발전시켜 보겠습니다
로지스틱 회귀는 다음과 같이 정의된비용 함수 J를 최소화하는 것임을 기억하시나요
훈련 샘플의 개별적인 예측의 손실에 관한 함수입니다 로지스틱 회귀의 w와 b는 매개변수입니다
w는 x차원의 매개변수 벡터이고 b는 실수입니다
따라서 로지스틱 회귀에 정규화를 추가하기 위해서 정규화 매개변수라고 부르는 λ를 추가해야 합니다
곧 자세히 설명할 것이지만 λ를 2m으로 나누고 w 제곱의 노름을 곱해줍니다 여기서 w 제곱의 노름은 j의 1부터 nx까지
wj^2의 값을 더한 것과 같습니다 w의 전치행렬 곱하기 w와도 같습니다
매개변수 벡터 w의 유클리드 노름의제곱입니다

이것을 L2 정규화라고 부릅니다
여기서 매개변수 벡터 w의 유클리드 노름, 즉 L2 노름을 사용하고 있기 때문입니다
왜 매개변수 w만 정규화할까요?
왜 b에 관한 것은 추가하지 않을까요?
실제로 가능합니다만 그러나 보통 생략합니다
보통 매개변수 w는 꽤 높은 차원의 매개변수 벡터이기 때문입니다
특히 높은 분산을 가질 때 w는 많은 매개변수를 갖습니다
반면에 b는 하나의 숫자입니다 따라서 거의 모든 매개변수는 b가 아닌 w에 있습니다 이 마지막 항을 넣어도 실질적인 차이는 없을 겁니다
왜냐하면 많은 매개변수 중 b는 하나의 매개변수이기 때문입니다
실제로 저는 이 항을 포함하지 않습니다 그러나 원한다면 해도 됩니다
따라서 L2 정규화는 가장 일반적인 정규화입니다
사람들이 L1 정규화에 대해 얘기하는 것도 들어보셨을겁니다
L2 노름 대신에 다음과 같은 항을 추가하게 됩니다
λ를 m으로 나눈 값에 |w|의 합을 더해줍니다 매개변수 벡터 w의 L1 노름이라고도 불립니다
아래 첨자 1이 있습니다 m 앞에 곱하는 2는 스케일링 상수입니다
L1 정규화를 사용하게 되면 w는 희소해지는데 이는 w 벡터 안에 0이 많아진다는 의미입니다
어떤 사람들은 이것이 모델을 압축하는데도움이 된다고 말합니다
왜냐하면 특정 매개변수가 0일 경우 메모리가 적게 필요하기 때문입니다
그러나 모델을 희소하게 만들기 위해 L1 정규화를 사용하는 것은 큰 도움이 되지 않습니다
모델을 압축하겠다는 목표가 있지 않는 이상 이 정규화를 많이 사용하지 않습니다
사람들이 네트워크를 훈련할 때는L2 정규화를 훨씬 더 많이 사용합니다
여기 약간의 표기 실수가 있었네요
마지막 세부 사항으로 여기 있는 λ를 정규화 매개변수라고 부릅니다 개발 세트 혹은 교차 검증 세트를주로 사용합니다
다양한 값을 시도해서 훈련 세트에 잘 맞으면서 두 매개변수의 노름을 잘 설정해
과대적합을 막을 수 있는 최적의 값을 찾습니다 따라서 λ는 설정이 필요한 또 다른 하이퍼파라미터입니다
프로그래밍 예제를 할 때 lambda는 파이썬의 명령어입니다 따라서 예제에서는 a 없이 lambd로 표기했습니다
파이썬에 내장되어 있는 명령어와충돌하지 않기 위해서입니다
따라서 mbd로 람다 정규화 매개변수를 나타냈습니다
따라서 이것이 로지스틱 회귀에 대한 L2 정규화를 나타내는 방법입니다
신경망은 어떨까요?
신경망에는 비용 함수가 있습니다
모든 파라미터 w^[1], b^[1]부터w^[L], b^[L]까지의 매개변수를 갖는 함수입니다
L은 신경망에 있는 층의 개수입니다
따라서 비용함수는 훈련 샘플의 m까지의 손실의 합을 m으로 나눈 값입니다
여기에 정규화를 더하기 위해 λ를 2m으로 나눈 값 곱하기 매개변수 w 노름 제곱의 모든 값을 더해줍니다
여기 있는 행렬의 노름은 즉 노름의 제곱은 i와 j에 해당하는 각각의 행렬의 원소를 제곱한 것을 모두 더해준 값입니다
합의 범위를 정의하고 싶다면 i는 1부터 n^[l-1]이고 j는 1부터 n^[l]까지로 합니다
왜냐하면 w는 (n^[l-1], n^[l]) 차원의 행렬이기 때문입니다
이것은 해당 층 l-1과 l의 은닉 유닛의 개수를 나타냅니다
따라서 이 행렬의 노름은 프로베니우스 노름이라고 부릅니다
아래 첨자에 F를 표시해줍니다 선형 대수학에서는 심오한 이유 때문에
이것을 행렬의 L2 노름이라고 부르는 대신프로베니우스 노름이라고 부릅니다
행렬의 L2 노름이라고 부르는게 더 자연스럽다는 것을 알지만
여러분이 몰라도 되는관례적인 이유에 따라서프로베니우스 노름이라고 부릅니다
행렬의 원소 제곱의 합이라는 뜻입니다 그럼 이것으로 경사 하강법을 어떻게 구현할까요?
전에는 역전파의 dw를 계산했습니다

역전파는 w에 대응하는 J의 편미분 값을 제공했습니다
주어진 l에 대한 w입니다 그리고 w^[l]을 w^[l] 빼기 학습률 곱하기 dw^[l]로 업데이트했습니다
이것은 추가적인 정규화 항을 더해주기 이전의 값입니다
따라서 정규화 항을 더해주게 되면 dw^[l]에 λ 나누기 m 곱하기 w^[l]을 더해줍니다
그리고 이 값을 전과 같은 방식으로 계산합니다
이 새로운 dw^[l]의 정의는 여전히 비용함수의 미분에 대한 올바른 정의입니다
매개변수에 관해 끝에 정규화 항을 더해준 것뿐입니다
이러한 이유 때문에 L2 정규화는 가중치 감쇠라고 불리기도 합니다
여기 dw^[l]의 정의를 아래에 적용시키면 w^[l]은 w^[l]에
학습률 α 곱하기 역전파에서 온 것들
더하기 λ를 m으로 나눈 값 곱하기 w^[l]이 됩니다
그리고 여기는 빼기가 됩니다이 값은 w^[l]
빼기
αλ 나누기 m 곱하기 w^[l]
빼기 α 곱하기
역전파에서 얻은 값들입니다
이 항은 행렬 w^[l]이 어떤 값이든 값이 약간 더 작아진다는 것을 보여줍니다
w^[l] 행렬의 값에 (1 -αλ/m)을곱해준 것과 같습니다
행렬 w^[l]에서 αλ/m 곱하기 w^[l] 만큼을 빼준 것이죠
따라서 행렬 w^[l]의 값보다 더 작아지게 됩니다
따라서 이것이 L2 노름 정규화가 가중치 감쇠라고 불리는 이유입니다
w^[l]에 α 곱하기 dw^[l]의 값을 빼서 값을 업데이트하는 것은
원래의 경사 하강법과 같지만 w^[l]에 1보다 작은 값을 곱해주게 됩니다
w^[l]에 1보다 작은 값을 곱해주게 됩니다
따라서 L2 정규화의 또 다른 이름은 가중치 감쇠입니다
이런 이름을 얻게 된 이유가 첫 번째 항이 이 값이기 때문입니다
1보다 살짝 작은 값을 가중치 행렬에 곱해준다는 이유에서 나온 이름입니다
이것이 신경망에서 L2 정규화를 구현하는 방법입니다
왜 정규화가 과대적합을 막는지에 관한 질문이 생길 수 있습니다
다음 비디오에서 정규화가 어떻게
과대적합을 막는지에 대한 직관을
빠르게 살펴봅시다