1

私は UFLDL チュートリアル (matlab/octave 内) に取り組んできました:

http://deeplearning.stanford.edu/wiki/index.php/UFLDL_Tutorial

さまざまなデータセットでスパースオートエンコーダーを試しています。時系列データで実行してみましたが、問題が発生しました。入力データが負の値であるため、シグモイド活性化関数 (1/1 + exp(-x)) は不適切です。tanh に代入すると、最適化プログラム minfunc (L-BFGS) が失敗します (ステップ サイズが TolX 未満)。TolX 定数を変更せずに劇的に減らしました。出力層を線形に変更し、入力層をシグモイドのままにしましたが、これは望ましい解決策ではありません。オートエンコーダーの出力は定数 (0.5) で拡大され、コスト関数が大きくなります。つまり....要するに:

Tanh活性化関数がL-BFGSで機能しないのはなぜですか? (または何か他の問題がありますか)?

..何が欠けていますか? どこを読んでも、アクティベーション関数はかなり交換可能であると書かれています。回避策 (データの再スケーリング、FFT 係数の使用など) があることは知っていますが、なぜこれが機能しないのかわかりません。

とにかく、答えてくれた人に前もって感謝します!ここへの最初の投稿、私はこれらのタイプのフォーラムをますます読んでおり、ますます役立つと感じています..

4

3 に答える 3

2

私はそれを理解したかもしれないと思います。お二方ともご回答ありがとうございます!スパース性ペナルティは、Kullback Leibler Divergence を使用します。ページの半分以上下にあるこのリンクを参照してください。(ここにLatexを入力してもらえますか?) とにかくちょっと長いかもしれません..

http://deeplearning.stanford.edu/wiki/index.php/Autoencoders_and_Sparsity

英語で: スパース性ペナルティは隠れユニットの活性化を最小化しようとしますが、KL div は 0 と 1 の間でのみ実数であるため、0 と 1 の間の出力範囲を持つシグモイドを想定します。 tanh の平均活性化が 0 の場合 (これはスパースオートエンコーダーに必要なものです) その場合、そのページで指定された KL div は不適切です。私は運が悪かったので周りを見回しました。

tanh の活性化に適切な範囲を持つ KL div の形式はありますか? 誰かが私に指摘できる参考文献はありますか? 上記のリンク先のサイトで、著者は、スパース性ペナルティの多くの選択肢は問題ないと述べていますが、他の選択肢が何であるかについては詳しく説明していません。何かを作るのは賢明ですか..?または、受け入れられるものを探します。再度、感謝します!

于 2012-07-12T04:36:22.403 に答える
0

私は大まかにUFLDLに従っていますが、同じ問題に遭遇しました。

(beta/2*m)*mean(mean(abs(a2))) スパース性のコストを正則化しようとしています。他のニューロンの活性化。これにより、KL よりもスパース性が向上することを願っています。p に近い KL の導関数が小さいことは、a2_j が p に近づくにつれて、a2_j がさらに減少するとコストの減少が小さくなり、a2_j が p に到達する可能性がますます低くなることを意味します。線形コストにはその問題はありません。

ただし、バックプロパゲーション中に正しい勾配を取得するために d2 を変更する方法を理解するのに苦労しています。おそらく他の解決策を見つけているでしょうが、そうでない場合は、これを考え出す価値があるかもしれません. あなた(または他の誰か!)がそれを理解したら、私は答えを得たいです=)

編集: d2 = d2 + ( (network.beta / (2 * network.examples)) * exp(-a2); ) .* z2_grad; OKっぽい結果が得られるようです。

edit2: いいえ、そうではありません。ごめんね

于 2012-08-10T02:30:05.443 に答える
0

UFLDL に従ってスパース オートエンコーダ アルゴリズムを試しました。fortran90を使用しています。

私のコードでは、tanh アクティベーション関数を使用しました。項は、以下p_hatを使用して範囲 [0,1] に変更されました。

p_hat = (p_hat+1.0)/2.0

結果として、まばらなペナルティが実行不可能になることはありません。コスト関数はスムーズに収束しますが、隠れ層のアクティベーション ノードが非アクティブ (-1) になりません。現象が理解できません。これは、入力ベクトルの次元を減らすという私の目的には役立ちません。

于 2012-08-24T17:34:52.390 に答える