Slide 1

Slide 1 text

Global AI Nights Fukui https://connpass.com/event/123614/ 2019年4月2日 主催 : (公財)ふくい産業支援センター / FITEA (福井情報技術者協会) ハッシュタグ

Slide 2

Slide 2 text

 小島 富治雄  @Fujiwo  福井コンピュータ グループ  Microsoft MVP (2005-2019) 自己紹介

Slide 3

Slide 3 text

先月マイクロソフト本社 (レドモンド) で色々 AI の話を聞いてきました 2

Slide 4

Slide 4 text

3 世界47か所 日本では 福井、東京、大阪

Slide 5

Slide 5 text

焼き菓子 トートバッグ ステッカー 抽選で Surface Laptop 2 Azure の50ドル分のクレジット (後で試される方) Powered by Microsoft 4

Slide 6

Slide 6 text

 https://www.youtube.com/watch?v=yKZT6JUQD9s キーノート by Microsoft 5

Slide 7

Slide 7 text

 https://www.videoindexer.ai/accounts/f5e013ef-ec57-41f8-a14d-dd082de0fbcf/videos/c473daff1d/ VideoIndexer | Azure による日本語字幕 6

Slide 8

Slide 8 text

機械学習 (AI/ML) の基礎と Microsoft の AI 2019年4月2日 小島 富治雄 Microsoft MVP (2005~2019) 福井コンピュータ グループ

Slide 9

Slide 9 text

1. 機械学習 (Machine Learning) とは 2. ニューラル ネットワークとは 3. デモ  Microsoft Cognitive Services  C# / Python による機械学習  Azure Machine Learning Studio 本日ご紹介する内容 8

Slide 10

Slide 10 text

 AI61『C# でニューラルネットワークをスクラッチで書いて機械学習の原理を理解しよう』  de:code 2018  de:code 2018 Online Microsoft de:code 2018 や日本マイクロソフト 大阪支店で話した内容 9

Slide 11

Slide 11 text

人間の知能の一部をコンピュータで再現する技術 人工知能 (Artificial Intelligence) とは 10

Slide 12

Slide 12 text

“ドローンで建設現場を撮影、AzureでAI解析”も可能に ―― 建設IoTプラットフォーム「LANDLOG」が「Microsoft Azure」を採用 11

Slide 13

Slide 13 text

NSW、DJI、日本マイクロソフトが ドローンと AI を活用した建築物メンテナンスサービスの開発で協業 12

Slide 14

Slide 14 text

建築 AI - Google 検索  AIは建築設計者の敵か味方か | 日経 xTECH  AIを活用した建築業界の技術を分かりやすく説明 | 世界の最新科学技術  AIが発達するこの先の未来における建築や都市計画の中で奪われる仕事、新たな職能 | ものまちぐらし  10+1 web site | 建築のAIはバベルの塔か | テンプラスワン・ウェブサイト  AI は、都市デザインを根本から変える<山梨知彦氏> | 建築×コンピュテーションのポータルサイト Archi Future Web  10年後に無くなる建築の仕事を考えてみた | あいつ、建築辞めるってよ。  AI (人工知能) で住宅建築の間取り設計はいつから自動化されるのか? 建築とAI 13

Slide 15

Slide 15 text

 LIFULLのAI戦略、予測分析はマーケティングをどう変えるのか?  DataRobot シバタアキラ氏と大阪ガス 河本 薫氏が語る「AIの民主化」  ピザハット、宅配待ち時間削減へAIベンチャーのGAUSSとデータ解析の取り組みを開始  人工知能で記者が欲しい情報を表示、PR TIMESが「リリースAI受信」を提供開始  GMO NIKKO、アフィリエイト広告向けのアドベリフィケーション機能を開発  Adobe、人工知能で検索エンジンマーケティングのROIを改善する「Adobe Advertising Cloud Search」を提供  Appier、AIプラットフォーム「AIXON」にオーディエンスのセグメンテーション予測機能を追加 AI がビジネスを変える 14

Slide 16

Slide 16 text

デモ 応用例: Seeing AI ~機械が人の目の代わりになる~ 15

Slide 17

Slide 17 text

機械学習 (Machine Learning) とは 16

Slide 18

