このリンクから Softmax 分類子の単純な実装を理解しようとしています - CS231n - Convolutional Neural Networks for Visual Recognition。ここでは、単純なソフトマックス分類器を実装しました。リンク上の Softmax Classifier の例では、2D 空間上にランダムな 300 ポイントとそれらに関連付けられたラベルがあります。ソフトマックス分類器は、どのポイントがどのクラスに属しているかを学習します。
ソフトマックス分類器の完全なコードは次のとおりです。または、私が提供したリンクを見ることができます。
# initialize parameters randomly
W = 0.01 * np.random.randn(D,K)
b = np.zeros((1,K))
# some hyperparameters
step_size = 1e-0
reg = 1e-3 # regularization strength
# gradient descent loop
num_examples = X.shape[0]
for i in xrange(200):
# evaluate class scores, [N x K]
scores = np.dot(X, W) + b
# compute the class probabilities
exp_scores = np.exp(scores)
probs = exp_scores / np.sum(exp_scores, axis=1, keepdims=True) # [N x K]
# compute the loss: average cross-entropy loss and regularization
corect_logprobs = -np.log(probs[range(num_examples),y])
data_loss = np.sum(corect_logprobs)/num_examples
reg_loss = 0.5*reg*np.sum(W*W)
loss = data_loss + reg_loss
if i % 10 == 0:
print "iteration %d: loss %f" % (i, loss)
# compute the gradient on scores
dscores = probs
dscores[range(num_examples),y] -= 1
dscores /= num_examples
# backpropate the gradient to the parameters (W,b)
dW = np.dot(X.T, dscores)
db = np.sum(dscores, axis=0, keepdims=True)
dW += reg*W # regularization gradient
# perform a parameter update
W += -step_size * dW
b += -step_size * db
ここで勾配をどのように計算したか理解できません。ここで勾配を計算したと思います-
dW = np.dot(X.T, dscores)
db = np.sum(dscores, axis=0, keepdims=True)
dW += reg*W # regularization gradient
しかし、どのように?つまり、なぜ勾配が なのdW
ですnp.dot(X.T, dscores)
か? そして、なぜ勾配db
はnp.sum(dscores, axis=0, keepdims=True)
?? では、重みとバイアスの勾配をどのように計算したのでしょうか? また、なぜ彼らは計算したのregularization gradient
ですか?
畳み込みニューラル ネットワークとディープ ラーニングについて学び始めたばかりです。CS231n - Convolutional Neural Networks for Visual Recognition
そして、それはそのための良い出発点だと聞きました。深層学習関連の投稿をどこに配置すればよいかわかりませんでした。だから、私はそれらをstackoverflowに置きました。深層学習に関する質問を投稿できる場所があれば教えてください。