タグ別アーカイブ: Azure Machine Learning

Azure Machine LearningのNet#による深層学習と限界点

DeepLearning Advent Calendarの23日目と推定されます。LSTMとかは色々と間に合わなかったので、プランBにより別テーマで過去への巡礼をしてみます。

Microsoft Azureの機械学習のPaaSであるAzure Machine LearningにはNet#というDSLがありこれを使うことで深層学習をニューラルネットワークのモデルに盛り込むことができる。実際に、Cortana Inteligence Galleryには”Neural Network: Convolution and pooling deep net“というテンプレートが存在する。中身を見てみる。

Net#を使って、深層学習の実現ができるという話は早くは国内では2015年のde:codeで語られている。確か、セッション「実践Azure Machine Learning」だったかと思う。この中で録画分に含まれているかどうかは確認していないがちらりと語られていた。メモ的な記事としては2015年に「Azureでお手軽ディープラーニング」という記事がホクソエムのdichikaさんによって書かれている。

ただ、限界点もある。今となっては古典的な隠れ層1層くらいの誤差逆伝搬法で問題となった勾配の消失問題の解決として使われているいくつかの手法があるが。

  • Pre-training
  • Autoencoder
  • Dropout
  • Randomized weight

これらはNet#で記述するための仕様を欠いているため、隠れ層を深くすると問題が起きる可能性は否定できない。基本的には私が把握している限りではNet#の仕様で深層学習の実現に有用なのは活性化関数の一部と隠れ層のカスタマイズあたりであろうかと思われる。

とはいえ、データ加工のスキームをフローで書くことができるなど有用な点は数多くあり、活用可能な問題であればAzure Machine Learningで実現するのは悪いことではない。Power BIを組み合わせて可視化するのも面白いと思う。

参考文献

  1. MLP シリーズ “深層学習” 岡谷貴之著

Azure ML上のRにおける状態空間法でのアクセス解析

3月の.NETラボ勉強会で『Azure ML上のRにおける状態空間法でのアクセス解析』のタイトルでLTに登壇しました。

 

AzureMLでfitdistrplusを使った確率分布の推定

ここでは確率分布の種類は既知のものとして、データから確率分布のパラメータの推定を行う過程を紹介する。Azure MLでは当該機能は機能セットとしては提供していないため、Rで実装されているfitdistrplusを用いて行う。
サンプルデータとしてパラメータが既知の分布を基づいて乱数を生成し、その乱数をデータとしてパラメータの推定を行う。この場合のML StudioでのExperimentを下記図に示す。

Experiment for Estimation Parameters

Experiment for Estimation Parameters

Figure 1は2つのRスクリプトで構成されている。このスクリプトを下記Source 1およびSource 2に示す。Source 1はサンプルデータの生成を行うスクリプトで、Source 2がデータに基づき分布の推定を行うスクリプトである。

maml.mapOutputPortおよび、maml.mapInputPortはAzure MLのRにおける固有の関数でデータの受け渡しを行う関数である。アウトプットされたグラフィックスは既定で特定の割り当てがなされるので特に実装を行わなくてもPNGフォーマットで取得することができる。出力結果を以下のEstimate Resultに示す。

# Create Data Set
data.set
Source 1: Data Generate
# Load required packages
library(fitdistrplus)

# load data frame
data.set
Source 2: Parameter Estimation
Estimate Result

Estimate Result


Linear Modeling on Azure Machine Learning

Azure Machine Learningで線形モデリングをしてみました。今回は米国の犯罪統計を用いて人口と暴力犯罪の関係をモデリングしてみます。データとして用いたのは以下のようなものです。

bandicam 2015-02-23 02-07-37-285Azure Machine Learningでは以下のようなモデルになります。

bandicam 2015-02-23 02-07-23-978

データをProjection Columnで射影して必要な列を抽出し、Train ModelでLinear Regressionを学習させるというとても簡単な形です。

実行結果は以下のようになります。

bandicam 2015-02-23 02-08-29-064

見ての通り、とんでもなく簡単です。

Azure Machine Learning #01

ML Studio Overview 1

