2017-06-22 13 views
0

私はある時点で2つのサブネットワークに分岐するニューラルネットワークを持っています。ニューラルネットワークの一部で、繰り返しごとにバックプロパゲーションを行うことは意味がありますか?

サブネットワークを別々にトレーニングすると、かなり良い精度が得られます。しかし、私は両方を訓練するとき、タスクの1つが共通レイヤーの重みをハイジャックして、本当に良い精度と低い精度で1つのタスクを作成するように見えるようです。

より強力なタスクの影響を減らすため、n回の反復で重み更新を定義することを考えました。

あなたはそれが理にかなっていると思いますか?

+0

2つの異なるタスクがある場合、 – Dzjkb

+0

@Dzjkb 2つのタスクは強く関連しています。当初、私は2つの別々のネットワークを持っていました。私は共同建築を実験したい。 – ryuzakinho

+0

この方法を試してみると、https://deepmind.com/blog/enabling-continual-learning-in-neural-networks/ – Dzjkb

答えて

1

1つのタスクに対して他のデータより多くのデータがありますか?これは、なぜより多くのデータを伴うタスクがより重要なものとして加重されるのかを説明することができます。

この場合、データのバランスをとるようにしてください。 どちらの方法でも、私は更新回数ではなく、損失関数を試してみようと思います。あなたが損失関数を定義するときだけ..

としてよくやっていないタスクからのデータをサンプル上になることを行うためのハック方法をより価値が2番目のタスクを作ります。他のタスクに移行する前に同じデータを数回読み取るようにしてください。これにより、ネットワークがフィットすることが重要になります。

また、私はタスク間の切り替えのタイミングで遊ぶだろう。両方のタスクに関する多くのデータがある場合、タスクAを訓練するとき、ネットワークはそれをうまくやる方法を学習します。その後、タスクBを長時間訓練すると、ネットワークは重みを変え、学習したときに「忘れました」タスクAには、それらの重みがタスクBの解決に役立たないので、両方のタスクを数回繰り返しても、ネットワークのトレーニングが終了するタスクは「もっと価値がある」ことになります。すべてのエポックのタスクを混在させるようにしてください(どちらのタスクからもランダムにすべてのバッチをランダムにサンプリングしてください)。

+0

ありがとうございます。私が扱っている仕事の損失の大きさの順番は異なります。たとえば、最もパワフルでないタスクでは2.1の値を、最も強力なタスクでは0.1付近の値を持っています。より大きな損失を伴うより小さな損失値またはより小さな重みを伴うタスクに、より多くの重みを与えることは、より理にかなっているか? – ryuzakinho

+1

それはあなたが達成したいことに依存します。両方のタスクでネットワークを同じようにしたい場合は、大きな損失を伴うものに重点を置いてください。これにより、ネットワークはそれをより良く解決したいと望み、損失を減らすことになります。しかし明らかに、これはネットワークが解決している他の問題の損失の増加を引き起こすかもしれません... –

関連する問題