노름이란?
수학에서 벡터의 크기나 길이를 측정하는 함수이다.
벡터 공간에서 벡터가 원점에서 얼마나 떨어져 있는지를 나타내며,
벡터의 크기나 길이를 계산하는데 사용된다.
딥러닝에서 노름은 모델이 너무 복잡해지지 않도록 하는 방법 하는 방법 이다.
모델이 너무 복잡해지면 학습 데이터에는 잘 맞지만 새로운 데이터에는 잘 작동하지 않게 된다.
이를 방지하기 위해 정규화라는 방법을 사용 한다.
1. L1 노름 (Manhattan Norm)
- 정의
L1 노름은 벡터의 각 성분의 절대값의 합으로 정의 된다.
n차원 벡터 v=(v1,v2,…,vn)의 L1 노름은 아래 수식과 같다.
∥v∥1=∣v1∣+∣v2∣+⋯+∣vn∣
a = torch.tensor([5., 4.])
# p 는 노름의 수
norm_l1 = torch.norm(a, p=1)
print(f'L1 Norm = {norm_l1}')
# 출력
# 9.0
- L1 노름 딥러닝 적용
목적
딥러닝 모델의 가중치를 적게 하여 불필요한 것들을 제거하고, 중요한 것들만 남긴다.
어떻게 작동 할까?
모델의 가중치들 중 일부를 0으로 만듭니다.
이렇게 하면 모델이 덜 복잡해지고, 중요한 특징들만 사용하게 됩니다.
예시
어떤 모델이 몇 가지 특성을 사용하여 예측을 한다고 생각해봅시다.
L1 노름을 사용하면, 덜 중요한 특성의 가중치가 0이 되어 무시되고 중요한 특성들만 남게 됩니다
2. L2 노름 (Euclidean Norm)
- 정의
벡터의 크기나 길이를 측정하는 가장 일반적인 방법 중 하나이다.
이는 벡터의 각 성분의 제곱합의 제곱근으로 정의된다.
a = torch.tensor([4., 3.])
# p 는 노름의 수
norm_l2 = torch.norm(a, p=2)
print(f'L2 Norm = {norm_l2}')
# 출력
# 5.0
- L2 노름 딥러닝 적용
목적
모든 가중치를 적당히 작게 만들어서 모델이 너무 복잡해지지 않도록 하는 것.
어떻게 작동하는지
모델의 모든 가중치가 큰 값이 되지 않도록 한다.
모든 가중치를 작게 만들어서 모델이 복잡해지지 않도록 한다.
예시
같은 예시에서, L2 노름을 사용하면 모델이 모든 특성에 대해 적당한 가중치를 가지게 된다.
너무 큰 가중치는 줄여주기 때문에 모델이 덜 복잡해진다.
3. L∞ 노름 (Max Norm)
절대값이 가장 큰 값을 나타낸다.
a = torch.tensor([5., 8.])
norm_linf = torch.norm(a, p=float('inf'))
print(f'L∞ Norm of a: {norm_linf}')
# 출력
# 8
- L ∞ 노름 딥러닝 적용
목적
가중치 벡터 전체의 크기를 일정한 범위 안에 두어 너무 큰 가중치가 나오지 않도록 하는 것.
어떻게 작동하는지
가중치 벡터의 성분 중 가장 큰 값이 일정한 상한을 넘지 않도록 한다.
가중치가 너무 커지면 그 값을 상한으로 제한한다.
예시
모델이 여러 특성을 사용한다고 할 때, Max 노름은 가중치들이 너무 커지지 않도록 해서
특정 특성에 너무 의존하지 않게 한다. 예를 들어, 어떤 가중치가 10을 넘어가면 10으로 고정시킨다.
간단한 비유
- L1 노름: 집안의 물건 중 필요한 것만 남기고 나머지는 버리는 정리.
- L2 노름: 집안의 모든 물건을 너무 크지 않게 적당한 크기로 유지하는 것.
- Max 노름: 집안의 가장 큰 물건이 너무 커지지 않도록 크기를 제한하는 것.
'AI Naver boost camp > [Week 01] Pytorch' 카테고리의 다른 글
선형 회귀 (Linear Regression) _ 2 - 경사하강법, 데이터 표준화 (0) | 2024.08.08 |
---|---|
선형 회귀 (Linear Regression) _ 1 - 상관관계, pytorch 모델 코드, loss funtion (0) | 2024.08.08 |
Day - 04 (0) | 2024.08.08 |
Tensor 생성과 조작 (0) | 2024.08.06 |
Numpy - 표준편차, randn (1) | 2024.08.05 |
댓글