ディープラーニングとは何ですか?人間の脳を模倣するアルゴリズム

ディープラーニングの定義

ディープラーニングは、データのパターンを複雑な多層ネットワークとしてモデル化する機械学習の一形態です。ディープラーニングは問題をモデル化する最も一般的な方法であるため、コンピュータービジョンや自然言語処理など、従来のプログラミングや他の機械学習手法の両方を超える難しい問題を解決できる可能性があります。

ディープラーニングは、他の方法が失敗した場合に有用な結果を生み出すだけでなく、他の方法よりも正確なモデルを構築でき、有用なモデルの構築に必要な時間を短縮できます。ただし、深層学習モデルのトレーニングには、大量の計算能力が必要です。深層学習のもう1つの欠点は、深層学習モデルの解釈が難しいことです。 

深層学習の明確な特徴は、トレーニング対象のモデルの入力と出力の間に複数の隠れ層があることです。ほとんどの議論では、ディープラーニングはディープニューラルネットワークを使用することを意味します。ただし、ニューラルネットワーク以外の種類の隠れ層を使用して深層学習を実装するアルゴリズムがいくつかあります。

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

ディープラーニングは機械学習の一形態であると述べました。一般的な使用法に準拠するために、非ディープ機械学習を古典的な機械学習と呼びます。

一般に、古典的な機械学習アルゴリズムは、深層学習アルゴリズムよりもはるかに高速に実行されます。古典的なモデルをトレーニングするには、多くの場合、1つ以上のCPUで十分です。ディープラーニングモデルでは、トレーニングや大規模な展開のために、GPU、TPU、FPGAなどのハードウェアアクセラレータが必要になることがよくあります。それらがなければ、モデルのトレーニングには数か月かかります。

多くの問題について、いくつかの古典的な機械学習アルゴリズムは「十分な」モデルを生成します。他の問題については、古典的な機械学習アルゴリズムは過去にひどくうまく機能していませんでした。

ディープラーニングアプリケーション

最良のモデルを作成するために現在ディープラーニングを必要とする問題の例はたくさんあります。自然言語処理(NLP)は良いものです。

2016年秋、英語-フランス語、英語-中国語、英語-日本語のペアのGoogle翻訳出力の品質は、ワードサラダの作成から、人間によるプロの翻訳の品質に近い文章の作成まで、突然劇的に向上しました。舞台裏で起こったことは、GoogleBrainチームとGoogleTranslateチームが、Google翻訳を古いフレーズベースの統計的機械翻訳アルゴリズム(古典的な機械学習の一種)の使用から、GoogleのTensorFlowフレームワークを使用した単語埋め込みでトレーニングされたディープニューラルネットワークの使用に刷新したことです。 。

それは簡単なプロジェクトではありませんでした。多くの博士レベルの研究者がモデルの作業に数か月かかり、モデルのトレーニングに数千GPU週間かかりました。また、Googleは、Google翻訳用の大規模なニューラルネットワークを実行するための新しい種類のチップであるTensor Processing Unit(TPU)を作成することに拍車をかけました。

Google Translateで対処される言語翻訳の問題に加えて、主要なNLPタスクには、自動要約、共参照解決、談話分析、形態学的セグメンテーション、固有表現抽出、自然言語生成、自然言語理解、音声部分のタグ付け、感情が含まれます。分析、および音声認識。

ディープラーニングのアプリケーションのもう1つの良い例は、画像分類です。生物は視覚野で画像を処理するため、多くの研究者は、画像認識を実行するように設計されたニューラルネットワークのモデルとして哺乳類の視覚野のアーキテクチャを採用しています。生物学的研究は1950年代にさかのぼります。

視覚のためのニューラルネットワーク分野におけるブレークスルーは、32x32ピクセル画像でデジタル化された手書き数字を認識するための7レベルの畳み込みニューラルネットワーク(CNN)であるYannLeCunの1998LeNet-5でした。より高解像度の画像を分析するには、LeNet-5ネットワークをより多くのニューロンとより多くの層に拡張する必要があります。

今日の最高の深部画像分類モデルは、HD解像度のカラーでオブジェクトの多様なカタログを識別できます。純粋なディープニューラルネットワーク(DNN)に加えて、特定のサブタスクを実行する古典的な機械学習アルゴリズムとディープラーニングを組み合わせたハイブリッドビジョンモデルを使用することがあります。

ディープラーニングで解決された基本的な画像分類以外の視覚上の問題には、ローカリゼーションによる画像分類、オブジェクト検出、オブジェクトセグメンテーション、画像スタイルの転送、画像の色付け、画像再構成、画像超解像、画像合成などがあります。

