精华内容
下载资源
问答
  • caffe solver.prototxt AND 梯度下降算法本文主要...solverprototxt优化算法选择 批量梯度下降法BGD和 随机梯度下降法SGD SGD随机梯度下降法 AdaGrad自适应性梯度下降法 AdaDeltaAdaGrad的扩展 RMASpropAdadelt

    #caffe参数配置solver.prototxt 及优化算法选择


    本文主要包含如下内容:


    solver.prototxt介绍及流程


      参考网址
      .proto文件用来定义结构体的参数,.prototxt文件用结构体的初始化数据配置初始化Net
      参数配置文件定义了网络模型训练过程中需要设置的参数,如学习率、权重衰减系数、迭代次数、使用GPU还是CPU等。

      在前向过程(forward)中计算loss,在反向传播中计算梯度gradient。根据误差度、正则项的梯度以及其他方法的特定项来计算参数更新量。

    Solver的流程:

    1. 设计好需要优化的对象,以及用于学习的训练网络和用于评估的测试网络。(通过调用另外一个配置文件prototxt来进行)
    2. 通过forwardbackward迭代的进行优化来跟新参数。
    3. 定期的评价测试网络。 (可设定多少次训练后,进行一次测试)
    4. 在优化过程中显示模型和solver的状态
    # 设置网络模型,文件的路径要从caffe的根目录开始 
    net: "examples/mnist/lenet_train_test.prototxt"  
    
    # 与test layer中的batch_size结合起来理解,假设样本总数为10000,一次性执行全部数据效率低,因此将测试数据分成几个批次来执行,每个批次的数量就是batch_size。假设batch_size为100,则需要迭代100次才能将10000个数据全部执行完,因此test_iter设置为100.(100*100=10000),合理设置可使得测试遍历完去不测试样本
    test_iter: 100  
    
    # 训练网络之前不进行测试,默认在训练网络前先进行一次test
    test_initialization:false
    
    # 测试间隔,也就是每训练test_interval次,才进行一次测试  ,合理设置可使得训练遍历完全部训练样本
    test_interval: 500
    
    # 这个参数乘上train.prototxt中的batch size是你实际使用的batch size。 相当于读取batchsize * itersize个图像才做一下gradient decent。 这个参数可以规避由于gpu内存不足而导致的batchsize的限制 因为你可以用多个iteration做到很大的batch 即使单次batch有限
    iter_size: 8
    
    # The base learning rate, momentum and the weight decay of the network.
    # base_lr为基础学习率
    base_lr: 0.01
    # 优化算法选择,此处选择随机梯度下降法(默认为SGD,这一行可以省掉)
    type: SGD
    # 上一次梯度更新的权重  
    momentum: 0.9
    # 权重衰减项,防止过拟合的一个参数(正则化项)
    weight_decay: 0.0005
    
    # The learning rate policy,学习率变化准则
    lr_policy: "inv"
    # 学习率变化的比率
    gamma: 0.0001
    power: 0.75
    
    # 每训练display次在屏幕上显示一次  
    display: 100
    
    # 最大迭代次数,这个数设置太小,会导致没有收敛,精确度很低。设置太大,会导致震荡,浪费时间  
    max_iter: 10000
    
    # 状态进行保存,snapshot用于设置训练多少次后进行保存,默认为0,不保存。snapshot_prefix 设置保存路径
    snapshot: 5000
    snapshot_prefix: "examples/mnist/lenet"
    
    # 设置运行模式: CPU or GPU(默认为GPU)
    solver_mode: CPU
    

    lr_policy:学习策略

      lr_policy可以设置为下面这些值,相应的学习率的计算为:

        - fixed:        保持base_lr不变.
        - step:         如果设置为step,则还需要设置一个stepsize,  返回 base_lr * gamma ^ (floor(iter / stepsize)),其中iter表示当前的迭代次数
        - exp:          返回base_lr * gamma ^ iter, iter为当前迭代次数
        - inv:          如果设置为inv,还需要设置一个power, 返回base_lr * (1 + gamma * iter) ^ (- power)
        - multistep:    如果设置为multistep,则还需要设置一个stepvalue。这个参数和step很相似,step是均匀等间隔变化,而multistep则是根据stepvalue值变化
        - poly:         学习率进行多项式误差, 返回 base_lr (1 - iter/max_iter) ^ (power)
        - sigmoid:      学习率进行sigmod衰减,返回 base_lr ( 1/(1 + exp(-gamma * (iter - stepsize))))
    

      相关CPP文件
      其中,求解模型可以在DIGITS可视化
      SGD


    solver.prototxt优化算法选择


    批量梯度下降法(BGD)和 随机梯度下降法(SGD)

      批量梯度下降法(batch gradient descent),是梯度下降法最常用的形式,具体做法也就是在更新参数时使用所有的样本来进行更新。(训练集的所有内容)。(容易内存超出,陷入局部最小值)

      随机梯度下降法(stochastic gradient descent),这里的随机梯度下降法其实跟MBGD(minibatch gradient descent)是一个意思,即随机抽取一批样本,以此为根据来更新参数。(增加随机性,可以跳出局部最小值)

      各自的优缺点都非常突出。对于训练速度来说,随机梯度下降法训练速度很快,而批量梯度下降法在样本量很大的时候,训练速度不能让人满意。

      对于准确度来说,随机梯度下降法用于仅仅用mini-batch样本决定梯度方向,导致解很有可能不是最优,导致迭代方向变化很大,不能很快的收敛到局部最优解。

      同样的,batch size 设置比较大的时候,效果会比较好(不能设置太小或者太大)。在使用GPU的情况下,并且运用矩阵乘法(并行运算),batch size 等于1或10计算一次梯度的时间是一致的。因此:batch size 设置为10的时候,运行速度比batch size 设置为1的时候几乎快10倍。而且。随机性更小,震荡更不明显,加快收敛速度。

    SGD:随机梯度下降法

      SGD,随机梯度下降法就是每一次迭代计算 mini-batch 的梯度,然后对参数进行更新。利用负梯度和上一次权重的更新值的线性组合(利用传统的梯度下降法容易收敛到局部最优,且选择合适的 learing rate 困难)。学习率a是负梯度的权重。动量u是上一次更新值的权重。

      
      

      学习参数需要一定的调整才能达到最好的效果。一般的,将学习速率a初始化为0.01,然后在训练中当loss达到稳定时,将a除以一个常数,将这个过程重复多次。对于动量u设置为0.9。u能使权重的更新更为平缓(防抖动),使学习过程更为稳定、快速。
      通过交叉验证,动量参数通常设为[0.5,0.9,0.95,0.99]中的一个.有时随着时间而变化,从0.5到0.99;表示要在多大程度上保留原来的更新方向,这个值在0-1之间,在训练开始时,由于梯度可能会很大,所以初始值一般选为0.5;当梯度不那么大时,改为0.9。学习率即当前batch的梯度多大程度上影响最终更新方向,跟普通的SGD含义相同。
      特征:下降初期时,使用了上一次更新参数,如果下降方向一致,乘上较大的u能够进行很好的加速。下降中后期时,在局部最小值来回震荡的时候,gradient->0,u使得更新幅度增大,从而跳出陷阱。在梯度改变方向的时候,u能够减少更新。总而言之,momentum项能够在相关方向加速SGD,抑制振荡,从而加快收敛。

    AdaGrad:自适应性梯度下降法

      自适应梯度下降法,对学习率进行了一个约束。即:
      
      
      特征:前期g_t较小的时候, regularizer较大,能够放大梯度;后期g_t较大的时候,regularizer较小,能够约束梯度;合处理稀疏梯度。
      用于平滑的式子eps(一般设为1e-4到1e-8之间)是防止出现除以0的情况。
      缺点:仍依赖于人工设置一个全局学习率,学习率设置过大的话,会使regularizer过于敏感,对梯度的调节太大,中后期,分母上梯度平方的累加将会越来越大,使gradient->0,使得训练提前结束。

    AdaDelta:AdaGrad的扩展

      Adadelta是对Adagrad的扩展。Adagrad会累加之前所有的梯度平方,而Adadelta只累加固定大小的项,并且也不直接存储这些项,仅仅是近似计算对应的平均值
      
      
    t%5E2)
      特征:训练初中期,加速效果不错,很快;训练后期,反复在局部最小值附近抖动

      同时:使用Adadelta算法,我们甚至都无需设置默认的学习率。

    E[Δθ2]t=γE[Δθ2]t−1+(1−γ)Δθt2 E[\Delta \theta^2]_t = \gamma E[\Delta \theta^2]_{t-1} + (1 - \gamma) \Delta \theta^2_t E[Δθ2]t=γE[Δθ2]t1+(1γ)Δθt2
    RMS[Δθ]t=E[Δθ2]t+ϵ RMS[\Delta \theta]_{t} = \sqrt{E[\Delta \theta^2]_t + \epsilon} RMS[Δθ]t=E[Δθ2]t+ϵ
    Δθt=−RMS[Δθ]t−1RMS[g]tgt \Delta \theta_t = - \dfrac{RMS[\Delta \theta]_{t-1}}{RMS[g]_{t}} g_{t} Δθt=RMS[g]tRMS[Δθ]t1gt

    RMASprop:Adadelta的特例

        cache =  decay_rate * cache + (1 - decay_rate) * dx**2
        x += - learning_rate * dx / (np.sqrt(cache) + eps)
    

      是一个非常高效的适应性学习率方法。这个方法用一种很简单的方式修改了Adagrad
    方法,让它不那么激进,单调地降低了学习率。具体说来,就是它使用了一个梯度平方的滑动平均

      代码中,decay_rate是一个超参数,常用的值是[0.9,0.99,0.999]。RMSProp仍然
    是基于梯度的大小来对每个权重的学习率进行修改,这同样效果不错。但是和Adagrad不同,其更
    新不会让学习率单调变小,不会发生更新停止的情况。
      特征:RMSprop依赖于全局学习率,RMSprop算是Adagrad的一种发展,和Adadelta的变
    体,效果趋于二者之间,适合处理非平稳目标对于RNN效果很好。

    Adam:Adaptive Moment Estimation(目前效果最好的梯度下降算法)

      本质上是带有动量项的RMSprop,它利用梯度的一阶矩估计和二阶矩估计动态调整每个
    参数的学习率。
      
      
      
      
      

      特征:结合了Adagrad善于处理稀疏梯度和RMSprop善于处理非平稳目标的优点,对内存需求较小,为不同的参数计算不同的自适应学习率,也适用于大多非凸优化 - 适用于大数据集和高维空间。
      作者建议u1取默认值为0.9,v1为0.999,ϵ为1e-8

    NAG:Nesterov accelerated gradient(加速梯度下降法)

      Nesterov动量的核心思路是,当参数向量位于某个位置x时,观察上面的动量更新公式可以发现,动量部分会通过mu * v稍微改变参数向量。因此,计算x + mu * v的梯度而不是“旧”位置x的梯度就有意义了。Nesterov项在梯度更新时做一个校正,避免前进太快,同时提高灵敏度。 关键:计算梯度的位置不一样.
      
      
      
      
      Momentum项和Nesterov项都是为了使梯度更新更加灵活,对不同情况有针对性。

    展开全文
  • 本文转自:...每个深度学习库中,都包含了大量的优化算法,用于优化学习速率,让网络用最快的训练次数达到最优,还能防止过拟合。 keras中就提供了这样一些优化器[1]:SGD:随机梯度下降SGD+Momen...

    本文转自:https://blog.csdn.net/ybdesire/article/details/51792925

    优化算法

    解决优化问题,有很多算法(最常见的就是梯度下降),这些算法也可以用于优化神经网络。每个深度学习库中,都包含了大量的优化算法,用于优化学习速率,让网络用最快的训练次数达到最优,还能防止过拟合。 
    keras中就提供了这样一些优化器[1]:

    • SGD:随机梯度下降
    • SGD+Momentum: 基于动量的SGD(在SGD基础上做过优化)
    • SGD+Nesterov+Momentum:基于动量,两步更新的SGD(在SGD+Momentum基础上做过优化)
    • Adagrad:自适应地为各个参数分配不同学习速率
    • Adadelta: 针对Adagrad问题,优化过的算法(在Adagrad基础上做过优化)
    • RMSprop:对于循环神经网络(RNNs)是最好的优化器(在Adadelta基础上做过优化)
    • Adam:对每个权值都计算自适应的学习速率(在RMSprop基础上做过优化)
    • Adamax:针对Adam做过优化的算法(在Adam基础上做过优化)

    如何选择

    有那么多优化算法,那么我们该怎么选择呢。有大神为我们给出了一些建议[2][3]

    • 如果你的数据输入量很小,那就选一种自适应学习速率的方法。这样你就不用对学习速率进行调优,因为你的数据本来就小,NN学习耗时也小。这种情况你更应该关心网络分类的准确率。
    • RMSprop, Adadelta, 和 Adam 非常相似,在相同的情况下表现都很好。
    • 偏置校验让Adam的效果稍微比RMSprop好一点
    • 进行过很好的参数调优的SGD+Momentum算法效果好于Adagrad/Adadelta

    结论:到目前(2016.04)为止,如果你不知道为你的神经网络选择哪种优化算法,就直接选Adam吧!(Insofar, Adam might be the best overall choice.[2])

    参考

    展开全文
  • 神经网络的优化算法选择

    千次阅读 2017-05-04 21:11:15
    优化算法 ...解决优化问题,有很多算法(最常见的...每个深度学习库中,都包含了大量的优化算法,用于优化学习速率,让网络用最快的训练次数达到最优,还能防止过拟合。  keras中就提供了这样一些优化器[1]:

    博文内容转载至:http://blog.csdn.net/ybdesire/article/details/51792925

    优化算法

    解决优化问题,有很多算法(最常见的就是梯度下降),这些算法也可以用于优化神经网络。每个深度学习库中,都包含了大量的优化算法,用于优化学习速率,让网络用最快的训练次数达到最优,还能防止过拟合。 
    keras中就提供了这样一些优化器[1]:

    • SGD:随机梯度下降
    • SGD+Momentum: 基于动量的SGD(在SGD基础上做过优化)
    • SGD+Nesterov+Momentum:基于动量,两步更新的SGD(在SGD+Momentum基础上做过优化)
    • Adagrad:自适应地为各个参数分配不同学习速率
    • Adadelta: 针对Adagrad问题,优化过的算法(在Adagrad基础上做过优化)
    • RMSprop:对于循环神经网络(RNNs)是最好的优化器(在Adadelta基础上做过优化)
    • Adam:对每个权值都计算自适应的学习速率(在RMSprop基础上做过优化)
    • Adamax:针对Adam做过优化的算法(在Adam基础上做过优化)

    如何选择

    有那么多优化算法,那么我们该怎么选择呢。有大神为我们给出了一些建议[2][3]

    • 如果你的数据输入量很小,那就选一种自适应学习速率的方法。这样你就不用对学习速率进行调优,因为你的数据本来就小,NN学习耗时也小。这种情况你更应该关心网络分类的准确率。
    • RMSprop, Adadelta, 和 Adam 非常相似,在相同的情况下表现都很好。
    • 偏置校验让Adam的效果稍微比RMSprop好一点
    • 进行过很好的参数调优的SGD+Momentum算法效果好于Adagrad/Adadelta

    结论:到目前(2016.04)为止,如果你不知道为你的神经网络选择哪种优化算法,就直接选Adam吧!(Insofar, Adam might be the best overall choice.[2])

    参考


    展开全文
  • 2.多分类,1 vs rest 损失以及正则化的选择: saga支持所有情况; lbfs,newton-cg,sag不支持L1正则 liblinear不支持多分类,不支持无正则 3.sag,saga在数据集没有归一化的时候表现不稳定,而liblinear,newton-...

    class sklearn.linear_model.LogisticRegression(penalty=’l2’, dual=False, tol=0.0001, C=1.0, fit_intercept=True, intercept_scaling=1, class_weight=None, random_state=None, solver=’warn’, max_iter=100, multi_class=’warn’, verbose=0, warm_start=False, n_jobs=None, l1_ratio=None)
    逻辑回归可选的solver有:“liblinear”, “newton-cg”, “lbfgs”, “sag” and “saga”

    1.liblinear适合小数据集,sag和saga对大数据集运算比较快

    2.多分类,1 vs rest 损失以及正则化的选择:
    saga支持所有情况;
    lbfs,newton-cg,sag不支持L1正则
    liblinear不支持多分类,不支持无正则

    3.sag,saga在数据集没有归一化的时候表现不稳定,而liblinear,newton-cg,lbfs在没有归一化的情况下也具有鲁棒性

    展开全文
  • 优化算法通用框架 SGD 系列:固定学习率的优化算法 SGD SGD (with Momentum) = SGD-M SGD(with Nesterov Acceleration)= NAG 自适应学习率的优化算法 AdaGrad AdaDelta / RMSProp Adam / Nadam Adam ...
  • 利用量子优化算法进行特征选择,进行特征选择后的算法比原始算法效果要好
  • 灰鲸优化算法优化退火算法,可以用于对各类数据的特征选择
  • 优化算法

    2017-08-30 12:54:19
    最近由于工作需要,要用到优化算法,不同于传统的机器学习(有监督,无监督 ….),优化算法本质上是在众多的选择中要找到一个最优解,目前总结的优化算法如下: 随机优化 爬山法 模拟退火 遗传算法(会着重关注...
  • 研究多目标优化问题,针对提高算法的快速性,提出一种混合变异克隆选择多目标优化算法。进化在三个抗体群中进行,不同的抗体群采用不同的变异算子,并通过外部记忆抗体群的更新,来保留进化的最优抗体,避免算法进化后期...
  • 提出一种定向多尺度变异克隆选择优化算法.为了实现抗体间信息共享,算法利用定向进化机制引导抗体向着抗体群最优解区域逼近.采用多尺度高斯变异机制,在算法初期利用大尺度振荡变异实现了全局最优解空间的快速定位....
  • 针对基于软件定义网络(SDN)的复杂结构中不同资源效用目标共存、资源选择策略相互影响的问题,提出了一种基于 SDN 的网络资源选择多目标优化算法。该算法综合考虑资源供给方和客户方对资源效用的不同优化目标,构建...
  • 基于粗糙集和果蝇优化算法的特征选择方法
  • 【翻译自: Feature Selection with Stochastic Optimization Algorithms】 【说明:Jason BrownleePhD大神的文章个人很喜欢,所以闲暇时间里会做一点翻译...可以将特征选择问题框架为优化问题。在输入要素很少的...
  • 智能优化算法:回溯搜索优化算法 文章目录智能优化算法:回溯搜索优化算法1.算法原理1.1 初始化种群1.2 选择I1.3 变异1.4 交叉1.5 选择II2.算法结果4.参考文献5.Matlab代码 摘要:回溯搜索优化算法(BSA)是 ...
  • 文章目录一、理论基础1、标准鲸鱼优化算法2、改进鲸鱼优化算法(1)自适应惯性权重(2)镜像选择二、WOA-MS算法流程图三、仿真实验与结果分析 一、理论基础 1、标准鲸鱼优化算法 请参考这里。 2、改进鲸鱼优化算法 ...
  • 之前做特征选择,实现过基于群智能算法进行最优化的搜索,看过一些群智能优化算法的论文,在此做一下总结。 最优化问题  在生活或者工作中存在各种各样的最优化问题,比如每个企业和个人都要考虑的一个问题
  • 目 录 1.绪论 1 1.1 研究背景与意义 1 1.2 相关文献综述 3 1.3 主要研究内容 6 1.4 论文组织结构 ...包裹式特征选择 12 3.1 子集产生 12 3.2 子集搜索 14 3.2.1 禁忌搜索 15 3.2.2 模拟退火算法 16 3.2.3 遗传算法 16 3
  • 为了提高工程优化问题的寻优效率,提出一种用于求解优化问题的改进并行混沌优化算法。根据当前解中精英个体的分布情况从优化变量的定义域中划分出精搜索空间。在优化过程中,精搜索空间不断缩小,搜索概率不断增加,这可...
  • 优化算法与特征选择

    2019-11-05 14:34:17
    特征选择: 定义:特征选择( Feature Selection )也称特征子集选择( Feature Subset Selection , FSS ),或属性选择( Attribute Selection )。是指对当前学习任务有价值的属性称为相关属性,没有价值的属性称为无关...
  • 使用森林优化算法的特征选择

    千次阅读 2017-10-16 16:01:08
    转自:FeatureselectionusingForestOptimizationAlgorithm Manizheh Ghaemi a,n, Mohammad-RezaFeizi-Derakhshi b 摘要:特征选择作为组合优化...由于进化算法被报告适用于优化任务,所以森林优化算法(FOA) - 最初
  • 这段英文不够具体,我找到了对应中文解释(见论文:遗传算法在分配问题中的应用): (2)期望选择策略 这段英文同样很笼统,我还是找到了中文解释,但是换了个名称((见论文:遗传算法在分配问题中的应用)...
  • 优化算法之遗传算法

    万次阅读 热门讨论 2018-01-08 15:34:35
    前几天,在听了学长关于遗传优化算法应用在考虑TMD作用的地震分析之后,感觉到优化算法一系列的优化算法的强大之处。回来也趁热打铁查了一下资料,大致理解一下遗传算法的机理。下面就记录分享一下吧。 一、遗传...
  • 选择排序优化算法

    2015-05-31 13:59:26
    优化一:  #include  #define N 10  int main(){  int a[N],max,k,temp,j;  for(int i=0;i  {  scanf("%d",&a[i]);  }  for(i=0;i  {  max=i
  • 离散粒子群优化算法是否以及如何选择惯性和加速度

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,148
精华内容 4,059
关键字:

优化算法选择