ミニバッチ勾配効果法の説明として正しくないものを選択肢 1 ~ 4 から選んでください.
1. 大きな訓練セットに対しても比較的早く計算が完了する.
2. scikit-learn にはミニバッチ勾配降下法のクラスがある.
3. 確率的勾配効果法よりも、最適な解に近づける.
4. アウトオブコアアルゴリズムとして実装できない.
Just another WordPress site
ミニバッチ勾配効果法の説明として正しくないものを選択肢 1 ~ 4 から選んでください.
1. 大きな訓練セットに対しても比較的早く計算が完了する.
2. scikit-learn にはミニバッチ勾配降下法のクラスがある.
3. 確率的勾配効果法よりも、最適な解に近づける.
4. アウトオブコアアルゴリズムとして実装できない.
次のコードで空欄になっている行に入る適切な選択肢を 1 ~ 3 から選び、
ミニバッチ勾配降下法で X、y を学習し傾きと切片を求めてください.
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
minibatch_size = 20
m = len(X_b)
np.random.seed(0)
theta = np.random.randn(2,1)
t0, t1 = 200, 1000
def learning_schedule(t):
return t0 / (t + t1)
t = 0
for epoch in range(epochs):
shuffle = np.random.permutation(m)
# Q1:X_b、y の配列をランダムに並び替え、をそれぞれX_b_shuffled、y_shuffled に代入してください.
X_b_shuffled = X_b[##########]
y_shuffled = y[##########]
for i in range(0, m, minibatch_size):
t += 1
xi = X_b_shuffled[i:i+minibatch_size]
yi = y_shuffled[i:i+minibatch_size]
[Q1の選択肢]
1. epoch
2. shuffle
3. m
# Q2:勾配を求めてください.
gradients = ##########
eta = learning_schedule(t)
theta = theta – eta * gradients
print(theta)
[Q2の選択肢]
1. 2/shuffle * xi.T.dot(xi.dot(theta) – yi)
2. 2/minibatch_size * xi.T.dot(xi.dot(theta) – yi)
3. 2/epoch * xi.T.dot(xi.dot(theta) – yi)
次のコードで空欄になっている行に入る適切な選択肢を 1 ~ 3 から選び、
ミニバッチ勾配降下法で X、y を学習し傾きと切片を予測してください.
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
minibatch_size = 20
m = len(X_b)
np.random.seed(0)
theta = np.random.randn(2,1)
t0, t1 = 200, 1000
def learning_schedule(t):
return t0 / (t + t1)
t = 0
for epoch in range(epochs):
shuffle = np.random.permutation(m)
# Q1:X_b、y の配列をランダムに並び替え、をそれぞれX_b_shuffled、y_shuffled に代入してください.
X_b_shuffled = X_b[##########]
y_shuffled = y[##########]
for i in range(0, m, minibatch_size):
t += 1
xi = X_b_shuffled[i:i+minibatch_size]
yi = y_shuffled[i:i+minibatch_size]
[Q1の選択肢]
1. m
2. epoch
3. shuffle
# Q2:勾配を求めてください.
gradients = ##########
eta = learning_schedule(t)
theta = theta – eta * gradients
print(theta)
[Q2の選択肢]
1. 2/epoch * xi.T.dot(xi.dot(theta) – yi)
2. 2/shuffle * xi.T.dot(xi.dot(theta) – yi)
3. 2/minibatch_size * xi.T.dot(xi.dot(theta) – yi)
次のコードで空欄になっている行に入る適切な選択肢を 1 ~ 3 から選び、多項式回帰モデルを訓練してください.
import numpy as np
#Q1: PolynomialFeatures クラスをインポートしてください.
from ########## import PolynomialFeatures
[Q1 選択肢]
1. sklearn.model_selection
2. sklearn.metircs
3. sklearn.preprocessing
#Q2:多項式回帰モデル用のクラスをインポートしてください.
from sklearn.linear_model import ##########
[Q2 選択肢]
1. LinearRegression
2. ElasticNet
3. Rasso
np.random.seed(0)
m = 100
X = 6 * np.random.rand(m, 1) – 3
y = 3 * X ** 2 + 4 * X + 2 + np.random.randn(m, 1)
# Q3:各特徴量の二乗を新特徴量として追加するための非線型変換をしてください.バイアス項はなしとします.
poly_f = ##########
[Q3の選択肢]
1. PolynomialFeatures(degree=1, include_bias=False)
2. PolynomialFeatures(degree=2, include_bias=True)
3. PolynomialFeatures(degree=2, include_bias=False)
# Q4:各特徴量を 2 乗とした新特徴量を用意してください.
X_poly = ##########
mdoel = LinearRegression()
model.fit(X_poly, y)
print(model.intercept_, model.coef_)
[Q4の選択肢]
1. poly_f.fit_transform(X)
2. poly_f.fit(X)
3. poly_f.fit_transform(X, y)
次のコードで空欄になっている行に入る適切な選択肢を 1 ~ 3 から選び、バッチ勾配降下法で X、y を学習し傾きと切片を予測してください.
また今回は、学習率を 0.1 として訓練してください.
(変数 eta、 gradients はそれぞれ学習率と勾配ベクトルを表しています.)
import numpy as np
np.random.seed(0)
X = 2 * np.random.rand(100,1)
y = 4 + 3 * X + np.random.rand(100,1)
# Q1:X の各インスタンスに x0 = 1 を加え、変数 X_b に代入してください.
X_b = ##########
eta = 0.1
iterations = 1000
m = len(X_b)
theta = np.random.randn(2,1)
for iteration in range(iterations):
#Q2:勾配を計算し変数 gradients に代入してください.
gradients = ##########
#Q3:変数 gradients を用いてモデルパラメータを更新してください.
theta = ##########
print(theta)
[Q1 の選択肢]
1. np.concat([np.ones((100,1), X])
2. np.c_([X, np.ones((100,1)])
3. np.c_([np.ones((100,1), X])
[Q2 の選択肢]
1. 2 * X_b.T.dot(X_b.dot(theta) – y)
2. 2/m * X_b.T.dot(X_b.dot(theta) – y)
3. 2/m * X_b.dot(X_b.dot(theta) – y)
[Q3 の選択肢]
1. theta – eta * gradients
2. eta – (theta + gradients)
3. (theta + eta) – gradients
次のコードで空欄になっている行に入る適切な選択肢を 1 ~ 3 から選び、バッチ勾配降下法で X、y を学習し傾きと切片を予測してください.
また今回は、学習率を 0.1 として訓練してください.
(変数 eta、 gradients はそれぞれ学習率と勾配ベクトルを表しています.)
import numpy as np
np.random.seed(0)
X = 2 * np.random.rand(100,1)
y = 4 + 3 * X + np.random.rand(100,1)
# Q1:X の各インスタンスに x0 = 1 を加え、変数 X_b に代入してください.
X_b = ##########
eta = 0.1
iterations = 1000
m = len(X_b)
theta = np.random.randn(2,1)
for iteration in range(iterations):
#Q2:勾配を計算し変数 gradients に代入してください.
gradients = ##########
#Q3:変数 gradients を用いてモデルパラメータを更新してください.
theta = ##########
print(theta)
[Q1 の選択肢]
1. np.c_([np.ones((100,1), X])
2. np.c_([X, np.ones((100,1)])
3. np.concat([np.ones((100,1), X])
[Q2 の選択肢]
1. 2/m * X_b.dot(X_b.dot(theta) – y)
2. 2/m * X_b.T.dot(X_b.dot(theta) – y)
3. 2 * X_b.T.dot(X_b.dot(theta) – y)
[Q3 の選択肢]
1. theta – eta * gradients
2. eta – (theta + gradients)
3. (theta + eta) – gradients
許容誤差を 1/100 にすると収束するまでのイテレーションは何倍になるか求めてください.
許容誤差を 1/1000 にすると収束するまでのイテレーションは何倍になるか求めてください.
確率的勾配降下法の説明として正しくないものを選択肢 1 ~ 4 から選んでください.
1. ステップごとに、訓練セットから無作為にインスタンス選び出し勾配を計算する.
2. バッチ勾配降下法と比べて計算に時間がかかる.
3. 巨大な訓練セットに対しても、SGD はアウトコアアルゴリズムとして利用できる.
4. 最適な解を求めることはできないが、十分近い解は得られる.
バッチ勾配効果法の説明として正しいものを選択肢 1 ~ 4 から選んでください.
[選択肢]
1. イテレーションごとにランダムにサンプリングされたサンプルを用いて、偏微分によって勾配を計算するため解への収束スピードが早いが、
解が 1 つに定まらない不規則性をもつ.しかし、モデルが局所的な最小値に収束してしまうのを避けることができる.
2. 無策にいくつかのインスタンスをサンプリングすることでミニバッチを用意し、そのミニバッチを用いて勾配を計算していく.
収束スピードは早く、また、十分最適な解へ収束することができる.また、 GPU との相性も良い.
3. 全ての訓練インスタンスを用いて勾配を計算するため、安定して最適解に収束することができる.
しかし、訓練セットが大きくなると収束までに非常に時間がかかる.
4. 最適な解に近くことはできるが、1 つに定まらない.しかし、訓練が進むにつれて徐々に学習率を小さくしていくことで、
最適解にたどり着くことができる.