CNTK从入门到深入研究(4)

来源:互联网 发布:全世界的聊天软件 编辑:程序博客网 时间:2024/04/30 02:30

http://blog.csdn.net/borisjineman/article/details/50726921

前言

CNTK中目前仅提供了一种学习方法,即SGD(Stochastic Gradient Descent Learner)随机梯度下降法。本文将针对CNTK中有关SGD随机梯度下降相关的训练配置选项进行说明。本文虽说是一片交流用文章,但是更加类似于针对CNTK的内容的一些翻译,因为在讨论SGD相关内容时如果不提及其中机理,那就只剩下如何使用了。

SGD块的基本格式如下,如同其他数据块一样,很多参数都会有默认的参数,所以具体的使用时,按需要进行配置。

SGD = [    modelPath = "$ModelDir$/myModel.dnn"    epochSize = 60000    minibatchSize = 32    learningRatesPerMB = 0.1    maxEpochs = 30]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

Training process control 训练过程控制

modePath

modePath参数用于设定一个全路径,用于指定最终保存的网络模型文件。

trainCriterionNodeName

trainCriterionNodeName参数用于指定一个用于训练的训练准则节点名称,如果没有指定,则会使用默认的训练准则。

evalCriterionNodeName

evalCriterionNodeName参数通trainCriterionNodeName参数类似,用于指定一个用于评估的评估准侧节点名称,如果没有指定,则会使用默认的评估准则。

epochSize

epochSize参数用于指定epoch的大小,epochSize一般默认为整个数据集的大小。每个epoch都会被保存下来。当epochSize设置为0时,则相当于设定为整个数据集大小。

keepCheckPointFiles

keepCheckPointFiles参数用于指定是否在每个epoch开始时将检查点信息保存到一个文件中,可已设定为true或者false,默认值为false。

maxEpochs

maxEpochs参数用于指定最大运行的epoch数。

minibatchSize

minibatchSize参数用于指定每个mini-batch的数量。默认值为256,该参数可以指定为数组形式,例如128*2:1024代表前两个epoch使用128个样本,之后的所有epoch使用1024个样本。

dropoutRate

dropoutRate参数用于指定在每个epoch中的去除神经元的比率。默认值为0.0,该参数可以指定为数组形式,例如0.5*10:0.2代表前两个epoch使用0.5作为dorpoutRate,之后的所有epoch使用0.2。

maxTempMemSizeInSamplesForCNN

maxTempMemSizeInSamplesForCNN用于指定限定最大内存使用量(在打包或解包一定数量的输入时),参数为0代表不作任何限制。该参数常用与在使用GPU时控制内存堆栈栈顶位置。

Learning rate and momentum control学习率及动量控制

learningRatesPerMB

learningRatesPerMB参数用于设定使用固定的学习率来执行训练过程。可以针对每个mini-Batch进行设定,使用数组的方式设定。例如0.8*10:0.2代表前10个mini-Batch使用0.8作为学习率,之后的所有mini-Batch使用0.2作为学习值。learningRatesPerMB同learningRatesPerSample冲突,所以一般情况只设定一个,如果未设定则由算法自动控制学习率。

learningRatesPerSample

learningRatesPerSample参数同样用于设定使用固定的学习率来执行训练过程。可以针对每个Sample进行设定,使用数组的方式设定。例如0.008*10:0.002代表前10个epoch的Sample使用0.008作为学习率,之后的所有epoch中每个Sample使用0.002作为学习值。learningRatesPerMB同learningRatesPerSample冲突,所以一般情况只设定一个,如果未设定则由算法自动控制学习率。

momentumPerMB

momentumPerMB参数用于控制每个mini-Batch学习的momentum。可使用数组方式进行设定,例如0.1*2:0.9用于指定前2个mini-Batch使用0.1作为momentum,其他的mini-Batch使用0.9。

momentumPerSample

momentumPerSample参数用于控制每个sample的momentum。同样可以使用数组的方式进行指定。momentumPerSample同momentumPerMB的关系如同learningRatesPerSample与learningRatesPerMB类似。

autoAdjust

autoAdjust参数块包括自动学习率控制的算法相关参数配置。默认的情况下为空(”“),代表不适用任何自动调整学习率算法。autoAdjust块中,首先使用autoAdjustLR指定自动调整逻辑的算法。其他参数则是根据具体算法进行指定。

autoAdjustLR

autoAdjustLR参数用于指定自动调整逻辑的算法,可选择的为None、AdjustAfterEpoch、SearchBeforeEpoch以及AdaptiveMinibatchSizing。默认为None不使用任何自动调整逻辑算法。

