文章 "深度神经网络 (第五部分)。 DNN 超参数的贝叶斯优化" - 页 2 123 新评论 revers45 2018.05.26 05:59 #11 有趣的优化结果--验证样本的误差小于训练样本! 换句话说,在某些数据上训练过的模型,学会了在其他数据上工作,即从训练数据中提取了比实际数据更多的信息--这是科幻小说还是探险......? 我呼吁作者--停止shtukarstva和伪造,最后写一个智能交易系统,并展示一些结果,至少在演示版上。 Aleksei Kuznetsov 2018.05.26 09:25 #12 revers45:换句话说,在某些数据上训练过的模型学会了在其他 数据上工作,即从训练数据中提取了比实际数据更多的信息--这是科幻小说还是探险......?所有模型都是在训练图上进行训练的,也就是说,它们试图将训练图上的误差降到最低,但最后的选择是在测试图上进行的,如果模型没有发现数据中的模式,那么在训练图上或测试图之后的图上,结果都会非常糟糕。但结果表明,无论是在训练图上还是在测试图上,它们都与进行了选择的测试图差别不大。 也就是说,NS 并没有从另一个 数据集上学习,而是在两个数据集上发现了共同的模式。 如果结果不太稳定,那么在测试图上进行选择(不考虑训练者的误差)可能会导致拟合。在本例中没有,但在其他数据中(如果没有发现模式)就有可能。因此,最好在 Err = (ErrLeran * 0.37 + ErrValid * 0.63) 这样的误差之间寻求平衡。 Vladimir Perervenko 2018.05.26 20:38 #13 elibrarius:你好,弗拉基米尔我不太明白为什么你的 NS 是在训练数据上训练的,而其评估是在测试数据上完成的(如果我没弄错的话,你把测试数据用作验证数据)。在这种情况下,您不会对测试图进行拟合吗,也就是说,您会选择在测试图上效果最好的模型吗? 您还应该考虑到测试图非常小,您可以拟合其中一个时间模式,这可能会很快停止工作。 也许在训练图上进行估计更好,或者在图的总和上进行估计更好,或者像 Darch 那样(提交验证数据时)在 Err = (ErrLeran * 0.37 + ErrValid * 0.63) 上进行估计更好--这些系数是默认的,但可以更改。有很多选项,目前还不清楚哪一个是最好的。你赞成测试图的论点很有意思。下午好。 让我们说得更具体些。数据集 X 由 4 个子集组成:preptrain = 4001、train = 1000、test = 500 和 test1= 100 条。对于预训练,我们使用训练集 - pretrain,验证集 - train。 # SRBM + upper Layer (backpropagation) pretrainSRBM_topLayer <- function(Ln, fact1, fact2, dr1, dr2, Lr.rbm, Lr.top) # SRBM + upper Layer (backpropagation) { darch( x = X$pretrain$x, y = X$pretrain$y, xValid = X$train$x, yValid = X$train$y, #=====constant====================== ...................................................... 微调时,预训练集用作训练集,验证集用于测试集的前 250 条。 fineTuneRP <- function(Ln, fact1, fact2, dr1, dr2, Dnn) # rpropagation { darch( x = X$train$x, y = X$train$y, #xValid = X$test$x, yValid = X$test$y, xValid = X$test$x %>% head(250), yValid = X$test$y %>% head(250), #=====constant======== ................................................ 因此,在确定最终质量时,我们使用测试集的最后 250 条作为测试集。代码 #---SRBM + upperLayer + RP---- fitnes4.DNN <- function(n1, n2, fact1, fact2, dr1, dr2, Lr.rbm, Lr.top) { Ln <- c(0, 2*n1, 2*n2, 0) #-- pretrainSRBM_topLayer(Ln, fact1, fact2, dr1, dr2, Lr.rbm, Lr.top) -> Dnn fineTuneRP(Ln, fact1, fact2, dr1, dr2, Dnn) -> Dnn predict(Dnn, newdata = X$test$x %>% tail(250) , type = "class") -> Ypred yTest <- X$test$y[ ,1] %>% tail(250) #numIncorrect <- sum(Ypred != yTest) #Score <- 1 - round(numIncorrect/nrow(xTest), 2) Score <- Evaluate(actual = yTest, predicted = Ypred)$Metrics$F1 %>% mean() return(list(Score = Score, Pred = Ypred) } 我看不出有任何矛盾。您同意吗? 祝好运 revers45 2018.05.27 08:09 #14 elibrarius:所有模型都是在训练图上进行训练的,也就是说,它们试图将训练图上的误差降到最低,但最后的选择是在测试图上进行的,如果模型没有在数据中找到模式,那么在训练图上或测试图之后的图上的结果就会非常糟糕。但结果表明,无论是在训练图上还是在测试图上,它们都与进行了选择的测试图差别不大。 也就是说,NS 并没有从另一个 数据集上学习,而是在两个数据集中找到了共同的模式。 如果结果不太稳定,那么在测试图上进行选择(不考虑训练者的误差)可能会导致拟合。在本例中没有,但在其他数据中(如果没有发现模式)就有可能。最好是在 Err = (ErrLeran * 0.37 + ErrValid * 0.63) 这样的误差之间寻求平衡。无论如何,训练图上的一般规律性不应该比测试图上的少,因为训练图上的规律性是与所有其他规律性一起被发现的,因此 NS 在训练图上的效果不应该比测试图差。 在我看来,这是显而易见的,而且教师的知识不应该少于学生,尽管文章作者显然试图反驳这一点,因为他在评论中写道,他不是科学家,也不是程序员,但却坚持教我们如何给神经网络编程。 当然,他已经发布了很多 R 代码,但我希望看到足够的结果,最重要的是,我想知道他还会写多少篇文章,直到至少出现一个正常的 Expert Advisor。 Aleksei Kuznetsov 2018.05.27 15:48 #15 Vladimir Perervenko:下午好。让我们来澄清一下。数据集 X 由 4 个子集组成:preptrain = 4001、train = 1000、test = 500 和 test1= 100 条。对于预训练,我们使用训练集 - pretrain,验证集 - train。在微调时,使用预训练集作为训练集,验证集是测试集的前 250 条。因此,在确定最终质量时,我们使用测试集的最后 250 条作为测试集。代码我看不出有任何矛盾。你同意吗?祝你好运技术上一切都做得很好,这不是问题所在。 我认为 250 条数据不足以评估模型,这就是为什么我想知道为什么只选择了这一部分。 是的,它在特定情况下是有效的(您在所有站点都取得了良好的结果),但我认为它并不具有普遍性。 毕竟,有些数据可能并不是那么好。例如,模型在训练图上的误差可以达到 40%,而在测试图上纯属偶然,误差只有 30%。而第二个模型,比方说,在两个图上都训练成了 35%。第二个模型显然更好。但如果只选择测试图,则会选择第一个模型。为了便于比较,模型评估有以下选项: 只在训练图上评估, 或在所有图的总和上评估, 或像 Darch 那样(提交验证数据)在 Err = (ErrLeran * 0.37 + ErrValid * 0.63) 上评估--这些系数是默认的,但可以更改。 原则上,您可以扩展公式,例如 Err = (ErrLeran * 0.25 + ErrValid * 0.35 + ErrTest * 0.4)。例如,如果 ErrLeran 和 ErrTest 相差 5%以上--那么就拒绝这样的模型。然后从剩下的模型中做出选择。 我做了一个实验。以下是 30 次训练的一些结果:(该模型与原始模型不一样,它的一切都很完美,所以我去掉了预训练,这样就不会有糟糕的结果了) 解码:V1 = 1-ErrLearn; V2= 1-ErrOOC; Value = 1 - (ErrLeran * 0. Value V1 V2 0.5712 0.4988 0.6138 - OOS 很好,但随机,因为 Learn = 50% 0.5002 0.5047 0.4975 - 这比较常见 0.6719 0.6911 0.6606 - 这样的情况也有几次。按值排序 = 1 - (ErrLeran * 0.37 + ErrOOC * 0.63) 将此类模式向上拉动 Discussion of article "Deep Aleksei Kuznetsov 2018.05.27 15:55 #16 revers45: 当然,他已经发布了很多 R 代码,但我希望看到足够的结果,最重要的是,我想知道他还会写多少篇文章,直到至少有一个正常的 EA。在其中一篇文章中,有一个智能交易系统,我在几天内为新版 Darch 重写了它--从技术上讲,一切都运行得很好。智能交易系统很简单--读取 OHLC 并将其输入 R,然后在 R 中运行计算函数。最后,在收到来自 NS 的指令后,向服务器发送交易指令。仅此而已。其余的 - 追踪、止损、MM - 随您的喜好。 最困难的事情正是文章中所描述的 - 找到好的数据并对 NS 进行适当的训练。弗拉基米尔展示了各种模型变体、集合、优化、预测因子的选择和处理......,我跟不上他的节奏。) Aleksei Kuznetsov 2018.06.02 16:16 #17 您觉得呢,,也许我们应该从超参数枚举中排除神经元层数 n2 > n1 的变体?例如网络 10 - 20 - 100 - 2 或 10 - 8 - 100 - 2 如果 n2 > n1,则会压缩到 n1,然后解压缩到 n2,再压缩到输出层的 1 或 2 个神经元。如果最后仍有 2 个神经元,那么在 n1 层压缩数据后,中间的解压缩应该不会产生任何蠕变。但是,计算明显较差的变体将耗费大量时间。,我认为可以在拟合函数中以如下方式实现:n1 是神经元数,n2 是 n1 的百分比,然后四舍五入,*2 为最大值。 更新: 我自己做的,希望能更有效地利用计算能力。 [存档!]任何菜鸟问题,为了不使论坛变得混乱。专业人士,不要路过。没有你,哪里都不能去 - 4. 使用莱文贝格-马夸尔特(Levenberg-Marquardt,LM)算法训练多层感知器 讨论 Vladimir Perervenko 2018.06.03 16:01 #18 elibrarius:您觉得呢,,也许我们应该从超参数枚举中排除神经元层数 n2 > n1 的变体?例如网络 10 - 20 - 100 - 2 或 10 - 8 - 100 - 2 如果 n2 > n1,则会压缩到 n1,然后解压缩到 n2,再压缩到输出层的 1 或 2 个神经元。如果最后仍有 2 个神经元,那么在 n1 层压缩数据后,中间的解压缩应该不会产生任何蠕变。不过,计算明显较差的变体会耗费大量时间。,我认为可以在拟合函数中以如下方式实现:n1 应作为神经元数枚举,n2 作为 n1 的百分比,然后取整,*2 为最大值。您好。 在我长时间的参数实验中,只发现了几个特殊情况: - 当事实 = 2 - 或两个隐藏层的激活函数相同时,结果往往更好。 我没有限制隐藏层中神经元的比例。非最佳比例很快就会被排除在外。不过你可以测试一下这个想法。我可能会抽空用 rgenoud 检查一下优化情况。 祝你好运 Aleksei Kuznetsov 2018.06.03 16:24 #19 Vladimir Perervenko:我没有限制隐藏层中神经元的比例。非最佳比例很快就会被排除在外。但你可以测试这个想法。我可能会抽空用 rgenoud 检查一下优化情况。 我让下一层按上一层的百分比计算。但我并不想进行特别的比较。纯粹从理论上讲,我希望我的想法是对的,即在前一层压缩后,网络内部的解压缩不会给它带来新的信息。 我在 GA:ga 上尝试过遗传学。它运行了 NS 200-300 次计算。这是一个很大的数字。而且结果没有任何改善。 虽然对于贝叶斯优化,我认为我们需要更多的计算次数,不是 20-30 次,而是可能多达 100 次。因为经常出现的情况是,最佳结果是 10 个随机起始变体中的一个,而优化器接下来的 10-20 次运算都没有发现更好的结果。也许经过 100 次优化后,结果会有所改善....。 弗拉基米尔-佩列文科- 事实 = 2 时的最佳结果- 或两个隐藏层具有相同的激活函数时效果最好这对我来说有所不同。Relu 通常效果很好。 Vladimir Perervenko 2018.06.04 10:06 #20 elibrarius:我让下一层按上一层的百分比计算。但我们并不想进行比较。纯粹从理论上讲,我希望我是对的,网络内部的解压缩不会在上一层压缩后给它带来新的信息。我在 GA:ga 上尝试过遗传学。它运行了 NS 200-300 次计算。这是一个很大的数字。但结果没有任何改善。虽然对于贝叶斯优化来说,我认为我们需要更多的计算次数,不是 20-30 次,而是可能多达 100 次。因为经常出现的情况是,最佳结果是 10 个随机起始变体中的一个,而优化器接下来的 10-20 次运算都没有发现更好的结果。也许经过 100 次优化后,....。这就是我的不同之处。Relu 通常很好。Genetics 也没有为我找到最佳方案。 对于贝叶斯法,你不仅需要考虑通过次数,还需要考虑点数。你必须寻找更快的方案。这一项非常乏味。 祝您好运 PS.你不是要改用 TensorFlow 吗?这只是一个更高的层次。 123 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
有趣的优化结果--验证样本的误差小于训练样本!
换句话说,在某些数据上训练过的模型,学会了在其他数据上工作,即从训练数据中提取了比实际数据更多的信息--这是科幻小说还是探险......?
我呼吁作者--停止shtukarstva和伪造,最后写一个智能交易系统,并展示一些结果,至少在演示版上。
换句话说,在某些数据上训练过的模型学会了在其他 数据上工作,即从训练数据中提取了比实际数据更多的信息--这是科幻小说还是探险......?
所有模型都是在训练图上进行训练的,也就是说,它们试图将训练图上的误差降到最低,但最后的选择是在测试图上进行的,如果模型没有发现数据中的模式,那么在训练图上或测试图之后的图上,结果都会非常糟糕。但结果表明,无论是在训练图上还是在测试图上,它们都与进行了选择的测试图差别不大。
也就是说,NS 并没有从另一个 数据集上学习,而是在两个数据集上发现了共同的模式。
如果结果不太稳定,那么在测试图上进行选择(不考虑训练者的误差)可能会导致拟合。在本例中没有,但在其他数据中(如果没有发现模式)就有可能。因此,最好在 Err = (ErrLeran * 0.37 + ErrValid * 0.63) 这样的误差之间寻求平衡。
你好,弗拉基米尔
我不太明白为什么你的 NS 是在训练数据上训练的,而其评估是在测试数据上完成的(如果我没弄错的话,你把测试数据用作验证数据)。
在这种情况下,您不会对测试图进行拟合吗,也就是说,您会选择在测试图上效果最好的模型吗?
您还应该考虑到测试图非常小,您可以拟合其中一个时间模式,这可能会很快停止工作。
也许在训练图上进行估计更好,或者在图的总和上进行估计更好,或者像 Darch 那样(提交验证数据时)在 Err = (ErrLeran * 0.37 + ErrValid * 0.63) 上进行估计更好--这些系数是默认的,但可以更改。
有很多选项,目前还不清楚哪一个是最好的。你赞成测试图的论点很有意思。
下午好。
让我们说得更具体些。数据集 X 由 4 个子集组成:preptrain = 4001、train = 1000、test = 500 和 test1= 100 条。对于预训练,我们使用训练集 - pretrain,验证集 - train。
微调时,预训练集用作训练集,验证集用于测试集的前 250 条。
因此,在确定最终质量时,我们使用测试集的最后 250 条作为测试集。代码
我看不出有任何矛盾。您同意吗?
祝好运
所有模型都是在训练图上进行训练的,也就是说,它们试图将训练图上的误差降到最低,但最后的选择是在测试图上进行的,如果模型没有在数据中找到模式,那么在训练图上或测试图之后的图上的结果就会非常糟糕。但结果表明,无论是在训练图上还是在测试图上,它们都与进行了选择的测试图差别不大。
也就是说,NS 并没有从另一个 数据集上学习,而是在两个数据集中找到了共同的模式。
如果结果不太稳定,那么在测试图上进行选择(不考虑训练者的误差)可能会导致拟合。在本例中没有,但在其他数据中(如果没有发现模式)就有可能。最好是在 Err = (ErrLeran * 0.37 + ErrValid * 0.63) 这样的误差之间寻求平衡。
无论如何,训练图上的一般规律性不应该比测试图上的少,因为训练图上的规律性是与所有其他规律性一起被发现的,因此 NS 在训练图上的效果不应该比测试图差。
在我看来,这是显而易见的,而且教师的知识不应该少于学生,尽管文章作者显然试图反驳这一点,因为他在评论中写道,他不是科学家,也不是程序员,但却坚持教我们如何给神经网络编程。
当然,他已经发布了很多 R 代码,但我希望看到足够的结果,最重要的是,我想知道他还会写多少篇文章,直到至少出现一个正常的 Expert Advisor。
下午好。
让我们来澄清一下。数据集 X 由 4 个子集组成:preptrain = 4001、train = 1000、test = 500 和 test1= 100 条。对于预训练,我们使用训练集 - pretrain,验证集 - train。
在微调时,使用预训练集作为训练集,验证集是测试集的前 250 条。
因此,在确定最终质量时,我们使用测试集的最后 250 条作为测试集。代码
我看不出有任何矛盾。你同意吗?
祝你好运
技术上一切都做得很好,这不是问题所在。
我认为 250 条数据不足以评估模型,这就是为什么我想知道为什么只选择了这一部分。
是的,它在特定情况下是有效的(您在所有站点都取得了良好的结果),但我认为它并不具有普遍性。
毕竟,有些数据可能并不是那么好。例如,模型在训练图上的误差可以达到 40%,而在测试图上纯属偶然,误差只有 30%。而第二个模型,比方说,在两个图上都训练成了 35%。第二个模型显然更好。但如果只选择测试图,则会选择第一个模型。为了便于比较,模型评估有以下选项:
只在训练图上评估,
或在所有图的总和上评估,
或像 Darch 那样(提交验证数据)在 Err = (ErrLeran * 0.37 + ErrValid * 0.63) 上评估--这些系数是默认的,但可以更改。
原则上,您可以扩展公式,例如 Err = (ErrLeran * 0.25 + ErrValid * 0.35 + ErrTest * 0.4)。
例如,如果 ErrLeran 和 ErrTest 相差 5%以上--那么就拒绝这样的模型。然后从剩下的模型中做出选择。
我做了一个实验。
以下是 30 次训练的一些结果:(该模型与原始模型不一样,它的一切都很完美,所以我去掉了预训练,这样就不会有糟糕的结果了)
解码:V1 = 1-ErrLearn; V2= 1-ErrOOC; Value = 1 - (ErrLeran * 0.
Value V1 V2
0.5712 0.4988 0.6138 - OOS 很好,但随机,因为 Learn = 50%
0.5002 0.5047 0.4975 - 这比较常见
0.6719 0.6911 0.6606 - 这样的情况也有几次。按值排序 = 1 - (ErrLeran * 0.37 + ErrOOC * 0.63) 将此类模式向上拉动
当然,他已经发布了很多 R 代码,但我希望看到足够的结果,最重要的是,我想知道他还会写多少篇文章,直到至少有一个正常的 EA。
在其中一篇文章中,有一个智能交易系统,我在几天内为新版 Darch 重写了它--从技术上讲,一切都运行得很好。智能交易系统很简单--读取 OHLC 并将其输入 R,然后在 R 中运行计算函数。最后,在收到来自 NS 的指令后,向服务器发送交易指令。仅此而已。其余的 - 追踪、止损、MM - 随您的喜好。
最困难的事情正是文章中所描述的 - 找到好的数据并对 NS 进行适当的训练。弗拉基米尔展示了各种模型变体、集合、优化、预测因子的选择和处理......,我跟不上他的节奏。)
您觉得呢,
,也许我们应该从超参数枚举中排除神经元层数 n2 > n1 的变体?
例如网络 10 - 20 - 100 - 2 或 10 - 8 - 100 - 2
如果 n2 > n1,则会压缩到 n1,然后解压缩到 n2,再压缩到输出层的 1 或 2 个神经元。如果最后仍有 2 个神经元,那么在 n1 层压缩数据后,中间的解压缩应该不会产生任何蠕变。但是,计算明显较差的变体将耗费大量时间。
更新:,我认为可以在拟合函数中以如下方式实现:n1 是神经元数,n2 是 n1 的百分比,然后四舍五入,*2 为最大值。
我自己做的,希望能更有效地利用计算能力。
您觉得呢,
,也许我们应该从超参数枚举中排除神经元层数 n2 > n1 的变体?
例如网络 10 - 20 - 100 - 2 或 10 - 8 - 100 - 2
如果 n2 > n1,则会压缩到 n1,然后解压缩到 n2,再压缩到输出层的 1 或 2 个神经元。如果最后仍有 2 个神经元,那么在 n1 层压缩数据后,中间的解压缩应该不会产生任何蠕变。不过,计算明显较差的变体会耗费大量时间。
,我认为可以在拟合函数中以如下方式实现:n1 应作为神经元数枚举,n2 作为 n1 的百分比,然后取整,*2 为最大值。
您好。
在我长时间的参数实验中,只发现了几个特殊情况:
- 当事实 = 2
- 或两个隐藏层的激活函数相同时,结果往往更好。
我没有限制隐藏层中神经元的比例。非最佳比例很快就会被排除在外。不过你可以测试一下这个想法。我可能会抽空用 rgenoud 检查一下优化情况。
祝你好运
我没有限制隐藏层中神经元的比例。非最佳比例很快就会被排除在外。但你可以测试这个想法。我可能会抽空用 rgenoud 检查一下优化情况。
我让下一层按上一层的百分比计算。但我并不想进行特别的比较。纯粹从理论上讲,我希望我的想法是对的,即在前一层压缩后,网络内部的解压缩不会给它带来新的信息。
我在 GA:ga 上尝试过遗传学。它运行了 NS 200-300 次计算。这是一个很大的数字。而且结果没有任何改善。
虽然对于贝叶斯优化,我认为我们需要更多的计算次数,不是 20-30 次,而是可能多达 100 次。因为经常出现的情况是,最佳结果是 10 个随机起始变体中的一个,而优化器接下来的 10-20 次运算都没有发现更好的结果。也许经过 100 次优化后,结果会有所改善....。
- 事实 = 2 时的最佳结果
- 或两个隐藏层具有相同的激活函数时效果最好
这对我来说有所不同。Relu 通常效果很好。
我让下一层按上一层的百分比计算。但我们并不想进行比较。纯粹从理论上讲,我希望我是对的,网络内部的解压缩不会在上一层压缩后给它带来新的信息。
我在 GA:ga 上尝试过遗传学。它运行了 NS 200-300 次计算。这是一个很大的数字。但结果没有任何改善。
虽然对于贝叶斯优化来说,我认为我们需要更多的计算次数,不是 20-30 次,而是可能多达 100 次。因为经常出现的情况是,最佳结果是 10 个随机起始变体中的一个,而优化器接下来的 10-20 次运算都没有发现更好的结果。也许经过 100 次优化后,....。
这就是我的不同之处。Relu 通常很好。
Genetics 也没有为我找到最佳方案。
对于贝叶斯法,你不仅需要考虑通过次数,还需要考虑点数。你必须寻找更快的方案。这一项非常乏味。
祝您好运
PS.你不是要改用 TensorFlow 吗?这只是一个更高的层次。