ビデオから個々のフレームを抽出し、各フレームを分類することにより、画像分類をビデオ分類に拡張できます。ビデオクリップで検出されたオブジェクトは、フレーム間で追跡できます。

2016年に執筆したGoodfellow、Bengio、Courvilleによると、ディープラーニングは、製薬会社が新薬を設計し、亜原子粒子を検索し、構築に使用される顕微鏡画像を自動的に解析するために、分子がどのように相互作用するかを予測するためにうまく使用されています人間の脳の3Dマップ。

深層学習ニューラルネットワーク

「人工」ニューラルネットワークのアイデアは1940年代にさかのぼります。本質的な概念は、相互接続されたしきい値スイッチから構築された人工ニューロンのネットワークが、動物の脳や神経系(網膜を含む)と同じ方法でパターンを認識することを学習できるということです。

誤差逆伝播法

ディープニューラルネットワークでの学習は、トレーニング中に両方が同時にアクティブになっているときに2つのニューロン間の接続を強化することによって行われます。最新のニューラルネットワークソフトウェアでは、これは最も一般的には、エラーのバックプロパゲーション、バックプロパゲーション、またはBPと呼ばれるルールを使用してニューロン間の接続の重み値を増やす問題です。

ニューロン

ニューロンはどのようにモデル化されていますか?それぞれに、接続されたニューロンの出力を変換する伝播関数があり、多くの場合、加重和が使用されます。伝播関数の出力は、入力がしきい値を超えると起動する活性化関数に渡されます。

活性化関数

1940年代と1950年代には、人工ニューロンはステップ活性化関数を使用し、パーセプトロンと呼ばれていました。現代のニューラルネットワークは、パーセプトロンを使用していると言うかもしれませが、実際には、ロジスティック関数またはシグモイド関数、双曲線正接、正規化線形単位(ReLU)などの滑らかな活性化関数を持っています。ReLUは通常、高速収束に最適ですが、学習率の設定が高すぎると、トレーニング中にニューロンが「死ぬ」という問題があります。

活性化関数の出力は、追加のシェーピングのために出力関数に渡すことができます。ただし、多くの場合、出力関数は恒等関数です。つまり、活性化関数の出力は、下流に接続されたニューロンに渡されます。

ニューラルネットワークトポロジ

ニューロンについて理解したので、一般的なニューラルネットワークトポロジについて学習する必要があります。フィードフォワードネットワークでは、ニューロンは別個の層に編成されます。1つの入力層、任意の数の非表示の処理層、および1つの出力層であり、各層からの出力は次の層にのみ送られます。

ショートカット接続のあるフィードフォワードネットワークでは、一部の接続が1つ以上の中間層を飛び越える可能性があります。リカレントニューラルネットワークでは、ニューロンは直接または次の層を介して間接的に自身に影響を与えることができます。

トレーニング

ニューラルネットワークの教師あり学習は、他の機械学習と同じように行われます。ネットワークにトレーニングデータのグループを提示し、ネットワーク出力を目的の出力と比較し、エラーベクトルを生成し、エラーベクトルに基づいてネットワークに修正を適用します。修正を適用する前に一緒に実行されるトレーニングデータのバッチは、エポックと呼ばれます。

詳細に関心のある人のために、バックプロパゲーションは、モデルの重みとバイアスに関するエラー(またはコスト)関数の勾配を使用して、エラーを最小限に抑えるための正しい方向を見つけます。補正の適用を制御するのは、最適化アルゴリズムと学習率変数の2つです。これらは通常、収束を保証し、死んだReLUニューロンの発生を回避するために小さくする必要があります。

オプティマイザー

ニューラルネットワークのオプティマイザーは通常、何らかの形の勾配降下アルゴリズムを使用してバックプロパゲーションを駆動します。多くの場合、ランダムに選択されたミニバッチの最適化(確率的勾配降下法)や勾配への運動量補正の適用など、極小値にとらわれるのを防ぐメカニズムがあります。。一部の最適化アルゴリズムは、勾配履歴(AdaGrad、RMSProp、およびAdam)を調べることにより、モデルパラメーターの学習率も適応させます。

すべての機械学習と同様に、ニューラルネットワークの予測を個別の検証データセットと照合する必要があります。そうしないと、一般化された予測子になることを学ぶのではなく、入力のみを記憶するニューラルネットワークを作成するリスクがあります。

実際のDNN

実際の問題のディープニューラルネットワークには、10以上の隠れ層がある場合があります。そのトポロジは単純な場合もあれば、非常に複雑な場合もあります。

