4『ニューラルネットワーク回帰MSE』
いよいよ機械学習の実際に入っていきます。機械学習は、教師あり学習、教師なし学習があって、前者は答え(教師)が予めあります。法則にしたがった解とか、正しい観測に基づいた観測値とかです。それが、スカラー(数)である場合は「回帰」、分類(あり/なしとか、松/竹/梅とか)である場合は「分類」といいます。まずはじめに「回帰問題」を扱います。ある指標はlogやルートを含んだ大変複雑な式で定義されています。この指標を、測定値1, 測定値2, 測定値3, 測定値4, 測定値5から機械学習で回帰させ値をだしてみようというものです。
1:データの準備
・元のデータ(あらかじめ作ってcsvファイルとして保存)をnumpyファイルとして読み込む(data = np.loadtxt(…)のコード)
・torchというライブラリ(偏微分による誤差逆伝播をやってくれる、ニューラルネットワークのいろんな関数が定義されている、など機械学習をするためのライブラリ)を使用
・xという変数に、numpyからtorch変数へ代入
・tという変数は、単に答え=教師(true)
2:機械学習のネットワーク設計図
・"class Net(torch.nn.Module):"の内容が、まさに機械学習の設計図です。上半分はネットワーク構造1(誤差逆伝播で修正されていく係数(パラメータ)を含むもの)、下半分はネットワーク構造2(修正すべき係数の定義のない単なる計算過程)を示します
・入力層(5ノード:測定値1~5)➡10➡10➡4➡1層と数値が計算されていきます。最後の一層が、出力された指標値です
・"lossfun = torch.nn.MSELoss() "はxとtの誤差を定義しています。mean squared error(二乗誤差の平均)という意味で、(x-t)の2乗を、処理したサンプル数で平均とるということです
・その誤差をSGDという方法で、逆伝播してoptimization(最適化)すると、次のステップで誤差が減るという流れです
3:実際の機械学習
・bsはバッチサイズといって、一度に30サンプルを処理して、各々のパラメータの勾配の平均値を用いて最適化します。この方がサンプルごとの異常値のばらつきが吸収されてよいとのことです
・このxの全サンプル2000個が30個ずつ処理されます。一回の処理を1 iterationとよび、2000個すべて処理されると1 epochとよびます
・これを200epoch繰り返して誤差をどんどんさげます、グラフをみると誤差が下がっている様子がみてとれます
4:事後の評価
・このモデルにテストサンプル(x_testの一部)をかませた出力と、真の値(t_test)の相関を確認します
ニューラルネットワークの機械学習の仕組みになります。