ここでは、見て: あなたは場所を正確にトレーニングデータの終了を確認することができます。トレーニングデータから行くまで1。
Kerasと、tanhアクティベーションを使用した1-100-100-2の高密度ネットワークを使用しました。pとqの2つの値pとqから結果を計算します。このように、1より小さい値のみを使用して、任意のサイズの数値を実現できます。
私はまだこの分野の初心者であるため、簡単に説明してください。
ここでは、見て: あなたは場所を正確にトレーニングデータの終了を確認することができます。トレーニングデータから行くまで1。
Kerasと、tanhアクティベーションを使用した1-100-100-2の高密度ネットワークを使用しました。pとqの2つの値pとqから結果を計算します。このように、1より小さい値のみを使用して、任意のサイズの数値を実現できます。
私はまだこの分野の初心者であるため、簡単に説明してください。
回答:
フィードフォワードネットワークを使用しています。他の答えは、FFNNがトレーニングデータの範囲を超えた外挿に優れていないことは正しいです。
ただし、データは定期的な品質を持っているため、LSTMを使用したモデリングに問題がある可能性があります。LSTMは、シーケンスで動作するさまざまなニューラルネットワークセルであり、以前に「見た」ものに関する「記憶」を持っています。この抽象の本の章では、 LSTMのアプローチがあることを示唆している資格の定期的な問題に成功。
この場合、トレーニングデータはタプルのシーケンスであり、新しい入力x i + 1の正確な予測を行うタスクです。、いくつかのためのnおよび Iいくつかのインデックス増加するシーケンス。各入力シーケンスの長さ、カバーする間隔の幅、および間隔は、ユーザー次第です。直観的には、ある期間に限定されるのではなく、広範囲の値をカバーするトレーニングシーケンスで、1期間をカバーする通常のグリッドが開始するのに適した場所であると期待します。
(Jimenez-Guarneros、MagdielおよびGomez-Gil、PilarおよびFonseca-Delgado、RigobertoおよびRamirez-Cortes、ManuelおよびAlarcon-Aquino、Vicente、「LSTMニューラルネットワークを使用した正弦関数の長期予測」、Nature-ハイブリッド知的システムのインスピレーションを受けてデザイン)
やりたいことが、このような単純な周期関数を学ぶことであれば、ガウス過程の使用を検討することができます。GPを使用すると、適切な共分散関数を指定することにより、ドメインの知識をある程度強化できます。この例では、データが周期的であることがわかっているため、周期的なカーネルを選択できます。モデルはこの構造を推定します。図に例を示します。ここでは、潮の高さのデータを近似しようとしているので、周期構造を持っていることがわかります。私は周期構造を使用しているため、モデルはこの周期性を(多かれ少なかれ)正しく推定します。OFCニューラルネットワークについて学習しようとしている場合、これは実際には関係ありませんが、これは手作業の機能よりも少し良いアプローチかもしれません。ちなみに、ニューラルネットワークとgpは理論的に密接に関連しています。
GPは、ニューラルネットとは異なり、大規模なデータセットやディープネットワークに拡張するのが難しいため、必ずしも有用ではありませんが、このような低次元の問題に関心がある場合は、おそらくより高速で信頼性が高くなります。
(図では、黒い点がトレーニングデータであり、赤い点がターゲットです。正しくない場合でも、モデルはおおよそ周期性を学習していることがわかります。色付きのバンドは、モデルの信頼区間です。予測)
ニューラルネットワークを含む機械学習アルゴリズムは、任意の関数を近似することを学習できますが、トレーニングデータの密度が十分にある区間でのみです。
統計ベースの機械学習アルゴリズムは、補間を実行しているときに最適に機能します-トレーニング例に近い、またはその間の値を予測します。
トレーニングデータ以外では、外挿を期待しています。しかし、それを達成する簡単な方法はありません。ニューラルネットワークは、統計を介してのみ関数を分析的に学習することはありません。これは、ほぼすべての教師付き学習MLテクニックに当てはまります。より高度なアルゴリズムは、十分な例(およびモデル内の自由なパラメーター)があれば、選択した関数に任意に近づけることができますが、提供されるトレーニングデータの範囲内でのみそうします。
ネットワーク(または他のML)がトレーニングデータの範囲外でどのように動作するかは、使用されるアクティベーション関数を含むアーキテクチャによって異なります。
場合によっては、機能を周期関数で変換する@Neil Slaterの推奨アプローチが非常にうまく機能し、最適なソリューションになる可能性があります。ここでの難点は、周期/波長を手動で選択する必要がある場合があることです(この質問を参照)。
周期性をネットワークにより深く埋め込む場合、最も簡単な方法は、1つ以上のレイヤーでアクティベーション関数としてsin / cosを使用することです。このペーパーでは、定期的なアクティベーション機能を扱うための潜在的な困難と戦略について説明します。
また、このペーパーでは、ネットワークの重みが周期関数に依存する、異なるアプローチを採用しています。また、より柔軟なため、sin / cosの代わりにスプラインを使用することを提案しています。これは昨年の私のお気に入りの論文の1つであったため、そのアプローチを使用しなくても読む(または少なくともビデオを見る)価値はあります。
あなたは間違ったアプローチを取りました。問題を解決するためにこのアプローチでは何もできません。
問題に対処する方法はいくつかあります。機能エンジニアリングを通じて最も明白なものを提案します。線形の特徴として時間を差し込む代わりに、それをモジュラスT = 1の残りとして置きます。たとえば、t = 0.2、1.2、2.2はすべてt1 = 0.1などの特徴になります。Tが波の周期よりも大きい限り、これは機能します。このことをネットに接続して、それがどのように機能するかを見てください。
機能エンジニアリングは過小評価されています。AI / MLにはこの傾向があり、営業担当者はすべての入力をネットにダンプすると主張し、どうにかしてそれらをどう処理するかを理解します。確かに、あなたの例で見たように、それはそうですが、それから簡単に壊れます。これは、最も単純な場合でも優れた機能を構築することがいかに重要であるかを示す素晴らしい例です。
また、これが機能エンジニアリングの最も粗雑な例であることを理解してほしい。それはあなたにあなたがそれで何ができるかについてのアイデアを与えることです。