FPGA開発日記

FPGAというより、コンピュータアーキテクチャかもね! カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages/

Computer Architecture 6th Editionの7章"Domain-Specific Architecture" を読む (7.3章 DNNのニューロン・トレーニングと推論)

ヘネパタ第6版こと、"Computer Architecture 6th Edition" では、第7章でドメイン固有アーキテクチャの章が新設された。 これを機会に、しっかり読んでいこう。

Computer Architecture, Sixth Edition: A Quantitative Approach (The Morgan Kaufmann Series in Computer Architecture and Design)

Computer Architecture, Sixth Edition: A Quantitative Approach (The Morgan Kaufmann Series in Computer Architecture and Design)

7.3章はがっつりディープニューラルネットワークの内容だ。用語集も入っている。これを機にしっかり勉強しよう。

目次

これは著者が読んだ内容をまとめているだけなので、誤訳、理解不足により誤っている可能性があります!鵜呑みにしないようにお願いします。


7.3 例 : ディープニューラルネットワーク

人工知能(Artificial Intelligent:AI)は次世代のコンピューティングの次なるビッグウェーブであるだけでなく、人類の歴史の大きなターニングポイントかもしれない...知能の進化は、データ、ニューラルネットワーク、そして計算パワーによって起きるのかもしれない。 IntelはAIに投資している... 我々は、AIの普及と発展に必要な最新のアクセラレータを開発した。

人工知能は正規の切り替わりをまたいで、ドラマティックな返り咲きをした。 人工知能を、多くのロジカルループとして「組み立てる」代わりに、議論の焦点は人工知能を通過させるサンプルデータから、「マシンラーニング(Machine Learning)」へと移り変わった。 学習に必要なデータの量は考えていたものよりも非常に多くのものが必要であった。 今世紀のウェアハウススケールコンピューティング(Warehouse Scale Computing: WSC)により、数十億のユーザと彼らのスマートフォンから、十分な量のデータがインターネット上で見つかったペタバイトの情報を収納して格納し、十分なデータ量を提供している。 私たちはこの非常に多くのデータから学習を行うのに必要な計算の量を低く見積もった。 しかし、GPUというWSCのサーバに組み込まれている単精度浮動小数点の計算コストが非常に高い計算機を使うことにより、十分な計算量を提供できるようになった。

機械学習の一部分であるDNNと呼ばれる領域は、過去5年間でAI分野のスターということが出来る。 DNNは例えば言語翻訳の能力を向上させ、過去10年間の進歩に比べて、さらに進歩を遂げている(Tung, 2016; Lews-Kraus, 2016); DNNに切り替えることにより、過去5年間で達成している画像認識のエラー率は26%から3.5%に減少した(Krizhevsky et al., 2012, Szegedy et al, 2015; He et al., 2016); そして2016年には、DNNは囲碁の分野において初めて人間を倒すことが出来るプログラムを生成することが出来るようになった(Silver et al., 2016)。 多くのこれらの技術がクラウドで実行されているが、第1章で述べたように、これらはスマートフォン上でGoogle翻訳を実行することが出来る。 2017年には、新しい重要なDNNの研究結果が毎週発表されるようになっている。

本章に書かれていること以上に、DNNについて興味を持った読者は TensorFlowのチュートリアルをダウンロードして実行してみるべきだ (TensorFlow Tutorials, 2016)。そこまで野心的でない場合でも、DNNの無料のオンラインテキストを読んでみることをお勧めする。

DNNのニューロン

DNNは脳のニューロンからインスパイアされている。 人工ニューロンはデータ値と「重み(weights)」もしくは「パラメータ(parameters)」を掛け合わせたものを加算し、それを非線形関数に通して結果を出力する。 これから見ていくように、人工ニューロンはファンインとファンアウトが大きい。

画像認識のためのDNNでは、入力値は画像のピクセルであり、ピクセル値は重みが欠けられる。 多くの非線形関数が施行されたが、現在広く使われているのはf(x)=max(x, 0)というシンプルなものであり、これはxが負数であれば0となり、整数であればxそのものの値が返される。 この関数はRectifier Linearユニットもしくは ReLUという複雑な関数名で呼ばれている。

人工ニューロンクラスタは、入力値のそれぞれ異なる場所を処理し、クラスタの出力は次の人工ニューロンクラスタの入力値となる。 入力レイヤと出力レイヤの間のレイヤは「隠しレイヤ(hidden layer)」と呼ばれる。 画像処理のためには、各レイヤは異なるタイプの形を認識するレイヤと考えることが出来、エッジや角度などを認識する低レベルのレイヤから、目や鼻を認識する高レベルのレイヤへと進んでいく。 もし画像処理アプリケーションが、犬が移っている画像を認識する場合は、最後のレイヤの出力は0から1までの確率の値で表現されるか、どの犬の品種であるかを示す確率のリストとして表現される。

DNNではレイヤの数により名前が付けられる。 データ数と計算能力が低い時代には、ニューラルネットワークの層数は比較的浅かった。 図7.5は際k人のDNNのレイヤ数、重みの量およびフェッチされる重みあたりの演算量が示されている。 2017年では、いくつかのDNNは150のレイヤ数を持っている。

名前 DNNレイヤ 重みの数 演算量/重み
MLP0 5 20M 200
MLP1 4 5M 168
LSTM0 58 52M 64
LSTM1 56 34M 96
CNN0 16 8M 2888
CNN1 89 100M 1750

トレーニング v.s. 推論

