機械学習とは
機械学習にはさまざまなモデルを使用します。
そのモデルの中の一つがニューラルネットワークです。
ニューラルネットワークとは
そもそも、機械学習の目的の一つとして、明示的にプログラムをせずともデータを解析することによって予測を行うことができるというものがあります。つまり、機械にも人間のように自分自身で学習して欲しいというわけです。
というわけで、人間の脳の構造を参考に作られたモデルがニューラルネットワークです。
人間の脳は、ニューロン(ノード)とシナプス(エッジ)が、外部刺激(入力)を電気信号として伝達していきます。
この構造をモデル化したものがニューラルネットワークです。
具体的な仕組み
Step1
入力層にデータを入力する
Step2
各入力に対して重みwを掛け合わせたものを中間層へ送る。
重みとは、各入力が最終の出力に対してどの程度の関連を持っているのかを表す指標です。
重みwが大きいほど、その入力は出力との関連が強くなります。
Step3
各中間層をさらに重み付けして出力層へと送り出す。
Step4
出力層の要素を足し合わせたものを活性化関数に通し、最終的な結果を出力.
活性化関数とは
闘値を境に出力が変わる関数。中間層や出力層の値を変換する際に用いる。
活性化関数を用いて変換を行うと様々な値の出力が行えるため、モデルの表現力を増すために用いられる。
層を追加する際に、出力層の活性化関数が線形関数 (1本の直線) の場合は、意味がない。
パーセプトロン
活性化関数としてステップ関数を用いたアルゴリズムをパーセプトロンという。
ステップ関数とは、出力層の値が0より大きいときは1を出力し、0以下のときは0を出力する関数のこと。
現在は使用されていない?❓
扱うデータの正規化
ニューラルネットワークのモデルを使用する際は、データを正規化 (0−1の間の値にする)をしておいた方が良い。
モデルの構造
入力層の生成
x = layers.Dense(64, activation='relu')(inputs)
inputを入力とする入力層
中間層の生成
y = layers.Dense(256, activation='sigmoid')(x)
ノード数 : 256
活性化関数 : シグモイド関数
ドロップアウト
一定割合のノードを不活性化させながら学習を行うことで過学習を防いで精度を上げるためにドロップアウトを行う。
y = layers.Dropout(0.2)(y)
生成した中間層のうち、0.2(20%)を不活性化
出力層の生成
bmi = layers.Dense(1, name='bmi')(z)
モデル化
model = keras.Model(inputs=inputs, outputs=[bmi, life_expectancy], name='Health')
inputを入力すると、outputs(bmi と life_expectancy)を出力するモデル「Health」を作成
####損失関数?
model.compile(
optimizer=tf.keras.optimizers.RMSprop(0.001),
loss_weights=[1., 0.8],
loss=['mse', 'huber'],
metrics=['mae', 'mse'])
return model
ニューラルネットワークが得意なこと
ニューラルネットワークはデータの規則性を見つけて予測し、さらにその予測の誤差から新たな予測を行います。
つまり、 誤差逆伝播を用いて、誤差から逆算して学習するのです。
「分類」や「回帰」もデータから規則性を見つけることで予測を行いますが、表現の幅が少ない。
ニューラルネットワークの学習の流れまとめ
訓練データ
入力データを入力層に入れる
↓
入力層の値に重みwをかけて中間層へ入れる
↓
中間層に来た値の和を活性化関数で変換して、出力層に送る
↓
出力層に来た値の和を活性化関数で変換して予測値を出す」 推論
↓
損失関数により、誤差の大きさを求める(全ての訓練データに対して求める)
↓
「ミニバッチ手法」で無作為に抽出した訓練データの損失関数を求める(全ての損失関数の和を計算すると時間がかかってしまうため)
↓
勾配降下法(DL)によって勾配を求める
勾配は、損失関数の値を最も減らす方向に示す
↓
重みパラメーターを勾配方向に微少量だけ更新
↓
繰り返す
↓
損失関数の変化が停滞したら終了
テストデータ
訓練によって導いたパラメーターを用いてテストデータから予測値を算出
↓
評価関数を用いてテストデータの精度を評価
ディープラーニングとは
ニューラルネットワークのの中間層を横に伸ばしたもの(中間層をさらに層にして、何度も中間層を通過させることで、表現の幅が広がる)
メリット
表現が広がる
デメリット
ニューラルネットワークで用いるパラメーター推定の手法(準ニュートン法)が使えなくなる
→勾配降下法を用いる。
勾配降下法は準ニュートン法と比べて非常に効率の悪いアルゴリズム.
また、モデルが複雑になると、勾配降下法を使ってもなかなかちゃんとパラメタが推定できない。
ニューラルネットワークに関する用語
全結合層
全結合層とは、重み付き入力とバイアスの総和です。
全結合層は、中間層や出力層の活性化関数を適用する前までの層。
参考記事