「.NET 開発基盤部会 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
目次 †
概要 †
色々なオプションがある。
XXに関するテクニック †
学習に関するテクニック †
学習に関する問題点 †
ニューラルネットワークの問題点には学習に関する問題点が多い
SGD †
- 呼称
- SGD:Stochastic Gradient Descent
- 確率的勾配降下法
- 概要
- 勾配が最も急な向きに勾配を下る手法
- 勾配が急であればあるほど大きくパラメタを変化させる。
- 変化を学習率というハイパーパラメタによって調整する。
- 最短距離でない、無駄に谷間を往復する。
学習率が大きい場合は無駄な往復が目立つ。
MomentumSGD †
- 概要
- SGDに慣性(加速・減速)の概念を加えた最適化手法。
- 加速で、谷間での無駄な往復を減らし、早く収束する。
NesterovAG †
(Nesterov Accelerated Gradient)
極小値付近でブレーキをかける機能を加えたアルゴリズム
AdaGrad? †
- 動いた量が増えたら更新が緩やかにする。
- NesterovAGのブレーキ機能を学習率の減衰によって実現
RMSprop †
(Root Mean Square Propagation)
- Adagradの改良版
- 学習率の減衰が穏やかになる機能を指数移動平均の導入によって追加
AdaDelta? †
Adam †
(ADAptive Moment estimation)
両方の自動調整の機能を持ち合わせたアルゴリズム
実装例 †
過学習を抑止する方法 †
データ正規化・重みの初期化 †
- 重みの初期値
- 重みにバラつきが無い:表現力が低下する。
- 重みが大き過ぎる:収束しづらい。
- 活性化関数
- tanh関数などのS字の活性化関数の場合、Xavierの初期値
- ReLU関数の場合、Heの初期値
バッチ正規化(Batch Normalization) †
ミニバッチを平均0、標準偏差が1となるように正規化を行うことで、
学習の効果を重要な部分だけに集中させる事ができ性能が向上する。
- 特定の中間層の出力に正規化の処理を施し各層の出力の分布を統一する手法。
- 内部共変量シフト(学習でパラメタの調整が分布の違いに対応する)を防ぐ。
- 学習時間を短縮できる
- 過学習が抑制される
- 初期値の影響が小さくなる
ドロップアウト(Dropout) †
早期終了(early stopping) †
- 訓練誤差が頭打ちになった段階で学習を打ち切る。
- 汎化誤差が上昇に転じた段階で学習を打ち切る。
CNNの場合は... †
- データ拡張(data augmentation)
CNNの画像データにノイズ(拡大・縮小、反転、回転、並進)を加えて拡張する。
- 処理と効果
- 実際に得られそうな拡張のみ行う(例えば上下固定なら回転はしない等)。
- これによりノイズに「頑健」(=統計用語で「決定的でない要因に鈍感」)になる。
- ロバスト性を高める。と言う(外乱の影響に頑健と言うような意味)。
- 画像のサイズや形は変更しない(と言うか、深層学習の入力ベクトルのサイズは固定なので)。
- 確率的な適用
処理量を抑えるためミニバッチ毎に確率的にかける。
- leakageの防止
・拡張元画像が同じ拡張画像をtrainデータとtestデータに混ぜないようにする。
・データ分割後にデータ拡張を行う順番で処理を行えばleakageしない。
- バッチ正規化(Batch Normalization)
特に、CNNに於いては、
- channelごとに各サンプルのピクセル値を正規化する。
- 畳み込み層とプーリング層の間にバッチ正規化の層を追加。
転移学習 †
- 学習済みモデルには手を加えず(、重みを固定し)、
追加の出力層だけを新たに学習させモデルを作成する。
概要 †
- 人が過去の経験を活かして新しい物事を習得する流れと似ている。
- 大量の犬の画像データと少量の猫の画像データがあり、
犬の種類判別モデルと猫の種類判別モデルを作成する場合、
犬の種類判別の課題から得られた知識を猫の種類判別モデルに適応させ判別精度の向上を図る。
詳細 †
- メリット・デメリット
- メリット
- 限られたデータから高精度なモデルを作成できる
- 少ないデータでの学習のため学習時間を短縮できる
- デメリット
- 精度の改善ではなく悪化をもたらす場合がある(負の転移(negative transfer))
- 負の転移は、転移元と転移先の関連性が低い、転移の方法が適切でないなどが考えられる。
- 学習済みモデルの最終出力層(全結合)だけを付け替えてデータを学習させ
最終出力層(全結合)のパラメタだけ変更して新しいモデルを作成する。
- 入力層に近い部分は、タスクに固有の特徴ではなく汎用的な特徴を抽出する。
- 奥の層に行くに連れて特徴が複雑になると、拾う特徴は段々とタスクに固有になっていく。
- 少ないデータで、最終出力層(全結合)のパラメタだけ変更することで学習が速く進むようになる。
ファイン・チューニング †
学習済みモデルに手を加えて(、重みを初期値し、)、
追加の出力層以外も新たに再度学習させモデルを作成する。
概要 †
転移学習との違いは、既存部分を再学習するかどうか。
詳細 †
転移学習との違いに関してのみ言及。
構築方法 †
- 学習済みモデルの最終出力層(全結合)を付け替え、
出力層(全結合)だけでなく入力層に近い部分のパラメタも変更して新しいモデルを作成する。
- 出力層(全結合)の何層かのみ初期値を乱数にして学習させる。
奥にある層は複雑で固有な特徴を学習しているので学習済みのパラメタを利用する効果が薄い。
- 一部の層のパラメタを全く学習させないという工夫もある。
手持ちのデータが少ないときほど学習させるパラメタを絞る。
転移学習とファイン・チューニングの違い †
出力層の再学習は共通しているが、
転移学習 †
学習済みモデルには手を加えず、学習を行い新たにモデルを作成
ファイン・チューニング †
学習済みモデルにも手を加えて、学習を行い新たにモデルを作成
- 出力層以外も学習させる。
- 出力層以外の学習率を低く設定する。
参考 †