![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法的实际使用
whitenightwu
这个作者很懒,什么都没留下…
展开
-
训练过程--Batchsize(总之一般情况下batchsize能设多大就设多大)
尽可能地设大batchsize "Large BatchLarge Batch在 keypoints上也是有用的,大概能提到0.4到0.3的点的AP。"在利用 ImageNet 训练 AlexNet 模型时,其中每 GPU 的最优批量大小为 512。如果我们希望使用大量 GPU 并保证每 GPU 皆拥有理想的执行效率,则应当将批量大小设定为 16 x 512 = 8192。 "Tra...原创 2018-12-06 15:15:58 · 96630 阅读 · 23 评论 -
数据预处理--数据集处理
选择训练集/开发集/测试集大小 之前,我只知道较普遍的 60/20/20 分隔。 但对于一个非常大的数据集,应该使用 98/1/1 甚至 99/0.5/0.5 的分隔。这是因为开发集合测试集只要足够大能保证模型处于团队设定的置信区间即可。如果你使用 1 千万个训练样本,那么 10 万样本(即数据集的 1%)就足够保证开发集和/或测试集的置信区间了。数据集如何确保开发集和测试集的数据分布一...原创 2018-12-05 13:45:16 · 2570 阅读 · 0 评论 -
数据预处理--持久化预处理后的数据
在做大型项目时,不要每次都做数据预处理! 一般是一步一步来,1.做完预处理再做训练,2.做完训练再预测,3.然后根据预测的结果迭代调节模型和数据(交叉验证、过/欠采样等)。 由于需要训练模型预测unknown值,预处理过程的时间代价比较大。因此将预处理后的数据持久化,保存到文件中,之后的学习模型直接读取文件数据进行训练预测,无须再预处理。 简单的表述就是,将需要参数的部分和不需要参数的...转载 2018-12-04 09:51:16 · 1232 阅读 · 0 评论 -
数据预处理--克服数据不平衡
这种问题和业务需求也有很强的相关性,可能根据领域知识也能解决一些问题。 一篇综述论文:《Learning from Imbalanced Data》。不平衡数据评估指标 1)单一评估指标、ROC曲线和PR曲线见机器学习:准确率(Precision)、召回率(Recall)、F值(F-Measure)、ROC曲线、PR曲线 2)除此之外,Cost Function也可以作为一个指...原创 2018-12-04 09:50:45 · 2342 阅读 · 1 评论 -
训练过程--学习率与权重衰减
学习率 主要是两个方面:学习率的初始化和学习率的更新 梯度更新的步长就是学习率学习率初始化 1)ReLu的线性不饱和激活端着相对于Tanh的双饱和端(经验规则0.1),肯定要降量级。 2)b的学习率一般为w的两倍; 例如Caffe和Alex给的Model基础都是0.001(W)/0.002(b)。 至于为什么Bias的学习率是2倍,猜测是更快抑制Wx加权结果,加速学习。...原创 2018-12-05 11:22:02 · 25392 阅读 · 1 评论 -
数据预处理--缺失值和异常值的处理
处理缺失数据的方法 1)用平均值、中值、分位数、众数、随机值等替代。 如果预计该变量对于学习模型效果影响不大,可以对unknown值赋众数,这里认为变量都对学习模型有较大影响,效果一般,因为等于人为增加了噪声,不建议采取此法。 数值型的话,均值和近邻或许是更好的方法。做成哑变量更适合分类、顺序型变量。 2)用其他变量做预测模型来算出缺失变量。 效果比方法1略好。有一个根本缺陷,...原创 2018-12-03 11:07:07 · 14129 阅读 · 0 评论 -
数据预处理--数据扩增/Data Augmentation/图像增强
若增加训练数据,则能够提升算法的准确率,因为这样可以避免过拟合,更好地泛化;而避免了过拟合你就可以增大你的网络结构了。 可以大量使用数据增广。1)几何变换 包括:弹性变换(Elastic Transform)、透视变换(Perspective Transform)、分段仿射变换(Piecewise Affine transforms)、枕形畸变(Pincushion Distorti...原创 2018-12-03 11:00:26 · 9727 阅读 · 0 评论 -
训练过程--梯度下降算法(SGD、adam等)
SGD系列1)Batch gradient descent(批量梯度下降) 在整个数据集上 每更新一次权重,要遍历所有的样本,由于样本集过大,无法保存在内存中,无法线上更新模型。对于损失函数的凸曲面,可以收敛到全局最小值,对于非凸曲面,收敛到局部最小值。 随机梯度下降(SGD)和批量梯度下降(BGD)的区别。SGD 从数据集中拿出一个样本,并计算相关的误差梯度,而批量梯度下降使用所有...原创 2018-12-05 10:43:25 · 43219 阅读 · 2 评论 -
数据预处理--输入归一化/标准化/放缩
输入归一化/标准化 Alex 和 Caffe中的初始化参数都是基于均值归一化的,如果不做归一化,会因为输入大了一半,导致训练失败。这也是为什么Caffe强制为样本计算图像均值的原因。 这样,像素值[0,255]被调整成了近似[-128,128]。尽管图像数据格式规整,但是做一做归一化还是挺有用处的。 归一化本身是一种降低特征之间差异的手段,不一定就可以增强discriminative ...原创 2018-12-03 10:35:59 · 4988 阅读 · 1 评论 -
数据预处理--总述
围绕着要喂给神经网络的数据:收集数据、清洗数据、操作数据、给数据加标签、分析数据、做数据可视化等等。数据预处理阶段 基于对业务的理解,这种相对比较少一点,更多的还是基于数据本身。你可以用一些数据挖掘中常用的数据清理的方法,过滤异常值,过滤缺失严重的特征等等。 有时候做预处理,最终还是需要一些反馈。比如从数据上看,可能需要扔掉某些东西。我们需要去试一试,扔掉这些东西之后,在最终的比赛中...原创 2018-12-03 10:19:52 · 395 阅读 · 0 评论 -
训练过程--关于训练数据与标签的trick
问题 神经网络很容易被对抗样本戏弄。一个金鱼图片本来可以分类正确。但是,如果我们加入中间图片的噪音模式,则分类器认为这是一张雏菊的图片。解决 显然,多扫视后投票和无监督预训练的策略都不能解决这个漏洞。 使用高度正则化会有所帮助,但会影响判断不含噪声图像的准确性。 Ian Goodfellow提出了训练这些对抗样本的理念。它们可以自动的生成并添加到训练集中。结果表明,除了对对抗样本...原创 2018-12-05 13:49:55 · 3308 阅读 · 0 评论 -
训练过程--对付梯度弥散/梯度消失
All you need is a good init. If you can’t find the good init, use Batch Normalization.原创 2018-12-05 13:51:12 · 554 阅读 · 0 评论 -
训练过程--正则化(regularization)技巧(包括L2正则化、dropout,数据增广,早停)
正则化(regularization) 正则化是解决高方差问题的重要方案之一,也是Reducing Overfiltering(克服过拟合)的方法。 过拟合一直是DeepLearning的大敌,它会导致训练集的error rate非常小,而测试集的error rate大部分时候很大。网络的拟合能力随之降低,这会使网络不容易过拟合到训练集。1)L2正则化 L2正则化倾向于使网络的权值接...原创 2018-12-06 14:30:35 · 3055 阅读 · 0 评论 -
训练过程--对loss和acc的分析、处理
计算loss是会把所有loss层的loss相加。从验证集误差是和测试集误差的角度分析 其实你这个问题就是个伪命题,如果我们刻意的去在训练集上拟合模型,使其准确率达到很高的高度,或者说尽量在验证集合上表现的好,都是相悖的。 因为我们不能为了某一特定数据集来刻意拟合,因为模型预测数据是不一定就在这个训练或者验证集合的空间中。 还有,如果这个model预测集合acc20% 训练集合a...原创 2018-12-06 14:10:33 · 56259 阅读 · 5 评论 -
训练过程--BN和RELU的trick
ReLU对于0的输出的梯度为0, 所以一旦陷入了0输出, 就没法恢复了。 过小的 feature_size/kernel_size的比值会造成BN的统计值不稳定;kernel_dim 过小的时候, 加ReLU 容易使得整个kernel退化成空白。 BN在最后的时候会fix,然后再训练5~10W次。...原创 2018-12-06 13:33:47 · 1660 阅读 · 0 评论 -
训练过程--无监督的预训练
无监督的、逐层的预训练 作者认为,无监督预训练可以为参数,提供先验(prior or regularizer),而且这种先验分布或者说是正则化,与传统的形式不同,它没有显示的正则化项,并且是依赖于数据自动发现。 正则化带来的效用会随着模型的复杂性的增大而增大。 但是实验结果显示,这个效应只有对layer size 足够大(100个隐藏层),网络足够深。无监督的预训练带来的效益才才会随着...原创 2018-12-06 10:58:12 · 2379 阅读 · 0 评论 -
训练过程--测试时增强(test time augmentation, TTA)
可将准确率提高若干个百分点,它就是测试时增强(test time augmentation, TTA)。这里会为原始图像造出多个不同版本,包括不同区域裁剪和更改缩放程度等,并将它们输入到模型中;然后对多个版本进行计算得到平均输出,作为图像的最终输出分数。 有作弊的嫌疑。 这种技术很有效,因为原始图像显示的区域可能会缺少一些重要特征,在模型中输入图像的多个版本并取平均值,能解决上述问题。...转载 2018-12-06 10:56:46 · 12817 阅读 · 3 评论 -
NN模型设置--反卷积层的参数设置
将反卷积层的学习率设为0,upsample的方式就是默认的双线性插值,当然也可以设置学习率不为0,让反卷积层自己学习参数(听说:学习率不为0,能让网络的效果有略微提升)。 转置卷积层的stride最好别设置为和kernal相等,最好小一些,比如1/2; 如果遇到了上图的马赛克现象,就将反卷积层的weight_filler设为双线性插值;而不要设为高斯。例:layer { name...原创 2018-12-06 10:53:50 · 958 阅读 · 0 评论 -
训练过程--渐进式调整大小、动态批量大小
渐进式调整大小 有一种很简单有效的方法,经常用来处理过拟合效应和提高准确性,它就是训练小尺寸图像,然后增大尺寸并再次训练相同模型。 最初减少训练图像大小使得卷积神经网络训练更有效地进行图像识别任务,逐步增加图片的大小可以加快训练速度。 参考论文:《Testing the Efficient Network TRaining (ENTR) Hypothesis: initially re...原创 2018-12-05 14:18:16 · 1293 阅读 · 0 评论 -
训练过程--首层的可视化分析
注意,是首层的可视化 如果神经网络是用在图像相关的问题上,那么把首层的特征和数据画出来(可视化)可以帮助我们了解训练是否正常例子 上图的左右是一个正常和不正常情况下首层特征的可视化对比。左边的图中特征噪点较多,图像很『浑浊』,预示着可能训练处于『病态』过程:也许是学习率设定不正常,或者正则化系数设定太低了,或者是别的原因,可能神经网络不会收敛。右边的图中,特征很平滑和干净,同时相互...原创 2018-12-05 14:11:57 · 393 阅读 · 0 评论 -
训练过程--GPU训练
分布式训练 当前最优的分布式训练方式是通过参数服务器(Parameter Server)执行的同步随机梯度下降算法(SGD)。 这是一种简单的分布式算法,其中存在一组节点,每个节点都拥有经过训练的神经网络的一个版本。这些节点通过一个服务器共享梯度和权重等信息。当试图扩展节点数量时,问题出现了。考虑到如今的问题涉及的巨大维度,当扩展节点数量(到什么级别)时,节点将不得不交流大量的信息。多G...原创 2018-12-05 14:09:23 · 981 阅读 · 0 评论 -
算法选择--模型融合
关于模型融合,方法依旧在网上有一大堆,近几年也没有太大的创新, 主要说一下的就是模型融合前应该画一画误差曲线,确定模型之间是否有融合的需要,比如一个模型完爆另外一个模型,那融合价值就很低。kaggle ensembling guide(Kaggle中常用融合技术 ) 计算了我们所有提交的皮尔逊相关系数,然后选择一些表现好但又相互不太相关的模型。通过多个结果的平均融合,我们获得了50名...原创 2018-12-03 10:11:40 · 618 阅读 · 0 评论 -
算法选择--数据与特征工程
数据与特征工程(如何选择与处理数据) 1)在处理数据上,数据并非越多越好,多余的无关特征会因为伪相关、巧合而影响模型。 2)对数据做相关性分析的时候,善用可视化可以一目了然发现问题。 3)对于高度相关的特征,移除或者合并前要三思,可能并不会提高模型能力。 3)如果选用了线性模型,可能需要对特征进行离散化 4)对于大部分模型来说,归一化或者标准化是必不可少的步骤,至少”无害“ ...原创 2018-12-03 10:09:16 · 358 阅读 · 0 评论 -
谷歌机器学习实践的四十三条法则
谷歌机器学习实践的四十三条法则ML在实际工作确实更多是工程问题,而不是算法问题。优先从工程效率中要效果,当把这部分榨干后,再考虑算法的升级。https://blog.csdn.net/np4rHI455vg29y2/article/details/79341774https://blog.csdn.net/hellozhxy/article/details/80431959...转载 2018-11-30 09:40:15 · 141 阅读 · 0 评论 -
训练过程--训练过程的指导性大纲
训练技巧 1:准备数据:务必保证有大量、高质量并且带有干净标签的数据,没有如此的数据,学习是不可能的 2:预处理:这个不多说,就是0均值和1方差化 3:minibatch:建议值128,1最好,但是效率不高,但是千万不要用过大的数值,否则很容易过拟合 4:梯度归一化:其实就是计算出来梯度之后,要除以minibatch的数量。这个不多解释 5:下...转载 2018-12-05 09:53:09 · 251 阅读 · 0 评论 -
NN模型设置--设计新的layer或op
关键是反向传播的实现! 如果你手动实现了反向传播算法但是它不起作用,那么有99%的可能是梯度计算中存在Bug。那么就用梯度检测来定位问题。 主要思想是运用梯度的定义:如果我们稍微增加某个权重值,模型的误差将会改变多少。 参考资料: http://ufldl.stanford.edu/wiki/index.php/Gradient_checking_and_advanced_op...原创 2018-12-04 10:47:23 · 780 阅读 · 0 评论 -
NN模型设置--基于alexnet的实例分析
1)学习率 ReLu的线性不饱和激活端着相对于Tanh的双饱和端(经验规则0.1),肯定要降量级。 Caffe和Alex给的Model基础都是0.001(W)/0.002(b)。2)基本没有用的LRN层 LRN是unsupervised learning流行时期的遗留物。有一定bio inspired成分。现在看来似乎对performance贡献不大。目前,更多的是使用BN。 尽...原创 2018-12-04 10:45:25 · 524 阅读 · 0 评论 -
NN模型设置--减小训练时的内存/显存占用
1)kennel_stride 一种技术是使用较大的步幅来进行卷积内核,也就是说,我们应用不是每个像素的平铺卷积,而是每两个或四个像素(stride为2或4),以便产生较少的输出数据。 这通常用于输入层,因为这些使用大部分内存。 当然,大stride通常是配合大的kenel_size一起使用;而使用大的kenel_size是为了扩大感受野。 为什么在第一层的stride要这么大?...原创 2018-12-04 10:40:03 · 2043 阅读 · 0 评论 -
NN模型设置--网络局部模块设计
1)批量归一化和最近的SeLU非线性技术“解决”爆炸梯度问题的技术2)ResNets具有明显较低的梯度,因此可以规避爆炸的梯度问题,从而能够对更深层的网络进行有效的训练3)BN之后Relu BN的两个缺陷也很明显,因为是对mini-batch求统计信息,因此具有数据依赖性,数据的随机性会导致训练的不稳定,且batch=1时无法使用。而各种变体本质上就是在寻找Natural Gradient...原创 2018-12-04 10:34:37 · 266 阅读 · 0 评论 -
NN模型设置--网络整体结构设计
网络的设计网络结构设计 1)金字塔式的形状 你也许经常在表征能力和减少冗余或者无用信息之间权衡。卷积神经网络通常会降低激活函数的采样,并会增加从输入层到最终层之间的连接通道。 2)Summation Joining Summation 是一种常用的合并分支的方式。在 ResNets 中,使用总和作为连接的机制可以让每一个分支都能计算残差和整体近似。如果输入跳跃连接一直存在,那...原创 2018-12-04 10:32:16 · 2644 阅读 · 0 评论 -
NN模型设置--损失函数的设置
人脸的loss 1)Softmax 是最常见的人脸识别损失函数,然而,Softmax 不会显式的优化类间和类内距离的,所以通常不会有太好的性能。 2)Triplet Loss 作为一种 Metric Learning,也在人脸识别中广泛使用。 相比 Softmax,其特点是可以方便训练大规模 ID(百万,千万)的数据集,不受显存的限制。但是相应的,因为它的关注点过于局部,使得性能无法达...原创 2018-12-04 10:26:20 · 1128 阅读 · 0 评论 -
NN模型设置--L1/L2正则化
正则化的理解 规则化函数Ω有多重选择,不同的选择效果也不同,不过一般是模型复杂度的单调递增函数——模型越复杂,规则化值越大。 正则化含义中包含了权重的先验知识,是一种对loss的惩罚项(regularization term that penalizes parameters)。 L2正则化是权重符合正态分布的先验;L1则是权重符合拉普拉斯分布的先验(对参数引入 拉普拉斯先验 等价...原创 2018-12-04 10:21:17 · 1119 阅读 · 0 评论 -
模型在类似Cross-Validation上测试效果不错, 但在开发测试上效果不佳?
模型在类似Cross-Validation上测试效果不错, 但在开发测试上效果不佳?选取的训练数据的覆盖度不够, 即数据集不具有代表性(不过完备), 不能体现真实数据的分布。模型迁移 (model drift), 随着时间的转移, 特征数据也会跟着变化。比如3个月前的模型对现在的特征可能不会有好的结果。...原创 2018-11-30 09:41:42 · 365 阅读 · 0 评论 -
输入的尺寸很重要
输入的尺寸很重要 ImageNet通常将224x224x3作为输入尺寸,即具有3个颜色通道的224×224像素图像。虽然12GB内存对于ImageNet上具有112x112x3维度的类似数据集的最先进的结果至关重要,但我们可能会获得最新的结果,只有4-6GB的内存。另一方面,对于输入大小为25x75x75x3x的视频数据集,12GB的内存可能与您需要的结果相差很远。...原创 2018-11-30 09:45:45 · 533 阅读 · 1 评论 -
算法选择--模型选择与评估
实际应用中我们如何选择合适的模型算法的选择纲领 要想获取好的结果,按照流程工作很重要,并且仔细检查确保不犯常见错误。模型选择及评估流程a方案: 1)先针对特定问题,选算法。一般不会用最新的,而是用最成熟的,大概会选择2到3个算法。 2)实现算法,小规模样本保证流程正确。有数据就爽,不然还要收集。 3)调参数,选特征。得到模型的最优解。 4)针对特定问题会进行少量的修改。...原创 2018-12-03 10:02:59 · 1325 阅读 · 0 评论 -
训练过程--fineturn微调
何时微调模型 一般来说,如果我们的数据集在上下文中与预训练模型的训练数据集没有明显不同,我们应该进行微调。像 ImageNet 这样大而多样的数据集上的预训练网络,在网络前几层可以捕获到像曲线和边缘这类通用特征,这些特征对于大多数分类问题都是相关且有用的。 当然,如果我们的数据集代表一些非常具体的领域,例如医学图像或中文手写字符,并且找不到这个领域的预训练网络,那么我们应该考虑从头开始训练...转载 2018-12-05 10:04:45 · 3637 阅读 · 0 评论 -
炼丹算法
炼丹算法 现在大家都用 GSS 算法,全称是 Graduate Student Search 算法。翻译成中文就是博士生人肉搜索算法,又称炼丹算法。缘由 好吧,其实除了 GSS 算法,我们也有一些别的算法,比如之前提到的贝叶斯算法(Bayesian Optimization),还有 Hyperband 算法,等等,其实都是一些很优美的算法。那么,既然之前提到贝叶斯算法可以用来炒鸡蛋,为什...转载 2018-12-03 09:43:24 · 4802 阅读 · 0 评论 -
监督学习中需要注意的问题
监督学习中需要注意的问题1、偏置和方差权衡 第一个问题就是偏见和方差之间的权衡。 较低的学习算法偏差必须“灵活”,这样就可以很好的匹配数据。但如果学习算法过于灵活,它将匹配每个不同的训练数据集,因此有很高的方差。许多监督学习方法的一个关键方面是他们能够调整这个偏差和方差之间的权衡(通过提供一个偏见/方差参数,用户可以调整)。2、功能的复杂性和数量的训练数据 第二个问题是训练数据可相...转载 2018-11-30 10:31:24 · 1083 阅读 · 0 评论 -
AI系统构建流程2
AI系统构建流程2 首先,我们要弄清楚解决的是什么问题,然后针对这个问题去进行技术的预研究,预研的过程有可能需要反复修改问题。这两步都确定下来之后要开始收集数据、训练模型,去做相应的功能开发,最后进行产品化,产品化之后还要上线迭代,迭代过程中可能会产生问题,需要重新去构建模型开发。1. 问题定义:从产品出发,数据 A 到数据 B 现在大家讲到 AI 可能更多谈到的是深度学习技术里面的监...转载 2018-11-30 10:27:36 · 783 阅读 · 0 评论 -
AI系统构建流程1
AI系统构建流程1 要构建一个AI系统或产品,你要处理好5个核心环节,我们通常称之为“机器学习工作流”。 这些步骤分别是:数据收集与分析数据准备模型构建模型验证与测试模型部署1.分析你的数据,提前回答一些策略性的问题 以下是一些常用方法:检查异常值;寻找数值关系和点相关性;评估缺失值的数量。2. 数据准备 如果原始数据存在干扰,不能用来训练学习算法。这时...转载 2018-11-30 10:23:52 · 1575 阅读 · 1 评论