ニューラルネットワークのデバッグ


10

scipy.optimize.minimize(共役勾配)最適化関数を使用して、Pythonで人工ニューラルネットワークを構築しました。

私は勾配チェックを実装し、すべてをダブルチェックしました、そしてそれが正しく機能していることは確かです。

何度か実行したところ、「最適化は正常に終了しました」に達しましたが、隠れ層の数を増やすと、正常に終了した後、仮説のコストが増加します(他のすべては同じままです)。

直感的には、隠れ層の数が増えるとコストが下がるように感じられます。これは、データに適合するより複雑な仮説を生成できるためですが、そうではないようです。

ここで何が起こっているのかを理解するのに興味がありますか、またはニューラルネットを間違って実装した場合はどうなりますか?

回答:


9

ニューラルネットで問題が発生する方法は数多くあり、デバッグが困難になります。また、直感に対処するために、隠れ層が追加されるたびに学習が非常に難しくなります。そうは言っても、いくつかの可能性があります:

  1. 体重減少を追加しました。レイヤーを追加すると、重みが追加され、正規化コストが増加します。
  2. 問題は非常に単純で、単一の非表示層を持つモデルで十分です。非表示の層を追加すると、ネットワークが学習しにくくなります(最適化の問題が難しくなります)。
  3. 最適化方法は素晴らしい仕事をしていません(私はscipy.optimizeよりもcliminを好みます)。
  4. シグモイド/タン活性化機能を使用しています。シグモイド関数は消失勾配問題を引き起こし、より多くの層で学習を困難にします。ReLu機能を使ってみてください。

ニューラルネットのトレーニングには、多くの練習、運、忍耐が必要です。幸運を。


1
いい答えです。ただし、2、3、4は複雑な方法で相互作用できることを理解してください。目を保ち、ANN、ANNの重みの大きさの活性値をチェックすることによって行うことができるデバッグをサンプルとアウト・オブ・サンプル誤差とオプティマイザの収束、等
Def_Os

3

標準のニューラルネットワークの非表示層の数を増やしても、実際にはほとんどの場合、結果は改善されません。非表示レイヤーのサイズを変更すると、

この事実(非表示の層の数はほとんどない)は実際に歴史的に指摘されており、ディープラーニングのフィールドの背後にある動機です。ディープラーニングは、たとえば、異なるレイヤーをトレーニングするときに機能のサブセットを分離することにより、多層ニューラルネットワークを効果的にトレーニングする方法です。

YouTubeのこのトピックに関する優れた紹介ビデオ


2
深層学習とは、隠れ層のを増やすことです。そうでなければ、それは脂肪学習と呼ばれます:)
Emre

@Emreは間違いなくそれを意味しました。私の句読点を呪います!
エリックチェン2014年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.