めるぱんブログ

とある医大生の勉強の記録です

PythonとKerasによるディープラーニング 第4章

第4章では機械学習についての基礎的な内容が主に書かれていました。

 

機械学習モデルの評価

まずモデルを訓練データで訓練し、検証データでモデルの評価、テストデータで実際にテストするという流れが基本です。

検証データというのはモデルの層などのハイパーパラメータを調整するために必要です。しかし、この調整を繰り返すことは検証データに合わせて調整をするということで過学習に陥ることがあり、これを情報のもれといいます。

また、テストデータは訓練データとは互いに素である必要があります。

 

もとのデータを訓練データと検証データに分ける方法でいくつかあります。

まず一つ目はホールドアウト法です、これはデータの一部を検証データとする方法です。これは二値分類の問題をやるときに使いました。

二つ目はk分割交差検証です。これも回帰の問題を解くときに使いました。サンプルの数が少なく、データを分割する前にランダムなシャッフルを行い、モデルごとに大きな差があるような場合に使います。

まあた、シャッフルに基づく反復的なk分割交差検証というのもあります。

 

データを分ける際にはまず最初にランダムにシャッフルすることが大事です。というのも数字が昇順にきれいに並んでいる場合などがあるからです。

 

データの前処理

まずデータのベクトル化です。多ラベル分類を行うときなどで使ったものです。

 

続いて値の正規化です。これも回帰の問題で使ったものですが、平均値を引いて標準偏差で割るやつです。

 

欠損値の処理というのもありますが、これは0を代わりに入れることでニューラルネットワークが底を欠損値として学習してくれます。

 

特徴的エンジニアリング

これは入力のデータをさらに簡単な特徴量に変換するという工程です。これを行うことで処理が楽になるものなのですが、ニューラルネットワークでは勝手に特徴量を見つけ出してくれます。

 

過学習

過学習を抑制することを正則化といい、その方法にはいくつかあります。

最もいい方法は訓練データを増やすことです。

それ以外の方法では以下の方法があります。

 

・ネットワークのサイズを小さくする

 層の数やユニットの数を減らすことで過学習に陥りにくくなります。しかし、最も適したサイズをいきなり出すことはできないので、増やしたり減らしたりの試行錯誤を繰り返す必要があります。

そういえば前に一度2層のモデルを3層に変えたときに微妙な結果になったのはこういうことだったんですね。

 

・重みを正則化する

 大きな重みにコストを追加することで小さい重みのみ設定されるようになります。

L1正則化とL2正則化の2種類があります。regularizerをimportし、kernel_regularizer=regularizers.l2(0.001) のように追加することができます。

 

ドロップアウトの追加

 これは訓練する際に一定の割合で出力されるベクトルを減らすというものです。

実際にテストする際はドロップアウト率に基づき出力をスケールダウンします。

 

これらに基づいて機械学習を行っていきます。

 

今回は本当に全体の流れやイメージをつかむ用の章でしたね。

多くは今までやったことの復習だったので理解しやすかったです。特に過学習の抑制をするための部分は重要なのでしっかり押さえておきたいです。

 

次からパート2でディープラーニングの実践が始まります。いよいよですね。