ML Studioの画面を以下に示します。画面の左側に各種ビルディングブロックを格納したパレットがあり、中央部にビルディングブロックを並べるセクションがあります。ここにデータを提供するリーダーやモデリングを行うビルディングブロックなどを並べモデリングを行います。モデリングそのものの作法については次回以降に掲載します。ビルディングブロックはデータの加工からモデリングまで各種のツールが提供されており、Execute Python ScriptやExecute R Scriptといったスクリプト実行のビルディングブロックを使わなくてもコーディングレスでデータ加工を行ったり、モデリングを行うことが出来る環境にあります。特にClassificationはかなりのモデルが提供されています。また、著名なコンピュータヴィジョンのライブラリである、OpenCVの機能が一部提供され画像のロードを行うことも可能です。
ML Studio

Fig.1 ML Studio
Saved Datasets

Saved Datasetsにはサンプルとして、データセットが提供されています。データは需要、レビューから医療系まで色々とそろっており、各種モデルの検討に使ったり、トレーニングに用いることが出来ます。

Saved Datasets

Fig.2 Saved Datasets

ほかのビルディングブロックについては次のアーティクルで示します。

Azure Machine Learning #00

はじめに

Azure Machine LearningもGA (一般提供)を向かえ、注目を集めているようです。ここで、Azure Machine Learningとは何か、そして、どう使って行くかをまとめて行きたいと思います。Azure Machine Learningは洗練されたUIを持ち、ユーザインターフェイスとしてなら使用は容易です。しかし、機械学習の基本的なスキルなしに使うことは容易くはありません。この辺は機械学習の側面をかなり遮蔽しBAプラットフォームとしてレポーティングを含めまとめた、IBM Watson Analyticsとは根本的に異なるところです。

逆に言うと、IBM Watson Analyticsは機械学習の仕組みを遮蔽しているために、学習結果の理由を説明するのはかなり困難です。これは、同様に学習のアプローチを見せない、Google Predictive APIも同様です。その意味では説明可能であり、モデルの中身が見えるという面白い立ち位置にあります。これは、優劣というよりも考え方の違いかと思います。当たれば良い、そしてモデルの開発に時間をかけたくないというニーズもあれば、説明可能性が重要なこともあります。ただ、技術の使い分けを考えるときには重要なファクターです。

Azure Machine Learningとは

Azure Machine LearningはMicrosoft Azureの上に構築された機械学習のPaaSプラットフォームです。基本的にはアドホックに学習モデルを作成するためのML StudioとWeb APIとして学習や予測を動かすためのAPI群からなります。使用可能なモデルはMicrosoftが用意したプロプライエタリなモデルとR及びPythonが使用可能です。

ML Studioでのモデリングは有効グラフでビルディングブロックのデータフローを結線していく、SPSS Modelerや各種ETLツールで見かける形式を採用しています。この方式はデータフローが確認しやすくモデリングの仕組みを把握しやすい優れた方法です。PythonやRはビルディングブロックにスクリプトを記載する方法です。これは、R Analytics Flowと同様でスキルセットを活用しやすいと思います。

データは現時点においてはAzureのBLOB StorageもしくはSQL ServerのDBaaSであるSQL Databaseが利用できます。BLOB Storageにアウトプットすることで同じAzureのData Factoryをデータ加工プラットフォームとして活用できます。また、Machine LearningのアウトプットをBLOB Storageにして、ExcelやPower BIといったBIプラットフォームを活用し世間的な言い方ではBAプラットフォームの一部として活用できます。また、Web APIとして展開することで多くのツールからアクセス可能であると思います。

今回、GAを迎え、料金体系もプレビューのときとは一新しています。特徴は無料とStandardの2つに料金体系が分かれたことです。無料の側はWeb APIの利用に制限があり、また、モデリングの連続実行時間に時間制約があることデータサイズに上限があること、またSLAが保障されず、スケジューリングの優先順位が高くないこと、などの制約がありますがデータサイズは10GBとゆるく無料でもかなりのことができます。また、使用可能なモデルにも制約はありません。(2015/02/20 現在)

Azure Machine Learning GA

Microsoft Azure上の機械学習プラットフォームである Azure Machine LearningのGA (一般提供)が発表されました。

料金体系はプレビュー時とは異なり、無料とStandardの2体系からなっています。無料側はデータサイズとパフォーマンスに制約があります。また、機械学習のエンジンを連続して動作させられる時間に制約があります。また、無料側ではAzureのサブスクリプションが不要になっています。

