汎化性能とは
汎化性能とは未知のデータに対する予測性能のこと。
モデル構築では訓練データだけでなく、未知のデータに対する予測精度が重要だ。
モデルが訓練データに過剰に適合してしまうと、かえって未知のデータに対する予測精度が落ちてしまうことがある。いわゆる過学習だ。
本記事では、画像解析において
予測精度および汎化性能を上げる一般的な方法を以下にまとめる。
①データ分割
最もスタンダードな方法がまず「データの分割」することだ。
元データを学習用と評価用を2つのデータセットに分けて、評価用データを擬似的に未知のデータとする手法だ。
モデル作成用にはこの学習データだけ用いて、評価用データは精度を評価するためだけに利用する。
一般的には学習用データが7〜8割で、評価用データが2〜3割程度。
②データ拡張
そもそも元データのバリエーションが少ない場合は、データ拡張(Data Augmentation)が有効的だ。
データ拡張とは例えば、元の画像を回転、反転、リサイズ、変形、切り取りすることでデータのパターンを増やすといった手法だ。
様々なパターンの画像を利用して学習することで、モデルの精度向上が見込める。
③誤差と評価指標の算出
精度を示す指標として損失関数(誤差関数)を用いて、モデルが出力した結果と実際の答えの誤差を測る。
未知のデータに対するモデルの誤差(損失関数を利用して算出される値)を小さくしていくことが、今回のメイントピックと言える。
また誤差が小さくても、正解率が悪ければ精度の高いモデルとは言えない。
モデルの予測精度を確認するときは、誤差の大きさと、評価関数を用いて正解率なども一緒に確認することが重要である。
なおそれぞれ算出した誤差の大きや評価の値を縦軸に、繰り返した回数を横軸とった曲線を学習曲線と言い、精度の可視化において最も一般的な方法だ。
【代表的な損失関数】
- 回帰 :MSE(二乗誤差)
- 2値分類:Binary Cross Entropy
- 3値以上の分類:Categorical Cross Entropy
【代表的な評価関数】
- 正解率:Accuracy
- 適合率:Precision
- 再現率:Recall
- F値
④活性化関数の選択
ニューラルネットワークでは複数のニューロンから、あるニューロンへの入力は全結合などの線形変換処理によって1つの数値にまとめられる。
活性化関数(Activation function)は、その値(あるニューロンにおける入力の合計)から次のニューロンへ値を出力する時に「どのような値にするか」を決定する関数で、非線形な関数とすることが多い。
作成するモデルにおいて、どの活性化関数を選ぶかは、学習の効率化やタスクに適した出力を得るために非常に重要である。
【代表的な活性化間数】
- ステップ関数
- シグモイド関数
- ReLU関数
- ソフトマックス関数
⑤層の追加
ニューラルネットワークのうち、中間層が2つ以上のものをディープラーニング(深層学習)と呼ぶ。
そして一般的に層を深くすることでより表現力の高いモデルが作れると言われてる。
CNNの層を追加する時は、畳み込み層とプーリング層を順に追加する。
⑥オプティマイザーの選択
オプティマイザー(最適化アルゴリズム)は、モデルの収束具合を最適化させるための関数で、様々な種類がある。
代表的な勾配降下法というオプティマイザーは、目的となる関数を最小化(最大化)するパラメータを探索する手法である。しかし欠点として、試行を繰り返して最適値を探索するため、パラメータが多いと計算に時間がかかってしまう。
【勾配降下法の式】
更新後の値 = 更新前の値 - 学習率(0~1の値) × 勾配の値
【代表的なオプティマイザー】
- 最急降下法(GD):全ての学習データを取り出す
- 確率的勾配降下法(SGD):無作為に1つの学習データを取り出す
- ミニバッチ確率的勾配降下法:無作為に複数の学習データの束毎に取り出す
- Momentum
- AdaGrab
- Adam
⑦学習率の調整
モデルにおいて、学習率はモデルの収束に大きく関係する。
学習率とは各パラメータを変更させる幅のことで、ハイパーパラメータとも呼ばれる。
学習率は手動で設定する必要があり、この学習率を調整することがモデルチューニングでは重要となる。
学習率を高くしすぎると収束しなくなり、学習率を低くしすぎると収束までに膨大な時間がかかってしまうため、適切な値を探す必要がある。