INFO [2017-11-15 17:53:24] Classification error on Train set (best model): 29.1% (582/2000) INFO [2017-11-15 17:53:24] Train set (best model) Cross Entropy error: 1.146 INFO [2017-11-15 17:53:25] Classification error on Validation set (best model): 30.54% (153/501) INFO [2017-11-15 17:53:25] Validation set (best model) Cross Entropy error: 1.192 INFO [2017-11-15 17:53:25] Best model was found after epoch 8 INFO [2017-11-15 17:53:25] Final 0.632 validation Cross Entropy error: 1.175 INFO [2017-11-15 17:53:25] Final 0.632 validation classification error: 30.01% INFO [2017-11-15 17:53:25] Fine-tuning finished after 4.4 secs
2番目のステップの後です。
INFO [2017-11-15 17:49:45] Trainセット(ベストモデル)の分類エラー:32.57% (326/1001) INFO [2017-11-15 17:49:45] Train set (best model) Cross Entropy error: 1.244 INFO [2017-11-15 17:49:45] Classification error on Validation set (best model):30.74%(154/501)
つまり、検証セットでの誤差は同じ、つまり30%です。
その前に
xValid=DTcut$train$woe %>% as.data.frame(),
yValid=DTcut$train$raw$Class %>% as.data.frame()
で試してみたところ、こうなった:
INFO [2017-11-15 17:48:58] Trainセットの分類エラー(ベストモデル):28.85% (577/2000) INFO [2017-11-15 17:48:58] Train set (best model) Cross Entropy error: 1.153 INFO [2017-11-15 17:48:59] Classification error on Validation set (best model):35.66%(357/1001)
非常に小さなセット(1000例のみ(全体の25%))で、教師による微妙な学習が行われる。
この1000例と3000例(pretrain + train)の学習の質を比較したことがないのですか?その差は本当に小さいのでしょうか?
わずか1000例(全体の25%)という非常に小さなセットで、教師との微妙な学習が行われています。
その1000例と3000例(プレトレーニング+トレーニング)のティーチングの質を比較したことがないのですか?その差は本当に小さいのでしょうか?
サーバーがリブートしているときに正確に送信したのだと思います。
pretrainを使用する利点の1つは、きめ細かいトレーニングのために必要な例、トレーニングエポック、トレーニングレベルがはるかに少ないということです。一方、事前トレーニングでは、より多くの例が必要です。私の経験では、1500~2000例もあればプレトレーニングには十分です。事前トレーニングによって、DNNの重みは最適解の領域に配置される。微調整が必要なだけである。重みを増やすと品質が低下する。
しかし、実験的に確認することができる。
トレーダー、プログラマー、数学者の皆さん、こんにちは。
この記事はよく説明されているし、理解もできる...。)
ウラジミール、個人的な偏見から質問があるのですが、できればお答えください:
問題解決の境界線:
1.トレーニング:DB2*でDB1*のテンプレート*の繰り返しを検索して選択します。繰り返しの数と許容される偏差は、仮説*の信頼性を完全に特徴付ける。作成された反復のある DB2 は、関心のある FI*の DB1 よりもはるかに小さいサイズになり、したがってコンピュータの消費電力も少なくて済みます。異なる仮説*の引用符を一つの型サイズに変換することで、異なる仮説*から発見された反復を一つの(統一された)DB1に保存することができるようになります。
2.分析:データ*に新しいポイントが現れ、それに応じて新しいパターン*が現れたら、次のようにする。
2.1.直ちに DB2 で新しい検索を行い、素早く検索し、見つかったデータを DB3* に保存し、それに応じて DB2* を更新する。
2.2. ダウンタイムの間、DB1 で新しい検索を行う-正確だが遅い検索を行い、見つかったデータを DB3* に保存し、それに応じて DB2* を更新する。
2.3. DB3*の変更に基づいて(取引戦略に従って)チェックし、必要であれば取引ポジションを変更する。
略語の解読:
DB1 - データベース/全金融機関*の相場履歴:
1) 長い履歴によって限定されたポイント*の連鎖の形で、しかしそこから20ポイントのグループが分析される。
2) テンプレート*のリストとして
DB2 - テンプレート*が繰り返されるデータベースで、完全または部分的に同一である(テンプレート*の変数の任意の数は破棄される)。
DB3 - テンプレート*を持つデータベースで、最後のテンプレート、すなわち現在の実際のテンプレートと完全または部分的に同一(テンプレート*ポイント*の座標に指定されたレベルの偏差を持つ)。
FI* - 金融商品(EURUSD、GBPUSD、_SPX500、...)、各金融商品は個別のファイルに保存されます。
ポイント* - 価格、日付、出来高で構成され、バークローズ/フラクタル/等に対応します。
テンプレート* - 20ポイント*のグループ
仮説* - FI*分析システム(変形としてニューラルネットワーク)の結果。
タスクに関する質問:
もしそうなら、ニューラルネットワークをトレーニングする 最も適切な方法は何か、またその理由は何か。
質問を明確にしよう:相当数のテンプレート*(テンプレートの一部分には同一性判定のためのランドマークが含まれ、二番目の部分には仮説*が含まれる)を供給することによってニューラルネットワークを訓練することは可能か。もし答えが「イエス」であれば、どのようなニューラルネットワークを使用することができるのでしょうか?
私が理解する限り、あなたが提案した変種はこれには適していません。
私はこの課題を少し要約して書きました - 微妙なことにまで踏み込みたくなかったのですが、質問に対する答えを得たかったのです。
私自身は、明白なことを言うことができます - ニューラルネットワークは私を魅了しますが、私はまだそれらに飛び込むことができませんでした。
ありがとう、
ウラジミール
トレーダー、プログラマー、数学者の皆さん、こんにちは。
この記事はよく説明されているし、理解もできる...。)
ウラジミール、個人的な偏見から質問があるのですが、できればお答えください:
問題解決の境界線:
1.トレーニング:DB2*でDB1*のテンプレート*の繰り返しを検索して選択します。繰り返しの数と許容される偏差は、仮説*の信頼性を完全に特徴付ける。作成された反復のある DB2 は、関心のある FI*の DB1 よりもはるかに小さいサイズになり、したがってコンピュータの消費電力も少なくて済みます。異なる仮説*の引用符を一つの型サイズに変換することで、異なる仮説*から発見された反復を一つの(統一された)DB1に保存することができるようになります。
2.分析:データ*に新しいポイントが現れ、それに応じて新しいパターン*が現れたら、次のようにする。
2.1.直ちに DB2 で新しい検索を行い、素早く検索し、見つかったデータを DB3* に保存し、それに応じて DB2* を更新する。
2.2. ダウンタイムの間、DB1 で新しい検索を行う-正確だが遅い検索を行い、見つかったデータを DB3* に保存し、それに応じて DB2* を更新する。
2.3. DB3*の変更に基づいて(取引戦略に従って)チェックし、必要であれば取引ポジションを変更する。
略語の解読:
DB1 - データベース/全金融機関*の相場履歴:
1) 長い履歴によって限定されたポイント*の連鎖の形で、しかしそこから20ポイントのグループが分析される。
2) テンプレート*のリストとして
DB2 - テンプレート*が繰り返されるデータベースで、完全または部分的に同一である(テンプレート*の変数の任意の数は破棄される)。
DB3 - テンプレート*を持つデータベースで、最後のテンプレート、すなわち実際の現在と完全または部分的に同一(テンプレート*ポイント*の座標に指定されたレベルの偏差を持つ)。
FI* - 金融商品(EURUSD、GBPUSD、_SPX500、...)、各金融商品は個別のファイルに保存されます。
ポイント* - 価格、日付、出来高で構成され、バークローズ/フラクタル/等に対応します。
テンプレート* - 20ポイント*のグループ
仮説* - FI*分析システム(変形としてニューラルネットワーク)の結果。
タスクに関する質問:
もしそうなら、ニューラルネットワークを訓練する最も適切な方法は何か、またその理由は何か。
質問を明確にしよう:相当数のテンプレート*(テンプレートの一部分には同一性判定のためのランドマークが含まれ、二番目の部分には仮説*が含まれる)を供給することによってニューラルネットワークを訓練することは可能か。もし答えが「イエス」なら、どのようなタイプのニューラルネットワークを使えばよいのでしょうか?
私が理解する限り、あなたが提案した変種はこれには適していません。
私はこの課題を少し要約して書きました - 微妙なことにまで踏み込みたくなかったのですが、質問に対する答えを得たかったのです。
私自身は、明白なことを言うことができます - ニューラルネットワークは私を魅了しますが、私はまだそれらに飛び込むことができませんでした。
ありがとう、
ウラジミール
こんにちは。
様々な長さのシーケンスの学習と分類のタスクには、間違いなくLSTMを適用すべきです。このようなニューラルネットワークには多くの種類があります。すべては入力データの種類と分類の目標に依存します。
現在、TensorFlow/Keras/CNTKで利用可能なすべての種類のニューラルネットワークをR/MT4で適用することが可能です。
幸運を祈る。
午後
様々な長さのシーケンスの学習と分類のタスクには、LSTMを使うべきです。このようなニューラルネットワークには多くの種類があります。全ては入力データの種類と分類の目標に依存する。
現在、TensorFlow/Keras/CNTKで利用可能なすべての種類のニューラルネットワークをR/MT4で適用することが可能です。
幸運を祈る
ありがとうございます!
答えは明確だ。
この方向に進んでみます。
ウラジミール、力を合わせることについてどう思う?力を合わせれば...
敬意を表して
ウラジーミル
よかった!
ありがとう。
私はこの方向で動くつもりだ。
ウラジミール、手を組まないか?一緒に戦えると思うが......。
敬意を表して
ウラジーミル
いいだろう。
共同作業について話し合うことができる。ただ、この連載が終わってから始められるので、今月中にはできると思う。
しかし、準備作業や説明作業は今すぐにでも始めることができる。効果的な仕事をするためには、基本的な考え方を理解することが重要だ。今、私はあなたの考えをよく理解していません。何かイメージできるものはありますか?
幸運を祈る。
こんにちは、
NSのレイヤーによって異なるパラメータが選ばれている理由を教えてください:
darch.unitFunction = c(" tanhUnit"," maxoutUnit", " softmaxUnit"),
darch.dropout = c(0.1,0.2,0.1),
darch.weightUpdateFunction = c("weightDecayWeightUpdate", "maxoutWeightUpdate","weightDecayWeightUpdate"),
1)単に、パッケージのバリエーションが豊富であることを示すため?
2) それとも、指定されたパラメーターの組み合わせに何らかの利点があるのでしょうか?(あなたの経験から)。
3) あるいは、多様性は原理的に有用なのか?また、(必ずしもコードで指定されたものだけでなく)異なるレイヤーに対して異なるパラメーターを使用することを試みるべきである。
こんにちは、
NSのレイヤーによって異なるパラメータが選ばれている理由を教えてください:
1)単に、パッケージのバリエーションが豊富であることを示すため?
2) それとも、指定されたパラメーターの組み合わせに何らかの利点があるのでしょうか?(あなたの経験から)。
3) あるいは、多様性は原理的に有用なのか?また、層ごとに異なるパラメーターを使うようにすべきです(必ずしもコードで指定されているパラメーターをそのまま使う必要はありません)。
なぜなら、それらは異なる活性化関数を持っているからです。
第1隠れ層の活性化関数は入力データの種類によって決定される。 我々は+1/-1の範囲の入力を持っているので、最も適切なのはtanhだが、sigmやmaxoutでもよい。番目の隠れ層はmaxoutである。出力はもちろんsoftmaxである。
経験からドロップアウト。異なるレイヤーは異なるパラメータを持つことができ、また原則的に持つべきである。すべてのパッケージがこのようにパラメータを変える可能性を提供しているわけではない。
最小の分類誤差を得るために、これらのハイパーパラメータの組み合わせを選択することは、最適化の問題である(記事の第5部に例がある)。
そして、どんなパラメータでも実験することができる(もちろん、それらが我々のデータに関連していればの話だが)。
実験してみてください。
幸運を祈る。
こんにちは、
もうひとつ質問です。
なぜトレーニングは2つのステージに分かれているのでしょうか?
1つはプリトレイン、そしてDNNの最上位レイヤーのみをトレーニング
と
2つはネットワーク全体をファイン・ラーニングするのでしょうか?
第1段階を拡張して、
事前学習+ネットワーク全体の精密学習を同時に行う
(すなわち、rbm.lastLayer = 0、bp.learnRate = 1、darch.trainLayers = T)にすれば、第2段階がなくても同じ結果が得られるのではないでしょうか?
更新実験をセットアップしてみた。
evalq({
require(darch)
require(dplyr)
require(magrittr)
Ln <- c(0, 16, 8, 0)
nEp_0 <- 25
#------------------
par_0 <- list(
layers = Ln,
seed = 54321,
logLevel = 5,
# params RBM========================
rbm.consecutive = F, # each RBM is trained one epoch at a time
rbm.numEpochs = nEp_0,
rbm.batchSize = 50,
rbm.allData = TRUE,
rbm.lastLayer = 0,
rbm.learnRate = 0.3,
rbm.unitFunction = "tanhUnitRbm",
# params NN ========================
darch.batchSize = 50,
darch.numEpochs = nEp_0,
darch.trainLayers = T,
darch.unitFunction = c("tanhUnit","maxoutUnit", "softmaxUnit"),
bp.learnRate = 1,
bp.learnRateScale = 1,
darch.weightDecay = 0.0002,
darch.dither = F,
darch.dropout = c(0.1,0.2,0.1),
darch.fineTuneFunction = backpropagation, #rpropagation
normalizeWeights = T,
normalizeWeightsBound = 1,
darch.weightUpdateFunction = c("weightDecayWeightUpdate",
"maxoutWeightUpdate",
"weightDecayWeightUpdate"),
darch.dropout.oneMaskPerEpoch = T,
darch.maxout.poolSize = 2,
darch.maxout.unitFunction = "linearUnit")
#---------------------------
DNN_default <- darch(darch = NULL,
paramsList = par_0,
x = DTcut$pretrain$woe %>% as.data.frame(),
y = DTcut$pretrain$raw$Class %>% as.data.frame(),
xValid = DTcut$val$woe %>% as.data.frame(),
yValid = DTcut$val$raw$Class %>% as.data.frame()
)
}, env)
が得られました:
INFO [2017-11-15 17:53:24] Classification error on Train set (best model): 29.1% (582/2000)
INFO [2017-11-15 17:53:24] Train set (best model) Cross Entropy error: 1.146
INFO [2017-11-15 17:53:25] Classification error on Validation set (best model): 30.54% (153/501)
INFO [2017-11-15 17:53:25] Validation set (best model) Cross Entropy error: 1.192
INFO [2017-11-15 17:53:25] Best model was found after epoch 8
INFO [2017-11-15 17:53:25] Final 0.632 validation Cross Entropy error: 1.175
INFO [2017-11-15 17:53:25] Final 0.632 validation classification error: 30.01%
INFO [2017-11-15 17:53:25] Fine-tuning finished after 4.4 secs
2番目のステップの後です。
INFO [2017-11-15 17:49:45] Trainセット(ベストモデル)の分類エラー:32.57% (326/1001)
INFO [2017-11-15 17:49:45] Train set (best model) Cross Entropy error: 1.244
INFO [2017-11-15 17:49:45] Classification error on Validation set (best model):30.74%(154/501)
つまり、検証セットでの誤差は同じ、つまり30%です。
その前に
yValid = DTcut$train$raw$Class %>% as.data.frame()
で試してみたところ、こうなった:
INFO [2017-11-15 17:48:58] Trainセットの分類エラー(ベストモデル):28.85% (577/2000)
INFO [2017-11-15 17:48:58] Train set (best model) Cross Entropy error: 1.153
INFO [2017-11-15 17:48:59] Classification error on Validation set (best model):35.66%(357/1001)
DTcut$train セットよりも DTcut$val セットの 方が優れて いる可能性があるので 、私の1ステップでもあなたの2ステップと同じくらい良い結果が 出ました。