はじめに
Deep Learningの基本知識をメモしました。
ニューラルネットワーク
- ニューラルネットワーク(多層パーセプトロン):パーセプトロンを複数組み合わせることで、重み(パラメータ)の数が増えて、分類だけでなく複雑なタスクを扱えるようになる。← 線形代数により計算
Deep Learning
- 深層ニューラルネットワーク(Deep Neural Network):狭義だと、ニューラルネットワークの層が4層以上の場合。← これを用いた機械学習の手法をDeep Learningと呼ぶ。
Deep Learningの利点・欠点
利点
・ 特徴量の自動抽出
欠点
・ 大量の学習データが必要(層の深さ・ノード数が増えるほどパラメータが増加し、パラメータの数∝必要なデータ数)
・ 計算量が膨大(GPUを利用する必要あり)
・ ブラックボックス(結果の解釈ができない)
ネットワークの種類
-
CNN(Convolutional Neural Network):画像認識・物体検出で利用。脳の神経系を模した通常のニューラルネットワーク層(全結合層:層ごとの全てのノードが結合)に、眼の神経系を模した畳み込み層を繋げている。再帰構造。
-
RNN(Recurrent Neural Network):時系列データ(順序関係があるデータ、言語・音声・動画・株価変動など)に対して用い、文章分類・文章生成・機械翻訳・音声認識などに利用。
多層ニューラルネットワークの構造例(Keras)
-
Flattenによる画像のベクトル化
-
活性化関数:ニューロンの電気信号の入力が一定以上で、隣のニューロンに電気信号を流す。計算スピード、学習スピードが左右。決定境界が曲線(非線形)。例として、ReLu, tanh, シグモイド関数等。← 仮に活性化関数が線形だと、分類性能は線形判別機であるパーセプトロンと同じ。
-
Optimizers: 様々な勾配下降法のアルゴリズムがまとまったモジュール(SGD, Rmsprop, Adam, AdaDelta, AdaGradなど)。学習効率・最適解への収束・鞍点(ある方向から見ると極大値、別方向から見ると極小値=最小値でない)の脱出
SGD(確率的勾配下降法)
学習データをサンプリングして行う勾配下降法で、ミニバッチ学習やオンライン学習で利用。サンプリングする学習データによって、誤差関数が変化(サンプリングされる学習データがある意味パラメータ)。
バッチ学習では、毎度同じ誤差関数によって重みを更新する最急降下法を用いる。
-
batchsize:ミニバッチというかたまりに含めるサンプル数。← ミニバッチ学習
-
epoch数:パラメータが多い場合、学習回数を増やす。
-
順伝搬計算:予測を行うための処理で、入力が左から右へ伝播。入力層からの値と重みの積の合計値を算出。出力層のうち、最大値となるのがクラスの予測結果。
-
逆伝播計算:学習を行うための処理で、順伝播とは逆方向。この学習方法は、誤差逆伝播法(Back Propagation)と呼ばれ、右から左へパラメータの修正幅を決定。
-
softmax関数:出力層への入力(実数)を確率(0 ~ 1)に変換する活性化関数。
-
cross_entropy誤差関数:ニューラルネット特有の誤差関数。
$$
C = - \frac{1}{n} \sum (y \log p_i + (1-y) \log (1-p_i))
$$
- 重みの修正幅:連鎖率を利用して、出力層につながるパラメータだけでなく、手前の層のパラメータも調整可能。
$$
\Delta \omega_i = - \eta \frac{\partial J(\omega)}{\partial \omega_i} \
J(\omega) = \frac{1}{2} \sum (y_i - f(x_i))^2
$$
学習結果の確認
- グラフの出力
- 混同行列の出力(どれと間違えたか)
- 正答率
モデルの重みの保存・復元
学習させたモデルのパラメータ(重み)を保存することで、再利用できる。
補足
- テンソル:RGB画像などの、3次元以上の行列。
学習方法の種類
バッチ学習 | オンライン学習 | ミニバッチ学習 | |
---|---|---|---|
メモリ効率・計算効率 | ✕ | ◎ | 〇 |
収束の正確性 | ◎ | ✕ | 〇 |
- バッチ学習(一括学習):全サンプルを一気に用いて誤差関数の勾配を算出。機械学習アルゴリズムで利用。DeepLearningで扱うデータは大規模なので、計算時間・メモリの観点から向かない。新しいデータを取得した時、ゼロから学習を再開しないとだめ。
- オンライン学習(逐次学習):一つのサンプルから誤差関数の勾配を算出。学習終了後、新しいサンプルを得た時に、学習済みモデルに追加で学習可能。大規模データには適しているが、解が最適化に収束しづらいという欠点あり。(← ノイズ・外れ値の影響を受けやすいため)
- ミニバッチ学習:小分けしたデータの塊ごとに、誤差関数の勾配を算出。多くの場合で用いられる。