ニューラルネットワーク、悪いヒント

歴史的には、半世紀以上の歴史を持つ人工ニューラルネットワークは、懐疑と無関心の期間だけでなく、急速な上昇と世間の注目の高まりを経験しています。 科学者や技術者にとっては、認知タスクで人間に取って代わることができる普遍的な技術がついに発見されたようです。 雨上がりのキノコのように、著者、プロの数学者の間で、ニューラルネットワークのさまざまな新しいモデルが登場し、提案されたモデルの生物学的程度の大小について激しい議論があります。 専門の生物学者はこれらの議論を側から見て、定期的に「はい、これは実際には起こりません!」と叫びます-ニューラルネットワークの数学者は原則として生物学者の話を聞くので、生物学者の事実が彼らの独自の理論。 しかし、時間の経過とともに、タスクのプールが次第に蓄積され、その上でニューラルネットワークが率直に不十分に動作し、人々の熱意が冷めます。



今日、ニューラルネットワークは、制限付きボルツマンマシン(RBM)に基づいた「教師なし」の事前トレーニング方法の発明のおかげで栄光の頂点にあります。これにより、 ディープニューラルネットワーク (つまり、非常に大きなもので、数万のオーダー)ニューロンの数)および口頭音声認識[1]および画像[2]の実際的な問題におけるディープニューラルネットワークの成功。 たとえば、Androidの音声認識はディープニューラルネットワークに実装されています。 これがどれくらい続くか、そしてニューラルネットワークがどれだけ深く彼らの期待に応えるかは不明です。

一方、すべての科学的論争、傾向、および傾向と並行して、ニューラルネットワークのユーザーコミュニティは明確に区別されます-ニューラルネットワークの応用面に関心のあるソフトウェアエンジニアと実践者、収集されたデータから学習し、認識問題を解決する能力。 多くの実用的な分類および予測タスクは、多層パーセプトロン(多層パーセプトロン、MLP)および放射状基本関数ネットワーク(RBF)のよく開発された比較的小さなモデルによって素晴らしく処理されます。 これらのニューラルネットワークは何度も説明されていますが、個人的な同情の順序で次の本をお勧めします。Osovsky[3]、Bishop [4]、Khaikin [5]。 Courseraおよび同様のリソースに関する優れたコースもあります。



ただし、実際にニューラルネットワークを使用する一般的なアプローチに関しては、通常の決定論的な開発アプローチ「プログラムされた、動作する、つまり常に動作する」とは根本的に異なります。 ニューラルネットワークは本質的に確率モデルであり、それらへのアプローチは完全に異なる必要があります。 残念ながら、一般に機械学習技術、特にニューラルネットワークに慣れていない多くのプログラマーは、作業中にシステムエラーを起こします。彼らは失望し、このことを放棄します。 Habrで本物の論文を書くというアイデアは、このようなイライラしたニューラルネットワークのユーザー(優秀で経験豊富な自信のあるプログラマー)と話し合った後に生まれました。



ここに、ニューラルネットワークを使用するためのルールとよくある間違いのリストを示します。



1.ニューラルネットワークを使用しないことが可能な場合は、使用しないでください。

ニューラルネットワークを使用すると、目を通してデータを繰り返し(または非常に多数)表示してアルゴリズムを提案することが不可能な場合に、問題を解決できます。 たとえば、大量のデータがある場合、それらは非線形でノイズが多く、大規模です。



2.ニューラルネットワークの複雑さは、タスクの複雑さに対して適切でなければなりません。

最新のパーソナルコンピューター(Core i5、8 GB RAMなど)を使用すると、数百の入力データを使用して、数万のサンプルのサンプルで快適な時間にニューラルネットワークをトレーニングできます。 大きなサンプルは、マルチプロセッサGPUでトレーニングする前述のディープニューラルネットワークの課題です。 これらのモデルは非常に興味深いものですが、実際のhabrの記事では焦点が合っていません。



3.トレーニング用のデータは代表的なものでなければなりません。

トレーニングサンプルは、説明されている現象を完全かつ多様に表し、さまざまな状況を含む必要があります。 さて、大量のデータがある場合でも、それ自体が常に助けになるとは限りません。 狭い円では、地質学者が認識者のところに来て、彼の前に鉱物片を置き、そこからそのような物質の認識システムを開発するように頼むとき、ジョークが広まっています。 「より多くのデータの例を提供することは可能ですか?」認識エンジンは尋ねます。 「もちろん!」地質学者は答え、つるはしを取り出し、鉱物をさらにいくつかの部分に分割します。 ご存知のように、このような操作では使用できません。このようなサンプルの増加は、新しい情報を伝えません。



4.選択をシャッフルします。

入力および出力データベクトルが収集された後、測定値が互いに独立している場合、任意の方法でベクトルの順序を変更します。 これは、サンプルをTrain / Test / Validationと「サンプルごと」(「サンプルごと」)などのすべてのトレーニング方法に正しく分割するために重要です。



5.データを正規化して中央に配置します。

