网站建设公司网站源码,泸州作网站建设联系电话,学校网站建设基本流程,更改wordpress小工具的样式文章目录 3.7 预训练与微调#xff08;fine tuning#xff09; 3.7.1 为什么无监督预训练可以帮助深度学习 3.7.2 什么是模型微调 fine tuning 3.7.3 微调时候网络参数是否更新 3.7.4 fine-tuning模型的三种状态 3.8 权重偏差和初始化 3.8.1 全都初始化为0 3.8.2 全都初始化为…文章目录 3.7 预训练与微调fine tuning 3.7.1 为什么无监督预训练可以帮助深度学习 3.7.2 什么是模型微调 fine tuning 3.7.3 微调时候网络参数是否更新 3.7.4 fine-tuning模型的三种状态 3.8 权重偏差和初始化 3.8.1 全都初始化为0 3.8.2 全都初始化为同样的值 3.8.3 初始化为小的随机数 3.8.4 用校准方差 3.8.5 稀疏初始化Sparse Initialization 3.8.6 初始化偏差 3.9 学习率 3.9.1 学习率的作用 3.9.2 学习率衰减常用参数有哪些 3.9.3 分段常数衰减 3.9.4 指数衰减 3.9.5 自然指数衰减 3.9.6 多项式衰减 3.9.7 余弦衰减 3.12 Dropout 系列问题 3.12.1 为什么要使用正则化 3.12.2 为什么正则化有利于预防过拟合 3.12.3 理解dropout正则化 3.12.4 dropout率的选择 3.12.5 dropout有什么缺点 3.13 深度学习中常用的数据增强方法 3.14 如何理解Internal Covariate Shift 参考文献 3.7 预训练与微调fine tuning
3.7.1 为什么无监督预训练可以帮助深度学习
深度网络存在的问题
网络越深需要的训练样本数越多。若用监督则需大量标注样本不然小规模样本容易造成过拟合。深层网络特征比较多会出现的多特征问题主要有多样本问题、规则化问题、特征选择问题。多层神经网络参数优化是个高阶非凸优化问题经常得到收敛较差的局部解。梯度扩散问题BP算法计算出的梯度随着深度向前而显著下降导致前面网络参数贡献很小更新速度慢。
解决方法
逐层贪婪训练无监督训练unsupervised pre-training即训练网络的第一个隐藏层再训练第二个...最后用这些训练好的网络参数值作为整体网络参数的初始值。
经过预训练最终能得到比较好的局部最优解。
3.7.2 什么是模型微调 fine tuning
用别人的参数、修改后的网络和自己的数据进行训练使得参数适应自己的数据这样一个过程通常称之为微调fine tuning。
模型的微调举例说明
我们知道CNN在图像识别这一领域取得了巨大的进步。如果想将CNN应用到我们自己的数据集上这时通常就会面临一个问题通常我们的dataset都不会特别大一般不会超过1万张甚至更少每一类图片只有几十或者十几张。这时候直接应用这些数据训练一个网络的想法就不可行了因为深度学习成功的一个关键性因素就是大量带标签数据组成的训练集。如果只利用手头上这点数据即使我们利用非常好的网络结构也达不到很高的 performance。这时候fine-tuning的思想就可以很好解决我们的问题我们通过对ImageNet上训练出来的模型如CaffeNetVGGNetResNet进行微调然后应用到我们自己的数据集上。
3.7.3 微调时候网络参数是否更新
答会更新。
fine-tuning的过程相当于继续训练跟直接训练的区别是初始化的时候。直接训练是按照网络定义指定的方式初始化。finetune是用你已有的参数文件来初始化。
3.7.4 fine-tuning模型的三种状态
状态一只预测不训练。特点相对快、简单针对那些已经训练好现在要实际对未知数据进行标注的项目非常高效状态二训练但只训练最后分类层。特点fine-tuning的模型最终的分类以及符合要求现在只是在他们的基础上进行类别降维。状态三完全训练分类层之前卷积层都训练。特点跟状态二的差异很小当然状态二比较耗时和需要训练GPU资源不过非常适合fine-tuning到自己想要的模型里面预测精度相比状态二也提高不少。
3.8 权重偏差和初始化
3.8.1 全都初始化为0
偏差初始化陷阱都初始化为0。
产生陷阱原因因为并不知道在训练神经网络中每一个权重最后的值但是如果进行了恰当的数据归一化后我们可以有理由认为有一半的权重是正的另一半是负的。令所有权重都初始化为0如果神经网络计算出来的输出值是一样的神经网络在进行反向传播算法计算出来的梯度值也一样并且参数更新值也一样。更一般地说如果权重初始化为同一个值网络就是对称的。
形象化理解在神经网络中考虑梯度下降的时候设想你在爬山但身处直线形的山谷中两边是对称的山峰。由于对称性你所在之处的梯度只能沿着山谷的方向不会指向山峰你走了一步之后情况依然不变。结果就是你只能收敛到山谷中的一个极大值而走不到山峰上去。
3.8.2 全都初始化为同样的值
偏差初始化陷阱都初始化为一样的值。
以一个三层网络为例首先看以下结构。 它的表达式为 如果每个权重都一样那么在多层网络中从第二层开始每一层的输入值都是相同的了也就是既然都一样就相当于一个输入了为啥呢
如果是反向传递算法如果不明白请看上面的连接其中的偏置项和权重项的迭代偏导数计算公式如下 的计算公式 如果用的是 sigmoid 函数 把后两个公式代入可以看出所得到的梯度下降法的偏导相同不停的迭代不停的相同不停的迭代不停的相同......最后就得到了相同的值权重和截距。
3.8.3 初始化为小的随机数
将权重初始化为很小的数字是一个普遍的打破网络对称性的解决办法。这个想法是神经元在一开始都是随机的、独一无二的所以它们会计算出不同的更新并将自己整合到整个网络的各个部分。一个权重矩阵的实现可能看起来像其中randn是从均值为0的单位标准高斯分布进行取样。通过这个公式函数每个神经元的权重向量初始化为一个从多维高斯分布取样的随机向量所以神经元在输入空间中指向随机的方向so the neurons point in random direction in the input space。应该是指输入空间中对于随机方向有影响。其实也可以从均匀分布中来随机选取小数但是在实际操作中看起来似乎对最后的表现并没有太大的影响。
注并不是数字越小就会表现的越好。比如如果一个神经网络层的权重非常小那么在反向传播算法就会计算出很小的梯度(因为梯度 gradient 是与权重成正比的)。在网络不断的反向传播过程中将极大地减少“梯度信号”并可能成为深层网络的一个需要注意的问题。
3.8.4 用校准方差 上述建议的一个问题是随机初始化神经元的输出的分布有一个随输入量增加而变化的方差。结果证明我们可以通过将其权重向量按其输入的平方根(即输入的数量)进行缩放从而将每个神经元的输出的方差标准化到 1。也就是说推荐的启发式方法 (heuristic) 是将每个神经元的权重向量按下面的方法进行初始化其中 n 表示输入的数量。这保证了网络中所有的神经元最初的输出分布大致相同并在经验上提高了收敛速度。
3.8.5 稀疏初始化Sparse Initialization
另一种解决未校准方差问题的方法是把所有的权重矩阵都设为零但是为了打破对称性每个神经元都是随机连接地(从如上面所介绍的一个小的高斯分布中抽取权重)到它下面的一个固定数量的神经元。一个典型的神经元连接的数目可能是小到 10 个。
3.8.6 初始化偏差
将偏差初始化为零是可能的也是很常见的因为非对称性破坏是由权重的小随机数导致的。因为 ReLU 具有非线性特点所以有些人喜欢使用将所有的偏差设定为小的常数值如 0.01因为这样可以确保所有的 ReLU 单元在最开始就激活触发(fire)并因此能够获得和传播一些梯度值。然而这是否能够提供持续的改善还不太清楚(实际上一些结果表明这样做反而使得性能更加糟糕)所以更通常的做法是简单地将偏差初始化为 0。
3.9 学习率
3.9.1 学习率的作用
在机器学习中监督式学习通过定义一个模型并根据训练集上的数据估计最优参数。梯度下降法是一个广泛被用来最小化模型误差的参数优化算法。梯度下降法通过多次迭代并在每一步中最小化成本函数cost来估计模型的参数。学习率learning rate在迭代过程中会控制模型的学习进度。
在梯度下降法中都是给定的统一的学习率整个优化过程中都以确定的步长进行更新在迭代优化的前期学习率较大则前进的步长就会较长这时便能以较快的速度进行梯度下降而在迭代优化的后期逐步减小学习率的值减小步长这样将有助于算法的收敛更容易接近最优解。故而如何对学习率的更新成为了研究者的关注点。在模型优化中常用到的几种学习率衰减的方法有分段常数衰减、多项式衰减、指数衰减、自然指数衰减、余弦衰减、线性余弦衰减、噪声线性余弦衰减。
3.9.2 学习率衰减常用参数有哪些
参数名称参数说明learning_rate初始学习率global_step用于衰减计算的全局步数非负用于逐步计算衰减指数decay_steps衰减步数必须是正值决定衰减周期decay_rate衰减率end_learning_rate最低的最终学习率cycle学习率下降后是否重新上升alpha最小学习率num_periods衰减余弦部分的周期数initial_variance噪声的初始方差variance_decay衰减噪声的方差
3.9.3 分段常数衰减
分段常数衰减需要事先定义好的训练次数区间在对应区间置不同的学习率的常数值一般情况刚开始的学习库率要大一些之后要越来越小要根据样本量的大小设置区间的间隔大小样本量越大区间间隔要小一点。下图即为分段常数衰减的学习率变化图横坐标代表训练次数纵坐标代表学习率。 3.9.4 指数衰减
以指数衰减方式进行学习率的更新学习率的大小和训练次数指数相关其更新规则为 这种衰减方式简单直接收敛速度快。是最常用的学习率衰减方式如下图所示绿色的学习率随训练次数的指数衰减方式红色的即为分段常数衰减它在一定的训练区间内保持学习率不变。 3.9.5 自然指数衰减
它与指数的衰减方式相似不同的在于它的衰减底数是故而其收敛的速度更快一般用于相对比较容易训练的网络便于较快的收敛其更新规则如下 下图为分段常数衰减、指数衰减、自然指数衰减三种方式的对比图红色的即为分段常数衰减图阶梯型曲线。蓝色线为指数衰减图绿色的即为自然指数衰减图很明显可以看到自然指数衰减方式下的学习率衰减程度要大于一般指数衰减方式有助于更快的收敛。 3.9.6 多项式衰减
应用多项式衰减的方式进行更新学习率这里会给定初始学习率和最低学习率取值然后将会按照给定的衰减方式将学习率从初始值衰减到最低值其更新规则如下式所示 需要注意的是有两个机制降到最低学习率后到训练结束可以一直使用最低学习率进行更新另一个是再次将学习率调高使用decay_steps的倍数取第一个大于 global_steps的结果如下式所示它是用来防止神经网络在训练的后期由于学习率过小而导致的网络一直在某个局部最小值附近震荡这样可以通过在后期增大学习率跳出局部最小值。 如下图所示红色线代表学习率降低至最低后一直保持学习率不变进行更新绿色线代表学习率衰减到最低后又会再次循环往复的升高降低。 3.9.7 余弦衰减
余弦衰减就是采用余弦的相关方式进行学习率的衰减衰减图和余弦函数相似其更新机制如下式所示 如下图所示红色即为标准的余弦衰减曲线学习率从初始值下降到最低学习率后保持不变。蓝色的线是线性余弦衰减方式曲线它是学习率从初始学习率以线性的方式下降到最低学习率值。绿色是噪声线性余弦衰减方式。 3.12 Dropout 系列问题
3.12.1 为什么要使用正则化
深度学习可能存在过拟合问题——高方差有两个解决方法一个是正则化另一个是准备更多的数据这是非常可靠的方法但你可能无法时时刻刻准备足够多的训练数据或者获取更多数据的成本很高但正则化通常有助于避免过拟合或减少你的网络误差。如果你怀疑神经网络过度拟合了数据即存在高方差问题那么最先想到的方法可能是正则化另一个解决高方差的方法就是准备更多数据这也是非常可靠的办法但你可能无法时时准备足够多的训练数据或者获取更多数据的成本很高但正则化有助于避免过度拟合或者减少网络误差。
3.12.2 为什么正则化有利于预防过拟合 左图是高偏差右图是高方差中间是Just Right这几张图我们在前面课程中看到过。
3.12.3 理解dropout正则化
Dropout可以随机删除网络中的神经单元它为什么可以通过正则化发挥如此大的作用呢
直观上理解不要依赖于任何一个特征因为该单元的输入可能随时被清除因此该单元通过这种方式传播下去并为单元的四个输入增加一点权重通过传播所有权重dropout将产生收缩权重的平方范数的效果和之前讲的L2正则化类似实施dropout的结果它会压缩权重并完成一些预防过拟合的外层正则化L2对不同权重的衰减是不同的它取决于激活函数倍增的大小。
3.12.4 dropout率的选择
经过交叉验证隐含节点dropout率等于0.5的时候效果最好原因是0.5是时候 dropout 随机生成的网络结构最多。dropout 也可以被用作一种添加噪声的方法直接对input进行操作。输入层设为更接近 1 的数。使得输入变化不会太大0.8.对参数的训练进行球形限制max-normalization对dropout的训练非常有用。球形半径是一个需要调整的参数可以使用验证集进行参数调优。dropout自己虽然也很牛但是dropout、max-normalization、large decaying learning rates and high momentum组合起来效果更好比如 max-norm regularization就可以防止大的learning rate导致的参数 blow up。使用pretaining方法也可以帮助dropout训练参数在使用 dropout 时要将所有参数都乘以。
3.12.5 dropout有什么缺点
dropout一大缺点就是代价函数不再被明确定义每次迭代都会随机移除一些节点如果再三检查梯度下降的性能实际上是很难进行复查的。定义明确的代价函数每次迭代后都会下降因为我们所优化的代价函数实际上并没有明确定义或者说在某种程度上很难计算所以我们失去了调试工具来绘制这样的图片。我通常会关闭dropout函数将keep-prob的值设为1运行代码确保函数单调递减。然后打开dropout函数希望在dropout过程中代码并未引入bug。我觉得你也可以尝试其他方法虽然我们并没有关于这些方法性能的数据统计但你可以把它们与dropout方法一起使用。
3.13 深度学习中常用的数据增强方法
Color Jittering对颜色的数据增强图像亮度、饱和度、对比度变化此处对色彩抖动的理解不知是否得当PCA Jittering首先按照RGB三个颜色通道计算均值和标准差再在整个训练集上计算协方差矩阵进行特征分解得到特征向量和特征值用来做PCA JitteringRandom Scale尺度变换Random Crop采用随机图像差值方式对图像进行裁剪、缩放包括Scale Jittering方法VGG及ResNet模型使用或者尺度和长宽比增强变换Horizontal / Vertical Flip水平 / 垂直翻转Shift平移变换Rotation / Reflection旋转 / 仿射变换Noise高斯噪声、模糊处理Label Shuffle类别不平衡数据的增广。
3.14 如何理解Internal Covariate Shift
深度神经网络模型的训练为什么会很困难其中一个重要的原因是深度神经网络涉及到很多层的叠加而每一层的参数更新会导致上层的输入数据分布发生变化通过层层叠加高层的输入分布变化会非常剧烈这就使得高层需要不断去重新适应底层的参数更新。为了训好模型我们需要非常谨慎地去设定学习率、初始化权重、以及尽可能细致的参数更新策略。
Google讲这一现象总结为 Internal Covariate Shift简称ICS。什么是ICS呢
大家都知道在统计机器学习中的一个经典假设是“源空间source domain和目标空间target domain的数据分布distribution是一致的”。如果不一致那么就出现了新的机器学习问题如 transfer learning / domain adaptation 等。而 covariate shift 就是分布不一致假设之下的一个分支问题它是指源空间和目标空间的条件概率是一致的但是其边缘概率不同。
大家细想便会发现的确对于神经网络的各层输出由于它们经过了层内操作作用其分布显然与各层对应的输入信号分布不同而且差异会随着网络深度增大而增大可是它们所能“指示”的样本标记label仍然是不变的这便符合了covariate shift的定义。由于是对层间信号的分析也即是“internal”的来由。
那么ICS会导致什么问题
简而言之每个神经元的输入数据不再是“独立同分布”。
其一上层参数需要不断适应新的输入数据分布降低学习速度。
其二下层输入的变化可能趋向于变大或者变小导致上层落入饱和区使得学习过早停止。
其三每层的更新都会影响到其它层因此每层的参数更新策略需要尽可能的谨慎。 参考文献
[1] Rosenblatt, F. The perceptron: A probabilistic model for information storage and organization in the brain.[J]. Psychological Review, 1958, 65(6):386-408.
[2] Duvenaud D , Rippel O , Adams R P , et al. Avoiding pathologies in very deep networks[J]. Eprint Arxiv, 2014:202-210.
[3] Rumelhart D E, Hinton G E, Williams R J. Learning representations by back-propagating errors[J]. Cognitive modeling, 1988, 5(3): 1.
[4] Hecht-Nielsen R. Theory of the backpropagation neural network[M]//Neural networks for perception. Academic Press, 1992: 65-93.
[5] Felice M. Which deep learning network is best for you?| CIO[J]. 2017.
[6] Conneau A, Schwenk H, Barrault L, et al. Very deep convolutional networks for natural language processing[J]. arXiv preprint arXiv:1606.01781, 2016, 2.
[7] Ba J, Caruana R. Do deep nets really need to be deep?[C]//Advances in neural information processing systems. 2014: 2654-2662.
[8] Nielsen M A. Neural networks and deep learning[M]. USA: Determination press, 2015.
[9] Goodfellow I, Bengio Y, Courville A. Deep learning[M]. MIT press, 2016.
[10] 周志华. 机器学习[M].清华大学出版社, 2016.
[11] Kim J, Kwon Lee J, Mu Lee K. Accurate image super-resolution using very deep convolutional networks[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2016: 1646-1654.
[12] Chen Y, Lin Z, Zhao X, et al. Deep learning-based classification of hyperspectral data[J]. IEEE Journal of Selected topics in applied earth observations and remote sensing, 2014, 7(6): 2094-2107.
[13] Domhan T, Springenberg J T, Hutter F. Speeding up automatic hyperparameter optimization of deep neural networks by extrapolation of learning curves[C]//Twenty-Fourth International Joint Conference on Artificial Intelligence. 2015.
[14] Maclaurin D, Duvenaud D, Adams R. Gradient-based hyperparameter optimization through reversible learning[C]//International Conference on Machine Learning. 2015: 2113-2122.
[15] Srivastava R K, Greff K, Schmidhuber J. Training very deep networks[C]//Advances in neural information processing systems. 2015: 2377-2385.
[16] Bergstra J, Bengio Y. Random search for hyper-parameter optimization[J]. Journal of Machine Learning Research, 2012, 13(Feb): 281-305.
[17] Ngiam J, Khosla A, Kim M, et al. Multimodal deep learning[C]//Proceedings of the 28th international conference on machine learning (ICML-11). 2011: 689-696.
[18] Deng L, Yu D. Deep learning: methods and applications[J]. Foundations and Trends® in Signal Processing, 2014, 7(3–4): 197-387.
[19] Erhan D, Bengio Y, Courville A, et al. Why does unsupervised pre-training help deep learning?[J]. Journal of Machine Learning Research, 2010, 11(Feb): 625-660.
[20] Dong C, Loy C C, He K, et al. Learning a deep convolutional network for image super resolution[C]//European conference on computer vision. Springer, Cham, 2014: 184-199.
[21] 郑泽宇梁博文顾思宇.TensorFlow实战Google深度学习框架第2版[M].电子工业出版社,2018.
[22] 焦李成. 深度学习优化与识别[M].清华大学出版社,2017.
[23] 吴岸城. 神经网络与深度学习[M].电子工业出版社,2016.
[24] Wei, W.G.H., Liu, T., Song, A., et al. (2018) An Adaptive Natural Gradient Method with Adaptive Step Size in Multi-layer Perceptrons. Chinese Automation Congress, 1593-1597.
[25] Y Feng, Y Li.An Overview of Deep Learning Optimization Methods and Learning Rate Attenuation Methods[J].Hans Journal of Data Mining,2018,8(4),186-200.