ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

MATLAB による深層学習

深層学習とは

"深層学習" とは、人間が生まれながらに身に付けている、経験から学ぶという行動をするようにコンピューターに学習させる機械学習の一分野です。機械学習アルゴリズムは、事前に定義された方程式をモデルとして使用するのではなく、計算法を使用して情報をデータから直接 "学習" します。深層学習は画像認識に特に適しており、顔認識、動き検出などの問題のほか、自動運転、車線検出、歩行者検出、自動駐車などの先進運転者支援技術の多くが抱える問題を解決するために重要です。

Deep Learning Toolbox™ には、深層ニューラル ネットワークの層の作成と相互結合を行うためのシンプルな MATLAB® コマンドが用意されています。例と事前学習済みのネットワークを利用すると、高度なコンピューター ビジョン アルゴリズムやニューラル ネットワークの知識がなくても、MATLAB を使用して簡単に深層学習を行うことができます。

実際の深層学習の各種手法を無料でお試しいただくには、ディープ ラーニング入門をご覧ください。

何をしますか?詳細
転移学習を実行してネットワークを自分のデータで微調整する

転移学習を使用した短時間での深層学習の開始

ヒント

通常、新しいタスクを学習するように事前学習済みのネットワークを微調整する方が、新しいネットワークに学習させるよりもはるかに簡単で時間がかかりません。

事前学習済みのネットワークでイメージを分類する事前学習済みの畳み込みニューラル ネットワーク
分類または回帰用の新しい深層ニューラル ネットワークを作成する

分類用のシンプルな深層学習ネットワークの作成

回帰用の畳み込みニューラル ネットワークの学習

学習または予測用にイメージのサイズ変更、回転、または前処理を行うイメージの深層学習向け前処理
フォルダー名を基に自動で、またはアプリを使用して対話的にイメージ データにラベルを付ける

イメージ分類についてのネットワークの学習

イメージ ラベラー

シーケンスおよび時系列データ用の深層学習ネットワークを作成する

深層学習を使用したシーケンスの分類

深層学習を使用した時系列予測

イメージ (道路、車、歩行者など) の各ピクセルを分類するセマンティック セグメンテーションの基礎 (Computer Vision System Toolbox)
イメージ内のオブジェクトを検出して認識する深層学習、セマンティック セグメンテーション、検出 (Computer Vision System Toolbox)
テキスト データを分類する 深層学習を使用したテキスト データの分類
音声認識のためにオーディオ データを分類する深層学習を使用した音声コマンド認識
ネットワークが学習した特徴を可視化する

AlexNet を使用した Deep Dream イメージ

畳み込みニューラル ネットワークの活性化の可視化

CPU、GPU、複数の GPU による学習、デスクトップまたはクラウドのクラスターにおける並列学習、大きすぎてメモリに収まらないデータセットの処理GPU および並列でのビッグ データを使用した深層学習

自動運転などの深層学習の応用分野の詳細は、深層学習の応用を参照してください。

事前学習済みのネットワークを使用するか、新しい深いネットワークを作成するか、この表のシナリオを検討して選択してください。

 転移学習に事前学習済みのネットワークを使用新しい深いネットワークを作成
学習データラベル付けされた数百枚から数千枚のイメージ (小規模)ラベル付けされた数千枚から数百万枚のイメージ
計算計算量が中程度 (GPU はオプション)計算量が多い (速度のために GPU 必須)
学習時間数秒から数分実際の問題で数日から数週間
モデルの精度良い (事前学習済みのモデルによる)高い (ただし、小規模なデータセットには過適合する場合がある)

詳細は、ネットワーク アーキテクチャの選択を参照してください。

深層学習はニューラル ネットワークを使用して、有用な特徴表現をデータから直接学習します。ニューラル ネットワークとは、複数の非線形処理層を組み合わせであり、生物の神経系からヒントを得た並列実行するシンプルな要素を使用します。深層学習モデルは、オブジェクトの分類において最先端の精度を達成でき、しばしば人間の能力を超えることがあります。

モデルの学習は、ラベル付けされた大規模なデータセットと、通常は複数の畳み込み層を含む多くの層から成るニューラル ネットワーク アーキテクチャを使用して行います。これらのモデルの学習は計算量が多くなります。通常は、高性能の GPU を使用して学習時間を短縮できます。次の図は、畳み込みニューラル ネットワークが多くのイメージから特徴を自動的に学習する層をどのように組み合わせて新しいイメージを分類しているかを示しています。

多くの深層学習アプリケーションは、イメージ ファイルを使用します。場合によっては、数百万枚のイメージ ファイルを使用することもあります。深層学習用の多くのイメージ ファイルに効率的にアクセスするために、MATLAB には関数 imageDatastore が用意されています。この関数を使用して、以下が行えます。

  • イメージをバッチ単位で自動的に読み取り、機械学習とコンピューター ビジョン アプリケーションの処理を高速化

  • 大きすぎてメモリに収まらないイメージのコレクションからデータをインポート

  • フォルダー名に基づいて自動的にイメージにラベル付け

10 行の MATLAB コードによる深層学習の例

