記事"ディープニューラルネットワーク(その4)ニューラルネットワークモデルの作成、訓練、テスト"についてのディスカッション - ページ 2

 
SplitData() - 初期セットdt[]を、2000/1000/500/500/500の比率で、pretrain, train, val, testのサブセットに分割する。

非常に小さなセット(1000例のみ(全体の25%))で、教師による微妙な学習が行われる。

この1000例と3000例(pretrain + train)の学習の質を比較したことがないのですか?その差は本当に小さいのでしょうか?

 
なるほど、金が絡むところ(特に安易な金)では戦争と搾取が予想される。
 
elibrarius:

わずか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で適用することが可能です。

幸運を祈る。

 
Vladimir Perervenko:

午後

様々な長さのシーケンスの学習と分類のタスクには、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) あるいは、多様性は原理的に有用なのか?また、(必ずしもコードで指定されたものだけでなく)異なるレイヤーに対して異なるパラメーターを使用することを試みるべきである。

 
elibrarius:

こんにちは、

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%です。

その前に

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)


DTcut$train セットよりも DTcut$val セットの 方が優れて いる可能性があるので 、私の1ステップでもあなたの2ステップと同じくらい良い結果が 出ました。