곱셈의 자릿수를 덧셈 눈금으로
별의 밝기와 파일 크기, 확률처럼 여러 자릿수를 가로지르는 양은 선형 축에서 작은 값이 한쪽에 눌려 보일 수 있어. 양수 에 로그를 취하면 같은 비율의 변화가 같은 간격으로 바뀌어. 10배, 100배, 1,000배가 로그10 눈금에서는 1, 2, 3의 차이가 되는 식이야.
이것을 정규화와 섞지는 마. 로그 변환은 비선형으로 비율 구조를 펼치지만 평균을 0, 표준편차를 1로 맞추거나 값을 정한 범위에 넣는 연산은 아니야. 0과 음수에는 그대로 적용할 수 없고, 단위와 기준값도 해석에 영향을 줘.
데시벨은 기준에 대한 비율
강도비를 나타내는 데시벨은 로 쓸 수 있어. 강도가 10배가 되면 10 dB, 100배가 되면 20 dB 늘어나. 음압처럼 진폭비를 다룰 때는 전력과의 제곱 관계 때문에 보통 를 써.
0 dB는 ‘소리가 없음’이 아니라 선택한 기준과 같은 수준이라는 뜻이야. 음압레벨에서는 흔히 청력 문턱 근처의 기준을 쓰지만 실제 지각은 주파수와 사람, 환경에 따라 달라. 약 10 dB 증가를 두 배쯤 크게 느낀다는 말도 유용한 근사이지 보편적 법칙은 아니고.
AI에서 로그를 쓰는 세 자리
- 수치 안정성: 작은 확률을 많이 곱하면 언더플로가 날 수 있어. 로그를 취하면 곱이 합으로 바뀌어 더 넓은 범위를 안정적으로 다룰 수 있어.
- 목적함수: 범주형 교차엔트로피 는 정답에 낮은 확률을 줄수록 손실을 크게 만들어. 실제 구현은 logits에서
log_softmax를 함께 계산해 안정성을 지켜. - 시각화: 양수가 여러 자릿수에 걸쳐 있을 때 로그 축을 쓰면 비율 변화를 비교하기 쉬워. 0과 음수, 오차막대의 해석은 별도로 처리해야 해.
로그는 큰 동적 범위를 비율의 눈금으로 펼치는 변환이야. 정규화와 같은 말이 아니며, 입력의 부호와 0, 밑, 기준값을 확인해야 올바르게 해석할 수 있어.
큰 값 몇개에 밀려버리면 선형분포는 그 부분만 우뚝솟아서 다른 항목의 숫자를 잘 인지하지못하도록 압축시켜버림
로그스케일을 하면 때에 따라 이부분이 개선됨, 이게 맞나? 나는 가로로 로그스케일을 쓰긴했는데 주식차트같은 경우 세로로 로그스케일을 많이씀
import numpy as np import matplotlib.pyplot as plt
rng = np.random.default_rng(42)
1~10000에 걸쳐 자릿수가 고르게 퍼지도록 로그 균등 생성 (현실 데이터의 전형)
data = 10 ** rng.uniform(0, 4, 100)
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 5))
선형 x축 히스토그램
ax1.hist(data, bins=30, color='#378ADD', edgecolor='white') ax1.set_title("Linear x-axis") ax1.set_xlabel("value") ax1.set_ylabel("count")
로그 x축 히스토그램 — 로그 간격 구간 사용
bins = np.logspace(0, 4, 30) ax2.hist(data, bins=bins, color='#1D9E75', edgecolor='white') ax2.set_xscale('log') ax2.set_title("Log x-axis") ax2.set_xlabel("value (log scale)") ax2.set_ylabel("count")
plt.tight_layout() plt.savefig('loghist.png', dpi=130)