Ver. 1.0, 2017-08-11
森下功啓
1
回帰問題とは?
• 特徴ベクトルを基に、値を推定する問題を回帰問題という
• 特徴ベクトルが数値やラベルという点は識別問題と同じ
• 正解が実数という点が識別問題と異なる
2
学習器
過去7時間の雨量 3時間後の河川水位
河川水位を予測する回帰の例
3
ニューラルネットワークを使って回帰問題は解けるが、
全て自前でプログラムを作るのは大変だ
そこで、Kerasというライブラリを使って楽をしよう
Kerasの概要
4
Kerasとは
• ニューラルネットワークの積層を直感的に実現
• 広く使われている
5
Kerasは,Pythonで書かれた,TensorFlowまたはCNTK,
Theano上で実行可能な高水準のニューラルネットワークライブ
ラリです. Kerasは,迅速な実験を可能にすることに重点を置い
て開発されました. アイデアから結果に到達するまでのリード
タイムをできるだけ小さくすることが,良い研究をするための鍵
になります.
-Keras Documentation https://keras.io/ja/
6
kerasを使えば、ニューラルネットワークは簡単に組める
ここでは、熊本市で隔週で開催されているオトナのプログラミング
勉強会で矢野氏が発表した解説スライドを見てみよう
7
From 0から作るDeep Learning勉強会(矢野氏作)
8
From 0から作るDeep Learning勉強会(矢野氏作)
9
From 0から作るDeep Learning勉強会(矢野氏作)
10
From 0から作るDeep Learning勉強会(矢野氏作)
11
From 0から作るDeep Learning勉強会(矢野氏作)
12
From 0から作るDeep Learning勉強会(矢野氏作)
13
From 0から作るDeep Learning勉強会(矢野氏作)
14
必要なことはほぼ全部書いてあるのだけど、、、
これだけでは分からないだろうから
重回帰式を求める例を見てみよう
Kerasを使って
重回帰式を求める
15
重回帰式とは
• 重回帰式とは、式(1)である
• ここで、 𝑥は特徴量を表し、𝛽はその係数である
• 予測値の計算に式(1)を使う
• ちなみに、重回帰分析は係数𝛽を行列計算により求める
16
𝑦 = 𝛽0 + 𝛽1 𝑥1 + 𝛽2 𝑥2 + ⋯ + 𝛽 𝑛 𝑥 𝑛 (1)
*ここでの線形とは、直線という意味である。
**式(1)は1次式であるので、直線の式である
***重回帰分析は線形の式に回帰させるので線形回帰問題の一種である
17
これをKerasで解いてみる
𝑦 = 𝛽0 + 𝛽1 𝑥1 + 𝛽2 𝑥2 + ⋯ + 𝛽 𝑛 𝑥 𝑛 (1)
サンプルプログラムのダウンロード
18
1
2
Download:
https://github.com/KatsuhiroMorishita/machine_leaning_samples
19
• 以降のスライドでは、下記のプログラムを使った解説を行います
• 重回帰分析問題用のサンプルです
regression_learning.csv
• 重回帰問題用に作成した学習用のデータ
20
特徴ベクトル
(説明変数)
正解
(目的変数)
21
regression_learning.csvで作成した散布図行列
重回帰分析では問題になるほどの多重共線性がみられる。
learning.py
• Kerasを用いて、学習を行うプログラム
22
23
学習データの読み込み
列の切り出し
x: 特徴ベクトル
y: 正解値のベクトル
学習済みのモデルを保存
結合係数を人が読める形で保存
モデル構築
学習の実行
24
出力層の活性化関数は指
定されていないのでlinear
この層(入力層)のユニット数はs-1個(入力する教師データに依存)
学習係数は0.05
1つの教師データ当たりの
学習回数は2000
200個の教師データを使って
結合係数を更新する
次の層(出力層)の
ユニット数は1個
バイアス用のユニットは
有効(標準で有効)
誤差関数は二乗平均誤差
学習中に状況を表示するなら1
結合係数の更新回数 = epochs / batch_size
モデル構造
25
出力層入力層
𝑥1
𝑦
1
Unit 0
Unit 𝑛
𝑤1,1
0
𝑤2,1
0
𝑤0,1
0
結合係数
Layer 0 Layer 1
出力層のユニットの活
性化関数は指定され
ていないので、linear
∴ ℎ 𝑧 = 𝑧
𝑦 = 𝑦1
1
= 𝑧1
1
= 𝑾1
1
∙ 𝑿
𝑥 𝑛
・
・
・
𝑾1
1
= (𝑤0,1
0
, ⋯ , 𝑤 𝑛,1
0
) 𝑇
𝑿 = (1, 𝑥1, ⋯ , 𝑥 𝑛) 𝑇ここで、
プログラムの中で、
nはs-1として表現さ
れていた
結合係数を求めれば、そ
れが回帰式の係数となる
𝑦 = 𝛽0 + 𝛽1 𝑥1 + 𝛽2 𝑥2 + ⋯ + 𝛽 𝑛 𝑥 𝑛重回帰式
Unit 1
学習中の出力の見方
26
エポック数(学習の進
行割合が分かる)
誤差関数の値の
バッチ毎の平均
(小さいほど高精度)
学習終了時にlossの値が収束していないようであれば、学習回数(epochs)を増やすと良い。
学習結果の見方
27
[array([[ 0.11853985],
[ 0.25794539],
[ 0.24517672],
[ 0.44266531],
[ 0.1166774 ],
[ 0.49679297],
[-0.26336813],
[-0.54205322],
[-0.83572966]], dtype=float32), array([ 0.47580394], dtype=float32)]
𝑤 𝑛,1
0
, 𝑛 = 9
𝑤1,1
0
バイアス項 𝑤0,1
0
結合係数をコンソールに出力しているので、ここから重回帰係
数を読み取ることができる。なお、「weights.txt」にも同じ文字列
が出力されている。
ファイルに保存された学習器
• learning.pyを実行すると学習が行われ、学習済みの学習
器はファイルに保存される
• 保存されたファイルを使えば、いつでも学習後の学習器を
利用できる
28
保存されたモデル情報と、結合係数
modelの中身はモデル構造が記録
されたテキストである
param.hdf5の中身は結合係数が
バイナリ形式で記録されている
prediction.py
• 検証データの特徴ベクトルから正解を推定するプログラム
29
30
検証データの読み込み
検証結果を保存
検証の実行
数値の入った2次元配列を
文字列に変換する関数
学習器のモデルをロード
結合係数をロード
列の切り出し
x: 特徴ベクトル
予測結果の検証
• prediction.pyによる予測結果がresult_test.csvに出力される
• このファイルに記載された予測結果と正解の散布図を作成した
• 完全に予測と正解が一致していれば、完全相関となる
• 一次近似式の決定係数R2で予測精度を評価できる
31
予測値と正解の散布図の例
(横軸が正解、縦軸が予測値)
重回帰分析に対する
ニューラルネットワークの利点
• 普通の重回帰分析では、ほぼ完全相関な説明変数があると逆
行列を求めることができずに計算できない
• 高い相関のある片方の変数を使わないという手で回避できるけども
• NNでは、多重共線性があっても計算できる
• 相関のある変数間ではお互いの影響を補完し得るので、相関のある変
数の重み係数は不安定ではあるが、発散はしない
32
33
34
このスライドではKerasというライブラリを使って
ニューラルネットワークで重回帰係数を求めてみました。
如何だったでしょうか?少しはニューラルネットワークの
感触がつかめると良いのですが・・・・
さて、線形近似はできましたので、次は非線形近似に
トライしてみましょう。
参考文献
35
参考リンク集
• Keras 公式
• https://keras.io/ja/getting-started/sequential-model-guide/
• Iris
• http://aidiary.hatenablog.com/entry/20161108/1478609028
• Neural Networkでの失敗経験やアンチパターンを語る
• http://nonbiri-tereka.hatenablog.com/entry/2016/03/10/073633
• 目的関数(ロス関数)
• https://keras.io/ja/objectives/
• auto encoder
• https://elix-tech.github.io/ja/2016/07/17/autoencoder.html
• KerasでVGG16を使う 人工知能に関する断創録
• http://aidiary.hatenablog.com/entry/20170104/1483535144
• 技術力の有りそうな人のブログ
• CNNの隠れ層の可視化の記事も良いかもしれない
• DeepLearning系ライブラリ、Kerasがあまりにも便利だったので使い方メモ
• 最初に読むブログとしては網羅的で分かりやすいかも
• http://www.procrasist.com/entry/2017/01/07/154441 36
参考リンク集
• TensorFlowを始める前に知っておくべきテンソルのこと(追記:より一般的な話題へ)
• http://s0sem0y.hatenablog.com/entry/2016/12/01/223834
• scikit-learn で線形回帰 (単回帰分析・重回帰分析)
• pandasの使い方の参考にも良い
• http://pythondatascience.plavox.info/scikit-learn/%E7%B7%9A%E5%BD%A2%E5%9B%9E%E5%B8%B0
• [TF]KerasでModelとParameterをLoad/Saveする方法
• http://qiita.com/supersaiakujin/items/b9c9da9497c2163d5a74
• h5pyが必要だった
• Batch Normalization:ニューラルネットワークの学習を加速させる汎用的で強力な手法
• https://deepage.net/deep_learning/2016/10/26/batch_normalization.html
• Softmaxって何をしてるの?
• http://hiro2o2.hatenablog.jp/entry/2016/07/21/013805
• 機械学習におけるクラス分類問題の各関数の意味解説
• http://qiita.com/shunchan0677/items/d30e5206677f2068a468
37
Deep Learning Tools
38
http://pytorch.org/
https://chainer.org/
流行の兆しあり
日本で人気大

シリーズML-06 ニューラルネットワークによる線形回帰