RNNで合成グラデーションを使用する2つの動機を見ることができます。
- 予測された勾配で各レイヤーを即座に修正することにより、トレーニングをスピードアップします
- より長いシーケンスを学習できるようにするため
どちらにも問題があります。注意してください、私は合成グラデーションが本当に好きで、それらを実装したいと思います。しかし、私の考えの軌跡がどこで間違っているかを理解する必要があります。
ここで、ポイント1とポイント2が効果がないように見える理由を示します。実際に効果がある場合は、修正する必要があります。
ポイント1:
Synthetic Gradientsは、fwdプロップの間でも、別の「ミニヘルパーネットワーク」(DNIと呼ばれる)を使用して、現在のレイヤーに上からどの勾配が到達するかを通知できることを示しています。
ただし、このような勾配は、後でいくつかの操作を実行するだけです。DNIをトレーニングする必要があることを除いて、DNIを使用しない場合と同じ量のBackpropを実行する必要があります。
この非同期性を追加しても、デバイスで同じ数の計算を実行する必要があるため、従来の「ロックされた」フルfwdprop->フルバックプロップシーケンスよりもレイヤーのトレーニングが速くならないはずです。計算が時間内にスライドするだけです
これにより、1)は機能しないと思います。各レイヤーの間にSGを追加するだけでは、トレーニング速度は向上しません。
ポイント2:
では、最後のレイヤーにのみSGを追加して、「将来からの勾配」を予測し、それがforward propの最後のタイムステップである場合に限ってみましょう。
このようにして、LSTMは予測を停止し、バックプロパゲートする必要がありますが、受信した将来の勾配を予測できます(最後のタイムステップにあるDNIの助けを借りて)。
いくつかのトレーニングセッション(セッションA、セッションB)を検討してください。
fwdprop timestep_1A ---> fwdprop timestep_2A ---> fwdprop timestep_3A ---->停止してbkprop!
fwdprop timestep_1B ---> fwdprop timestep_2B ---> fwdprop timestep_3B ---->停止してbkprop!
ネットワークに2つの半分の6つのタイムステップを「解析」するように強制しました。3つのタイムステップ、残りの3つのタイムステップです。
「セッションA」の最後にDNIがあり、「セッションBの最初から(将来から)どのような勾配になるか」を予測していることに注意してください。そのため、timestep_3Aには「timestep_1Bから得られたであろう」勾配が備わっているため、A中に行われた修正の信頼性が高くなります。
しかし、ちょっと!これらの予測された「合成勾配」はとにかく非常に小さい(無視できる)-結局、それが新しいbackprop セッションBを開始する理由です。それらが小さすぎないのではなく、6つのタイムステップすべてを単一の長いbkprop "セッションA"で解析するだけです。
したがって、ポイント2)もメリットをもたらすべきではないと思います。fwdpropの最後のタイムステップにSGを追加すると、長いシーケンスを効果的にトレーニングできますが、勾配の消失はどこにも行きませんでした。
OK。たぶん、別々のマシンで"セッションA"、"セッションB" などをトレーニングすることの利点を得ることができますか?しかし、これは通常のミニバッチを並行して単にトレーニングすることとどのように異なるのでしょうか?覚えておいてください、ポイント2で言及されました:物事はとにかく消えているsessionA予測勾配によって悪化します
質問:上記の2つの点は有益ではないようですので、合成グラデーションの利点を理解してください。