最近ディープラーニングの勉強を開始したが、Aidemyで提供している、ディープラーニング基礎 のコースや、キカガクのディープラーニングの基礎が、無料で理解しやすいように思えた。
コースの中で触れられる専門用語で慣れない部分が多々あるので、まとめておきたい。

- 汎化精度(新規データに対する精度)
- 学習に使用していないテストデータを使用してモデルの評価 を行います。このときの精度のこと。
- 汎化精度の計算には evaluateメソッド を使用
python score = model.evaluate(X_test, y_test, verbose=1)
- X_test は評価用 (テスト) の入力データ、 y_test は教師データです。evaluateメソッドで取得し た損失関数の値と正解率は、 score に格納されます。
- なお、テストデータは汎化精度の計算のためのもので、学習には使用しません。
エポック
– 学習の回数を エポック数という。
– エポック数は多く設定すれば、モデルの精度が上がり続けるというものではない
– 適切なエポック数を設定しなかった場合、途中から精度が伸びなくなり、それだけでなく学習を繰り返すことで損失関数を最小化させようとして過学習を引き起こしてしまう可能性があります。
そのため、適切なエポック数を設定し、タイミング良く 学習を打ち切る ことも重要なのです。
- ディープラーニングは、ニューラルネットワークと同義。
層: 合計4層以上のものをディープラーニング(深層ニューラルネット/多層パーセプトロン)
– 畳み込みニューラルネット
– 回帰結合ニューラルネット
ニューラルネットワークでは各層において、線形変換に続いて非線形変換を施し、層を積み重ねて作られるニューラルネットワーク全体としても非線形性を持つことができるようにしている。この非線形変換を行う関数のこと。
- シグモイド関数
- 勾配消失減少により、学習が進行しなくなる問題が発生しやすくなる
- ReLU (Rectified Linear Unit)関数
- シグモイド関数の勾配消失を回避するためによく使われる。
- ソフトマックス関数
- 主に分類で使用される活性化関数
- すべてのニューロンの出力の合計を1に変換する関数
- 訓練では、重みが自動で計算される
- 重みw はランダムに設定されるが、学習をして出された推論結果と
正解ラベルを比較し、その誤差を小さくすることが機械学習の技術
- 重みw はランダムに設定されるが、学習をして出された推論結果と
損失関数
学習時に出力データと教師データとの差を評価する関数を 損失関数(誤差関数)という。
例:二乗誤差、クロスエントロピー誤差
また、損失関数の微分の計算を効率的にするために誤差逆伝播法という手法が使われます。この手法では、出力データと教師データの差を 最小化 するように各層の 重みを更新 します。
平均二乗誤差
平均二乗誤差は連続値の評価を得意とするため、 主に回帰モデルの誤差関数 として使われます。
クロスエントロピー誤差
クロスエントロピー誤差は、 分類の評価に特化 しているため、主に 分類モデルの誤差関数 として使われます。
一般的には以下の式が使用されることが多い
そうすることによって、ラベルが1
以外の項はすべて0になるため、実質的に正解ラベルの誤差のみを計算していることになります。
学習率
学習率とは、 各層の重みを一度にどの程度変更するかを決めるハイパーパラメータ 。
(https://aidemy.net/courses/5090/exercises/HkMP93IoLlM)
最適化関数
- 学習率、エポック数、過去の重みの更新量など をどのように重みの更新に反映するかを定めるために使用する
ミニバッチ学習 (https://aidemy.net/courses/5090/exercises/BkXPcnIoLxz)
- バッチサイズ : モデルに一度に入力するデータの数
ハイパーパラメータ のひとつです。
一度に複数のデータを渡した場合、モデルはデータごとに損失と損失関数の 勾配 を計算し、それぞれのデータの勾配の平均値をもとに1度だけ重みの更新をします。
このように、 複数のデータ で 重みの更新を行うことで 偏ったデータの影響を減らし 、並列計算を行うことで 計算時間を短縮 することもできます。
しかし一方で、大きな重みの更新が発生しにくくなり、 一部のデータに最適化されてしまい、全体のデータへの最適化が行われなくなる状態(局所解)から抜け出せなくなる可能性 もあります。
それを回避するためには、イレギュラーなデータが多い時には バッチサイズを大きくする、少ないときには バッチサイズを小さくする といったようそれを回避するためには、イレギュラーなデータが多い時には バッチサイズを大きくする、少ないときには バッチサイズを小さくする といったように、バッチサイズを調整します。に、バッチサイズを調整します。
- バッチサイズ:
- 1 に設定する学習法: オンライン学習(確率的勾配降下法)
- 全データ数設定する学習法: バッチ学習(最急降下法)
- オンラインとバッチ学習の中間: ミニバッチ学習法
反復学習
一般的にディープランニングでは反復学習を行い、同じ訓練データで学習を繰り返します
エポック数は多く設定すれば、モデルの精度が上がり続けるというものではありません。適切なエポック数を設定しなかった場合、途中から精度が伸びなくなり、それだけでなく学習を繰り返すことで損失関数を最小化させようとして過学習を引き起こしてしまう可能性があります。
そのため、適切なエポック数を設定し、タイミング良く 学習を打ち切る ことも重要なのです。
- ハイパーパラメータ
- ニューラルネットワークモデルには、ネットワークを構成する際に調整が必要となるハイパーパラメータと呼ばれるものがいくつか存在します。
- ハイパーパラメータは数多く存在し、適切に設定しないと正しく学習が行われません。そこで、新規モデル作成時には最適なハイパーパラメータを設計する必要があります。
- 隠れ層の多さ
- 隠れ層の数が多い場合は、重みの調整の難易度が上がって 学習の進行が遅く なったり、ユニット数が多い場合は、重要度の低い特徴量を抽出して 過学習 (汎化性能が低い状態)を起こしやすくなる。 したがって、ただやみくもに数を増やすのではなく、学習に適切な数を設定することが必要。
- ドロップアウト
- ドロップアウトは、 学習データに対する過学習を防ぎ、モデルの精度をあげるための手法の一つ 。
- ドロップアウトではランダムにニューロンを削除(0で上書き)しながら、学習を繰り返します。それによって、ニューラルネットワークは特定のニューロンに依存することなく、より 汎用的な特徴を学習するようになる。
- 活性化関数
- 活性化関数とは、全結合層などの後に適用する関数で、ニューロンの発火に相当するもの。
- 全結合層では、入力を線形変換して出力するが、 活性化関数を用いることで非線形性をもたせることができる。
- 活性化関数を使用しないと、下図のように一本の直線で分離できず(線形分離不可能)、データが分類できなくなる。
- 活性化関数によって非線形性をもたせることで、 線形分離不可能なモデルでも、適切に学習が進めば必ず分類できるようになる 。
- なお、活性化関数にもいくつかの種類があるので、適切なものを選ぶことが大切。