Slide 18 text

人工知能の歴史 17 第1次 AIブーム 第3次 AIブーム 第2次 AIブーム 冬の時代 冬の時代 シンギュラリティ の恐怖 ワトソン 将棋の電王戦 ディープ ラーニング 機械学習 1960年代 1970年代 1980年代 1990年代 2000年代 2010年代 『人工知能は人間を超えるか ディープラーニングの先にあるもの』(松尾豊)

Slide 19

Slide 19 text

一部で AI が人間に追いついた 認識の正確さ 自動運転の事故率の低さ 将来的に、人間が認識できるものは 認識できる可能性 第3次 AIブーム 18

Slide 20

Slide 20 text

人工知能の一分野 コンピュータプログラムが経験、 学習を行う 機械学習とは 19

Slide 21

Slide 21 text

機械学習 (Machine Learning) ディープラーニング (深層学習: Deep Learning) 強化学習 (Reinforcement Learning) 深層強化学習 (Deep Reinforcement Learning) 機械学習の種類 20

Slide 22

Slide 22 text

 アルゴリズムを自分で考えプログラミングを行うのではなく、 大きなデータから統計的に解を求める  例. 株価予想  通常の開発 株価予想アルゴリズムを考え、それをプログラミング  機械学習 たくさんの株価のデータ → 機械に学習させる ニューラルネットワークなどを使用 → 学習済みの機械が株価予想を行う 機械学習 21

Slide 23

Slide 23 text

機械学習の一種 通常のものと違って多層になった ニューラルネットワークを使用 画像解析や音声認識、自然言語理解、 翻訳など、複雑な処理にはこちら 作成のハードルは、かなり高い 高いコンピュータ パワーが求められるため、 CPUだけでなく GPUも利用 ディープラーニング (深層学習: Deep Learning) 22

Slide 24

Slide 24 text

ディープ ラーニング ニューラル ネットワーク ディープ ラーニング 23 多層

Slide 25

Slide 25 text

機械学習の一種 通常の機械学習では、たくさんのパラメーターと 正解をデータとして与え、それを統計的に解析 (学習) することにより、新たなパラメーターから 正解を導けるようになるが、強化学習は、 はっきりとした正解がないような場合に用いられる 強化学習 (Reinforcement Learning) 24

Slide 26

Slide 26 text

ディープラーニングを用いた強化学習 プロ棋士に勝ったことで有名な「アルファ碁」など のゲームのAIや自動運転技術などで利用 深層強化学習 (Deep Reinforcement Learning) 25

Slide 27

Slide 27 text

人工知能と機械学習 人工知能 (AI) 機械学習 (ML) Deep Learning 26

Slide 28

Slide 28 text

機械学習でできること 27 回帰分析 (Regression) クラス分類 (Classification) クラスタリング (Clustering) 異常検知 (Anomaly Detection) 数値を予測 あらかじめ決められた 種類に分類 似たデータごとに分類 異常の検知 ・売上予測 ・手書き文字認識 ・スパムメール検出 ・市場調査 ・物体認識 ・橋やトンネル、電線、 配管の異常の検知 ・製品、農作物の異常を 検知

Slide 29

Slide 29 text

数学 線形代数 統計 多変量解析 機械学習に必要な基礎知識 28

Slide 30

Slide 30 text

プログラミング言語 Python R言語 etc… 機械学習に必要な基礎知識 29

Slide 31

Slide 31 text

1. Python 2. Java 3. R 4. C++ 5. C 6. JavaScript 7. Scala 8. Julia 機械学習で使われるプログラミング言語 30 What is the Best Programming Language for Machine Learning Tasks? | Machine Learning Ai Python Java Programming

Slide 32

Slide 32 text

参考: AI プロジェクトには、どんなロールが必要か 31 ロール名 ロール 必要なスキル 人材登用 AI ディレクター AI/MLをビジネスのどこに 活用するか ビジネス 社内 AI プロジェクト マネージャー データ分析の視点での戦略 ビジネス/IT/ データ分析 社内 シニア データ サイエンティスト 分析方法 データ分析 外部委託 | 社内育成 データ サイエンティスト ML を適用 データ分析/ プログラミング 外部委託 | 社内育成

