Title Author(s) GPGPUを用いたニューラルネットワーク学習の高速化に関する研 究 土田, 悠太 Citation Issue Date URL 2013 http://hdl.handle.net/10466/13832 Rights http://repository.osakafu-u.ac.jp/dspace/ 大阪府立大学博士論文 GPGPU を用いたニューラルネットワーク学習 の高速化に関する研究 2013 年 1月 土 田 悠 太 i 目次 第 1 章 緒論 1 第 2 章 各階層内部のニューロンに対する並列化手法 5 2.1 緒言 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2.2 関連研究 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.3 階層型ニューラルネットワークと学習法 . . . . . . . . . . . . . . . . . . . 6 2.4 GPGPU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 2.5 比較手法:ネットワークを複数個学習する手法 . . . . . . . . . . . . . . . 12 2.6 提案手法:ネットワーク内部を並列化する手法 . . . . . . . . . . . . . . . 16 2.7 シミュレーション実験 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 2.8 2.7.1 中間層 · パターン数の変更 . . . . . . . . . . . . . . . . . . . . . . . 21 2.7.2 入力層 · 出力層数の変更 . . . . . . . . . . . . . . . . . . . . . . . . 23 結言 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 第 3 章 パターン毎の学習に対する並列化手法 29 3.1 緒言 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 3.2 パターン毎の学習アルゴリズム . . . . . . . . . . . . . . . . . . . . . . . . 29 3.3 3.2.1 GPGPU への実装 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 3.2.2 スレッド処理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 CPU によるシミュレーション . . . . . . . . . . . . . . . . . . . . . . . . . 33 3.3.1 学習 (I):XOR 学習 3.3.2 学習 (II) 3 次元データ入力 . . . . . . . . . . . . . . . . . . . . . . . 35 3.3.3 学習 (III) 25 次元の乗算乱数入力 . . . . . . . . . . . . . . . . . . . 36 . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 3.4 比較実験 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 3.5 結言 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 ii 第 4 章 ツイート情報を用いた異常気象情報の捕捉 45 4.1 緒言 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 4.2 ツイッターとその投稿データを用いた応用研究 4.3 ツイッターによる分類手法 4.4 ツイートを用いた分類に関する実験 4.5 CPU による実行結果 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 4.6 結言 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 . . . . . . . . . . . . . . . 45 . . . . . . . . . . . . . . . . . . . . . . . . . . 46 . . . . . . . . . . . . . . . . . . . . . 47 第 5 章 結論 53 謝辞 55 参考文献 57 iii 図目次 2.1 階層型ニューラルネットワーク . . . . . . . . . . . . . . . . . . . . . . . . 2.2 シグモイド関数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 2.3 CPU と GPU の演算能力の比較 [50] . . . . . . . . . . . . . . . . . . . . . . 13 2.4 CPU と GPU のメモリアクセス速度の比較 [50] . . . . . . . . . . . . . . . . 13 2.5 CUDA のスレッドモデル . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 2.6 CUDA のメモリモデル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 2.7 複数ネットワークの同時学習手法 . . . . . . . . . . . . . . . . . . . . . . . 16 2.8 複数ネットワークの同時学習手法の処理時間 2.9 ネットワーク内部の並列化 . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 9 . . . . . . . . . . . . . . . . 17 2.10 パターン毎の並列化手法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 2.11 提案手法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 2.12 提案手法に対する処理時間 . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 2.13 中間層のニューロン個数とパターン数を変更した場合の実行時間の比較 . . 25 2.14 中間層のニューロン個数とパターン数を変更した場合の実行時間の比較 (GPU による実行結果) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 2.15 入力数と出力数を変更した場合の実行時間の比較 . . . . . . . . . . . . . . 26 2.16 入力数と出力数を変更した場合の実行時間の比較 (GPU による実行結果) . 26 3.1 それぞれのパターンの学習に対する並列化 . . . . . . . . . . . . . . . . . . 34 3.2 それぞれのパターンの学習に対する並列化 (上面図) . . . . . . . . . . . . . 35 3.3 3 次元データ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 3.4 学習 (I) の 2 乗誤差 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 3.5 学習 (II) の 2 乗誤差 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 3.6 学習 (III) の 2 乗誤差 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 3.7 学習 (I) の処理時間 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 iv 3.8 学習 (II) の処理時間 3.9 学習 (III) の処理時間 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 4.1 抽出した単語のヒストグラム . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 . . . . . . . . . . . . . . . . . . . . . . . . . 48 v 表目次 2.1 GeForce GTX480 の仕様 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 2.2 計算機の仕様 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 2.3 パターン数 · 中間層を変更した時の実行結果 . . . . . . . . . . . . . . . . . 22 2.4 入力数 · 出力数を変更した時の実行結果 . . . . . . . . . . . . . . . . . . . . 24 3.1 XOR 学習 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 3.2 3 次元データの中心座標 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 3.3 誤差逆伝播段階での実行スレッド数 . . . . . . . . . . . . . . . . . . . . . . 40 3.4 実行結果 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 4.1 収集されたツイート . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 4.2 「陽性」のツイート . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 4.3 ニューラルネットワークの条件 . . . . . . . . . . . . . . . . . . . . . . . . 49 4.4 実験結果 (平均個数) 4.5 実験結果 (正解率) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 4.6 CPU による実験結果 (平均個数) . . . . . . . . . . . . . . . . . . . . . . . . 50 4.7 CPU による実験結果 (正解率) . . . . . . . . . . . . . . . . . . . . . . . . . 50 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 1 第 1 章 緒論 これまでに,ニューラルネットワーク (Neural Network, NN)[1] は様々な分野で応用され ている。長谷川らによる顔画像認識 [2] や,山川らによるガスセンサアレイを用いた匂いの パターン認識 [3] ,また高橋らによる感情音声認識への応用 [4] などが挙げられる。しかし, NN 学習には,時間を要するという問題点がある。一方で,近年,画像処理の発展によっ てグラフィックボードに搭載されている画像処理を専門とする演算装置 GPU(Graphics Processing Unit) の性能が格段に向上している。GPU には,数百の演算回路が内蔵され ているという特徴があり,その性能を引き出すためには,これらを同時に利用されるよう に計算処理を並列化する必要がある。そこで本論文では,NN アルゴリズムを並列化が可 能なように変更し GPU を用いることで学習に要する時間を短縮することを目的とする。 NN はニューロンと呼ばれるユニットを複数個結合した構造を持ち,多変数の入力信号 から非線形関数に従う多変数を出力する機械学習手法である。ニューロンでは,複数の信 号を入力し,その入力信号の数に対応する重み係数との積和を入力とするシグモイド関数 の値を出力とするものである。今回対象とする NN は,入力層,中間層,出力層の 3 層構 造で,中間層と出力層部分にニューロンが存在する 3 層パーセプトロンである。入力信号 と対応する教師信号の組をパターンとすると,複数の異なるパターンを学習する場合はそ の度に NN の出力信号とそれぞれの教師信号の誤差が小さくなるように重み係数の修正が 行われる。これを繰り返し行うことで,学習が進められる。学習に要する時間とは,各層 に存在するニューロンの個数と,パターン数,およびその繰り返し回数の積に依存する。 また,近年 GPU を汎用に用いる技術である GPGPU(General-Purpose computing on Graphics Processing Unit) [5] が注目されている。GPGPU は,3DCG や動画処理の発展, またコンピュータゲームの進歩に伴って,GPU が汎用の CPU (Central Processing Unit) より処理速度が向上しており,今後より発展が期待される技術である。GPGPU は,GPU の特徴である複数個実装された単純な演算回路および高速なメモリといった資源を有効に 活用する技術であり,複数の処理を同時に処理するルーチンの最小単位であるスレッドを 2 準備することで,高速化が容易に行える点が利点として挙げられる。 NN を並列化する手法に関する従来手法として,Witbrock らによる SIMD 並列コンピュー タ (GF11) による実装 [6] ,大道らによるホップフィールドネットワークの実装 [7] ,複数計 算機を並列に構成したニューラルネットワーク学習法 (山森ら [8] , Singer[9] , 吉田ら [10] ) が 提案されている。複数計算機を用いた場合と比較して GPGPU による並列計算の実装は, メモリ構成の違いや,計算に用いる計算機の数が学習の間固定されているため,従来手 法をそのまま GPU へ実装することは困難である。NN の GPU への実装手法は,Oh らに よって提案され [11] ,その後 Davis によってこの提案が体系的にまとめられた [12] 。しかし ながら,これらの従来研究では,学習済みの NN に対しての GPGPU の利用を想定して おり,学習に関する高速化は提案されていない。そこで本論文では,NN の学習に必要な 時間を短縮するために,学習過程を並列化し,GPGPU に実装することで高速化する手法 を提案する。本論文で対象となる NN 学習中の計算に必要な時間を3つに大別すると以下 になる。1つ目は,異なる重み係数を持つ NN を学習するのに必要な時間である。2つ目 は,NN 内部のニューロンの計算に伴う時間である。同一の層に含まれるニューロンの計 算は,入力と重み係数の値が異なるものが,同一の計算式で行われ,その計算を繰り返し 実施する必要がある。3つ目は,1つの NN に対し,複数のパターンを提示するのに必要 な時間がある。これら3つの時間のうち,1 つ目の時間を短縮するには,ニューラルネッ トワーク全体を複数個並列化させたものが考えられ,これは同期等特別な手法が必要無 いため本論文において,従来手法の代表としての比較手法とする。本論文ではまず,2つ 目の時間を短縮するために NN 内部の並列化手法,および3つ目の複数パターンを同時に 学習する手法について述べた後,さらにツイッターへの適用事例について述べる。以下, 本論文の構成の概要を述べる。 第2章では,まず比較手法として,1つ目の時間を短縮する手法について述べる。階層 型 NN を学習する際に,重み係数の初期値によって二乗誤差が最小値に収束しない現象が 発生する。通常は試行錯誤によって最適な重み係数の集合を探索する必要がある。そこ で,重み係数の初期値が異なる NN を複数用意し,それらを GPGPU によって並列に処 理する方法が考えられ,これを比較手法とする。次に,NN における各層の内部に存在す るニューロンを並列化することで,処理時間を短縮する手法を提案する。各層の計算はそ れぞれの前段の層の値がすべて揃うまで,進めることが出来ない。しかし各層の内部に位 置するニューロンの出力値は,それぞれの値を用いることなく計算する事が可能なため, 3 計算上独立である。そこで,並列化する計算の最小単位を,入力値と重み係数から1つの 値を出力するまでのニューロンの計算と設定する。各層におけるニューロンの個数の最大 個数をスレッドの個数として指定した。また,前の層における結果として出力される値を すべて次の層で使用するために,各層毎に同期を取る必要がある。これらの手法の有用性 を検証するために,並列化の有無を変えて数値実験を行い,処理速度を比較する。 第3章では,複数のパターンを同時に学習する手法について提案する。第2章におい て述べた手法では,各ニューロンの処理は並列で行われているが,それらのニューロンに 接続されている重み係数を更新する処理は逐次的に処理する手法をとっていた。そこで, パターン毎に更新される重み係数に注目し並列化するように,逆伝播段階の計算を改良 する。具体的には,同一層に含まれる個々のニューロン内に含まれる重み係数の個数と, 各層のニューロン個数との積の数だけ同時に計算する手法を提案した。順伝播の段階では パターン毎に同一の重み係数を用いて,出力層の値を計算し,逆伝播ではパターン毎に重 み係数を求めてそれらの和を用いて更新を行うアリゴリズムに変更した。そのため,従来 の個々のパターンに対し逐次的に重み係数を更新するアルゴリズムおよび,パターン毎の 出力と教師信号の誤差の和を用いるバッチ型とは異なるため,乱数によってテストデータ を作成し,最適値に収束するかどうか確認する。 第4章では,提案手法の有効性を検証するために,入力信号の個数が多い例として,ツ イッターの情報を用いた異常気象情報の捕捉を取り上げた。ツイッター [13] とは,情報サー ビスの一種で,140 文字以内の「ツイート」と呼ばれる短文を投稿し,共有することがで きるサービスである。ツイートには様々な情報が含まれ,中には災害情報も含まれており, そのようなツイートから,いち早く災害情報を取得するために,前章までの提案手法が 有用であると考えられる。本論文では,2012 年 1 月 11 日に鳥取で発生した大雪情報の検 出を試みた。単語は,形態素解析エンジン MeCab を用いて, 「名詞」と「形容詞」を抽出 し,全ツイートで使用頻度が大きなものを採用した。これらをツイート毎に含まれる単語 の有無をベクトルにしたものを特徴ベクトルとして NN に入力し,収集したツイートが, 単語「鳥取」を含むツイートを「陽性」,他を「陰性」と出力とした。入力する特徴ベク トルには「鳥取」を含まない状態で学習し,その効果を検証する。ここで用いられる特徴 ベクトルの次元数は 890 におよび,通常の学習手法では非常に時間がかかるため,本手 法に対し,実データを用いてどの程度時間が短縮されるかを比較する。 最後に第5章では,本研究の総括と今後の展望について述べる。 5 第 2 章 各階層内部のニューロンに対する 並列化手法 2.1 緒言 本章では,ニューラルネットワークと GPGPU の概要について説明し,その後ニュー ラルネットワーク学習の時間を短縮するための手法のうち,1つのネットワーク内部に実 装されるニューロンの並列化手法について述べる。 ニューラルネットワークの並列化手法として、複数のニューラルネットワークを,GPGPU によって同時に処理する方法が考えられる。この方法では,各ニューラルネットワーク間 で,データを受け渡す必要や,互いの結果を必要としないため,容易に並列化する事が可 能であるため,ここまでを従来手法の代表として比較手法とする。ただし,この比較手法 については,GPGPU の階層構造による実行時間への影響を考慮する必要がある。それゆ え,まず予備実験としてスレッドの割り当て方による学習時間の差を検証した 以上から,一つあたりのスレッドの負荷を分散させるため,ネットワークの内部を並列 化すること提案する [14]–[18] 。これは,ネットワークにおける各層の内部に存在するニュー ロンが計算上独立であることに注目し,それらを並列化することで実現されている。この 手法の有用性を検証するために異なるネットワーク構造による計算時間の差を検証した。 まず,2.2 節で本章における関連研究についてまとめる,次に 2.3 節にて,階層型ニュー ラルネットワークと学習法につい述べ,2.4 節で,GPGPU と CUDA について説明し,2.5 節でネットワークを複数個学習する手法を述べる,そして,2.6 節で,提案手法であるネッ トワーク内部を並列化する手法について述べる。2.7 節では本章で取り上げた手法に対し て,CPU との計算時間の比較を行った後,2.8 節を結言とする。 2.2 関連研究 6 2.2 関連研究 NN を並列化する手法に関する従来手法として,Witbrock らによる SIMD 並列コンピュー タ (GF11) による実装 [6] ,大道らによるホップフィールドネットワークの実装 [7] ,複数計 算機を並列に構成したニューラルネットワーク学習法 (山森ら [8] , Singer[9] , 吉田ら [10] ) が 提案されている。複数計算機を用いた場合と比較して,GPGPU を用いた場合とメモリ構 成の違い等があるため,そのままでは GPU への実装は困難である。 GPU へ実装する手法は,Oh らや Luo らによって提案され [11],[19] ,その後,Davis によっ てこの提案が体系的にまとめられた [12] 。また,Hongboon らによって CUDA を用いた実 装が提案され [20] ,また,Brandstetter らによって RBF ネットワークの実装が報告されて いる [21] 。しかしながら,これらの従来研究では,学習済みのニューラルネットワークも しくは,学習が不要なニューラルネットワークの利用に対してのみに GPGPU を利用し たもの,特定の関数の近似に限定したものであるように,階層型ニューラルネットワーク 学習に関する高速化は提案されていない。 2.3 階層型ニューラルネットワークと学習法 従来より,ニューラルネットワーク [1],[22]–[28] は様々な分野で応用されている。長谷川ら による顔画像認識 [2] や,山川らによるガスセンサアレイを用いた匂いのパターン認識 [3] , また高橋らによる感情音声認識 [4] ,井上らによるカラー画像を扱うために,複数個の学習 済みニューラルネットワーク (セルラーニューラルネットワーク) を組み合わせた研究 [29] , Jung による文字認識への応用 [30] ,需要予測への応用(木村ら [31] ,馬場ら [32] ),衛星画像 を用いた土地利用分類への応用 [33]–[39] などが挙げられる。 そこで,本節では,本研究の基礎となる,階層型ニューラルネットワークとその学習法 について述べる。ニューラルネットワークは,ニューロンと呼ばれるユニットを複数個結 合させる構造を持ち,多変数の入力信号を用いて非線形関数に従う多変数を出力するよう な機械学習手法である。ここでニューロンとは,複数の入力信号とし,その入力信号の数 に対応する重み係数を持ち,それらの積和によって,1 つの値を出力するものである。今 回対象とするニューラルネットワークは,入力層,中間層,出力層の 3 層構造で,中間層 と出力層部分にニューロンが存在する教師ありの 3 層パーセプトロンである。図 2.1 に階 2.3 階層型ニューラルネットワークと学習法 7 層型ニューラルネットワークの模式図を示す。 図において,入力層は l 個の入力信号,中間層に m 個のニューロン,出力層に n 個の ニューロンが配置されている。パターンによる値を区別するため,P 個のパターン中 p 番 目のパターンに対して,入力信号 xpi (i = 1, · · · l) とする。中間層に位置するニューロンで は,その出力値 yjp (j = 1, · · · m) を,入力層から中間層への重み係数 vij を用いて, 次式の ように計算する: σjp = l ∑ vij xpi (2.1) i=0 ( ) yjp = f σjp (2.2) ただし, xp0 は中間層における閾値 v0j に対する定数で,全パターンで等しく xp0 = −1 とす る。f (x) は式 (2.3) に示すようなシグモイド関数であり,図 2.2 に図示する: f (x) = 1 1 + e−x (2.3) 最終的なネットワークの出力値 zk (k = 1, · · · n) は,出力層に位置するニューロンの出力 に相当し,中間層から出力層への重み係数 wjk を用いて τkp = m ∑ wjk yjp (2.4) j=0 zkp = f (τkp ) (2.5) のように計算する。ただし,y0p = −1 は出力層における閾値 w0k に対する定数で,全パ ターンで同じ値をとる。重み係数 vij ,wjk は,このようにそれぞれの前段の層との間に位 置する結合重みであるが,本論文では,これらの重み係数をそれぞれに該当するニューロ ンが持っているとして議論を進める。すなわち,中間層のニューロンは,vij を持ち,式 2.2 を計算し,yjp を出力するオブジェクトであり,出力層のニューロンは,wjk を持ち,式 2.5 を計算し,zkp を出力するオブジェクトである。 ここでは,従来手法としてオンライン学習を想定しているため,重み係数 vij ,wjk は,パ ターン毎に更新される。重み係数の更新は以下に示されるバックプロパゲーション法を用 いた [1] 。パターン p の入力信号に対応する出力の教師信号 dpk を与えた時,評価関数は 1∑ p E = (zk − dpk )2 2 k=1 n p (2.6) 2.3 階層型ニューラルネットワークと学習法 8 である。重み係数を評価関数が小さくなるように変化させるため,最急降下法より出力層 p の重み係数の更新量 ∆wjk は ∂E p ∆wij = −η ∂wij (2.7) ここで, η は学習率である。合成関数の微分公式より ∂E p ∂E p ∂zkp ∂τkp = · · ∂wij ∂zkp ∂τkp ∂wjk = (zkp − dpk ) · f ′ (τkp ) · yijp (2.8) シグモイド関数の微分より f ′ (x) = f (x)(1 − f (x)) (2.9) epk = dpk − zkp (2.10) また,誤差信号は p のように計算されるので,結果として ∆wjk は p ∆wjk = ηyjp epk zkp (1 − zkp ) (2.11) となる。これを用いて,重み係数は, p new old wjk = wjk + ∆wjk (2.12) p new のように更新される。次に中間層の重み係数の更新量 ∆vij は,出力層で更新された wjk を用いて ∂E p ∆vij = −η ∂vij p ∂E p ∂yj = −η p · p ∂yj ∂σj n ( ∑ ∂E p = −η ∂τkp k=1 n ( ∑ ∂E p = −η ∂zkp k=1 = −η n ∑ ( k=1 (2.13) ∂σjp · ∂vij ) ∂yjp ∂σjp · p· ∂σj ∂vij ) ∂yjp ∂σjp ∂zkp ∂τkp · p· p · p· ∂τk ∂yj ∂σj ∂vij ∂τ p · kp ∂yk ) ′ p new (zkp − dpk ) · f ′ (τkp ) · wjk · f (σj ) · xpi (2.14) 2.3 階層型ニューラルネットワークと学習法 9 よって, ∆vijp = ηxpi yjp (1 − yjp ) n ∑ new p p wjk ek zk (1 − zkp ) (2.15) k=1 となり重み係数は, vijnew = vijold + ∆vijp (2.16) のように更新される。学習は一組の入力層と教師信号を 1 パターンとして,異なるパター ンに対して繰返し計算し重みを更新することで行われる。学習回数は,P パターンの計算 と更新を 1 ステップとし,s ステップ学習するとき,上述の処理は P s 回繰り返される。 Supervisor Input Signals Output Signals Threshold Value Input Layer Hidden Layer Output Layer 図 2.1: 階層型ニューラルネットワーク 10 1 0.5 0 -10 -5 0 5 10 図 2.2: シグモイド関数 2.4 GPGPU GPGPU(General-Purpose computing on Graphics Processing Units) は,画像処理を専 門とするグラフィックボードに実装された演算装置 GPU(Graphic Processing Units) を, 一般の計算処理に利用する技術である [5],[40]–[42] 。かつてパーソナルコンピュータにおいて, 画像を表示させるとき,ビデオメモリ (VRAM) に直接 CPU(Central Processing Unit) が アクセスして描画を行なっていたものを補助する目的でグラフィックアクセラレータ [43] と呼ばれるチップを搭載し,その負担を軽減していた [44] 。そして,3DCG に関する需要が 高まるにつれて,グラフィックアクセラレータに演算を行わせる必要性が増加した。1994 年にソニー・コンピュータエンタテインメント社が開発したプレイステーション [45] は,ジ オメトリエンジンを搭載し,家庭で 3D 表示のゲーム楽しむコンセプトを定着させた。そ の頃,パーソナルコンピュータにおいても 3D 表示の要望が高まり,1996 年,マイクロソ フト社は Direct3D[46] を発表した。Direct3D は,ソフトウェア API であり,グラフィック チップそのものを規定するものではなかったが,その高度化に伴ってグラフィックチップ に処理できる演算に対しても高度化が為されてきた。グラフィックチップが GPU[47] と呼 2.4 GPGPU 11 ばれる様になったのは 1999 年ごろで,座標変換と光源からピクセルの明るさを求める光 源演算をハードウェアが対応するようになってからである。座標変換や光源演算は,3次 元上に位置する座標毎に同一の計算をする必要性から,演算回路を複数個準備することで 高性能化が図られた。そして 2000 年台に入って,表現力の向上を求めて固定機能シェー ダから,画像処理に関するプログラミングが可能なプログラマブルシェーダへの移行が進 んだ。プログラミングシェーダの登場により,演算の自由度が高くなるに連れて,画像処 理のみならずに,他の数値計算にも利用する動き [48],[49] がみられた。またそのころから図 2.3 のように,CPU の演算能力が頭打ちになった [50] 。 GPGPU は,GPU の特徴である数百個実装された単純な演算回路,および高速なメモ リ (図 2.4 参照 [50] ) といった,資源を有効に活用する技術であり,画像処理における,そ れぞれの座標に対する演算を同時に処理するように,複数の処理を同時に処理するルー チンの最小単位であるスレッドを準備し,それらを並列に実行させることで,高速化が容 易に行える点が利点として挙げられる。GPGPU を容易に実現するため,GPU メーカで ある NVIDIA 社が CUDA(Compute Unified Device Architecture ) と呼ばれる統合開発環 境を無償で提供している [51],[50] 。これは同社から発売されている GPU を用いて並列演算 処理を容易に実行することが可能である。そのため,Shuai ら [52] は,この CUDA を通し て GPGPU の特徴を,CPU との性能の比較をすることで検証している。また,GPU 等 のハードウェアにこだわらない並列コンピューティングのためのフレームワークとして OpenCL が提案されている [41] 。計算手法は特にハードウェアに依存するものでは無いが, 本論文で述べられる手法および検討は全て CUDA を用いて行われる。 先に述べたように,GPGPU では,複数のスレッドを同時に実行させることで,高速化 を実現している。それぞれのスレッドは同一のプログラムが実行される,SPMD(Single Program Multiple Data) モデルに準じている。このプログラムを記述した関数をカーネル 関数 (以下,カーネル)と呼ぶ。GPGPU では複数のカーネルは座標付きの空間で管理さ れる。つまり,ハードウェアの構成上,複数の階層に分け,それぞれの階層上に2次元も しくは3次元の空間が存在する。図 2.5 にスレッドの実行モデルを示す。本論文ではハー ドウェアとして GPU は 1 台のみ使用するため,最上位の階層は 1 つで,その階層を「グ リッド」と呼ぶ。グリッドの内部には, 「ブロック」が 3 次元 (gx , gy , gz ) 上に配置されて いる。図ではグリッド上の z 軸の大きさは 1 として表現している。ブロックの内部にはス レッドが 3 次元上 (bx , by , bz ) に配置される。ブロックとグリッドの階層は,GPU の内部 12 に構成されるメモリの実装が異なるために区別している。図 2.6 に CUDA のメモリモデ ルを示す [5] 。ブロック内のスレッド同士は,シェアードメモリが共有出来るが,ブロック 間では独立している。またブロックでは,それらのスレッド同士で同期を取る関数である “ syncthreads()” がある,なお,これらのモデルは OpenCL においても同様である。それ ぞの用語を OpenCL と対応づけると, 「グリッド」は「NDRange」, 「ブロック」は「ワーク グループ」, 「ローカルメモリ」は「プライベートメモリ」, 「シェアードメモリ」は「ロー カルメモリ」となる。 GPGPU を用いた応用例として,宮永による文字認識システムの一般化ハフ変換への 応用 [48] ,下馬場らによる光学分野での解析手法への応用 [53] ,筒井らによる進化型計算 に対する割り当て問題の解法などへの利用 [54],[55] ,二星らによる気象モデル計算への利用 [56] ,上村らによるデータベースの設計への応用 [57] などがあり,また機械学習手法への応 用例としては,岩村らによる PCA-SHIFT の実装 [58] ,Langdon らによるバイオインフォ マティクスへの応用 [59] ,Catanzaro らによるサポートベクターマシンへの応用 [60] ,船津 らによる PCA-L1 アルゴリズムの実装 [61] ,筒井ら須藤らによる似顔絵の自動生成への応 用 [62] ,また,蔵野らによる遺伝的アルゴリズムへの利用 [63] , Xiao らによる確率的勾配 降下法のオンライン学習への利用 [64] ,YuiHo らによるセルラー NN を GPGPU への実装 [65] ,Raina らによる教師なし学習手法の実装 [66] などがある。 2.5 比較手法:ネットワークを複数個学習する手法 本節では,複数のニューラルネットワークを同時に学習することで,重み係数の初期値 依存による学習にかかる時間を高速化する手法について述べる。 階層型ニューラルネッ トワーク学習の際に,重み係数の初期値によって正しい解が学習されずにローカルミニマ ムに収束する問題が発生する。そのため,通常は試行錯誤によって初期重み係数を設定す る必要がある。そこで,重み係数の初期値が異なるニューラルネットワークを複数個準備 しそれらを同時に処理する事でこの試行錯誤に必要な時間を短縮することが可能である。 図 2.7 に並列化の模式図を示す。その際,それぞれの重み係数の初期値を変えて N 個の ネットワークを同時に学習する。この手法の 1 スレッドは,一つのニューラルネットワー クの順伝播から,逆伝播までのステップを各パターン毎に逐次処理するものである。 CUDA では,スレッドが階層構造で管理される。階層は,最上位にグリッドが 1 つ存 2.5 比較手法:ネットワークを複数個学習する手法 図 2.3: CPU と GPU の演算能力の比較 [50] 図 2.4: CPU と GPU のメモリアクセス速度の比較 [50] 13 2.5 比較手法:ネットワークを複数個学習する手法 14 Block Thread ・・・ ・・・ ・・・ ・・・ ・・ ・ ・・・ Grid 図 2.5: CUDA のスレッドモデル (Device)Grid Block(0,0) Block(0,1) Shared Memory Register Thread(0,0) Register Thread(0,1) Shared Memory Register Thread(0,0) Register Thread(0,1) Host Local Memory Local Memory Local Memory Global Memory Constant Memory Texture Memory 図 2.6: CUDA のメモリモデル Local Memory 2.5 比較手法:ネットワークを複数個学習する手法 15 在し,グリッドの中にブロックが論理的に 232 個設定できる。ブロックの中に,最大 1024 個のスレッドを格納するが,ニューラルネットワークを実装する際,内部の分岐命令等の 影響により,その割り当て方によってパフォーマンスに差が生じると考えられる。また, Shared memory と呼ばれる,ブロック内のスレッド同士で共有するメモリ領域が CUDA によって実装されているが,これを使用する事によって,パフォーマンスが大きく向上す る。そこで予備実験として,N 個のニューラルネットワークを同時に学習する際,整数 b を使ってグリッド内のブロック数を N/b 個,ブロック内のスレッド数を b 個割り当てて処 理するとき,b による処理時間の影響を検証した。 予備実験ではニューラルネットワークを,入力層の数 l = 2,中間層の数 m = 3,出力 層数 n = 1 で,パターン数 P = 4 を 2200 ステップ学習する。この時,通常はネットワー クの出力層の値と教師信号との誤差が一定値より下回れば学習を終了させるが,本論文 ではネットワークの規模や学習させる内容を限定しないので,全てのネットワークの学習 は,誤差の収束度に関わらず指定したステップ数まで学習を進めたとしている。この演算 を Epoch として,Epoch 数 N を変えたときの計算時間を,1 ブロックあたりのスレッド に割り振る数 b を変えて計測した。図 2.8 に計測結果を示す。 実装仕様上,N < b の時,グリッド内のブロック数 N/b = 1 として計算している為,実 際に計算される Epoch 数は N = b となる。そのため,b = 20 で N = 1, 10 の時,Epoch 数は 20 である。b = N の場合は,N 個全ての Epoch を 1 つのブロックに割り振る場合で ある。b = 1 の場合,つまり,N 個の Epoch をそれぞれ,ブロック内に 1 つずつのスレッ ドとして割り当てる場合に 実行時間が N = 40 以降,N に比例して必要であることが確 認できた。また,b = N の場合も,比較的パフォーマンスが低下していることがわかる。 これはメモリのアクセス回数の影響であると考えられる。 並列化の目標として,N に依存せず一定の処理時間を持つことが挙げられる。b = 1 を 除いて,その目標は達成されていると考えられる。また,b によって,処理時間が短縮さ れることが確認できた。検証の結果,b = 5 が最も処理時間が短縮されている。これは, ネットワーク内部の構造によって,CUDA のコンパイル時の最適化が異なる為と考えら れる。またグリッドとブロックの並列化においてそれぞれの配分が自動的に最適化されて いる為に b によって差が生じていると考えられる。 予備実験によって,比較手法では,b の割り当てによって処理時間に差が見られること が確認できた。この時,N > 20 において b = 5 が一番処理時間が短いことから,グリッ 16 0 1 Neural Network Pa ra ll el i ze 1 thread N-1 図 2.7: 複数ネットワークの同時学習手法 ドの数とグリッドに割り当てるスレッドの数を適切に設定する必要があると考えられる。 実装上,シェアードメモリはブロック毎に一定量存在し,ネットワーク一つ当たりに必要 なメモリ量の b 倍使用する。シェアードメモリはグローバルメモリと比較して容量が小さ いため,学習するニューラルネットワークの規模に応じて b は低く設定する必要がある。 2.6 提案手法:ネットワーク内部を並列化する手法 前節で述べた手法では,ニューラルネットワーク全体を一つのスレッドに含めて演算し ている。そこで,ニューラルネットワークの内部を並列化することでさらに高速化する手 法を提案する。図 2.9 に階層内部の並列化の模式図を示す。ここで,階層方向の計算を列 (Column),階層中の各ニューロンを行 (Row) で表す。各行 (Row) は,互いに独立である ため,同時に計算することができる。図中の四角の枠で囲まれた部分を 1 スレッドとして 定義し,並列に計算する。つまり,同一の行に位置する各ニューロの計算である式 (2.2) および式 (2.5) は,各層において互いに出力値結果を必要としないため,同時に計算する ことができる。この手法は,従来研究 [8] においてユニット並列モデルと呼ばれる手法に 2.6 提案手法:ネットワーク内部を並列化する手法 Processing Time(msec) 500 500 400 17 b=1 b=5 b=20 b=N m:allocate in block 300 200 100 0 1 20 40 60 80 100 120 The number of network N 図 2.8: 複数ネットワークの同時学習手法の処理時間 対応する。 計算後は,次の列 (Column) の計算をするが,次の列 (Column) に行くには,前列の全 ての行の計算が終わるまで,一時停止する必要がある。そこで閉塞信号を設置し,前列の 計算が全て終わるまで次の列 (Column),すなわち別の階層に処理が移らないようにした。 逆伝播に関しても同様に,行 (Row) に対して同時に計算することができる。この場合 も,前の列の全てのスレッドが係数更新が完了するまで,次の列に移らないように閉塞信 号を設置する。 順伝播に関しては,別のパターンを計算する際も共通の重み係数を使うことで,独立で あるので,パターン毎のネットワーク計算も並列化が可能であると考えられる。図 2.10 に パターンに対する並列化の模式図を示す。それぞれのパターンに対し同一のネットワーク を並列に計算することで,高速化を図る。この手法は,従来研究 [8] において学習セット並 列モデルと呼ばれる手法に対応する。図においては,誤差逆伝播は,順伝播と同一のネッ トワークを逆にたどる為,省略している。この時,それぞれのニューロンの出力値及び出 力層の出力は,パターン毎に別々に保存される。更新は,出力層と中間層の重み係数を逐 次更新する。各層のニューロンは同時に処理されるが 1 ニューロンが同時に更新されない ようにする必要がある。そこで,誤差逆伝播法による各ニューロンの重み係数の更新は, 排他的に計算する必要があるため,ニューロンに対して閉塞信号を設置し,該当ニューロ 2.6 提案手法:ネットワーク内部を並列化する手法 18 ンが計算されている間は他のスレッドがアクセスしないようにした。したがって,一つの 階層中でとあるパターンによって内部の 1 ニューロンが更新されている間,別のパターン が,内部の別のニューロンを更新することで,ニューロンの個数分だけ,高速化が期待で きる。各列に対して存在しない段が生じる時は,前の列との間にある閉塞信号で一時停止 する。各列の段数の最大値 Rmax , パターン数 p とすると,1 ネットワークあたりのスレッ ド数 T は,T = Rmax × p である。図 2.11 に最終的な並列化の模式図を示す。図において, 1 つのニューラルネットワーク中での入力数と出力数はパターン数で並列化されており, ネットワークの構造は,各層の最大のニューロン個数で並列化されている。そのニューラ ルネットワーク構造がさらに N 個だけ並列化されている。 グリッドとブロックには,3次元的にスレッドを割り当てることができる。但し,グ リッドの z 方向は,1 なので,合計 5 次元で配置される。前節の予備実験と同様に自然数 b を用いて,ブロックに (Rmax × b × 1),グリッドに (N/b × p) を配置して,計算時間を計 測した。各閉塞信号,各ニューロンの出力値,及び逆伝播で使用される変数 δk は,各ス レッドで共有する必要があるため,スレッド間での通信が高速なメモリ領域である Shared memory に格納される。また,重み信号は,同時に学習するネットワークの数だけ必要で あり,Shared memory のスコープを超えたパターン数だけ割り当てたブロック同士で共 有する必要が在るため,Global memory に保存されている。 図 2.12 に提案手法を利用したときの計測結果を示す。ネットワークの構造は,図中の パラメータ N ,b は前章と同様である。図において,b = N において,N = 60 で打ち切ら れている。これは b = N の場合,全てのネットワークを構成するのに必要な,メモリ領 域を一つの Shared memory に格納する必要があるため,メモリ領域が本論文で使用した ハードウェアの構成上の限界に到達した為である。 結果として,比較手法と同様に,b = 1 の時は,並列化の効果が得られないものの,b > 1 の時は,ネットワーク数 N に依存せずに一定の時間で計算できることが確認できた。つ まり,比較手法を用いる際に必要なパラメータ b の指定は,提案手法ではその影響を小さ くすることができた。 2.6 提案手法:ネットワーク内部を並列化する手法 19 Supervisor Threshold Parallelization Column Inpup Layer Hidden Layer Output Layer Row 図 2.9: ネットワーク内部の並列化 k by using Same Weights for each pattern Threshold Value - Pattens x1 - - xi xi xl - - Pa xl ll ra Hidden Layer Output Layer iz el Input Layer e 図 2.10: パターン毎の並列化手法 ze li e ll ra a P To Network with Same Weights (Back propagation) dn d1 Supervisor dk 2.6 提案手法:ネットワーク内部を並列化する手法 20 Input Signals Parallelized Network Input Signals Parallelized Network Input Signals Parallelized Network:Rmax P e: :N ze i el ll ra 図 2.11: 提案手法 600 processing time(msec) Pa eiz iezl elll lirlza rePala Plal ra Pa To Same Network Output Signals To Same Network Output Signals Output Signals 500 400 b=1 b=4 b=8 b=20 b=N 300 200 600 100 0 20 40 60 80 100 The number of network N 図 2.12: 提案手法に対する処理時間 120 21 2.7 シミュレーション実験 提案手法と,比較手法及び CPU との計算時間の比較を行った。今回検証に使用した GPU は,GeForce GTX480 である。表 2.1 に主な仕様を示す。表 2.2 に比較のために使用 した CPU の仕様を示す。これは,前節で使用した GPU のホストに相当する。 比較は,中間層とパターン数を変えたときの実行時間,及び入力層と出力層の数を変え たときの実行時間を計測して行った。これらの変更点以外は,全ての実験におけるネット ワークの構成は,学習回数は 2200 ステップ,学習するネットワーク数 N = 40 で,ブロッ クには,b = 5 割当てた。 2.7.1 中間層 · パターン数の変更 この節では,入力層と出力層の数を固定し,中間層とパターン数を変更したときの実行 時間を計測する。本実験の目的は,提案手法によって中間層とパターン数を並列化させる ことによって処理速度がどのように変化するかを検証する。 入力層の数 l = 3,出力層の数 n = 3,中間層の数を m = (3, 6, 9) と 3 の倍数で変化さ せ,パターン数を p = (5, 10, 15, 20) と 5 の倍数で変化させた。表 2.3 に実行結果を示し, 表 2.1: GeForce GTX480 の仕様 Number of cores 480 Global Memory 1.5GB Constant Memory 64KB Shared Memory Clock rate 48KB/block 1.40GHz 表 2.2: 計算機の仕様 CPU AMD Phenom 9600 Frequency 2.31GHz Memory 3.8GByte Operating System Windows XP sp2 2.7 シミュレーション実験 22 表 2.3: パターン数 · 中間層を変更した時の実行結果 パターン数 5 10 15 20 中間層の 計算時間 (ミリ秒) ニューロン個数 CPU 比較手法 提案手法 3 900.7 300.6 67.5 6 1453.1 460.4 69.5 9 1965.6 613.7 111.3 12 2440.6 766.2 111.7 3 1843.8 603.1 108.3 6 2795.4 919.4 109.2 9 3889.0 1227.8 218.9 12 4806.3 1532.6 214.8 3 2817.2 898.4 161.3 6 4556.3 1377.1 159.2 9 5764.1 1837.0 327.6 12 5107.8 2302.8 318.8 3 3565.7 1194.3 249.5 6 5487.5 1835.0 249.6 9 7551.6 2448.0 442.4 12 9440.6 3068.5 433.7 図 2.13 に CPU と比較手法による演算時間の比較を示す。グラフは,大きな分類として 「パターン数」がひとかたまりとして順に並んでおり,中分類としてその内側に「中間層 の個数」を変えたときの演算時間がプロットされている。それぞれの分類の中にさらに, 四角の枠で示されたものが,CPU による演算時間,その内側の線で示されたものが,比 較手法での演算時間である。図 2.14 に比較手法と提案手法の実行結果を示す。 この結果から,比較手法はパターン数や中間層の数に比例して時間が増加していること が確認できる。しかしながら,提案手法ではそれらの計算を並列化によってその傾きが小 さくなっていることが確認できる。 比較手法は CPU と比較して,平均 3 倍程度の高速化が見られたが,提案手法は CPU と 比較して平均 20 倍の高速化が認められた。 2.7 シミュレーション実験 23 提案手法による結果と比較して,中間層の数が,m = (3, 6) 組と,m = (9, 12) の組合 せで,それぞれの中間層の数に対してのパターン数と比較して,計算時間が等しい。これ は GPU の内部の,プロセッシングユニットの個数に由来するものである。 2.7.2 入力層 · 出力層数の変更 次に,前節における,それぞれの最小の個数である,中間層の数を m = 3,パターン数 を p = 5 に固定し,入力層の数と,出力層の数を変化させて,同様に,計算時間を比較し た。入力層の数を 3 の倍数,l = (3, 5, 7, 9),出力層の数を同様にそれぞれ変化させた。 本実験の目的は,入力層・出力層の大きさによるネットワークの規模が異なる場合にお いて提案手法の高速化性能を検証することである。 表 2.4 に実行結果を示し,図 2.15 に CPU と比較手法による演算時間の比較を示す。グ ラフは,図 2.13 と同様に大分類に「出力層の数」,中分類としてその内側に「入力層」を 変えたときの演算時間がプロットされている。前項と同様に,それぞれの手法に対して, 中分類「入力層の数」によるシンボル分けを示している。図 2.16 に比較手法及び提案手 法の比較を示す。 対象とする問題によって入力層と出力層の数が変わるので,それらの数によって,ネッ トワークの規模を決めることができる。ネットワークの構成上,提案手法においては,中 間層の数より出力層の数が大きい時は,出力層の数だけ並列化されるので,計算時間は入 力層の数よりも出力層の数による影響が大きい。出力層の数が増加すると,出力層の計算 すべきニューロンの数が増加する。つまり,提案手法では,各層のニューロン個数の最大 値,ここでは出力層の個数で並列に処理されるので,出力層の増加量に対して計算量の増 加幅が小さいことが確認できる。 2.7 シミュレーション実験 24 表 2.4: 入力数 · 出力数を変更した時の実行結果 出力数 3 5 7 9 入力数 計算時間 (ミリ秒) CPU 比較手法 提案手法 3 992.2 300.6 67.4 5 1032.8 311.4 72.0 7 1107.8 329.8 77.3 9 1151.6 343.9 85.0 3 1259.3 601.7 63.1 5 1315.6 454.2 69.4 7 1371.9 547.7 76.4 9 1436.0 500.4 79.4 3 1535.9 483.6 86.5 5 1634.4 489.6 90.2 7 1668.8 503.6 93.4 9 1714.0 519.1 97.2 3 1809.4 634.2 103.6 5 1954.7 941.1 106.9 7 1948.5 678.9 107.8 9 1995.3 807.5 110.8 2.7 シミュレーション実験 25 10000 CPU Conventional method Processing time (msec) 8000 6000 4000 2000 0 Number of Hidden layer 3 6 9 12 Number of 5 Pattern 3 6 9 12 10 3 6 9 12 15 3 6 9 12 20 図 2.13: 中間層のニューロン個数とパターン数を変更した場合の実行時間の比較 Conventional method Proposed method Processing time (msec) 3000 2000 1000 0 Number of Hidden layer Number of Pattern 3 6 9 12 3 6 9 12 3 6 9 12 3 6 9 12 5 10 15 20 図 2.14: 中間層のニューロン個数とパターン数を変更した場合の実行時間の比較 (GPU に よる実行結果) 2.7 シミュレーション実験 26 2000 CPU Conventional method Processing time (msec) 1600 1200 800 400 0 Number of input 3 5 7 9 Number of output 3 3 5 7 9 3 5 5 7 9 3 5 7 7 9 9 図 2.15: 入力数と出力数を変更した場合の実行時間の比較 900 Processing time (msec) Conventional method Proposed method 700 500 300 100 0 Number of input 3 5 7 9 3 5 7 9 3 5 7 9 3 5 7 9 Number of output 3 5 7 9 図 2.16: 入力数と出力数を変更した場合の実行時間の比較 (GPU による実行結果) 27 2.8 結言 本章では,GPGPU を用いたニューラルネットワークの学習に関する高速化手法におい て,ネットワークを複数個学習する手法を比較手法として述べた後,ネットワーク内部を 並列化する手法を提案した。GPGPU には,スレッドを作成する時に,階層構造を構成す る。その階層の割り当てが処理時間に影響することを示した。各層のニューロンの処理 が独立に処理されることを利用し処理の並列化を提案した。ニューロンの間の処理に対 しては同期が必要であるのに対し,複数のネットワーク間においては同期が不要なため, GPGPU のような階層構造によって同期の仕様が異なり,空間上にスレッドを構成出来る ハードウェアに対してより効果がある。結果として,CPU と比較して提案手法は,約 20 倍の高速化が達成され,比較手法と比較して,6.4 倍の高速化に成功した。また,中間層 の個数を始めとする,各ニューラルネットワークの条件の変化と,演算時間との比例する 割合が,比較手法より小さいことが確認出来たため,並列化の有効性が確認できた。 29 第 3 章 パターン毎の学習に対する並列化 手法 緒言 3.1 第 2 章において,ネットワーク内部に注目し,同一の層に存在するニューロンの計算が 同時に処理出来る事を生かした並列化手法について述べた。本章では,パターン毎の並列 化手法に関して,第 2 章で述べた各ニューロン毎の処理を並列で行う手法に加えて,それ らのニューロンに接続されている重み係数を更新する処理に注目し,並列化が可能なよう に,逆伝播段階の計算を修正することでより多くの処理を並列化させることを提案する [67]–[71] 。そして,計算手法の変更に伴って正しく学習が収束するかが問題となるが,その 点についてまず検証する,その後,従来の手法と処理速度を比較することで有用性を検証 する。 本章の構成は以下の通りである。まず,第 3.2 節では第 2 章で述べたニューラルネット ワーク学習手法について変更を行う点について述べる。第 3.2.1 節では,ニューラルネット ワーク学習の改良点を GPGPU へ実装する方法について述べる。また,本章では,ニュー ラルネットワークの学習アルゴリズムに変更を加えたため,学習が正しく実行されるかを 第 3.3 節で示す。その後,第 3.4 節で GPU へ本手法を実装した場合の処理時間を比較す る。最後に,第 3.5 節を結言とする。 3.2 パターン毎の学習アルゴリズム 前章で述べた学習手法を異なるパターンを同時に学習するために以下のように変更す る。並列化学習アルゴリズムは,次の様に変更される。 1. 全パターンのネットワークへの入力から, その出力値までの順伝播の処理は,同一の 3.2 パターン毎の学習アルゴリズム 30 重み係数を使用する。 2. 誤差逆伝播の際は,それぞれのパターンから計算される係数の更新量を加算する。 すなわち,順伝播の計算である式 (2.2),(2.5) において,重み係数 vij , wjk は固定し,各層 の出力 yjp , zkp はそれぞれのパターン毎に保持しておく。この時,評価関数は,式 (2.6) を 全パターンを加算した式 (3.1) となる。 1 ∑∑ p E= (dk − zkp )2 2 p=1 k=1 P n (3.1) これを最小となるように重み係数の更新式へ変形するのは困難であるため,係数更新も前 章のものを変更する。誤差信号は,前章と同様に epk = dpk − zkp (3.2) を用いる。そして,式 (2.11) を用いて δkp = epk zkp (1 − zkp ) ∆wjk = P ∑ ηyjp δkp (3.3) (3.4) p=1 と変更する。このとき,式 (2.11) は,式 (3.4) と式 (3.3) に分割され,δkp は,パターン毎に 保持される。このようにパターン毎の修正量の和を重み係数に反映させる。重み係数は, new old wjk = wjk + ∆wjk (3.5) のように更新される。次に式 (2.15) から, γjp = yjp (1 − yjp ) n ∑ new p wjk δk (3.6) k=1 P ∑ ηxpi γjp (3.7) vijnew = vijold + ∆vij (3.8) ∆vij = p=1 に分割する。中間層の重み係数は, のように更新される 3.2 パターン毎の学習アルゴリズム 31 学習段階では,式 (3.2) から (3.8) の結果として生じるそれぞれの値についてそれらの 添字の数だけ並列に,またこれらの式同士は,順番に逐次的に処理されていく。例えば, 式 (3.3) は,結果として,δkp が パターン数と出力層の個数だけ生じるが,それらの値が同 時に処理される。そして,式 (3.3) と式 (3.4) はこの順番に処理される。このとき,パター ン p について並列化された場合,他の部分はパターン数 P だけ並列に処理されるのに対 して,ある一つの重み係数に対して式 (3.4),(3.7) によって同時に計算される恐れがある。 したがってこれらの計算は,式 (3.3) や式 (3.6) のすべての p や,k, j について全て揃うの を待ちその後,重み係数の個数分だけ並列に処理する,そしてその内部ではパターンに ついて逐次的に処理していく。この手法は,バッチ学習 [26],[27] と比較して,学習時に全パ ターンの誤差の和は用いておらず,それぞれのパターン毎に重み係数の更新量を計算して いる点が異なる。 3.2.1 GPGPU への実装 前節のニューラルネットワーク学習の改良を GPGPU への実装法について述べる。図 3.1 にパターン毎の並列化手法の模式図を,図 3.2 に太線部分を上部から見た図をそれぞ れ示す。ニューラルネットワークの入力は,入力数 l, パターン数 P とした時, l × P の行 列で表される。出力数 n とすると,教師信号も n × P の行列で表現される。各パターン は,それぞれ共通の重み係数を持つネットワークに入力される。また中間層のニューロン 数を m とした時,中間層の出力 y は,m × P 個生成される。 順伝播段階では,各層毎に,ニューロン数とパターン数を乗じた数の処理が同時に処理 され,その数だけ値が出力される。各層間は前の層の出力が全て揃うまで,後の層に移ら ないように同期を取る必要がある。 逆伝播段階では,前節のように,式を分割することでそれぞれの変数が同時に変更され ることなく,並列に処理させることが可能である。処理手順は,まず出力層において,式 (3.2),(3.3) が {n × P } 個だけ処理され,次に式 (3.4),(3.5) が順に {n × (m + 1)} 個処理さ れる。中間層では,式 (3.6) が {m × P } 個,式 (3.7),(2.16) が順に {m × (l + 1)} 個処理さ れる。それぞれの式を処理する間には同期が必要である。 CUDA や OpenCL では,処理を行うプログラムの最小単位であるスレッドを階層構造 を定義して配置している。階層の一番上位に,CUDA では Grid,OpenCL では NDRange 3.2 パターン毎の学習アルゴリズム 32 と呼ばれる層がある。Grid の中には,複数個の Block が,NDRange 内は,ワークグルー プと呼ばれる領域に分割され,それらの領域に,スレッドが格納されている構造である。 Block あるいはワークグループは,それらの内部のスレッド同士でのみ共有されている Shared memory(OpenCL ではローカルメモリ)や,それらのスレッド同士で同期を取る 関数である, “ syncthreads()”(OpenCL では,“barrier()”) がある [5][41] 。 そこで本手法では CUDA を用いて,階層構造によって使用できる範囲が異なる同期関 数を最適に使用するために以下のように設定した。学習するニューラルネットワークの 条件から,各層のニューロンの数 (l, m, n) で最大のものを q とし,同時に処理するネット ワークの数を N とするとき,各層のスレッドを,前述の各階層の利用できる同期関数の 有無の差を考慮して,以下の様に配置する。 (bsx , bsy , bsz ) = (q, (q + 1), 1) ) ( P ,N (gsx , gsy ) = (q + 1) (3.9) (3.10) ここで,(bsx , bsy , bsz ) は Block 内において 3 次元状に配置されたときのそれぞれの次元で のスレッドの個数であり,それらを乗じた値が Block のサイズとなる。また (gsx , gsy ) は Grid において,2 次元状に配置された Block の各次元の個数である。総じて,各スレッド は,5 次元の値でその位置が定義され,その個数は,(bsx × bsy × bsz × gsx × gsy ) となる。 実行は,前述の yjp , zkp , epk , δkp , wjk , γjp , vij の各 1 変数分を処理し,その処理が同時に実行さ れることで高速化が図られる。この時,各変数の添字はそれぞれの計算されるスレッド位 置で指定される。まず,yjp , zkp , δkp , γkp の計算において,パターン位置 p は,bsy と gsx をか け合わせた値,各層におけるニューロンの位置を示す i, j は bsx ,重み係数 wjk , vij の位置 は,bsx と bsy で指定される。それぞれの重み係数の更新時は,gsx > 1 のスレッドでの演 算は実行されない。 3.2.2 スレッド処理 次に,スレッド内の処理手順を述べる。まず順伝播段階での中間層及び出力層の出力値 の計算 (式 (2.2),(2.5)) において,各層のニューロンの位置を thx で決定する。この時,各 層のニューロン数より大きな値を持つ位置のスレッドは処理を行わない。この時,各層の 処理の間に同期関数である,“ syncthreads()” 関数を設置することで,処理を行わないス 33 レッドも次の層まで一時停止させることが可能である。各ニューロンは,パターンの数だ け処理させる必要があるが,そのパターンは,(thy + bsy × by ) で決定させる。この順伝 播処理では,パターン間の同期は不要であるが,同期関数は,同一のブロック内のスレッ ド同士でのみ有効である点を利用している。そして,逆伝播段階では,式 (2.10) と,式 (3.3) が計算された後,式 (2.12) に処理を移る際,後述のブロックを超えた同期機能を用 いて,全パターンの処理が完了するまで待つ。式 (2.12) は,出力層に存在する重み係数の 個数つまり,n × (m + 1) 処理されるがこれらの位置を,thx , thy で指定することで実現出 来る。この時はこれらの値が,(n, m + 1) 超える場合と,(by > 0) の時は実行されない。 最後に,中間層において同様に,式 (3.6) と式 (2.16) がそれぞれ (m × p),(m, l + 1) だけ並 列処理される。 3.3 CPU によるシミュレーション 第 3.2.1 節において,ニューラルネットワーク学習を並列化に対応した手法へ変更した ことについて述べた。そこで本節では,GPU への実装を行う前に,2.3 節で述べた従来手 法,すなわち標準的なバックプロパゲーション法と比較して,提案手法を用いて正しく学 習出来るか検証する。検証には,(I) 2 入力 1 出力の XOR と,(II) 3 次元の球体分布を 5 つ配置し,それぞれの分布を識別する学習,(III) より多くの入力に対する学習の 3 種類 のテストデータを用いて,それぞれの手法の収束性を調べる。検証は,各手法で共通の初 期重み係数を設定したネットワークを用いて学習する。初期重み係数を持つネットワーク を 100 個用意しそれらの各ステップ毎に誤差の二乗和 : ε= P ∑ n ∑ (dpk − zkp )2 (3.11) p=1 k=1 の平均を求めることで検証した。 3.3.1 学習 (I):XOR 学習 XOR は入力数 2, 出力数 1,パターン数 4 である。表 3.1 に各パターンの入力と教師信 号を示す。学習の条件は中間層のニューロン個数 3,η = 0.3 で,各パターン 10000 ステッ プ行った。図 3.4 に学習 (I) の結果を示す。実線は従来手法,破線は提案手法である。学 Input Layer 図 3.1: それぞれのパターンの学習に対する並列化 Output Layer Feed Forward Phase Hidden Layer Sequence Hidden Layer Backpropagation Phase Output Layer Supervisor 34 3.3 CPU によるシミュレーション 3.3 CPU によるシミュレーション Parallelization 35 Update Weights Hidden Layer by Using Same Weights 図 3.2: それぞれのパターンの学習に対する並列化 (上面図) 表 3.1: XOR 学習 パターン 入力信号 教師信号 番号 x1 x2 d1 1 0 0 1 2 0 1 0 3 1 0 0 4 0 0 1 習後の二乗和の平均と分散は,従来手法ではそれぞれ,4.02 × 10−3 , 7.28 × 10−4 , 提案手 法ではそれぞれ,1.48 × 10−3 , 1.23 × 10−6 であった。提案手法のほうが二乗和の最終値が 小さいが,どちらも収束している。 3.3.2 学習 (II) 3 次元データ入力 次に,3 次元の球体に分布したデータを 5 クラス用意し,それぞれ 20 パターンずつ計 100 パターンを入力した時,それぞれのパターンを分類するように学習させた。データは, 3.3 CPU によるシミュレーション 36 表 3.2: 3 次元データの中心座標 クラス番号 cx cy cz 1 0.267 0.272 0.275 2 0.271 0.067 -0.209 3 0.242 -0.201 0.083 4 0.085 -0.002 -0.324 5 0.041 0.232 0.217 半径 0.1,中心座標をクラス毎にそれぞれ表 3.2 のように設定した球の内部に分布する,ク ラス間の重なりがない線形分離可能なデータである。図 3.3 にデータの模式図を示す。ネッ トワークの入力は −1 以上 1 未満に正規化したそれぞれの座標値 3 個,出力数は 5 で,該 当するクラスが 1, 他が 0 になるように教師信号を設定した。中間層のニューロン数は 6, η = 0.08 で各 10000 ステップ繰り返した。図 3.5 に 3 次元データ入力での収束性の結果を 示す。学習後の 2 乗和の平均と分散は,従来手法ではそれぞれ,2.23 × 10−2 , 3.12 × 10−6 , 提案手法ではそれぞれ,2.23 × 10−2 , 3.63 × 10−6 であった。最終的な結果は従来手法とほ ぼ等価である事が確認できた。 3.3.3 学習 (III) 25 次元の乗算乱数入力 最後に 25 次元の乱数データを生成し,5 クラスを識別するような学習を行った。入力 データは,まず,25 次元の各次元について,0 以上 1 未満の一様分布する乱数ベクトルを 5 クラス用意し,その各成分に,それぞれ 0 以上 1 未満の一様乱数を乗じたデータを,各 クラス 20 パターンずつ,計 100 パターン生成した。このデータはクラス間で重なる可能 性があり,線形分離が可能かどうかは,未知である。入力の数は 25,出力の数は 5 で該 当するクラスが 1, 他が 0 になるように学習させる。中間層のニューロン数は 20, η = 0.07 で 10000 ステップ実行した。図 3.6 に 25 次元データ入力の収束性の結果を示す。学習後の 2 乗和の平均と分散は,従来手法はそれぞれ , 7.05 × 10−3 5.78 × 10−08 ,提案手法はそれ ぞれ,7.09 × 10−3 ,5.52 × 10−08 であった。この結果から,より大きなネットワークに対 しても提案手法で同様に学習が可能である事がわかる。 以上より,提案手法でも,従来手法と同様に学習が可能であることが示された。 37 Pattern1 Pattern2 Pattern3 Pattern4 Pattern5 z 0.4 0.2 0 -0.2 -0.4 0 0.1 0.2 y 0.3 -0.2 0 0.2 0.4 x 図 3.3: 3 次元データ 3.4 比較実験 本節では提案手法を GPU へ実装し,どの程度有効か処理時間を計測することで考察す る。実験に用いたグラフィックボードは,前章と同様である。学習は前節で用いた 3 つの 学習例を用い,ニューラルネットワークの条件もそれらに倣う。それぞれの例に対し,重 み係数の初期値が異なるネットワークを 20 個同時に学習する。最終的に,用いられるネッ トワークは,学習後の二乗誤差の和が最小のものを採用する。 比較のため,以下の2つの手法を取り上げる。比較手法 A は, ネットワーク自体のみ を並列化し内部の並列化は行わない,すなわち考慮される高速化手法においてもっとも単 純な実装法である。比較手法 B は第 2 章で提案した各層のニューロンの並列化手法であ る。提案手法を加えて,計 3 手法を用いて,CUDA を用いて実行した時の処理時間を求め た。表 3.3 に各手法の誤差逆伝播段階で実行されるスレッド数,すなわちこの段階での並 3.4 比較実験 38 1 Conventional Method Proposed Method Square error 0.1 0.01 0.001 0 2000 4000 6000 Training Step 8000 10000 図 3.4: 学習 (I) の 2 乗誤差 100 Conventional Method Proposed Method Square error 10 1 0.1 0.01 0 2000 4000 6000 Training Step 図 3.5: 学習 (II) の 2 乗誤差 8000 10000 3.4 比較実験 39 100 Conventional Method Proposed Method Square error 10 1 0.1 0.01 0.001 0 2000 4000 6000 Training Step 図 3.6: 学習 (III) の 2 乗誤差 8000 10000 40 表 3.3: 誤差逆伝播段階での実行スレッド数 学習 (I) 学習 (II) 学習 (III) パラメータ 比較手法 A 20 20 20 N 比較手法 B 60 120 400 N ×P 提案手法 240 840 10000 N × P × (q + 1) 表 3.4: 実行結果 処理時間 (秒) 学習 (I) 学習 (II) 学習 (III) 比較手法 A 0.65 121.59 784.40 比較手法 B 0.43 22.42 29.22 提案手法 0.19 3.55 9.60 列度を示す。表中の列はそれぞれ,学習 (I), 学習 (II), 学習 (III) におけるスレッド数を示 している。ここで,比較手法 A, 比較手法 B, 提案手法の並列度は,それぞれ, N , N × P , N × P × (q + 1) である。図 3.7,3.8,3.9 に (I),(II) 及び (III) を用いた実行結果をそれぞれ 示す。 理論上の並列度から,比較手法 A と提案手法を比べて学習 (I) は 12 倍,3次元データ 入力の学習 (II) では 42 倍,25 次元の乗算乱数入力の学習 (III) で,500 倍,比較手法 B と 比べて,学習 (I) は 4 倍,学習 (II) で 7 倍,学習 (III) では 25 倍の高速化が見込まれるが, 結果として比較手法 A と比べて,学習 (I) で 3.4 倍, 学習 (II) で 34 倍,学習 (III) では 81 倍高速化された。また比較手法 B と比べると,学習 (I) で 2.2 倍,学習 (II) で 6.3 倍,学習 (III) は 3.0 倍速いことが確認できる。原因として,学習 (I) に関しては,必要な計算以外 の処理によるオーバーヘッドの割合が大きいが,学習 (II) 及び学習 (III) に関しては,提 案手法のスレッド数が,ハードウェアの制約による同時に使用できるコア数を上回ってい る点, また学習 (III) に関しては,上記点に加えて更に,式 (3.4),(3.7) における P 個の総 和演算によるコストが計算時間に影響を与えていると考えられる。 41 650 645.97 600 Processing Time(msec) 550 500 450 431.57 400 350 300 250 200 191.83 150 Conventional Method A Conventional Method B Proposed Method 図 3.7: 学習 (I) の処理時間 140 Processing Time(sec) 120 121.59 100 80 60 40 20 22.42 3.55 0 Conventional Method A Conventional Method B Proposed Method 図 3.8: 学習 (II) の処理時間 42 800 784.40 Processing Time(sec) 700 600 500 400 300 200 100 29.22 9.60 0 Conventional Method A Conventional Method B Proposed Method 図 3.9: 学習 (III) の処理時間 3.5 結言 3.5 43 結言 本論文では,ニューラルネットワーク学習の並列化に関して,パターン毎の処理の並列 化を行うために,学習手法の一部を改良し,それによる収束性の違いを議論し,その上 で,GPGPU への実装を行った。学習手法は,順伝播の段階では,重み係数を固定して全 てのパターンに対する各層の出力値を保持し,逆伝播では,各パターンの重み係数の更新 量の和を用いて更新する手法を提案した。シミュレーション結果として,従来手法と収束 性について差は見られないことが確認できた。 また,GPGPU への実装は,OpenCL や CUDA における,階層構造を利用して,提案 手法の実装を提案した。CUDA における階層構造は同期関数や共有メモリ等に特徴があ り,それらを適切に使用することで,高速化が可能であることが確認できた。結果として 第 2 章で述べた手法と比較して約 3 ∼ 6 倍の高速化に成功した。しかしながら,ハード ウェアの制約を考慮しても,期待される速度は得られていない事が確認出来るため,パ ターン毎の総和演算に関するアルゴリズム部分のさらなる改善が必要である。 45 第 4 章 ツイート情報を用いた異常気象情 報の捕捉 4.1 緒言 本章では,提案手法の有効性を検証するために,入力信号の個数が多い例としてツイッ ターに投稿されたテキスト文を用いた異常気象情報の捕捉に関する応用例を提案する [72] 。 テキスト解析への応用例として,ニューラルネットワークを用いてツイートを分類する手 法を検討する。今回のテキスト解析は,取得された単語数に比例し,大きな入力ベクトル を扱う必要があるため,前章までで述べた提案手法を利用する事で,従来手法を利用する よりも処理時間が軽減される。 本章の構成は以下の通りである。まず第 4.2 節ではツイッターについての概要とその投 稿データを用いた応用研究について述べる。第 4.3 節では,本章におけるツイッターの投 稿データの利用法について述べた後,第 4.4 節では実際に取得した投稿データを利用した 実験について述べる。最後に第 4.6 節を結言とする。 4.2 ツイッターとその投稿データを用いた応用研究 ツイッターとは,ユーザがツイートと呼ばれる 140 文字までの短い文を自由に投稿と閲 覧することが可能な,オンラインソーシャル・ネットワークサービスである [13] 。このサー ビスは 2012 年現在,500 万人を超える実際に投稿しているアクティブユーザを保有し,ま たツイートを収集することが容易である。ユーザは各地で,その位置に関する語を添えて 投稿する場合もある。そこで,そのようなユーザを「ソーシャルセンサ」として社会的に 問題となる現象をツイートから発見する研究がなされている。例えば,Sakai らは地震情 報の検出への利用 [73] ,Bollen らは株式市場の動向調査にツイートを利用し [74] ,また古川 46 らは,犯罪情報抽出について調査した [75] 。通常の「物理センサ」と比較して,ソーシャル センサは人口が多い地域ではより多くの投稿が得られるため,物理センサより密度の高い センサとして利用することができ,1人のユーザから様々な情報を得る事が可能な点が特 徴としてあげられる。この点について,例えばゲリラ豪雨のような気象庁が設置している アメダスの設置位置の間隔よりも細かい場所で発生する異常気象の捕捉や,データとして 現れない雲の形状や色に関する語句によって今後の異常気象を検出できる可能性がある。 ユーザは普通の雨や雪の気象状況に対しては,あまり関心を持たないためツイートとし ても投稿はされない。しかしながら,社会インフラに打撃を与えかねない異常な気象は, 普段より多くのツイートが投稿される。そしてそのような場合のツイートには他のツイー トには見られない,特徴的な単語を持つことがある。例えば強調を表す形容詞「すごい」 等を含む投稿が多くなると考えれるためこれらを抽出することで特異な情報が得られる。 4.3 ツイッターによる分類手法 本節では,投稿されたツイートから異常気象に対する情報を取得する方法について述べ る。まず,ある一定の期間に投稿されたツイートから,気象状況を表す名詞を含むものを 収集する。収集したツイート文を,形態素解析を用いて品詞に分解する。そしてそれらが 事前に定義した特徴語であれば,そのツイートが災害情報を示すものであるとする。そし てそのツイート中に含まれる地域を示す語や,紐付けられた GPS 情報等からどの地域で 異常気象が発生しているかを検出する事が可能である。 本章では,ニューラルネットワークを用いて,異常気象が発生した地域に関連したツ イートとその他のツイートを区別する問題を用いて,CPU と GPU のニューラルネット ワークの処理速度を比較することを目的とする。まず,異常気象が発生した日時と地域を 事前に調査する。該当する日時に投稿され,かつ気象状況を表す名詞を含むツイートを収 集する。それらのツイートは,形態素解析で品詞推定した後, 「名詞」と「形容詞」のみを 取り出して,番号付けして辞書に登録する。また,収集された中から,該当する都道府県 名を含むツイートを絞込み,これを「陽性」のツイートと定義する。全てのツイートに対 し,登録された辞書のサイズから,該当する都道府県名と,検索に使用した単語に該当す る分を除いた数の次元を持つ特徴ベクトルをそれぞれに定義する,特徴ベクトルは,該当 するツイートに含まれる単語の要素を 1 とし,それ以外は全て 0 となるように設定する。 47 ニューラルネットワークにはこの特徴ベクトル,を入力信号とし,出力は「陽性」のツ イートの場合に 1 を出力し,それ以外は 0 を出力するように学習する。 4.4 ツイートを用いた分類に関する実験 実験は,2012 年 1 月 11 日に,鳥取での猛吹雪を例として扱う。その日投稿された「雪」 を含むツイートを収集した。表 4.1 にその仕様を示す,それらの中から「鳥取」を含む語 を「陽性」のツイートとして定義した。表 4.2「陽性」のツイートの仕様を示す。次に,全 てのツイートに対して,MeCab[76] によって形態素解析を行い,名詞と形容詞を取得した。 この時,前節で述べた辞書は,この収集したツイートから得られる範囲のみを用いる。図 4.1 に抽出した単語を頻度順に並び替えた分布を示す。図は,全てのツイートに含まれる 「雪」は除いた。また横軸は単語にひもづけられた番号を示し,縦軸は出現するツイート 数を示す。このように,少数のツイートにのみ出現する単語が多いが,これらは特徴ベク トルから除外した。よってこれらの単語のうち,実際に使用する特徴ベクトルとして,頻 「陽性」のツイートに含まれる単語のみを採用する。結果として, 度が 20 個以上または, 890 次元のベクトルを全てのツイートに割り当てた。 ニューラルネットワークは,この 890 次元を入力として,ツイートが「陽性」かどうか を学習する。出力数は 2 個で,陽性の場合は (1, 0) を,その他の場合は (0, 1) を出力する ように教師信号を設定した。表 4.3 にニューラルネットワークの仕様を示す。 学習は,陽性のツイート 50 件, その他のツイート 50 件をランダムに選んで,計 100 パ ターンを用いて実行し,それ以外の,それぞれ 50 件ずつ選んでテストを行った。正解ラ ベルの区別毎にどちらに出力値が現れたかを数え,平均を求めた。表 4.4 にその結果を示 す。表 4.5 に,それぞれを個数 (50 個) で除して 100 を乗じた適合率を示す。それぞれの表 の縦方向の列は,正解ラベル,横の行は出力された内容を示す。結果として,65%の正解 率で分類出来ることを示している。また学習時間は,一回の学習につき平均約 4 分で処理 が完了した。 48 10000 Occurrence frequency The words of Negative data The words of Positive data 1000 100 10 1 0 2000 4000 6000 8000 The index of word 図 4.1: 抽出した単語のヒストグラム 10000 12000 4.5 CPU による実行結果 49 表 4.1: 収集されたツイート 日時 2012 年 1 月 11 日 検索単語 「雪」 ツイート数 35,379 表 4.2: 「陽性」のツイート 日時 2012 年 1 月 11 日 検索単語 「雪」, 「鳥取」 Total 120 表 4.3: ニューラルネットワークの条件 4.5 ネットワークの数 4 入力数 890 中間層のニューロン個数 64 出力数 2 学習率 0.0004 学習用パターン数 100 学習のステップ数 10000 CPU による実行結果 前節と同様の条件で,CPU を用いて実行した。4.6 にその結果を示す。表 4.7 に,それ ぞれを個数 (50 個) で除して 100 を乗じた適合率を示す。それぞれの表の縦方向の列は,正 表 4.4: 実験結果 (平均個数) 正解ラベル 平均 陽性 それ以外 陽性 39 24 それ以外 11 26 データ数 50 50 50 表 4.5: 実験結果 (正解率) 正解ラベル 正解率 陽性 それ以外 陽性 78 48 それ以外 22 52 表 4.6: CPU による実験結果 (平均個数) 正解ラベル 平均 陽性 それ以外 陽性 38 23 それ以外 12 27 データ数 50 50 表 4.7: CPU による実験結果 (正解率) 正解ラベル 正解率 陽性 それ以外 陽性 76 46 それ以外 24 54 解ラベル,横の行は出力された内容を示す。結果として,GPU を用いた学習結果と同様 に 65%の正解率で分類出来ることを示している。 そして,実行時間を比較すると,前節と同様の条件下で,一回の学習につき平均 2 時間 掛かった。つまり,GPU は CPU と比較して,30 倍高速に処理することがわかる。 4.6 結言 本章では,提案手法の有効性を検証するために,入力信号の個数が多い例として,ツ イッターの情報を用いた災害情報の捕捉に関する手法を取り上げた。本論文では,2012 年 1 月 11 日に鳥取で発生した大雪情報の検出を試みた。単語は, 「名詞」と「形容詞」を 抽出し,全ツイートで使用頻度が大きなものを,ツイート毎に含まれる単語の有無をベク 4.6 結言 51 トルにしたものを特徴ベクトルとして,NN に入力して,収集したツイートが,単語「鳥 取」を含むツイートを「陽性」,それらツイートに含む単語を含まないツイートを「陰性」 となるように学習した。ここで用いられる特徴ベクトルの次元数は 890 におよぶ。結果 として,ツイートを用いた推定に関する結果として,65%の正解率であった。また学習時 間が通常の CPU を用いた手法で約 2 時間必要であるのに対し,提案手法では約4分で処 理が完了し,また,CPU と同様に学習が可能であることが確認出来たため,本手法によ る有用性が確認出来た。 53 第 5 章 結論 本論文では,ニューラルネットワークを並列化し,GPGPU を用いることで学習に要す る時間を短縮することを目的とする。異なる重み係数を持つニューラルネットワークを学 習するのに必要な時間を短縮するため,複数のニューラルネットワークを同時に処理する 手法を比較手法として,ニューラルネットワーク内部のニューロンの計算に伴う時間を短 縮する手法および,複数のパターンを提示するのに必要な時間に対する時間を短縮する手 法について提案した。また,本提案手法を有効に活用する応用例として,ツイートを用い た分類手法を提案した。以下に,本論文の成果をまとめる。 第2章では,ニューラルネットワーク内部のニューロンの計算に必要な時間を並列化に よって短縮する手法を述べた。GPGPU には,スレッドを作成する時に,階層構造を構成 する。その階層の割り当て方が処理時間に影響することを示した。また,各層のニューロ ンの計算が独立であることを利用しそれらの並列化を提案した。各層の計算は,それぞれ の前段の層の出力値が揃うまで進めることはできないが,層の内部に位置するニューロン の出力値は,それぞれの値を用いることがないため,同時に計算することが可能である。 それぞれ層のニューロン個数の最大個数分だけ並列に計算が実行され,その一つ分の処理 内容を表すスレッドは,層毎のニューロン一つの計算を担当するように実行される。結果 として,CPU と比較して提案手法は,平均約 20 倍の高速化が達成され,比較手法と比較 して,平均 6.4 倍の高速化に成功した。また,中間層の個数を始めとする,各ニューラル ネットワークの条件の変化と,演算時間との比例する割合が,比較手法より小さいことが 確認出来たため,並列化の有効性が確認できた。 第3章では,異なるパターンを同時に学習する手法について提案した。この手法では, 順伝播段階では,全てのパターンに対し,共通の重み係数を持つニューラルネットワー クを計算するため,パターン毎に重み係数の更新量を求めてそれらの和を用いて更新を 行うアリゴリズムに修正した。それによる収束性の違いを議論し,その上で,GPGPU へ の実装を行った。シミュレーション結果として,従来手法と収束性について差は見られな 54 いことが確認できた。並列化手法は,順伝播の段階では,重み係数を固定して全てのパ ターンに対する各層の出力値を保持し,誤差逆伝播の段階において,各パターンの重み 係数の更新量の和を用いて更新する。同一層に含まれる各層のニューロン個数と,さら に個々のニューロン内に含まれる重み係数の個数だけ同時に計算する。また,GPGPU へ は,OpenCL や CUDA における,階層構造を利用して,提案手法を実装した。CUDA に おける階層構造は同期関数や共有メモリ等に特徴があり,それらを適切に使用し。結果と して第2章で述べた手法と比較して約 3 ∼ 6 倍の高速化に成功した。 第4章では,提案手法の有効性を検証するために,入力信号の個数が多い例として,ツ イッター情報を用いた災害情報の捕捉に関する手法を提案した。2012 年 1 月 11 日に鳥取 で発生した大雪情報の検出を試みた。単語は, 「名詞」と「形容詞」を抽出し,全ツイート で使用頻度が大きなものを,ツイート毎に含まれる単語の有無をベクトルにしたものを特 徴ベクトルとして,ニューラルネットワークに入力して,収集したツイートが,単語「鳥 取」を含むツイートを「陽性」,それらツイートに含む単語を含まないツイートを「陰性」 となるように学習した。ここで用いられる特徴ベクトルの次元数は 890 におよぶ。結果 として,ツイートを用いた推定に関する結果として,適合率 65%達成した。また学習時間 が通常の CPU を用いた手法で約 2 時間必要であるのに対し,提案手法では約4分で処理 が完了し,また CPU と同様に学習が可能であることから,本手法による有用性が確認出 来た。 総評として,これは,同時に学習する複数のニューラルネットワークの数,学習に用い るパターン数,および,各層のニューロン個数の最大個数の分だけ並列化が可能な本手法 は,CPU と比較して,60 倍以上の高速化に成功した。 今後の課題として,ニューラルネットワーク内部の和を求める部分,例えば,順伝播段 階で,各ニューロンの入力信号と対応する重み係数の和や,パターン毎の重み係数の更新 量の和等の部分を並列化することが挙げれる。本論文は,ニューラルネットワークの構造 を元に並列化手法を提案した。そのため,さらに内部の計算を細かく設計することで,さ らなる高速化が可能である。 GPU は,画像処理に特化した演算装置である。そして,本論文によってより汎用のニュー ラルネットワークについて高速化が可能であることが示された,また,GPU はその利用 法から,家庭において,画像認識や動画を用いたパターン認識,音声認識や,さらに人間 の触覚や嗅覚に対応する識別への応用例を考慮する必要があると考えられる。 55 謝辞 本研究の遂行にあたり,直接御指導頂き,懇切丁寧なる御指導,御鞭撻を賜りました, 大阪府立大学大学院 工学研究科 吉岡 理文 教授には,心から深く感謝するとともに,厚 く御礼申し上げます。御指導頂いた内容を胸に刻んで,これからも日々精進していきたい と思います。 本論文をまとめるにあたり,大阪府立大学大学院 工学研究科 市橋 秀友 教授,中島 智 晴 教授, 柳本 豪一 准教授には,有益な御指導,御鞭撻を賜るとともに,副査として本論 文を査読して頂き,深く感謝致します。また,柳本准教授には,本論文第4章について御 指導頂き,懇切丁寧なる御指導,御鞭撻を賜り,常日頃から研究内容に関わらずに様々な 御助言を賜り,深く感謝致します。 大阪工業大学 工学部 大松 繁 教授 には,博士前期課程において,直接御指導頂き,現 在に至るまで懇切丁寧なる御指導,御鞭撻を賜り,深く感謝致します。 広島大学大学院 教育学研究科 藤中 透 教授 には,博士前期課程において,御指導頂き, 懇切丁寧なる御指導,御鞭撻を賜り,深く感謝致します。 大阪府立大学 21 世紀科学研究機構 産学協同高度人材育成センター 中村 順二 様を始め とする同センターの皆様には,産業分野の立場から本研究に対する御助言を頂き,また進 路の相談に対しても親身な御意見,御助言を頂き,御礼申し上げます。 近畿大学 生物理工学 中迫 昇 教授には,学士課程において,直接御指導頂き,現在に 至るまで懇切丁寧なる御指導,御鞭撻を賜り,深く感謝致します。 富士常葉大学 総合経営学部 竹安 数博 教授, 大阪府立大学大学院 経済学研究科 黒田 竜 広 氏には,共同研究へのお誘いを頂き,新たな研究課題の礎を賜り,深く感謝致します。 本沖 大樹 氏 (2009 年卒業),田中 隆治 氏 (2010 年卒業),前田 明慶 氏 (2011 年卒業), 松田 剛志 氏,纐纈 友浩 氏, 伊佐治 俊 氏 を始めとする大阪府立大学大学院 工学研究科 知的信号処理グループの皆様には,日頃から研究に限らず多岐に渡り大変お世話になりま した。心より感謝を表します。 56 中塚 六連 氏, 長谷川 優 氏,柿原 健志 氏,山田 倫矢 氏, 川崎 康弘 氏 を始めとする 友人一同には,日頃より多大なるご支援を頂き,また励ましの声を掛けて頂きました。こ こに深く感謝致します。 最後に,研究生活を健康と精神面で支え,時には温かく見守り続け,時には叱咤激励し てくれた家族,親戚に最大限感謝致します。 57 参考文献 [1] 吉富 康成:“シリーズ 非線形科学入門 2 ニューラルネットワーク”, 朝倉書店 (2001). [2] 長谷川 浩史, 重田 和夫, 高橋 秀也, 志水 英二:“ニューラルネットワークを用いた顔 画像認識と方向検出の一方法”, 電子情報通信学会技術研究報告. IE, 画像工学, Vol.96, No.44, pp.31–36 (1996). [3] 山川 進三, 山口 晃史:“ニュ-ラルネットワ-クとガスセンサアレイを用いた匂いのパタン認識”, 電気学会論文誌 C 電子・情報・システム部門誌, Vol.113, No.8, pp.621–626 (1993). [4] 高橋 和彦, 中津 良平:“ニューラルネットワークによる感情音声認識に関する一考察 (機械力学, 計測, 自動制御)”, 日本機械学會論文集. C 編, Vol.68, No.672, pp.2339–2345 (2002). [5] 青木 尊之, 額田 彰:“はじめての CUDA プログラミング”, 工学社 (2009). [6] Michael Witbrock and Marco Zagha: “An Implementation of Back-Propagation Learning on GF11, a Large SIMD Parallel Computer”, Parallel Computing, Vol.14, pp.329–346 (1990). [7] 大道 茂夫, タノマル ジュリオ:“ホップフィールドネットワークにおけるエネルギー 関数パラメータの並列探索”, 電子情報通信学会総合大会講演論文集, Vol.1995, No.1, pp.46–47 (1995). [8] 山森 一人, 阿部 亨, 堀口 進:“超並列計算機上でのニューラルネットワークの並列 学習法”, 電子情報通信学会論文誌. D-II, 情報・システム, II-情報処理, Vol.80, No.1, pp.350–353 (1997). 参考文献 58 [9] AlexanderSinger: “Implementations of artificial neural networks on the Connection Machine”, Parallel Computing, Vol.14, No.3, pp.305 – 315 (1990). [10] 吉田 英嗣, 安永 守利, 吉原 郁夫:“遺伝的アルゴリズムを併用したニューラルネット ワークの並列学習 : 超並列計算機 CP-PACS への実装と評価”, 情報処理学会研究報 告. [ハイパフォーマンスコンピューティング], Vol.98, No.93, pp.55–60 (1998). [11] Kyoung-Su Oh and Keechul Jung: “GPU implementation of neural networks”, Pattern Recognition, Vol.37, No.6, pp.1311–1314 (2004). [12] Christopher Edward Davis: “Graphics Processing Unit Computation of Neural Networks”, Master’s thesis, B.S., Computer Science, University of New Mexico (2005). [13] “Twitter”, https://twitter.com/. [14] 土田 悠太, 吉岡 理文:“GPGPU を用いたニューラルネットワーク学習の高速化”, 電 気学会論文誌. C, 電子・情報・システム部門誌, Vol.131, No.11, pp.1889–1894 (2011). [15] 土田 悠太, 吉岡 理文:“GPGPU によるニューラルネットワークの実装”, 電子情報通 信学会 2010 年ソサイエティ大会 講演論文集 A-4-2 (2010). [16] 土田 悠太, 吉岡 理文:“GPGPU を用いたニューラルネットワーク学習の高速化”, 平 成 22 年電気関係学会関西連合大会 講演論文集 G10-7. (2010). [17] 土田 悠太, 吉岡 理文:“ニューラルネットワーク学習の並列化手法”, 平成 23 年電気 関係学会関西連合大会 講演論文集, pp.74–75 (2011). [18] YutaTsuchida and MichifumiYoshioka: “Neural network application using GPGPU”, Proceedings of the Sixteenth International Symposium on Artificial Life and Robotics, pp.870–872 (2011). [19] Hongzhi LiuZhongwen Luo and Xincai Wu: “Artificial Neural Network Computation on Graphic Process Unit”, In Proceedings of the 2005 IEEE international joint conference on neural networks, IJCNN ’05, No. 1 in 0, pp.622–626 (2005). 参考文献 59 [20] Honghoon Jang, Anjin Park and Keechul Jung: “Neural Network Implementation Using CUDA and OpenMP”, Digital Image Computing: Techniques and Applications (DICTA), 2008, pp.155 –161 (2008). [21] Andreas Brandstetter and Alessandro Artusi: “Radial Basis Function Networks GPU Based Implementation”, IEEE Transaction on Neural Network, Vol.19, No.12, pp.2150–2161 (2008). [22] 石井 健一郎, 前田 英作, 上田 修功, 村瀬 洋:“わかりやすいパターン認識”, オーム社 (1998). [23] Edgar Sanchez Sinencio and editorsClifford Lau: “Artificial neural networks: Paradigms, applications, and hardware implementations”, IEEE press, Piscataway, N.J, U.S. (1992). [24] 平野 廣美:“C++と Java でつくるニューラルネットワーク”, パーソナルメディア (2008). [25] 三村和史:“ニューラルネットワーク理論と符号”, 日本神経回路学会誌 = The Brain and neural networks, Vol.13, No.1, pp.19–27 (2006). [26] 国際電気通信基礎技術研究所(編) :“ニューラルネットワーク応用 (ATR 先端テク ノロジーシリーズ)”, オーム社 (1995). [27] 福水 健次:“多層ニューラルネットワークのバッチ学習における過学習の存在”, 1998 年情報論的学習理論ワークショップ, 箱根 (1998). [28] 岩田 穆, 雨宮 好仁:“ニューラルネットワーク LSI”, 社団法人電子情報通信学会 (1995). [29] 井上 貴志, 西尾 芳文:“カラー画像を扱う 3 層 Cellular Neural Networks の研究”, 電 子情報通信学会技術研究報告. NLP, 非線形問題, Vol.108, No.174, pp.33–36 (2008). [30] Keechul Jung: “Neural network-based text location in color images”, Pattern Recognition Letters 22(2001), pp.1503–1515 (2001). [31] 木村 有寿, 有薗 育生, 太田 宏:“ニューラルネットワークの需要予測への応用”, 日本 経営工学会誌, Vol.44, No.5, pp.401–407 (1993). 参考文献 60 [32] N.Baba and H.Suto: “Utilization of artificial neural networks and the td-learning method for constructing intelligent decision support systems”, European Journal of Operational Research, Vol.122, No.2, pp.501 – 508 (2000). [33] 土田 悠太, 大松 繁, 吉岡 理文:“PALSAR 画像による中国四川省大地震の被災状況 解析”, 第 53 回システム制御情報学会研究発表講演会 講演論文集 T14-1 (2009). [34] 土田 悠太, 大松 繁, 吉岡 理文:“PALSAR と AVNIR-2 画像による中国四川省の地表 分類”, 平成 21 年電気学会電子・情報・システム部門大会 講演論文集 GS11-7 (2009). [35] 土田 悠太, 大松 繁, 吉岡 理文:“PALSAR 画像を用いた中国四川省の土地利用解析”, 平成 21 年電気関係学会関西支部連合大会 講演論文集 G13-5 (2009). [36] YutaTsuchida, SigeruOmatu and MichifumiYoshioka: “Land cover estimation with alos satellite image using a neural-network”, Artificial Life and Robotics, Vol.15, pp.37–40 (2010). [37] Yuta Tsuchida, Sigeru Omatu and Michifumi Yoshioka: “The land cover estimation with ALOS satellite image using neural-network”, Proceedings of the Fifteenth International Symposium on Artificial Life and Robotics, pp.428–431 (2010). [38] 土田 悠太, 大松 繁, 吉岡 理文:“人工衛星 ALOS を用いた土地利用分類”, 第 54 回 シ ステム制御学会研究発表講演会 講演論文集 G13-5 (2010). [39] Prof. C.H.Chen Ed.: “Signal and Image Processing for Remote Sensing 2nd edition”, chapter 26, pp.525–531, CRC Press (2012). [40] Clay Breshears, 千住 治郎 (翻訳):“並行コンピューティング技法―実践マルチコア/ マルチスレッドプログラミング”, オライリージャパン (2009). [41] 池田 成樹:“OpenCL 並列プログラミング―マルチコア CPU/GPU のための標準フ レームワーク”, カットシステム (2010). [42] デイビッド・A・パターソン, ジョン・L・ヘネシー, 成田光彰 (翻訳):“コンピュータの 構成と設計 第 4 版(上)ハードウエアとソフトウエアのインタフェース (Computer 参考文献 61 Organization and Design: The Hardware/Software Interface, Fourth Edition)”, 日経 BP 社 (2011). [43] 飯島 弘文:“知って得するビデオボード入門 : グラフィックアクセラレータボードの 基礎知識から応用自在の活用法まで”, MS-Windows 環境を使いこなす知恵, メディ ア・テック出版 (1994). [44] “超高層ビルとパソコンの歴史”, http://www.eonet.ne.jp/∼building-pc/index. htm. [45] “PlayStation (ゲ ー ム 機 ) - Wikipedia”, http://ja.wikipedia.org/wiki/ PlayStation %28%E3%82%B2%E3%83%BC%E3%83%A0%E6%A9%9F%29. [46] “Direct3D - Wikipedia”, http://ja.wikipedia.org/wiki/Direct3D. [47] “Graphics Processing Unit - Wikipedia”, http://ja.wikipedia.org/wiki/ Graphics Processing Unit. [48] 宮永 直樹:“GPU を利用した文字認識システム”, Master’s thesis, 早稲田大学理工学 部情報学科 2004 年卒業論文 (2005). [49] 松井 学, 伊野 文彦, 萩原 兼一:“プログラマブル GPU における LU 分解の設計と実 装 (GPU 応用)”, 情報処理学会論文誌. コンピューティングシステム, Vol.46, No.12, pp.129–139 (2005). [50] “CUDA C Programming Guide :: CUDA Toolkit Documentation”, http://docs. nvidia.com/cuda/cuda-c-programming-guide/index.html. [51] “OpenCL Programming for the CUDA Architecture”, http://www.nvidia.com/ content/cudazone/download/OpenCL/NVIDIA OpenCL ProgrammingOverview. pdf. [52] ShuaiChe, MichaelBoyer, JiayuanMeng, DavidTarjan, Jeremy W.Sheaffer and KevinSkadron: “A performance study of general-purpose applications on graphics processors using CUDA”, J. Parallel Distrib. Comput., Vol.68, No.10, pp.1370–1380 (2008). 参考文献 62 [53] 下馬場 朋禄, 伊藤 智義, 杉江 崇繁, 増田 信之, 阿部 幸男, 白木 厚司, 市橋 保之, 高 田 直樹:“統合型シェーダを搭載した GPU によるフレネル回折積分の高速化 (研究 速報)”, 電子情報通信学会論文誌. D, 情報・システム, Vol.90, No.9, pp.2656–2658 (2007). [54] 筒井 茂義, 藤本 典幸:“GPU 計算を用いた並列進化計算による二次割当て問題の一 解法とその解析”, 人工知能学会第 3 回進化計算フォロンティア研究会 講演論文集, 岡 山大学工学部, pp.90–100 (2010). [55] 筒井 茂義:“GPU を用いた高速並列進化計算による組合せ最適化問題へのアプロー チ (< 特集 > インテリジェント技術と OR)”, オペレーションズ・リサーチ : 経営の 科学, Vol.57, No.5, pp.261–269 (2012). [56] 二星 義裕, 朴 泰祐, 塙 敏博, 池田 亮作, 日下 博幸, 飯 塚悟:“気象モデルの高解像度 計算の GPU 化”, 情報処理学会研究報告. [ハイパフォーマンスコンピューティング], Vol.2011, No.2, pp.1–6 (2011). [57] 上村 純平, 柏木 岳彦, 鳥居 隆史:“GPU 援用カラムストアデータベースの設計と 評価”, 情報処理学会研究報告. [ハイパフォーマンスコンピューティング], Vol.2011, No.26, pp.1–7 (2011). [58] MasakazuIWAMURA, TakayukiHONDO, KazutoNOGUCHI and KoichiKISE: “An Attempt of CUDA Implementation of PCA-SIFT(Internationa Session 6)”, 電子情 報通信学会技術研究報告. PRMU, パターン認識・メディア理解, Vol.107, No.281, pp.149–154 (2007). [59] W. B.Langdon and A. P.Harrison: “GP on SPMD parallel Graphics Hardware for mega Bioinformatics Data mining”, Soft Computing, Vol.12, No.12, pp.1169–1183 (2008). Special Issue on Distributed Bioinspired Algorithms. [60] BryanCatanzaro, NarayananSundaram and KurtKeutzer: “Fast support vector machine training and classification on graphics processors”, Proceedings of the 25th international conference on Machine learning, ICML ’08, New York, NY, USA, ACM, pp.104–111 (2008). 参考文献 63 [61] 船津 暢宏, 黒木 祥光:“GPU による PCA-L1 アルゴリズムの高速並列演算 (高精細画 像の処理・表示, 及び一般)”, 電子情報通信学会技術研究報告. IE, 画像工学, Vol.109, No.292, pp.13–17 (2009). [62] 須藤 健児, 金子 正秀:“GPGPU による顔特徴点の実時間検出に基づく似顔絵アニ メーションの自動生成 (学生研究発表会)”, 映像情報メディア学会技術報告, Vol.35, No.8, pp.5–8 (2011). [63] 蔵野 裕己, 吉見 真聡, 三木 光範, 廣安 知之:“GPU 向け並列計算フレームワークの提 案と GA を用いた性能評価”, 情報処理学会研究報告 (HOKKE19), Vol.2011-HPC-132, pp.1–8 (2011). [64] FangZhou Xiao, Eric McCreath and Christfried Webers: “Fast On-line Statistical Learning on a GPGPU”, 9th Australasian Symposium on Parallel and Distributed Computing, Perth/Australia, p.8 pages (2011). [65] Tze-YuiHo, Ping-ManLam and Chi-SingLeung: “Parallelization of cellular neural networks on GPU”, Pattern Recognition, Vol.41, No.8, pp.2684 – 2692 (2008). [66] RajatRaina, AnandMadhavan and Andrew Y.Ng: “Large-scale deep unsupervised learning using graphics processors”, Proceedings of the 26th Annual International Conference on Machine Learning, ICML ’09, New York, NY, USA, ACM, pp.873– 880 (2009). [67] 土田 悠太, 吉岡 理文:“ニューラルネットワーク学習の並列化手法”, 平成 23 年電気 関係学会関西連合大会 講演論文集, pp.74–75 (2011). [68] YutaTsuchida, MichifumiYoshioka and SigeruOmatu: “Speed-Up Method for Neural Network Learning Using GPGPU”, Proceedings of 9th International Conference on Distributed Computing and Artificial Intelligence, pp.73–80 (2012). [69] Yuta Tsuchida, Michifumi Yoshioka and Hidekazu Yanagimoto: “Speed Up Method for Neural Network Back Propagation Learning by Using GPGPU”, Proceedings of The Second International Conference on Computers, Network, Systems, and Industrial Applications, pp.225–230 (2012). 参考文献 64 [70] 土田 悠太, 吉岡 理文:“ニューラルネットワーク学習の並列化手法”, 電気学会論文 誌. C, 電子・情報・システム部門誌, Vol.132, No.11, pp.1762–1767 (2012). [71] Yuta Tsuchida and Michifumi Yoshioka: “Speed Up Method for Neural Network Learning by Using GPGPU”, Proceedings of The 6th International Conference on Soft Computing and Intelligent Systems The 13th International Symposium on Advanced Intelligent Systems SCIS-ISIS, pp.225–230 (2012). [72] Yuta Tsuchida and Michifumi Yoshioka: “Speed Up Method for Neural Network Learning by Using GPGPU”, Proceedings of The 6th International Conference on Soft Computing and Intelligent Systems The 13th International Symposium on Advanced Intelligent Systems SCIS-ISIS, pp.225–230 (2012). [73] Sakaki Takeshi, Okazaki Makoto and Matsuo Yutaka: “Earthquake shakes Twitter users: real-time event detection by social sensors”, Proceedings of the 19th international conference on World wide web, WWW ’10, New York, NY, USA, ACM, pp.851–860 (2010). [74] JohanBollen, HuinaMao and Xiao-JunZeng: “Twitter mood predicts the stock market”, CoRR, Vol.abs/1010.3003, (2010). [75] 古川 忠延, 阿部 修也, 安藤 剛寿, 岩倉 友哉, 志賀 聡子, 高橋 哲朗, 井形 伸之:“Twitter からの犯罪情報抽出の可能性調査”, 情報処理学会研究報告. DD, [デジタル・ドキュ メント], Vol.2011, No.3, pp.1–6 (2011). [76] “MeCab : Yet Another Part-of-Speech and Morphological Analyzer”, http:// mecab.googlecode.com/svn/trunk/mecab/doc/index.html.
© Copyright 2024 ExpyDoc