caffe的proto里面的std是什么意思?怎么调?

请问caffe的proto中的std是什么意思?是在loss不下降的时候调吗?怎么调这个值?
 
convolution_param {
    num_output: 96
    kernel_size: 11
    stride: 4
    weight_filler {
      type: "gaussian"
      std: 0.01
    }
    bias_filler {
      type: "constant"
      value: 0
    }
  }
已邀请:

李扬 - 密码六个一

赞同来自: ruirui_ICT attitude cjwdeq disheng

在 AlexNet 《ImageNet Classification with Deep Convolutional Neural Networks》中有这么一句话:
 > We initialized the weights in each layer from a zero-mean Gaussian distribution with standard deviation 0.01.
可知,Caffe 中的 std 就是上面的 standard deviation,用于随机初始化权重。既然是初始化,故名思议,那么也就只在起始阶段被调用,训练过程中就不再被调用。因此,训练过程不调这个值。loss 不下降时调的是 learning rate。至于以什么策略来调 learning rate,下面的两个问题总结的很好了:
http://caffecn.cn/?/question/9
http://caffecn.cn/?/question/18
 
Caffe 中所有的参数定义都在 `src/caffe/proto/caffe.proto` 里。可以把这个文件当字典查,遇到不知道什么意思的参数,就可以到这个文件里搜索一下。
 
http://arxiv.org/abs/1511.06422  这篇文章对初始化工作总结的还可以。现在常见的初始化方法有:
1)早期的逐层预训练初始化;
2)题主所问的 Gauss 随机初始化;
3)Xavier 初始化 《Understanding the difficulty of training deep feedforward neural networks》
4)MSRA 初始化 http://arxiv.org/abs/1502.01852 
5)  http://arxiv.org/abs/1511.06422 这篇新论文提的 LSUV 初始化,真实效果如何我也不确定
6)用 finetune 来初始化

attitude

赞同来自: 辛淼 不可理喻 李扬

个人理解:这个std值指的是你的卷积权重初始值是按高斯分布初始化的,而这里的std指的是高斯分布的方差,std越小,证明高斯曲线越平滑,也就是你个各个权重值基本一样。weight_filler参数里的type还有'xavier'等。一般不用调,loss不下降跟这个有一定关系,但是可以选择降低学习率先train多次(即相当于靠预训练给网络初始化了参数),然后再在此模型基础上进行finetune。还忘各位大神指证补充。

disheng

赞同来自:

std是参数初始化成是高斯分布的标准差。
关于std的设置,可以参看何恺明ICCV2015的文章Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification,其中2.2节有关于参数初始化的详细论述。

要回复问题请先登录注册