[구글 머신러닝 단기집중과정] 12강

환공지능·2021년 7월 5일
0
post-thumbnail

1. 희소성을 위한 정규화 : L1 정규화

희소 벡터는 종종 많은 차원을 포함한다. 특성 교차를 생성하면 더 많은 차원이 발생한다. 이러한 고차원 특성 벡터가 주어지면 모델 크기가 커질 수 있으며 엄청난 양의 RAM이 필요하다.

가능하다면 고차원의 희소 벡터에서는 가중치가 정확하게 0으로 떨어지도록 유도하는 것이 좋다. 가중치가 정확하게 0일 경우 모델에서 해당 특성을 삭제한다. 특성을 없애면 RAM이 절약되고 모델의 노이즈가 줄어들 수 있다.

예를 들어, 캘리포니아뿐만 아니라 전 세계를 포괄하는 주택 데이터 세트를 생각해 보겠다. 분 단위(1분 =1/60도)로 전 세계 위도를 버케팅하면 약 10,000개의 차원을, 전 세계 경도를 버케팅하면 약 20,000개의 차원을 희소 인코딩에서 사용할 수 있다. 이러한 두 가지 특성에 대한 특성 교차를 통해 약 2억 개의 차원이 생성된다. 2억 개의 차원 중 많은 부분이 제한된 거주 지역(예: 바다 한가운데)을 나타내므로 이러한 데이터를 효과적인 일반화를 위해 사용하기는 어려울 것이다. 이와 같이 불필요한 차원을 저장하기 위해 RAM을 낭비하는 것은 어리석은 일일 것이다. 따라서 무의미한 차원의 가중치가 정확히 0이 되도록 하는 것이 중요하다. 그러면 추론 단계에서 이러한 모델 계수에 대한 저장 비용을 지불하지 않아도 된다.

적절히 선택한 정규화 항을 추가함으로써, 학습 시 수행한 최적화 문제에 이 아이디어를 적용할 수 있다.

L2 정규화를 통해 목표를 달성할 수 있을까요? 안타깝게도 그렇지 않다. L2 정규화는 가중치를 작은 값으로 유도하지만 정확히 0.0으로 만들지는 못한다.

이에 대한 대안은 모델에서 0이 아닌 계수 값의 수에 페널티를 주는 정규화 항을 생성해 보는 것이다. 0이 아닌 계수 값의 수를 늘리는 것이 정당화되는 유일한 경우는 모델의 데이터 적합성을 충분히 확보한 경우이다. 하지만 이 개수 기반 접근 방식은 직관적으로는 매력적이긴 하지만 볼록 최적화 문제를 NP-난해인 볼록하지 않은 최적화 문제로 바꿔버리는 단점이 있다. 자세히 살펴보면 배낭 문제와 관련이 있다는 것을 알 수 있다. 그렇기 때문에, L0 정규화로 알려진 이 아이디어를 실제로 효과적으로 사용할 수는 없다.

하지만 L0에 가까우면서도 볼록하다는 이점이 있어 계산하기에 효율적인 L1 정규화라는 정규화 항이 있다. 따라서 L1 정규화를 사용하여 모델에서 유용하지 않은 많은 계수를 정확히 0이 되도록 유도하여 추론 단계에서 RAM을 절약할 수 있다.

L1 정규화와 L2 정규화 비교

L2와 L1은 서로 다른 방식으로 가중치에 페널티를 준다.

  • L2는 가중2가중치^2에 페널티를 준다.

  • L1은 |가중치|에 페널티를 준다.
    결과적으로 L2와 L1은 서로 다르게 미분된다.

  • L2의 미분계수는 2 * 가중치이다.

  • L1의 미분계수는 k(가중치와 무관한 값을 갖는 상수)이다.

L2의 미분계수는 매번 가중치의 x%만큼 제거한다고 생각하면 된다. 그리스 철학자 제논이 말했듯이 어떤 수를 x%만큼 무한히 제거해도 그 값은 절대 0이 되지 않는다. 제논은 사실상 정확히 0을 만들 수 있는 부동 소수점 정밀도 한계에 대해서는 잘 알지 못했다. 어쨌든, L2는 일반적으로 가중치를 0으로 유도하지 않는다.

L1의 미분계수는 매번 가중치에서 일정 상수를 빼는 것으로 생각하면 된다. 하지만 절대값으로 인해 L1은 0에서 불연속성을 가지며, 이로 인해 0을 지나는 빼기 결과값은 0이 되어 제거된다. 예를 들어, 빼기 연산으로 인해 가중치가 +0.1에서 -0.2이 된다면 L1은 가중치를 정확히 0으로 만들 수 있다.

모든 가중치의 절대값에 페널티를 주는 L1 정규화는 다양한 모델에서 아주 효율적으로 활용할 수 있다. 다만 이 설명은 1차원 모델에만 적용되는 점에 유의해야한다.

.
.
.
강의 링크 : 구글 머신러닝 단기집중과정

profile
데이터사이언티스트 대학원생

0개의 댓글