2016-08-25 7 views
0

정규화 및 편향된 방식이 caffe에서 작동하는 방식에 대해 많은 질문이 있습니다.caffe는 정규화 매개 변수에 바이어스를 곱합니까?

기본적으로 기본적으로 네트워크에 편향되어 있습니다. 맞습니까? 또는 나는 그 (것)들을 추가하기 위하여 caffe를 요구할 필요가 있습니까?

두 번째, 손실 값을 얻으면 정규화를 고려하지 않습니다. 맞아? 손실에 손실 함수 값이 포함되어 있음을 의미합니다. 내가 이해했듯이 그라디언트 계산에서 정규화를 고려합니다. 맞아?

셋째, 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 
    } 
    

    이 질문에 대한 대답은 : CAFFE 그래디언트를 취득하면 해석이 정규화에서 바이어스 값을 고려할 것이다 만 2 개 변수 경우 : solver.prototxt 위의 두 번째 decay_multweight_decay은 모두 0보다 큽니다.

    자세한 내용은 functoin void SGDSolver::Regularize()에서 찾을 수 있습니다.

희망이 도움이 될 것입니다.

+0

포괄적 인 설명을위한 Dale의 답변 –

+0

두 매개 변수가 모두 0이 아닌'void SGDSolver :: Regularize()'에서 실제로'learnable_params' 인'net_params '가 업데이트됩니다. 당신은 편견에 빠진 학생들이'learnable_params' 회원인가요? –

+0

'net.cpp'의'Net :: AppendParam()'함수에 있습니다. @AshshinOroojlooy – Dale

관련 문제