ディープ ラーニングは、"ディープ" ニューラル ネットワークを利用する機械学習手法の総称です。 現在、ディープ ラーニングは機械学習の最も目に見える領域の 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 は、TorchSharp と TensorFlow.NETによって提供されます。
画像の分類
ML.NET では、ImageClassification API のセットを使用して、カスタム画像分類モデルをトレーニングできます。
ML.NET の画像分類トレーニング パイプラインは、次のようになります。
//Append ImageClassification trainer to the pipeline containing any preprocessing transforms.
pipeline
.Append(mlContext.MulticlassClassification.Trainers.ImageClassification(featureColumnName: "Image")
.Append(mlContext.Transforms.Conversion.MapKeyToValue("PredictedLabel");
// Train the model.
var model = pipeline.Fit(trainingData);
// Use the model for inferencing.
var predictedData = model.Transform(newData).GetColumn<string>("PredictedLabel");
ML.NET でカスタム画像分類モデルのトレーニングを開始するには、「モデル ビルダーを使用して Azure で画像分類モデルをトレーニングする 」を参照してください
物体検出
ML.NET を使用すると、Azure Machine Learning を使用してモデル ビルダーでカスタムオブジェクト検出モデルをトレーニングできます。 必要なのは、境界ボックス情報と境界ボックス内のオブジェクトが属するカテゴリを含むラベル付きデータセットです。
トレーニング プロセスの結果は 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 the model
var model = pipeline.Fit(trainingData);
// Use your model to make predictions
var predictedData = model.Transform(newData).GetColumn<string>("PredictedLabel");
ML.NET を使用してテキスト分類モデルのトレーニングを開始するには、「Model Builder チュートリアルを使用して Web アプリケーション内の Web サイト コメントのセンチメント ML.NET 分析する」を参照してください。
文の類似性
セマンティック検索などのタスクは、2 つの文またはテキストの一節が互いにどのように似ているかの決定に依存します。
ML.NET では、TextClassificationTrainerと同じ基になるモデルと微調整手法を使用する SentenceSimilarityTrainer API のセットを提供します。 ただし、カテゴリを出力として生成する代わりに、2つの文章がどれくらい似ているかを表す数値を生成します。
ML.NET の文の類似性に関するトレーニングと推論パイプラインは、次のようになります。
// Define the pipeline.
var pipeline = mlContext.Regression.Trainers.SentenceSimilarity(sentence1ColumnName: "Sentence", sentence2ColumnName: "Sentence2");
// Train the 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.NET と ONNX Runtimeによって提供されます。
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モデルを使用することを開始するには、の「事前トレーニング済みTensorFlowモデルを用いた映画レビューのセンチメント分析」についてのML.NET チュートリアルを参照してください。
ONNX
オープン ニューラル ネットワーク Exchange (ONNX) は、機械学習フレームワークとディープ ラーニング フレームワーク間の相互運用性を実現するように設計されたオープン ソース形式です。 つまり、PyTorch のような多くの一般的な機械学習フレームワークの 1 つでモデルをトレーニングし、それを 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 を使用した
.NET