IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 富士通株式会社の特許一覧

特許7453563ニューラルネットワークシステム、ニューラルネットワークの学習方法及びニューラルネットワークの学習プログラム
<>
  • 特許-ニューラルネットワークシステム、ニューラルネットワークの学習方法及びニューラルネットワークの学習プログラム 図1
  • 特許-ニューラルネットワークシステム、ニューラルネットワークの学習方法及びニューラルネットワークの学習プログラム 図2
  • 特許-ニューラルネットワークシステム、ニューラルネットワークの学習方法及びニューラルネットワークの学習プログラム 図3
  • 特許-ニューラルネットワークシステム、ニューラルネットワークの学習方法及びニューラルネットワークの学習プログラム 図4
  • 特許-ニューラルネットワークシステム、ニューラルネットワークの学習方法及びニューラルネットワークの学習プログラム 図5
  • 特許-ニューラルネットワークシステム、ニューラルネットワークの学習方法及びニューラルネットワークの学習プログラム 図6
  • 特許-ニューラルネットワークシステム、ニューラルネットワークの学習方法及びニューラルネットワークの学習プログラム 図7
  • 特許-ニューラルネットワークシステム、ニューラルネットワークの学習方法及びニューラルネットワークの学習プログラム 図8
  • 特許-ニューラルネットワークシステム、ニューラルネットワークの学習方法及びニューラルネットワークの学習プログラム 図9
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-03-12
(45)【発行日】2024-03-21
(54)【発明の名称】ニューラルネットワークシステム、ニューラルネットワークの学習方法及びニューラルネットワークの学習プログラム
(51)【国際特許分類】
   G06N 3/08 20230101AFI20240313BHJP
