関数 learning_schedule() では、各イテレーションにおける、学習率を決定しています.
変数 t0、t1 を用いて学習率が緩やかに下がるように、
次のコードで空欄になっている行に入る適切な選択肢を 1 ~ 3 から選び、
確率的勾配降下法で X、y を学習し傾きと切片を予測してください.
変数 xi 、yi は、各イテレーションで利用するインスタンスと目的変数です.
X_b、y から、インデックス番号で random_index からその次の番号までの配列を抽出し xi、yi に代入されるようにしてください.
import numpy as np
np.random.seed(0)
X = 2 * np.random.rand(100,1)
y = 4 + 3 * X + np.random.rand(100,1)
X_b = np.c_[np.ones((100, 1)), X]
epochs = 50
t0, t1 = 5, 50
m = len(X_b)
def learning_schedule(t):
# Q1:学習スケジュールを決定してください.
return ##########
theta = np.random.randn(2,1)
for epoch in range(epochs):
for i in range(m):
random_index = np.random.randint(m)
[Q1の選択肢]
1. t / (t0 + t1)
2. t0 / (t + t1)
3. t1 / (t + t0)
# Q2:訓練データをランダムに抽出してください.( 2 行とも同じ答えが入ります.)
xi = X_b[##########]
yi = y[##########]
gradients = 2 * xi.T.dot(xi.dot(theta) – yi)
eta = learning_schedule(epoch * m + i)
theta = theta – eta * gradients
print(theta)
[Q2の選択肢]
1. random_index:random_index+1
2. random_index:random_index+10
3. random_index:random_index