ディープラーニングについてディープにラーニング。

思いっきり、自分が学んだことのアウトプットしていきますが、何分初心者。もし何かアドバイス等頂けましたら幸いです!

今日もオーライリー

前回の続きでここらでもう一回アウトプット。

f:id:kawam0t0:20191214170937p:plain

改めて、ニューラルネットワークの特徴について。
一番の画期的になったのは、
重みのパラメータの値をデータから自動で決定できるようになったこと。
層を深くしたディープラーニングにもなると、パラメータの数だけでも数千・数万に及ぶ。
それを一つ一つパワーでやってたら、飛んでもない。

じゃあ、具体的にニューラルネットワークでどんなアルゴリズムで自動でパラメータを決定できるようになったのか?

特徴量について

入力したデータを人の手を入れずにきれいな出力をする一つの方法に、特徴量の抽出という手段がある。
例えば、犬の写真を何枚も学習させる。
その中から、特徴量のパターンを抽出する(人が)。
画像の特徴量は通常、写真ではなく、ベクトルで表され、その変換されたベクトルに対して、
機械学習で使われている識別機(KNNとか…)で学習させる、という流れ。

この流れで行くと、
人が集めてきたデータ(特徴量)を機械が規則性を独自に見つけてくるのだが、
注意も必要。

それは、画像をベクトルに変換する際に使用した特徴量は人が作ったものである。
つまり、機械学習においては、見つけたい特徴に応じて適したものを使わないと、いい結果は得られない。
例えば、極端な話、犬を識別したいのに、車の画像を学習させるとか。

機械学習ニューラルネットワークの違い。

f:id:kawam0t0:20191215152042p:plain

パーセプトロン→人が考え出したアルゴリズム

機械学習→人が考えた特徴量を機械学習させて出力

ニューラルネットワーク→いくつもの画像を自ら学び、自ら出力。


つまり、ニューラルネットワークは解くべき問題が、数字の5なのか、犬なのか、人の顔なのかを与えられたデータをひたすら学習して、与えられた問題のパターンを発見しようとする。

損失関数について

AIの分野において、ある一つの指標(偏差値だと50)によって、現在の状態を表すもの、といってもわかりづらいので、例えると、偏差値だ。

つまり、損失関数の数値が高いと、そのニューラルネットワークの性能がとても悪いということを表す。
要は適してないよねって話。
設定方法について(偏差値で行くと50にする計算方法)は一般的に二乗和誤差、クロスエントロピーがよく使われる。

二乗和誤差 → ニューラルネットワークの出力と、正解となる教師データの各要素の差の2乗を計算し、その総和を求める。

クロスエントロピー →正解ラベルに対応する出力が大きくなると、0に近づいてくる。
逆に、正解ラベルに対しての出力された値(これが答えっしょ!って出した数値)が小さかったら(つまり正解の可能性が低かったら)損失関数の数字はでかくなる。

f:id:kawam0t0:20191215153250p:plain

つまりは、損失関数の値が大きくなれば適合していないというサインなので、そのサインをできる限り自動で小さくするために、パラメータ探しに出る。
なので、すべての訓練データが最適なパラメータを探すための対象になる。

→それはめんどくさい。

なら、めちゃくちゃあるデータの中から無作為に発生させた
データで近似したらいいんじゃね?(ミニバッチ学習)

でも、ディープラーニングって精度なんでしょ?
であるなら、何で損失関数がひつようなのか?

損失関数が必要な理由

精度を指標にしてしまうと、重みのパラメータを少し変えただけでは変化せずに、実際に
細かな調整ができない。
たとえ、改善をされたとしても、一から学習をさせていくので、連続性に欠ける。
それに比べ、損失関数を設けることでパラメータのいじる前、いじった後、
大小にかかわらず、反映されるから損失関数の指標が必要になってくる。