2016-08-25 14 views
0

私は正統化とバイアスがカフェで働く方法についてたくさんの質問をしています。caffeは正則化パラメータにバイアスを掛けますか?

最初に、デフォルトでネットワークに偏っている、そうですか? または、追加するにはカフェに依頼する必要がありますか?

第2に、損失値を取得した場合、正規化は考慮されません。それは正しい?私は損失に損失関数の値が含まれていることを意味します。私が理解しているように、グラジエント計算で正則化を検討するだけです。そうですか?

第3に、caffeがグラディエントを取得するとき、正則化のバイアス値も考慮しますか?それとも、正式化のネットワークの重さだけを考えているのだろうか?あなたの3つの質問を事前に

おかげで、

アフシン・

答えて

1

は、私の答えは次のとおりです。

  1. はい。バイアスはデフォルトでネットワークに存在します。たとえば、ConvolutionParameterInnerProductParametercaffe.protoの場合、bias_termのデフォルト値はtrueです。つまり、ネットワーク内のconvolution/innerproduct層にデフォルトでバイアスが設定されています。
  2. はい。損失層によって得られた損失値は、正規化項の値を含まない。そして、関数net_->ForwardBackward()を呼び出した後で正規化を検討し、実際にはApplyUpdate()関数でネットワークパラメータの更新が行われるようにします。
  3. 例えば、ネットワーク内のコンボリューション層を取る:

    layer { 
        name: "SomeLayer" 
        type: "Convolution" 
        bottom: "data" 
        top: "conv" 
        #for weights 
        param { 
        lr_mult: 1 
        decay_mult: 1.0 #coefficient of regularization for weights 
            #default is 1.0, here is for the sake of clarity 
        } 
        #for bias 
        param { 
        lr_mult: 2 
        decay_mult: 1.0 #coefficient of regularization for bias 
            #default is 1.0, here is for the sake of clarity 
        } 
        ... #left 
    } 
    

    この質問に対する答えは:カフェは勾配を取得した場合、ソルバーはわずか2つの変数場合正則にバイアスされた値を検討します。 solver.prototxtの上の第2のdecay_multおよびweight_decayは両方ともゼロより大きい。

    詳細はfunctoin void SGDSolver::Regularize()にあります。

希望すると、これが役立ちます。

+0

ありがとうございます。 –

+0

両方のパラメータがゼロでないときに 'void SGDSolver :: Regularize()'で述べたように、 'learnable_params'の' net_params'が更新されます。あなたは偏っているのが 'learnable_params'のメンバーであることをコーヒーで知っていますか? –

+0

'net.cpp'の' Net :: AppendParam() 'にあります。 @AfshinOroojlooy – Dale

関連する問題