【FI】
G06N3/08
【請求項の数】 9
(21)【出願番号】P 2021569687
(86)(22)【出願日】2020-01-10
(86)【国際出願番号】 JP2020000644
(87)【国際公開番号】W WO2021140643
(87)【国際公開日】2021-07-15
【審査請求日】2022-07-11
(73)【特許権者】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】100094525
【弁理士】
【氏名又は名称】土井 健二
(74)【代理人】
【識別番号】100094514
【弁理士】
【氏名又は名称】林 恒徳
(72)【発明者】
【氏名】檀上 匠
【審査官】渡辺 順哉
(56)【参考文献】
【文献】特開2019-212111(JP,A)
【文献】特開2019-109875(JP,A)
【文献】欧州特許出願公開第03591583(EP,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06N 3/00-99/00
(57)【特許請求の範囲】
【請求項1】
メモリと、
前記メモリにアクセスする複数のプロセッサとを有し、
前記複数のプロセッサそれぞれは、複数回の学習それぞれにおいて、
訓練データの入力とニューラルネットワーク内のパラメータとに基づいて前記ニューラルネットワークの演算を実行して前記ニューラルネットワークの出力を算出し、前記算出した出力と前記訓練データの教師データとの差分の前記パラメータに対する勾配または前記勾配に基づく更新量を算出し、
前記勾配または前記更新量の累積が閾値未満でない第1の場合、前記複数のプロセッサが、それぞれ算出した複数の前記勾配または前記更新量の累積を、前記複数のプロセッサ内の他のプロセッサに送信して前記複数の勾配または更新量の累積を集約し、前記集約された勾配または更新量の累積を受信し、前記集約された勾配または更新量の累積で前記パラメータを更新する第1の更新処理を実行し、
前記勾配または前記更新量の累積が前記閾値未満である第2の場合、前記複数のプロセッサが、前記送信による前記複数の勾配または更新量の累積の集約を行わず、前記複数のプロセッサそれぞれが算出した前記勾配または更新量でそれぞれのパラメータを更新する第2の更新処理を実行する、ニューラルネットワークシステム。
【請求項2】
前記複数のプロセッサそれぞれは、更に、
前記第1の場合、前記第2の更新処理を連続して行った学習回数が第1の基準回数未満の場合には、前記第2の更新処理を実行する、請求項1に記載のニューラルネットワークシステム。
【請求項3】
前記複数のプロセッサそれぞれは、更に、
前記第2の場合、前記学習回数が前記第1の基準回数より多い第2の基準回数未満でない場合には、前記第1の更新処理を実行する、請求項2に記載のニューラルネットワークシステム。
【請求項4】
前記複数のプロセッサそれぞれは、更に、
前記学習回数が前記第1の基準回数未満でなく且つ前記第2の基準回数未満の場合、前記第1の場合に前記第1の更新処理を実行し、前記第2の場合に前記第2の更新処理を実行する、請求項3に記載のニューラルネットワークシステム。
【請求項5】
前記第1の場合では、前記複数のプロセッサそれぞれが算出した複数の勾配または更新量の累積のうち少なくとも1つの勾配または更新量の累積が前記閾値未満でない、請求項1に記載のニューラルネットワークシステム。
【請求項6】
前記複数の勾配または更新量の集約は、前記複数の勾配または更新量の累積を加算すること、前記複数の勾配または更新量の累積の最大値を求めることのいずれかである、請求項1に記載のニューラルネットワークシステム。
【請求項7】
前記集約された勾配または更新量の累積は、前記複数の勾配または更新量を前記第2の更新処理の回数分累積し、前記複数の勾配または更新量の累積を平均化した値である、請求項1に記載のニューラルネットワークシステム。
【請求項8】
複数のプロセッサそれぞれが、複数回の学習それぞれにおいて、
訓練データの入力とニューラルネットワーク内のパラメータとに基づいて前記ニューラルネットワークの演算を実行して前記ニューラルネットワークの出力を算出し、前記算出した出力と前記訓練データの教師データとの差分の前記パラメータに対する勾配または前記勾配に基づく更新量を算出し、
前記勾配または前記更新量の累積が閾値未満でない第1の場合、前記複数のプロセッサが、それぞれ算出した複数の前記勾配または前記更新量の累積を、前記複数のプロセッサ内の他のプロセッサに送信して前記複数の勾配または更新量の累積を集約し、前記集約された勾配または更新量の累積を受信し、前記集約された勾配または更新量の累積で前記パラメータを更新する第1の更新処理を実行し、
前記勾配または前記更新量の累積が前記閾値未満である第2の場合、前記複数のプロセッサが、前記送信による前記複数の勾配または更新量の累積の集約を行わず、前記複数のプロセッサそれぞれが算出した前記勾配または更新量でそれぞれのパラメータを更新する第2の更新処理を実行する、ニューラルネットワークの学習方法。
【請求項9】
ニューラルネットワークの学習を複数のプロセッサに実行させるニューラルネットワークの学習プログラムにおいて、
前記学習は、
複数のプロセッサそれぞれが、複数回の学習それぞれにおいて、
訓練データの入力とニューラルネットワーク内のパラメータとに基づいて前記ニューラルネットワークの演算を実行して前記ニューラルネットワークの出力を算出し、前記算出した出力と前記訓練データの教師データとの差分の前記パラメータに対する勾配または前記勾配に基づく更新量を算出し、
前記勾配または前記更新量の累積が閾値未満でない第1の場合、前記複数のプロセッサが、それぞれ算出した複数の前記勾配または前記更新量の累積を、前記複数のプロセッサ内の他のプロセッサに送信して前記複数の勾配または更新量の累積を集約し、前記集約された勾配または更新量の累積を受信し、前記集約された勾配または更新量の累積で前記パラメータを更新する第1の更新処理を実行し、
前記勾配または前記更新量の累積が前記閾値未満である第2の場合、前記複数のプロセッサが、前記送信による前記複数の勾配または更新量の累積の集約を行わず、前記複数のプロセッサそれぞれが算出した前記勾配または更新量でそれぞれのパラメータを更新する第2の更新処理を実行する、ニューラルネットワークの学習プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ニューラルネットワークシステム、ニューラルネットワークシステムの学習方法及びニューラルネットワークシステムの学習プログラムに関する。
【背景技術】
【0002】
ニューラルネットワークは、例えば、複数の入力にそれぞれの重みを乗算し、その複数の乗算値を加算した値を出力層のニューロンの活性化関数に入力し、活性化関数の出力を出力する構成を有する。このような単純な構成のニューラルネットワークは、単純パーセプトロンと称される。さらに、上記の単純な構成を複数層有し、ある層の出力を他の層に入力するニューラルネットワークは、多層パーセプトロンと称される。また、ディープニューラルネットワークは、多層パーセプトロンのように、入力層と出力層との間に複数の隠れ層を有する。以下、ニューラルネットワークは略してNN(Neural Network)と称する。
【0003】
NNは、大量の訓練データを用いて学習することで、前述の重みなどのパラメータを最適化する。訓練データの数が多いほどモデルの精度を高めることができるが、一方で、学習回数が増大し学習に要する演算時間が長くなるという問題がある。
【0004】
NNの学習に要する演算時間を短くする方法として、訓練データを分割し、複数の演算ノードで並列に学習の演算を実行するデータ並列型分散学習が提案されている。データ並列型分散学習については、例えば、以下の特許文献に記載されている。
【先行技術文献】
【特許文献】
【0005】
【文献】特開2018-120470号公報
【文献】特開2012-79080号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
データ並列型分散学習では、訓練データを演算ノードの数で分割し、複数の演算ノードがそれぞれの訓練データに基づいて学習の演算を実行して、NNのパラメータについてNNの出力の誤差関数の勾配を算出し、勾配に学習率を乗じたパラメータの更新量を算出する。その後、演算ノードは、各ノードの更新量の平均を求め、全演算ノードが、更新値の平均でパラメータを更新する。複数の演算ノードがそれぞれの訓練データで並列に学習演算を行うことで、単一の演算ノードが単一の訓練データで学習演算するよりも学習に要する演算時間を短くできる。
【0007】
しかしながら、複数の演算ノードそれぞれが算出した更新量の平均を求めるためには、複数の演算ノードそれぞれが算出した更新量を加算するなどして集約し、集約した加算値を複数の演算ノードで共有する必要がある。そして、集約するときと共有するときに、複数の演算ノード間でデータの通信処理が行われる。
【0008】
その結果、データ並列型分散学習は、訓練データを並列に演算することで学習に要する演算時間を短縮するが、学習工程毎に行われる演算ノード間の通信処理の時間により、演算時間の短縮効果が抑制される。
【0009】
そこで、本実施の形態の第1の側面の目的は、データ並列型分散学習のスループットを向上させるニューラルネットワークシステム、ニューラルネットワークの学習方法及びニューラルネットワークの学習プログラムを提供することにある。
【課題を解決するための手段】
【0010】
本実施の形態の第1の側面は、メモリと、前記メモリにアクセスする複数のプロセッサとを有し、前記複数のプロセッサそれぞれは、複数回の学習それぞれにおいて、
訓練データの入力とニューラルネットワーク内のパラメータとに基づいて前記ニューラルネットワークの演算を実行して前記ニューラルネットワークの出力を算出し、前記算出した出力と前記訓練データの教師データとの差分の前記パラメータに対する勾配または前記勾配に基づく更新量を算出し、
前記勾配または前記更新量の累積が閾値未満でない第1の場合、前記複数のプロセッサが、それぞれ算出した複数の前記勾配または前記更新量の累積を、前記複数のプロセッサ内の他のプロセッサに送信して前記複数の勾配または更新量の累積を集約し、前記集約された勾配または更新量の累積を受信し、前記集約された勾配または更新量の累積で前記パラメータを更新する第1の更新処理を実行し、
前記勾配または前記更新量の累積が前記閾値未満である第2の場合、前記複数のプロセッサが、前記送信による前記複数の勾配または更新量の累積の集約を行わず、前記複数のプロセッサそれぞれが算出した前記勾配または更新量でそれぞれのパラメータを更新する第2の更新処理を実行する、ニューラルネットワークシステムである。
【発明の効果】
【0011】
第1の側面によれば、データ並列型分散学習のスループットが向上する。
【図面の簡単な説明】
【0012】
図1】本実施の形態におけるNNシステムの構成例を示す図である。
図2】一般的なNNにおける学習の処理例を示す図である。
図3】データ分割型分散学習における複数の演算ノードの処理のフローを示す図である。
図4】データ分割型分散学習における複数の演算ノードの具体的処理を示すフローチャート図である。
図5】Reduce処理とAllreduce処理の一般的な例を示す図である。
図6】NNの学習をデータ分割型分散学習で行った場合のReduce処理とAllreduce処理の例を示す図である。
図7】第1の実施の形態によるデータ並列型分散学習のフローチャート図である。
図8】第2の実施の形態によるデータ並列型分散学習のフローチャート図である。
図9】第2の実施の形態における学習の更新サイクルの変化例を示す図である。
【発明を実施するための形態】
【0013】
[本実施の形態のニューラルネットワークシステム]
図1は、本実施の形態におけるNNシステムの構成例を示す図である。NNシステム1は、例えば、ハイパフォーマンスコンピュータであり、メインプロセッサ(CPU:Central Processing Unit)10と、メインメモリ12と、サブプロセッサモジュール13と、ネットワークNETとのインタフェース18とを有する。サブプロセッサモジュール13は、例えば、4つの演算ノードモジュールを有し、各演算ノードモジュールは、サブプロセッサ14とサブプロセッサがアクセスするメモリ16とを有する。
【0014】
更に、NNシステム1は、大容量ストレージである補助記憶装置20-26を有し、補助記憶装置には、NN学習プログラム20と、NNプログラム22と、訓練データ24と、パラメータ26が記憶される。NN学習プログラム20は、プロセッサ10、14により実行され、訓練データを利用した学習の処理を行う。また、NNプログラム22は、プロセッサ10、14により実行され、NNモデルの演算を実行する。訓練データ24は、それぞれ入力と教師データであるラベルを有する複数のデータである。パラメータ26は、例えば学習により最適化されるNN内の複数の重みである。
【0015】
メインプロセッサ10は、NN学習プログラム20を実行し、複数の訓練データによるNN学習の演算を、複数のサブプロセッサ14に分散して並列に実行させる。4つのサブプロセッサ14は、プロセッサチップからなる演算ノードであり、バス28を介して互いに通信可能に構成される。
【0016】
NNシステム1は、ネットワークNETを介して、NNのプラットフォームをクライアント端末30、32に提供することができる。NNシステム1は、図1の構成以外に、複数のコンピュータを演算ノードとし、複数のコンピュータが互いに通信可能な構成であってもよい。
【0017】
[NNの学習]
図2は、一般的なNNにおける学習の処理例を示す図である。図2のNNは、入力層IN_Lと、3つの隠れ層であるニューロン層NR_L1~NR_L3を有する。第3のニューロン層NR_L3は出力層を兼ねる。
【0018】
NNの学習の処理の概略は次の通りである。プロセッサ10又は14は、ストレージ内の訓練データ24から、入力データとラベルを有する一つの訓練データを読み出し、入力層IN_Lに入力データを入力する。プロセッサは、NN学習プログラムを実行し、入力された訓練データを使用して第1のニューロン層NR_L1の演算を実行し、その演算結果を第2のニューロン層NR_L2に入力する。更に、プロセッサは、演算結果を使用して第2のニューロン層NR_L2の演算を実行し、その演算結果を第3のニューロン層NR_L3に入力し、最後に、その演算結果について第3のニューロン層NR_L3の演算を実行し、演算結果を出力する。入力層IN_Lの入力に対して3つのニューロン層NR_L1~NR_L3が順番にそれぞれの演算を実行することは、順伝播処理FWと称される。
【0019】
一方、プロセッサは、訓練データのラベル(正解データ)と第3のニューロン層NR_3の出力との差分E3を演算し、差分E3をニューロン層NR_L3内のパラメータwで微分して勾配ΔE3を求める。プロセッサは、差分E3から第2のニューロン層NR_L2での差分E2を算出し、差分E2をニューロン層NR_L2内のパラメータwで微分して勾配ΔE2を求める。そして、プロセッサは、差分E2から第1のニューロン層NR_L1での差分E1を算出し、差分E1をニューロン層NR_L1内のパラメータwで微分して勾配ΔE1を求める。更に、出力層である第3のニューロン層NR_L3の出力と正解値のラベルとの差分E3を第2、第1のニューロン層に伝播しながら、各層NR_L3、NR_L2、 NR_L1で勾配ΔE3、ΔE2、ΔE1を順番に演算することは、逆伝播処理BWと称される。
【0020】
一般に、各ニューロン層の演算処理では、各層への入力と複数のパラメータwとでそれぞれの演算が行われる。教師あり学習では、各学習で、訓練データの入力データに基づいてNNが推定した出力とラベル(教師データ)との差分が最小になるよう、勾配法により、複数のパラメータwを更新する。パラメータの更新量は、差分Eをパラメータwで微分して求めた勾配ΔEに学習率ηを乗じて算出される。
【0021】
[データ分割型分散学習]
NN、とりわけディープNN(以下DNNと称する)は、訓練データの数が多いほど、そして、訓練データを使用した学習の回数が多いほど、NNやDNNの精度を向上させることができる。しかし、訓練データの数が膨大になると、それに対応してNNシステムによる学習時間が長くなる。そこで、学習時間を短縮するためには、複数の演算ノードで学習処理を分散して行うデータ並列型分散学習が有効になる。
【0022】
データ並列型分散学習では、複数の訓練データそれぞれによる学習を複数の演算ノードに分散して実行させる。すなわち、複数の演算ノードが、それぞれの訓練データを使用して順伝播処理FWと逆伝播処理BWを実行して、複数の演算ノードそれぞれのNNの差分Eのパラメータwに対応する勾配ΔEを算出する。そして、複数のノードでそれぞれの勾配ΔEまたは勾配に学習率を乗じたパラメータの更新量Δwを求め、複数のノードで共有する。更に、複数のノードが、勾配ΔEの平均または更新量Δwの平均を取得し、複数のノードがそれぞれのNNのパラメータwを更新量Δwの平均で更新する。
【0023】
上記の学習方法のように、複数のノードそれぞれが1つの訓練データを使用して順伝播処理と逆伝播処理を実行して勾配または更新量を求め、それらの平均に基づいて各ノードのパラメータwを更新する処理は、ノード数の訓練データをミニバッチ単位とするミニバッチ法に対応した処理である。複数のノードそれぞれが複数のプロセスでプロセスの数の訓練データを使用して順伝播処理と逆伝播処理を実行する場合は、ノード数と各ノードのプロセス数を乗算した数の訓練データをミニバッチとするミニバッチ法に対応する。
【0024】
上記の勾配または更新量の平均を求める処理は、並列コンピューティングの標準規格であるMPI(Message Passing Interface)に含まれるReduce処理とAllreduce処理を含む。このReduce処理とAllreduce処理では、複数の演算ノードそれぞれのパラメータを集約(例えば加算)し、集約した値を全ての複数の演算ノードが取得する。この処理には、複数の演算ノード間でのデータの通信が必要となる。
【0025】
図3は、データ分割型分散学習における複数の演算ノードの処理のフローを示す図である。また、図4は、データ分割型分散学習における複数の演算ノードの具体的処理を示すフローチャート図である。これらの例では、4つの演算ノードND_1~ND_4が、それぞれ、1つの訓練データを使用して学習を行い、ある演算ノードが4つの演算ノードがそれぞれ算出したパラメータwの更新量Δwを集約し、各演算ノードが集約した更新量の平均値でそれぞれのパラメータを更新する。図3図4を参照して、データ分割型分散学習の概略を以下説明する。
【0026】
4つの演算ノードは、例えば、図1の4つのサブプロセッサ14に対応する。NNシステムが4つのコンピュータにより構成される場合は、4つの演算ノードは、4つのコンピュータのプロセッサに対応する。
【0027】
4つの演算ノードND_1~ND_4は、NN学習プログラムを実行して、以下の処理を行う。最初に、4つの演算ノードND_1~ND_4それぞれは、訓練データのデータD1~D4のうちそれぞれに対応するデータを入力する(S10)。データD1~D4は、各演算ノードの第1のニューロン層NR_L1に入力される。そして、各演算ノードは、順伝播処理FWを実行し、各ニューロン層の演算を実行する(S11)。図3中、データD1、D2は、手書き文字「6」「2」である。
【0028】
次に、各演算ノードは、それぞれのNNの出力OUTと教師データであるラベルLBの差分E1~E4を算出する。演算ノードND_1、ND_2の出力OUTは「5」「3」であり、ラベルLBは「6」「2」である。ここで、差分E1~E3は、出力OUTとラベルLBの差分の二乗和である。より具体的には、NNは、手書きの数字を推定するモデルであり、出力層である第3のニューロン層は、入力データの数字が数字0~9に該当する確率をそれぞれ出力する。この10個の確率の出力に対し、数字0~9の確率の教師データは、ラベルLBが示す数字の確率が「1」、ラベルLBと異なる数字の確率が「0」とする。そして、演算ノードは、それぞれの確率の差分の二乗和を差分Eとして算出する。
【0029】
そして、各演算ノードは、それぞれの差分Eを各ニューロン層に伝播し(S13)、各ニューロン層のパラメータwで伝播された差分Eを微分して勾配ΔEを演算する。更に、各演算ノードは、勾配ΔEに学習率ηを乗じてパラメータwの更新量Δwを算出する(S14)。
【0030】
ここで、4つの演算ノードND_1~ND_4は、それぞれの更新量Δwを演算ノード間のバス28を介して演算ノード間で通信し、ある演算ノードが、全ノードのパラメータw1~w4の更新量Δw1~Δw4を集約するreduce処理を行う。集約は、例えば加算(または最大値の抽出)である。そして、4つの演算ノードが、集約した加算値Δw_adをバス28を介して受信し、全演算ノードで共有するAllreduce処理を行う(S15)。
【0031】
次に、各演算ノードは、集約した加算値Δw_adを演算ノード数4で除算して更新量Δwの平均値Δw_ad/4を算出し、既存のパラメータw1~w4に加算してそれぞれのパラメータを更新する(S16)。これにより、ミニバッチによる1回の学習が終了する。学習が終了すると、各演算ノードのNNのパラメータは同じ値に更新される。そして、各演算ノードは、処理S10に戻り、次の学習を実行する。
【0032】
次に、Reduce処理とAllreduce処理について説明する。
【0033】
図5は、Reduce処理とAllreduce処理の一般的な例を示す図である。図5の例では、4つの演算ノードND_1~ND_4がそれぞれ値y1~y4を所有している。Reduce処理では、各演算ノードがそれぞれの値y1~y4をバス28を介して通信し、例えば、一つの演算ノードND_1が全ての値y1~y4を受信し、所定の関数fで4つの値を演算して集約値f(y1,y2,y3,y4)を算出する。
【0034】
次に、Allreduce処理では、演算ノードND_1が集約値f(y1,y2,y3,y4)を、他の演算ノードND_2~ND_4にバス28を介してそれぞれ送信し、全演算ノードで集約値を共有する。
【0035】
図5の例では、演算ノードND_2~ND_4がそれぞれの値y2~y4を演算ノードND_1に送信している。但し、演算ノードND_4が演算ノードND_3に値y4を送信し演算ノードND_3が加算値y3+y4を算出し、更に、演算ノードND_2が演算ノードND_1に値y2を送信し演算ノードND_1が加算値y1+y2を算出し、そして、演算ノードND_3が加算値y3+y4を演算ノードND_1に送信し、演算ノードND_1が集約値f(y1,y2,y3,y4)=y1+y2+y3+y4を算出してもよい。
【0036】
また、別の処理方法としては、4つの演算ノードND_1~ND_4がそれぞれ配列データ(w1,x1,y1,z1)、(w2,x2,y2,z2)、(w3,x3,y3,z3)、(w4,x4,y4,z4)を所有している場合、各演算ノードが、データwは演算ノードND_1に、データxは演算ノードND_2に、データyは演算ノードND_3に、そして、データzは演算ノードND_4にそれぞれ送信する。そして、
演算ノードND_1が集約値f(w1,w2,w3,w4)=w1+w2+w3+w4を算出し、
演算ノードND_2が集約値f(x1,x2,x3,x4)=x1+x2+x3+x4を算出し、
演算ノードND_3が集約値f(y1,y2,y3,y4)=y1+y2+y3+y4を算出し、
演算ノードND_4が集約値f(z1,z2,z3,z4)=z1+z2+z3+z4を算出する。
【0037】
ここまではReduce処理である。次に、各演算ノードが、それぞれ算出した集約値を他の演算ノードにバス28を介してそれぞれ送信し、集約値を全演算ノードで取得し共有する。この処理はAllreduce処理である。
【0038】
図6は、NNの学習をデータ分割型分散学習で行った場合のReduce処理とAllreduce処理の例を示す図である。図4で説明したとおり、各演算ノードがそれぞれのパラメータw1~w4の更新量Δw1~Δw4を算出した段階で、各演算ノードがReduce処理を行うと、全演算ノードの更新量Δw1~Δw4が、例えば一つの演算ノードND_1に送信され、演算ノードND_1が加算関数fにより更新量Δw1~Δw4の加算値Δw_adを集約値として算出する。そして、演算ノードND_1が加算値Δw_adを他の演算ノードND_2~ND_4に送信して、全演算ノードが加算値を取得し共有する。
【0039】
次に、データ分割型分散学習では、各演算ノードND_1~ND_4それぞれが、平均化処理Averageで、加算値Δw_adを演算ノード数4で除算して更新量Δwの平均値Δw_avを算出する。そして、各演算ノードND_1~ND_4それぞれが、更新処理Updateで、更新量の平均値Δw_avを既存のパラメータw1~w4に加算する。
【0040】
ミニバッチ法では、上記のデータ並列型分散学習により、ミニバッチの複数の訓練データを複数の演算ノードに分散し、複数の演算ノードがパラメータの勾配ΔEまたは更新量Δwまで並列に演算を行い、複数の訓練データでそれぞれ算出した複数の更新量Δw1~Δw4の平均値で各演算ノードのパラメータwを更新する。したがって、ある訓練データで算出された更新量Δwが、他の訓練データで算出された更新量から大きく乖離した例外的な値であっても、複数の更新量の平均値で全演算ノードのNNのパラメータwを更新するので、例外的な更新量による学習への悪影響を抑制することができる。
【0041】
その一方で、各学習で演算ノード間の通信処理を含むReduce処理とAllreduce処理が実行されることにより、通信処理による学習の処理時間が長くなるという問題が生じる。
【0042】
[第1の実施の形態によるデータ並列型分散学習]
図7は、第1の実施の形態によるデータ並列型分散学習のフローチャート図である。図7には、図4のフローチャートにおける、演算ノードND_1の学習処理のフローチャートが示され、残りの演算ノードND_2~ND_4の学習処理のフローチャートは省略されている。本分散学習では、図7に示した演算ノードND_1の学習処理のフローチャートS10~S16、S16A、S20~S23が、残りの演算ノードND_2~ND_4でも同様に実行される。そして、4つの演算ノードの学習処理のフローチャートは、図4の各演算ノードの学習処理のフローチャートを、図7の演算ノードND_1の学習処理のフローチャートに置き換えることで得られる。
【0043】
ここでも前提として、4つの演算ノードそれぞれが、1つの訓練データを使用して学習を行い、各演算ノードは、それぞれのNN内の1つのパラメータwを最適化するものとする。一般に、NNは多数のパラメータwを有するが、まず、NNの1つのパラメータwの例で説明し、その後、NNが有する複数のパラメータwに対してどのように処理されるかを説明する。
【0044】
本分散学習では、複数の演算ノードそれぞれが算出した勾配ΔEまたは更新量Δwについて、全学習でReduce処理とAllreduce処理を実行することはない。つまり、プロセッサは、複数の演算ノードが算出した勾配または更新量が閾値未満の場合、Reduce処理とAllreduce処理を実行せず、各演算ノードで算出した勾配または更新量を使用してそれぞれのパラメータwを更新する。また、プロセッサは、複数の演算ノードが算出した勾配または更新量が閾値未満でない場合、Reduce処理とAllreduce処理を実行し、集約した勾配または更新量の平均値を使用してそれぞれのパラメータwを更新する。
【0045】
これにより、本実施の形態のNNシステムは、ミニバッチ法による例外的な値の勾配や更新量による弊害を抑制しつつ、Reduce処理とAllreduce処理による通信処理を時々スキップして、全学習の処理時間を短縮する。
【0046】
但し、Reduce処理とAllreduce処理が実行されない学習が連続して行われた後、Reduce処理とAllreduce処理を行って更新量の平均値で複数の演算ノードのNNのパラメータwを更新するとき、全演算ノードのパラメータwを同じ値にリセットする必要がある。そこで、各演算ノードが、Reduce処理及びAllreduce処理を実行しない学習での勾配または更新量をそれぞれ累積しておき、Reduce処理及びAllreduce処理が行われたときに、その更新量の累積値で各演算ノードのパラメータを更新する。そのため、各演算ノードは、学習したときに算出した勾配Eまたは更新量Δwの累積ErまたはΔwrを記憶しておく。
【0047】
以下の説明では、勾配または更新量は、簡単化して更新量Δwとする。但し、更新量Δwに代えて、勾配ΔEについてReduce処理とAllreduce処理を行ってもよい。
【0048】
図7のフローチャートに沿って、各演算ノードの学習処理を説明する。図7には示していないが、学習の開始直後に、演算ノードND_1~ND_4は、それぞれの累積更新量Δwr1~Δwr4を0にリセットする。次に、演算ノードND_1~ND_4は、訓練データの入力データを入力し、順伝播処理、差分E1の算出、逆伝播処理、及びパラメータwの更新量Δw1~Δw4の算出を実行する(S10~S14)。そして、各演算ノードは、累積更新量Δwr1~wr4に算出した更新量Δw1~Δw4をそれぞれ加算する(S20)。学習開始直後は、全演算ノードの累積更新量は全て0であるので、累積更新量Δwr1~wr4は初回学習での更新量Δw1~Δw4と等しい。
【0049】
次に、各演算ノードは、それぞれの累積更新量Δwr1~wr4が閾値TH未満か否かを判定する(S21)。全演算ノードでそれぞれの累積更新量Δwr1~wr4が閾値TH未満の場合(S21のYES)、各演算ノードは、それぞれのパラメータw1~w4にそれぞれの更新量Δw1~Δw4を加算してパラメータを更新する(S16A)。その結果、各演算ノードは、それぞれ算出した更新量Δw1~Δw4でそれぞれのパラメータw1~w4を更新する。
【0050】
一方、全演算ノードでそれぞれの累積更新量Δwr1~wr4が閾値TH未満とはならない場合(S21のNO)、演算ノードND_1~ND_4が、それぞれ算出した累積更新量Δwr1~Δwr4を送受信し、全演算ノードの累積更新量Δwr1~Δwr4を加算するなどして集約し(Reduce処理)、その集約した累積更新量Δwr_adを全ノードで共有する(Allreduce処理)(S15)。具体的には、演算ノードND_1~ND_4のうち一つの演算ノード、例えば演算ノードND_1が、他の演算ノードND_2~ND_4から累積更新量Δwr2~Δwr4を受信し、加算し、その加算した集約累積更新量Δwr_adを他の演算ノードND_2~ND_4に送信する。上記判定S21のNOの場合とは、全累積更新量Δwr1~wr4が閾値TH未満にならないこと、少なくとも1つの累積更新量が閾値TH未満ではないことを意味する。上記判定S21のYESの場合とは、全累積更新量Δwr1~wr4が閾値TH未満になることを意味する。
【0051】
そして、各演算ノードND_1~ND_4が、集約累積更新量Δwr_adを演算ノードの数「4」で除算して各累積更新量の平均値Δwr_ad/4を求め、それぞれのパラメータw1~w4の更新量を累積し始める前のパラメータw1~w4の値に、累積更新量の平均値Δwr_ad/4を加算して、各パラメータを共通の値に更新する(S16)。それと共に、各演算ノードが、それぞれの累積更新量Δwr1~Δwr4を0にリセットする(S22)。
【0052】
各演算ノードは、全体の学習回数がN未満の間、上記の学習処理を繰返す(S23)。
【0053】
上記の学習処理によれば、各演算ノードND_1~ND_4が算出したパラメータの累積更新量Δwr1~Δwr4が全て閾値未満の場合(S21のYES)、演算ノードND_1~ND_4はReduce処理とAllreduce処理を行わないので、両処理の演算ノード間の通信に要する時間がなくなり、全学習に要する時間を短くできる。そして、各演算ノードがReduce処理とAllreduce処理を行わず、それぞれのパラメータw1~w4をそれぞれの更新量Δw1~Δw4で更新することが連続する場合、各演算ノードが累積更新量Δwr1~Δwr4を算出して記録しておく。
【0054】
それにより、各演算ノードND_1~ND_4が算出したパラメータの累積更新量Δwr1~Δwr4が全て閾値未満とはならない場合(S21のNO)、各演算ノードが、それぞれの累積更新量Δwr1~Δwr4を集約し、集約した累積更新量Δwr_addを共有し、その平均値Δwr_add/4で累積前のパラメータw1~w4を更新する。全演算ノードの累積更新量が閾値未満の場合、各演算ノードでの累積更新量のばらつきが比較的小さく、Reduce処理とAllreduce処理を省略しても、各演算ノード間のパラメータの値が大きく乖離することはない。しかし、全演算ノードの累積更新量が閾値未満ではなく少なくとも一つの累積更新量が閾値以上の場合、パラメータの値の乖離が大きくなるので、Reduce処理とAllreduce処理を行って、各演算ノードの累積更新量を集約しその平均値で全演算ノードの累積前のパラメータを更新してリセットする。
【0055】
上記の学習では、前提として、各演算ノードが、それぞれのNN内の1つのパラメータwを最適化した。この場合、各演算ノードのパラメータw1~w4の累積更新量Δwr1~Δwr4をそれぞれ閾値と比較した。しかし、パラメータの更新量Δw1~Δw4は正の場合と負の場合があるので、望ましくは、パラメータの累積更新量Δwr1~Δwr4の絶対値をある閾値TH(THは正)と比較する。
【0056】
次に、NNが有する複数のパラメータwの最適化がどのように処理されるかを説明する。第1の方法としては、判定工程S21で、各演算ノードがそれぞれのNNの複数のパラメータの累積更新量を個別に閾値THと比較し、それぞれのNNの全てのパラメータの累積更新量が閾値TH未満か否かを判断すると共に、全演算ノードで全て閾値TH未満か否かを判断する。
【0057】
第2の方法として、各演算ノードが、それぞれのNNの複数のパラメータを、NN内の各層の複数パラメータw1, w2, ...wnにグループ化し、判定工程S21で、各層の複数パラメータw1, w2, ...wnの累積更新量の絶対値の最大値が閾値TH未満か否かを判断する。そして、各演算ノードが、それぞれのNNの複数の層の判定S21が全て閾値TH未満か否かを判断すると共に、全演算ノードで全て閾値TH未満か否かを判断する。最大値のみ閾値THと比較するので、判定工程S21のスループットが向上する。
【0058】
第3の方法として、各演算ノードが、それぞれのNNの複数のパラメータを、NN内の各層の複数パラメータw1, w2, ...wnにグループ化し、判定工程S21で、各層の複数パラメータw1, w2, ...wnの累積更新量の絶対値のLpノルム(pは正の整数)が閾値TH未満か否かを判断する。そして、各演算ノードが、それぞれのNNの複数の層の判断が全て閾値TH未満か否かを判断すると共に、全演算ノードで全て閾値TH未満か否かを判断する。
【0059】
例えば、以下の数式に示すとおり、L1ノルムは、複数パラメータw1, w2, ...wnの累積更新量の絶対値の和であり、L2ノルムは、複数パラメータw1, w2, ...wnの累積更新量の絶対値の二乗和の平方根である。Lpノルムは、複数パラメータw1, w2, ...wnの累積更新量の絶対値のp乗和の-p乗である。
【0060】
【数1】
【0061】
第3の方法では、各層の複数のパラメータそれぞれの累積更新量をそのL1ノルムやL2ノルムに変換した値を閾値と比較するので、判定工程S21のスループットが向上する。
【0062】
[第2の実施の形態によるデータ並列型分散学習]
図8は、第2の実施の形態によるデータ並列型分散学習のフローチャート図である。図8には、図4のフローチャートにおける、演算ノードND_1の学習処理のフローチャートが示され、残りの演算ノードND_2~ND_4の学習処理のフローチャートは省略されている。本分散学習では、図8に示した演算ノードND_1の学習処理のフローチャートS30、S10~S16、S20~S23、S31~S33が、残りの演算ノードND_2~ND_4でも同様に実行される。
【0063】
一般に、学習工程の開始直後は、パラメータの勾配ΔEが大きく更新量Δw1~Δw4も大きい。一方、学習工程の終了近くでは、パラメータの勾配ΔEが小さく更新量Δw1~Δw4も小さい。そのため、第1の実施の形態のデータ並列型分散学習では、学習工程の開始直後は、判定工程S21で、毎回、累積更新量が閾値TH未満でないという判断となり、毎回Reduce処理とAllreduce処理が行われる場合がある。一方、学習工程の終了に近づくにつれて、判定工程S21で、毎回、累積更新量が閾値TH未満という判断となり、Reduce処理とAllreduce処理が全く行われないという場合がある。
【0064】
上記のような問題点を緩和するために、第2の実施の形態では、次の処理を行う。即ち、
(1)全部でN回の学習のうち初めからD-1回(Dは正の整数)は、各演算ノードは、閾値THとの比較判定にかかわらず、Reduce処理及びAllreduce処理を行わず、それぞれのNNのパラメータをそれぞれの更新量で更新する。
(2)そして、D回からU-1回(UはDより大きい正の整数)までの間は、第1の実施の形態のように累積更新量Δwr1~Δwr4が閾値TH未満の場合、Reduce処理及びAllreduce処理を行わず、閾値TH未満でない場合、Reduce処理及びAllreduce処理を行って、それぞれのNNパラメータを累積更新量の平均値で更新する。
(3)さらに、U回になるまで累積更新量Δwr1~Δwr4が閾値TH未満であるためReduce処理及びAllreduce処理が連続して行われなかったら、U回目で、各演算ノードは、閾値THとの比較判定にかかわらず、Reduce処理及びAllreduce処理を行い、それぞれのNNパラメータを累積更新量の平均値で更新する。
(4)上記の(1)~(3)のパラメータの更新サイクルを、全学習Nに達するまで、各演算ノードが繰返す。
【0065】
上記の処理によれば、第1に、学習工程の開始直後でも、(1)~(3)の更新サイクル内の最初のD-1回では、各演算ノードは、Reduce処理及びAllreduce処理を行わないので、通信回数を減らすことができる。また、更新サイクル内のD回以上では、パラメータの累積更新量と閾値THとの比較判定に基づいて、累積更新量が小さいほどReduce処理及びAllreduce処理が連続して行われない回数が多くなり、逆に累積更新量が大きいほどReduce処理及びAllreduce処理が連続して行われない回数が少なくなる。
【0066】
一方、第2に、学習工程の終了に近づいたとき、(1)~(3)の更新サイクル内で、Reduce処理及びAllreduce処理が連続して行われない学習回数がU回に達すると、各演算ノードは、ある意味、強制的にReduce処理とAllreduce処理が行われて、全演算ノードの全NNの対応するパラメータが同じ累積更新量の平均値で同じ値に更新される。
【0067】
図8のフローチャートについて具体的に説明する。図8でも前提として、4つの演算ノードそれぞれが、1つの訓練データを使用して学習を行い、各演算ノードは、それぞれのNN内の1つのパラメータwを最適化するものとする。
【0068】
そして、第2の実施の形態では、全演算ノードが、共通の学習回数カウンタ値iと連続非通信カウンタ値jをカウントする。また、第1の実施の形態と同様に、各演算ノードが、学習のたびに算出した各パラメータの更新量を累積加算して累積更新量Δwr1~Δwr4を記憶する。そして、各演算ノードは、図7のフローチャートの処理に加えて、処理S30、S31-S32、S33を実行する。これらの処理を主に説明する。
【0069】
各演算ノードは、初期化処理として、学習回数カウンタ値iと連続非通信カウンタ値jを「0」に、各演算ノードのパラメータの累積更新量Δwr1~Δwr4を「0」に、それぞれリセットする。次に、各演算ノードは、訓練データのデータ入力、順伝播処理、逆伝播処理を行ってそれぞれのパラメータの更新量Δw1~Δwr4を算出する(S10-S14)。そして、各演算ノードは、カウンタ値i,jをそれぞれ1加算し、パラメータの累積更新量Δwr1~Δwr4に算出した更新量Δw1~Δwr4をそれぞれ加算して累積更新量を更新する(S31)。
【0070】
(1)連続非通信カウンタ値jが第1の基準回数D未満の場合(S32のYES)、各演算ノードは、それぞれのパラメータw1~w4をそれぞれの更新量Δw1~Δwr4で更新する(S16A)。各演算ノードは、連続非通信カウンタ値jが第1の基準回数D未満でなくなるまで、上記処理S10-S14、S31-S32及びS16Aを繰返す。第1の基準回数Dが、例えば、D=2の場合、(1)~(3)の更新サイクル内の一回目の学習では、必ず、演算ノードはReduce処理とAllreduce処理を行わない。
【0071】
(2)連続非通信カウンタ値jが第1の基準回数D未満でなくなると(S32のNO)、各演算ノードは、全演算ノードでパラメータの累積更新量Δwr1~Δwr4が全て閾値TH未満か否か判定する。
【0072】
閾値TH未満の場合(S21のYES)、連続非通信カウンタ値jが第2の基準回数U(>D)未満であれば(S33のYES)、各演算ノードは、それぞれのパラメータw1~w4をそれぞれの更新量Δw1~Δwr4で更新する(S16A)。
【0073】
閾値TH未満でない場合(S21のNO)、演算ノードND_1~ND_4が、Reduce処理とAllreduce処理を実行し(S15)、それぞれのパラメータw1-w4を累積更新量の平均値Δwr_add/4で更新する(S16)。そして、演算ノードが、連続非通信カウント値jを0に、累積更新量Δwr1~Δwr4を0にそれぞれリセットする(S22A)。この場合、(1)~(3)の更新サイクルがリセットされる。
【0074】
(3)閾値TH未満の場合(S21のYES)、連続非通信カウンタ値jが第2の基準回数U(>D)未満でなくなると(S33のNO)、各演算ノードは、Reduce処理とAllreduce処理を実行し(S15)、パラメータを累積更新量の平均値で更新し(S16)、連続非通信カウント値jと累積更新量を0にリセットする(S22A)。これで更新サイクルがリセットされる。
【0075】
各演算ノードのNNの複数のパラメータwを更新する場合については、第1の実施の形態と同様に、判定工程S21では、演算ノードは、各パラメータwの累積更新量の絶対値が閾値TH未満か否か、各層の複数パラメータの累積更新量の絶対値の最大値が閾値TH未満か否か、各層の複数パラメータの累積更新量の絶対値のL1ノルムやL2ノルムが閾値TH未満か否か、などの判定を行っても良い。
【0076】
図9は、第2の実施の形態における学習の更新サイクルの変化例を示す図である。図9(1)は、本実施の形態の更新サイクルを行わない場合の変化例である。1回の学習は、訓練データのデータに対する順伝播処理FW、逆伝播処理BW、Reduce処理及びAllreduce処理CM、パラメータの更新処理UPを含む。図9(1)での更新処理UP1は、全演算ノードのNNのパラメータの更新量の平均値Δw_ad/4でパラメータを更新する処理である。図9(1)の場合、各演算ノードは、全学習で、Reduce処理及びAllreduce処理CMとパラメータの更新処理UP1を実行する。
【0077】
図9(2)は、第2の実施の形態における学習の更新サイクルの変化例である。図9(2)の1回目~4回目の学習は、前述の更新サイクル内の学習に該当する。
【0078】
図9(2)での更新処理UP2は、各演算ノードがそれぞれのNNのパラメータの更新量Δwでそれぞれのパラメータを更新する処理(S16A)である。
【0079】
図9(2)での更新処理UP3は、各演算ノードがそれぞれのNNのパラメータの累積更新量Δwrの平均値Δwr_ad/4でそれぞれのパラメータを更新する処理(S16)である。
【0080】
図9(2)の例では、D=2の例であり、各演算ノードは、1回目の学習では、Reduce処理及びAllreduce処理CMを実行せず、更新処理UP2を実行する。2回目の学習では、j=Dとなり、各演算ノードは、Reduce処理及びAllreduce処理CMを実行し、更新処理UP3を実行する。3回目の学習と4回目の学習は、それぞれ1回目の学習と2回目の学習と同じである。
【0081】
第2の実施の形態によれば、演算ノードが全ての学習でReduce処理及びAllreduce処理CMを実行することはないので、同処理を実行しないことにより、学習全体の演算時間を抑制することができる。
【0082】
上記の実施の形態では、Reduce処理とAllreduce処理でパラメータの累積更新量Δwrを集約し、その平均値Δwr_ad/4で各NNのパラメータを更新した。しかし、パラメータの更新量に代えて、差分の勾配ΔEについてReduce処理とAllreduce処理を行っても良い。パラメータの更新量Δwは、差分の勾配ΔEに学習率ηを乗算して算出され、従って、累積更新量Δwrは累積した勾配に学習率を乗算して算出できるからである。その場合、各演算ノードが、Reduce処理とAllreduce処理を行わない場合、差分の勾配ΔEの累積を更新しておき、Reduce処理とAllreduce処理を行った場合、各演算ノードでの累積勾配ΔErを集約し、累積勾配ΔErの集約値(加算値)を全演算ノードで共有し、累積勾配ΔErの集約値(加算値)の平均値ΔEr_ad/4に学習率ηを乗じた累積更新量の平均値Δwr_ad/4で累積前のパラメータwを更新する。
【0083】
上記の実施の形態では、各学習で、各演算ノードが1つの訓練データについてNNの演算を実行する例を説明した。しかし、各学習で、各演算ノードが複数の訓練データについてNNの演算を複数のプロセスで実行しても良い。その場合、1バッチの訓練データの数は、各演算ノードの複数の訓練データに演算ノードの数(上記例では4)を乗じた数になる。そして、各演算ノードは、複数のプロセスでそれぞれ算出した複数の差分Eの勾配ΔEまたはパラメータの更新量Δwの平均値を使用して、各演算ノードのNNのパラメータを更新する。また、Reduce処理とAllreduce処理では、複数の演算ノードがそれぞれの勾配または更新量の累積を集約し、集約した値の平均を全演算ノードで共有し、集約した値の平均でそれぞれのNNのパラメータを更新する。
【0084】
上記の実施の形態は、単純パーセプトロンや多層パーセプトロン等のNN、階層が深いNNであるディープNNなどの学習に適用できる。ディープNNには、例えば、複数の畳込み層とプーリング層及び全結合層を有するコンボリュージョンNN、入力層と出力層が同じサイズのノードを持つオートエンコーダNN、リカレントNNなどが含まれる。
【符号の説明】
【0085】
1:ニューラルネットワークシステム、NNシステム
10:メインプロセッサ
13:サブプロセッサモジュール
14:サブプロセッサ、演算ノード
20:ニューラルネットワーク学習プログラム
22:ニューラルネットワークプログラム
24;訓練データ
26:パラメータw
ND_1~ND_4:演算ノード
w1~w4:パラメータ
Δw1~Δw4:パラメータの更新量
Δwr1~Δwr4:累積更新量
Δwr_add:累積更新量の集約値
Δwr_add/4:累積更新量の平均値
図1
図2
図3
図4
図5
図6
図7
図8
図9