2013-04-02 15 views
14

私は現在、情報抽出のためにニューラルネットワークを設定しようとしています。私は困惑させるようなものを除いて、ニューラルネットワークの(基本的な)概念にかなり慣れています。それはおそらくかなり明らかですが、私はそれについての情報を見つけられないようです。ニューラルネットワーク/マシン学習記憶記憶

ニューラルネットワークはどのようにメモリを保存していますか? (機械学習)

ニューラルネットワークと機械学習については、オンラインでかなりの情報がありますが、それらはすべてメモリストレージをスキップするようです。たとえば、プログラムを再起動した後、学習/予測を続けるためにそのメモリがどこにありますか?オンラインの多くの例ではメモリを「保持」していないようですが、実際の/大規模な展開ではこれが「安全」であるとは想像できません。

私は質問が難しいので、もう少し詳しく説明する必要がある場合はお知らせください。 おかげで、


EDITは: -

の下に答えをフォローアップするために、すべてのニューラルネットワークは、それらに関連付けられたエッジの重みを持つことになります。 これらのエッジ重みは、 ニューラルネットワークのトレーニングセッション中に調整されます。

これは正確に私が苦労しているところです。私はこの二次的な記憶をどのように視覚化すべきですか? これはRAMのようですか?私は、この二次メモリを定義または指定するオンラインの例に遭遇していないので(XMLファイルや巨大な配列のようなより具体的なもので)、私が尋ねる理由を尋ねます。

答えて

6

メモリストレージは実装固有であり、アルゴリズムそのものではありません。 について考えるのはおそらくの代わりにを保存する必要があります。を保存すると便利です。

入力層、隠れ層、出力層にそれぞれ3,8、および5のノードを持つ3層の多層パーセプトロン(完全に接続されている)を考えてみましょう(ここではバイアス入力は無視できます)。次に、必要な重みを表す合理的(かつ効率的)な方法は、入力と隠れ層の間の重みのための3x8行列と、隠れ層と出力層の間の重みのための8x5行列です。

この例では、重みとネットワークシェイプ(レイヤごとのノード数)を格納する必要があります。この情報を保存する方法はたくさんあります。これは、XMLファイルまたはユーザー定義のバイナリファイルに存在する可能性があります。 Pythonを使用していた場合は、両方の行列をバイナリの.npyファイルに保存し、ファイル名にネットワークシェイプをエンコードすることができます。アルゴリズムを実装した場合、永続データをどのように格納するかはあなた次第です。一方、既存のマシン学習ソフトウェアパッケージを使用している場合は、訓練されたネットワークを格納してロードするための独自の入出力機能を備えていると考えられます。

+0

ありがとうございました! –

3

モデル(ニューラルネットワーク)の設計についての議論は、耐久性のようなデータ要件が取り上げられている実装の議論とは別に行われることが期待されます。

特定のライブラリやフレームワークでは、耐久性のあるストレージに関する具体的な回答が得られるかもしれませんが、ゼロから自分自身をロールバックしている場合は、それはあなた次第です。

たとえば、訓練された重みとトポロジをファイルに書き込むだけではどうですか? YAMLやXMLのようなものがフォーマットの役目を果たします。

また、状態/ストレージおよびニューラルネットワークについても言及していますが、associative memoryの調査に興味があるかもしれません。

+0

ありがとう!私は実際に同じ方向にストレージを考えていました。しかし、これは共通/これを行うための「正式な」方法ですか?私が尋ねる理由は、これを定義または指定するオンラインの例に遭遇しなかったからです(たとえば、XMLファイルや巨大な配列のような具体的なもので言及したように)。ありがとう! –

+0

"形式"は、数学で止まります。ソフトウェア設計の観点からは、特に(小規模の)ニューラルネットワークについて特別なものはない。 – phs

+0

あなたの答えをありがとう、本当に助けた。彼らがお互いを褒めてくれるので、私はどちらを受け入れるべきかわかりません。しかし、できるだけ早くあなたに+1の投票をします。 –

3

すべてのニューラルネットワークにはエッジウェイトが関連付けられています。これらのエッジ重みは、ニューラルネットワークのトレーニングセッション中に調整されます。私はあなたの疑問は、これらのエッジウェイトを保存することであると思います。これらの値は、2次メモリに別々に格納され、将来のニューラルネットワークで使用できるように保持されます。

+0

はい、私はどこに行っていたのですか。しかし、私はこの二次記憶に苦労しています。一時的にRAMのようなものですか?私は、この二次メモリを定義または指定するオンラインの例に遭遇していないので(XMLファイルや巨大な配列のようなより具体的なもので)、私が尋ねる理由を尋ねます。ありがとう! –

+0

あなたの答えをありがとう。彼らがお互いを褒めてくれるので、私はどちらを受け入れるべきかわかりません。しかし、私が最低要件に達すると、あなたに+1の投票を与えます。 –

0

あなたのアプローチが間違っていると思います。ニューラルネットワークは、コンピュータ上で見られるようにメモリのダンプではありません。特定のメモリチャンクが存在するアドレスはありません。すべてのニューロンは、与えられた入力が特定の出力につながることを確実にします。

あなたの脳と比較してみましょう。あなたが砂糖を味わうとき、あなたの舌の味蕾は、化学信号を読んで脳に電気信号を送る入力ノードです。脳は、電気信号の様々な組み合わせを用いて味を決定する。

ルックアップテーブルはありません。一次および二次記憶はなく、短期および長期記憶のみが存在する。

0

これは、2つのステップで答えられることがあります。(NNと呼ぶ)ニューラルネットワークにおける「メモリ」

  1. は何ですか?

ニューラルネットワーク(NN)がトレーニングされるように、特定の入力に対する出力として与えるために何NNに指示数学モデル を構築します。 あなたが新しい言語を話すように誰かを訓練するときに何が起こるかを考えてください。 人間の脳は言語のモデルを作成します。同様に、NNはあなたが教えようとしているものの数学的モデルを 作成します。一連の関数としての入力から出力へのマッピングを表します。この数学モデル がメモリです。この数学モデルは、ネットワーク内のさまざまなエッジの重みです。多くの場合、NNが訓練され、これらの重み/接続はハードディスク(XML、Yaml、CSVなど)に書き込まれます。 NNを使​​用する必要があるときはいつでも、これらの値は読み戻され、ネットワークは再作成されます。

  1. どのようにネットワークのメモリを忘れさせることができますか?

2つの言語を教えている人のことを考えてください。私たちは15〜20年間これらの言語の1つを話すことは決してありませんが、毎日他の言語を使用しています。毎日新しい単語がいくつか学習され、それほど頻繁ではない言語の多くの単語が忘れられる可能性が非常に高いです。ここで重要な部分は、人間が毎日「学習」していることです。 NNでは、新しいデータを使用してネットワークを訓練することによって同様の現象が観察される。古いデータが新しい訓練サンプルに含まれていなかった場合、基礎となる数学モデルはそれほど変化しないので、古い訓練データはもはやモデルに表されなくなる。トレーニングプロセスを変更することで、NNが古いモデルを「忘れる」ことを防ぐことができます。しかし、これは、そのようなNNが完全に新しいデータサンプルを学ぶことができないという副作用を有する。