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

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

▶ ザマ・エス・ア・エスの特許一覧

特表2024-525122完全準同型評価のための計算ネットワーク変換
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-07-10
(54)【発明の名称】完全準同型評価のための計算ネットワーク変換
(51)【国際特許分類】
   G09C 1/00 20060101AFI20240703BHJP
   G06N 3/06 20060101ALI20240703BHJP
【FI】
G09C1/00 650Z
G06N3/06
【審査請求】有
【予備審査請求】未請求
(21)【出願番号】P 2023574426
(86)(22)【出願日】2022-06-03
(85)【翻訳文提出日】2024-01-25
(86)【国際出願番号】 EP2022065196
(87)【国際公開番号】W WO2022254010
(87)【国際公開日】2022-12-08
(31)【優先権主張番号】21290037.7
(32)【優先日】2021-06-04
(33)【優先権主張国・地域又は機関】EP
(81)【指定国・地域】
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.VERILOG
(71)【出願人】
【識別番号】523168881
【氏名又は名称】ザマ・エス・ア・エス
(74)【代理人】
【識別番号】110001173
【氏名又は名称】弁理士法人川口國際特許事務所
(72)【発明者】
【氏名】シュバリエ-マメス,ブノワ
(72)【発明者】
【氏名】パイリエ,パスカル・ジルベール・イブ
(57)【要約】
いくつかの実施形態は、関数を計算するように構成された演算の第1の計算ネットワークを、同じ関数を計算するように構成されたFHE演算の第2の計算ネットワークに変換するための、コンピュータ実装される方法を対象とする。例えば、拡大係数(α)のセットは、第1の計算ネットワークにおける行列演算のために決定され得る。実数値行列は、対応する拡大係数を用いて実数値行列をスケーリングし丸めることによって変換できる。第2の計算ネットワークの精度尺度は、繰り返し最適化され得る。
【特許請求の範囲】
【請求項1】
関数を計算するように構成された演算の第1の計算ネットワークを、同じ関数を計算するように構成された完全準同型暗号化演算の第2の計算ネットワークに変換するための、コンピュータ実装される方法であって、
- 演算の第1の計算ネットワークは、実数値行列乗算を含む複数の実数値行列演算(y=W.x)と、複数の実数値行列演算のうちの少なくとも1つの結果を入力として受け取る少なくとも複数のさらなる演算(z=Activation(y))とを含み、
- 第1の計算ネットワークを変換することは、
- 拡大係数(α)のセットを決定すること(610)であって、行列演算のそれぞれが拡大係数に対応し、拡大係数は実数である、こと、
- 対応する拡大係数を用いて実数値行列をスケーリングし、スケーリングされた実数値行列を丸めることによって、複数の実数値行列演算に対応する複数の実数値行列(W)を整数値行列に変換すること(620)、
- 複数のさらなる演算を調整して(630)、スケーリングされた行列演算のスケーリングされた結果を入力として受け取ることであって、第2の計算ネットワークは、変換された複数の整数値行列および調整された複数のさらなる演算を含む、こと、
- 第2の計算ネットワークの精度を示す、第2の計算ネットワークの精度尺度を決定すること(640)、
- 精度尺度を改善するために、拡大係数(α)のセットを繰り返し最適化すること(650)
を含む、方法。
【請求項2】
第1の計算ネットワークおよび第2の計算ネットワークはニューラルネットワークである、請求項1に記載の変換方法。
【請求項3】
実数値行列演算は、実数値行列加算(y=W.x+B)をさらに含み、実数値行列演算を変換することは、実数値行列加算に関連付けられた行列(B)を同じ拡大係数を用いてスケーリングすることをさらに含む、請求項1または2に記載の変換方法。
【請求項4】
- さらなる演算の少なくとも一部は、プログラマブルブートストラッピングとして第2の計算ネットワークに実装される、請求項1から3のいずれか一項に記載の変換方法。
【請求項5】
拡大係数(α)のセットを決定することが、
- 第1の計算ネットワーク内の行列演算に拡大係数をシンボル的に関連付けること、
- 第1の計算ネットワークを通して拡大係数を伝播させ、変換演算の出力に適用される第1の計算ネットワーク内の演算から拡大係数に関する条件を導出することを含む、請求項1から4のいずれか一項に記載の変換方法。
【請求項6】
拡大係数(α)のセットを反復的に最適化することは条件に従う、請求項5に記載の変換方法。
【請求項7】
実数値行列を対応するスケーリングされた整数値行列で置き換えることによって第2の計算ネットワークを導出することと、加算のための実数値行列を対応するスケーリングされた行列で置き換えることと、さらなる演算における演算を調整することとを含む、請求項1から6のいずれか一項に記載の変換方法。
【請求項8】
第1および第2の計算ネットワークは演算間の複数の層を備え、各層は、第1の計算ネットワーク内の層内の値と第2の計算ネットワーク内の対応する層内の対応する値との間の乗算比に対応する関連する層係数を有し、
- 第1の計算ネットワークはジョイン演算を含み、ジョイン演算は2つの異なる層から第1の入力および第2の入力を受け取り、拡大係数は、2つの異なる層に関連付けられた2つの層係数が等しいという条件の下で決定され、ジョイン演算がホモジニアスになる、請求項5から7のいずれか一項に記載の変換方法。
【請求項9】
ジョイン演算は、加算、減算、または連結のうちの1つであり、ジョイン演算は、第2の計算ネットワーク内の暗号化された値に対する対応する加算、減算、または連結として実装される、請求項8に記載の変換方法。
【請求項10】
第2の計算ネットワークは、第1の計算ネットワークに対応する演算と、挿入された演算とを含み、次の演算における拡大係数を等しくするために第2の計算ネットワークに補正演算が挿入され、
- 補正演算はプログラマブルブートストラッピングであり、補正係数が実数である、または
- 補正演算は整数値の乗算であり、補正係数が整数である、請求項1から9のいずれか一項に記載の変換方法。
【請求項11】
さらなる演算を調整することが、
- 入力から拡大係数を除去する(f(x)→f(x/α))こと、および/または
- 出力に拡大係数を適用する(f(x)→βf(x/α))こと
を含む、請求項1から10のいずれか一項に記載の変換方法。
【請求項12】
- 精度尺度は、サンプル入力のセットに対して第1の計算ネットワークおよび第2の計算ネットワークを評価し、評価結果をサンプル出力のセットと比較することによって計算され、第1の計算ネットワークの第1の精度および第2の計算ネットワークの第2の精度を取得し、精度尺度は、第1の精度と第2の精度を比較する、および/または
- 精度尺度は、サンプル入力のセットに対して第2の計算ネットワークを評価し、評価結果をサンプル出力のセットと比較することによって計算され、第2の計算ネットワークの第2の精度を取得し、精度尺度は、第2の精度を所定の精度目標と比較する、
請求項1から11のいずれか一項に記載の変換方法。
【請求項13】
-プロセッサシステムによって実行されると、プロセッサシステムに請求項1から12のいずれか一項に記載の方法を行わせる命令、および
- 請求項1から12のいずれか一項に従って取得された第2のネットワークを表すデータ
のうちのいずれか1つを表すデータ(1020)を含む、一時的または非一時的なコンピュータ可読媒体(1000)。
【請求項14】
関数を計算するように構成された演算の第1の計算ネットワークを、同じ関数を計算するように構成された完全準同型暗号化演算の第2の計算ネットワークに変換するためのシステム(200)であって、
- 実数値行列乗算を含む複数の実数値行列演算(y=W.x)と、複数の実数値行列演算のうちの少なくとも1つの結果を入力として受け取る少なくとも複数のさらなる演算(z=Activation(y))とを含む、演算の第1の計算ネットワークを受け取るための通信インターフェース、
- 第1の計算ネットワークを変換するために構成されたプロセッサシステム
を含み、変換することが、
- 拡大係数(α)のセットを決定すること(610)であって、行列演算のそれぞれが拡大係数に対応し、拡大係数は実数である、こと、
- 対応する拡大係数を用いて実数値行列をスケーリングし、スケーリングされた実数値行列を丸めることによって、複数の実数値行列演算に対応する複数の実数値行列(W)を整数行列に変換すること(620)、
- 複数のさらなる演算を調整して(630)、スケーリングされた行列演算のスケーリングされた結果を入力として受け取ることであって、第2の計算ネットワークは、変換された複数の整数行列および調整された複数のさらなる演算を含む、こと、
- 第2の計算ネットワークの精度を示す、第2の計算ネットワークの精度尺度を決定すること(640)、
- 精度尺度を改善するために、拡大係数のセット(α)を繰り返し最適化する(650)ことを含む、システム(200)。
【発明の詳細な説明】
【技術分野】
【0001】
本明細書で開示される主題は、関数を計算するように構成された演算の第1の計算ネットワークを、同じ関数を計算するように構成された完全準同型暗号化された演算の第2の計算ネットワークに変換するための、コンピュータ実装される方法、コンピュータ可読媒体、関数を計算するように構成された演算の第1の計算ネットワークを、同じ関数を計算するように構成された完全準同型暗号化された演算の第2の計算ネットワークに変換するためのシステムに関する。
【背景技術】
【0002】
Craig Gentryの画期的な論文「Fully Homomorphic Encryption Using Ideal Lattices」(完全版はCommun.ACM53(3):97-105,2010;参照により本明細書に含まれる)以来ずっと、完全準同型暗号化(FHE)を現実世界の用途にとって十分にセキュアで効率的にするための継続的な努力が行われてきた。FHEを使用すると、暗号化されたデータに対して、復号できなくても、計算、例えば回路の評価、を行える。例えば、入力データと計算結果を暗号化された形式で受け取り、返すことができる。中間データ、例えば計算の内部状態も暗号化された形式であり得る。
【0003】
計算結果は暗号化された形式で返されるが、復号すると、出力は暗号化されていないデータに対して演算が行われた場合と同じになる。準同型暗号化は、プライバシーを保護するアウトソーシングされたストレージと計算に使用できる。これにより、データを暗号化し、処理やストレージが暗号化されている間中、クラウド環境にアウトソーシングすることができる。
【0004】
例えば、準同型暗号は、プライバシー規制によりプレーンデータの共有が困難であるが暗号化された医療データに関する計算は許容され得る医療分野などに適用され得る。例えば、医療データを分類するために開発された医療モデルは、第三者、例えば病院から暗号化された形式で医療データを受け取るように構成され得る。医療モデルは、例えば、医療データを、例えば、正常か異常か、または何らかの特定の医学的症候群、疾患、または他の障害を有するかとして分類することができる。準同型暗号化を使用すると、暗号化された形式で受け取った医療データに医療モデルを適用できる。これは、医療モデルを評価する当事者は、暗号化された医療データに対応するプレーンな医療データにアクセスできないことを意味する。サービスのユーザは、医療モデルのアプリケーションの結果を復号できる。
【0005】
暗号文の任意の計算をサポートする暗号システムは、完全準同型暗号化(FHE)スキームとして知られている。このようなスキームにより、幅広い関数の評価が可能になり、暗号化された入力に対して実行して結果の暗号化を生成できる。例えば、andゲートとorゲートの組み合わせが利用可能になると、任意のブール回路を実装できるため、いわゆる機能の完全性が得られる。このような回路は、その入力、内部状態、出力を明らかにすることなく、信頼できない関係者によって行われ得る。完全準同型暗号化はレベル化され(leveled)得、その場合、特定の演算の数が所定の閾値を超えることはできない。レベル完全準同型スキーム(leveled fully homomorphic scheme)は、ブートストラッピング演算を行うことによって非レベルFHEスキームに変換できる。ブートストラッピング演算は、暗号化されたデータアイテムに対して行える演算数よりも演算数を増加させる。
【0006】
完全準同型暗号化スキームは、ブール演算回路や算術回路など、何らかの特別な形式で表現される計算をサポートし得る。例えば、レベル完全準同型暗号化スキームは、任意の回路の評価をサポートできるが、その深さは制限されており、事前に決定されている。非レベル完全準同型暗号化(FHE)により、無制限の深さの任意の回路を評価できる。レベルFHEスキームは、データに対するブートストラッピング演算を定期的に行うことによって非レベルFHEスキームに変換できる。計算、例えば関数を回路の形でコンパイルする方法は知られている。
【0007】
Gentryの論文以来、多くのFHEスキームが開発され、計算時間が数オーダー短縮された。現在、多くのFHEスキームが知られている。FHEスキームのより最近の例は、Ilaria Chillottiらの論文「TFHE:Fast Fully Homomorphic Encryptionover the Torus」で説明され(J.Cryptology33(1):34-91,2020)、参照により本明細書に含まれる。
【0008】
好ましいFHEスキームは、Ilaria Chillotti、Marc Joye、およびPascal Paillierによる論文「Programmable Bootstrapping Enables Efficient Homomorphic Inference of Deep Neural Networks」に説明されており、Cryptology ePrint Archive:Report2021/091を参照されたく、これは参照により本明細書に含まれる。この論文は、トーラスの要素に対して演算する。例えば、それはトーラス型FHEスキーム(TFHE)である。
【0009】
効率的なFHEスキームがますます利用可能になるにつれて、当初は従来の非暗号化評価用に開発された計算をFHEを使用した計算に変換することへの関心が高まっている。このような変換は、特にいわゆるプログラマブルブートストラッピング(PBS)、つまりFHE計算の設計者が選定できる所定の関数も実行するブートストラッピング演算の進歩により、常に可能である。それにもかかわらず、プログラマブルブートストラッピングを使用する必要なしで、暗号化された値に対して直接行える演算として、元の計算の演算をできる限り実行したいという要求がある。
【0010】
残念ながら、多くのFHEスキーム、特にTFHEスキームは、暗号化された値に対して直接行える演算について、例えば、元の非暗号化計算と同等の計算コストの暗号化された演算となるような、制限を課す。例えば、2つの暗号化された値の加算は多くの場合直接可能であり、特にトーラスベースのスキームで可能である。プレーン整数と暗号化された値の間の乗算も、多くの場合可能である;このことは、整数nによる乗算が暗号化された値のn回のコピーの繰り返し加算とみなすことができることから、予期できる。例えば、TFHE(ここで、「T」はトーラスを表す)では加算と整数乗算がネイティブに可能である。暗号スキームTFHEは、トーラスと呼ばれる数学的構造を使用する。トーラスの例は、例えば1を法とする実数、
【数1】
である(他の法も可能であるが、1が便利である)。トーラス上の値は、実際の実装では、適切な有限環、例えばモジュラスを法とする整数、例えば、mがモジュラスである
【数2】
として表されることがよくあり、整数モジュラスmは通常、2の累乗、例えば2であり、ここで、qは、例えば32または64であり得、通常は128以下である。トーラス値の暗号化は、特定のスキームと同様に行われ得る;例えば、上で引用した論文「Programmable Bootstrapping Enables Efficient Homomorphic Inference of Deep Neural Networks」のように行われ得る。
【0011】
しかし、プレーン非整数値と暗号化された値の乗算が常に可能であるとは限らない。特に、トーラスベースのスキームでは、暗号化された値としての非整数との乗算が定義されていないという困難があることが知られている。
【0012】
残念ながら、ニューラルネットワークと呼ばれる大きなクラスの計算では、非整数との乗算が、例えば多重和、行列乗算、畳み込み、バッチ正規化などの一部として非常に頻繁に発生する。ニューラルネットワークなどの計算ネットワークのFHE計算ネットワークへの変換には改善が必要である。
【先行技術文献】
【非特許文献】
【0013】
【非特許文献1】Craig Gentry、「Fully Homomorphic Encryption Using Ideal Lattices」、Commun.ACM53(3):97-105,2010
【非特許文献2】Ilaria Chillottiら、「TFHE:Fast Fully Homomorphic Encryptionover the Torus」、J.Cryptology33(1):34-91,2020
【非特許文献3】Ilaria Chillotti、Marc Joye、およびPascal Paillier、「Programmable Bootstrapping Enables Efficient Homomorphic Inference of Deep Neural Networks」、Cryptology ePrint Archive:Report2021/091
【発明の概要】
【課題を解決するための手段】
【0014】
必ずしもニューラルネットワークに限定されない、従来の算術演算に基づく計算ネットワーク、例えば第1の計算ネットワークを、FHE演算を使用して暗号化されたデータに対して実行したいという要求がある。このような変換された計算ネットワーク、例えば第2の計算ネットワークの効率を改善するには、例えばプログラマブルブートストラッピングの使用を必要とせずに、暗号化された値に対して演算が直接行われることが望ましい。
【0015】
例えば、従来の演算を使用した第1の計算ネットワークは、実数値行列乗算を含む複数の実数値行列演算(y=W.x)と、さらに複数のさらなる演算、特に行列演算の結果を入力として使用する演算とを含んでもよい。目的は、実数と暗号化された値の間の乗算を回避し、代わりに暗号化された値の整数倍を使用するように行列演算を変換することであり得る。暗号化された値とプレーン整数の乗算、および暗号化された値のプレーン整数またはプレーン実数への加算のみを使用するように変換された演算は、ネイティブFHE演算、例えばプログラマブルブートストラッピングなしのFHE演算として第2の計算ネットワークに実装することができる。第1の計算ネットワークにおける行列演算、例えば乗算または加算における実数は、浮動小数点数または固定小数点数とすることができる。
【0016】
通常、演算を定義する実数は、第1の計算ネットワークと第2の計算ネットワーク内の両方で暗号化されない可能性がある。典型的な実施形態では、第1の計算ネットワークにおける演算の実数の大部分が、例えば行列演算などの演算を定義する実数の少なくとも50%、75%、または実質的にすべてが整数ではない。本明細書に示すように、線形演算の場合、この変換は常に可能である。他の演算では、実数による乗算を回避することが常に可能または望ましいとは限らない。その後、第1の計算ネットワーク内にある可能性のあるさらなる演算は、1つ以上のプログラマブルブートストラッピングを使用して変換できる。
【0017】
実数と暗号化された値の間の乗算を回避するために行列演算を変換する1つの方法は、行列乗算の行列を、拡大係数(通常はアルファで示される)と呼ばれる実数値の定数と乗算し、行列を丸めることである。値を直接丸めると、精度が過度に低減し得る。その結果、行列の乗算から得られる値にも拡大係数が乗算される;しかし、他の演算はこれに対して調整され得る。例えば、乗算結果に加算する必要がある実数値は、拡大係数と乗算できる;例えば、演算がバイアスを伴う行列乗算(y=W.x+B)である場合、Bも拡大係数で乗算され、これにより、バイアスを伴う行列乗算の結果として得られる値は、依然として元の値に拡大係数を乗算したものである。他の演算、例えばさらなる演算は、拡大係数と乗算された入力を予期するように調整されてもよい。例えば、このような関数は、拡大係数による除算を伴う、元の関数の合成として調整することができる(例えば、関数A(x)をA(x/α)に置き換えることができる)。FHEスキームは拡大係数による除算を直接サポートしていない可能性があるが、さらなる演算がプログラマブルブートストラッピングとして実装されている場合、これは問題にならないことに留意されたい。
【0018】
一実施形態では、変換された第2の計算ネットワークについて精度尺度が決定される。丸め演算では、拡大係数との乗算の後でもまったく同じ値がもたらされるわけではないため、拡大係数による変換では不正確さが導入される可能性がある。このような不正確さは、拡大係数が大きいほど小さくなる。換言すれば、拡大係数を増加させると精度が改善され、例えば、第2の計算ネットワークの精度を第1のネットワークの精度に近づかせる。一方、ある時点で、拡大係数が大きすぎると、値が大きくなる傾向にあるため、精度が低下し始め、その他の精度の問題が生じる。さらに、すべての演算が最終結果に同じ影響を与えるわけではない。したがって、一部の演算では、他の演算よりも高い拡大係数がより重要である。適切な拡大係数のセットを見つけることは、許容可能な精度、例えば第1のネットワークの精度に十分近い精度を得るために拡大係数のセットを繰り返し最適化することによって容易にすることができる。
【0019】
計算ネットワークの変換はニューラルネットワークに限定されないが、ニューラルネットワークはこの方法でうまく変換できる関数の重要なクラス。ニューラルネットワークは、多くの場合、計算を通して導入される小さな不正確さに鈍感である。したがって、ニューラルネットワークは、一実施形態を使用すると、特に効率的な第2の計算ネットワークに変換される傾向がある。
【0020】
FHEスキームで暗号化された値は通常、固定されたビット数に制限される。実数という用語は、本明細書では、整数である必要がない数を示すために使用される。実数という言葉が使用されているが、FHEでは、そのような数は通常、複数の桁を含む数値フォーマットで表される。通常、実数を表すには浮動小数点数ではなく固定小数点精度が使用される。例えば、TFHEでは、暗号化された値は、通常は0(含んでいる)と1(含んでいない)の間の区間に制限された数値になり得る。例えば、実数は、32ビットまたは64ビットなどの固定精度を有する0と1の間の値であり得る。トーラス上の値が区間内にある場合、例えば、1を法とする場合、でも、トーラス上の値は区間外の値で表すことができるが、2つの値xとyが1を法として等しい場合、同じトーラス値を表すことが理解される。
【0021】
実施形態では、実数は有限デジタル実数表現で表現され、典型的には実数の有理近似を表す。浮動小数点または固定小数点表現は、このような実数表現の典型的な例である。実数値行列乗算は、実数値行列によって表される実数値行列乗算と、オプションで実数値ベクトルによって表される実数値ベクトル加算とを含むことができる。一実施形態では、実数値行列の1つ以上の要素、またはすべての要素が、有限のデジタル実数表現で表される。一実施形態では、実数値ベクトルの1つ以上の要素、またはすべての要素が、有限デジタル実数表現で表される。一実施形態では、実数値行列と実数値ベクトルの両方のすべての要素は、有限デジタル実数表現で表される;しかし、これは必須ではなく、混合表現の行列および/またはベクトルも可能である。浮動小数点数フォーマットは、例えばIEEE754に記述されている。
【0022】
ひとたび拡大係数のセットを選定すると、実数値の行列乗算と整数値の行列の乗算、実数値の加算と実数値の加算を変換できるが、実数の乗数が、おそらくは拡大係数と乗算され得る。畳み込みに対しても同じ変換が行われる。実数で構成される実数値カーネルによる実数値の畳み込みは、整数で構成される整数値カーネルによる整数値の畳み込みに変換される。実数値カーネルは、拡大係数と乗算し、丸めることによって変換できる。同じ変換はバッチ正規化でも行える。バッチ正規化は通常、y=f*x+bのようなアフィン関数であり、ここで、fとbは実数値の定数である。実数値バッチ正規化は、別のアフィン関数、例えばy=f’*x+b’に変換できる。ここで、f’は整数定数、b’は実数値定数である。他の演算のほとんどは、1つ以上のプログラマブルブートストラッピングに変換できる。一部の演算は暗号化された値に対しても行える;例えば、値の順序を変更するだけの演算、例えば平坦化、連結(concatenation)演算、または2つのベクトルの加算または減算などの線形演算などである。
【0023】
拡大係数自体は通常、実数値の数である。拡大係数は、固定精度表記、浮動小数点などで表現できる。拡大係数を含む実数は、実数を近似する有理数を示す分子と分母のペアとして表現することもできる。
【0024】
多くの場合、拡大係数は1より大きいが、これは必須ではない。通常、第1の計算ネットワークには、所定の値と暗号化された値との間の整数値の乗算および整数値または実数値の加算のみを意味する、各演算に対する拡大係数がある。
【0025】
拡大係数は、拡大係数をシンボル的に割り当て、第1の計算ネットワークを通して記号入力を伝播させることによって見つけることができる。高度な実施形態では、いわゆるジョイン演算が扱われ、これは、異なるソースからの値が組み合わされる特定の演算であるが、加算、減算、連結演算などのプログラマブルブートストラッピングを使用しない。ジョイン演算は、整数の重みがついた加算、例えば、整数の線形結合、でもあり得る。例えば、ジョイン演算は、2つ以上の演算から暗号化された値のベクトルを2つ以上受け取る。このようなジョイン演算は、暗号化された値に同じ拡大係数を乗算する場合に限り、暗号化された値に対して直接行える。したがって、ジョイン演算は、拡大係数に制約を課し、これをホモジニアスで正しい結果を与える第2のネットワークを得るために解決する必要がある。
【0026】
実数値行列演算では、乗算と加算を組み合わせる。行列演算は、線形部分と加算部分とを有するとみなすことができる。例えば、行列演算はWX+BまたはWx+bであり、W、X、Bは行列、x、bはベクトルである。多くの演算はこのような行列演算とみなすことができ、例えば、実数値の行列演算には:実数値のカーネルによる畳み込み、実数値の重みの行列による行列の乗算、実数値のスカラーによるバッチ正規化のうちの1つ以上が含まれ得る。例えば、畳み込みは、カーネル重みの所定のベクトルと畳み込みの入力値のベクトルとの間で繰り返される乗算とみなすことができ、後者は第2の計算ネットワークで暗号化される。都合がよければ、データはさまざまなタイプのテーブル、例えば2次元の、またはバイディメンションの(bi-dimensional)、またはより高次元のカーネルで表すことができる。入力値も同様に、高次元のテンソルで構造化できる。しかし、このようなさまざまなデータの構造化は行列演算に組み込まれる。
【0027】
変換の特に便利な用途は、プライベートデータに対する計算の実行を可能にすることである。例えば、画像やその他の医療データの医療的評価などの計算である。
【0028】
医療データは医療画像を含み得る。医療画像は、例えば、さまざまな獲得モダリティ、例えば、限定しないが、標準的なX線画像、コンピュータ断層撮影(CT)、磁気共鳴画像法(MRI)、超音波(US)、陽電子放出断層撮影(PET)、単一光子放射断層撮影(SPECT)、および核医学(NM)などによって獲得された、例えば2次元(2D)、3次元(3D)、または4次元(4D)画像などの多次元画像データを含み得る。
【0029】
この方法の実施形態は、コンピュータ実装される方法としてコンピュータ上で実装されてもよく、専用ハードウェアで実装されてもよく、あるいは両方の組み合わせで実装されてもよい。方法の一実施形態の実行可能コードは、コンピュータプログラム製品に記憶され得る。コンピュータプログラム製品の例には、メモリデバイス、光ストレージデバイス、集積回路、サーバ、オンラインソフトウェアなどが含まれる。好ましくは、コンピュータプログラム製品は、コンピュータ上で実行されるときに方法の一実施形態を行うためのコンピュータ可読媒体に記憶された非一時的なプログラムコードを含む。
【0030】
一実施形態では、コンピュータプログラムは、コンピュータプログラムがコンピュータ上で実行されるときに、方法の一実施形態のステップのすべてまたは一部を行うように適合されたコンピュータプログラムコードを含む。好ましくは、コンピュータプログラムはコンピュータ可読媒体上に具現化される。
【0031】
さらなる態様は、一実施形態による変換のために構成された電子システムまたはデバイス、例えばコンピュータである。
【0032】
さらなる詳細、態様、および実施形態は、単なる例として、図面を参照して説明される。図内の要素は、簡略化および明確化のために図示されており、必ずしも一定の縮尺で描かれているわけではない。図において、すでに説明した要素に対応する要素は同じ参照番号を有し得る。
【図面の簡単な説明】
【0033】
図1a】完全準同型暗号化(FHE)を使用して計算を行うためのシステムの実施形態の一例を概略的に示す図である。
図1b】FHEを使用して計算を行うためのシステムの実施形態の一例を概略的に示す図である。
図1c】FHEを使用して計算を行うためのシステムの実施形態の一例を概略的に示す図である。
図1d】FHEの計算を変換するためのシステムの実施形態の一例を概略的に示す図である。
図2】変換システムの実施形態の一例を概略的に示す図である。
図3】第1の計算ネットワークの実施形態の一例を概略的に示す図である。
図4a】第1の計算ネットワークの実施形態の一例を概略的に示す図である。
図4b】第1の計算ネットワークの実施形態の一例を概略的に示す図である。
図5a】第1の計算ネットワークの実施形態の一例を概略的に示す図である。
図5b】第1の計算ネットワークの実施形態の一例を概略的に示す図である。
図6】変換方法の実施形態の一例を概略的に示す図である。
図7a】一実施形態による、コンピュータプログラムを含む書き込み可能部分を有するコンピュータ可読媒体の例を概略的に示す図である。
図7b】一実施形態によるプロセッサシステムの表現を概略的に示す図である。
【発明を実施するための形態】
【0034】
参照符号リスト
以下の参照および略語のリストは、図面の解釈を容易にするために提供されるものであり、特許請求の範囲を限定するものとして解釈されるべきではない。このリストは図1a-5bおよび7a-7bを参照している。
1-99 層
110 FHE計算システム
111-113 FHE計算システム
114 変換システム
130、134 プロセッサシステム
140、144 ストレージ
150、154 通信インターフェース
160 データプロバイダシステム
200 変換システム
210 第1の計算ネットワーク
220 第2の計算ネットワーク
211-214 演算
221-224 演算
230 拡大係数ユニット
231 最適化ユニット
240 変換ユニット
250 精度ユニット
251 サンプルストレージ
300 第1の計算ネットワーク
410 第1の計算ネットワーク
411 入力
412-414 演算
415 出力
420 第1の計算ネットワーク
421 フォーク演算
422 ジョイン演算
510 第1の計算ネットワーク
511 フォーク演算
512 ジョイン演算
520 第1の計算ネットワーク
525 補正演算
1000 コンピュータ可読媒体
1010 書き込み可能な部分
1020 コンピュータプログラム
1110 集積回路
1120 処理ユニット
1122 メモリ
1124 専用集積回路
1126 通信要素
1130 相互接続
1140 プロセッサシステム
【0035】
ここで開示される主題は多くの異なる形態で具現化可能であるが、これらは図面に示されて、本明細書では1つ以上の特定の実施形態について詳細に説明され、本開示は、本明細書で開示される主題の原理の例示としてみなされるべきであり、図示および説明される特定の実施形態に限定することを意図するものではないことを理解されたい。
【0036】
以下では、理解を容易にするために、実施形態の要素を、動作において説明する。しかし、それぞれの要素が、それらによって行われるものとして説明されている機能を行うように構成されることは明らかであろう。
【0037】
さらに、ここで開示される主題は、実施形態のみに限定されるものではなく、本明細書に説明される、または相互に異なる従属請求項に記載される特徴の他のあらゆる組み合わせも含む。
【0038】
図1aは、FHE計算システム110、例えば完全準同型暗号化(FHE)を使用して計算を行うためのシステムの実施形態の一例を概略的に示す。例えば、図1aのシステム110は、データが例えばデータプロバイダから暗号化された形式で受け取られたとしても、前記データの計算を行うために使用され得る。
【0039】
システム110は、プロセッサシステム130、ストレージ140、および通信インターフェース150を備えることができる。ストレージ140は、ローカルストレージ、例えば、ローカルハードドライブまたは電子メモリを備え得る。ストレージ140は、非ローカルストレージ、例えばクラウドストレージを含んでもよい。後者の場合、ストレージ140は、非ローカルストレージへのストレージインターフェースを備えることができる。例えば、ストレージ140は、例えば1つ以上のデータプロバイダから受け取った、または計算の中間結果または最終結果、例えば出力として発生された、暗号化されたデータアイテムを記憶することができる。通常、システム110の計算が行われるほとんどまたはすべてのデータアイテムは、システム110に知られていない一つのキー(または複数のキー)で暗号化される、つまり、システム110は、暗号化されたデータアイテム、例えばストレージ140に記憶されるようなデータアイテムに対応するプレーンデータアイテムを取得するように構成されていない可能性がある。プレーン形式の復号キーはシステム110にとって秘密であるが、暗号化/復号キーは暗号化された形式で利用可能であり得る。例えば、プロセッサシステムは、加算および乗算などの暗号化された値に対する算術演算を含むことができるが、暗号化された多項式に対する算術演算も含み得る一連のFHE演算を行うように構成されることができる。
【0040】
FHE演算を使用した計算を行うことは、FHE演算のシリーズをひと続きにすることによって行われ得る。その一部は入力値に対して演算され、他の演算は中間値に対して演算され得る。通常、ほとんどまたはすべての演算は暗号化された値に対して行われるため、FHEシステムは処理中の機密値を知らない。
【0041】
FHE計算のソースの1つは、通常の計算(例えば、一連の非FHE演算)から開始し、従来の計算をFHE計算に変換することである。変換可能な、特に適切な計算ソースは、計算ネットワーク(computational network)とも呼ばれる、いわゆる計算ネットワーク(computation network)である。計算ネットワークでは、ノードは演算を表し、ネットワーク内のエッジは、どの演算が他の演算からの値を入力としてとるかを示す。
【0042】
一実施形態では、計算ネットワークは有向サイクルフリーグラフとして表すことができ、ノードは演算を表し、有向エッジはどの演算がどの前の演算から入力を取得するかを示す。例えば、計算ネットワークは、テキストファイルの形式、例えば一連の演算子として表すことができる。計算ネットワークは、演算子のタイプを示す情報とともに接続テーブルとして表すこともできる。
【0043】
計算ネットワーク内の入力ノードは外部出力を表し得、一方、出力ノードは出力値を表し得る。この計算ネットワークの概念は、一実施形態による変換を依然うけいれながら拡大することができる。例えば、一実施形態では、計算ネットワークは条件付きジャンプを含まないが、これはFHE演算として表すことができるため、条件付き割り当て(conditional assignment)が許可されてもよい。より正確には、条件付き割り当てはy=c?a:bとして表すことができ、これは、cが真の場合はy=a、またはcが偽の場合はy=bを設定し、FHEでは、この演算を同等の演算y=c*(a-b)+bに置き換えることで行える。ここで、cは暗号化されたビット0または1に制限される。計算ネットワークはループを含まない場合もあり例えばサイクルフリーの場合もあるが、これは必須ではなく、何故なら固定回数の反復を持つループも、例えばループを展開することによってFHEネットワークに収容できるからである。動的に決定される反復数を持つループであっても、ループ内のサイクル数に上限がある場合は変換され得る;後者の場合、動的ループは最初に固定回数の反復を持つループに変換され得る。
【0044】
図1dは、FHEのための計算を変換するためのシステム114の実施形態の一例を概略的に示す。システム114は、関数を計算するように構成された演算の第1の計算ネットワークを、同じ関数を計算するように構成されたFHE演算の第2の計算ネットワークに変換するように構成され得る。システム110と同様に、システム114は、プロセッサシステム134、ストレージ144、および通信インターフェース154を備える。実際、システム110と114は同じシステムであってもよいが、これは必須ではない。例えば、システム114は、第1の計算ネットワークの表現を受け取り、それをFHE実行のために第2の計算ネットワークに変換することができる。例えば、システム114は、第三者、例えばデータプロバイダシステム160などから第1の計算ネットワークを受け取ることができる。あるいは、第1の計算ネットワークは別の場所を起源とする可能性があり、例えば、従来のコンパイラは、所望の計算の高レベルの記述を受け取り、第1の計算ネットワークを生成し、例えば、全体の計算を一緒に行う計算のいくつかの側面ごとに複数の第1の計算ネットワークを乗算することができる。変換されると、第2の計算ネットワークは、計算のためにシステム110に転送され得る。システム110および114が同じである場合、第2の計算ネットワークは同じシステム上で行われ得る。例えば、システム114は、計算システム110を提供するのと同じ当事者によって提供されてもよい。あるいは、システム110のユーザは、例えば、適切なソフトウェアをダウンロードし、それを使用して計算ネットワークを変換し、実行のためにシステム110にアップロードできることによって、システム114をそれ自体の施設内に設置することもできる。
【0045】
システム110およびシステム114は、コンピュータネットワーク上で相互に、他のシステム、外部ストレージ、入力デバイス、出力デバイス、および/または1つ以上のセンサと内部的に通信することができる。コンピュータネットワークは、インターネット、イントラネット、LAN、WLANなどであり得る。コンピュータネットワークはインターネットであってもよい。このシステムは、必要に応じてシステム内またはシステム外で通信するように構成された接続インターフェースを備える。例えば、接続インターフェースは、コネクタ、例えばイーサネットコネクタ、光コネクタなどの例えば有線コネクタ、または例えばWi-Fi、4Gまたは5Gアンテナなどのアンテナなどの無線コネクタを備え得る。通信、例えば内部通信は、他の通信プロトコルまたは媒体、例えば内部データバスを使用してもよい。
【0046】
システム110およびシステム114では、通信インターフェース150および154は、デジタルデータを送るおよび/または受け取るために使用され得る。例えば、システム110は、外部コンピュータ、例えばデータ提供コンピュータから暗号化されたデータアイテムを受け取るように構成され得る。例えば、システム110は、計算結果を、通常、暗号化されたフォーマットで外部コンピュータに送信するように構成することができる。例えば、通信インターフェース150は、システム110内の内部通信、例えば複数の計算エンティティ、例えば計算デバイスの計算を分散するために使用され得る。例えば、システム114は、第1の計算ネットワークを受け取るように、および/または変換された第2の計算ネットワークを送信するように構成され得る。
【0047】
システム110および/または114の実行は、プロセッサシステム、例えば1つ以上のプロセッサ回路、例えばマイクロプロセッサで実装することができ、その例が本明細書に示されている。システム110および/または114は、異なる場所に分散され得る複数のプロセッサを備えることができる。例えば、システム110および/または114はクラウド計算を使用することができる。
【0048】
本明細書の図のいくつかは、プロセッサシステムの機能ユニットとなり得る機能ユニットを示す。例えば、図は、プロセッサシステムの可能な機能機構の青写真として使用できる。ほとんどの図では、プロセッサ回路はユニットから分離して示されていない。例えば、図2に示す機能ユニット(下記を参照)は、システム110および/または114などのシステム、例えばシステムの電子メモリ内、に記憶され、システムのマイクロプロセッサによって実行可能なコンピュータ命令に全体または部分的に実装され得る。ハイブリッド実施形態では、機能ユニットは、部分的には、例えばコプロセッサ、例えば算術および/または暗号コプロセッサとしてハードウェアに実装され、部分的にはシステム110および/または114上に記憶され行われるソフトウェアに実装される。
【0049】
図1bは、FHEを使用して計算を行うためのシステムの実施形態の一例を概略的に示す。図1bは、データプロバイダシステム160のコンテキストにおける図1aのFHEシステムを示す。FHEシステム110は、完全準同型暗号化(FHE)暗号を使用して計算を行うように構成される。
【0050】
例えば、システム110は、データプロバイダ160から暗号化されたデータアイテムを受け取るように構成され得る。少なくとも一部のデータアイテムは暗号化された形式で受け取られ得る。一部のデータアイテムはプレーンフォーマットで受け取られ得る。計算は受け取ったデータアイテムに対して実行され、場合によっては記憶されたデータアイテムに対しても行われる。興味深いことに、計算は、データを復号することなく、例えば暗号化されたデータアイテムをプレーンフォーマットのデータに変換することなく、暗号化されたデータに対して行われることができる。
【0051】
システム110は、FHEスキームのために、例えば、ゲートと呼ばれることもある、例えばいくつかのFHE演算のために構成され得る。例えば、FHEシステムは、いわゆるNANDゲート用に構成されてもよい。例えば、FHEシステムは、例えば有限体または有限環などにおいて加算および乗算演算を有することができる。FHEスキームの演算は原理的には広範囲の計算を行うのに十分であるが、例えば、FHEスキームがブートストラッピング演算のないレベル化されたスキームである場合、またはブートストラッピング演算が採用されていない場合などでは、連続演算の数は制限され得るという例外がある。
【0052】
通常、FHEスキームおよびFHEシステムに実装された暗号化されたデータには、ある程度のノイズが含まれる。例えば、データアイテムの暗号化は、データアイテムをキー依存格子内の点にマッピングすることを含み、それにいくらかのノイズが追加される。
【0053】
データアイテムが暗号化されたばかりのとき、ノイズは低く、暗号化はフレッシュである。例えば、ノイズの量は非常に少ないため、データアイテムが復号される場合、ノイズは復号プロセスのある時点で、例えば丸めによって除去できる。一方、ノイズは、システムへの攻撃を十分に困難にするのに十分な大きさである必要がある。例えば、ノイズが存在しないと仮定すると、多くのFHEスキームは線形代数や他の効率的なアルゴリズム、例えば格子ベースのアルゴリズムで攻撃され得る。データアイテムが暗号化されると、FHE演算をまだ行える一方で、攻撃が困難になるように選定されたノイズが追加される。ほとんどのFHE演算は、暗号化されたFHEデータアイテムに固有のノイズを増加させる。このような演算が多数行われると、ノイズは正しい復号が不可能なレベルに達する。その時点で、計画は破綻する。一般に、この現象に対処するために、当技術では2つのアプローチが開発されてきた。1つ目は、レベルFHEアプローチである。レベルFHEスキームは、限られた数の演算を次々に行える。レベルFHEスキームは、このような多数の演算の終了時の最悪の場合のノイズが復号に必要な限界を下回るように設計されている。別のアプローチは、いわゆるブートストラッピング演算である。ブートストラッピング演算は、ノイズの少ない同じデータのフレッシュな暗号化を返すことにより、暗号化されたデータアイテムのノイズを低減する。ブートストラッピング演算は、FHEスキームが暗号化ドメインにおいて復号アルゴリズムを準同型的に評価するのに十分な能力を備えている場合に特に可能であり、ブートストラッピング可能なFHEスキームと呼ばれることもある。例えば、ブートストラッピング演算は、暗号化されたデータアイテムを復号せずにノイズを低減できる暗号化キーに関連するヘルパーデータを受け取る。通常、ヘルパーデータは、データアイテムの復号に使用されるキーの暗号化されたバージョンである。対称キーベースのFHEの場合、復号キーは暗号化キーと同じである場合もあれば、非対称キーFHEスキームの場合など、暗号化キーとは異なる場合もあることに留意されたい。FHEスキームは、暗号化キーと復号キーに加えて、準同型評価のためのキーなどの他のキーを使用し得る。後者は通常、データプロバイダに記憶され得るプライベートキーに対応する公開キーである。
【0054】
ブートストラッピング演算は暗号化されたデータアイテムの復号を行うが、直観に反して復号は暗号化されたドメインで行われるため、準同型復号では実際にはプレーンデータアイテムについて何も明らかにされない。次に、ブートストラッピング演算により、通常は準同型の丸めによってノイズ低減が行われる。その結果は、ノイズレベルがより低く固定された、暗号化されたデータアイテムである。通常、ブートストラッピングの結果として暗号文に存在するノイズは、ブートストラッピング演算の結果として生じる。
【0055】
ブートストラッピング後、ノイズレベルが非常に高くなり新しいブートストラッピング演算が必要になるまで、新しい一連のFHE演算を行える。
【0056】
ブートストラッピングがいつ必要になるかを決定することは、例えば最悪のシナリオを想定して、ノイズレベルがどのくらいの大きさになるかを追跡することで行うことができる。最悪の場合のシナリオの代わりに平均的な場合を想定することもできるが、これにより、計算結果が復号できないリスクが増加し得る。例えば、ニューラルネットワーク評価など、時折のエラーに対して本質的にロバストな計算は、ノイズ伝播に対する平均的な場合の分析を使用して行える。
【0057】
ノイズ分析、例えば最悪の場合または平均的な場合の分析は、事前に行うこともできるが、動的に行うこともできる。ノイズの増加は、特定の計算に依存し得る。例えば、FHEスカラー乗算では、被乗数に応じた量だけノイズが増加する。1つのアプローチは、ブートストラッピング演算を頻繁に、例えば、毎回の演算の後、または設定された数の演算ごと、例えば、2回ごとの演算の後に行うことである。特に便利なのは、関数の計算に加えてノイズを低減できるプログラマブルブートストラッピング演算である。例えば、関数はルックアップテーブルとしてエンコードでき、このテーブルはプログラマブルブートストラッピングのテストベクトルと呼ばれる。
【0058】
FHEスキームは多くの設定において適用できる。例えば、FHEシステム110は、クラウドプロバイダによって運営されてもよい。クラウドプロバイダは、そのクライアントに計算サービスとストレージサービスを提供し得る。FHE暗号化を採用することにより、データプロバイダ160、例えばクラウドプロバイダのクライアントは、暗号化された形式でデータを送ることができる。クラウドプロバイダは、必要な計算および/または必要なストレージを依然行えるが、プレーンデータに対応するものや計算の結果を知ることはできない。例えば、データプロバイダ160は、使用される特定のFHEシステムに対応するタイプの暗号化キーを使用して、データアイテムを暗号化することができる。計算結果がFHEシステム110からデータプロバイダ160によって受け取られると、対応する復号キーを使用して、暗号化されたデータアイテムを復号することができる。暗号化キーと復号キーは同じである場合があり、通常は同じである。
【0059】
例えば、システム110は、プレーンデータ入力アイテムにアクセスできることなく、機械学習モデル、例えば画像分類器、例えば医療モデルを実行することができる。システム110のユーザは、暗号化された形式で入力値を供給し、システム110から暗号化された出力値を受け取ることができる。機械学習モデルはシステム114から取得することができる。FHEシステム110は、例えば医療データとともに使用するためのモデルを提供するために使用され得る。これは通常、プレーンモデルパラメータを使用して行われ得るが、暗号化されたデータ、例えば、暗号化された入力データ、中間データ、および出力データを使用する。このシステムの効果は、コンピュータがプレーンデータアイテムを知ることなく、計算、例えば画像分類、例えば医療画像分類が行われることである。例えば、マンモグラムは、画像がシステム110でプレーンであることが決してなく、またシステム110が癌の評価の結果が何であるかを知ることなく、癌について評価することができる。
【0060】
他の用途には、データベースサービスが含まれ、例えば、暗号化されたデータベース内の暗号化されたデータを調べる;例えば、計算は入力アイテムとデータベースアイテムの間の比較であり得る。例えば、複数の計算を組み合わせて、インデックスと一致するデータベースインデックスを生成できる。例えば、データベースはゲノムデータベースであり、入力は遺伝子配列であり得る。例えば、システム110は、デバイスの保護された制御のために使用され得る。例えば、デバイスは、発電所のような大型装置であっても、センサ値をシステム110に送り、その返信として暗号化された制御信号を受け取ることができる;制御信号はセンサ信号から計算される。システムの攻撃者は、システム110に送受け取られるデータのコンテンツを決定したり、システム110の中間データにアクセスしたりすることさえできる場合があるが、データは暗号化されているため、攻撃者には役に立たない。復号キーはシステム110に知られていないため、システム110が完全に壊れてもデータは明らかにならない。制御信号の計算には、線形代数、平均、行列乗算、多項式評価などの数学的演算が含まれ得、これらはすべてFHE演算で実行できる。
【0061】
例えば、暗号化されたデータアイテムのストア、例えばストレージ内のコレクションをFHEシステム内に維持することができる;これらの一部は受け取られ得、一部はFHE計算の結果、中間結果など、であり得る。例えば、FHEシステムは、ストア、例えば入力値および/または中間値および/または出力値のコレクション、内の、1つ、2つ、またはそれより多くの暗号化されたデータアイテムにFHE演算を適用するように構成され得る。その結果は、ストアに記憶できる新しい暗号化されたデータアイテムである。暗号化されたデータストアは、FHEシステムのストレージに記憶され得る。これは、ローカルストレージまたは分散ストレージの場合がある。後者の場合、1つ以上の暗号化されたデータアイテムが暗号化されたデータストア内で複数回表されることが発生し得る。暗号化されたデータアイテムは、例えば値が別の場所で必要な場合などに、ある計算デバイスから別の計算デバイスに送られ得る。暗号化されたデータストアは、レジスタファイル、配列、さまざまなデータ構造などとして、さまざまな方法で実装できる。
【0062】
例えば、背景で説明したトーラスFHE(TFHE)など、エラーあり学習(Learning With Errors)(LWE)問題に基づくFHEスキームでは、暗号化キーはn桁の文字列sであり得、暗号文はタプル(a,…,a,b)であり得、ここで
【数3】
である。後者では、+と・はそれぞれトーラス要素間の加算と整数とトーラス要素の積を表し、aはn個のトーラス要素であり、μはトーラス要素としてのプレーンデータアイテムであり、eは、例えばガウス分布などの確率分布から引き出されたノイズである。従来、秘密キーsの秘密桁s,…,sはビットである;しかし、これは必須ではない。秘密桁sは、2つを超える値、例えば3つの値(3進数の桁)、4つの値、またはそれより多くの値を取ることができる。
【0063】
このスキームは、多項式に基づくものなど、他の数学的構造にも自然に拡張される。したがって、数値s、a、b、u、eは、異なる数学的構造から取得され得る。すべての暗号化されたデータアイテムを同じキーで暗号化する必要はなく、実際には、異なるキーを使用した再暗号化は、可能なFHE演算である。あるキーから別のキーに変換するために、いわゆるキー切り替え手順が使用され、これはいわゆるキー切り替えキーを使用し得る。キー切り替えキーは、第1のキーで暗号化された要素を、どちらのキーも明らかにせずに第2のキーで再暗号化できる方法に関する情報を提供する。
【0064】
暗号化されたデータアイテムは、あらゆる種類のデータを表すことができる。例えば、暗号化されたデータアイテムは、平均する必要がある数値や、線形回帰などに使用される数値を表し得る。例えば、暗号化されたデータアイテムは画像を表し得る。例えば、画像の各ピクセルは1つ以上の暗号化されたデータアイテムに対応し得る。例えば、グレースケールピクセルはグレーレベルで表すことができ、グレーレベルは単一の暗号化されたデータアイテムで表すことができる。例えば、256個のグレーレベルを単一の暗号化されたデータアイテムにエンコードすることができる。例えば、カラーピクセルは、複数のカラーレベル、例えば、RGBレベルとして表すことができ、これらのカラーレベルは、次いで、暗号化されたデータアイテムのタプルによって表すことができる。例えば、3つの256レベルの色を3つの暗号化されたデータアイテムにエンコードできる。あるタイプのデータを表すために使用される暗号化されたデータアイテムの数は、FHEスキームの能力によって異なる。例えば、より制限的なFHEスキームでは、暗号化されたデータアイテムごとに1ビットしかエンコードできない場合がある。その場合、1つのカラーピクセルに24個の暗号化されたデータアイテムが必要になり得る。
【0065】
復号キーにアクセスしないと、ノイズがどれくらい大きいかを正確に言うことはできない場合があるが、例えば、フレッシュな暗号化の初期ノイズレベルがわかっており、さまざまな演算のノイズ増加がわかっているため、通常はノイズを制限することができる。ノイズの増加は、演算のタイプ、例えば加算と乗算など、および存在する場合はその他のパラメータに依存し得る。例えば、FHE演算は、知られている、例えばプレーン値との乗算、例えば、2による乗算、知られている多項式との乗算などであり得る。例えば、より大きな値を乗算すると、より小さな値を乗算するよりもノイズが増加し得る。行われた演算が与えられたとして、ノイズが正確にどの程度増加するかは、数学的に算出する、または経験的に推定することができる。一部の演算ではかなりの量のノイズが追加され得るが、その他の演算ではノイズが追加されない場合もあり、例えば、プレーン定数による加算などである。
【0066】
FHE演算のセットを計算のために定義できる。例えば、目標のFHE計算から、一緒に計算を実装する演算のネットワークまたは回路を構築できる。例えば、演算はブール演算であってもよい。例えば、演算はすべてNAND演算であってもよい。FHE演算を組み合わせる方法、例えば、暗号化されたデータストア内のどのオペランドにどの演算を適用するか、が、行われる計算を決定する。例えば、計算は、どのFHE暗号化されたデータアイテムに対して行われるかのインディケーションとともに、行われるFHE演算のリストとして表すことができる。
【0067】
演算が行われるにつれて、新しく計算された(フレッシュではない)暗号化されたデータアイテムに関連するノイズが増大し得る。ノイズが復号に必要な制限内に収まっている限り、これは問題にならない、さらに多くの演算を行う必要がある場合は、ブートストラッピング演算を行える。
【0068】
FHEスキームで暗号化されたデータアイテムのサイズは非常に大きくなり得る。さらに、ブートストラッピング演算なしでFHEスキームが行う演算が多いほど、通常、暗号化されたデータアイテムのサイズが大きくなる。同様に、FHEパラメータが大きいほど、つまり暗号化されたデータアイテムが大きいほど、攻撃に対する高い耐性が得られる。例えば、データアイテムは、より大きなFHEパラメータを特徴とするFHEシステムにマッピングされ得るため、演算を成功裏に行うことが可能であるまま、依然、より多くのノイズを追加できる。秘密キーの桁が取り得る値の範囲を増加させると、エントロピーが増加し、したがってFHEのセキュリティに貢献する。
【0069】
図1cは、FHEを使用して計算を行うためのシステムの実施形態の一例を概略的に示す。図1cに示されているのは、データプロバイダシステム160、および3つのFHEデバイス:デバイス111、112、および113である。デバイス111、112、および113のそれぞれは、暗号化されたデータアイテムに対してFHE演算を行うことができる。3つのデバイスが一緒になってFHEシステムを形成する。2つまたは3つ以上のFHEデバイスが協働してFHEシステムを形成し得る。
【0070】
図1cの場合、計算は複数のFHEデバイス、示されている例では3つのFHEデバイス、に分散される。例えば、複数のFHEデバイスのうちの1つは、他の複数のFHEデバイスのうちの1つ以上に、例えば、受け取った暗号化されたデータアイテムまたは中間の暗号化されたデータアイテム、例えば部分的な計算結果などの暗号化されたデータアイテムを送信することができる。同様に、複数のFHEデバイスのそれぞれは、他のデバイスから暗号化されたデータアイテムを受け取るように構成され得る。
【0071】
従来の計算からFHE計算に変換することが望まれる計算ネットワークの第1の例は、ニューラルネットワークである。一実施形態では、変換のためのシステムは、第1の計算ネットワークの一例である第1のニューラルネットワークを入力としてとり、第2の計算ネットワークの一例である第2のニューラルネットワークを出力として生成する。第2の計算ネットワークは、FHE演算子、それらのパラメータなどの表現を含むことができる。第2の計算ネットワークは、第1の計算ネットワークによって表される関数、または通常は関数の近似を計算する。特にニューラルネットワークの場合、近似値の計算は許容される。
【0072】
FHE演算の第2の計算ネットワークとしてニューラルネットワークを評価することは、ユーザのプライバシーを改善するのに役立つ。計算ネットワークの他の例は、(i)個人情報や検査結果を明らかにすることなく、個人情報、例えば、DNAデータ、に対して医療検査を実行すること、(ii)スパム検出:メールを復号するためのキーを持たずに、例えばメールを見ることなく、メールがスパムであるかどうかを検出できることを含む。
【0073】
前者のシステムの一例は、医療データが取得される、例えば、より多くのセンサから受け取られる第1のデバイスを備え得る。センサには、例えば温度センサが含まれてもよい。センサには画像センサが含まれてもよい。データは入力エンコーディングに従ってエンコードされ、秘密キーを使用して暗号化される。次に、暗号化されたデータは医療機器に送られ得、そこで第2の計算ネットワークが暗号化されたデータに適用される。暗号化された出力は、入力の分類、例えば画像分類であってもよい。暗号化された結果は、復号およびデコーディングのために医療デバイスに送り返すことができる。
【0074】
後者のシステムの一例は、電子メールが受け取られる第1のメールデバイスを備え得、電子メールは、次いで、例えば、第1のメールデバイスで知られている秘密キーを使用して、FHEスキームに従って暗号化され得る。第1のメールデバイスは、まず、例えば入力エンコーディングを使用してメールをトーラスポイントのシリーズにエンコードし、次に、例えばLWE表現を使用してシリーズを暗号化値のシリーズに暗号化することができる。次に、暗号化されたシリーズはスパム検出デバイスに送られ、そこで第2の計算ネットワークがインストールされる。暗号化された値には、送信元アドレスおよび/または送信先アドレスなどのメタデータなどの他の情報も含まれ得る。第2の計算ネットワークは暗号化された値のシリーズに適用され、暗号化された結果、例えばバイナリスパムまたはスパムなしの結果、または例えば、メールがスパムである確率を表す実数値を生成する。第2の計算ネットワークは、例えばスパム検出のためにトレーニングされた第1の計算ネットワークからの変換として取得される。
【0075】
次に、暗号化された出力値はスパム検出デバイスから第1のメールデバイスに送られ、そこで出力は例えば秘密キーを使用して復号され、例えば出力デコーディングを使用してデコーディングされる。その結果に基づいて、第1のメールデバイスはメールを破棄するか否かを決めることができる。例えば、第1のメールデバイスは、復号された出力に基づいてメールを表示するか否かを決めたり、メールを第2のメールデバイスに転送するかどうかを決めたりすることができる。
【0076】
興味深いユースケースは、ユーザのプライバシーを維持しながら、信頼されていないプラットフォーム上で実行される機械学習(ML)アルゴリズムである;この場合、FHEを使用することで、ユーザのデータまたはその結果をプライベートに保つことができる。
【0077】
完全準同型暗号化(FHE)は、公開材料のみを使用して暗号化されたデータの計算を行える暗号化スキームである。FHEスキームでは、ユーザのプライベートキーなどを知る必要がなく、暗号文を復号する必要もない。FHEスキームにはいくつかの種類が存在するが、現時点ではTFHE(Torus-FHE)スキームが効率的な選択肢である。TFHEスキームは効率的なブートストラッピング(BS)をサポートしており、これによりスキームにおけるノイズを低減できるため、望むだけ深くニューラルネットワーク(NN)の準同型評価をサポートできる。さらに、ブートストラッピング演算は、データに対して行う必要がある任意の関数と組み合わせることができるため、関数評価とノイズ低減を組み合わせることができる。この機能は、プログラマブルブートストラッピング(PBS)と呼ばれる。例えば、プログラマブルブートストラッピングにより、ノイズを低減し、例えば、同時に活性化関数を行える。
【0078】
FHEスキームの好ましいクラスは、TFHEスキームと呼ばれるトーラスベースのスキームである。トーラスベースのスキームでは、値は1を法として表すことができる。例えば、TFHEスキームは、上述のエラーを伴う学習(LWE)問題に基づくことができる。TFHEスキームおよびプログラマブルブートストラッピングの好ましい実装は、論文「Programmable Bootstrapping Enables Efficient Homomorphic Inference of Deep Neural Networks」に提供されており、参照により本明細書に含まれる。
【0079】
TFHEは、ブートストラッピングを行わずに、暗号化されたデータに対して直接的に一部の演算をサポートする。これらの演算には:通常はモジュラスとして1を使用するモジュラー加算、および(クリアな)整数とトーラス要素として表される暗号化された値との間の乗算が含まれる。トーラススキームの暗号化された値は、1を法とする実数値、例えば0(含んでいる)と1(含んでいない)の間でマッピングされる。実数について言及しているが、これらの値は通常、例えば32ビットまたは64ビットの数値などの固定精度で表される。
【0080】
TFHEの制限の1つは、実数とトーラス要素の積が定義されていないため、2つのトーラス値の乗算が定義されていないことである。有利なことに、整数による乗算は、プログラマブルブートストラッピングなしで行うことができる。一実施形態では、第2の計算ネットワークはTFHEベースであり、実行されると、ニューラルネットワーク暗号化されたデータを計算する。第2の計算ネットワーク内のパラメータはプレーン値であることができるが、暗号化された値に対して演算する。暗号化された値は、トーラス上の値、例えば1を法とする実数値である。例えば、トーラス上の値(μ)は、値をマスク(b)でマスクすることによって、LWE暗号文として暗号化でき、マスク(b)は、キー桁(s)のシリーズとマスキング値(a)のシリーズのドット積(b=s・a)として、ノイズ(e)を伴って取得される:
【数4】
。便利なことに、トーラス点は離散的な環にマッピングされる。
【0081】
第1の計算ネットワークで行われる演算は、第2の計算ネットワークのための演算に変換される必要がある。考慮すべき目標がいくつかある。プログラマブルブートストラッピングは、暗号化されたデータに対して直接行える演算よりもはるかにコストがかかるため、回避することが望まれている。第2に、結果として得られる第2の計算ネットワークは十分に正確である必要がある。ほとんどの実用的な用途では、ニューラルネットワークの評価であれ、入力センサ値からの制御信号の計算であれ、正確な複製は(可能ではあるが)多くの場合必要ない。第1の計算ネットワークと第2の計算ネットワークによって表される関数間にいくらかの違いを許容すると、より効率的なネットワークが可能になり、好ましくは精度がある程度の限界内に留まる。その限界が何であるかは、用途に依存する。
【0082】
ニューラルネットワークなどの第1の計算ネットワークをFHE計算ネットワークに変換する際の困難は、第1の計算ネットワークに暗号化された値と非整数値の間の乗算が含まれ得ることである。このような演算は行えるが、プログラマブルブートストラッピングを使用する場合のみである。例えば、ニューラルネットワークでは、次のような演算に遭遇し得る:
【0083】
・畳み込み、カーネルと呼ばれる小さな実数値行列が入力の複数の選択された部分と乗算され、選択された部分が入力を通してシフトされる。
【0084】
・行列の乗算、2つの行列が一緒に乗算される;NNの場合、1つは暗号文を含み得、もう1つは実数の定数行列であり得る。行列乗算は、例えば、Gemm層(一般的な行列乗算(General matrix multiplication)の略)と呼ばれることもある、いわゆる全結合層または密層(dense layer)で発生する。
【0085】
行列乗算、例えば2つの2次元行列間、または2つの2次元行列とベクトルの間の行列乗算は、行列乗算の一例である。行列演算には、行列の乗算と行列の加算が含まれ得る。行列の乗算は2次元より大きい場合があり、より高次元の行列は一般にテンソルと呼ばれる。
【0086】
・バッチ正規化、線形関数f(x)=ax+bとして見ることができ、ここで、aとbは実数である。バッチ正規化は、行列がaI、ここでIは単位行列、である行列演算とみなすことができる。あるいは、バッチ正規化に拡大係数を割り当てて、バッチ正規化をf(x)=Round(αa)x+αbに置き換えることもできる。
【0087】
特に、ニューラルネットワークの重要なクラスの1つである畳み込みニューラルネットワークでは、多くの畳み込みと密層が使用される。
【0088】
第1の計算ネットワークを変換するとき、1つの戦略は、非線形関数を、暗号化された値に対する対応するプログラマブルブートストラッピングで置き換え、線形演算を暗号化された値に対する対応する線形演算で置き換えることであり得る。単一のブートストラッピング演算を参照するとき、実際のコードは複数のブートストラッピング演算を含み得るか、同じブートストラッピング演算を複数回使用し得る。
【0089】
残念ながら、線形演算は通常、FHE演算では直接サポートされていない非整数係数を含むため、このアプローチは直接使用できないが、例えばプログラマブルブートストラッピングを使用して変換することはできる。例えば、行列の場合、通常、乗算には多くの非整数値が含まれる。したがって、実数値の重みを有する第1の計算ネットワーク行列演算を整数値の重みを有するTFHE行列演算に変換して、ブートストラッピング演算を回避することが望まれている。この問題は、行列の乗算、畳み込み、行列の乗算、バッチ正規化、より一般的には、出力が入力の一部の線形結合である任意の関数に当てはまる。
【0090】
第1の計算ネットワークでの演算は、多くの場合、特定の小さな区間に留まるように制約されないが、FHE演算での暗号化された値は、モジュラスを法とする、通常は1を法とする、トーラス上に制限される。これに対する1つの解決策は、第1の計算ネットワーク内のすべての値を、十分に小さく、0と1の間にあり、0と1の間に留まるような値にスケーリングすることである。値が増加しすぎる場合は、より小さい値に時折スケーリングされ得る。非線形演算は、元の値ではなく、予期されるスケール値に適合させることができる。興味深いことに、行列の乗算は、線形であり、スケーリングされていない値だけでなくスケーリングされた値にも作用する。行列の加算は、スケーリングされた変数に比例してスケーリングできる。
【0091】
値を0と1の間の暗号化された値にエンコードすることが重要である。より最適なエンコーディングとそれほど最適でないエンコーディングを考案することはできるが、一般に、すべての値が0と1の間の十分に小さいサブ区間内にあるように、単純なスケーリングとシフティングによって機能するエンコーディングを実現できる。値が大きくなりすぎる場合は、場合によってはダウンスケーリングを時折用いる。値のスケーリングダウンは、プログラマブルブートストラッピングで行われ得ることに留意されたい。
【0092】
図2は、変換システム200の実施形態の一例を概略的に示す。システム200は、関数を計算するように構成された演算の第1の計算ネットワークを、同じ関数を計算するように構成されたFHE演算の第2の計算ネットワークに変換するように構成される。ネットワークの重要なクラスはニューラルネットワークであるが、計算ネットワークは他の機能を表すこともある。図2は、第1の計算ネットワーク210を概略的に示しており、その演算211、212、および214が示されている。通常、第1の計算ネットワーク210は、3つを超える演算、例えば、10を超える、100を超えるなどの演算を含むことになる。
【0093】
第1の計算ネットワーク210は、実数値行列乗算と、少なくとも複数のさらなる演算を含む複数の実数値行列演算とを含む。例えば、実数値の行列乗算は、y=W.xまたはy=W.x+bなどの行列乗算であってもよい。この例ではベクトルxについてである。行列の乗算は、別の行列、例えばy=WX+B、を使用することもできる。行列の乗算は、2つの行列間の乗算を含み得る。行列演算には行列加算も含まれ得る。行列演算に加えて、第1の計算ネットワーク210は複数のさらなる演算を含む。さらなる演算は、複数の実数値行列演算のうちの少なくとも1つの結果を入力として受け取る。例えば、さらなる演算から入力値を受け取る演算、異なるソースからの値を組み合わせる演算など、さらに多くの演算が存在し得る。さらなる演算の一例は、活性化関数、例えばシグモイド関数、例えばz=Activation(y)の形式の関数であり、ここでyは上記の行列乗算の結果であり得る。
【0094】
実施形態が演算し得る第1の計算ネットワークは、非常に大規模で複雑なディープニューラルネットワークであり得る。図3は、第1の計算ネットワーク300の実施形態の一例を概略的に示す。第1の計算ネットワーク300は、一実施形態によって第2の計算ネットワークに成功裏に変換されたニューラルネットワークの一例である。
【0095】
図3は、ILSVRC2014のウイナーであるGoogLeNetまたはInception v1と呼ばれるネットワークのフラグメントである。Inceptionは、オブジェクト検出と画像分類のためのディープ畳み込みニューラルネットワークアーキテクチャである。そのネットワークのより一層の詳細は、論文「Going deeper with convolutions」(参照により本明細書に含まれる)と、現在GitHubでホストされているオープンニューラルネットワークエクスチェンジ(onnx)のinception_v1の対応するページ(参照により本明細書に含まれる)で利用可能である。
【0096】
図3に、複数の演算とそれらの間の層を示す。層は1-99の参照符号で示される。例えば、図3の上部は連結演算を示している。連結演算は「Concat_xx」として示され、xxは特定の連結演算を示す。連結演算の出力は、他のいくつかの演算に入力される。1つの演算の出力であり、次の演算に入力される値をまとめて層と呼ぶ。この場合、連結演算Concat_52は層53の値を提供する。連結演算は、値の順序を変更するだけであるため、FHE演算に直接変換でき、これは、暗号化された値だけでなくプレーンに対しても行うことができる。連結演算は、異なる演算の値を組み合わせるいわゆるジョイン演算の一例である。以下で説明するように、ジョイン演算には追加の注意が必要な場合がある。
【0097】
図3には、畳み込み演算も示されている;「Conv_xx」で示される。畳み込みは行列演算の一例である。実数値の行列演算は、実数値のカーネルによる1つ以上の畳み込みを含む。これらは、暗号化された値を演算する行列演算に置き換えることができる;しかし、畳み込みのカーネルの実数は整数に置き換える必要があることに注意する必要がある。
【0098】
図3には、ReLU演算も示されている。ReLUは非線形演算の一例であり、多くの場合はさらなる演算であり、ReLUは連結演算などから入力をとることもできる。変換では、非線形演算であるReLUがプログラマブルブートストラッピングに置き換えられる。
【0099】
図3には、プール演算、この場合はMaxPool、も示されている。プーリング演算は、離散化プロセスの一タイプであり、値の入力セット、例えば、画像、隠れ層の出力行列など、がダウンサンプリングされ、その次元が低減される。MaxPoolの場合、値のサブセットがそれらの最大値に置き換えられる。MaxPool演算は、2つの値の最大をとるブートストラッピング演算を使用し、それを繰り返し適用してサブセットの最大値を取得することによって実装できる。
【0100】
MaxPoolはReLUを使用して実装できることに留意されたく、例えば、2つの変数aおよびbのMaxPoolは、a+ReLU(b-a)として実装できる。3つ以上の値に対するMaxPoolは、それぞれ2つの値に対する複数のMaxPoolとして実装できる。
【0101】
プーリング演算の例としては、特に、値のサブセットがそれらの平均値に置き換えられるAveragePoolがある。AveragePoolは、暗号化された値に対して直接行える合計として、およびプログラマブルブートストラッピングとして実装できる除算として実装できる。
【0102】
ニューラルネットワークなどの計算ネットワークで生じる可能性のあるその他の演算には、Flatten、Transpose、およびReshape演算が含まれる。これらは値を移動させる演算であり、暗号化された値を処理するように容易に変換される。
【0103】
Dropoutはニューラルネットワークのトレーニングで使用される演算であるが、通常は推論中に恒等式(identity)に置き換えられる。
【0104】
Add演算は層の追加を表す;これは線形演算であるが、通常はジョイン演算であるため、本明細書で説明するように、ある程度の注意が必要である。
【0105】
図3には示されていないが、やはり使用され得るものとして、特に、実数値の重みの行列を使用した行列乗算、および実数値スカラーを使用したバッチ正規化も、生じる可能性のある演算である。行列演算はGemm_xxで示される。
【0106】
活性化関数のさらなる例には:シグモイド関数、ソフトマックス関数、ソフトプラス関数、ソフトサイン関数、tanh関数、seLU関数、eLU関数、指数関数、LeakyReLU層、PReLU層、ThresholdedReLU層が含まれる。
【0107】
図2に戻る。第1の計算ネットワーク、例えば図3に示すようなニューラルネットワークはシステム200に提供され、実数値乗算の除去を含めて第2の計算ネットワークへの変換に成功した。例えば、演算のタイプ、それらのパラメータ、例えば重み、およびネットワーク内の接続を含むファイルは、デジタルフォーマットで提供され得る。例えば、システム200は、システム200の外部の外部ソースから第1の計算フォーマットを受け取ってもよい。例えば、システム200は、ローカルコンパイラまたはニューラルネットワークトレーニングユニットの出力として計算ネットワークを取得することができ、そのいずれもシステム200にインストールされることができる。
【0108】
第1の計算ネットワークを変換するために、行列演算が、TFHE暗号化された値に対して行える対応する演算に変換される。システム200は、拡大係数ユニット230を備える。拡大係数ユニット230は、拡大係数(α)のセットを決定するように構成される。各行列演算は拡大係数に対応する。アイデアは、対応する拡大係数を用いて実数値行列をスケーリングし丸めることによって、例えば行列乗算に対応するような実数値行列(W)を整数値行列に変換することである。例えば、行列Wは、すべてのエントリが個別に丸められる行列W’=round(αW)で置き換えることができる。丸めは通常、最も近い整数に行われるが、代わりに切り捨てまたは切り上げも可能である。
【0109】
この演算にはいくつかの利点がある。まず、実数値の乗算がサポートされていない場合でも、整数値の乗算はサポートされているため、W’を使用した乗算は暗号化された値に対して直接行える。したがって、この演算をサポートするためにプログラマブルブートストラッピングは必要なく、はるかに効率的である。第2に、拡大係数αは任意に選定できるため、WをW’に置き換えることによる精度のロスを制御できる。拡大係数αの値を高くすると、変換がより正確になる。通常、拡大係数は少なくとも1であるが、たまたま大きなエントリがあり、関数全体への影響が比較的小さい行列の場合は、1未満の値も使用され得る。
【0110】
ひとたび行列演算の行列をスケーリングされたおよび丸められた関数に置き換えると、残りの演算を新しい行列に適合させることができる。
【0111】
例えば、行列演算Wx+Bは、W’x+(αB)に置き換えることができる。暗号化された値とプレーン実数値の加算がサポートされているため、ベクトルBを丸める理由がないことに留意されたい。行列演算から入力を受け取るさらなる演算は、約α倍大きい値を受け取ることになる。これは、関数A(x)を関数A(x/α)に置き換えることで対処できる。関数Aはプログラマブルブートストラッピング演算で実装されるため、追加の除算演算を追加しても問題ない。つまり、行列が整数のみで構成されるように行列演算を調整した後、行列の大きさの変化に対処するために、他の演算、特にさらなる演算が調整される。この時点で、第1の計算ネットワークから第2の計算ネットワークを作成できる:すべての行列演算は、それらの整数行列のバリアントに置き換えられる。非線形演算は、1つ以上のプログラマブルブートストラッピング演算に置き換えることができる。
【0112】
言い換えれば、行列演算の乗算部分を拡大係数と乗算する(その後丸める)ことができるが、これにより、変更された行列演算に続く計算ネットワークの部分全体で計算値が変更される。行列演算に加算部分もある場合、この後者の加算項に同じ拡大係数を乗算することができるが、ここでは丸めは必要ない。行列演算により、拡大係数と同様の係数だけより大きい出力が生成されるようになった。変更された行列演算の入力をとるさらなる演算は、スケーリングされた行列演算のスケーリングされた結果を入力として受け取るように調整することができる。変更された第1の行列演算の後に第2の行列演算が続く場合、第2の行列演算自体の拡大係数が後に続く第1の行列演算の拡大係数を使用して第2の行列をスケールダウンすることで調整できる。
【0113】
第2の計算ネットワークは、さらなる演算、例えば、1つ以上のプログラマブルブートストラッピングのような非線形演算を実装することによって構築することができる。FHEではプログラマブルブートストラッピングなしで実数値の加算と整数の乗算がサポートされているため、行列演算を第2の計算ネットワークにコピーできる。
【0114】
システム200は、変換ユニット240を備える。例えば、変換ユニット240は、拡大係数ユニット230から拡大係数を受け取ることができる。変換ユニット240は、第1の計算ネットワークにおける従来の演算から第2の計算ネットワークにおけるFHE演算への変換を行うように構成され得る。図2は、FHE演算221-224を含む第2の計算ネットワーク220を示す。一実施形態では、第1の計算ネットワークと第2の計算ネットワークとの間には対応関係があり、第1の計算ネットワーク内の行列演算は、第2の計算ネットワーク内の暗号化された値に対する行列演算に対応し、さらなる演算は1つ以上のプログラマブルブートストラッピングのセットにマッピングされる。変換では、第1の計算ネットワーク内の演算子のほとんどが第2のネットワーク内の1つの演算子に対応する。しかし、追加の演算子を導入した方がよい場合もある。これは、追加の演算子223を図式的に有する第2のネットワーク220に示されている。第1および第2のネットワーク210および220は通常、実際にはさらに多くの、例えば10より多くの、20より多くのなどの、演算子を有する。
【0115】
上記の手順では、拡大係数には多くの選択肢があることに留意されたい。拡大係数が高いほど、第1の計算ネットワークでの行列演算と比較して、第2の計算ネットワークでの対応する行列演算の忠実度を確実にする。しかし、拡大係数が高いとマイナス面もある。FHEスキームの暗号化された値は0と1の間の値を表し、これは、第1の計算ネットワーク内の値が第2の計算ネットワーク内のスケーリングされた値によって表され、スケーリングされた値が0と1の間にフィットすることを意味する。実際、ほとんどのFHE演算には、より厳格な要件があり、例えば、値が0と1/2または1/4であり得るなんらかの上限の間にフィットすることが必要である。これは、すべての値が必要な区間内にフィットするようにすべての値を十分にスケールダウンすることで解決できるが、これ自体、第2のネットワークが第1の計算ネットワークをどの程度うまく近似できるかという精度を低下させる結果になる。拡大係数を高くすると、値のサイズを増加させることによりこの問題はさらに悪化し、したがって、指定された区間に値をフィットさせるために必要なスケーリングダウンが増加する。したがって、拡大係数は両方とも第2のネットワークの精度を増加させるが、エンコードに対する要求の増加により間接的に精度も低下する。これをさらに複雑にしているのは、ネットワーク内の演算が最終結果に与える影響が変わることである。つまり、一部の行列演算にはより大きな拡大係数を適用し、他の行列演算にはより小さな拡大係数を適用することで、第2のネットワークの精度が改善される。
【0116】
システム200は、例えばサンプルストレージ251に接続されているか、サンプルストレージ251を備えている、サンプルストレージ251へのアクセスを有する精度ユニット250を備える。精度ユニット250は、第2の計算ネットワークの精度を示す、第2の計算ネットワークの精度尺度を決定するように構成される。精度尺度に関するさまざまな方法がある。
【0117】
第1のアプローチでは、第1の計算ネットワークと第2の計算ネットワークの両方が、データセットとしばしば呼ばれる、同じ複数のサンプル値に対して評価される。次に、第2の計算ネットワークの出力が第1の計算ネットワークの出力にどの程度近いかによって、第2の計算ネットワークがレーティングされる。例えば、精度尺度は平均二乗差などとすることができ、使用できる精度の尺度は多数ある。入力値はランダムに選択できるが、代表的な入力を使用して第1と第2の計算ネットワークをテストすることで、より現実的な結果が実現される。例えば、一実施形態では、サンプルストレージ251は複数の入力値を含む。サンプル入力値は、第2の計算ネットワークの動作可能な使用中に予期され得る入力のタイプを表すことが好ましい。
【0118】
例えば、第1の計算ネットワークが入力として画像、例えば医療画像を予期するニューラルネットワークである場合、精度は同様の医療画像で評価されることが好ましい。
【0119】
第2のアプローチは、第2のネットワークのみを評価することである。この場合、入力値のセットおよび対応する予期される出力値は、例えばデータプロバイダ160からシステム200に提供され得る。これらの出力は、第1の計算ネットワークが提供する出力と同じであり得る;しかし、このサンプルセットは、第1の計算ネットワークから独立して取得することもできる。例えば、出力は参照値または黄金の真理値であり得る。このアプローチには、第1のネットワークが評価するはずの関数にどれだけ近いかによって第2のネットワークが評価され、第1の計算ネットワークの特異性を忠実に再現できなかったとしてもペナルティを受けないという利点がある。例えば、第2のネットワークは、第1の計算ネットワークのトレーニングまたは検証に使用されるサンプルに基づいて評価され得る。
【0120】
興味深いことに、第2の計算ネットワークを評価するために、暗号化された値に対して実際に演算を行う必要はない。代わりに、第2の計算ネットワークをプレーン値で演算させ、第2のネットワークの同じノイズ増加などをプレーン値でシミュレートすることによって、第2の計算ネットワークをシミュレートすることができる。例えば、第2の計算ネットワーク内の行列演算は、同じ行列演算を、同じ方法でスケーリングされたプレーン値に対して行うことによってシミュレートできる。例えば、第2の計算ネットワークにおけるプログラマブルブートストラッピング演算は、プログラマブルブートストラッピングのテストベクトルを、プレーン値をプレーン値にマッピングするルックアップテーブルとして使用することによって評価できる。明らかに、このアプローチは演算用途には適していないが、大幅により低い計算コストで同じまたは類似の精度値を提供する。
【0121】
精度値にアクセスできると、拡大係数を変更することにより第2の計算ネットワークを改善することが可能になる。例えば、システム200は、精度尺度を増加させるために拡大係数(α)のセットを反復的に最適化するように構成された最適化ユニット231を備えることができる。精度尺度は、大きな拡大係数による精度のロスを考慮し得る。あるいは、最適化は、第2の計算ネットワークの実行速度などの他の目標も最適化しながら、精度尺度を最適化することもできる。さまざまな最適化スキームを使用できる。例えば、最適化は、ヒルクライミング、シュミュレーテッドアニーリング、遺伝的プログラミングなどを使用することができる。例えば、拡大係数(α)の最適化は:網羅的探索(exhaustive search)、対数探索(logarithmic search)、確率的方法、勾配探索(gradient search)のうちの1つ以上を含んでもよい。
【0122】
以下に、さまざまな詳細、代替案、および実施形態をさらに詳細に説明する。まず、ニューラルネットワークの単純なフラグメントを考えてみる。第1の計算ネットワークでy=W.x+Bの後にz=Activation(y)が続くと仮定し、ここでWは重み行列と呼ばれる定数実数値行列、Bはバイアス行列と呼ばれる定数実数値行列である。暗号化されたデータに対して同等の計算を行うために、第1の計算ネットワークが演算する値は、0-1の区間にフィットするようにスケールダウンされる。適切な量のスケーリングは、例えば複数の入力で評価することによって、第1の計算ネットワークから取得することができる。実数値行列Wは、整数値行列、例えば整数の行列に変換される。これが完了すると、TFHEなどの行列ベースのFHEで行列乗算が定義される。拡大係数αを設定する。これは実数であり、計算をy’=W’.x+B’およびz’=Activation’(y’)に置き換え得る。ここで:
・W’は整数値の定数行列で、W’=Round(α*W)で定義され、ここで、Round()は最も近い整数への丸め関数である、
・B’は実数値の定数行列で、B’=α*Bで定義される
・Activation’は関数Activation’(x)=Activation(x/α)である
・xはトーラスにおいてすでにエンコードされており、y’とz’はトーラス上でエンコードされている
これは次の理由から有効な変更である:
・現在、重み行列W’は整数のみで構成されるため、TFHE演算と互換性がある。
・αが十分に大きくなるとすぐに、y’≒αyおよびz’≒zとなるため、計算はほぼ正確になる。y’はyより約α倍大きいことに留意されたい。初期入力を十分に小さくスケーリングすると、中間値もより小さくなる。活性化関数は値を元の範囲に復元し得る;これが大きすぎる場合は、追加のスケーリング係数を活性化関数に組み込むこと、例えば関数A()をA()/d+sに置き換えることができる。
【0123】
変更されたフラグメントにおける値は、元のネットワークにおける値とほぼ固定された関係にある。上で指摘したように、拡大係数αが大きいほど、元の計算に対する新しい計算がより正確になる。しかし、拡大値αが大きいということは、計算された値がより広い範囲内にあることを意味し、範囲の最低値に対してFHE計算を行うときに精度の問題が発生し得る。したがって、目標は、変更されたニューラルネットワークの精度が元の精度に十分に近づくような最小のαを見つけることである。αの探索は、さまざまなタイプの探索アルゴリズムを使用して行うことができる。
【0124】
ニューラルネットワークの場合、本質的にノイズをサポートしているため、これは特にうまく機能する;機能に大きな影響を与えることなく、層内のある程度の変更や丸めを吸収できる。これにより、行列に対する丸め演算の使用による影響が低減する。活性化関数は、第2の計算ネットワーク内のPBS演算子で置き換えることができる。元の活性化関数または調整された活性化関数をサポートするための計算コストは同じである。最終的に、変更されたニューラルネットワークは(i)TFHEと完全に互換性があり、(ii)元のNNの精度に十分近い精度を持つ。
【0125】
特に、第1の計算ネットワークでは実数値の重みが可能である。代替の解決策は、重み行列のエントリが整数であることを強制する別のトレーニングアルゴリズムを使用することである。さらに別のオプションは、第1の計算ネットワークが与えられた場合、整数値の重みのみを使用する中間計算ネットワークをトレーニングし、その後、その中間ネットワークを変換することである。これらのアプローチは両方とも望ましくない。第1の計算ネットワークの開発者は、ネットワークの再トレーニングには計算コストがかかるが、彼らに最適なトレーニングスキームを自由に使用できることが好ましい。この変換システムのもう1つの利点は、複雑な最先端のニューラルネットワークをサポートしていることである;例えば、マルチサムの後には常に活性化が続くわけではなく、例えば、ジョイン演算が続く。マルチサムは、Gemm、行列乗算、Conv、またはBatchNormを指す一般的な用語である;すなわち任意の演算y=Op(x)であり、ここで、Opはyの要素yに対してy=Σi,jとして定義される。ここで、ci,jは定数乗数である。定数乗数は、第1の計算ネットワークでは実数値であり、第2の計算ネットワークでは整数値の乗数で置き換えることができる。
【0126】
図4aは、第1の計算ネットワーク410の実施形態の一例を概略的に示す。第1の計算ネットワーク410は、より大きな第1の計算ネットワークのフラグメントとしてみなされることもできる。図4aには、入力411、演算412-414、および出力415が示されている。入力411および出力415において、入力値が受け取られまたは生成され、これらは、変換された第2の計算ネットワークにおいて暗号化された値となる。この例では、演算412は平坦化(flatten)演算であり、演算413は一般的な行列乗算であり、演算414は活性化関数であり、この場合はReLU演算である。図4aには3つの層:層1、2、および3も示されている。
【0127】
第1の計算ネットワークの層と第2の計算ネットワークの層の、値間の関係は、層係数として表すことができる。層係数は、第1の計算ネットワークの層内の値と、第2の計算ネットワークの対応する層内の対応する値との間の乗算比(multiplicative ratio)である。
【0128】
層は、いわゆるニューロンのテンソルとしてさらに指定できる:テンソルは任意の次元の配列であり、必ずしも1次元または2次元に限定されず、例えば3次元以上であり得る。例えば、形状(2,3,5)のテンソルTである層を持つことができ、これは、30=2×3×5個のニューロンに対応することを意味する。例えば、T[i,j,k]は、{0,1}内のi、{0,1,2}内のj、および{0,1,2,3,4}内のkを表す。多次元表現を使用すると、ニューラルネットワークの演算および/または、画像などの現実のオブジェクトへの動作をよりよく理解するのに有益なことがよくある。それにもかかわらず、テンソル演算は結局のところ行列演算に帰着し、そのようにみなすことができる。例えば、第1の計算ネットワークで定義されたテンソルは、実数値の要素を有することができ、一実施形態によれば、これらの要素は整数値の要素に変換され得る。
【0129】
行列演算は拡大係数αに関連付けられており、これは通常は実数値である。行列演算では、拡大係数により入力層係数にαが乗算されて、出力層係数が得られる。通常、所与の層のニューロンの値は同じ拡大係数を持ち、したがって同じ層係数を持つ。厳密に言えば、丸めが行われるので、丸め演算により関係がわずかに歪むため、入力層係数にαが正確に乗算されて出力層係数が得られるわけではないことに留意されたい。しかし、この異常は一般に無視できるほど小さい。
【0130】
層1と3では、層係数は1である。層1の場合は、平坦化演算によって値の大きさが変更されないため、これが当てはまる。係数3の場合、活性化関数の出力は変更されないため、これが当てはまり、つまり、出力係数1を有する。Gemm_1層のα拡大係数により、層2は、変更されたネットワークは近似的にαで乗算される。活性化ReLUは、層の拡大係数に対応するためにRelu(x/α)に置き換えられる。Relu(x/α)は、第2の計算ネットワークでプログラマブルブートストラッピングを使用して行われることに留意されたい。
【0131】
フォークとジョイン層
計算ネットワークは複雑なトポロジを有し得る。これを説明するために、ニューラルネットワークを考えてみる。フォーク層は、少なくとも2つの次の層、つまり演算のソースとして使用される層を指す一方、ジョイン層は、少なくとも2つの前の層、少なくとも2つの前の演算によって生成された値、またはそれより多くを使用する層である。図4bは、フォーク層およびジョイン層を有する第1の計算ネットワーク420の実施形態の一例を概略的に示す。ここで、層13は層14と17で使用されるためフォークであり、一方、層18は層16と17の両方をソースとして使用するためジョインである。フォーク層とジョイン層は、Resnet、VGG、MobileNetなどのディープネットワークにとって重要である。
【0132】
通常、2つ以上の層が組み合わされるジョイン演算は、加算、減算、連結などである。PBSなしで、暗号化された値に対して加算、減算、または連結を直接行える。
【0133】
2つ以上の層がジョイン層内で組み合わされるとき、それらの層係数は等しいか実質的に等しいことが好ましい。そうでない場合、結果は次の演算により管理できるものに対応せず、精度が大幅に減少する。第2の計算ネットワーク内のすべての層はホモジニアスであることが好ましく、すなわち、層ごとに単一の拡大係数を有する;異なる層の拡大係数は異なる場合もあれば、等しい場合もあることに留意されたい。すべての入力層が同じ層係数を持つ場合、ジョイン演算はホモジニアスであると言われる。したがって、第1の計算ネットワークがフォークとジョインを含むとき、拡大係数を解決することはより複雑である。ジョイン演算で等しい層係数を持つために、それから層が生じた演算が等しい拡大係数を持つということを課すことができる。第2のネットワークにさらなる等化演算を追加することで、層係数を等化することもできる。
【0134】
興味深いことに、たとえ複雑なトポロジを持っていたとしても、第1の計算ネットワーク内で拡大係数を伝播させ、それらが満たす必要がある制約、特にどの拡大係数が等しい必要があるかを取得することができる。例えば、変換システムは次のように構成できる。
・分析:実数との乗算が存在するニューラルネットワーク/関数のすべての演算に対して、拡大係数αを割り当て、拡大係数が第1の計算ネットワークを通してどのように伝播するかを決定する。拡大係数が同じジョイン層に到着するときに、対応する拡大係数が等しいか、追加の等化演算によって等しくされる必要があるなどの制約を導入する。
・解決:連立方程式を解く。例えば、拡大係数の数を低減し、その一部を解決ステップで等しくすることで問題の次元を低減する。解決ステップの終了時には、ネットワークはホモジニアスになる。
・発見:十分に高い精度を与える最小の変数{α}を発見する;これは、αがあまり多くないとき、または他の勾配ベースの方法、またはパラメータが多いときの高速収束方法の場合、網羅的検索を使用して行うことができる。
・置き換え:αがわかったら、重みを対応する整数の重みで置き換え、バイアスを変更し、プログラマブルブートストラッピングによって置き換えられる次の活性化または関数での計算を補償する。
【0135】
拡大係数の伝播を追跡するために、層係数を計算できる。例えば、これには次のルールが使用され得る:
・開始層または入力層の係数は1である。
・実数値演算後の係数は、演算前にαを乗算したものである。
・活性化後の係数は1になり得る。高度な実装では、活性化後の係数が拡大係数自体を有することもできる。最適化では、後者の拡大係数を、解決部分の既存のαの積の整数乗に直接設定できる。利点は、変換のために挿入される必要な追加層の数が低減されることである。
・ジョイン層の入力係数は、同じであることが好ましい;したがって、これらのジョイン層の出力は、それらのソースの入力係数になる。
・Transpose、Flatten、Reshapeなどの他の演算の場合、出力係数は入力係数となる。
・プール演算の場合、出力係数は入力係数となる。
【0136】
図4bに戻って、フォーク層13および対応するフォーク演算421、ならびに、ジョイン層18および対応するジョイン演算422について考えてみる。図4bでは、拡大係数が演算Conv_13、Conv_15、Conv_16によって導入され、例えば、それぞれ係数α、α、αである。Relu_14演算は、係数αでスケーリングされた入力を受け入れるように変更されているが、変更されていない出力が生成される。すなわち、Relu_14の後の層の拡大係数は1である。
【0137】
層16には係数αを伴う層係数があり、一方、層17には層係数αを伴うことがわかる。ジョイン演算422、この場合は加算演算は、等しい層係数を必要とするので、ジョイン演算422はα=αという制約を導入する。その結果、それらはもはや独立したものではなく、等しいと考えることになる。
【0138】
この方法は行うのが簡単なので好ましい。この方法でジョイン層を解決することのデメリットは、拡大係数αの自由度を除去することである。このように自由度が低減されると、最適化で拡大係数のより大きな値が発見されたり、可能な精度よりも悪い精度が発見されたりし得る。
【0139】
以下でさらに詳しく説明するように、他の選択肢も可能である。例えば、Relu_14の出力に拡大係数を導入できる。その場合、Relu_14’(x)=Relu_14(x)(α/α)となり得、ジョイン演算422は拡大係数αでホモジニアスとなる。このように、αは最適化のために保持され、αから独立して選定できる。拡大係数の調整も示すと、第1の計算ネットワーク内の元のReLUと比較して、第2の計算ネットワーク内のReLU関数はRelu_14’(x)=Relu_14(x/α(α/α)になり得る。さらなる関数、例えば、PBSとして実装される関数の出力に1とは異なる拡大係数を導入することは必須ではないが、第2の計算ネットワークをさらに改善できる。
【0140】
図5aは、第1の計算ネットワーク510の実施形態の一例を概略的に示す。第1の計算ネットワーク510は、フォーク演算511を有するフォーク層3と、ジョイン演算512を有するジョイン層7とを備える。演算512で到着する層係数が等しいという条件を課す場合、これは、層3および6の両方の層係数が1であるという条件をもたらす可能性がある。層3は拡大係数を持たないか、別の言い方をすれば拡大係数1であるが、層6は層係数としてConv_5の拡大係数を持つ。これにより、conv_5演算を自由に変換できなくなる。これにより、特にconv_5がたまたま重要な演算である場合、劣った精度をもたらし得る。この困難を回避するためにさまざまな方法がある。
【0141】
図5bは、補正演算525を導入することによって部分的に変換された、第1の計算ネットワーク520の実施形態の一例を概略的に示す。図5bに示されている他の部分には、図5aの第1の計算ネットワーク内の対応する部分がある。ネットワーク520をさらに変換するために、行列演算Conv_3およびConv_5は、対応する行列演算に置き換えられることができるが、一実施形態によれば、整数に変換されたそれらの行列で置き換えられる。非線形演算Relu_2およびRelu_4は、PBSバージョンに置き換えることができる。Add_6演算も線形であるが、暗号化された値に対する対応する加算に置き換えることができる。図5aと同様に、演算Add_6の入力層がホモジニアスであるという条件がある。図5aと5bの違いは、補正演算525の導入である。演算525は、あまり自由度を失うことなく、第2の計算ネットワークをホモジニアスにするのを助けるために計算ネットワークに挿入される補正演算であり、この場合はジョイン演算Add_6である。
【0142】
補正演算525は、値に対して追加の拡大係数、例えば関数α・xを導入する。ジョイン演算、ここではAdd_6によって課される制約を考慮すると、演算525は関数f(x)=α*xとなり、層3と層6の両方が拡大係数αを有することになる。2つの連続する演算の間にスケーリング演算を挿入すると、最適化され得る追加の係数が導入される。挿入された補正演算により層が分割され、この場合は層3が3と3’に分割される。例えば、システムは、ジョイン演算が行列演算の拡大係数を強制的に1にする場合、PBSとジョイン演算との間に演算525などの補正演算を導入するように構成されることができる。
【0143】
演算525には2つの選択肢がある。第1の選択肢は、演算525が整数乗算であり得る。これには、高価なPBSが回避されるという利点があるが、導入される係数、例えばαが整数に制限されるというデメリットがある。これは通常、αが整数、この場合は演算Conv_5、になるように、(対応する行列演算を効果的に近似するために)拡大係数αが必要以上に大きく取られることを意味する。拡大係数を大きくすると、値がより狭い区間でコード化されるなど、それ自体でノイズが増加し得る。あるいは、より大きなパラメータをサポートすることもできるが、例えばFHEスキームで実数を表すために使用されるビット数を増加させることにより、コストが増加する。
【0144】
第2の選択肢は、f(x)=α*xに対応して、演算525がPBSによって直接実装され得るというものであり得る。これには、実行が遅くなるのを代償にして、αの選定を整数に制約しないという利点があり、これは、PBSは通常、整数による乗算よりも大幅に遅いためである。
【0145】
例えば、一実施形態では、1つ以上の補正演算が第2の計算ネットワークに挿入され、補正係数でそれらの入力をスケーリングする。補正演算はプログラマブルブートストラッピングであってもよく、補正係数は実数であり、あるいは補正演算は整数乗算であってもよく、補正係数は整数である。
【0146】
一般に、
【数5】
に対するPBSを挿入することにより、係数αを有する層Xから係数αを有する層X’に遷移できることに留意されたい。これも便利であるが、可能であれば、この解決策は避けるほうが良い。
【0147】
拡大係数とオプションで挿入された補正演算を取得する1つの方法は、第1の計算ネットワーク内の各行列演算に拡大係数をシンボル的に関連付け、次に、ネットワークがホモジニアスになるように、第1の計算ネットワークを通して層係数を伝播させ、変換演算の出力に適用される第1の計算ネットワーク内の演算から拡大係数に関する条件を導出する。ここには解決ステップが含まれ得る。例えば、条件を分析することができ、例えば2つ以上の拡大係数間に等価条件を課すことによって、拡大係数の次元を低減することができる。例えば、条件がまったく解決可能であることを検証し、解決できない場合は追加の演算を挿入することができる。
【0148】
例えば、拡大係数(α)のセットは、条件に従って、例えば、ジョイン演算がホモジニアスであるという条件に従って、繰り返し最適化することができる。拡大係数は精度の最適化され得る。最適化により、拡大係数の大きさを同時に最小化することができる。例えば、最小精度レベルに達することを条件として、拡大係数を最小化することができる。例えば、精度項と拡大係数重み項の加重和を最適化することができる。
【0149】
例えば、一実施形態では、第1の最適化フェーズは、補正演算を導入することなく、最適化された拡大係数のセットを発見する。精度が十分でない場合は、第2の最適化フェーズで補正演算が導入され得る。後者は、それらによって導入される拡大係数に実際の値を許可することで解決できる。第2のフェーズでは、補正演算によって導入された拡大係数は、例えば補正演算の拡大係数を丸める、例えば切り上げることによって、整数に置き換えることができる。整数で置き換えても精度があまり低下しない場合は、整数の乗算のままにして、PBSを回避できる。整数の乗算を行うには、比率が整数になるように拡大係数を直接選ぶことができる:我々の例では、常に
【数6】
が整数になるようにαとαを選ぶことができ、補正演算を整数の乗算にすることができる。どの補正演算を整数乗算として実装し、どの補正演算をPBSとして実装するかを最適化することは、1つずつ決めることも、遺伝的アルゴリズムなどの何らかのアルゴリズムを使用して行うこともできる。
【0150】
一実施形態では、新たな補正演算を導入することなく、最適化に使用できる追加の係数が導入される。これは、出力を調整することでさらなる演算を変更するために行える。例えば、一実施形態では、拡大係数がPBSの出力に適用される;例えば、拡大係数βについて、関数f(x)を関数βf(x)に置き換えることができる。関数の入力も入力層の拡大係数に対応するように調整される場合、関数は拡大係数αを考慮してβf(x/α)に調整され得る。このアプローチは、第2の計算ネットワークにPBSとして実装される関数に特に役立つ。
【0151】
例えば、PBSによって置き換えられる活性化関数に、その出力に拡大係数を追加できる、例えば、あるβについて、Activation(x)をActivation’(x)=β*Activation(x)に置き換えることができる。値βは、ジョイン演算など、ネットワークによって意味される制約の下での最適化によって取得され得る。
【0152】
拡大係数βは、利用可能なαのいずれかを個別の整数の正または負の累乗に乗じた積にすることができる。例えばいくつかの例を与えると:β=α、β=α*αまたはβ=α -1*α -2などであり得る。例として、図5aを考えてみる。このフラグメントは、補正演算525を追加することなく、例えば、左分岐にPBSを実装することなく、より良く最適化することができる。
【0153】
例えば、係数、
【数7】
係数をRelu_4活性化の出力に適用することができる。これにより、層5の係数の層係数が
【数8】
に変更される(元のネットワークと比較して)。Conv_5自体の拡大係数がαであるため、Conv_5の後、層6の層係数は1になる。ジョイン層、例えば、層7、では、ソース6と3はホモジニアスであり、つまり、同じ層係数を持っているため、ジョイン演算の計算を適切に行うことができる:最後に、層7の層係数は1になる。
【0154】
図5aの別の選択肢は、ReLu_2の出力にαの拡大係数を適用し、Relu_4の入力として使用される値が層係数α*αを有すると考えることである。これにより、Add_6への入力もαの係数でホモジニアスになる。しかし、この方法は、Relu_4の出力の拡大係数のみを扱う方法よりも良くない可能性があり、何故なら、一部の値、特に層4が大きな係数(つまり、α*α)により増大し得るからであり、これは精度に対してあまり良くない可能性がある。データセットによっては、より良い場合もある。これは最適化で解決できる。
【0155】
性能の観点からは、PBSの出力に拡大係数を適用する方が、余分な演算が追加されないため、PBSや整数乗算を追加するよりも好ましい。さらに、このアプローチではすべての拡大係数αが独立した状態に保たれるため、適切な解が発見される可能性が高くなる。
【0156】
一実施形態では、最適化は次のフェーズに従うことができる。第1のフェーズでは、補正演算を導入したり、例えばPBSの出力に新しい拡大係数を導入したりすることなく、解決策が探し求められる。例えば、実数との乗算を伴う第1の計算ネットワークのすべての演算に対して、拡大係数αを割り当てる。拡大係数がどのように伝播するかを決定することにより、拡大係数に関する条件を導き出す。特に、ホモジニアスな入力を必要とするジョイン演算(例えば、加算、減算、または連結ジョイン関数)は、その入力の拡大係数に関する条件を意味する。最適化により、十分に良好な精度が与えられながら、拡大係数{α}のサイズが最小限に抑えられる。拡大係数がそれほど多くない場合、これは、例えばオプションで対数探索を使用するなど、網羅的探索によって行える。拡大係数の数がより大きい場合は、既存の最適化スキームのいずれか、例えば、勾配ベースの方法とおそらくは組み合わせたヒルクライミングなどを使用できる。
【0157】
第2のフェーズでは、補正演算が導入され、新しい拡大係数を実数にできるように改善された解決策が探し求められる。最後に、可能であれば、補正演算が先行するPBSとジョインされるか、挿入演算として実装される。後者の場合、システムは新しい係数を整数に丸めようとするため、PBSなしで補正演算を実装できる。丸めの代わりに、比率が整数になるように拡大係数を選ぶことができる。
【0158】
最後に、拡大係数がわかれば、行列、例えば重みを、それらの対応する整数重みに置き換え、対応するバイアスを変更し、PBSに置き換えられる次の活性化または関数での計算を補償できる。
【0159】
例えば、精度が元のネットワークの精度に十分に近づくような、許容可能な拡大係数のセットが発見されたら。行列Wは、対応する拡大係数αを使用してRound(αW)に置き換えることができる。行列演算の加算部分、例えば、バイアスBはαBに置き換えることができる。活性化は、Activation’(x)=Activation(x/αin)/αoutで置き換えることができ、ここで、αinは入力の適切な係数であり、αoutは出力の適切な係数である(存在する場合)。
【0160】
変換システム114および200は、通信インターフェースを備えることができる。通信インターフェースは、さまざまな代替物から選択できる。例えば、インターフェースは、ローカルまたはワイドエリアネットワーク、例えば、インターネットへのネットワークインターフェース、内部または外部データストレージへのストレージインターフェース、キーボード、アプリケーションインターフェース(API)などであってもよい。特に、通信インターフェースは、コンピュータネットワークに接続するように構成され得る。通信インターフェースは、デジタルデータセットを受け取るために使用され得る。データセットは、第1の計算ネットワークを示し、システムによって変換が行われるパラメータ、値などのデータアイテムを含むことができる。データには、精度パラメータの評価用のサンプルセットも含まれ得る。データには、所望のレベルの精度も含まれ得る。
【0161】
システム114および/または200などの変換システムは、1つ以上のボタン、キーボード、ディスプレイ、タッチスクリーンなどのよく知られている要素を含むことができるユーザインターフェースを有することができる。ユーザインターフェースは、システムの構成、システムの新しいデータへの適用などのためのユーザ対話に対応するように構成されることができる。ストレージは、電子メモリ、例えばフラッシュメモリ、または磁気メモリ、例えばハードディスクなどとして実装され得る。ストレージは、一緒になってストレージを構成する複数の個別のメモリを含むことができる。ストレージは、一時メモリ、例えばRAMを含んでもよい。ストレージはクラウドストレージであってもよい。
【0162】
システム、例えばシステム114および200は、単一のデバイスに実装され得る。通常、システムは、システムに記憶されている適切なソフトウェアを行う1つ以上のマイクロプロセッサを備えている;例えば、そのソフトウェアは、対応するメモリ、例えば、RAMなどの揮発性メモリまたはフラッシュなどの不揮発性メモリにダウンロードおよび/または記憶され得る。あるいは、システムは、全体的または部分的に、プログラマブルロジック、例えばフィールドプログラマブルゲートアレイ(FPGA)に実装されてもよい。システムは、全体的または部分的に、いわゆる特定用途向け集積回路(ASIC)、例えば、特定の用途に合わせてカスタマイズされた集積回路(IC)として実装され得る。例えば、回路は、例えばVerilog、VHDLなどのハードウェア記述言語を使用してCMOSで実装されてもよい。特に、システムは、暗号プリミティブを評価するための回路を備えることができる。
【0163】
プロセッサ回路は、分散された方法で、例えば複数のサブプロセッサ回路として実装されてもよい。ストレージは複数の分散されたサブストレージに分散され得る。メモリの一部または全部は、電子メモリ、磁気メモリなどであってもよい。例えば、ストレージには揮発性部分と不揮発性部分が含まれ得る。ストレージの一部が読み取り専用であり得る。
【0164】
図6は、変換方法600の実施形態の一例を概略的に示す。方法600は、単一のコンピュータデバイスまたは複数のコンピュータデバイスのシステムであり得るコンピュータ上で実行されることが好ましい。方法600は、関数を計算するように構成された演算の第1の計算ネットワークを、同じ関数を計算するように構成されたFHE演算の第2の計算ネットワークに変換する。方法600は、
- 拡大係数のセットを決定すること(610)であって、行列演算のそれぞれが拡大係数に対応する、こと、
- 対応する拡大係数を用いて実数値行列をスケーリングし丸めることによって、複数の実数値行列演算に対応する複数の実数値行列(W)を整数行列に変換すること(620)、
- 複数のさらなる演算を調整して(630)、スケーリングされた行列演算のスケーリングされた結果を入力として受け取ることであって、第2の計算ネットワークは、変換された複数の整数行列および調整された複数のさらなる演算を含む、こと、
- 第2の計算ネットワークの精度を示す、第2の計算ネットワークの精度尺度を決定すること(640)、
- 精度尺度を増加させるために、拡大係数のセットを繰り返し最適化すること(650)
を含む。例えば、最適化は方法600の一部を使用することができ、例えば、決定すること610は複数回行うことができる。
【0165】
当業者には明らかなように、この方法を実行する多くの異なる方法が可能である。例えば、ステップの順序は示された順序で行えるが、ステップの順序は変更することも、いくつかのステップを並行して実行することもできる。さらに、ステップ間に他の方法ステップが挿入されてもよい。挿入されたステップは、本明細書に説明されているような方法の改良を表す場合もあれば、方法と無関係の場合もある。例えば、いくつかのステップは、少なくとも部分的に並行して行われ得る。さらに、次のステップが開始される前に、所与のステップが完全に終了していない可能性がある。
【0166】
方法の実施形態は、プロセッサシステムに方法600を行わせるための命令を含むソフトウェアを使用して行うことができる。ソフトウェアには、システムの特定のサブエンティティによってとられるステップのみが含まれ得る。ソフトウェアは、ハードディスク、フロッピー、メモリ、光ディスクなどの適切なストレージ媒体に記憶され得る。ソフトウェアは、信号として有線、無線に沿って、またはデータネットワーク、例えばインターネットを使用して送ることができる。ソフトウェアは、ダウンロードおよび/またはサーバ上でのリモート使用のために利用可能にすることができる。この方法の実施形態は、この方法を行うためにプログラマブルロジック、例えばフィールドプログラマブルゲートアレイ(FPGA)を構成するように構成されたビットストリームを使用して実行され得る。
【0167】
本開示の主題は、コンピュータプログラム、特に本開示の主題を実施するように適合されたキャリア上またはキャリア内のコンピュータプログラムにも及ぶことが理解されるであろう。プログラムは、ソースコード、オブジェクトコード、コード中間ソース、および部分的にコンパイルされた形式などのオブジェクトコードの形式、または方法の実施形態の実装での使用に適した任意の他の形式であってもよい。コンピュータプログラム製品に関する実施形態は、記載された方法のうちの少なくとも1つの処理ステップのそれぞれに対応するコンピュータ実行可能命令を含む。これらの命令はサブルーチンに再分割される、および/または、静的または動的にリンクされる1つ以上のファイルに記憶されたりし得る。コンピュータプログラム製品に関する別の実施形態は、記載されたシステムおよび/または製品の少なくとも1つのデバイス、ユニット、および/または部分のそれぞれに対応するコンピュータ実行可能命令を含む。
【0168】
以下の番号付き条項には、企図される非限定的な実施形態が含まれる。
【0169】
1.関数を計算するように構成された演算の第1の計算ネットワークを、同じ関数を計算するように構成されたFHE演算の第2の計算ネットワークに変換するための、コンピュータ実装される方法であって、
- 演算の第1の計算ネットワークは、実数値行列乗算を含む複数の実数値行列演算(y=W.x)と、複数の実数値行列演算のうちの少なくとも1つの結果を入力として受け取る少なくとも複数のさらなる演算(z=Activation(y))とを含み、
- 第1の計算ネットワークを変換することは、
- 拡大係数(α)のセットを決定することであって、行列演算のそれぞれは拡大係数に対応する、こと、
- 対応する拡大係数を用いて実数値行列をスケーリングし丸めることによって、複数の実数値行列演算に対応する複数の実数値行列(W)を整数値行列に変換すること、
- 複数のさらなる演算を調整して、スケーリングされた行列演算のスケーリングされた結果を入力として受け取ることであって、第2の計算ネットワークは、変換された複数の整数値行列および調整された複数のさらなる演算を含む、こと、
- 第2の計算ネットワークの精度を示す、第2の計算ネットワークの精度尺度を決定すること、
- 精度尺度を改善するために、拡大係数(α)のセットを繰り返し最適化すること
を含む、方法。
【0170】
2. - 拡大係数が実数である、および/または
- さらなる演算の少なくとも一部は、プログラマブルブートストラッピングとして第2の計算ネットワークに実装される、
前条項に記載の変換方法。
【0171】
3.関数を計算するように構成された演算の第1の計算ネットワークを、同じ関数を計算するように構成されたFHE演算の第2の計算ネットワークに変換するためのシステムであって、
- 実数値行列乗算を含む複数の実数値行列演算(y=W.x)と、複数の実数値行列演算のうちの少なくとも1つの結果を入力として受け取る少なくとも複数のさらなる演算(z=Activation(y))とを含む、演算の第1の計算ネットワークを受け取るための通信インターフェース、
- 第1の計算ネットワークを変換するために構成されたプロセッサシステム
を含み、変換することが、
- 拡大係数(α)のセットを決定することであって、行列演算のそれぞれは拡大係数に対応する、こと、
- 対応する拡大係数を用いて実数値行列をスケーリングし丸めることによって、複数の実数値行列演算に対応する複数の実数値行列(W)を整数行列に変換すること、
- 複数のさらなる演算を調整して、スケーリングされた行列演算のスケーリングされた結果を入力として受け取ることであって、第2の計算ネットワークは、変換された複数の整数行列と調整された複数のさらなる演算とを含む、こと、
- 第2の計算ネットワークの精度を示す、第2の計算ネットワークの精度尺度を決定すること、
- 精度尺度を改善するために、拡大係数(α)のセットを繰り返し最適化することを含む、システム。
【0172】
図7aは、書き込み可能部分1010を有するコンピュータ可読媒体1000、および同じく書き込み可能部分を有するコンピュータ可読媒体1001を示す。コンピュータ読み取り可能媒体1000は、光学的に読み取り可能な媒体の形態で示されている。コンピュータ可読媒体1001は、電子メモリ、この場合はメモリカードの形態で示されている。コンピュータ可読媒体1000および1001はデータ1020を記憶することができ、データは、プロセッサシステムによって実行されると、一実施形態にしたがって変換方法の一実施形態をプロセッサシステムに行わせる命令を示し得る。コンピュータプログラム1020は、物理的マークとして、またはコンピュータ可読媒体1000の磁化によってコンピュータ可読媒体1000上に具現化され得る。しかし、他の適切な実施形態も同様に考えられる。さらに、コンピュータ可読媒体1000は、ここでは光ディスクとして示されているが、コンピュータ可読媒体1000は、ハードディスク、ソリッドステートメモリ、フラッシュメモリなどの任意の適切なコンピュータ可読媒体であってもよく、記録不可または記録可能の場合があることが理解されよう。コンピュータプログラム1020は、プロセッサシステムに前記変換方法を実行させるための命令を含む。コンピュータ可読媒体は、さらに、または代わりに、一実施形態による方法、例えば第2の計算ネットワークの実行結果を含んでもよい。
【0173】
図7bは、FHEデバイスまたはシステムの一実施形態によるプロセッサシステム1140の概略図を示す。プロセッサシステムは、1つ以上の集積回路1110を備える。1つ以上の集積回路1110のアーキテクチャを図7bに概略的に示す。回路1110は、一実施形態による方法を実行し、および/またはそのモジュールもしくはユニットを実装するためにコンピュータプログラム構成要素を行うための処理ユニット1120、例えばCPUを備える。回路1110は、プログラミングコード、データなどを記憶するためのメモリ1122を備える。メモリ1122の一部は読み取り専用であってもよい。回路1110は、通信要素1126、例えば、アンテナ、コネクタ、またはその両方などを備えることができる。回路1110は、方法で定義された処理の一部またはすべてを行うための専用集積回路1124を備え得る。プロセッサ1120、メモリ1122、専用IC1124、および通信要素1126は、相互接続1130、例えばバスを介して相互に接続され得る。プロセッサシステム1110は、それぞれアンテナおよび/またはコネクタを使用して、接触通信および/または非接触通信のために構成され得る。
【0174】
例えば、一実施形態では、プロセッサシステム1140、例えばFHEシステムまたはデバイスは、プロセッサ回路およびメモリ回路を備えることができ、プロセッサは、メモリ回路に記憶されたソフトウェアを行うように構成される。例えば、プロセッサ回路は、Intel Corei7プロセッサ、ARM Cortex-R8などであり得る。一実施形態では、プロセッサ回路はARM CortexM0であってもよい。メモリ回路は、ROM回路であってもよいし、不揮発性メモリ、例えばフラッシュメモリであってもよい。メモリ回路は、揮発性メモリ、例えばSRAMメモリであってもよい。後者の場合、デバイスは、ソフトウェアを提供するために構成された不揮発性ソフトウェアインターフェース、例えばハードドライブ、ネットワークインターフェースなどを備え得る。
【0175】
デバイス1110は、説明した各構成要素のうちの1つを含むものとして示されているが、さまざまな実施形態では、さまざまな構成要素を複製することができる。例えば、プロセッサ1120は、複数のマイクロプロセッサを含んでもよく、複数のマイクロプロセッサは、本明細書に説明される方法を独立して実行するように構成される、または、複数のプロセッサが協働して本明細書に説明される機能を達成するように、本明細書に説明される方法のステップまたはサブルーチンを行うように構成される。さらに、デバイス1110がクラウド計算システムに実装される場合、さまざまなハードウェア構成要素は別個の物理システムに属していてもよい。例えば、プロセッサ1120は、第1のサーバ内の第1のプロセッサを含み、第2のサーバ内の第2のプロセッサを含むことができる。
【0176】
上述の実施形態は、本開示の主題を限定するものではなく例示するものであり、当業者であれば多くの代替実施形態を設計できることに留意されたい。
【0177】
特許請求の範囲において、括弧の間に置かれた参照符号は、特許請求の範囲を限定するものとして解釈されないものとする。動詞「含む」およびその活用の使用は、請求項に記載されているもの以外の要素またはステップの存在を排除するものではない。要素の前にある冠詞「1つ(a)」または「1つ(an)」は、そのような要素が複数存在することを排除するものではない。要素のリストにつづく「のうちの少なくとも1つ」などの表現は、リストからの要素のすべてまたはサブセットの選択を表す。例えば、「A、B、およびCのうちの少なくとも1つ」という表現は、Aのみ、Bのみ、Cのみ、AとBの両方、AとCの両方、BとCの両方、またはA、B、およびCのすべてを含むものとして理解されるべきである。ここで開示される主題は、いくつかの別個の要素を含むハードウェアによって、および適切にプログラムされたコンピュータによって実装され得る。いくつかの部分を列挙したデバイス請求項では、これらの部分のいくつかは、1つの同じハードウェアアイテムによって具現化され得る。特定の手段が相互に異なる従属請求項に記載されているという単なる事実は、これらの手段の組み合わせが有利に使用できないことを示すものではない。
【0178】
特許請求の範囲において、括弧内の参照は、例示的な実施形態の図面の参照符号または実施形態の公式を参照しており、したがって、特許請求の範囲の分かりやすさを増加させている。これらの参照は、特許請求の範囲を限定するものとして解釈されるべきではない。
図1a
図1b
図1c
図1d
図2
図3
図4a
図4b
図5a
図5b
図6
図7a
図7b
【手続補正書】
【提出日】2024-01-25
【手続補正1】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項1】
関数を計算するように構成された演算の第1の計算ネットワークを、同じ関数を計算するように構成された完全準同型暗号化演算の第2の計算ネットワークに変換するための、コンピュータ実装される方法であって、
- 演算の第1の計算ネットワークは、実数値行列乗算を含む複数の実数値行列演算(y=W.x)と、複数の実数値行列演算のうちの少なくとも1つの結果を入力として受け取る少なくとも複数のさらなる演算(z=Activation(y))とを含み、
- 第1の計算ネットワークを変換することは、
- 拡大係数(α)のセットを決定すること(610)であって、行列演算のそれぞれが拡大係数に対応し、拡大係数は実数である、こと、
- 対応する拡大係数を用いて実数値行列をスケーリングし、スケーリングされた実数値行列を丸めることによって、複数の実数値行列演算に対応する複数の実数値行列(W)を整数値行列に変換すること(620)、
- 複数のさらなる演算を調整して(630)、スケーリングされた行列演算のスケーリングされた結果を入力として受け取ることであって、第2の計算ネットワークは、変換された複数の整数値行列および調整された複数のさらなる演算を含む、こと、
- 第2の計算ネットワークの精度を示す、第2の計算ネットワークの精度尺度を決定すること(640)、
- 精度尺度を改善するために、拡大係数(α)のセットを繰り返し最適化すること(650)
を含む、方法。
【請求項2】
第1の計算ネットワークおよび第2の計算ネットワークはニューラルネットワークである、請求項1に記載の変換方法。
【請求項3】
実数値行列演算は、実数値行列加算(y=W.x+B)をさらに含み、実数値行列演算を変換することは、実数値行列加算に関連付けられた行列(B)を同じ拡大係数を用いてスケーリングすることをさらに含む、請求項1に記載の変換方法。
【請求項4】
- さらなる演算の少なくとも一部は、プログラマブルブートストラッピングとして第2の計算ネットワークに実装される、請求項1に記載の変換方法。
【請求項5】
拡大係数(α)のセットを決定することが、
- 第1の計算ネットワーク内の行列演算に拡大係数をシンボル的に関連付けること、
- 第1の計算ネットワークを通して拡大係数を伝播させ、変換演算の出力に適用される第1の計算ネットワーク内の演算から拡大係数に関する条件を導出することを含む、請求項1に記載の変換方法。
【請求項6】
拡大係数(α)のセットを反復的に最適化することは条件に従う、請求項5に記載の変換方法。
【請求項7】
実数値行列を対応するスケーリングされた整数値行列で置き換えることによって第2の計算ネットワークを導出することと、加算のための実数値行列を対応するスケーリングされた行列で置き換えることと、さらなる演算における演算を調整することとを含む、請求項1に記載の変換方法。
【請求項8】
第1および第2の計算ネットワークは演算間の複数の層を備え、各層は、第1の計算ネットワーク内の層内の値と第2の計算ネットワーク内の対応する層内の対応する値との間の乗算比に対応する関連する層係数を有し、
- 第1の計算ネットワークはジョイン演算を含み、ジョイン演算は2つの異なる層から第1の入力および第2の入力を受け取り、拡大係数は、2つの異なる層に関連付けられた2つの層係数が等しいという条件の下で決定され、ジョイン演算がホモジニアスになる、請求項5に記載の変換方法。
【請求項9】
ジョイン演算は、加算、減算、または連結のうちの1つであり、ジョイン演算は、第2の計算ネットワーク内の暗号化された値に対する対応する加算、減算、または連結として実装される、請求項8に記載の変換方法。
【請求項10】
第2の計算ネットワークは、第1の計算ネットワークに対応する演算と、挿入された演算とを含み、次の演算における拡大係数を等しくするために第2の計算ネットワークに補正演算が挿入され、
- 補正演算はプログラマブルブートストラッピングであり、補正係数が実数である、または
- 補正演算は整数値の乗算であり、補正係数が整数である、請求項1に記載の変換方法。
【請求項11】
さらなる演算を調整することが、
- 入力から拡大係数を除去する(f(x)→f(x/α))こと、および/または
- 出力に拡大係数を適用する(f(x)→βf(x/α))こと
を含む、請求項1に記載の変換方法。
【請求項12】
- 精度尺度は、サンプル入力のセットに対して第1の計算ネットワークおよび第2の計算ネットワークを評価し、評価結果をサンプル出力のセットと比較することによって計算され、第1の計算ネットワークの第1の精度および第2の計算ネットワークの第2の精度を取得し、精度尺度は、第1の精度と第2の精度を比較する、および/または
- 精度尺度は、サンプル入力のセットに対して第2の計算ネットワークを評価し、評価結果をサンプル出力のセットと比較することによって計算され、第2の計算ネットワークの第2の精度を取得し、精度尺度は、第2の精度を所定の精度目標と比較する、
請求項1に記載の変換方法。
【請求項13】
-プロセッサシステムによって実行されると、プロセッサシステムに請求項1から12のいずれか一項に記載の方法を行わせる命令、および
- 請求項1から12のいずれか一項に従って取得された第2のネットワークを表すデータ
のうちのいずれか1つを表すデータ(1020)を含む、一時的または非一時的なコンピュータ可読媒体(1000)。
【請求項14】
関数を計算するように構成された演算の第1の計算ネットワークを、同じ関数を計算するように構成された完全準同型暗号化演算の第2の計算ネットワークに変換するためのシステム(200)であって、
- 実数値行列乗算を含む複数の実数値行列演算(y=W.x)と、複数の実数値行列演算のうちの少なくとも1つの結果を入力として受け取る少なくとも複数のさらなる演算(z=Activation(y))とを含む、演算の第1の計算ネットワークを受け取るための通信インターフェース、
- 第1の計算ネットワークを変換するために構成されたプロセッサシステム
を含み、変換することが、
- 拡大係数(α)のセットを決定すること(610)であって、行列演算のそれぞれが拡大係数に対応し、拡大係数は実数である、こと、
- 対応する拡大係数を用いて実数値行列をスケーリングし、スケーリングされた実数値行列を丸めることによって、複数の実数値行列演算に対応する複数の実数値行列(W)を整数行列に変換すること(620)、
- 複数のさらなる演算を調整して(630)、スケーリングされた行列演算のスケーリングされた結果を入力として受け取ることであって、第2の計算ネットワークは、変換された複数の整数行列および調整された複数のさらなる演算を含む、こと、
- 第2の計算ネットワークの精度を示す、第2の計算ネットワークの精度尺度を決定すること(640)、
- 精度尺度を改善するために、拡大係数のセット(α)を繰り返し最適化する(650)ことを含む、システム(200)。
【国際調査報告】