服务热线
131-1198-7613
导语
我经常被问到诸如奈何从深度进修模型中获得更好的成果的标题,类似的标题尚有:
我奈何抬举正确度
如果我的神经收集模型机能不佳,我能够做什么?
对于这些标题,我经常这样回复,“我并不知道确切的谜底,可是我有许多思路”,接着我会列出了我所能想到的所有或许能够给机能带来抬举的思路。
为禁止一次次罗列出这样一个简朴的列表,我决定把所有设法详细写在这篇博客里。
这些思路应该是通用的,不单能在深度进修领域资助你,还能实用于任何机器进修算法。
这篇博文略长,你可以将其到场书签(之后再看)。
奈何抬举深度进修机能
照片泉源:Pedro Ribeiro Simões
抬举算法机能思路
这个列内外提到的思路并完全,可是一个好的最先。
我的目的是给出许多可以实施的思路,渴望其中的一或两个你之前没有想到。你经常只须要一个好的设法就能获得机能抬举。
如果你能从其中一个思路中获得成果,请在品评区告诉我。我很欢乐能得知这些好新闻。
如果你有更多的设法,或许是所列思路的拓展,也请告诉我,我和其他读者都将受益!偶尔间仅仅是一个设法或许就能使他人获得冲破。
我将此博文分为四个部门:
1. 通过数据抬举机能
2. 通过算法抬举机能
3. 通过算法调参抬举机能
4. 通过嵌套模型抬举机能
每每来讲,随着列表自上而下,机能的抬举也将变小。例如,对标题进行新的架构或许获取更多的数据,每每比调整最优算法的参数能带来更好的成果。当然并不老是这样,可是每每来讲是的。
我已经把响应的链接到场了博客的教程中,响应网站的标题中,以及经典的Neural Net FAQ中。
部门思路只实用于人工神经收集,可是大部门是通用的。通用到富足你用来配合其他技术来碰撞出抬举模型机能的方法。
OK,如今让我们最先吧。
1. 通过数据抬举机能
对你的操练数据和标题定义进行恰当改变,你能获得很大的机能抬举。或许是最大的机能抬举。
以下是我将要提到的思路:
获取更大都据
缔造更大都据
重放缩你的数据
转换你的数据
特征选取
重架构你的标题
1) 获取更大都据
你能获取更多操练数据吗?
你的模型的质量每每受到你的操练数据质量的限制。为了获得最好的模型,你首先应该想举措获得最好的数据。你也想尽或许多的获得那些最好的数据。
有更多的数据,深度进修和其他今世的非线性机器进修技术有更全的进修源,能学得更好,深度进修尤为如此。这也是机器进修对大家充满吸引力的很大一个缘故因由(全国处处都是数据)。如下图所示:
为什么选择深度进修?
图片由Andrew Ng提供,版权所有
更多的数据并不是老是有用,可是确实有资助。于我而言,如果可以,我会选择获取更多的数据。
可以参见以下干系阅读:
Datasets Over Algorithms(www.edge.org/response-detail/26587)
2) 缔造更大都据
上一小节说到了有了更大都据,深度进修算法每每会变的更好。有些时间你或许无法合理地获取更大都据,那你可以试试缔造更大都据。
如果你的数据是数值型向量,可以随机机关已有向量的修改版本。
如果你的数据是图片,可以随机机关已有图片的修改版本(平移、截取、旋转等)。
如果你的数据是文本,类似的利用……
这每每被称作数据扩增(data augmentation)或许数据生成(data generation)。
你可以操纵一个生成模型。你也可以用一些简朴的本事。例如,针对图片数据,你可以通过随机地平移或旋转已有图片获取机能的抬举。如果新数据中包含了这种转换,则抬举了模型的泛化本事。
这也与增加噪声是干系的,我们习惯称之为增加扰动。它起到了与正则化方法类似的作用,即禁止操练数据的过拟合。
以下是干系阅读:
Image Augmentation for Deep Learning With Keras(https://machinelearningmastery.com/image-augmentation-deep-learning-keras/)
What is jitter? (Training with noise)(ftp://ftp.sas.com/pub/neural/FAQ3.html#A_jitter)
3) 重缩放(rescale)你的数据
这是一个快速获得机能抬举的方法。
当应用神经收集时,一个传统的经历法则是:重缩放(rescale)你的数据至激活函数的界限。
如果你在操纵sigmoid激活函数,重缩放你的数据到0和1的区间里。如果你在操纵双曲正切(tanh)激活函数,重缩放数据到-1和1的区间里。
这种方法可以被应用到输入数据(x)和输出数据(y)。例如,如果你在输出层操纵sigmoid函数去推测二元分类的成果,应当尺度化y值,使之成为二元的。如果你在操纵softmax函数,你仍然可以通过尺度化y值来获益。
这仍然是一个好的经历法则,可是我想更深入一点。我建议你可以参考下述方法来缔造一些操练数据的不同的版本:
归一化到0和1的区间。
重放缩到-1和1的区间
尺度化(译者注:尺度化数据使之成为零均值,单元尺度差)
然后对每一种方法,评估你的模型的机能,选取最好的进行操纵。如果你改变了你的激活函数,重复这一过程。
在神经收集中,大的数值累积效应(叠加叠乘)并不是好事,除上述方法之外,尚有其他的方法来节制你的神经收集中数据的数值大小,譬如归一化激活函数和权重,我们会在以后接头这些技术。
以下为干系阅读:
Should I standardize the input variables (column vectors)?(ftp://ftp.sas.com/pub/neural/FAQ2.html#A_std)
How To Prepare Your Data For Machine Learning in Python with Scikit-Learn(https://machinelearningmastery.com/prepare-data-machine-learning-python-scikit-learn/)
4) 数据变动
这里的数据变动与上述的重缩放方法类似,但须要更多工作。
你必需很是熟悉你的数据。通过可视化来调查离群点。
猜测每一列数据的单变量分布。
列数据看起来像偏斜的高斯分布吗?考虑用Box-Cox变动调整偏态。
列数据看起来像指数分布吗?考虑用对数变动。
列数据看起来有一些特征,可是它们被一些显着的器材遮蔽了,实施取平方或许开平方根来转换数据
你能离散化一个特征或许以某种方式组合特征,来更好地突出一些特征吗?
依赖你的直觉,实施以下方法。
你能操纵类似PCA的投影方法来预处置惩罚处罚数据吗?
你能综合多维特征至一个单一数值(特征)吗?
你能用一个新的布尔标签去发现标题中存在一些滑稽的方面吗?
你能用其他方法摸索出如今场景下的其他出格结构吗?
神经网层擅长特征进修(feature engineering)。它(自己)可以做到这件事。可是如果你能更好的发现标题到收集中的结构,神经网层会进修地更快。你可以对你的数据就不同的转换方式进行抽样调查,或许实施特定的性质,来看哪些有用,哪些没用。
以下是干系阅读:
How to Define Your Machine Learning Problem(https://machinelearningmastery.com/how-to-define-your-machine-learning-problem/)
Discover Feature Engineering, How to Engineer Features and How to Get Good at It(https://machinelearningmastery.com/discover-feature-engineering-how-to-engineer-features-and-how-to-get-good-at-it/)
How To Prepare Your Data For Machine Learning in Python with Scikit-Learn(https://machinelearningmastery.com/prepare-data-machine-learning-python-scikit-learn/)
5) 特征选择
日常说来,神经收集对不干系的特征是具有鲁棒的(校对注:即不干系的特征不会很大影响神经收集的操练和成果)。它们会用近似于0的权重来弱化那些没有推测本事的特征的贡献。
尽管如此,这些无关的数据特征,在操练周期仍然要淹灭大量的资源。所以你能去除数据里的一些特征吗?
有许多特征选择的方法和特征重要性的方法,这些方法能够给你提供思路,哪些特征该生存,哪些特征该剔除。最简朴的方式就是对比所有特征和部门特征的成果。
同样的,如果你偶尔间,我建议在统一个收集中实施选择不同的视角来看待你的标题,评估它们,来看看别离有奈何的机能。
或许你操纵更少的特征就能达到齐整以致更好的机能。并且,这将使模型变得更快!
或许所有的特征选择方法都剔除了同样的特征子集。很好,这些方法在没用的特征上达成了平等。
或许筛选事后的特征子集,能带给特征工程的新思路。
以下是干系阅读:
An Introduction to Feature Selection(https://machinelearningmastery.com/an-introduction-to-feature-selection/)
Feature Selection For Machine Learning in Python(https://machinelearningmastery.com/feature-selection-machine-learning-python/)
6) 从头架构你的标题
偶尔间要试试从你当前定义的标题中跳出来,想想你所收集到的调查值是定义你标题的唯一方式吗?或许存在其他方法。或许其他构建标题的方式能够更好地显现待进修标题的结构。
我真的很喜爱这个实施,因为它迫使你打开自己的思路。这确实很难,尤其是当你已经对当前的方法投入了大量的时间和款子时。
可是咱们这么想想,即使你列出了3-5个可供更换的建构方案,并且最终照旧放弃了它们,但这至少分析你对当前的方案加倍自负了。
看看能够在一个时间窗(时间周期)内对已有的特征/数据做一个合并。
或许你的分类标题可以成为一个回归标题(偶尔间是回归到分类)。
或许你的二元输出可以酿成softmax输出?
或许你可以转而对子标题进行建模。
过细思索你的标题,最好在你选定工具之前就考虑用不同方法构建你的标题,因为此时你对打点方案并没有泯灭太多的投入。除此之外,如果你在某个标题上卡住了,这样一个简朴的实施能释放更多新的设法。
并且,这并不代表你之前的工作白干了,关于这点你可以看看后续的模型嵌套部门。
以下为干系阅读:
How to Define Your Machine Learning Problem(https://machinelearningmastery.com/how-to-define-your-machine-learning-problem/)
2. 通过算法抬举机能
机器进修当然是用算法打点标题。
所有的理论和数学都是描画了应用不同的方法从数据中进修一个决定过程(如果我们这里只接头推测模型)。
你已经选择了深度进修来表白你的标题。可是这真的是最好的选择吗?在这一节中,我们会在深入到奈何最大地挖掘你所选择的深度进修方法之前,接触一些算法选择上的思路。
下面是一个简要列表:
对算法进行抽样调查
借鉴已有文献
重采样方法
下面我表白下上面提到的几个方法。
1) 对算法进行抽样调查
着实你事先无法知道,针对你的标题哪个算法是最优的。如果你知道,你或许就不须要机器进修了。那有没有什么数据(举措)可以证实你选择的方法是准确的?
让我们来打点这个坚苦。当从所有或许的标题中匀称来看各算法的机能时,没有哪个算法能够永世胜过其他算法。所有的算法都是齐整的,下面是在no free lunch theorem中的一个总结。
或许你选择的算法不是针对你的标题最优的那个
我们不是在实施打点所有标题,算法全国中有许多新热的方法,可是它们或许并不是针对你数据集的最优算法。
我的建议是收集(证据)数据指标。继承更好的算法或许存在这一观点,并且赐与其他算法在打点你的标题上“公平竞争”的机缘。
抽样调查一系列可行的方法,来看看哪些还不错,哪些不理想。
首先实施评估一些线性方法,例如逻辑回归(logistic regression)和线性辨别阐明(linear discriminate analysis)。
评估一些树类模型,例如CART, 随机森林(Random Forest)和Gradient Boosting。
评估一些实例方法,例如支撑向量机(SVM)和K-近邻(kNN)。
评估一些其他的神经收集方法,例如LVQ, MLP, CNN, LSTM, hybrids等
选取机能最好的算法,然后通过进一步的调参和数据预备来抬举。尤其寄望对比一下深度进修和其他常规机器进修方法,对上述成果进行排名,比较他们的好坏。
许多时间你会发如今你的标题上可以不用深度进修,而是操纵一些更简朴,操练速度更快,以致是更等闲大白的算法。
以下为干系阅读:
A Data-Driven Approach to Machine Learning(https://machinelearningmastery.com/a-data-driven-approach-to-machine-learning/)
Why you should be Spot-Checking Algorithms on your Machine Learning Problems(https://machinelearningmastery.com/why-you-should-be-spot-checking-algorithms-on-your-machine-learning-problems/)
Spot-Check Classification Machine Learning Algorithms in Python with scikit-learn(https://machinelearningmastery.com/spot-check-classification-machine-learning-algorithms-python-scikit-learn/)
2) 借鉴已有文献
方法选择的一个捷径是借鉴已有的文献资料。或许有人已经研究过与你的标题干系的标题,你可以看看他们用的什么方法。
你可以阅读论文,册本,博客,问答网站,教程,以及任何能在谷歌搜索到的器材。
写下所有的设法,然后用你的方式把他们研究一遍。
这不是复制别人的研究,而是启发你想出新的设法,一些你从没想到可是却有或许带来机能抬举的设法。
揭晓的研究每每都黑白常赞的。全国上有很是多智慧的人,写了许多滑稽的器材。你应当好好挖掘这个“图书馆”,找到你想要的器材。
以下为干系阅读:
How to Research a Machine Learning Algorithm(https://machinelearningmastery.com/how-to-research-a-machine-learning-algorithm/)
Google Scholar(https://scholar.google.com/)
3) 重采样方法
你必需知道你的模型成果奈何。你对模型机能的估计靠得住吗?
深度进修模型在操练阶段很是痴钝。这每每意味着,我们无法用一些常用的方法,例如k层交错验证,去估计模型的机能。
或许你在操纵一个简朴的操练集/测试集分割,这是常规套路。如果是这样,你须要确保这种分割针对你的标题具有代表性。单变量统计和可视化是一个好的最先。
或许你能操纵硬件来加速估计的过程。例如,如果你有集群或许AWS云端办事(Amazon Web Services)账号,你可以并行地操练n个模型,然后获取成果的均值和尺度差来获得更鲁棒的估计。
或许你可以操纵hold-out验证方法来了解模型在操练后的机能(这在早停法(early stopping)中很有用,反面会讲到)。
或许你可以先隐蔽一个完全没用过的验证集,等到你已经完成模型选择之后再操纵它。
而偶尔间此外的方式,或许你能够让数据集变得更小,以及操纵更强的重采样方法。
有些情况下你会发如今操练集的一部门样本上操练获得的模型的机能,和在整个数据集上操练获得的模型的机能有很强的干系性。或许你可以先在小数据集上完成模型选择和参数调优,然后再将最终的方法扩展到所有数据集上。
或许你可以用某些方式限制数据集,只取一部门样本,然后用它进行所有的建模过程。
以下为干系阅读:
Evaluate the Performance Of Deep Learning Models in Keras(https://machinelearningmastery.com/evaluate-performance-deep-learning-models-keras/)
Evaluate the Performance of Machine Learning Algorithms in Python using Resampling(https://machinelearningmastery.com/evaluate-performance-machine-learning-algorithms-python-using-resampling/)
3. 通过算法调参抬举机能
这每每是工作的要害所在。你经常可以通过抽样调查快速地发现一个或两个机能杰出的算法。可是如果想获得最优的算法或许须要几天,几周,以致几个月。
为了获得更优的模型,以下是对神经收集算法进行参数调优的几点思路:
诊断(Diagnostics)
权重初始化(Weight Initialization)
进修速度(Learning Rate)
激活函数
收集拓扑(Network Topology)
批次和周期(Batches and Epochs)
正则化
优化和损失
早停法
你或许须要操练一个给定“参数配置”的神经收集模型许多次(3-10次以致更多),才气获得一个估计机能不错的参数配置。这一点几乎实用于这一节中你能够调参的所有方面。
关于超参数优化请参阅博文:
How to Grid Search Hyperparameters for Deep Learning Models in Python With Keras(https://machinelearningmastery.com/grid-search-hyperparameters-deep-learning-models-python-keras/)
1) 诊断
如果你能知道为什么你的模型机能不再前进了,你就能获得拥有更好机能的模型。
你的模型是过拟合照旧欠拟合?永世紧记这个标题。永世。
模型老是会遇到过拟合或许欠拟合,只是水平不同罢了。一个快速了解模型进修行为的方法是,在每个周期,评估模型在操练集和验证集上的表示,并作出图表。
如果操练集上的模型老是优于验证集上的模型,你或许遇到了过拟合,你可以操纵诸如正则化的方法。
如果操练集和验证集上的模型都很差,你或许遇到了欠拟合,你可以抬举收集的容量,以及操练更多或许更久。
如果有一个拐点存在,在那之后操练集上的模型最先优于验证集上的模型,你或许须要操纵早停法。
经常画一画这些图表,进修它们来了解不同的方法,你能够抬举模型的机能。这些图表或许是你能缔造的最有价格的(模型状况)诊断信息。
另一个有用的诊断是收集模型鉴定对和鉴定错的调查值。
对于难以操练的样本,或许你须要更多的数据。
或许你应该剔除操练汇合易于建模的多余的样本。
也承诺以实施对操练集别离不同的地域,在特定地域顶用更专长的模型。
以下为干系阅读:
Display Deep Learning Model Training History in Keras(https://machinelearningmastery.com/display-deep-learning-model-training-history-in-keras/)
Overfitting and Underfitting With Machine Learning Algorithms(https://machinelearningmastery.com/overfitting-and-underfitting-with-machine-learning-algorithms/)
2) 权重初始化
经历法则每每是:用小的随机数进行初始化。
在实践中,这或许仍然成果不错,可是对于你的收集来说是最佳的吗?对于不同的激活函数也有一些启发式的初始化方法,可是在实践应用中并没有太多不同。
固定你的收集,然后实施多种初始化方式。
记着,权重是你的模型真正的参数,你须要找到他们。有许多组权重都能有不错的机能表示,但我们要尽管找到最好的。
实施所有不同的初始化方法,调查是否有一种方法在其他情况稳固的情况下(成果)更优。
实施用无监视的方法,例如自动编码(autoencoder),来进行预先进修。
实施操纵一个已经存在的模型,只是针对你的标题从头操练输入层和输出层(迁移进修(transfer learning))
须要提醒的一点是,改变权重初始化方法和激活函数,以致优化函数/损失函数紧密干系。
以下为干系阅读:
Initialization of deep networks(https://deepdish.io/2015/02/24/network-initialization/)
3) 进修率
调整进修率许多时间也是行之有用的时段。
以下是可供摸索的一些设法:
实施很大和很小的进修率
格点搜索文献里常见的进修速度值,调查你能进修多深的收集。
实施随周期递减的进修率
实施经过固定周期数后按比例减小的进修率。
实施增加一个动量项(momentum term),然后对进修速度和动量同时进行格点搜索。
越大的收集须要越多的操练,反之亦然。如果你添加了太多的神经元和层数,恰当抬举你的进修速度。同时进修率须要和操练周期,batch size大小以及优化方法联系在一路考虑。
以下为干系阅读:
Using Learning Rate Schedules for Deep Learning Models in Python with Keras(https://machinelearningmastery.com/using-learning-rate-schedules-deep-learning-models-python-keras/)
What learning rate should be used for backprop?(ftp://ftp.sas.com/pub/neural/FAQ2.html#A_learn_rate)
4) 激活函数
你或许应该操纵批改激活函数(rectifier activation functions)。他们或许能提供更好的机能。
在这之前,最早的激活函数是sigmoid和tanh,之后是softmax, 线性激活函数,或许输出层上的sigmoid函数。我不建议实施更多的激活函数,除非你知道你自己在干什么。
实施所有三种激活函数,并且重缩放你的数据以满足激活函数的界限。
显然,你想要为输出的形式选择准确的传达函数,可是可以考虑一下摸索不同表示。例如,把在二元分类标题上操纵的sigmoid函数切换到回归标题上操纵的线性函数,然后后置处置惩罚处罚你的输出。这或许须要改变损失函数使之更合适。详情参阅数据转换那一节。
以下为干系阅读:
Why use activation functions?(ftp://ftp.sas.com/pub/neural/FAQ2.html#A_act)
5) 收集拓扑
收集结构的改变能带来优点。
你须要几多层以及几多个神经元?抱歉没有人知道。不要问这种标题...
那怎么找到实用你的标题的配置呢?去实施吧。
实施一个隐蔽层和许多神经元(广度模型)。
实施一个深的收集,可是每层只有很少的神经元(深度模型)。
实施上述两种方法的组合。
借鉴研究标题与你的类似的论文里面的结构。
实施拓扑模式(扇出(fan out)然后扇入(fan in))和册本论文里的经历法则(下有链接)
选择老是很坚苦的。每每说来越大的收集有越强的代表本事,或许你须要它。越多的层数可以提供更强的从数据中学到的抽象特征的本事。或许须要它。
深层的神经收集须要更多的操练,无论是操练周期照旧进修率,都应该响应地进行调整。
以下为干系阅读:
这些链接会给你许多启发该实施哪些事情,至少对我来说是的。
How many hidden layers should I use?(ftp://ftp.sas.com/pub/neural/FAQ3.html#A_hl)
How many hidden units should I use?(ftp://ftp.sas.com/pub/neural/FAQ3.html#A_hu)
6) Batches和周期
batch size大小会决定最后的梯度,以及更新权重的频度。一个周期(epoch)指的是神经收集看一遍所有操练数据的过程。
你是否已经试验了不同的批次batch size和周期数?
之前,我们已经接头了进修率,收集大小和周期之间的关系。
在很深的收集结构里你会经常看到:小的batch size配以大的操练周期。
下面这些或许能有助于你的标题,也或许不能。你要在自己的数据上实施和调查。
实施选取与操练数据同大小的batch size,但寄望一下内存(批次进修(batch learning))
实施选取1作为batch size(在线进修(online learning))
实施用格点搜索不同的小的batch size(8,16,32,…)
别离实施操练少量周期和大量周期。
考虑一个接近无限的周期值(持续操练),去记载到如今为止能获得的最佳的模型。
一些收集结构对batch size更敏感。我知道多层感知器(Multilayer Perceptrons)每每对batch size是鲁棒的,而LSTM和CNNs比较敏感,可是这只是一个说法(仅供参考)。
以下为干系阅读:
What are batch, incremental, on-line … learning?(ftp://ftp.sas.com/pub/neural/FAQ2.html#A_styles)
Intuitively, how does mini-batch size affect the performance of (stochastic) gradient descent?(https://www.quora.com/Intuitively-how-does-mini-batch-size-affect-the-performance-of-stochastic-gradient-descent)
7) 正则化
正则化是一个禁止模型在操练集上过拟合的好方法。
神经收集里最新最热的正则化技术是dropout方法,你是否试过?dropout方法在操练阶段随机地跳过一些神经元,驱动这一层其他的神经元去捕捉松懈。简朴而有用。你可以从dropout方法最先。
格点搜索不同的丢失比例。
别离在输入,隐蔽层和输出层中试验dropout方法
dropout方法也有一些拓展,好比你也可以实施drop connect方法。
也可以实施其他更传统的神经收集正则化方法,例如:
权重衰减(Weight decay)去处罚大的权重
激活约束(Activation constraint)去处罚大的激活值
你也可以试验惩罚不同的方面,或许操纵不同种类的惩罚/正则化(L1, L2, 或许二者同时)
以下是干系阅读:
Dropout Regularization in Deep Learning Models With Keras(https://machinelearningmastery.com/dropout-regularization-deep-learning-models-keras/)
What is Weight Decay?(ftp://ftp.sas.com/pub/neural/FAQ3.html#A_decay)
8) 优化和损失
最常见是应用随机梯度下降法(stochastic gradient descent),可是如今有很是多的优化器。你试验过不同的优化(方法)过程吗?
随机梯度下降法是默认的选择。先好好操纵它,配以不同的进修率和动量。
许多更高级的优化方法有更多的参数,更复杂,也有更快的收敛速度。 好与坏,是不是须要用,取决于你的标题。
为了更好的操纵好一个给定的(优化)方法,你真的须要弄大白每个参数的意义,然后针对你的标题通过格点搜索不同的的取值。坚苦,斲丧时间,可是值得。
我发现了一些更新更流行的方法,它们可以收敛的更快,并且针对一个给定收集的容量提供了一个快速了解的方式,例如:
ADAM
RMSprop
你还可以摸索其他优化算法,例如,更传统的(Levenberg-Marquardt)和不那么传统的(genetic algorithms)。其他方法能够为随机梯度下降法和其他类似方法提供好的起点去改进。
要被优化的损失函数与你要打点的标题高度干系。然而,你每每照旧有一些余地(可以做一些微调,例如回归标题中的均方误(MSE)沉寂均绝对误差(MAE)等),偶尔间变动损失函数尚有或许获得小的机能抬举,这取决于你输出数据的规模和操纵的激活函数。
以下是干系阅读:
An overview of gradient descent optimization algorithms(https://sebastianruder.com/optimizing-gradient-descent/)
What are conjugate gradients, Levenberg-Marquardt, etc.?(ftp://ftp.sas.com/pub/neural/FAQ2.html#A_numanal)
On Optimization Methods for Deep Learning, 2011 PDF(https://ai.stanford.edu/~ang/papers/icml11-OptimizationForDeepLearning.pdf)
9) Early Stopping/早停法
一旦操练过程中呈现(验证集)机能最先下降,你可以禁止操练与进修。这可以节省许多时间,并且以致可以让你操纵更过细的重采样方法来评估你的模型的机能。
早停法是一种用来禁止模型在操练数据上的过拟合的正则化方式,它须要你监测模型在操练集以及验证集上每一轮的成果。一旦验证集上的模型机能最先下降,操练就可以禁止。
如果某个前提满足(权衡正确率的损失),你还可以配置检查点(Checkpointing)来储存模型,使得模型能够担当进修。检查点使你能够早停而非真正的禁止操练,因此在最后,你将有一些模型可供选择。
以下是干系阅读:
How to Check-Point Deep Learning Models in Keras(https://machinelearningmastery.com/check-point-deep-learning-models-keras/)
What is early stopping?(ftp://ftp.sas.com/pub/neural/FAQ3.html#A_stop)
4. 通过嵌套模型抬举机能
你可以组合多个模型的推测本事。刚才提到了算法调参可以前进最后的机能,调参之后这是下一个可以抬举的大领域。
毕竟上,你可以经常通过组合多个“富足好的”模型来获得杰出的推测本事,而不是通过组合多个高度调参的(懦弱的)模型。
你可以考虑以下三个方面的嵌套方式:
组合模型
组合视角
堆叠(Stacking)
1) 组合模型
偶尔间我们干脆不做模型选择,而是直接组合它们。
如果你有多个不同的深度进修模型,在你的研究标题上每一个都表示的还不错,你可以通过取它们推测的匀称值来进行组合。
模型不同越大,最终结果越好。例如,你可以应用很是不同的收集拓扑或许不同的技术。
如果每个模型都成果不错可是不同的方法/方式,嵌套后的推测本事将加倍鲁棒。
每一次你操练收集,你初始化不同的权重,然后它会收敛到不同的最终权重。你可以多次重复这一过程去获得许多收集,然后把这些收集的推测值组合在一路。
它们的推测将会高度干系,可是在那些难以推测的特征上,它会给你一个意外的小抬举。
以下是干系阅读:
Ensemble Machine Learning Algorithms in Python with scikit-learn(https://machinelearningmastery.com/ensemble-machine-learning-algorithms-python-scikit-learn/)
How to Improve Machine Learning Results(https://machinelearningmastery.com/how-to-improve-machine-learning-results/)
2) 组合视角
同上述类似,可是从不同视角重构你的标题,操练你的模型。
同样,目的获得的是成果不错可是不同的模型(例如,不干系的推测)。获得不同的模型的方法,你可以依赖我们在数据那一小节中罗列的那些很是不同的放缩和转换方法。
你用来操练模型的转换方法越不同,你构建标题的方式越不同,你的成果被抬举的水平就越高。
简朴操纵推测的均值将会是一个好的最先。
3) stacking/堆叠
你还可以进修奈何最佳地组合多个模型的推测。这称作堆叠泛化(stacked generalization),或许简短来说就叫堆叠。
每每上,你操纵简朴线性回归方法就可以获得比取推测匀称更好的成果,像正则化的回归(regularized regression),就会进修奈何给不同的推测模型赋权重。基线模型是通过取子模型的推测均值获得的,可是应用进修了权重的模型会抬举机能。
Stacked Generalization (Stacking)(https://machine-learning.martinsewell.com/ensembles/stacking/)
此外的可参考资源
此外处所有许多很好的资源,可是几乎没有能将所有设法串联在一路的。如果你想深入研究,我列出了如下资源和响应的博客,你能发现许多滑稽的器材。
Neural Network FAQ(ftp://ftp.sas.com/pub/neural/FAQ.html)
How to Grid Search Hyperparameters for Deep Learning Models in Python With Keras(https://machinelearningmastery.com/grid-search-hyperparameters-deep-learning-models-python-keras/)
Must Know Tips/Tricks in Deep Neural Networks(https://lamda.nju.edu.cn/weixs/project/CNNTricks/CNNTricks.html)
How to increase validation accuracy with deep neural net?(https://stackoverflow.com/questions/37020754/how-to-increase-validation-accuracy-with-deep-neural-net)
后 记
这是一篇很长的博客,我们陈诉了许多内容。你并不须要去做所有事,或许这里面的某一点就足以给你好的设法去抬举机能。简朴说来或许包含下面这些:
选取一个偏向
数据
算法
调参
嵌套模型
在某一偏向里选取一种方法
在选取的方法中选取一件事情去实施
比较成果,如果机能有抬举,则生存
不绝重复
文章泉源:大数据文摘
《机器读心术之神经收集与深度进修》用最平凡的语言,从起点最先,由浅入深教学这些机器领域里最深奥的常识,使即使根本不扎实,大白本事不超群的民众,也能通过课程掌握这些前沿领域的细节技术,并且应用在自己的场景里去完成某些事情。点击下方二维码查察课程详情
2024-03-20
网页设计,是根据企业希望向浏览者传递的信息(包括产品、服务、理念、文化),进行网站功能策划,然后进行···
2024-03-19
网页设计,是根据企业希望向浏览者传递的信息(包括产品、服务、理念、文化),进行网站功能策划,然后进行···
2024-03-19
网页设计,是根据企业希望向浏览者传递的信息(包括产品、服务、理念、文化),进行网站功能策划,然后进行···
2024-03-19
网页设计,是根据企业希望向浏览者传递的信息(包括产品、服务、理念、文化),进行网站功能策划,然后进行···