5

このリンクから 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)か? そして、なぜ勾配dbnp.sum(dscores, axis=0, keepdims=True)?? では、重みとバイアスの勾配をどのように計算したのでしょうか? また、なぜ彼らは計算したのregularization gradientですか?

畳み込みニューラル ネットワークとディープ ラーニングについて学び始めたばかりです。CS231n - Convolutional Neural Networks for Visual Recognitionそして、それはそのための良い出発点だと聞きました。深層学習関連の投稿をどこに配置すればよいかわかりませんでした。だから、私はそれらをstackoverflowに置きました。深層学習に関する質問を投稿できる場所があれば教えてください。

4

2 に答える 2

9

ここで勾配の計算が開始されます。

# compute the gradient on scores
dscores = probs
dscores[range(num_examples),y] -= 1
dscores /= num_examples

まず、これdscoresはソフトマックス関数によって計算された確率に等しく設定されます。次に、2 行目の正しいクラスに対して計算された確率から減算1し、3 行目のトレーニング サンプル数で割ります。

なぜ減算するの1ですか?理想的には、正しいラベルの確率を にしたいからです1。したがって、実際に予測するものから予測すべきものを減算します。 に近いものを予測すると1、減算は大きな負の数 (ゼロに近い) になり、解に近いため勾配は小さくなります。それ以外の場合は、小さな負の数 (ゼロにはほど遠い) になるため、勾配が大きくなり、解に向かってより大きなステップを踏むことになります。

アクティベーション関数は単純w*x + bです。に対する導関数wは です。これが、 とスコア/出力レイヤーの勾配の間のドット積でxある理由です。dWx

w*x + bに対するの導関数はbです1。これが、逆伝播時に単純に合計する理由ですdscores

于 2015-08-28T08:40:04.820 に答える