ドロップアウト(2/4)実施例の検討
はぐれ弁理士 PA Tora-O です。前回(第1回)は、ドロップアウトの概要について説明しました。改めて復習されたい方は、こちらのリンクから確認をお願いします。
今回(第2回)は、ドロップアウトの実施例を具体的に検討したいと思います。とりあえず、この技術が実現すべき事項は、中間層のうち一部の演算ユニットを学習に用いないこと、つまり、学習に使用しない演算ユニットの出力結果が、次の演算ユニットにおける演算に何ら影響を与えないことです。以下、3つの実施例を挙げてみます。
第1実施例 演算ユニットの除外
第1に、ドロップアウトの対象となる演算ユニット(以下、DO対象ユニット)とその結合線を元のネットワークから除外し、新たに構築されたサブネットワーク(図1)に対して学習を行う実施例が考えられます。しかし、DO対象ユニットを選択する度に添字の再付与(リナンバリング)などの前処理が必要となり、その分、メモリアドレス管理を含む演算量が増えてしまう問題がありそうです。
【図1】演算ユニットの除外
第2実施例 出力値の置換
第2に、DO対象ユニットと結合線をそのまま残したまま入力を行うが、入力値にかかわらず、DO対象ユニットの出力値を強制的に「0」にする実施例が考えられます。図2では、求めた値を無効値(0)に置換する操作を行っていますが、DO対象ユニットにおける活性化関数の方を、F(x)=0に置換しても構いません。
【図2】出力値の置換
第3実施例 結合重みの細工
第3に、DO対象ユニットとその結合線をそのまま残したまま入力&演算を行うが、DO対象ユニットの出力側に接続された結合重みを細工して強制的に「0」にする実施例が考えられます。これは、結合重みに対して0(無効値)を乗算する乗算器を咬ませるイメージです。
【図3】結合重みの細工
実装例
ところで、このドロップアウトの実装方法ですが、例えば、Google社が提供するAI向けソフトウェアライブラリTensorflowの高レベルAPI(Keras)を用いれば、Pythonにより僅か1行で記述することができます!
import tensorflow
from tensorflow import keras
・・・
model = keras.models.Sequential([
keras.layers.Flatten(),
keras.layers.Dense(512,activation="relu"),
keras.layers.Dropout(0.2),
keras.layers.Dense(10,activation="softmax")
])
ここで、Dropoutメソッドの引数(=0.2)は、ドロップアウト率、つまり「不」活性化率を示しています。このように、引数の定義が活性化率p(0.8=1-0.2)とは逆になっているため、実装上の注意が必要です。
以上、今回(第2回)は、ドロップアウトの実施例について主に3つの類型を挙げて説明しました。次回(第3回)は、過去2回分の検討結果を踏まえ、クレーム骨子を作成してみます。
↓ブログランキングに参加しています。よろしければ1クリックお願いします。
ディスカッション
コメント一覧
まだ、コメントがありません