20TensorFlowにおけるクリッピングと正規化Python機械学習TensorFlow概要TensorFlowで扱うtensorが保持している各値のクリッピングについての記事です。具体的にはtf.clip_by...系メソッドなどの説明と実装例になります。そもそも何でこんな事するの?用途は色々あるかと思いますが、TensorFlowの主たる使用目的である機械学習関連の計算(特に勾配計算)では、扱う変数のスケール感に違いが出てうまく計算できないということが多々あります。そんな時に用いられるのがクリッピングや正規化になります。TensorFlowの用語TensorFlowでは従来の変数や定数、更に各種演算を表す処理をOpノードと呼んでいます(参考記事)セッション内で実行(run)する事でOpノードは演算結果の値の集合(テンソル)を保持し次のOpノードに伝えていく仕組みになっています。本記事ではこれに合わせて何らかの処理が終わった後の数値集合のことをノードと表記します。name=None)ノードが保持する各値に対して最大値clip_value_maxより大きい値をclip_value_maxに、最小値clip_value_minより小さい値をclip_value_minに直します。2.]ノードとclip_valueの型が一致していないとエラーを吐かれます。name=None)ノードのL2ノルムがclip_normよりも大きい場合このノルムに直すように各値を変更します。clip_normよりも小さい場合は変更されません。3.]]tf.clip_by_normではaxesを指定できます。axesで指定した軸ごとのL2ノルムで値を正規化します。2.4053512]]なお、tf.clip_by_normは噛ませるノードが小数点を扱えないとTypeErrorとなります。float◯◯やcomplex◯◯型を使ってください。name=None)tf.clip_by_normと違ってノードではなくノードのリストを渡します。ノード自体を渡すとTypeErrorになります。リストに格納されているノード全体でのL2ノルムをglobal_normとし、この値がclip_normよりも大きい場合L2ノルムがclip_normになるようにリスト内の全ての値を変更します。clip_normよりも小さい場合は変更されません。返値はクリッピングした後のノードが格納されたリストlist_clippedと計算されたglobal_normの2つです。3.693522]]tf.clip_by_normやtf.clip_by_global_normメソッド自体は単純ではありますが、たとえばRNNにおける勾配爆発の対策「勾配クリッピング」に対応するために用いることができます。以下が参考になります。最近の動向と共に#rnnと勾配のクリッピングgradient-clipingモデルを構築した後、いざ学習させようと思ったら誤差の伝播計算などでinfにぶっ飛ぶ時などはこの方法を取ると解決するかもしれません。おまけクリッピングは実際にノードの保有値を変更していましたが、ノルムの計算のみする事もできます。name=None)パラメタordでLpノルムのpの値を決定します。L∞ノルムの場合はnp.infを指定します。tf.norm明日は、@yoshishinさんによる「Rubyを使って予約システムをハックする」です。requestStockLike7@mSpringFollowGMOアドマーケティング株式会社GMOアドマーケティング株式会社は、アドテクノロジー事業を中心に、メディアと広告主の課題に向き合い、アドテクノロジー事業、メディアセールス事業、メディア事業のノウハウを用いて、求めるべき広告の形を提供します。upLoginユーザーは見つかりませんでした。