当autoAdjustLR设定为AdjustAfterEpoch时:

  • reduceLearnRateIfImproveLessThan参数用于指定当提升情况小于指定指值时适当降低学习率,默认值为0。
  • increaseLearnRateIfImproveMoreThan参数用于指定当提升情况大于指定值时时代适当提升学习率,默认值为1#INF(无限大)。
  • learnRateIncreaseFactor参数用于指定学习率增长因子,默认值为1.382。
  • loadBestModel参数用于指定当当前model降低性能时是否加载更加适合的model。
  • learnRateAdjustInterval参数用于指定学习率调整的间隔,默认值为1个epoch。

当autoAdjustLR设定为SearchBeforeEpoch时:

  • numMiniBatch4LRSearch参数用于指定使用多少个mini-Batch来自动搜索学习率。默认值为500。一般情况下设置一个epoch中的10-20%的mini-Batch来自动搜索学习率。
  • numPrevLearnRate参数用于指定使用多少个之前的学习率作为参考。
  • numBestSearchEpoch参数用于指定前多少个epoch来计算出最佳的学习率。默认值为1。

当autoAdjustLR设定为AdaptiveMinibatchSizing时:

  • numMiniBatch4LRSearch参数用于指定使用多少个mini-Batch来自动搜索学习率。默认值为500。一般情况下设置一个epoch中的10-20%的mini-Batch来自动搜索学习率。
  • autoAdjustMinibatch参数用于设定是否自动调整mini-Batch的大小,默认值为false。
  • minibatchSizeTuningFrequency参数用于设定调整mini-Batch大小的周期频率,单位是epoch,默认值为1。
  • minibatchSizeTuningMax参数用于指定最大允许调整的mini-Batch大小的值,默认值为1046576。

Gradient control 梯度控制

gradientClippingWithTruncation

gradientClippingWithTruncation参数用于指定是否使用梯度剪裁(the truncation based gradient clipping)来控制gradient explosion。默认值为true,如果设置为false则可能导致模型很难被训练。

clippingThresholdPerSample

clippingThresholdPerSample参数用于指定每个样本的剪裁门限。默认值为1#INF代表部剪裁。

L2RegWeight

L2RegWeight用于指定L2正规化权重,默认值为0。

L1RegWeight

L1RegWeight用于指定L2正规化权重,默认值为0。

gradUpdateType

gradUpdateType参数用于设定梯度更新方式,可选的值为None(默认值)、AdaGrad和RmsProp。

当gradUpdateType参数为AdaGrad或RmsProp时可设定如下参数:

  • normWithAveMultiplier用于指定是否正规化梯度参数,默认值为true。

当gradUpdateType参数为RmsProp时,还可设定如下参数:

  • rms_wgt_inc参数用于设定增长学习率所乘系数,默认值为1.2。
  • rms_wgt_dec参数用于设定缩减学习率所乘系数,默认值为0.75。
  • rms_wgt_max参数设定最大学习率变化尺度,默认值为10(越接近于1学习率调整越稳定但是缓慢)。
  • rms_wgt_min参数设定最小学习率变化尺度,默认值为0.1(越接近于1学习率调整越稳定但是缓慢)。
  • rms_gamma参数用于设定估计方差的移动平均的平滑因子。值越小,它就越快忘记过去的信息,默认值为0.99。

gaussianNoiseInjectStd

gaussianNoiseInjectStd参数用于设定当使用AdaGrad时所注入的高斯噪声的标准差。默认值为0。

Adaptation 自适应

目前只支持KL散度正则化(KL divergence regularization),其他的自适应技术可以通过向网络中增加计算节点来实现(通过使用MEL网络编辑语言去编辑网络)。

adaptationRegType

adaptationRegType参数用于指定自适应类型,可以设定的值为None(默认值)或者为KL,其中KL代表KL divergence based regularization。

adaptationRegWeight

adaptationRegWeight参数用于指定自适应的权重,默认值为0。

Information display 信息输出

traceLevel

traceLevel用于显示输出消息的等级,可以设置为0(默认值)或者1。

numMBsToShowResult

numMBsToShowResult参数用于指定当训练多少个mini-Batch后显示一次统计信息,默认值为10。

Gradient Check 梯度检查

gradientCheck

gradientCheck参数用于指定是否进行梯度检查,默认值为false。

总结及下一步的计划

本文基本上是根据CNTK针对SGD的文档进行翻译过来的,很多东西翻译的很死板,因为毕竟涉及到了一些算法的东西,随机梯度下降法其实是一种相对简单的下降法,参数就是那些,重要的其实就是学习率。

下一步笔者将会去研究各种Data Reader。Data Reader其实同机器学习不想关,但是由于CNTK是一个工具,仍需要将其作为软件工具箱的重要组成部分进行相关的探索与研究。

本节完,其他章节将会持续更新……


阅读全文
0 0
原创粉丝点击