2016-04-10 18 views
0

私はニューラルネットワークを実装しようとします。私はバックプロパゲーションを使ってグラジエントを計算しています。勾配を得た後、それらを学習率で乗算し、対応する重みからそれらを減算する。 (基本的に勾配降下を適用しようとすると、これが間違っているかどうか教えてください)。 backpropagationとgradient descentを準備した後で最初に試したのは、入力が(0,0)、(1,0)、(0,1)、(1,1) )、対応する出力は0,1,1,0です。したがって、私のニューラルネットワークは、2つの入力ユニット、1つの出力ユニット、および3つのユニットを持つ1つの隠れたレイヤーを含んでいます。 > 100(> 5000を試したとしても)の学習率3.0で学習すると、コストは特定のポイントまで下がりますので、一定のままです。ウェイトはプログラムを実行するたびにランダムに初期化されますが、常に同じ特定のコストでスタックされます。とにかく、訓練が終了した後、上記の入力のいずれかで自分のニューラルネットワークを実行しようとしましたが、出力は常に0.5000です。私は入力と出力が(-1、-1)、(1、-1)、(-1,1)、(1,1)と出力-1,1,1、 1。今では同じ学習率で訓練を受けた場合、反復回数に関係なくコストは連続的に低下していますが、結果はまだ間違っており、常に0に非常に近い傾向にあります。 [反復:(20kk)、入力:(1、-1)、出力:(1.6667e-08)]および[反復:(200kk)、入力:(1、-1) 、出力(1.6667e-09)]も入力(1,1)などで試してみましたが、出力も0に非常に近いです。出力は常に平均(min(y)、max(y) )、私は入力/出力をどのような形式で提供するかは重要ではありません。私は何が間違っているのか分かりません。助けてもらえますか?ニューラルネットワーク奇妙な予測

+0

エラーがあるので、コードを入力してください。 – lejlot

+0

@lejlotここにコードがあります:https://github.com/cuvidk/yaann-api – cuvidk

答えて

1

あなたは間違っているかもしれないので、多くの場所があります。

  • は数値的に
  • あなたはXORを学ぶために、非線形隠れユニットを使用する必要があなたのグラデーションをチェック - あなたがそこに非線形の活性化を持っているのですか?
  • バイアスニューロンが必要ですか?

ような問題を引き起こしてはならない軽微なものを、しかし価値のいずれかの方法を固定:

  • あなたは(あなたのネットワークが分類器であるとして)、出力ノードにおけるシグモイド活性化を持っていますか?
  • クロスエントロピーコストでトレーニングしますか(これは軽微な問題ですが)。
+0

私のコードをチェックすれば、私はベクトル化された実装を使用していますが、私は常に乗算の前にアクティベーションマトリックスに1の列を追加しますそれは重みマトリックスの転置で、そう私はバイアスニューロンを使用しています。すべてのニューロンはシグモイド活性化を使用します。はい、私はクロスエントロピーコストを使用します。非線形の隠れユニットに関しては、私はあなたがそれによって何を意味するのか理解できないのではないかと思います。 – cuvidk

+0

あなたは数値的にグラデーションをチェックしましたか?より典型的な学習率(1e-3のような)を使ってみましたか?あなたはまた、regularizationFactor = 0(私はあなたが現在使用しているか分からない)を設定する必要があります – lejlot

+0

私はちょうど1e-3を学習率、同じ結果として試しました。私はグラデーションを数値的にチェックしていませんでしたが、私はその方法を今考えています。現在の実装では実行が困難になります。 – cuvidk

関連する問題