0

誰かが私にこれを説明できますか?

Theta1_grad(:, 1) = Theta1_grad(:, 1) ./ m;

Theta1_grad(:, 2:end) = Theta1_grad(:, 2:end) ./ m + ((lambda/m) * Theta1(:, 2:end));

私はPythonで実装していて、Octaveを知りません。このニューラルネットワークの実装を見つけたばかりですが、これが何をしているのかわかりません。

参照: http: //feature-space.com/en/document49.pdf-12ページ(2.5)

編集:

気にしないでください、私はそれが最初の列を変更しないようにしようとしていると思います。

4

1 に答える 1

3

Theta1_grad(:, 1)行列の最初の列を取得し、このベクトルの各要素Theta1_gradを次の値で除算します。m

Theta1_grad(:, 2:end)列2から最後までの残りのマトリックスを取得します(基本的に、最初の列を除くすべての列)

通常、最初の列は1、モデルの切片を推定できるように設定されています

一般に、.オクターブでの算術演算の前にあるということは、たとえば、要素ごとの演算を意味しますA * Bが、通常の行列乗算ですがA .* B、要素ごとの乗算です。

簡単なオクターブを読むと、役に立ちます。

編集:

この方程式は、正則化されたニューラルネットワーク用です(過剰適合のリスクを減らすため)

 Theta1_grad(:, 2:end) = Theta1_grad(:, 2:end) ./ m + ((lambda/m) * Theta1(:, 2:end));

コード全体は表示されませんが、ラムダは学習率ではなく、正則化パラメーター(またはペナルティ)であり、勾配ではなくTheta1それ自体で乗算されると思います。

于 2013-02-08T03:55:07.123 に答える