前章までの議論は、既にプロダクションレベルに入っているDNNについての議論であった。 DNNの開発はニューラルネットワークアーキテクチャ; レイヤの数とその型、各レイヤの次元とデータのサイズを決めることから始まる。 専門家は多くの新しいニューラルネットワークアーキテクチャを開発するが、ほとんどの、実際にニューラルネットワークを使用する人は、既存の類似の問題に対するニューラルネットワークと同様のネットワークを選択することになる(例えば、図7.5)。

一度ニューラルネットワークの形を選択すると、次のステップでは、ニューラルネットワークグラフの各エッジの重みを決めていくことになる。 重みによって、モデルの挙動が決定される。ニューラルアーキテクチャの選択に依存して、単一のモデルで数千から何億個もの重みを決めていく必要が生じる(図7.5を参照のこと)。 トレーニングは、これらの重みをチューニングするためのプロセスであり、DNNが複雑な関数を近似するためにコストのかかる処理である (例えば、画像からその画像内のオブジェクトをマッピングする処理など)。

この開発フェーズは一般的に「トレーニング(training)」あるいは「学習(learning)」と呼ばれ、一方でプロダクションフェーズは多くの名前で呼ばれている「推論(inference)」「予測(prediction)」「scoring(採点)」「実装(implementation)」「評価(evaluation)」「実行(running)」「テスト(testing)」である。 殆どのDNNは「教師あり学習(supervised learning)」と呼ばれる、データがあらかじめ処理されており正しいラベルを取得することのできるデータ群を使って訓練が実行される。 したがって、ImageNet DNNのコンペティションではトレーニングセットは120万枚の画像と各画像は1000カテゴリに渡ってラベルが振り分けられている(Russakovsky et al., 2015)。 いくつかのラベルは非常に詳細に記述されており、例えば犬や猫の種類まで記述されている。 優勝者は、別に用意された50,000毎もの画像をDNNに通して、最も低い誤認識率を得られるかによって決定される。

ニューラルネットワークの重みづけは、トレーニングセットを使用してニューラルネットワーク内の「バックワード(backward)」処理を繰り返すことによって設定される。 この処理のことを「バックプロパゲーション(backpropagation)」と呼ばれる。 例えば、トレーニングセット内で犬の種類について情報が得られれば、DNN内でこの画像が何であるかが分かり、今後より正確な答えが出せるようにDNN内の重みが調整される。 驚いたことに、トレーニングプロセスの最初に重みを最初にランダム値で設定すべきであり、トレーニングセット内で誤認識率が十分に小さくなるまで繰り返して学習させるべきである。

数学が好きな読者のために説明すると、学習の目標は入力値が複数レイヤのニューラルネットワークアーキテクチャを通して正しい出力値にマッピングさせることである。 バックプロパゲーションは「誤差のバックプロパゲーション(back propagation of errors)」の略である。 バックプロパゲーションはすべての重みについて、入力値の勾配を計算し重みを更新することで、誤認識率を最小化させるためのアルゴリズムである。 DNNにおいてもっとも有名な最適化アルゴリズムは「確率的勾配降下法(stochastic gradient descent)」である。 このアルゴリズムによって、バックプロパゲーションによって得られた降下の勾配を最大化するような重みを比例的に設定する。 より詳細に学びたい読者はNielsen(2016)もしくはTensorFlowのチュートリアル(2016)を参照されたい。

図7.6に示すように、トレーニングには数週間を要する場合がある。 推論フェーズは、データあたりで100ms程度であり、数百万分の一の時間である。 トレーニングは、一回の推論操作に対して非常に多くの時間がかかるが、推論のための全体の計算時間はDNNを使用するユーザの数の積となり、DNNをどの程度使用するかに依存している。

トレーニングが終了すると、あなたはあなたが使用したトレーニングセットが実際に推論を実行するデータを代表したものである事を願ってDNNをデプロイする。 あなたのDNNは非常に人気があり、あなたが開発に費やした時間よりもはるかに多くの時間ユーザに使用される!

図7.6 いくつかのDNNにおけるトレーニングセットの大きさ及びトレーニングに必要な時間(landola, 2016)

データタイプ 問題領域 ベンチマークトレーニング セットのサイズ DNNアーキテクチャ ハードウェア トレーニングの時間
text[1] 単語の推論 (word2vec) 1000億単語 (Wikipedia) 2レイヤ skip gram 1 NVIDIA Titan X GPU 6.2時間
audio[2] 音声認識 2000時間の音声 (Fisher Corpus) 11レイヤ RNN 1 NVIDIA K1200 GPU 3.5日
images[3] 画像分類 100万画像 (ImageNet) 22レイヤ CNN 1 NVIDIA K20 GPU 3週間
video[4] アクティビティ認識 100万動画 (Sports-1M) 8レイヤ CNN 10 NVIDIA GPU 1ヶ月

トレーニングデータセットの無いタスクというものも存在する。例えば、現実世界のイベントにおいて未来を予測するようなタスクである。 ここでは言及しないが「強化学習(reinforcement learning(RL)」という有名なアルゴリズムが2017年には使用されるようになっている。 トレーニングセットによって学習する方式の代わりに、RLは現実世界において動作し、報酬関数と呼ばれる、あるアクションから状況が良くなるか悪くなるかを決定する関数から信号を受け取る。

急速に変化するフィールドにおいて予測をすることは難しいが、3種類のDNNが2017年には主流になっている: 「多層パーセプトロン(MultiLayer Perceptron:MLP)」、「畳み込みニューラルネットワーク(Convolutional Neural Networks: CNNs)」、「再帰ニューラルネットワーク(Recurrent Neural Networks: RNNs)」である。 これらはすべて教師あり学習であり、トレーニングセットに依存するものである。