ネットワーク内のレイヤーが多いほど、認識できる特性が多くなります。残念ながら、ネットワーク内のレイヤーが多いほど、計算に時間がかかり、トレーニングが難しくなります。

深層学習アルゴリズム

先に述べたように、ほとんどの深層学習は深層ニューラルネットワークで行われます。畳み込みニューラルネットワーク(CNN)は、マシンビジョンによく使用されます。リカレントニューラルネットワーク(RNN)は、長短期記憶(LSTM)ネットワークや注意ベースのニューラルネットワークと同様に、自然言語やその他のシーケンス処理によく使用されます。ニューラルネットワークではないランダムフォレストは、ランダムディシジョンフォレストとも呼ばれ、さまざまな分類および回帰の問題に役立ちます。

CNNニューラルネットワーク

畳み込みニューラルネットワークは通常、畳み込み、プーリング、ReLU、完全に接続された損失層を使用して、視覚野をシミュレートします。畳み込み層は基本的に、多くの小さな重なり合う領域の積分を取ります。プーリング層は、ある種の非線形ダウンサンプリングを実行します。ReLUレイヤーは、非飽和活性化関数を適用しますf(x) = max(0,x)。完全に接続された層では、ニューロンは前の層のすべての活性化に接続しています。損失層は、分類にSoftmaxまたはクロスエントロピー損失関数、または回帰にユークリッド損失関数を使用して、ネットワークトレーニングが予測ラベルと真のラベルの間の偏差にペナルティを課す方法を計算します。

RNN、LSTM、および注意ベースのニューラルネットワーク

フィードフォワードニューラルネットワークでは、情報は入力から隠れ層を通って出力に流れます。これにより、ネットワークは一度に1つの状態を処理するように制限されます。

リカレントニューラルネットワークでは、情報はループを循環します。これにより、ネットワークは最近の以前の出力を記憶できます。これにより、シーケンスと時系列の分析が可能になります。RNNには、2つの一般的な問題があります。グラデーションの爆発(グラデーションをクランプすることで簡単に修正できます)とグラデーションの消失(修正はそれほど簡単ではありません)です。

LSTMでは、ネットワークは、どちらの場合も重みを変更することにより、以前の情報を忘れる(ゲートする)か、記憶することができます。これにより、LSTMに長期記憶と短期記憶の両方が効果的に与えられ、勾配消失問題が解決されます。LSTMは、何百もの過去の入力のシーケンスを処理できます。

アテンションモジュールは、入力のベクトルに重みを適用する一般化されたゲートです。階層型ニューラルアテンションエンコーダーは、アテンションモジュールの複数のレイヤーを使用して、数万の過去の入力を処理します。

ランダムフォレスト

ディープニューラルネットワークではなく、別の種類のディープラーニングアルゴリズムは、ランダムフォレストまたはランダムディシジョンフォレストです。ランダムフォレストは多くの層から構築されますが、ニューロンの代わりに決定木から構築され、個々のツリーの予測の統計的平均(分類のモードまたは回帰の平均)を出力します。ランダムフォレストのランダム化された側面は、個々のツリーにブートストラップ集約(別名バギング)を使用し、機能のランダムなサブセットを取得することです。

ディープラーニングフレームワーク

第一原理から深層学習プログラムを作成することもできますが、特にGPUやその他のアクセラレーターでの使用に最適化されていることを考えると、深層学習フレームワークを使用する方がはるかに効率的です。卓越したフレームワークは、Googleで生まれたTensorFlowです。TensorFlowで推奨される高レベルAPIはKerasであり、他のバックエンドフレームワークでも使用できます。

FacebookなどのPyTorchは、TensorFlowの強力な代替手段であり、ネットワークのトポロジをエポックごとに変更できる動的ニューラルネットワークをサポートするという特徴があります。Fastaiは、PyTorchをバックエンドとして使用する高レベルのサードパーティAPIです。

AmazonなどのMXNetは、スケーラビリティの向上を主張するTensorFlowのもう1つの強力な代替手段です。Gluonは、MXNetに推奨される高レベルの命令型APIです。

IBM、IntelなどのChainerは、実行によってニューラルネットワークを定義し、動的ニューラルネットワークをサポートすることを考えると、ある意味でPyTorchのインスピレーションになりました。

上記のフレームワークはすべて主にPythonですが、Deeplearning4j(DL4J)は、元々Skymindからのもので、現在はApacheプロジェクトであり、主にJavaとScalaです。DL4Jは、ApacheSparkおよびHadoopと互換性があります。

ONNXは当初、交換可能なAIモデルのオープンエコシステムとして提案されました。ONNXには、交換ファイル形式に加えてランタイムがあります。