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块的基本格式如下,如同其他数据块一样,很多参数都会有默认的参数,所以具体的使用时,按需要进行配置。
- 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是一个工具,仍需要将其作为软件工具箱的重要组成部分进行相关的探索与研究。
本节完,其他章节将会持续更新……
- 顶
- CNTK从入门到深入研究(4)
- CNTK从入门到深入研究(8) - CNTK工程结构(CNTK Core)
- CNTK从入门到深入研究(3) - Network Builders
- CNTK从入门到深入研究(11) - FAQ
- CNTK从入门到深入研究(2) - 研究CNTK配置文件
- CNTK从入门到深入研究(9) - CNTK工程结构(Extensibility&Reader Plugins)
- CNTK从入门到深入研究(7) - 搭建CNTK开发环境
- CNTK从入门到深入研究(4) - SGD随机梯度下降法
- CNTK从入门到深入研究(1) - 一切都从介绍和环境搭建开始
- CNTK从入门到深入研究(5) - Data Reader & Writer
- CNTK从入门到深入研究(10) - 为Python提供封装
- CNTK从入门到深入研究(6) - NDL简明教程
- cntk深度网络——从入门到转行一
- 从入门到深入Fiddler (一)
- 从入门到深入Fiddler (二)
- Hibernate从入门到深入
- webrtc从入门到深入---01
- webrtc从入门到深入---02
- 以太坊连载(十四):什么是以太币?如何获取?
- TCP/IP详解学习笔记(1)-基本概念
- GC 垃圾回收
- 为了offer系列——归并排序(C++)
- 深度学习之优化——高维非凸优化中的鞍点问题
- CNTK从入门到深入研究(4)
- POJ 1478 Island of Logic 笔记
- LigerUI之Grid使用详解(一)——显示数据
- Ending、Java算法(3)-顺序结构
- 以太坊连载(十五):钱包、以太币、Gas介绍
- 解决解析一个带有特殊符号的cookie
- java基础【06】接口
- 利用Sharding-Jdbc实现分表
- UML 类图常用关系