LogoMark.png

データサイエンス/12 の変更点


#author("2023-12-11T13:24:42+09:00","default:inoue.ko","inoue.ko")
#author("2023-12-12T17:08:35+09:00","default:inoue.ko","inoue.ko")
*第12回 機械学習概説
[[データサイエンス/2023]]|[[受講生一覧>https://design.kyusan-u.ac.jp/socialdesign/?%E3%83%87%E3%83%BC%E3%82%BF%E3%82%B5%E3%82%A4%E3%82%A8%E3%83%B3%E3%82%B9]]|[[汎用シート>https://docs.google.com/spreadsheets/d/1g-6TyzeQg3md55l9SGnqN-USBsoCNYOwSDDUOKVBJu8/edit?usp=sharing]]
~

//***CONTENTS
//#contents2_1
//~
~


**はじめに
-事務連絡です。
後期の__[[授業アンケート(全学統一)>https://design.kyusan-u.ac.jp/socialdesign/?%E6%8E%88%E6%A5%AD%E3%82%A2%E3%83%B3%E3%82%B1%E3%83%BC%E3%83%88]]__にご協力をお願いします。
-データサイエンス / 機械学習 /  AI の位置付け
関連する諸分野との関係を図で表すと以下のようになります。
[[GoogleImage:Data Science Machine Learning AI]]
~
~

**機械学習とは
機械学習(Machine Learning:ML) とは、データサイエンス、あるいは人工知能研究における手法の一つで、大量のデータを利用した反復的な学習(人間が行っている学習と同様のプロセス)によって、コンピュータ上にパターン認知や推論のためのモデルを構築する技術です。

コンピュータに与えるのは、学習ルールと、学習素材のデータセットで、コンピュータ自身が大量のデータから推論のルールを自動的に学習します。例えば、ヒト、犬、猫の大量の画像と、その画像がヒトか、犬か、猫かの「答え」です。この画像はヒト、この画像は犬・・と大量に与えていくことで、識別する能力が学習され、その「経験」が豊富になることで、識別能力が上がっていくのです。小さな子供に「これは犬です」、「これは猫です」・・と教えていくのと同じ手順です。

''ちなみに''
&small(犬と猫の違いを子供に教える際に、犬のサンプル画像が「白い犬」ばかり、猫のサンプル画像が「黒い猫」ばかりだとすると・・・「白いのが犬」と学習してしまうかもしれません。教える際には、データの与え方に配慮が必要です。);

このときコンピュータの中に自動的に出来上がる「入力と出力の関係づけ」のことを「モデル」というのですが、与えるデータが画像であれば、画像認識モデルができあがり、音声を与えつづければ、音声認識モデルができあがります。

従来、物事の判別は人手によるプログラミング( if 条件文)で実装していましたが、現在の AI 、例えば自動運転における画像解析、買い物行動の動作解析、オンラインショップのレコメンド機能、スパムメールの検知など、いわゆるパターン認知機能と呼ばれるものの大半は、この機械学習によって実装されています。

機械学習で可能になるのは大きく2つ、「予測」と「発見」です。
-予測:過去のデータから未知のデータに対する予測を行う(教師あり)
-発見:過去のデータから未知のパターンを発見する(教師なし)

//モデルの生成には、以下のような手法があり、どの手法を用いるかは人間が選んでコンピュータに与えます。この部分でプログラマーは「神」になります。
~

***機械学習のイメージ
従来のAI(エキスパートシステム)と何が違うのか、そのイメージをざっくりと掴んでもらうための図解です。
#image(MachineLearning/ML.jpg)
~

***機械学習の応用先
-予測:数値予測、ニーズ・意図予測、マッチングなど
-識別:情報の判断・仕分け・検索、音声・画像の認識、異常検知ど
-実行:作業の自動化、表現生成、行動の最適化など
~
~

**機械学習のタイプ
~

***教師あり学習|Supervised learning
教師あり学習とは、学習のときに正解のラベルを使う手法で、''既知の情報を用いて未来を予測する予測器を作ること''を目指します。一般に''問題(説明変数)と答え(目的変数)''のセットからなる大量のデータを必要とします。''主にカテゴリを予測する「分類」と、実数値を予測する「回帰」''があります。手法としては、''ニューラルネットワーク''、線形回帰などがあります。

今最も実用化が進んでいるのがこの分野です。要するに、大量の過去のデータから現象を記述するモデルを作成し、それを用いて未来に起こることを予測する・・。これは基本的には、私たちの脳が「経験を積むことで、未来予測ができるようになる」という話と同じですが、コンピュータの記憶容量と処理の高速化が進んだことで、それが人知を超えたレベルで実現できるようになったのです。
~

***教師なし学習|Unsupervised Learning
教師なし学習とは、学習の際に正解ラベルを使わず、機械学習モデルに自力でデータの法則性を見つけさせる手法で、''サンプルをグループ分けする「クラスタリング」や、高次元の変数を低次元に減らす「次元削減(次元圧縮)」''などがあります。
//k-means法、PCA(主成分分析) などの手法があります。
~

***強化学習|Reinforcement learning
強化学習とは、正解ラベルの代わりに「報酬」を使う手法です。とるべき「行動」に無数の選択肢があり、明確な「答え」をあらかじめ与えることが難しい場合、「報酬」の大きな行動に高いスコア、「報酬」の少ない行動に低いスコアを与えていくことで、どう振る舞えば最大の報酬が得られるかを学習する・・というタイプのもので、囲碁や将棋などの AI に利用されています。
~
~



**機械学習体験

***__[[Teachable Machine>TeachableMachine]]__
-https://teachablemachine.withgoogle.com/
サイト、アプリなどに使う機械学習モデルを簡単に作成できるウェブベースのツールで、独自の画像、音声、ポーズを認識するようコンピュータをトレーニングします。専門知識やコーディングは必要ありません。
-アカウント等の作成なしにその場で利用できます。
-プロジェクトは GoogleDrive に保存することが前提となっています。
-[[Google:teachable machine 使い方]]
~

***TensorFlow Playground
-https://playground.tensorflow.org
ニューラルネットワークの仕組みを可視化してブラウザで直感的に理解できるようにしたサイトです。
-[[Google:TensorFlow Playground 使い方]]
~

***参考:Neurotic Neurons
-http://ncase.me/neurons/
脳内でのニューロンの活動を体験的に理解できるサイトです。

~


***JavaScriptライブラリ ml5.js
https://ml5js.org/

ml5.jsは [[TensorFlow.js]] をベースにしたJavaScriptの機械学習ライブラリーで、学習済みモデルを簡単に利用することができます。[[p5.js]](Processing) との親和性もよく、アーティストやクリエイターにとって、気軽に楽しいコンテンツ制作が体験できる環境を提供してくれます。

-ImageClassifier
お手元の画像をDrag&Drop してお試し下さい。
--DEMO:https://koichi-inoue.github.io/ImageClassification/
--CODE:https://github.com/koichi-inoue/ImageClassification

-FaceApi WebCam
Webカメラの起動が求められます。カメラ画像はローカルで処理されています。転送はされていませんのでご安心下さい。
--DEMO:https://koichi-inoue.github.io/FaceAPI_webcam/
--CODE:https://github.com/koichi-inoue/FaceAPI_webcam

-PoseNet WebCam with p5.js
カメラに映った体の部位の座標を取得する poseNet のサンプルです。p5.jsを使うことで、コードは想像以上にシンプルなものになります。
--DEMO:https://koichi-inoue.github.io/PoseNet_webcam_p5js/.
--CODE:https://github.com/koichi-inoue/PoseNet_webcam_p5js
~
~

**APPENDIX

***モデルと未来予測
先日お話しした「関数」を例に、データサイエンスが何をしようとしているのかについて「例え話」をします。関数とは「入力と出力(ああすればこうなる)」の関係を表したモデルです。
 y = f ( x ) ,  y = ax +b
この「a, b によって特徴づけられた、入力x と 出力y の関係」が、物事の背景にある原理を説明するモデル・・ということになります。

例えば、2つのデータ (2,5) , (4,9) があって、これらを通る直線の式を y = ax + b として、 a ,b の値を求めると・・
 5 = 2a + b
 9 = 4a + b
これを解いて、a = 2, b =1。この直線の式  y = 2x + 1 が得られたモデルです。
で、「 x = 10 のときに y はいくつ?」という問いに対して、 2 x 10 + 1 = 21、これがいわば「未来予測」です。

#image(DataScience/LeastSquaresMethod.png,right,30%)
数学の問題というのは、与えられるデータの数も値も、手計算で綺麗な解が導けるように与えられますが、実際の問題では、与えられるデータは必ずしも綺麗に直線上には並びません。例えば  (2,5) , (3,6) , (4,9) だったりして、普通の数学の問題としては回答不能になります。

しかし、実際に複数のデータをグラフにプロットすると、明らかに比例関係が見てとれます(右上グラフ)。であれば、その関係を表現するための a と b を見出すことには意味があると言えるでしょう。

このように現実から得られるデータに対しては、[[回帰分析>LinearRegression]]の手法を使ってパラメータ a , b を推定するのですが((単回帰の問題で、2次元的に散布図が描き出せるのであれば、グラフ上に定規で直線を引いて「傾き」と「切片」を見出すかたちでも実用上はほとんど問題ありません。コンピュータに頼らなくても答えは出せる・・という柔軟な感覚も必要です。))、結果からいうと、上記の3つのデータから推定されるのは、a=2.0, b=0.67 となります。もし、入力(x)が 16 であると想定すると、予測値(y)は、32.67 となります。

データサイエンスがやろうとしていることは、基本的にこの応用です。関数モデルをつくって「前提(x)がこうなら、結果(y)はこうなる」といったようなことを予測できるようにしたい・・・。今日の 認識系AI の大半はこんな例えで説明できます。
~

***説明変数と目的変数
関数モデルを '''y = f(X) ''' と書いた場合の、X が説明変数で、y が目的変数です((一般に入力の方が数(次元)が多いので y は小文字、X は大文字で書いたりします。y が値とすれば、X(大文字のエックス)はベクトル、 y がベクトルとすれば、Xは行列・・というイメージです。))。
説明変数と目的変数という用語は、統計ソフトやライブラリーによって、異なる用語が使われる場合があります。以下いずれも同様の用語セットです。
|COLOR(WHITE):BGCOLOR(#333):&mathjax(x);|COLOR(WHITE):BGCOLOR(#333):&mathjax(y);|h
|独立変数(independent variable)|従属変数(dependent variable)|
|説明変数(explanatory variable)|目的変数(target variable)|
|特徴量(feature / attribute)| ラベル(label) |
|データ(data)|ターゲット(target)|
|予測変数(predictor variable)|応答変数(response variable)|
|入力(input)|出力(output)|
~


***学習用データとテストデータ
機械学習(教師あり)では、手持ちのデータを「学習用データ(訓練データ)」と「テストデータ」で分けるのが一般的です。

手持ちのデータを全て学習用データとして使うと、そのデータに過度に適合したモデルができてしまい(これを''過学習''といいます)、現実の予測に使おうとした場合に逆に精度が低くなってしまいます。そこで、一般には学習用データとテストデータに分割して、学習状況をテストデータでチェックしながら、テストデータに対して最も良い性能が出るように調整を繰り返します。
~
~
~