前言 本系列是《玩转机器学习教程》一个整理的视频笔记。本小节根据混淆矩阵工具计算精准率以及召回率。最后通过例子说明精准率和召回率在评价极度有偏的数据的分类任务上比准确率更好。 ; FN(False Negative)表示样本的真实值为1,但是算法错误预测样本为0,所有符合条件的样本数量; 就本例的混淆矩阵而言,TP = 8, FN = 2,因此准确率 = 8 / (8 + 2 这就是精准率和召回率的不同,在这里对于精准率和召回率来说,关键在于分母不同,由于分母不同,相应指标的解读也就不一样。 为什么精准率和召回率比准确率更好? 虽然这样的一个预测算法准确率能够达到99.9%,但是与之对应的精准率和召回率都是最低值0。 通过精准率和召回率这两个指标可以判断这个预测算法完全没有用,这就是为什么在极度有偏的数据中不看准确率,而选择看精准率和召回率两个指标的原因。通过这两个指标才能够更好的评价分类算法的好坏。
continue lr = 0.001 weight_decay = 0.0005 if "bias" in key: lr = 0.001 * 2
学习率 学习率属于超参数。学习率决定梯度下降速度的快慢,学习率越大,速度越快;学习率越小,速度越慢。如果学习率过大,很可能会越过最优值;反而如果学习率过小,优化的效率可能过低,长时间算法无法收敛。 所以学习率对于算法性能的表现至关重要。 指数衰减学习率 指数衰减学习率是在学习率的基础上增加了动态变化的机制,会随着梯度下降变化而动态变化 tf.train.exponential_decay(learning_rate, global_step , decay_steps, decay_rate, staircase=False, name=None) learn_rate:事先设定的初始学习率 global_step:训练轮数 decay_steps (指数函数);为 True 时,global_step/decay_steps 会转化为整数,此时学习率便是阶梯函数 步骤: 首先使用较大学习率(目的:为快速得到一个比较优的解); 然后通过迭代逐步减小学习率
大 学习率 小 学习速度 快 慢 使用时间点 刚开始训练时 一定轮数过后 副作用 1.易损失值爆炸;2.易振荡。 1.易过拟合;2.收敛速度慢。 学习率设置 在训练过程中,一般根据训练轮数设置动态变化的学习率。 刚开始训练时:学习率以 0.01 ~ 0.001 为宜。 一定轮数过后:逐渐减缓。 学习率减缓机制 轮数减缓 指数减缓 分数减缓 英文名 step decay exponential decay 1/t1/t1/t decay 方法 每N轮学习率减半 学习率按训练轮数增长指数插值递减 曲线 全程缓慢 [黄线]: Solution:初始 学习率过小 导致 收敛慢,应增大学习率,并 从头 开始训练 。 [1] 解析卷积神经网络—深度学习实践手册 [2] 调整学习速率以优化神经网络训练 [3] 如何找到最优学习率
常量学习率 最简单的学习率调整策略就是使用一个固定的学习率。这是最早期梯度下降算法中常用的方法。 在这种策略中,学习率随着训练迭代次数的增加而逐渐减小。公式表示为: 自适应学习率 自适应学习率算法试图根据模型的训练状态动态调整学习率。 torch.nn as nn import torch.optim as optim # 生成模拟数据 x = torch.rand(100, 1) * 10 # shape=(100, 1) y = 2 * x + 3 + torch.randn(100, 1) # y = 2x + 3 + noise # 线性回归模型 class LinearRegression(nn.Module): 学习率范围测试 定义: 学习率范围测试是一种经验性方法,用于找出模型训练中较优的学习率范围。
但是超参数往往又特别重要,比如学习率,如果设置了一个太大的学习率,那么loss就爆了,设置的学习率太小,需要等待的时间就特别长,那么我们是否有一个科学的办法来决定我们的初始学习率呢? 这个方法在论文中是用来估计网络允许的最小学习率和最大学习率,我们也可以用来找我们的最优初始学习率,方法非常简单。 mxtorch,借鉴了gluon的一些优点,在定义层的时候暴露初始化方法,支持tensorboard,同时增加了大量的model zoo,包括inceptionresnetv2,resnext等等,提供预训练权重 .: break plt.figure()plt.xticks(np.log([1e-5, 1e-4, 1e-3, 1e-2, 1e-1, 1]), (1e-5, 1e-4, 1e-3, 1e-2, 1e-1, 1))plt.xlabel(‘learning rate’)plt.ylabel(‘loss’)plt.plot(np.log(lr), losses)plt.show()plt.figure
学习率 × 梯度) 如果学习率过小,梯度下降很慢,如果学习率过大,如Andrew Ng的Stanford公开课程所说梯度下降的步子过大可能会跨过最优值。 不同的学习率对loss的影响如下图所示: 学习率的调整方法: 1、从自己和其他人一般的经验来看,学习率可以设置为3、1、0.5、0.1、0.05、0.01、0.005,0.005、0.0001、0.00001 2、根据数据集的大小来选择合适的学习率,当使用平方和误差作为成本函数时,随着数据量的增多,学习率应该被设置为相应更小的值(从梯度下降算法的原理可以分析得出)。 ,错误率增大了,那么应该重新设置上一轮迭代的值,并且减少学习率到之前的50%。 因此,这是一种学习率自适应调节的方法。在Caffe、Tensorflow等深度学习框架中都有很简单直接的学习率动态变化设置方法。
本文从梯度学习算法的角度中看学习率对于学习算法性能的影响,以及介绍如何调整学习率的一般经验和技巧。 (2)如果F()是单调函数,经过多次迭代会得到最小的成本函数;如果F()非单调,那么我们有可能陷入局部最优,一个简单的解决办法是通过多次尝试不同的ωj 初始值,对比不同估计参数下的成本函数的值是否一致 学习率的调整 为了能够使得梯度下降法有较好的性能,我们需要把学习率的值设定在合适的范围内。学习率决定了参数移动到最优值的速度快慢。 如果学习率过大,很可能会越过最优值;反而如果学习率过小,优化的效率可能过低,长时间算法无法收敛。所以学习率对于算法性能的表现至关重要。 在每次迭代中调节不同的学习率 在每次迭代中去调整学习率的值是另一种很好的学习率自适应方法。此类方法的基本思路是当你离最优值越远,你需要朝最优值移动的就越多,即学习率就应该越大;反之亦反。
内学习率较小,在预热的小学习率下,模型可以慢慢趋于稳定,等模型相对稳定后再选择预先设置的学习率进行训练,使得模型收敛速度变得更快,模型效果更佳。 0.1的学习率进行训练。 于是18年Facebook提出了gradual warmup来解决这个问题,即从最初的小学习率开始,每个step增大一点点,直到达到最初设置的比较大的学习率时,采用最初设置的学习率进行训练。 warmup_steps:%.3f--learning_rate:%.3f" % ( train_steps+1,warmup_steps,learning_rate))2. (四)总结使用Warmup预热学习率的方式,即先用最初的小学习率训练,然后每个step增大一点点,直到达到最初设置的比较大的学习率时(注:此时预热学习率完成),采用最初设置的学习率进行训练(注:预热学习率完成后的训练过程
但是超参数往往又特别重要,比如学习率,如果设置了一个太大的学习率,那么loss就爆了,设置的学习率太小,需要等待的时间就特别长,那么我们是否有一个科学的办法来决定我们的初始学习率呢? 这个方法在论文中是用来估计网络允许的最小学习率和最大学习率,我们也可以用来找我们的最优初始学习率,方法非常简单。 http://t.cn/RYiHSuy),借鉴了gluon的一些优点,在定义层的时候暴露初始化方法,支持tensorboard,同时增加了大量的model zoo,包括inceptionresnetv2, best_loss or optimizer.learning_rate > 1.: breakplt.figure()plt.xticks(np.log([1e-5, 1e-4, 1e-3, 1e-2, 1e-1, 1]), (1e-5, 1e-4, 1e-3, 1e-2, 1e-1, 1))plt.xlabel('learning rate')plt.ylabel('loss')plt.plot(np.log
两个阶段:离线评估和在线评估 2. 算法工程师应当具备的基本功 知道每种评估指标的精确定义 选择合适的评估指标 根据评估指标的反馈调整模型 ---- 3. 对数据整体分类准确率高,不代表对奢侈品用户的分类准确率高 方案 可以考虑平均准确率,即计算每个类别下的样本准确率,再求平均 ---- 4. 可以对照这个图,看一下准确率,精度,和召回率的定义。 右上角是准确率的公式。 如果我们想要在更大程度上强调精度或者召回率,我们可以选择这些指标上最佳时对应的模型。 ---- 预告 next: 机器学习中常用评估指标汇总 ROC 曲线详解 ---- 大家好! 我是 Alice,欢迎进入一起学《百面机器学习》系列! 这个系列并不只是根据书本画个思维导图,除了用导图的形式提炼出精华,还会对涉及到的重要概念进行更深度的解释,顺便也梳理一下机器学习的知识体系。
学习率直接影响模型的收敛状态,batchsize则影响模型的泛化性能,两者又是分子分母的直接关系,相互也可影响,因此这一次来详述它们对模型性能的影响。 2. 学习率如何影响模型性能? 第二个式子约束了学习率随着训练进行有效地降低,保证收敛稳定性,各种自适应学习率算法本质上就是不断在调整各个时刻的学习率。 2.2、学习率变换策略对模型性能的影响 学习率在模型的训练过程中很少有不变的,通常会有两种方式对学习率进行更改,一种是预设规则学习率变化法,一种是自适应学习率变换方法。 如果数据集比较小,完全可以采用全数据集 ( **Full Batch Learning)**的形式,这样做有 2 个好处:其一,由全数据集确定的方向能够更好地代表样本总体,从而更准确的朝向极值所在的方向 对于更大的数据集,以上 2 个好处又变成了 2 个坏处:其一,随着数据集的海量增长和内存限制,一次性载入所有的数据进来变得越来越不可行。
符合这种调整策略的方法,一般是step,step学习率下降策略是最为常用的一种,表现为,在初始学习率的基础上,每到一个阶段学习率将以gamma的指数倍下降,通常情况下gamma为0.1。 线性下降调整策略 线性下降策略非常好理解,就是学习率与迭代周期是线性关系,初始学习率和周期确定了,下降的斜率也就确定了。 余弦退火调整策略 以余弦函数为周期,并在每个周期最大值时重新设置学习率。以初始学习率为最大学习率,以 2∗Tmax 为周期,在一个周期内先下降,后上升。 而循环学习率方法使得一个范围(base_lr ~ max_lr)里的学习率在训练中都能得到运用,也就是说,在下边界和上边界中,那个最佳的学习率将会在训练中有机会运用到训练中。 ReduceLROnPlateau ReduceLROnPlateau的名字很直观,就是在持续平稳的状态时下降学习率,当某指标不再变化(下降或升高),则调整学习率,这是非常实用的学习率调整策略。
如果我们相信方向敏感度在某种程度是轴对称的,那么每个参数社会不同的学习率,在整个学习过程中自动适应这些学习率是有道理的。 Delta-bar-delta算法是一个早期的在训练时适应模型参数各自学习率的启发方式。该方法基于一个很简单的想法,如果损失对于某个给定模型参数的偏导数保持相同的符号,那么学习率应该增加。 如果对于该参数的偏导变化了符号,那么学习率应该更小。最近,提出了一些增量(或者基于小批量)的算法来自适应模型参数的学习率。 当应用于非凸函数训练神经网络时,学习轨迹可能穿过了很多不同的结构,最终到达一个局部是凸碗的区域。AdaGrad根据平方梯度的整个历史收缩学习率,可能使得学习率在达到这样的凸结构前就变得太小收敛。 Adam通常被认为对超参数的选择相当鲁棒,尽管学习率有时需要从建议的默认修改。
率差的输出 上一篇文章说到了Proc freq过程步可以做很多事情。可以输出可信区间,同样也可以输出率差,这里的率差是2*2表的率差,同样也是一个参数来控制。 u_rdif2 _rdif2_ l_rdif1 u_rdif1 _rdif1_) riskdiff ; run; 这里可以直接在过程步中添加output语句,使用out选项进行控制输出数据,就可以实现将率差以及可信区间的输出 那么究竟哪一个才是最开始想要计算的对照组-试验组的率差以及可信区间呢,答案是不管dif1还是dif2都是对照组-试验组的率差,但是dif1与dif2分别表示(group*aeyn)中*后面的变量(aeyn 根据经验,aeyn的2个水平“否”会排在“是”的前面,所以呢,dif1表示的是否发生不良事件为否的率差,dif2表示发生不良事件为是的率差。 这个就得从2*2表的输出的结构以及率差计算的方式(第一行-第二行)来说了。先来看看下面的的图: ? ?
学习率是最影响性能的超参数之一,如果我们只能调整一个超参数,那么最好的选择就是它。相比于其它超参数学习率以一种更加复杂的方式控制着模型的有效容量,当学习率最优时,模型的有效容量最大。 Smith 认为,用户可以以非常低的学习率开始训练模型,在每一次迭代过程中逐渐提高学习率(线性提高或是指数提高都可以),用户可以用这种方法估计出最佳学习率。 Smith 提出的「Triangular」和「Triangular2」学习率周期变化的方法。左图中,LR 的最小值和最大值保持不变。右图中,每个周期之后 LR 最小值和最大值之间的差减半。 在 cycle_mult=2 的情况下训练整个网络,直到过度拟合 从上面的步骤中,我们注意到步骤 2、5 和 7 提到了学习速率。 这篇文章的前半部分已经基本涵盖了上述步骤中的第 2 项——如何在训练模型之前得出最佳学习率。 在下文中,我们会通过 SGDR 来了解如何通过重启学习速率来减少训练时间和提高准确性,以避免梯度接近零。
在前三篇文档中我们大概学习了成交量指标、价格指标和重叠研究指标(均线相关),其中成交量就是多空双方的力量对比指标,经过作图发现能量潮和ADOSC指标比较好,其均通过成交量的统计得出。 在最后的一篇文档中,我们学习了重叠性研究指标,发现重叠性就是均线指标。首先就是布林带,通过对收盘价的统计,画出价格的的波动范围,主要用上轨、下轨和中轨,中轨采用的是均线。 今天我们学习一下波动率函数,潜意识里波动率应该就是通过统计来描述股价来回起伏的频次。按照一般逻辑应该与方差等有关系。现在我们看看talib的波动率指标是怎么做的。 as mpf import mplfinance as mpf # pip install --upgrade mplfinance from matplotlib.pylab import date2num plot(xdates, vol10, c='w', label='VOL10') ax2.yaxis.set_ticks_position('right') # y轴显示在右边 ax2.legend
——鲁迅 全文字数:3200字 阅读时间:12分钟 前言 本系列是《玩转机器学习教程》一个整理的视频笔记。 另外一个是横坐标为精准率,纵坐标为召回率,用于查看精准率和召回率的平衡点。 通过上一小节的学习,我们知道decision_function(X_test)函数得到的是每一个测试样本在分类算法上计算的分数值score。 在上一小节中,通过观察调整阈值与精准率和召回率的变化关系,可以看出精准率和召回率是相互牵制相互平衡的两个指标: 当精准率升高的时候,召回率就会不可避免的降低; 当召回率升高的时候,精准率也会不可避免的降低 "算法2"的Precision-Recall曲线包裹着"算法1"上的Precision-Recall曲线,很明显"算法2"要优于"算法1"。
学习率衰减 学习率衰减(learning rate decay) 在训练神经网络时,使用学习率控制参数的更新速度.学习率较小时,会大大降低参数的更新速度;学习率较大时,会使搜索过程中发生震荡,导致参数在极优值附近徘徊 为此,在训练过程中引入学习率衰减,使学习率随着训练的进行逐渐衰减. 函数使用多项式衰减,以给定的decay_steps将初始学习率(learning_rate)衰减至指定的学习率(end_learning_rate). ;这样,通过增大学习率可以跳出局部极小值. 示例,学习率下降后是否重新上升对比: #!
前言 一般学习率可以人工设置,根据经验进行设置。通常会尝试初始学习率为0.1 0.01 0.001 0.0001等来观察初始阶段loss收敛情况。 CLR 选择一个合适的初始学习率 使用CLR可以在CIFAR10数据集上达到以下效果: ? 一般来说,学习率会被设置在一个最大值、最小值的范围内,并且学习率在这些边界之间进行循环变化,变化方式有以下几种: triangular window,即线性的变换learning rate Welch 通常认为loss优化最困难的地方在于鞍点,而不是局部最小值,鞍点梯度过小所以会让学习的过程变慢。这个时候增大学习率可以让模型越过鞍点。 ** LR range test 可以用来解决这个问题,即通过增加学习率观察结果的方式来判断最大值和最小值。