E資格向けの自習アウトプット
自分用メモ
学習の工夫して、汎化性能をあげつつ学習速度の向上、計算リソースの削減をしたり対策していく
取り組む問題によって、組み合わせてみたり
パラメータ拘束とパラメータ共有
パラメータ拘束
パラメータの適切な値がわからない場合は、近いモデルを参考にすると良いのでは、という考え方
互いのパラメータの近さを表現する手法
L2正則化(重み減衰)で、0から遠ざかることに対してペナルティをかける
例として、タスクが似ている2つのモデルA, Bは、パラメータも近いと想定できる
下記をノルムペナルティとする
(L2ノルム以外でも可能)
この値に上限を設けて、互いにパラメータ拘束する
パラメータ共有
複数のモデルである部分のパラメータを同じにする
メモリの節約にもなる
CNNのフィルタが典型的な例
アンサンブル学習
複数のモデル(弱学習器)で個々に学習させる
バギング(bootstrap aggregation)
複数モデルを組み合わせ汎化誤差を減少させる
有名どころ:ランダムフォレスト
ブースティング
確率分布に基づいて分割、逐次計算していく
ドロップアウトとドロップコネクト
ドロップアウト
中間層での出力をランダムで削除(0にする)する。削除する割合はハイパーパラメータとして設定
計算量が少なく、非常に実用性が高い
訓練データが少なすぎるとダメ
# ドロップアウト # まずはマスクを作る ratio = 0.2 # 20% 削除 x = np.random.randn(3,10) randammatrix = np.random.rand(*x.shape) mask = randammatrix > ratio # 出力を0にする x = x * mask # 勾配は同じマスクする dout = dout * mask
ドロップコネクト
中間層の重みをランダムに0、性能面ではドロップアウトより優れているが、乱数の値で同じ性能を出す難しいので、実用的でない