Slide 33

Slide 33 text

ビジネス課題ありき データありき AI/ML はツールに過ぎない 専門家まかせにしない リスクの許容 参考: AI プロジェクトのチェックポイント 32

Slide 34

Slide 34 text

Microsoft Cognitive Services Web API 経由で利用でき る “人口知能パーツ” ML のモデルを自作せずに、 成果を手軽に利用可 33

Slide 35

Slide 35 text

例. Cognitive Services Fase API Cognitive Services で実現可能なシナリオ 34 顔検知 顔照合 感情解析 来店者数 検知・識別 顧客層 要注意人物 新規/リピーター 接客 顧客の表情 シナリオ 店員配置最適化 品揃え最適化 万引き防止 リピート率把握 接客品質向上 顧客満足度評価

Slide 36

Slide 36 text

Cognitive Services Face API を使った 「アロバビューコーロ」 売上データ、気象、曜日、ディスプレイ、男女比率、 入店率などのデータから、来客予測 例. 創業100年の老舗に学ぶAI活用の極意 「Webiya System with Aroba View Koro」 35 リアル店舗の経営を コグニティブで科学する ~伊勢の老舗店「ゑびや」の挑戦~ | CNET Japan

Slide 37

Slide 37 text

例. 顔の特徴や感情に合わせて商品やサービスの広告を出しわけるアウトドアメディア 「Face Targeting AD」 36 博報堂、博報堂アイ・スタジオ、日本マイクロソフト、AI を活用した ターゲティング広告配信システムのプロトタイプ開発で連携 | News Center Japan

Slide 38

Slide 38 text

Speech to Text Speaker Recognition 音声文字起こし 話者識別/認証 Text to Speech Speech Translation テキスト読み上げ 音声の翻訳 Speech | 音声 37 https://azure.microsoft.com/ja-jp/services/cognitive-services/

Slide 39

Slide 39 text

Text Analytics Translator Text Bing Spell Check テキストの分析 テキストの翻訳 スペルチェック Content Moderator Language Understanding 不快感を与えるコンテンツの モデレート 言語理解 Language | 言語 38 https://azure.microsoft.com/ja-jp/services/cognitive-services/

Slide 40

Slide 40 text

QnA Maker Q&A 抽出 Knowledge | 知識 39 https://azure.microsoft.com/ja-jp/services/cognitive-services/

Slide 41

Slide 41 text

Bing Web Search Bing Visual Search Bing Custom Search Bing Entity Search Web 検索 よく似た画像の識別 カスタム検索エンジン 名前付きエンティティの 認識と分類 Bing Video Search Bing News Search Bing Image Search Bing Autosuggest ビデオ検索 ニュース検索 画像検索 検索クエリのオートコン プリート Search | 検索 40 https://azure.microsoft.com/ja-jp/services/cognitive-services/

Slide 42

Slide 42 text

Computer Vision Face Video Indexer 画像情報の読み取り 顔認識 ビデオ内のオブジェクト検出 Content Moderator Custom Vision 不快感を与える画像やビデオの モデレート 画像認識 Vision | 視覚 41 https://azure.microsoft.com/ja-jp/services/cognitive-services/

Slide 43

Slide 43 text

Computer Vision Analyze 42 https://azure.microsoft.com/ja-jp/services/cognitive-services/computer-vision/

Slide 44

Slide 44 text

Computer Vision API Demo 43

Slide 45

Slide 45 text