多層パーセプトロン、および他の多くのモデルでは、入力データの値は[-1; 1]内に収まる必要があります。 それらをニューラルネットワークに送信する前に、データから平均を引き、すべての値を最大値で割ります。



6.サンプルをトレーニング、テスト、検証に分けます。

初心者の主な間違いは、トレーニングセット内のニューラルネットワークの作業におけるエラーを最小限に抑え、それを地獄に再トレーニングし、新しい実データで同じ良質を求めることです。 これは、データがほとんどない場合(またはそれらがすべて「一体」である場合)、特に簡単に実行できます。 結果は非常にイライラする可能性があります。ニューラルネットワークはサンプルに最大限に適合し、実際のデータの作業能力を失います。 モデルの一般化能力を制御するために、すべてのデータを70:20:10の比率で3つのサンプルに分割します。電車で勉強し、定期的にテストでモデルの品質を確認します。 最終的な公平な評価のために、検証。

トレーニングとテストが同じデータから任意の方法で複数回順番に形成される場合、クロス検証手法はcになり、高品質システムの誤った印象を与える可能性があります-たとえば、データが異なるソースから取得され、これが重要な場合 正しい検証を使用してください!



7.正則化を適用します。

正則化は、データがほとんどなくても、トレーニング中にニューラルネットワークの再トレーニングを回避する手法です。 この単語にチェックマークが付いている場合は、必ず付けてください。 再訓練されたニューラルネットワークの兆候は、数百から数千のオーダーの大きな重みの値であり、そのようなニューラルネットワークは、これまで見られなかった新しいデータでは正常に機能しません。



8.ニューラルネットワークをオンラインで再トレーニングする必要はありません。

新しい着信データで常にニューラルネットワークを恒久的にトレーニングするという考えはそれ自体で正しいものであり、これは実際の生物学的システムでまさに起こることです。 私たちは毎日学び、めったに夢中になりません。 それにもかかわらず、技術開発の現代段階にある通常の人工ニューラルネットワークでは、この手法は危険です。ネットワークは、受信した最新のデータに再トレーニングまたは調整でき、一般化能力を失います。 システムを実際に使用するには、1)トレーニング済み、2)テストおよび検証サンプルで品質をテスト、3)ネットワークの正常なバージョンを選択、その重みを記録し、4)トレーニング済みニューラルネットワークを実際に使用し、プロセスの重みを設定する必要があります用途を変えないでください。



9.新しい学習アルゴリズムを使用します:Levenberg-Marquardt、BFGS、共役勾配など。

バックプロパゲーショントレーニングの実装は、ニューラルネットワークを扱うすべての人の神聖な義務であると深く確信しています。 この方法は最も簡単で、比較的簡単にプログラミングでき、ニューラルネットワークの学習プロセスの優れた研究を可能にします。 一方、バックプロパゲーションは70年代前半に発明され、前世紀の80年代半ばに普及しました。それ以降、トレーニングの質を大幅に改善できるより高度な方法が登場しました。 それらをよりよく使用します。



10. MATLABおよび同様の使いやすい環境でニューラルネットワークをトレーニングします。

ニューラルネットワークをトレーニングするための新しい方法を開発する科学者ではなく、実用的なプログラマーである場合、ニューラルネットワークをトレーニングする手順を自分でコーディングすることはお勧めしません。 主にMATLABおよびPythonに多数のソフトウェアパッケージがあり、便利な視覚化およびデバッグツールを使用して学習およびテストプロセスを制御しながら、ニューラルネットワークをトレーニングできます。 人類の遺産を利用してください! 個人的には、「優れたライブラリを使用してMATLABで学習する-訓練されたモデルを手で実装する」というアプローチが好きで、非常に強力で柔軟です。 例外はSTATISTICAパッケージです。このパッケージには、ニューラルネットワークをトレーニングするための高度な方法が含まれており、実装に便利なCコードの形式でそれらを生成できます。



次の記事では、上記の原理に基づいて実装された商用ソフトウェア製品の認識タスクに使用されるニューラルネットワークを準備する完全な産業サイクルについて詳しく説明する予定です。



頑張って!



文学



[1] Hinton G.、Deng L.、Yu D.、Dahl G.、Mohamed A.、Jaitly N.、Senior A.、Vanhoucke V.、Nguyen P.、Sainath T.、Kingsbury B.音声認識における音響モデリング、IEEE Signal Processing Magazine、Vol。 29、No 6、2012、pp。 82〜97。

[2] Ciresan D.、Meier U.、Masci JおよびSchmidhuber J.交通標識分類のためのマルチカラム深層ニューラルネットワーク。 ニューラルネットワーク、Vol。 34、2012年8月、pp。 333-338

[3] S.オソフスキー。 情報処理のためのニューラルネットワーク。 ポーランドから。 M。:ファイナンスと統計、2002年。-344 p。

[4] Bishop CMパターン認識および機械学習。 スプリンガー、2006-738 p。

[5] S.カイキン。 ニューラルネットワーク:フルコース。 ウィリアムズ、2006。



All Articles