ディープ ラーニングとは

ディープ ラーニングは、"ディープ" ニューラル ネットワークを利用した機械学習手法の総称です。 現在、ディープ ラーニングは機械学習の中で最も注目されている領域の 1 つです。コンピューター ビジョンや自然言語処理で成功を収め、強化学習への適用ではゲーム プレイ、意思決定、シミュレーションなどのシナリオで効果を発揮しているためです。

ディープ ラーニングが成功するために重要な要素は、ニューラル ネットワーク モデルの作成と推論の実行を容易にするデータ、計算、ソフトウェア フレームワーク、ランタイムが利用できることです。 このようなフレームワークの例には、TensorFlow、(Py)Torch、ONNX などがあります。

ML.NET では、こうしたフレームワークのいくつかにアクセスできます。 その結果、ML.NET ユーザーは、一から構築しなくてもディープ ラーニング モデルを利用できます。

ディープ ラーニングと機械学習

ディープ ラーニングは、ニューラル ネットワーク アルゴリズムに依存しています。 これは、一般的な線形モデル、デシジョン ツリー、サポート ベクター マシン (SVM) など、より多様なアルゴリズムを使用する従来型の機械学習の手法とは対照的です。 この違いがもたらす最もわかりやすくて実践的な意味は、一定の種類のデータにはディープ ラーニングの手法の方が適している場合があるということです。 一部のケースでは、グラデーションブースト ツリー (XGBoost、LightGBM、CatBoost) などの従来の機械学習手法の方が表形式データの処理では有利なようです。 テキストや画像などの構造化データが少ない場合、ニューラル ネットワークのパフォーマンスの方が優れている傾向があります。 最善の方法は、常に実際のデータ ソースとユース ケースで試して、問題に最適な手法を自分で判断することです。

従来型の機械学習タスクの場合、ML.NET の自動機械学習 (AutoML) を使って試行錯誤のプロセスを簡略化できます。 AutoML の詳細については、「自動機械学習 (AutoML) とは?」の記事を参照してください。

ニューラル ネットワーク アーキテクチャ

ディープ ラーニングを他と違うものにしている主な特徴の 1 つは、人工ニューラル ネットワーク アルゴリズムを使用していることです。 大まかに言えば、ニューラル ネットワークは、各ユニットの出力が別のユニットの入力となる "処理ユニット" で構成されていると考えることができます。 各ユニットは、1 つまたは複数の入力を受け取ることができ、入力の加重和を実行し、オフセット (または "バイアス") を適用した後に、非線形変換関数 ("アクティベーション" と呼ばれる) を実行するというのが基本的な動作です。 こうしたコンポーネントをさまざまに組み合わせることで、分類、回帰関数、その他の機械学習タスクの中心となる構造の決定境界を記述します。

ニューラルネットワークの単一レイヤーを表す図

過去 10 年間で、ディープ ラーニングを行うケース、アプリケーション、手法が増えました。 このような増加の一因は、ニューラル ネットワークに組み込める各種操作が増えてきたこと、こうした操作で構成される組み合わせが豊富になってきたこと、このような機能向上を支えるコンピューティング サポートが向上してきたことによるものです。 一般に、ニューラル ネットワークのアーキテクチャは次のカテゴリに分類できます。

  • フィードフォワード ニューラル ネットワーク
  • 畳み込みニューラル ネットワーク
  • 再帰型ニューラル ネットワーク
  • 敵対的生成ネットワーク
  • トランスフォーマー

詳細については、 人工ニューラル ネットワーク ガイドを参照してください。

ディープ ラーニングはどのような目的に利用できますか?

ディープ ラーニング アーキテクチャは、画像、オーディオ、自由形式テキストなどの "非構造化データ" を含むタスクで優れたパフォーマンスを発揮します。 その結果、ディープ ラーニングは次のような問題を解決するために利用されるようになってきています。

  • 画像の分類
  • オーディオの分類
  • 翻訳
  • テキスト生成
  • テキスト分類

ML.NET のディープ ラーニング

