(57)【特許請求の範囲】
【請求項１】
トレーニング例の複数のバッチで畳み込みニューラルネットワークをトレーニングするためのシステムであって、前記畳み込みニューラルネットワークは、最低から最高の連続に配置された複数の層を有し、前記複数の層は、1つまたは複数の完全結合された層が続く1つまたは複数の畳み込み層を含み、各畳み込み層および各完全結合された層は、それぞれの複数のノードを含み、前記システムは、複数のワーカーを含み、各ワーカーは、前記畳み込み層の各々のそれぞれのレプリカおよび前記完全結合された層の各々のそれぞれの分離区分を維持するように構成され、畳み込み層の各レプリカは、前記畳み込み層に前記ノードのすべてを含み、完全結合された層の各分離区分は、前記完全結合された層の前記ノードの一部を含み、各ワーカーは、
前記ワーカーに割り当てられたトレーニング例のバッチを受信するステップであって、各ワーカーが前記複数のバッチのそれぞれのバッチを受信するように、トレーニング例の前記バッチが割り当てられるステップと、
前記ワーカーに割り当てられたトレーニング例の前記バッチで前記ワーカーによって維持される前記畳み込み層のレプリカをトレーニングするステップと、
トレーニング例の前記複数のバッチの各々で前記ワーカーによって維持される前記完全結合された層の区分をトレーニングするステップと
を含む動作を実行するように構成される、システム。
【請求項２】
前記ワーカーに割り当てられたトレーニング例の前記バッチで前記ワーカーによって維持される前記畳み込み層のレプリカをトレーニングするステップは、
前記ワーカーに割り当てられた前記バッチの各トレーニング例に対してそれぞれの畳み込み層のアクティブ化データを計算するために、前記ワーカーによって維持される前記畳み込み層のレプリカのすべてを通じてトレーニング例の前記バッチを処理するステップと、
前記ワーカーに割り当てられた前記バッチの前記トレーニング例の各々に対して、前記ワーカーによって維持される最も高い完全結合された層に対応する組み合わされた勾配データを取得するステップと、
前記ワーカーによって維持される畳み込み層のレプリカを通じて、前記最も高い完全結合された層に対応する組み合わされた勾配データを逆伝搬するステップと
を含む、請求項1に記載のシステム。
【請求項３】
トレーニング例の前記複数のバッチの各々で、前記ワーカーによって維持される完全結合された層の区分をトレーニングするステップは、
前記複数のバッチのすべてで前記トレーニング例の各々に対して、それぞれの畳み込みデータを取得するステップであって、前記トレーニング例の各々に対する前記畳み込みデータは、前記トレーニング例に対する畳み込み層のアクティブ化データを含む、ステップと、
前記トレーニング例に対する自身の最初の完全結合された層の区分のアクティブ化データを生成するために、前記ワーカーによって維持される最も低い完全結合された層の区分を通じて前記畳み込みデータを処理するステップと、
前記複数のワーカーの他のワーカーに前記自身の最初の完全結合された層の区分のアクティブ化データを送るステップと、
前記複数のワーカーの他のワーカーから他の最初の完全結合された層の区分のアクティブ化データを受信するステップと、
前記ワーカーによって維持される各他の完全結合された層の区分に対して、
前記完全結合された層の区分に対して自身の区分のアクティブ化データを生成するために、前記完全結合された層の区分を通じて前記ワーカーによって維持される次の最も低い完全結合された層の区分に対して、自身の区分のアクティブ化データおよび他の区分のアクティブ化データを処理するステップと、
前記複数のワーカーの他のワーカーに前記完全結合された層の区分に対して前記自身の区分のアクティブ化データを送るステップと、
前記複数のワーカーの他のワーカーから前記完全結合された層の区分に対する他の区分のアクティブ化データを受信するステップと、
前記トレーニング例の各々に対して、自身の最も高い完全結合された層の区分の勾配データを受信するステップと、
前記複数のワーカーの他のワーカーに前記自身の最も高い完全結合された層の区分の勾配データを送るステップと、
前記複数のワーカーの他のワーカーから他の最も高い完全結合された層の区分の勾配データを受信するステップと、
前記ワーカーによって維持される各他の完全結合された層の区分に対して、
前記完全結合された層の区分に対して自身の勾配区分データを生成するために、前記完全結合された層の部分を通じて前記ワーカーによって維持される次の最も高い完全結合された層の区分に対して、自身の区分の勾配データおよび他の区分の勾配データを逆伝搬するステップと、
前記複数のワーカーの他のワーカーに前記完全結合された層の区分に対して前記自身の区分の勾配データを送るステップと、
前記複数のワーカーの他のワーカーから前記完全結合された層の区分に対して他の区分の勾配データを受信するステップと
を含む、請求項2に記載のシステム。
【請求項４】
前記ワーカーに割り当てられた前記バッチのトレーニング例の各々に対して、前記ワーカーによって維持される最も高い完全結合された層に対応する組み合わされた勾配データを取得するステップは、
各トレーニング例に対して前記ワーカーによって維持される前記最も高い畳み込み層のレプリカの一部に対して自身の勾配データを計算するステップと、
前記複数のワーカーの他のワーカーに自身の最も高い完全結合された層に対応する組み合わされた勾配データを送るステップと、
前記複数のワーカーの他のワーカーから他の最も高い完全結合された層に対応する組み合わされた勾配を受信するステップと
を含む、請求項3に記載のシステム。
【請求項５】
前記複数のバッチのすべてで前記トレーニング例の各々に対して、それぞれの畳み込みデータを取得するステップは、
前記複数のワーカーの他のワーカーに自身の畳み込みデータを送るステップであって、前記自身の畳み込みデータは、前記ワーカーに割り当てられたトレーニング例に対して前記それぞれの畳み込み層のアクティブ化データを含む、ステップと、
前記複数のワーカーの他のワーカーから他の畳み込みデータを受信するステップであって、前記他の畳み込みデータは、他のワーカーに割り当てられた他のトレーニング例に対してそれぞれの畳み込み層のアクティブ化データを含む、ステップと
を含む、請求項4に記載のシステム。
【請求項６】
他のワーカーに自身の畳み込みデータを送るステップは、前記複数のワーカーの各他のワーカーに前記ワーカーに割り当てられた前記バッチの各トレーニング例について、自身の畳み込みデータを送るステップを含み、他の畳み込みデータを受信するステップは、前記複数のバッチの各他のバッチの各他のトレーニング例に対して、他の畳み込みデータを受信するステップを含む、請求項5に記載のシステム。
【請求項７】
他のワーカーに自身の最も高い完全結合された層に対応する組み合わされた勾配データを送るステップは、前記トレーニング例が割り当てられている前記ワーカーに前記複数のバッチの各他のバッチにおいて他のトレーニング例について自身の最も高い完全結合された層に対応する組み合わされた勾配データを送るステップを含み、前記複数のワーカーの他のワーカーから他の最も高い完全結合された層に対応する組み合わされた勾配データを受信するステップは、前記ワーカーに割り当てられた前記バッチの各トレーニング例に対して他の最も高い完全結合された層に対応する組み合わされた勾配データを各他のワーカーから受信するステップを含む、請求項6に記載のシステム。
【請求項８】
他のワーカーに自身の畳み込みデータを送るステップは、前記複数のワーカーの各他のワーカーに前記ワーカーに割り当てられた前記バッチの各トレーニング例について、自身の畳み込みデータを送るステップを含み、他の畳み込みデータを受信するステップは、前記自身の畳み込みデータを処理するのと並行して、特定の他のワーカーに割り当てられたバッチの各他のトレーニング例について、他の畳み込みデータを受信するステップを含む、請求項5に記載のシステム。
【請求項９】
前記複数のワーカーの他のワーカーから他の最も高い完全結合された層に対応する組み合わされた勾配データを受信するステップは、前記ワーカーに割り当てられた前記バッチの各トレーニング例に対して他の最も高い完全結合された層に対応する組み合わされた勾配データを各他のワーカーから受信するステップを含み、前記他の畳み込みデータを処理するステップは、前記他の最も高い完全結合された層に対応する組み合わされた勾配データを受信するのと並行して、前記特定の他のワーカーに割り当てられた前記バッチの各他のトレーニング例について、前記他の畳み込みデータを処理するステップを含む、請求項8に記載のシステム。
【請求項１０】
他のワーカーに自身の畳み込みデータを送るステップは、前記複数のワーカーの各他のワーカーに、前記ワーカーに割り当てられた前記バッチの事前に決定された数のトレーニング例について自身の畳み込みデータを送るステップを含み、他の畳み込みデータを受信するステップは、前記複数のバッチの各他のバッチの事前に決定された数のトレーニング例について、他の畳み込みデータを受信するステップを含む、請求項5に記載のシステム。
【請求項１１】
前記自身の畳み込みデータおよび前記他の畳み込みデータを処理するステップは、前記ワーカーに割り当てられた前記バッチの別の事前に決定された数のトレーニング例について、自身の畳み込みデータを送るのと並行して、前記自身の畳み込みデータおよび前記他の畳み込みデータを処理するステップと、前記複数のバッチの各他のバッチの別の事前に決定された数のトレーニング例について、他の畳み込みデータを受信するステップとを含む、請求項10に記載のシステム。
【請求項１２】
他のワーカーに自身の最も高い完全結合された層に対応する組み合わされた勾配データを送るステップは、前記トレーニング例が割り当てられる前記ワーカーに前記複数のバッチの各他のバッチにおいて前記事前に決定された数の他のトレーニング例について、自身の最も高い完全結合された層に対応する組み合わされた勾配データを送るステップを含み、前記複数のワーカーの他のワーカーから他の最も高い完全結合された層に対応する組み合わされた勾配データを受信するステップは、前記事前に決定された数のトレーニング例に対して他の最も高い完全結合された層に対応する組み合わされた勾配データを各他のワーカーから受信するステップを含み、前記自身の畳み込みデータおよび前記他の畳み込みデータを処理するステップは、前記事前に決定された数に対して前記自身の最も高い完全結合された層に対応する組み合わされた勾配データを送るのと並行して、前記他の事前に決定された数のトレーニング例について、前記自身の畳み込みデータおよび前記他の畳み込みデータを処理するステップと、前記事前に決定された数に対する前記他の最も高い完全結合された層に対応する組み合わされた勾配データを受信するステップとを含む、請求項11に記載のシステム。
【請求項１３】
前記動作は、
前記勾配データを使用して前記畳み込み層のレプリカおよび前記完全結合された層の区分の重みを更新するステップ
をさらに含む、請求項3に記載のシステム。
【請求項１４】
トレーニング例の複数のバッチで畳み込みニューラルネットワークをトレーニングするための方法であって、前記畳み込みニューラルネットワークは、最低から最高の連続に配置された複数の層を有し、前記複数の層は、1つまたは複数の完全結合された層が続く1つまたは複数の畳み込み層を含み、各畳み込み層および各完全結合された層は、それぞれの複数のノードを含み、前記方法は、
複数のワーカーの各々によって、前記畳み込み層の各々のそれぞれのレプリカを維持するステップであって、畳み込み層の各レプリカは、前記畳み込み層に前記ノードのすべてを含む、ステップと、
前記ワーカーの各々によって、前記完全結合された層の各々のそれぞれの分離区分を維持するステップであって、完全結合された層の各分離区分は、前記完全結合された層の前記ノードの一部を含む、ステップと、
前記ワーカーの各々によって、前記ワーカーに割り当てられたトレーニング例のバッチを受信するステップであって、各ワーカーが前記複数のバッチのそれぞれのバッチを受信するように、トレーニング例の前記バッチが割り当てられる、ステップと、
前記ワーカーの各々によって、前記ワーカーに割り当てられたトレーニング例の前記バッチで前記ワーカーによって維持される前記畳み込み層のレプリカをトレーニングするステップと、
前記ワーカーの各々によって、トレーニング例の前記複数のバッチの各々で前記ワーカーによって維持される前記完全結合された層の区分をトレーニングするステップと
を含む、方法。
【請求項１５】
前記ワーカーに割り当てられたトレーニング例の前記バッチで前記ワーカーによって維持される前記畳み込み層のレプリカをトレーニングするステップは、
前記ワーカーに割り当てられた前記バッチの各トレーニング例に対してそれぞれの畳み込み層のアクティブ化データを計算するために、前記ワーカーによって維持される前記畳み込み層のレプリカのすべてを通じてトレーニング例の前記バッチを処理するステップと、
前記ワーカーに割り当てられた前記バッチのトレーニング例の各々に対して、前記ワーカーによって維持される最も高い完全結合された層に対応する組み合わされた勾配データを取得するステップと、
前記ワーカーによって維持される畳み込み層のレプリカを通じて、前記最も高い完全結合された層に対応する組み合わされた勾配データを逆伝搬するステップと
を含む、請求項14に記載の方法。
【請求項１６】
トレーニング例の前記複数のバッチの各々で、前記ワーカーによって維持される完全結合された層の区分をトレーニングするステップは、
前記複数のバッチのすべてでトレーニング例の各々に対して、それぞれの畳み込みデータを取得するステップであって、前記トレーニング例の各々に対する前記畳み込みデータは、前記トレーニング例に対する畳み込み層のアクティブ化データを含む、ステップと、
前記トレーニング例に対する自身の最初の完全結合された層の区分のアクティブ化データを生成するために、前記ワーカーによって維持される最も低い完全結合された層の区分を通じて前記畳み込みデータを処理するステップと、
前記複数のワーカーの他のワーカーに前記自身の最初の完全結合された層の区分のアクティブ化データを送るステップと、
前記複数のワーカーの他のワーカーから他の最初の完全結合された層の区分のアクティブ化データを受信するステップと、
前記ワーカーによって維持される各他の完全結合された層の区分に対して、
前記完全結合された層の区分に対して自身の区分のアクティブ化データを生成するために、前記完全結合された層の区分を通じて前記ワーカーによって維持される次の最も低い完全結合された層の区分に対して、自身の区分のアクティブ化データおよび他の区分のアクティブ化データを処理するステップと、
前記複数のワーカーの他のワーカーに前記完全結合された層の区分に対して前記自身の区分のアクティブ化データを送るステップと、
前記複数のワーカーの他のワーカーから前記完全結合された層の区分に対する他の区分のアクティブ化データを受信するステップと、
前記トレーニング例の各々に対して、自身の最も高い完全結合された層の区分の勾配データを受信するステップと、
前記複数のワーカーの他のワーカーに前記自身の最も高い完全結合された層の区分の勾配データを送るステップと、
前記複数のワーカーの他のワーカーから他の最も高い完全結合された層の区分の勾配データを受信するステップと、
前記ワーカーによって維持される各他の完全結合された層の区分に対して、
前記完全結合された層の区分に対して自身の勾配区分データを生成するために、前記完全結合された層の部分を通じて前記ワーカーによって維持される次の最も高い完全結合された層の区分に対して、自身の区分の勾配データおよび他の区分の勾配データを逆伝搬するステップと、
前記複数のワーカーの他のワーカーに前記完全結合された層の区分に対して前記自身の区分の勾配データを送るステップと、
前記複数のワーカーの他のワーカーから前記完全結合された層の区分に対して他の区分の勾配データを受信するステップと
を含む、請求項15に記載の方法。
【請求項１７】
前記ワーカーに割り当てられた前記バッチのトレーニング例の各々に対して、前記ワーカーによって維持される最も高い完全結合された層に対応する組み合わされた勾配データを取得するステップは、
各トレーニング例に対して前記ワーカーによって維持される前記最も高い畳み込み層のレプリカの一部に対して自身の勾配データを計算するステップと、
前記複数のワーカーの他のワーカーに自身の最も高い完全結合された層に対応する組み合わされた勾配データを送るステップと、
前記複数のワーカーの他のワーカーから他の最も高い完全結合された層に対応する組み合わされた勾配を受信するステップと
を含む、請求項16に記載の方法。
【請求項１８】
前記複数のバッチのすべてでトレーニング例の各々に対して、それぞれの畳み込みデータを取得するステップは、
前記複数のワーカーの他のワーカーに自身の畳み込みデータを送るステップであって、前記自身の畳み込みデータは、前記ワーカーに割り当てられたトレーニング例に対して前記それぞれの畳み込み層のアクティブ化データを含む、ステップと、
前記複数のワーカーの他のワーカーから他の畳み込みデータを受信するステップと、前記他の畳み込みデータは、他のワーカーに割り当てられた他のトレーニング例に対してそれぞれの畳み込み層のアクティブ化データを含む
を含む、請求項17に記載の方法。
【請求項１９】
前記ワーカーの各々によって、前記ワーカーによって維持される前記畳み込み層のレプリカの重みおよび前記勾配データを使用して、前記ワーカーによって維持される前記完全結合された層の区分を更新するステップ
をさらに含む、請求項16に記載の方法。
【請求項２０】
1つまたは複数のコンピュータによって実行された場合、前記1つまたは複数のコンピュータに、トレーニング例の複数のバッチで畳み込みニューラルネットワークをトレーニングするための動作を実行させる命令を用いて符号化された1つまたは複数のコンピュータ記憶媒体であって、前記畳み込みニューラルネットワークは、最低から最高の連続に配置された複数の層を有し、前記複数の層は、1つまたは複数の完全結合された層が続く1つまたは複数の畳み込み層を含み、各畳み込み層および各完全結合された層は、それぞれの複数のノードを含み、前記動作は、複数のワーカーの各々によって、前記畳み込み層の各々のそれぞれのレプリカを維持するステップであって、畳み込み層の各レプリカは、前記畳み込み層に前記ノードのすべてを含む、ステップと、
前記ワーカーの各々によって、前記完全結合された層の各々のそれぞれの分離区分を維持するステップであって、完全結合された層の各分離区分は、前記完全結合された層の前記ノードの一部を含む、ステップと、
前記ワーカーの各々によって、前記ワーカーに割り当てられたトレーニング例のバッチを受信するステップであって、各ワーカーが前記複数のバッチのそれぞれのバッチを受信するように、トレーニング例の前記バッチが割り当てられる、ステップと、
前記ワーカーの各々によって、前記ワーカーに割り当てられたトレーニング例の前記バッチで前記ワーカーによって維持される前記畳み込み層のレプリカをトレーニングするステップと、
前記ワーカーの各々によって、トレーニング例の前記複数のバッチの各々で前記ワーカーによって維持される前記完全結合された層の区分をトレーニングするステップと
を含む、1つまたは複数のコンピュータ記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本明細書は、畳み込みニューラルネットワークのトレーニングの並列化に関する。
【背景技術】
【０００２】
畳み込みニューラルネットワークは、一般的に、畳み込みニューラルネットワーク層および完全結合されたニューラルネットワーク層という2種類のニューラルネットワーク層を含む。畳み込みニューラルネットワーク層は、まばらな結合性を有し、畳み込み層の各ノードは、次に最も低いニューラルネットワーク層のノードのサブセットのみから入力を受信する。一部の畳み込みニューラルネットワーク層は、層の他のノードと重みを共有するノードを有している。しかし、完全結合された層のノードは、次に最も低いニューラルネットワーク層の各ノードから入力を受信する。
【発明の概要】
【課題を解決するための手段】
【０００３】
全体として、本明細書では、トレーニング例の複数のバッチにおいて畳み込みニューラルネットワーク(CNN)をトレーニングするための手法について記述する。CNNは、複数のワーカー(worker)によってトレーニングされる。各ワーカーは、CNNの畳み込み層の各々のそれぞれのレプリカおよびCNNの完全結合された層の各々のそれぞれの分離区分を維持するように構成される。畳み込み層の各レプリカは、畳み込み層のノードのすべてを含み、完全結合された層の各分離区分は、完全結合された層のノードの一部を含む。各ワーカーは、トレーニング例の複数のバッチのすべてでワーカーによって維持される完全結合された層の区分をトレーニングしている間、ワーカーに割り当てられたトレーニング例のバッチでワーカーによって維持される畳み込み層のレプリカをトレーニングする。
【０００４】
本明細書に記述した主題の特定の実施形態は、以下の利点の1つまたは複数を実現するように実装され得る。畳み込みニューラルネットワークのトレーニングの間に、完全結合された層から異なるように畳み込み層を並列化することによって、ネットワークは、2つのタイプの層の異なる構造を活用することによって、効率的かつ迅速にトレーニングされ得る。加えて、たとえば、他のトレーニング例のためにワーカーがデータを処理するのと並行して、あるワーカーから別のワーカーにアクティブ化データを送ることによって、他のトレーニング例のためにワーカーがデータを処理するのと並行して、あるワーカーから別のワーカーに勾配データを送ることによって、または両方によって、トレーニングとの中間の通信を重複させることによって、トレーニング時間が短縮され得て、畳み込みニューラルネットワークをトレーニングするワーカー間のデータの送信によるトレーニング遅延が緩和され得る。
【０００５】
本明細書の主題の1つまたは複数の実施形態の詳細については、添付の図面および以下の記述において説明する。主題の他の機能、態様、および利点については、記述、図面、および特許請求の範囲から明白になるであろう。
【図面の簡単な説明】
【０００６】
【図１】畳み込みニューラルネットワーク(CNN)をトレーニングするための例示的なシステムを示すブロック図である。
【図２】CNNをトレーニングするための例示的なプロセスを示す流れ図である。
【図３】ワーカーによって維持される完全結合された層の区分を通じてアクティブ化データを処理するための例示的なプロセスを示す流れ図である。
【図４】ワーカーによって維持される完全結合された層の区分を通じて勾配を逆伝搬するための例示的なプロセスを示す流れ図である。
【図５】ワーカー間のアクティブ化データおよび勾配データを通信するための例示的なプロセスを示す流れ図である。
【図６】ワーカー間のアクティブ化データおよび勾配データを通信するための別の例示的なプロセスを示す流れ図である。
【図７】ワーカー間のアクティブ化データおよび勾配データを通信するための別の例示的なプロセスを示す流れ図である。
【発明を実施するための形態】
【０００７】
様々な図面において同様の参考番号および名称は、同様の要素を示している。
【０００８】
図1は、畳み込みニューラルネットワーク(CNN)をトレーニングするための例示的なシステム150を示すブロック図である。CNNは、ニューラルネットワーク層の連続を含み、CNNへの入力は、連続における最も低い層によって受信され、入力から出力を生成するために連続において層のすべてを通じて処理される。たとえば、入力は画像の場合があり、出力はカテゴリの組の各々に対するスコアの組の場合がある。所与のカテゴリについて生成されたスコアは、入力画像がカテゴリに属するオブジェクトの画像を含む可能性を表している。
【０００９】
CNNの各ニューラルネットワーク層は、ノードの組を含む。各ノードは、すなわち、連続においてニューラルネットワーク層の直下にある層の1つまたは複数のノードから、入力を受信するか、または層が連続において最も低い層である場合、CNNへの入力のすべてもしくは一部を受信し、入力からアクティブ化を生成する。次に、所与のニューラルネットワーク層のノードによって生成されたアクティブ化は、連続において次に最も高い層のノードに入力として提供されるか、または層が連続において最も高い層である場合、CNNの出力として処理される。
【００１０】
特に、ニューラルネットワーク層の連続は、完全結合されたニューラルネットワーク層の組に続いて、畳み込みニューラルネットワーク層の組を含む。一般的に、完全結合された層の各ノードは、連続において次に最も低い層の各ノードから入力を受信し、ノードに対する重みの組に従って受信された入力からアクティブ化を生成する。所与の完全結合された層の各ノードによって生成されたアクティブ化は、連続において次に最も高い完全結合された層の各ノードに入力として提供されるか、または完全結合された層が連続における最も高い層である場合、CNNの出力として処理される。
【００１１】
完全結合された層とは異なり、畳み込み層は、一般的に、まばらに結合されたニューラルネットワーク層である。すなわち、畳み込み層の各ノードは、先行するニューラルネットワーク層のノードの一部、すなわちすべて未満から入力を受信するか、または畳み込み層が連続において最も低い層である場合、CNNへの入力の一部を受信し、入力からアクティブ化を生成する。一般的に、畳み込み層は、各ノードに対する重みの組に従って受信された入力を畳み込むことによってアクティブ化を生成するノードを有している。一部の場合には、畳み込み層のノードは、重みを共有するように構成され得る。すなわち、層のノードの一部は、層の他のノードと同じ重み値を常に有するように制約されている場合がある。
【００１２】
一部のCNNは、層の連続に点在する他のタイプの層を有している。たとえば、他の層は、プーリング層、すなわち、連続において次に最も低い層のノードの一部から入力を受信するノードを含む層を含む場合があり、たとえば、受信された入力の最大または中間のいずれかを計算することによってなど、受信された入力をプーリングすることによって、アクティブ化を生成する。別の例として、他の層は、スケーリング層、すなわち、連続において次に最も低い層から入力を受信する層を含むことができ、各受信された入力における各要素にスカラ関数を適用することができる。これらの他の層は、CNNのトレーニングの間に修正される重みを有していないので、連続にそれらがあるかないかは、以下に記述されたCNNのトレーニング技術に影響しない。したがって、以下に記述したCNNは、記述を明瞭にするために、これらの他のタイプの層を含んでいないものとして記述する。しかし、トレーニングプロセスに影響することなく、他のタイプの層がCNNに含まれ得ることを当業者は理解されるであろう。
【００１３】
システム150は、複数のワーカー、すなわちワーカー1 100a、ワーカー2 100b、およびワーカー3 100cを含む。各ワーカー100a〜100cは、たとえば、コンピュータ、複数のコアを有するコンピュータ内のコア、またはCNNの区分もしくはレプリカをトレーニングするために計算を実行することができるコンピュータ内の他のハードウェアもしくはソフトウェアの場合がある。
【００１４】
ワーカー100a〜100cの各々は、CNNの各畳み込み層のそれぞれのレプリカを維持するように構成される。図1の例では、各ワーカーは、4つの畳み込み層106a〜106c、108a〜108c、110a〜110c、および112a〜112cのレプリカを維持する。各畳み込み層の各レプリカは、畳み込み層の個別のインスタンスである。すなわち、各レプリカは、畳み込み層のノードのすべてを含む。
【００１５】
ワーカー100a〜100cの各々は、CNNの完全結合された層の各々のそれぞれの区分を維持するようにも構成される。図1の例では、各ワーカーは、CNNの第1の完全結合された層のそれぞれの区分114a〜114c、およびCNNの第2の完全結合された層のそれぞれの区分116a〜116cを維持する。完全結合された層の各区分は、完全結合された層のノードの分離区分を含む。したがって、総体として、ワーカー100a〜100cによって維持される所与の完全結合された層の区分は、完全結合された層の単一のインスタンスを形作る。すなわち、各区分が所与の層のノードの一部のみを含む一方、区分は、層のノードのすべてを総体として含む。
【００１６】
ワーカー100a〜100cは、トレーニングデータ102から選択されたトレーニング例のCNNをトレーニングする。たとえば、トレーニング例は、特定のカテゴリからのオブジェクトの画像を含むものとして分類された画像の場合がある。トレーニングデータ102は、トレーニング例104a〜104cの複数のバッチを含み、各バッチは、事前に決定された数のトレーニング例を含む。
【００１７】
トレーニング例を使用してCNNをトレーニングするために、各ワーカー100a〜100cには、トレーニング例の異なるバッチが割り当てられ、トレーニングデータでCNNをトレーニングするためにニューラルネットワークトレーニング技術を実行する。たとえば、トレーニング技術は、確率的勾配降下法(SGD:stochastic gradient descent)を使用して、CNNに対する目的関数を最小化または最大化するトレーニング技術の場合がある。複数のワーカーを用いるシステムでトレーニングデータのバッチでCNNをトレーニングすることについては、図3に関してより詳細に以下に記述している。各ワーカーが、ワーカーの割り当てられたバッチでトレーニング技術を実行すると、各ワーカーには、トレーニング例の新しいバッチが割り当てられ得て、たとえば、目的関数を最小化または最大化することを試み続けるために、新しいバッチでCNNをトレーニングするためにトレーニング技術の追加の反復を実行することができる。
【００１８】
図2は、CNNをトレーニングするための例示的なプロセス200を示す流れ図である。プロセス200は、CNNをトレーニングするための手法の一部として、たとえば、適切にプログラムされた図1のワーカー100a〜100cの各々など、複数のワーカーの各々によって実行され得る。上に記述したように、各ワーカーは、CNNの畳み込み層の各々のそれぞれのレプリカおよびCNNの完全結合された層の各々のそれぞれの区分を維持するように構成される。
【００１９】
ワーカーは、ワーカーに割り当てられたトレーニング例のバッチを受信する(ステップ202)。
【００２０】
ワーカーは、バッチの各トレーニング例に対してそれぞれの畳み込みアクティブ化を計算するために、ワーカーによって維持される畳み込み層のレプリカのすべてを通じてバッチの各トレーニング例を処理する(ステップ204)。すなわち、ワーカーは、トレーニング例に対する最初の畳み込みアクティブ化を生成するために、最も低い畳み込み層のレプリカを通じて各トレーニング例を処理し、次に、トレーニング例に対する畳み込みアクティブ化を計算するために、各畳み込み層のレプリカを通じて最も低い畳み込みアクティブ化を順に処理する。
【００２１】
ワーカーは、CNNをトレーニングしている他のワーカーに自身の畳み込みアクティブ化データを送り、CNNをトレーニングしている他のワーカーから他の畳み込みアクティブ化データを受信する(ステップ206)。一般的に、自身の畳み込みアクティブ化データは、各自身のトレーニング例に対して、すなわち、ワーカーに割り当てられたバッチの各トレーニング例に対して、トレーニング例に対する畳み込みアクティブ化を含む。同様に、所与の他のトレーニング例に対する他の畳み込みアクティブ化データ、すなわち、CNNをトレーニングする他のワーカーの1つに割り当てられたトレーニング例は、他のワーカーによってトレーニング例に対して計算された畳み込みアクティブ化を含む。他のワーカーにどの畳み込みアクティブ化データを送るか、および畳み込みアクティブ化データをいつ送るべきかを決定するための例示的な手法については、図5、図6、および図7に関して以下に記述している。
【００２２】
ワーカーは、各自身のトレーニング例および各他のトレーニング例に対してそれぞれの出力区分を計算するために、完全結合された層の区分のすべてを通じて自身のトレーニング例および他のトレーニング例に対する畳み込みアクティブ化データを処理する(ステップ208)。特に、トレーニング例に対する出力区分は、トレーニング例に対してワーカーによって維持される最も高い完全結合された層の区分のアクティブ化を含む。出力区分を計算するために畳み込みアクティブ化データを処理することについては、図3に関してより詳細に下に記述している。
【００２３】
ワーカーは、各自身のトレーニング例および各他のトレーニング例に対してそれぞれの勾配部分を取得する(ステップ210)。一部の実装では、各ワーカーは、ワーカーの指定された1つにワーカーによって計算された出力区分を送る。次に、そのワーカーは、目的関数の勾配を計算し、ワーカーの各々に適切な勾配部分を送ることができる。他の一部の実装では、各ワーカーは、各トレーニング例に対するそれぞれの勾配部分を計算する。たとえば、各トレーニング例について、ワーカーは、ワーカーによって計算された出力部分と、トレーニング例に対する既知の出力の対応する部分の間の誤差を決定する。すなわち、トレーニング例に対してワーカーによって維持される最も高い完全結合された層の区分におけるノードによって計算されるべきだったアクティブ化である。次に、ワーカーは、誤差を使用して、トレーニング例に対する目的関数の勾配を計算する。ワーカーは、最も高い完全結合された層のノードの区分のみを維持するので、ワーカーによって計算された勾配は、トレーニング例に対する勾配の合計の一部のみである。
【００２４】
ワーカーは、ワーカーによって維持される完全結合された層の区分のすべてを通じて勾配部分を逆伝搬し、逆伝搬された勾配を使用して、ワーカーによって維持される最も高い畳み込み層のレプリカに対する勾配部分を計算する(ステップ212)。完全結合された層の区分を通じて勾配部分を逆伝搬することについては、図4に関して下に記述している。
【００２５】
ワーカーは、自身の勾配データ、すなわち、ワーカーによって維持される最も高い畳み込み層のレプリカに対する勾配部分を他のワーカーに送り、他の勾配データ、すなわち、他のワーカーから他のワーカーによって維持される、最も高い畳み込み層のレプリカの区分に対する勾配部分を受信する(ステップ214)。他のワーカーにどの勾配データを送るか、および勾配データがいつ送られるべきかを決定するための例示的な手法については、図5、図6、および図7に関して下に記述している。一般的に、ワーカーは、トレーニング例が割り当てられたワーカーに、所与のトレーニング例に対する自身の勾配データを送る。これをするために、各ワーカーは、どのデータがどのトレーニング例に関連付けられているか、したがって、どのデータがどのワーカーに送られるべきかを追跡する。一部の実装では、ワーカーが、ワーカーによって処理されているどのデータがどのトレーニング例に対応するかを決定するために、各ワーカーは、どのデータがどのトレーニング例に対応するか、およびどのトレーニング例がどの他のワーカーに割り当てられるかを定義する、固定された順の他のワーカーからの受信されたデータを維持する。他の一部の実装では、ワーカーが、別のワーカーにトレーニング例に対するデータを送ると、ワーカーは、また、他のワーカーに、トレーニング例にデータを関連付けるメタデータを送ることができる。
【００２６】
受信されると、ワーカーは、ワーカーに割り当てられたトレーニング例のバッチで各トレーニング例に対する最も高い畳み込み層のレプリカに対してそれぞれの完全な勾配を生成するために、他のワーカーによって計算されたトレーニング例に対して他の勾配部分に、ワーカーに割り当てられた各トレーニング例に対するワーカーによって計算された自身の勾配部分を組み合わせることができる。
【００２７】
ワーカーは、ワーカーによって維持される残りの畳み込み層のレプリカのすべてを通じて完全な勾配を逆伝搬する(ステップ216)。すなわち、ワーカーは、各畳み込み層のレプリカで完全な勾配を計算し、次に、そのレプリカに対して完全な勾配を計算するのに使用するために次に最も低い畳み込み層のレプリカに完全な勾配を逆伝搬する。
【００２８】
ワーカーは、各レプリカおよび区分に対して対応する勾配を使用して、ワーカーによって維持される畳み込み層のレプリカおよび完全結合された層の区分に対する重み値を更新する(ステップ218)。一般的に、ワーカーがどのように重み値を更新するかは、使用されているトレーニング技術に左右される。たとえば、一部のトレーニング技術では、所与のトレーニング例に対して勾配を使用して計算された所与の重みの新しい値wnは、以下を満たすことができる。
wn=wo-αΔQ(wo)
ここで、woは、重みの現在の重み値であり、αは、定数値であり、ΔQ(wo)は、トレーニング例に対する重みに対する勾配である。
【００２９】
一般的に、1つのワーカーのみが所与の完全結合された層において各ノードを維持するので、完全結合された層の各ノードについて、各ワーカーは、ワーカーによって計算される勾配部分を使用して、ワーカーによって維持されるノードに対する重み値を更新する。
【００３０】
しかし、畳み込み層の重みの値が各ワーカーによって別々に維持されるので、畳み込み層に対する勾配は、各ワーカーがそれらの畳み込み層のレプリカに対する重みを更新する前に同期される必要がある。勾配を同期させるために、各ワーカーには、重みを同期させる各畳み込み層の異なる部分が割り当てられ得る。各他のワーカーは、ノードが割り当てられたワーカーに所与のノードに対する勾配を送ることができる。割り当てられた側のワーカーは、勾配を蓄積し、次に、各他のワーカーに蓄積された勾配を送ることができる。次に、各ワーカーは、各他のワーカーと同じ蓄積された勾配を使用して、畳み込み層のノードに対する重みを更新することができる。
【００３１】
オプションとして、各ワーカーに各畳み込み層の異なる部分を割り当てるのではなく、各ワーカーは、中央のサーバに各畳み込み層のレプリカの各ノードに対する勾配を送ることができる。中央のサーバは、サーバがワーカーから受信したノードの各々に対して勾配を蓄積し、次いで、各ワーカーに蓄積された勾配を送ることができる。
【００３２】
各ワーカーがプロセス200を完了すると、各ワーカーには、トレーニング例の新しいバッチが割り当てられ得て、新しいバッチに対してプロセス200を繰り返すことができる。ワーカーは、たとえば、CNNのトレーニングに対する収束基準が満たされるまで、または事前に決定したプロセスの反復の数が実行されるまで、プロセス200を繰り返し続けることができる。
【００３３】
図3は、ワーカーによって維持される完全結合された層の区分を通じてアクティブ化データを処理するための例示的なプロセス300を示す流れ図である。次に、プロセス300は、CNNをトレーニングするための手法の一部として、たとえば、適切にプログラムされた図1のワーカー100a〜100cの各々など、複数のワーカーの各々によって実行され得る。
【００３４】
ワーカーは、トレーニング例に対する畳み込みアクティブ化データを取得する(ステップ302)。
【００３５】
ワーカーは、アクティブ化データにおいて識別された各トレーニング例に対してそれぞれの最初の完全結合された層の部分のアクティブ化を計算するために、最初の完全結合された層の区分を通じて畳み込みアクティブ化データを処理する(ステップ304)。特に、ワーカーは、各例に対するそれぞれの最初の完全結合された層の部分アクティブ化を生成するために、アクティブ化データの最初の完全結合された層の区分を通じて、各例に対する畳み込みアクティブ化を処理する。各例に対する最初の完全結合された層の部分のアクティブ化は、ワーカーによって維持される最初の完全結合された層の区分における各ノードによって生成されたそれぞれのアクティブ化を含む。
【００３６】
ワーカーは、他のワーカーに自身の最初の完全結合された層のアクティブ化データを提供し、他のワーカーから他の最初の完全結合されたアクティブ化データを受信する(ステップ306)。すなわち、ワーカーは、各トレーニング例について、各他のワーカーにトレーニング例に対する最初の完全結合された層のアクティブ化を提供する。ワーカーは、また、他のワーカーから、各トレーニング例に対する最初の完全結合された層のアクティブ化を受信する。したがって、ワーカーが他のアクティブ化を受信した後、ワーカーは、トレーニング例の各々について、トレーニング例の各々に対して完全な最初の完全結合された層のアクティブ化を有している。同様に、ワーカーは、トレーニング例の各々について、他のワーカーが、完全な最初の完全結合された層のアクティブ化を所有することを可能にするために、各他のワーカーに自身の最初に完全結合された層のアクティブ化データを提供する。
【００３７】
システムは、各トレーニング例に対するそれぞれの次の完全結合された層の区分のアクティブ化を生成するために、ワーカーによって維持される次の最も高い完全結合された層の区分を通じて各トレーニング例に対する完全な最初の完全結合された層のアクティブ化を処理する(ステップ308)。所与のワーカーに対する次の完全結合された層の部分のアクティブ化は、ワーカーによって維持される次の最も高い完全結合された層の区分における各ノードによって生成されたそれぞれのアクティブ化を含む。
【００３８】
次の層がCNNで最も高い完全結合された層である場合、ワーカーは、ワーカーに対する最後の完全結合されたアクティブ化として、次の完全結合された層の区分のアクティブ化を処理する。連続において次の層よりも高い層が1つまたは複数ある場合、ワーカーは、すなわち、他のワーカーに、自身の現在の完全結合された層の区分のアクティブ化データを提供し、組み合わせられた現在の完全結合された層のアクティブ化を生成するために、他のワーカーから他の現在の完全結合された層の区分のアクティブ化データを受信し、次いで、連続で次に高い層を使用して、組み合わせられたアクティブ化を処理することによって、各高い層に対してステップ304およびステップ306を繰り返すことができる。
【００３９】
図4は、ワーカーによって維持される完全結合された層の区分を通じて勾配を逆伝搬するための例示的なプロセス400を示す流れ図である。次に、プロセス400は、CNNをトレーニングするための手法の一部として、たとえば、適切にプログラムされた図1のワーカー100a〜100cの各々など、複数のワーカーの各々、によって実行され得る。
【００４０】
ワーカーは、最も高い層の勾配データを受信する(ステップ402)。最も高い層の勾配データは、複数のトレーニング例の各々に対して、ワーカーによって維持される最も高い完全結合された層の区分に対する目的関数のそれぞれの勾配を含む。
【００４１】
ワーカーは、自身の最も高い層の勾配データ、すなわち、各トレーニング例に対する最も高い層の勾配を他のワーカーに送り、他のワーカーから他の最も高い層の勾配を受信する(ステップ404)。各トレーニング例について、ワーカーは、トレーニング例に対して、組み合わせられた最も高い層の勾配を生成するために、トレーニング例に対する他の最も高い層の勾配をトレーニング例に対する自身の最も高い層の勾配に組み合わせることができる。
【００４２】
ワーカーは、各トレーニング例に対して、組み合わせられた最も高い層の勾配を使用して、最も高い完全結合された層の区分の直下にある完全結合された層の区分に対して勾配部分を計算する(ステップ406)。最も高い完全結合された層の区分の直下にある完全結合された層の区分が、連続において最も低い区分である場合、ワーカーは、最も高い区分の直下にある区分の勾配を連続において最も低い完全結合された層の区分に対する勾配として処理する。追加の完全結合された層の区分がある場合、ワーカーは、各より低い完全結合された層の区分に対して、ステップ404および406を繰り返すことができる。
【００４３】
ワーカーは、最も低い完全結合された層の区分の勾配を使用して、各トレーニング例に対する最も高い畳み込み層に対する勾配部分を計算する(ステップ408)。すなわち、ワーカーは、ワーカーによって維持される最も低い完全結合された層の区分のノードに対する重みの値および完全結合された層の区分を通じて逆伝搬されたデータを使用して、最も高い畳み込み層に対する勾配部分を計算する。
【００４４】
図5は、ワーカー間でアクティブ化データおよび勾配データを通信するための例示的なプロセス500を示す流れ図である。プロセス500は、CNNをトレーニングするための手法の一部として、たとえば、適切にプログラムされた図1のワーカー100a〜100cの各々など、複数のワーカーの各々によって実行され得る。
【００４５】
ワーカーは、すべての自身の畳み込みアクティブ化データ、すなわち、ワーカーに割り当てられたトレーニング例のバッチの各トレーニング例に対するアクティブ化をCNNをトレーニングしている各他のワーカーに送る(ステップ502)。
【００４６】
ワーカーは、CNNをトレーニングしている各他のワーカーから他の畳み込みアクティブ化データを受信する(ステップ504)。畳み込みアクティブ化のすべてが受信されたら、ワーカーは、トレーニング技術の現在の反復の間にCNNをトレーニングするワーカーのいずれかに割り当てられた各トレーニング例に対する畳み込みアクティブ化を有している。
【００４７】
ワーカーは、たとえば、図2、図3、および図4に関して上に記述したように、各トレーニング例に対する勾配データを計算するために、完全結合された層の区分のすべてを通じて、自身および他のアクティブ化データを処理する(ステップ506)。
【００４８】
ワーカーは、他のワーカーに自身の勾配データを送る(ステップ508)。すなわち、ワーカーは、ワーカーによって計算された各最も高い完全結合された層のレプリカの勾配部分について、対応するトレーニング例およびトレーニング例に対するアクティブ化データが受信されたワーカーを識別する。次に、ワーカーは、トレーニング例に対するアクティブ化データが受信されたワーカーに、各トレーニング例に対する最も高い完全結合された層のレプリカの勾配部分を送る。
【００４９】
ワーカーは、他のワーカーから他の勾配データを受信する(ステップ510)。すなわち、ワーカーに割り当てられたバッチの各トレーニング例について、ワーカーは、CNNをトレーニングしている各他のワーカーからのトレーニング例について、最も高い完全結合された層のレプリカの勾配部分を受信する。ワーカーに割り当てられたバッチの各トレーニング例について、システムは、トレーニング例に対する組み合わせられた勾配を生成するために、トレーニング例に対する自身の勾配データおよびトレーニング例に対する他方の勾配データを組み合わせる。
【００５０】
たとえば、図2に関して上に記述したように、ワーカーは、ワーカーによって維持される残りの畳み込み層のレプリカを通じて、ワーカーに割り当てられたバッチにおけるトレーニング例に対する組み合わせられた勾配を逆伝搬する(ステップ512)。
【００５１】
一部の実装では、ワーカーによって維持された完全結合された層の区分を通じてアクティブ化データを処理し始める前に、各ワーカーが、トレーニング例のすべてについてアクティブ化データを送信および受信するのではなく、動作の一部が並列化され得る。すなわち、他のトレーニング例に対するアクティブ化データがワーカーによって受信されている間に、ワーカーは、一部のトレーニング例に対するアクティブ化データを処理し始めることができる。
【００５２】
図6は、ワーカー間のアクティブ化データおよび勾配データを通信するための別の例示的なプロセス600を示す流れ図である。プロセス600は、CNNをトレーニングするための手法の一部として、たとえば、適切にプログラムされた図1のワーカー100a〜100cの各々など、複数のワーカーの各々によって実行され得る。
【００５３】
ワーカーは、CNNをトレーニングする別のワーカーからトレーニング例のバッチに対する他の畳み込みアクティブ化データを受信するか、またはCNNをトレーニングする各他のワーカーに、ワーカーに割り当てられたバッチに対する自身の畳み込みアクティブ化データを送る(ステップ602)。CNNをトレーニングする各ワーカーは、ワーカーは、他の畳み込みデータの受信ではなく自身の畳み込みデータを送ることになるワーカーの順序においてそれぞれの位置が割り当てられる。順序における現在の位置がワーカーに割り当てられた位置である場合、ワーカーは自身のデータを送る。そうでない場合、ワーカーは他のデータを受信する。現在のワーカーが各他のワーカーに自身のデータを送ると、順序における現在の位置は、次の位置に増分される。
【００５４】
ワーカーは、たとえば、図2、図3、および図4に関して上に記述したように、ワーカーによって維持される完全結合された層の区分を通じて、自身のバッチ、または他のバッチに対する畳み込みアクティブ化データを処理し、バッチに対する最も高い完全結合された層のレプリカの勾配部分を計算する(ステップ606)。
【００５５】
ワーカーが、バッチに対してアクティブ化データを処理するのと並行して、ワーカーは、ワーカーに割り当てられたバッチに対して異なるワーカーから他のアクティブ化データを受信するか、または自身のアクティブ化データを送る(ステップ602)。すなわち、ワーカーは、順序における現在の位置がワーカーに割り当てられた位置に一致するかどうかを再び決定し、現在の位置が一致する場合、自身のデータを送り、現在の位置が一致しない場合、自身のデータを受信する。
【００５６】
ワーカーは、バッチに対する最も高い完全結合された層のレプリカの勾配部分を計算したら、ワーカーは、他のワーカーに自身の勾配データを送るか、または他のワーカーから他の勾配データを受信する(ステップ606)。
【００５７】
勾配データを送信または受信するのと並行して、ワーカーは、勾配データを生成するために、ワーカーが前のアクティブ化データを処理するのと並行して送信または受信された畳み込みアクティブ化データを処理する(ステップ604)。
【００５８】
ワーカーのいずれかに割り当てられたバッチのすべてが、ワーカーによって処理され、ワーカーが、ワーカーに割り当てられたバッチの各トレーニング例に対して完全な勾配データを有している場合、ワーカーは、たとえば、図2に関して上に記述したように、ワーカーによって維持される残りの畳み込み層のレプリカを通じて完全な勾配データを逆伝搬する(ステップ608)。
【００５９】
図7は、ワーカー間のアクティブ化データおよび勾配データを通信するための別の例示的なプロセス700を示す流れ図である。プロセス700は、CNNをトレーニングするための手法の一部として、たとえば、適切にプログラムされた図1のワーカー100a〜100cの各々など、複数のワーカーの各々によって実行され得る。
【００６０】
ワーカーは、各他のワーカーにN/K個のトレーニング例について畳み込みアクティブ化データを送り、ここでNは、ワーカーに割り当てられたバッチのトレーニング例の総数であり、Kは、CNNをトレーニングするワーカーの総数である(ステップ702)。
【００６１】
ワーカーは、各他のワーカーからN/K個の他のトレーニング例に対する他の畳み込みアクティブ化データを受信する(ステップ704)。したがって、ワーカーは、(N)*(K-1)/K個の合計のトレーニング例に対する畳み込みアクティブ化データを受信する。
【００６２】
ワーカーは、ワーカーによって維持される完全結合された層の区分を通じて、N個のトレーニング例、すなわち、(N)*(K-1)/K個の他のトレーニング例およびN/K個の自身のトレーニング例に対する畳み込みアクティブ化データを処理し、たとえば、図2、図3、および図4に関して上に記述したように、各トレーニング例に対して最も高い完全結合された層のレプリカの勾配部分を計算する(ステップ706)。
【００６３】
ワーカーが、N個のトレーニング例に対する畳み込みアクティブ化データを処理するのと並行して、ワーカーは、他のワーカーに送られるより多くの畳み込みアクティブ化データがあるかどうかを決定する(ステップ708)。特に、ワーカーは、CNNをトレーニングしている他のワーカーにまだ送られていないワーカーに割り当てられたバッチにトレーニング例があるかどうかを決定する。
【００６４】
他のワーカーに送られるより多くの畳み込みアクティブ化データがある場合、ワーカーは、現在のN個のトレーニング例に対する畳み込みアクティブ化データを処理するのと並行して、各他のワーカーにN/K個多いトレーニング例に対する畳み込みアクティブ化データを送り(ステップ702)、各他のワーカーからN/K個多いトレーニング例に対する他の畳み込みデータを受信する(ステップ704)。
【００６５】
現在のN個のトレーニング例に対する最も高い完全結合された層のレプリカの勾配部分が計算されると、ワーカーは、N個のトレーニング例の各々について勾配データをトレーニング例が割り当てられたワーカーに送り(ステップ710)、ワーカーに割り当てられたトレーニング例について他のワーカーから勾配データを受信する(ステップ712)。
【００６６】
勾配データを送信および受信するのと並行して、ワーカーが、ステップ708で送られるより多くの畳み込みアクティブ化データがあったと決定した場合、ワーカーは、次のN個のトレーニング例に対する畳み込みアクティブ化データを処理し始める(ステップ706)。
【００６７】
ステップ708で送られるより多くの畳み込みデータがなかったとワーカーが決定した場合、ワーカーに割り当てられたすべてのN個のトレーニング例に対する勾配データが受信されると、ワーカーは、たとえば、図2に関して上に記述したように、ワーカーによって維持される残りの畳み込み層のレプリカを通じて勾配データを逆伝搬する。
【００６８】
上の記述は、一般的に、ワーカーによって維持される畳み込み層のレプリカのすべてを通じて、ワーカーに割り当てられたトレーニング例のすべてに対する勾配データが逆伝搬されるまで、ワーカーが完全結合された層の重みを更新するのを待つことを記述している。しかし、一部の実装では、ワーカーは、畳み込み層に対する重みが更新されるのとは異なる間隔で、完全結合された層の重みを更新することができる。たとえば、プロセス700が、畳み込み層のレプリカと完全結合された層の区分の間でデータを交換するために使用される実装では、各ワーカーは、畳み込み層のレプリカのすべてを通じて、ワーカーに割り当てられたバッチのすべてのN個のトレーニング例に対する勾配が逆伝搬されるまで、ワーカーによって維持される畳み込み層のレプリカに対する重みを更新するのを待っている間に、N個のトレーニング例の各組に対する勾配が計算された後、ワーカーによって維持される完全結合された層の区分に対する重みを更新することができる。同様に、畳み込み層のレプリカと完全結合された層の区分の間でデータを交換するためにプロセス600が使用される実装では、各ワーカーは、畳み込み層のレプリカのすべてを通じて、ワーカーに割り当てられたバッチのすべてのN個のトレーニング例に対する勾配が逆伝搬されるまで、ワーカーによって維持される畳み込み層のレプリカに対する重みを更新するのを待っている間に、ワーカーによって現在処理されているトレーニング例に対する勾配が計算された後、ワーカーによって維持される完全結合された層の区分に対する重みを更新することができる。
【００６９】
本明細書に記述した主題および機能動作の実施形態は、デジタル電子回路、明確に具現化されたコンピュータソフトウェアもしくはファームウェア、本明細書に開示した構造およびそれらの構造の等価物を含むコンピュータハードウェア、またはそれらの1つまたは複数の組み合わせにおいて実装され得る。本明細書に記述した主題の実施形態は、1つまたは複数のコンピュータプログラム、すなわち、データ処理装置によって、またはその動作を制御するために実行するために有形の非一時的プログラムキャリアで符号化されたコンピュータプログラム命令の1つまたは複数のモジュールとして実装され得る。あるいはまたは加えて、プログラム命令は、人工的に生成された伝播された信号、たとえば、データ処理装置によって実行するために適切な受信機装置に送信するために情報を符号化するために生成される、マシンによって生成された電気的、光学的、または電磁気的な信号で符号化され得る。コンピュータ記憶媒体は、機械可読の記憶デバイス、機械可読の記憶基板、ランダムアクセスもしくはシリアルアクセスのメモリのデバイス、またはそれらの1つまたは複数の組み合わせの場合がある。
【００７０】
「データ処理装置」という用語は、例をあげると、1つのプログラマブルプロセッサ、1つのコンピュータ、または複数のプロセッサもしくはコンピュータを含む、データを処理するためのすべての種類の装置、デバイス、およびマシンを包含する。装置は、たとえば、FPGA(フィールドプログラマブルゲートアレイ)またはASIC(特定用途向け集積回路)など、専用論理回路を含むことができる。装置は、また、ハードウェアに加えて、たとえば、プロセッサのファームウェア、プロトコルスタック、データベース管理システム、オペレーティングシステム、またはそれらの1つまたは複数の組み合わせを構成するコードなど、当該のコンピュータプログラムに対して実行環境を作成するコードを含むことができる。
【００７１】
コンピュータプログラム(プログラム、ソフトウェア、ソフトウェアアプリケーション、モジュール、ソフトウェアモジュール、スクリプト、もしくはコードとも呼ばれまたは記述され得る)は、コンパイルされた言語もしくは解釈された言語、または宣言型言語もしくは手続き型言語を含む、任意の形式のプログラミング言語で記述され得て、独立型のプログラムとして、またはモジュール、コンポーネント、サブルーチン、もしくはコンピューティング環境で使用するに適した他のユニットとしてなど、任意の形式で展開され得る。コンピュータプログラムは、必須ではないが、ファイルシステムのファイルに対応する場合がある。プログラムは、たとえば、マークアップ言語文書、当該のプログラムに専用される単一のファイル、またはたとえば、1つまたは複数のモジュール、サブプログラム、もしくはコードの部分を記憶するファイルなど複数の調整されたファイルに記憶された1つもしくは複数のスクリプトなど、他のプログラムまたはデータを保持するファイルの一部に記憶され得る。コンピュータプログラムは、1台のコンピュータ、または1つのサイトに位置するか、もしくは複数のサイトに分散され通信ネットワークによって相互に結合された複数のコンピュータで実行されるように展開され得る。
【００７２】
本明細書に記述したプロセスおよびロジックのフローは、入力データに対して動作し出力を生成することによって機能を実行するために、1つまたは複数のコンピュータプログラムを実行する1つまたは複数のプログラム可能なコンピュータによって実行され得る。プロセスおよびロジックのフローは、たとえば、FPGA(フィールドプログラマブルゲートアレイ)またはASIC(特定用途向け集積回路)など、専用論理回路によって実行され得て、装置は、また、専用論理回路として実装され得る。
【００７３】
コンピュータプログラムの実行に適したコンピュータは、例をあげると、汎用もしくは専用、または両方のマイクロプロセッサ、または他の種類の中央処理装置に基づくことができる。一般的に、中央処理装置は、読み取り専用メモリもしくはランダムアクセスメモリ、または両方から命令およびデータを受信する。コンピュータの必須の要素は、命令を実行または実施するための中央処理装置、ならびに命令およびデータを記憶するための1つまたは複数のメモリデバイスである。一般的に、コンピュータは、また、たとえば磁気、光磁気ディスク、または光ディスクなど、データを記憶するための1つまたは複数の大容量記憶装置を含むか、またはデータを受信もしくは転送もしくは両方を実行するために動作可能に結合される。しかし、コンピュータには、そのようなデバイスは必要がない。さらに、コンピュータは、例をあげると、たとえば、自動車電話、携帯情報端末(PDA)、モバイル型のオーディオもしくはビデオプレーヤー、ゲームコンソール、全地球測位システム(GPS)の受信機、またはたとえば、ユニバーサルシリアルバス(USB)フラッシュドライブなど携帯型記憶デバイスなど別のデバイスに組み込まれ得る。
【００７４】
コンピュータプログラム命令およびデータを記憶するのに適したコンピュータ可読媒体は、例をあげると、たとえばEPROM、EEPROM、およびフラッシュメモリデバイスなどの半導体記憶装置、たとえば内部ハードディスクまたはリムーバブルディスクなどの磁気ディスク、光磁気ディスク、ならびにCD ROMおよびDVD-ROMディスクなど、すべての形式の不揮発性メモリ、メディア、およびメモリデバイスを含む。プロセッサおよびメモリは、専用論理回路によって補足され得るか、または組み込まれ得る。
【００７５】
ユーザとの対話を提供するために、本明細書に記述した主題の実施形態は、ユーザに情報を表示するためにたとえばCRT(陰極線管)またはLCD(液晶ディスプレイ)のモニタなどのディスプレイデバイス、およびキーボード、ならびにたとえばそれによってユーザがコンピュータに入力を提供できるマウスまたはトラックボールなどのポインティングデバイスを有するコンピュータに実装され得る。他の種類のデバイスは、同様に、ユーザとの対話を提供するために使用され得る。たとえば、ユーザに提供されるフィードバックは、たとえば視覚フィードバック、聴覚フィードバック、または触覚フィードバックなど、任意の形式の感覚フィードバックの場合があり、ユーザからの入力は、音響、言語、または触覚の入力を含む任意の形式で受信され得る。加えて、コンピュータは、たとえば、ウェブブラウザから受信された要求に応じて、ユーザのクライアントデバイスのウェブブラウザにウェブページを送ることによってなど、ユーザによって使用されるデバイスに文書を送り、そこから文書を受信することによってユーザと対話することができる。
【００７６】
本明細書に記述した主題の実施形態は、たとえば、データサーバとしてなどバックエンドコンポーネントを含む、またはたとえばアプリケーションサーバとしてミドルウェアコンポーネントを含む、またはたとえばユーザが、本明細書に記述した主題の実装と対話することができるグラフィカルユーザインターフェースもしくはウェブブラウザを有するクライアントコンピュータなどのフロントエンドコンポーネント、または1つもしくは複数のそのようなバックエンド、ミドルウェア、もしくはフロントエンドのコンポーネントの任意の組み合わせを含むコンピューティングシステムに実装され得る。システムのコンポーネントは、たとえば通信ネットワークなど、デジタルデータ通信の任意の形式または媒体によって相互に結合され得る。通信ネットワークの例は、ローカルエリアネットワーク(「LAN」)およびたとえばインターネットなどのワイドエリアネットワーク(「WAN」)を含む。
【００７７】
コンピューティングシステムは、クライアントおよびサーバを含むことができる。クライアントおよびサーバは、一般的に、相互に離れており、典型的には、通信ネットワークを通じて対話する。クライアントとサーバの関係は、それぞれのコンピュータで実行されていて、相互にクライアントサーバ関係を有するコンピュータプログラムによって発生する。
【００７８】
本明細書は、多くの特定の実装詳細を含んでいるが、これらは、発明または請求され得るものの範囲に対する制限として解釈されるべきではなく、むしろ、特定の発明の特定の実施形態に特有な場合がある機能の記述として解釈されるべきである。個別の実施形態の文脈において本明細書に記述した特定の機能は、また、単一の実施形態の組み合わせにも実装され得る。反対に、単一の実施形態の文脈において記述した様々な機能は、また、複数の実施形態で別々に、または適切な下位の組み合わせにおいて実装され得る。さらに、機能は、特定の組み合わせで機能するものとして上に記述され、そのようなものと最初に請求さえされているが、請求された組み合わせからの1つまたは複数の機能は、一部の場合には、組み合わせから削除することができ、請求された組み合わせは、下位の組み合わせまたは下位組み合わせの変形を対象とすることができる。
【００７９】
同様に、動作は、特定の順で図面に描写されているが、これは望ましい結果を達成するために、そのような動作が、図示された特定の順もしくは順番に実行されたり、またはすべての図示された動作が実行されたりすることを必要とするものと理解されるべきではない。特定の状況では、マルチタスクおよび並列処理が有利な場合がある。さらに、上に記述した実施形態の様々なシステムモジュールおよびコンポーネントの分離は、すべての実施形態においてそのような分離を必要とするものと理解されるべきではなく、記述されたプログラムコンポーネントおよびシステムは、一般的に、単一のソフトウェア製品にともに統合されるか、または複数のソフトウェア製品にパッケージ化され得ることを理解されたい。
【００８０】
主題の特定の実施形態について記述してきた。他の実施形態は、以下の特許請求の範囲の範囲内にある。たとえば、特許請求の範囲に詳述されたアクションは、異なる順で実行され得て、それでも望ましい結果を達成することができる。一例をあげると、添付の図面に描写したプロセスは、望ましい結果を達成するために、図示された特定の順序、または順番を必ずしも必要としない。特定の実装では、マルチタスクおよび並列処理が有利な場合がある。
【符号の説明】
【００８１】
100a  ワーカー1
100b  ワーカー2
100c  ワーカー3
102  トレーニングデータ
104a  トレーニング例のバッチ1
104b  トレーニング例のバッチ2
104c  トレーニング例のバッチ3
106a〜106c、108a〜108c、110a〜110c、112a〜112c  畳み込み層
114a〜114c  区分
116a〜116c  区分
150  システム
【図１】
0006370469.tif 000002
【図２】
0006370469.tif 000003
【図３】
0006370469.tif 000004
【図４】
0006370469.tif 000005
【図５】
0006370469.tif 000006
【図６】
0006370469.tif 000007
【図７】
0006370469.tif 000008