機械学習
第 1 回 イントロダクション
白浜 公章
教材
Web
サイトに講義資料とコード(
Python jupyter notebook形式)を公開
https://www.info.kindai.ac.jp/~shirahama/courses/ml/講義している手法の動作確認がその場で行える!
参考書
•
本講義は、下記の本に基づいている
Jeremy Watt, Reza Borhani and Aggelos K. Katsaggelos
Machine Learning Refined: Foundations, Algorithms, and Applications Cambridge University Press, 2016
著者とコンタクトをとり、コードや図を使用する許可を得ている
もうすぐ第
2版が出版される
目標
•
機械学習の枠組み、及び現在主流となっている技術に関する基礎知識の習得
•
高水準言語(
Python)を用いて、機械学習モデルを実装する能力・経験の習得
成績評価
合計
3回のレポート(講義した手法を用いて、
UCI Machine Learning Repositoryのデータを解析)
本講義について
本講義では、機械学習の枠組みを抑えた後で、深層学習について深く学ぶ!
機械学習とは?
人工知能:計算機上で人間の知能を再現する技術( 1956 年~)
機械学習:データを統計的に解析して、予測や分類を行う モデルを学習(構築)する技術
深層学習:人間の脳の仕組みに基づく深い 階層をもつモデルを学習する技術
P. Viola and M. Jones, CVPR 2001
N. Jones, Nature 2014
ルールベース アプローチの限界
計算機(
GPU)の進歩
大規模データの収集・整備
肌色、髪の色、
眼、口の形
…
どうやって学習する?
多くの学習データを使えば使うほど、正確な識別が行えるようになる データを見せる
人間と同じ
学習データ
(データ本体) (ラベル)
猫
犬
猫 犬
(教師)
(学習者) (計算機)
データが属するクラス
(カテゴリ)を表す
犬と猫の識別
学習データをどうする?
クラスごとの特徴を見つける これも人間と同じ
猫クラス
犬と猫の違いは、
〇 耳の形
〇 鼻の大きさ(顔との比率)
× 脚の数
× 色
…
犬クラス
もう少し定量的には?
学習データを特徴空間中の点として表現する
いい特徴を使えていれば、同じクラスのデータが近くに集まる
犬クラス 猫クラス
(大)
鼻の大きさ
(小)
耳の形 ( 丸い ) ( 尖って い る)
(大きい、丸い)
(小さい、尖っている)
どうやって識別する?
(大)
鼻の大きさ
(小)
耳の形 ( 丸い ) ( 尖って い る)
モデル(図では線形モデル(直線))を学習する パラメータの最適化 y = 𝑎𝑥 + 𝑏
(耳の形) (鼻の大きさ) 傾き
aと切片
bを求める
犬クラス 猫クラス
異なるクラスのちょうど中間
を通っており最適(だろう)
学習した後は?
ラベルが未知の
テストデータを分類する
(大)
鼻の大きさ
(小)
耳の形 ( 丸い ) ( 尖ってい る)
犬クラス 猫クラス
誤分類:学習データでは、鼻の大きさと耳の形で十分 だったが、一部のテストデータには当てはまらない!
•
学習データを増やす
•
新たな特徴(例えば、眼の色)を導入
→
モデルを再学習
機械学習の枠組み (1/2)
問題設定
犬
vs.猫
データ収集
学習データ
(ラベルが既知)
テストデータ
(ラベルが未知)
犬
猫
?
?
特徴抽出
データを特徴 空間に写像
学習
正確な分類ができる ようにモデルの
パラメータを最適化
テスト
学習したモデルを テストデータに適用 して性能評価
分類問題:ラベルが離散値(クラス)
機械学習の枠組み (2/2)
問題設定
株価予測
データ収集
学習データ
(ラベルが既知)
テストデータ
(ラベルが未知)
特徴抽出
データを特徴 空間に写像
学習
正確な予測ができる ようにモデルの
パラメータを最適化
テスト
学習したモデルを テストデータに適用 して性能評価
回帰問題:ラベルが連続値
企業
A 400企業
B 100企業
C ?企業
D ?株価
株価
歳入
•
各企業を“歳入”という
1つの特徴で表現
•
縦軸はラベル(株価)
株価
企業C
歳入
の歳入 企業C
の株価
(予測値)
回帰問題も分類問題も枠組みは同じ(ラベルが違うだけ)!
特徴の重要性( 1/3 )
適切な特徴をデザインすることが非常に重要
•
対象問題に関して深い知識があれば、適切な特徴をデザインでき、高精度を達成可能
•
ただし、多くの場合、対象問題について少ししか知識がない、もしくは全くない
どうやって有用な特徴を自動抽出(し高精度を達成)するか → 特徴学習(重要!)
深い知識があるとき:物体の落下距離の回帰(ガリレオの落下法則)
落下距離は質量に依存せず、時間(の
2乗)にのみ依存する
(時間の2乗:特徴)
特徴の重要性( 2/3 )
知識がほとんどないとき(パート
1):視覚情報に基づく物体認識
「人間が物体認識に使用する情報は、エッジに多く含まれている」ということは分かっている
確かに、エッジだけからでも
2人の人が映っていることは分かる ただし、複雑な画像に対してはエッジだけでは不十分
適切な特徴をデザインすることが非常に重要
•
対象問題に関して深い知識があれば、適切な特徴をデザインでき、高精度を達成可能
•
ただし、多くの場合、対象問題について少ししか知識がない、もしくは全くない
どうやって有用な特徴を自動抽出(し高精度を達成)するか → 特徴学習(重要!)
特徴の重要性( 3/3 )
知識がほとんどないとき(パート
2):視覚情報に基づく物体認識
「脳内には小領域のエッジ検出を行う細胞(ニューロン)があり、検出されたエッジを組み合わせて、
人は物体認識を行っている」という脳科学の知見
こういうエッジを特徴として検出する
(そして、さらに組み合わせる)
→
物体認識に関する現在最先端の特徴
(深層学習)
適切な特徴をデザインすることが非常に重要
•
対象問題に関して深い知識があれば、適切な特徴をデザインでき、高精度を達成可能
•
ただし、多くの場合、対象問題について少ししか知識がない、もしくは全くない
どうやって有用な特徴を自動抽出(し高精度を達成)するか → 特徴学習(重要!)
パラメータの最適化とは?( 1/2 )
コスト関数の最小化
•
入力は、最適化するモデルのパラメータ(下の例では、傾き
aと切片
b)
•
出力は、あるパラメータを使用した時のエラー率(つまり、コスト)
コストを最小にするパラメータを見つける
コスト大
→悪いパラメータ
(回帰精度が低い)
コスト最小
→最適パラメータ
(回帰精度が高い)
パラメータの最適化とは?( 2/2 )
コスト関数の最小化
•
入力は、最適化するモデルのパラメータ(下の例では、傾きと切片)
•
出力は、あるパラメータを使用した時のエラー率(つまり、コスト)
コストを最小にするパラメータを見つける
コスト大
→悪いパラメータ
(分類精度が低い)
コスト最小
→最適パラメータ
(分類精度が高い)
数値最適化(数値
計算法)が大事!
本講義の焦点と日程
特徴学習:データから有用な特徴を抽出し、分類・回帰を行うニューラルネットワーク
•
回帰のための特徴学習(
8, 9, 10週目)
•
分類のための特徴学習(
11, 12週目)
•
代表的な特徴学習手法(
CNN, RNNなど) (
13, 14, 15週目)
数値最適化(
2週目)
知識に基づいて手動で定義した特徴
•
回帰モデルの学習、テスト(
3, 4週目)
•
分類モデルの学習、テスト(
5, 6, 7週目)
歳入 株価
鼻の大きさ
耳の形
問題設定 データ収集 特徴抽出 学習 テスト
一層だけからのシンプルなモデルを用いて、
機械学習の基本的枠組みを抑える
•
特徴によるデータ表現
•
モデルパラメータの最適化
多層からなる複雑な
モデルに発展させる
Anaconda Python 3.7 のインストール
僕は、
https://www.anaconda.com/download/から、
Windows用の
64ビット版
Anaconda Python 3.6(最新版は
Python 3.7)をダウロードしインストールした。
Macbook Air
でも、上記サイトから
Python 3.7をダウンロードし、簡単にインストールできることを確認済み!
ただし、下記の
2点には注意した方がいいと思われる。
• Anaconda
のインストールフォルダに日本語が入っているとインストールできないので、
Cの直下にフォルダ
を作り、そこにインストールした。プラス、ユーザ名に日本語が混じっているなら、日本語が混じっていない ユーザを作り、そちらで作業すべき(後で
scipyがうまく動かないことが分かり、痛い目に遭った)。
• Anaconda
のパスを環境変数に設定することは
Not recommendedだったが、環境変数に設定した。
Anaconda Python
をインストールすれば、
Pythonの基本的なライブラリ(
jupyter-notebook、
numpyなど)
も併せてインストールされる。
インストールが完了すれば、ターミナルで
jupyter-notebookと実行すれば、
jupyter-notebookが起動する。
Webブラウザに以下のような画面が表示されるはず。
インストール済みの
人は次のスライドへ
Autograd (自動で微分を計算してくれるライブラリ)のインストール
Anaconda Prompt
を起動し、下記のコマンドを実行して、
autogradをインストールする
• python -m pip install –upgrade pip
• pip install autograd
本講義で使用する補助ライブラリのイントールとテスト
1.
講義の
Webページに公開されている下記の
2つのファイルをダウンロードする
• 1_test.ipynb
• mlrefined_libraries.zip
2. mlrefined_libraires.zip
を、
1_test.ipynbと 同じフォルダに解凍・配置する。
3. Jupyter Notebook
で、
1_test.ipynbを開き、
実行できることを確認する。うまく行けば、
右のようなグラフが表示されるはず。
本講義用の設定
jupyter-notebook を使った Python プログラミング
Python
や
jupyter-notebookの使い方に関する
Webページは、数多く公開されている。徐々にで 構わないので、各自で勉強し、
jupyter-notebookを使った
Pythonプログラミング に慣れておくこと!
例えば、下記の
Webページを挙げておくが、探せば色々と見つかる。
自分で内容を読み、理解し、納得した
Webページを参照すること!
(
jupyter-notebookの使い方)
https://pythondatascience.plavox.info/python%E3%81%AE%E9%96%8B%E7%99%BA%E7%92%B0%E5%A2%83/jupyter-notebook
%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%BF%E3%82%88%E3%81%86 https://bizinfolog.com/python-machine-learning/how-to-use-jupyter-notebook/
(
Pythonの全般的な使い方)
http://lang.sist.chukyo-u.ac.jp/classes/PythonProbStat/Guide2Python.html https://www.python-izm.com/basic/
(
numpyという非常に重要な計算ライブラリの使い方)
http://www.kamishima.net/mlmpyja/nbayes1/ndarray.html
メモ
1. jupyter-notebook
で
” IOPub data rate exceeded”というエラーが出たとき
jupyter-notebook
で使用するメモリが不足しているで、増やしてやる
https://aotamasaki.hatenablog.com/entry/2018/04/08/123146
https://stackoverflow.com/questions/43288550/iopub-data-rate-exceeded-when-viewing-image-in-jupyter-notebook
2. jupyter-notebook
で作成したコードの拡張子は
.ipynbであるが、
Safariを用いて、
Web上の
.ipynbファイルをダウンロードすると、最後に
”.txt”が追加されることがあるので、そのときは
”.txt”を削除する
レポート課題では必須!
おさえておくべき事項
1. Python に関すること
• パッケージの import
• 変数の型は不要( type で確認)
• インデントでコードを書く
• 内包標記
• 関数(複数の返り値も簡単)
2. numpy というパッケージは非常に重要
• ベクトル・行列の定義
• ベクトル・行列のサイズの確認
• ブロードキャスティングによる計算
• テキストファイルの読み込み( loadtxt, genfromtxt など)
3. jupyter-notebook では、 ”Code” モードだけでなく、 ”Markdown” モードも抑えておく
•
簡単にメモ書きができる:
https://qiita.com/tbpgr/items/989c6badefff69377da7• Latex