ディープ ラーニング モデルを最初からトレーニングするには、いくつかのパラメーター、大量のラベル付きトレーニング データ、膨大な量の計算リソース (数百時間の GPU) を設定する必要があります。 ML.NET では、事前トレーニング済みのモデルと、転移学習やファインチューニングなどの知識転移の手法を使用して、このプロセスを省くことができます。

また、ML.NET では、他のフレームワークでトレーニングされたモデルをインポートし、.NET アプリケーション内で利用することもできます。

状況に応じてローカルの GPU と Azure GPU コンピューティング リソースを使用し、ディープ ラーニング モデルのトレーニングと利用ができます。

カスタム モデルをトレーニングする

ML.NET は、カスタムのディープ ラーニング モデルをトレーニングし、そのモデルを使用して .NET アプリケーション内で予測を行うための API を提供します。

この API では TorchSharpTensorFlow.NET が利用されています。

画像の分類

ML.NET では、ImageClassification の API 一式を使用して、カスタムの画像分類モデルをトレーニングできます。

ML.NET を使った画像分類トレーニングのパイプラインは次のようになります。

//Append ImageClassification trainer to your pipeline containing any preprocessing transforms
pipeline
    .Append(mlContext.MulticlassClassification.Trainers.ImageClassification(featureColumnName: "Image")
    .Append(mlContext.Transforms.Conversion.MapKeyToValue("PredictedLabel");

// Train your model
var model = pipeline.Fit(trainingData);

// Use your model for inferencing
var predictedData = model.Transform(newData).GetColumn<string>("PredictedLabel");

ML.NET でカスタムの画像分類モデルのトレーニングを始めるには、「Model Builder を使用して Azure で画像分類モデルをトレーニングする」を参照してください

オブジェクトの検出

ML.NET を使用すると、Azure Machine Learning の Model Builder でカスタムの物体検出モデルをトレーニングできます。 必要になるのは、境界ボックス情報と、境界ボックス内のオブジェクトが属するカテゴリを含むラベル付きデータセットのみです。

トレーニング プロセスの成果物は ONNX モデルです。このモデルを ApplyOnnxModel 変換を使って使用し、予測を行うことができます。

現時点では、物体検出をローカルで実行する機能は ML.NET でサポートされていせん。

ML.NET でカスタムの物体検出モデルをトレーニングする場合は、「チュートリアル: Model Builder で画像内の一時停止標識を検出する」を参照してください

テキスト分類

自由形式のテキストを分類する場合、テキストが顧客レビューかビジネス メモかが多くのプロセスで重要になります。

ML.NET では、TextClassificationTrainer API の一式を使用して、カスタムのテキスト分類モデルをトレーニングできます。 ML.NET でカスタム テキスト分類モデルをトレーニングするために使用する手法は、ファインチューニングと呼ばれています。 ファインチューニングを行うと、事前トレーニング済みのモデルをベースに、ドメインや問題に固有のレイヤーを独自のデータを使用して再トレーニングできます。 これにより、モデル全体をゼロからトレーニングするプロセスを経ることなく、これまでより問題の解決にふさわしいモデルを用意できるという利点があります。 テキスト分類 API で使用される事前トレーニング済みモデルは、NAS-BERT を TorchSharp で実装したものです。

ML.NET のテキスト分類トレーニングのパイプラインは次のようになります。

// Define training pipeline using TextClassification trainer
var pipeline =
    mlContext.Transforms.Conversion.MapValueToKey("Label","Sentiment")
        .Append(mlContext.MulticlassClassification.Trainers.TextClassification(sentence1ColumnName: "Text"))
        .Append(mlContext.Transforms.Conversion.MapKeyToValue("PredictedLabel"));

// Train your model
var model = pipeline.Fit(trainingData);

// Use your model to make predictions
var predictedData = model.Transform(newData).GetColumn<string>("PredictedLabel");

ML.NET を使用してテキスト分類モデルのトレーニングを始めるには、「チュートリアル: ML.NET モデル ビルダーを使用して Web アプリケーションで Web サイトのコメントのセンチメントを分析する」を参照してください。

文の類似性

セマンティック検索などのタスクは、2 つの文またはテキストの節が互いにどのように似ているかという判定に依存します。

ML.NET は、TextClassificationTrainer と同じベースになるモデルとファインチューニング手法を使用する SentenceSimilarityTrainer API の一式を提供します。 ただし、カテゴリを出力として生成する代わりに、2 つの節の類似性を表す数値を生成します。

ML.NET で文の類似性に関するトレーニングと推論を行うパイプラインは次のようになります。

// Define your pipeline
var pipeline = mlContext.Regression.Trainers.SentenceSimilarity(sentence1ColumnName: "Sentence", sentence2ColumnName: "Sentence2");

// Train your model
var model = pipeline.Fit(trainingData);

// Use the model to make predictions and extract their similarity values
var score = model.Transform(newData).GetColumn<float>("Score");

文の類似性の分析を始める場合は、 dotnet/machinelearning-samples リポジトリのサンプルを参照してください。

事前トレーニング済みモデルを使用する

ML.NET は、TensorFlow や ONNX などの他の形式のモデルを取り込み、そのモデルを使用して .NET アプリケーション内で予測を行う API を提供します。

この API では TensorFlow.NETONNX ランタイムが利用されています。

TensorFlow

TensorFlow は、充実したエコシステムと TensorFlow Hub で利用できるさまざまな事前トレーニング済みモデルを備えたディープ ラーニング フレームワークです。

ML.NET を使用すると、こうした事前トレーニング済みの TensorFlow モデルを取り込み、それを .NET アプリケーション内で実行する推論に使用できます。

事前トレーニング済みの TensorFlow モデルを使用した推論パイプラインは次のようになります。

// Load TensorFlow model
TensorFlowModel tensorFlowModel = mlContext.Model.LoadTensorFlowModel(_modelPath);

//Append ScoreTensorFlowModel transform to your pipeline containing any preprocessing transforms
pipeline.Append(tensorFlowModel.ScoreTensorFlowModel(outputColumnName: "Prediction/Softmax", inputColumnName:"Features"))

// Create ML.NET model from pipeline
ITransformer model = pipeline.Fit(dataView);

var predictions = model.Transform(dataView).GetColumn<float>("Prediction/Softmax");

ML.NET で事前トレーニング済み TensorFlow モデルの利用を始めるには、「チュートリアル: ML.NET で事前トレーニング済みの TensorFlow モデルを使用して映画レビューのセンチメントを分析する」参照してください

ONNX

Open Neural Network Exchange (ONNX) は、機械学習とディープ ラーニングのフレームワーク間で相互運用できるように設計されたオープンソースのフォーマットです。 つまり、PyTorch などの多くの一般的な機械学習フレームワークのいずれかでモデルをトレーニングして ONNX 形式に変換し、ML.NET などの別のフレームワークで ONNX モデルを使用することができます。

ONNX モデル リポジトリには、さまざまなタスクの推論に利用できる事前トレーニング済みの ONNX モデルがいくつかアップされています。

ML.NET では、こうした事前トレーニング済みの ONNX モデルを取り込み、.NET アプリケーション内で実行する推論に利用できます。

事前トレーニング済みの ONNX モデルを使用した推論のパイプラインは次のようになります。

// Append ApplyOnnxModel transform to pipeline containing any preprocessing transforms
pipeline.Append((modelFile: modelLocation, outputColumnNames: new[] { TinyYoloModelSettings.ModelOutput }, inputColumnNames: new[] { TinyYoloModelSettings.ModelInput })

// Create ML.NET model from pipeline
var model = pipeline.Fit(data);

// Use the model to make predictions
var predictions = pipeline.Fit(data).GetColumn<float[]>(TinyYoloModelSettings.ModelOutput);

ML.NET で事前トレーニング済みの ONNX モデルを初めて使う場合は、ML.NET で ONNX を使ったオブジェクト検出に関するチュートリアルを参照してください。