この例では、わずか 10 行の MATLAB コードを使用して、深層学習でライブ Web カメラに映ったオブジェクトを特定する方法を説明します。この例を試して、MATLAB でどれほど簡単に深層学習を始めることができるか確認してください。

  1. 次のコマンドを実行して (ダウンロードが必要な場合あり)、Web カメラに接続し、事前学習済みのニューラル ネットワークを取得します。

    camera = webcam; % Connect to the camera
    net = alexnet;   % Load the neural network

    関数 webcam および alexnet によって表示されるリンクから、アドオン エクスプローラーを使用して無料のアドオンをダウンロードできます。または、Deep Learning Toolbox Model for AlexNet Network および MATLAB Support Package for USB Webcams を参照してください。

    alexnet を使用してイメージを分類できます。AlexNet は、100 万枚を超えるイメージで学習している事前学習済みの畳み込みニューラル ネットワーク (CNN) で、イメージを 1000 個のオブジェクト カテゴリ (キーボード、マウス、マグ カップ、鉛筆、多くの動物など) に分類できます。

  2. ライブ イメージを表示して分類するには、次のコードを実行します。Web カメラをあるオブジェクトに向けると、Web カメラに表示されているオブジェクトのクラスがニューラル ネットワークによって判断されて報告されます。イメージの分類は、Ctrl+C キーを押すまで続行されます。このコードでは、imresize を使用して、このネットワーク用にイメージをリサイズしています。

    while true
        im = snapshot(camera);       % Take a picture
        image(im);                   % Show the picture
        im = imresize(im,[227 227]); % Resize the picture for alexnet
        label = classify(net,im);    % Classify the picture
        title(char(label));          % Show the class label
        drawnow
    end

    この例では、ネットワークはマグ カップを正しく分類しています。身の回りのオブジェクトで実験して、このネットワークの精度を確認してください。

    この例のビデオを見るには、Deep Learning in 11 Lines of MATLAB Code を参照してください。

    この例を拡張してクラスの確率スコアを表示するコードを取得するには、深層学習を使用した Web カメラ イメージの分類を参照してください。

深層学習の次のステップとして、この事前学習済みのネットワークを他のタスクに使用できます。転移学習または特徴抽出を使用して、自分のイメージ データで新しい分類問題を解決してみましょう。例については、転移学習を使用した短時間での深層学習の開始事前学習済みのネットワークから抽出された特徴を使用した分類器の学習を参照してください。他の事前学習済みのネットワークを試してみるには、事前学習済みの畳み込みニューラル ネットワークを参照してください。

転移学習を使用した短時間での深層学習の開始

転移学習は、深層学習アプリケーションでよく使用されています。事前学習済みのネットワークを取得して、新しいタスクの学習の開始点として使用できます。転移学習によってネットワークを微調整する方が、ゼロから学習させるよりもはるかに簡単で時間がかかりません。少ない数の学習イメージを使用して、ネットワークに新しいタスクを高速に学習させることができます。転移学習の利点は、事前学習済みのネットワークが既に特徴を多数学習しており、これらの特徴を他のさまざまな類似タスクに適用できることです。

たとえば、数千枚または数百万枚のイメージで学習したネットワークを利用する場合、わずか数百枚のイメージを使って再学習させることで、新しいオブジェクトを検出できるようになります。元の学習データと比べて非常に小規模なデータセットを使用して、事前学習済みのネットワークを効果的に微調整できます。データセットが非常に大規模な場合、転移学習は新しいネットワークが学習する場合に比べて速くならない可能性があります。

転移学習には以下の利点があります。

  • 事前学習済みのネットワークの学習済みの特徴を新しい問題に転移

  • 転移学習は新しいネットワークに学習させるよりも簡単で時間がかからない

  • 学習時間とデータセットのサイズの削減

  • 新しいネットワークをゼロから作成する方法を知る必要なしに深層学習を実行

対話形式での例については、ディープ ネットワーク デザイナーを使用した転移学習を参照してください。

プログラムによる例については、転移学習入門AlexNet を使用した転移学習、および新しいイメージを分類するための深層学習ネットワークの学習を参照してください。

事前学習済みのネットワークから抽出された特徴を使用した分類器の学習

特徴抽出では、学習に時間や手間をかけずに事前学習済みのネットワークの能力を活用できます。特徴抽出は、最も早く深層学習を使用できる方法と言えます。事前学習済みのネットワークから学習済みの特徴を抽出し、これらの特徴をサポート ベクター マシン (SVM — Statistics and Machine Learning Toolbox™ が必要) などの分類器の学習に使用することができます。たとえば、alexnet を使用して学習させた SVM が、学習セットと検証セットで 90% を超える精度を達成できる場合、それ以上の精度を実現するために転移学習を使用して微調整することに労力に見合う価値はないかもしれません。小規模なデータセットで微調整を行うと、過適合のリスクも生じます。SVM の適用によって十分な精度を達成できない場合は、精度を向上させる微調整を行うだけの価値があります。

例については、AlexNet を使用した特徴抽出を参照してください。

CPU、GPU、並列、およびクラウドでのビッグ データを使用した深層学習

ニューラル ネットワークは本質的に並列アルゴリズムです。この並列性の利点を活かし、Parallel Computing Toolbox™ を使用して、学習をマルチコア CPU、グラフィックス処理装置 (GPU)、および複数の CPU と GPU を備えたコンピューターのクラスターに分散させることができます。

深いネットワークの学習は計算量が非常に多くなります。通常は、高性能の GPU を使用して学習時間を短縮できます。適切な GPU がない場合は、代わりに 1 つ以上の CPU コアで学習させることができます。畳み込みニューラル ネットワークの学習は、1 つの GPU または CPU で、複数の GPU または CPU コアで、あるいはクラスターで並列に行えます。GPU または並列オプションを使用するには Parallel Computing Toolbox が必要です。

大きすぎてメモリに収まらないデータセットを使用して問題を解決するために、複数のコンピューターは必要ありません。関数 imageDatastore を使用して、マシンのクラスターを使用せずに、データのバッチを処理できます。ただし、利用できるクラスターがある場合は、コードをデータ リポジトリに入れる方が、大量のデータをあちこちに移動させるよりも有効なことがあります。

深層学習のハードウェアおよびメモリ設定の詳細は、GPU および並列でのビッグ データを使用した深層学習を参照してください。

関連するトピック