MATLAB で始めるディープラーニング
ディープラーニングとは
ディープラーニングは機械学習の一種です。モデルは画像、テキスト、音声から直接分類タスクを実行することを学習します。ディープラーニングは通常、ニューラル ネットワーク アーキテクチャを使用して実装されます。"ディープ" という用語はネットワーク内の層の数を示しており、層が多いほどネットワークは深くなります。従来のニューラルネットワークは 2、3 層程度でしたが、ディープネットワークは数百もの層を持つことがあります。
ディープラーニングの活用
ディープラーニングは、顔認識、テキスト翻訳、音声認識のほか、車線分類や交通標識認識のような先進運転支援システムなどの識別アプリケーションに特に適しています。
- 横断歩道に近づくと減速する自動運転車。
- 偽造紙幣を拒否する ATM。
- 外国の道路標識を瞬時に翻訳するスマートフォンアプリ。
ディープラーニングの可能性
テクノロジーにおける 3 つの大きな進歩により、ディープラーニングはより実現可能なものになりました。以下のスライドショーでご確認ください。
ニューラル ネットワークの仕組み
ディープ ニューラル ネットワークは、非線形処理を行う複数の層を組み合わせたものです。各層は、生物学的神経系から着想を得た、シンプルな要素ごとの演算を並列で実行します。また、入力層、いくつかの隠れ層、および出力層から構成されています。各層はノード (ニューロン) を介して相互接続され、各隠れ層は前の層の出力をその入力として使用します。
ディープ ニューラル ネットワークの学習方法
たとえば、ある画像セットの各画像に 4 つの異なるカテゴリーのオブジェクトのいずれかが含まれている場合、各画像にどのオブジェクトが含まれているかをディープラーニング ネットワークで自動的に認識したいとします。ネットワーク用の学習データを得るために、画像にラベル付けします。
この学習データを使用して、ネットワークはオブジェクトの具体的な特徴を理解し、対応するカテゴリーに関連付けることができます。
ネットワーク内の各層は、前の層からデータを取り込み、それを変換して次の層に渡します。ネットワークが学習する内容の複雑度と詳細度は、層から層へと進むたびに増していきます。
注目すべきは、ネットワークがデータから直接学習を行うという点です。特徴量の学習に人間が介入することはありません。
ディープラーニングの基礎に関する詳細を見る
ディープ ニューラル ネットワークは、非線形処理を行う複数の層を組み合わせたものです。各層は、生物学的神経系から着想を得た、シンプルな要素ごとの演算を並列で実行します。また、入力層、いくつかの隠れ層、および出力層から構成されています。各層はノード (ニューロン) を介して相互接続され、各隠れ層は前の層の出力をその入力として使用します。
畳み込みニューラル ネットワーク (CNN または ConvNet) は、ディープラーニングで最もよく使用されているアルゴリズムの 1 つです。他のニューラル ネットワークと同様に、CNN は、入力層、出力層、その間にある多くの隠れ層で構成されています。
特徴検出層
これらの層は、畳み込み、プーリング、正規化線形ユニット (ReLU) の 3 種類の演算のいずれかをデータに対して実行します。
畳み込み層では、入力画像を一連の畳み込みフィルターに通すことで、それぞれのフィルターが画像の特定の特徴を活性化します。
プーリング層は、非線形ダウンサンプリングを行うことで出力を単純化し、ネットワークが学習する必要のあるパラメーターの数を減らします。
正規化線形ユニット (ReLU) 層 は、負の値をゼロにマッピングし、正の値を維持することで、より速く、より効果的な学習を可能にします。
これらの 3 つの演算が数十から数百の層で繰り返し行われ、層ごとに異なる特徴を検出するように学習していきます。
分類層
特徴を検出した後、CNN のアーキテクチャは分類に移行します。
最後から 2 番目の層は全結合層 (FC) で、K 次元のベクトル (K はネットワークで予測可能なクラス数) を出力します。このベクトルには、分類される画像の各クラスに対する確率が含まれます。
CNN アーキテクチャの最終層では、関数 softmax を使用して分類の出力を行います。
ディープラーニングに慣れていない場合は、100 万枚以上の画像で学習を行った CNN である GoogLeNet などの既存のネットワークを使うことで、素早く簡単に作業に取り掛かることができます。GoogLeNet は画像分類に最もよく使用されています。キーボード、コンピューターのマウス、鉛筆、その他の事務機器に加え、犬、猫、馬、その他の動物など、1,000 種類のカテゴリに画像を分類できます。
GoogLeNet を使用すると、あらゆる画像のオブジェクトを分類できます。この例では、デスクトップに設置した Web カメラの画像に含まれるオブジェクトの分類に使用します。MATLAB® のほかに、以下を使用します。
- Deep Learning Toolbox™
- MATLAB で Web カメラを使用するためのサポートパッケージ
- GoogLeNet を使用するためのサポートパッケージ
GoogLeNet の読み込み後、Web カメラに接続し、ライブ画像を取得します。
camera = webcam; % Connect to the camera nnet = googlenet; % Load the neural net picture = camera.snapshot; % Take a picture
次に、画像のサイズを GoogLeNet のサイズ要件に合わせて 224x224 ピクセルに変更します。
picture = imresize(picture,[224,224]); % Resize the picture
GoogLeNet で画像を分類できるようになりました。
label = classify(nnet, picture); % Classify the picture image(picture); % Show the picture title(char(label)); % Show the label
既存のネットワークの再学習
GoogLeNet をその元のネットワークでは学習されていないオブジェクトに対して使用する場合は、転移学習による再学習が可能です。転移学習は、ある種類の問題に関する知識を、関連性のある別の問題に適用する手法です。この例では、ネットワークの最後の 3 層のみを変更し、手持ちの画像を使用した再学習を行っています。
ディープラーニング用の計算リソース
データのサイズや利用可能な処理能力によっては、ディープラーニング モデルの学習に数時間、数日、または数週間かかることがあります。計算リソースの選択は、ワークフローを設定する際の非常に重要な考慮事項です。
現時点では、3 つの一般的な計算オプションがあります。CPU ベース、GPU ベース、およびクラウドベースです。
CPU ベースの計算は、最もシンプルで容易に入手可能なオプションです。前のセクションで説明した例は CPU でも機能しますが、CPU ベースの計算を使用するのは、事前学習済みのネットワークを使用する単純な例に限定することをお勧めします。
GPU を使用することで、ネットワークの学習時間が数日から数時間に短縮されます。MATLAB では、追加のプログラミングなしで GPU を使用できます。Compute Capability 3.0 の NVIDIA® 製 GPU をお勧めします。複数の GPU の使用により、さらに処理を高速化できます。
クラウドベースの GPU コンピューティングは、ハードウェアを自分で購入して設定する必要がないことを意味します。ローカル GPU を使用するために記述した MATLAB コードは、いくつかの設定を変更するだけで、クラウドリソースを使用するように拡張できます。