Cox Proportional Hazards Model on Azure Machine Learning with R

このアーティクルはTokyo-Rでのプレゼンをベースに書き起こしたものになります。

本アーティクルではCox回帰を例題に説明を行いますが、一般化線形回帰のときのケースは.NET ラボの7月のLTでやっておりますので、Azure Machine Learningのアーティクルをご活用ください。

Microsoft Azure プラットフォーム上に構築された機械学習のためのPaaSであるAzure Machine Learningを使って、Cox回帰をやってみます。Azure Machine Learningの環境はML Studioというもので完全にWebベースでモダンブラウザなら大方のブラウザで操作できます。環境のスクリーンショットを示します。

ML Studio Screen shot

Azure Machine LearningはMicrosoftのプロプライエタリなビルディングブロックとRベースの分析環境の複合で実現されています。プロプライエタリなビルディングブロックにはSVMなど多くの分析手法が実装されていますが、生存時間など実装されていないモデルもたくさんあります。

まず、生存時間分析を実施する場合、データ量が大きくなると問題になるのはデータセットの準備です。生存時間分析ではイベント発生までの時間が必要になりますから、データを走査してイベント発生までの時間を抽出するのはわりと大変です。

さらに、その部分ができたとして、実際に適正なモデルを得るにはクロスバリデーションなどを含め考える必要があります。

今回はRの標準的な配布の中に含まれるsurvivalを使うので問題はありませんが、パッケージをインストールしなければならない場合には、ちっと対応が要ります。基本的にはパッケージ及び依存先を上げておいて、明示的にローカルからinstall.packageします。

Rに組み込まれているデータセット kidneyをエクスポートして、Azure Machine Learningでモデリングする例を示します。

この場合のExecute R Script ブロックに書くコードを示します。

library(survival)

kidney <- maml.mapInputPort(1) # class: data.frame

kidney.cox <- coxph( Surv(time, status) ~ sex+disease, data=kidney) 
kidney.fit <- survfit(kidney.cox)

plot(kidney.fit)

mamlというのはAzure Machine Learningで組み込まれているパッケージで自動的に読み込まれます。mapInputPortはデータの読み込みに使う関数でブロックへの入力データをデータフレームとして吐き出します。plotなどの作図は何も書かなくてもブロックからの出力に含まれるのでこのような単純な例ではRのコード側での対応は要りません。また、先の線形回帰の例で示していますが、データフレームを出力するとデータとして拾えます。

Chart of survival

今回の例ではデータセットが小さいため、全データをそのままモデリングしていることもあり、特に考慮していませんが。大きなデータで複数のセットを作って、学習を進める場合には複数のExecute R Scriptブロックを用いて、Azure ML側のデータの分割などの機能セットを使ったほうがよいと思われます。

また、データを走査してのイベント発生日の検出にはHDInsightに含まれる、Hadoop環境で行うのもありえるでしょう。

また、モデルそのものの適用については Azure Machine Learningでは実行環境をAPI化する機能をサポートしているのでRServeとかを考えなくても展開ができます。とはいえ、これでポンだけでは結局、predictを叩いているのと差がないのでもうちっとあがいてみます。車輪の再発明とも言いまが。

生存時間そのものは以下のようなモデルです。

h(t)=\lim_{\Delta t \to 0} \frac{S(t)-S(t - \Delta t)}{\Delta t} \cdot \frac{1}{S(t)}
H(t)=\int_0^{t} h(t)du=-\log S(t)
h(t)=h_0(t) \cdot \mathrm{e}^{(\alpha + \beta_{1} X_{1} + \beta_{2} X_{2} + \ldots + \beta_{p} X_{p})} = h_0(t) \cdot RISK

従って、時間を無視してパラメトリックに表されたリスクの効き具合だけを単純に議論するならば、係数を説明変数かけて合計してエクスポネンシャルするのと同じです。ただし、Rのcoxphでは説明変数は内部で平均を引き算して用いているので適用する場合にはそこも実装しないと同じ値にはなりません。適用をC#で実装した事例はC#によるCox回帰の適用の実装で書いたのでご確認ください。