Computer Vision API 44 function onImageUrlButtonClick() { $('#imageUrlButton').attr("disabled", true); $('#result').html(''); $('#image').html(''); var endpoint = ’https://japanwest.api.cognitive.microsoft.com/vision/v1 .0’; var subscriptionKey = ‘[SubscriptionKey]’; var params = { ‘visualFeatures’: ‘Description, Faces’, ‘details’: "", ‘language’: ‘en’, }; var imageUrl = $('#imageUrlTextBox').val(); $.ajax({ url: endpoint + ’/analyze?’ + $.param(params), beforeSend: function (xhrObj) { xhrObj.setRequestHeader(‘Content- Type’, ’application/json’); xhrObj.setRequestHeader(‘Ocp-Apim- Subscription-Key’, subscriptionKey); }, type: ’POST’, data: '{"url": ' + '"' + imageUrl + '"}', success: function (predictions) { $('#result').html( predictionsToHtml(predictions)); var captionText = getCaptionText( predictions.description.captions); $('#image').html(imageUrlToHtml( imageUrl, captionText)); }, error: function () { $('#result').html('エラー: 結果を取得で きませんでした。'); }, complete: function () { $('#imageUrlButton').attr("disabled", false); } }); }

Slide 46

Slide 46 text

Custom Vision Service Demo 45

Slide 47

Slide 47 text

Custom Vision Service 46 (1) (2)

Slide 48

Slide 48 text

Custom Vision Service 47 (1) (2)

Slide 49

Slide 49 text

Custom Vision Service 48

Slide 50

Slide 50 text

Custom Vision API (JavaScript で利用) 49 function onImageUrlButtonClick() { $('#imageUrlButton').attr("disabled", true); $('#result').html(''); $('#image').html(''); var postUrl = 'https://southcentralus.api.cognitive.microsoft.com /customvision/v2.0/Prediction/[ProjectId]/url’; var predictionKey = ‘[PredictionKey]’; var imageUrl = $('#imageUrlTextBox').val(); var data = { 'Url': imageUrl }; $.ajax({ type: ’post’, url: postUrl, data: JSON.stringify(data), headers: { 'Prediction-key': predictionKey, 'Content-Type': 'application/json' }, dataType: "json", success: function (json_data) { $('#result').html(predictionsToHtml( json_data.predictions)); $('#image').html( imageUrlToHtml(imageUrl)); }, error: function () { $('#result').html('エラー: 結果を 取得できませんでした。'); }, complete: function () { $('#imageUrlButton’) .attr("disabled", false); } }); }

Slide 51

Slide 51 text

Custom Vision API (C#で利用) 50 public static IEnumerable<(string, double)> PredictImageUrl(string imageUrl) { if (!string.IsNullOrWhiteSpace(imageUrl)) { const string predictionKey = “[PredictionKey]"; var projectId = new Guid(“[ProjectId]"); var endpoint = new PredictionEndpoint { ApiKey = predictionKey }; var predictResult = endpoint.PredictImageUrl(projectId, new ImageUrl(imageUrl)); return predictResult.Predictions.Select(prediction => (prediction.Tag.ToString(), prediction.Probability)); } return new (string, double)[] {}; } NuGet:

Slide 52

Slide 52 text

参考: Custom Vision で作成したモデルを Windows ML やモバイルで利用 51 https://docs.microsoft.com/ja-jp/azure/cognitive-services/custom-vision-service/custom-vision-onnx-windows-ml

Slide 53

Slide 53 text

ニューラル ネットワークとは 52

Slide 54

Slide 54 text

神経細胞のネットワーク 53

Slide 55

Slide 55 text

神経細胞のネットワークを模倣 ニューラル ネットワーク 入力 入力 ・ ・ ・ 出力 出力 ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ニューロン 入力層 中間層 出力層 54

Slide 56

Slide 56 text

個々のニューロン ニューロン 出力 入力 入力 ・ ・ ・ 入力 バイアス 55

Slide 57

Slide 57 text

神経細胞が入力の合計を出力 にするときの性質をモデル化 シグモイド関数 56

Slide 58

Slide 58 text

ニューラル ネットワークによる分類 57

Slide 59

Slide 59 text

今回作成するニューラル ネットワーク 入力 入力 出力 ニューロン 入力層 中間層 出力層 バイアス 重み 58

Slide 60

Slide 60 text

今回のニューラル ネットワークの訓練 正解 ー 1. 重みの修正 2. 重みの修正 入力 入力 ニューロン 入力層 中間層 出力層 バイアス 重み 出力 59

Slide 61

Slide 61 text

学習の例 ネコはどこ? 60

Slide 62

Slide 62 text

学習の例 ネコはどこ? 61

Slide 63

Slide 63 text

Demo 62

Slide 64

Slide 64 text

 「C# でニューラルネットワークをフルスクラッチで書いて機械学習の原理を理解しよう」 for Microsoft de:code 2018 AI sessions https://github.com/Fujiwo/CSharpNeuralNetworkSample-AI-decode サンプル ソース コードのご紹介 63

Slide 65

Slide 65 text

public class Neuron // ニューロン { double sum; public double Value { get; private set; } = 0.0; public void Input(IEnumerable inputData) { inputData.ForEach(input => Input(input.WeightingValue)); Value = Math.Sigmoid(sum); } void Input(double value) => sum += value; } C# によるニューロンの実装 64

Slide 66

Slide 66 text

C# によるニューラル ネットワークの実装 public class NeuralNetwork // ニューラル ネットワーク { // 各層 double[] inputLayer; Neuron[] middleLayer; Neuron outputLayer; // バイアス double inputLayerBias = 1.0; double middleLayerBias = 1.0; // 各層の重み // 入力層 → 中間層の重み double[,] inputWeight = new double[,] { { RandomWeight, RandomWeight }, { RandomWeight, RandomWeight }, { RandomWeight, RandomWeight } }; // 中間層 → 出力層の重み double[] middleWeight = new[] { RandomWeight, RandomWeight, RandomWeight }; 65

Slide 67

Slide 67 text

C# によるニューラル ネットワークの実装 (続き) // 実行 public double Commit((double, double) data) { // 各層 inputLayer = new[] { data.Item1, data.Item2, inputLayerBias }; middleLayer = new[] { new Neuron(), new Neuron() }; outputLayer = new Neuron(); // 入力層→中間層 middleLayer.For((index, neuron) => middleLayer[index].Input(ToInputData(inputLayer, inputWeight.GetColumn(index).ToArray()))); // 中間層→出力層 outputLayer.Input(new[] { new Input { Value = middleLayer[0].Value, Weight = middleWeight[0] }, new Input { Value = middleLayer[1].Value, Weight = middleWeight[1] }, new Input { Value = middleLayerBias , Weight = middleWeight[2] } }); return outputLayer.Value; } 66

Slide 68

Slide 68 text

C# によるニューラル ネットワークの実装 (続き) // 学習 void Learn((double, double, double) data) { var outputData = Commit((data.Item1, data.Item2)); var correctValue = data.Item3; var learningRate = 0.3; // 学習係数 // 出力層→中間層 // δmo = (出力値 - 正解値) × 出力の微分 var daltaMO = (correctValue - outputData) * outputData * (1.0 - outputData); var oldMiddleWeight = middleWeight.Clone() as double[]; // 修正量 = δmo × 中間層の値 × 学習係数 middleLayer.For((index, neuron) => middleWeight[index] += neuron.Value * daltaMO * learningRate); middleWeight[2] += middleLayerBias * daltaMO * learningRate; // 中間層→入力層 // δim = δmo × 中間出力の重み × 中間層の微分 var deltaIM = middleLayer.IndexSelect(index => daltaMO * oldMiddleWeight[index] * middleLayer[index].Value * (1.0 - middleLayer[index].Value)).ToArray(); // 修正量 = δim × 入力層の値 × 学習係数 inputWeight.For((row, column, _) => inputWeight[row, column] += inputLayer[row] * deltaIM[column] * learningRate); } 67

Slide 69

Slide 69 text

C# によるニューラル ネットワークの実装 (続き) // 学習 public void Learn(IEnumerable<(double, double, double)> dataCollection, int times) => times.Times(() => dataCollection.ForEach(data => Learn(data))); static IEnumerable ToInputData(double[] inputLayer, double[] inputWeight) => inputLayer.IndexSelect(index => new Input { Value = inputLayer[index], Weight = inputWeight[index] }); readonly static Random random = new Random(); const double weightRange = 10.0; static double RandomWeight => (random.NextDouble() - 0.5) * weightRange; } 68

Slide 70

Slide 70 text

69

Slide 71

Slide 71 text

実行結果 (シグモイド関数) 70

Slide 72

Slide 72 text

実行結果 (座標データと訓練前) 71

Slide 73

Slide 73 text

実行結果 (教師データと訓練後) 72

Slide 74

Slide 74 text

訓練前の重みの値 73

Slide 75

Slide 75 text

訓練後の重みの値 74

Slide 76

Slide 76 text

2値による分類 (Classification) 75 Longitude 136 Latitude 36 Longitude Latitude ➢ 一般的なアルゴリズムで 解くことはむつかしい ➢ 二次元だとこんな感じ ➢ 二次元の線で分けられる ➢ N次元に一般化すると? ➢ N次元空間の面で分ける ➢ 数学的には、テンソル (N次元の値の集まり) の流れ (tensor flow) で考えることができる

Slide 77

Slide 77 text

機械学習用の ライブラリー Microsoft Cognitive Toolkit 76

Slide 78

Slide 78 text

機械学習のライブラリー 77 Google 製 ディープラーニング用 Preferred Networks (日本の企業) 製 ディープラーニング用 BVLC (カリフォルニア大学) 製 ディープラーニング用 Google 製 機械学習一般用 Microsoft Cognitive Toolkit Microsoft 製 ディープラーニング用

Slide 79

Slide 79 text

CPU と GPU 78 コア数 得意分野 本来の用途 CPU 2, 4, 8, 16, … 直列処理 演算 GPU 数千 並列処理 画像処理 ディープラーニングは並列処理だらけ

Slide 80

Slide 80 text

機械学習とGPU 79 ○ GPU対応版あり ○ ライブラリーの導入で対応可 ○ ライブラリーの導入で対応可 × Microsoft Cognitive Toolkit ○ GPU対応版あり

Slide 81

Slide 81 text

文字認識 (Python版) 80 Demo Python のライブラリー scikit-learn を用いて、 数字の認識を行う

Slide 82

Slide 82 text

Python のライブラリー scikit-learn を用いて、 株価の予想を行う 株価予想 (Python版) 81 Demo

Slide 83

Slide 83 text

 「Microsoft Azure Machine Learning Studio による株価予想チュートリアル」 for Microsoft de:code 2018 AI sessions https://github.com/Fujiwo/PredictStockPrice-AI-decode サンプル チュートリアルのご紹介 82

Slide 84

Slide 84 text

Azure Machine Learning Studio 83

Slide 85

Slide 85 text

機械学習 (Machine Learning) 84 例. Azure SQL Database クラウドに保存 例. Azure Machine Learning Studio 機械学習で解析! データをクラウドに かき集める Python による データの最適化 API アプリケーションや Azure Functions などで利用

Slide 86

Slide 86 text

Azure SQL Database 85

Slide 87

Slide 87 text

86 Azure SQL Database

Slide 88

Slide 88 text

Azure Machine Learning Studio を用いて、 株価の予想を行う 株価予想 (Azure Machine Learning Studio版) 87 Demo

Slide 89

Slide 89 text

88

Slide 90

Slide 90 text

IBM Cloud https://cloud.ibm.com https://console.bluemix.net IBM Watson Watson Studio 参考: IBM Cloud 89

Slide 91

Slide 91 text

参考: Google Cloud ML Engine 90 https://cloud.google.com/ml-engine/

Slide 92

Slide 92 text

AWS https://aws.amazon.com https://console.aws.amazon.com Amazon SageMaker 参考: AWS (Amazon Web Service) 91

Slide 93

Slide 93 text

1. 機械学習 (Machine Learning) とは 2. ニューラル ネットワークとは 3. 実際の例  Microsoft Cognitive Services  C# / Python による機械学習  Azure Machine Learning Studio まとめ: 本日ご紹介した内容 92

Slide 94

Slide 94 text

参考書籍 93 機械学習入門 ボルツマン機械学習から深層学習まで ¥2,484 あたらしい人工知能の教科書 プロダクト/サービス開発に必 要な基礎知識 ¥2,808 Pythonで動かして学ぶ! あたらしい機械学習の教科書 ¥2,894 詳解 ディープラーニング TensorFlow・Kerasによる時系 列データ処理 ¥3,672 ゼロから作るDeep Learning ―Pythonで学ぶディープ ラーニングの理論と実装 ¥3,672 Pythonではじめる機械学習 ―scikit-learnで学ぶ特徴 量エンジニアリングと機械学習の基礎 ¥3,672 やさしく学ぶ 機械学習を理解するための数学のきほん ~ア ヤノ&ミオと一緒に学ぶ 機械学習の理論と数学、実装まで ~ ¥2,786