이중 강하의 예

2514 단어 파이썬

1. 이중 강하의 예



논문 Two models of double descent for weak features ( htps : // 아 rぃ v. rg/아bs/1903.07571 )의 예
htps : // 기주 b. 이 m/와 h마에/어떻게 bぇ-에서 s선 t-사 mpぇ/bぉb/마이/사 mpぇ. 이 pyn b

$\beta = (\beta_{1},\beta_{2},....,\beta_{D})\in\mathbb{R}^D : 고정 $
$ x = (x_{1},x_{2},....,x_{D}) : 정규분포$
$\sigma\epsilon : 노이즈 $
$y = x^*\beta +\sigma\epsilon =\sum_{j=1}^{D} x_{j}\beta_{j} +\sigma\epsilon$

초기 설정


D=200
train_num=80 #学習データの数
test_num=20 #テストデータの数
sigma = 1/5 #ノイズの標準偏差
b = 2 * np.random.rand(D) -1
b = b / np.linalg.norm(b) # β |β|=1

학습 데이터, 테스트 데이터(x)


train_X = np.random.randn(train_num, D)
test_X = np.random.randn(test_num,D)

학습 데이터, 테스트 데이터(y)


train_y = np.matmul(train_X, b.T) + np.random.normal(0, sigma, train_num)
test_y = np.matmul(test_X, b.T) + np.random.normal(0, sigma, test_num)

파라미터 수를 제한했을 때의 β의 예측값


def calc_reg(param_num):
    b_pred = np.linalg.lstsq(train_X[:,:param_num], train_y, rcond=None)[0]
    return b_pred

예측 매개 변수 중 손실


def calc_loss(X, y, param_num, b_pred):
    y_pred = np.matmul(X[:,:param_num], b_pred.T)
    loss = np.sum(np.abs((y - y_pred)*2))/ len(y)
    return loss

파라미터 수를 변경했을 때의 학습 데이터 및 테스트 데이터의 loss


param_nums = []
train_losses = []
test_losses = []
for param_num in range(1,D+1):
    b_pred = calc_reg(param_num)
    train_loss = calc_loss(train_X, train_y, param_num, b_pred)
    test_loss = calc_loss(test_X, test_y, param_num, b_pred)
    param_nums.append(param_num)
    train_losses.append(train_loss)
    test_losses.append(test_loss)

시각화


import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(8,8))
ax.plot(param_nums, train_losses, label="train")
ax.plot(param_nums, test_losses, label="test")
ax.legend(loc=0)
plt.ylim(-1,5)
fig.tight_layout()
plt.show()

loss 그래프



좋은 웹페이지 즐겨찾기