(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-10-07
(45)【発行日】2024-10-16
(54)【発明の名称】秘密共役勾配法計算方法、秘密共役勾配法計算システム、秘密計算装置、およびプログラム
(51)【国際特許分類】
G09C 1/00 20060101AFI20241008BHJP
G06F 17/12 20060101ALI20241008BHJP
【FI】
G09C1/00 650Z
G06F17/12
(21)【出願番号】P 2023525230
(86)(22)【出願日】2021-06-02
(86)【国際出願番号】 JP2021020959
(87)【国際公開番号】W WO2022254599
(87)【国際公開日】2022-12-08
【審査請求日】2023-11-08
(73)【特許権者】
【識別番号】000004226
【氏名又は名称】日本電信電話株式会社
(74)【代理人】
【識別番号】100121706
【氏名又は名称】中尾 直樹
(74)【代理人】
【識別番号】100128705
【氏名又は名称】中村 幸雄
(74)【代理人】
【識別番号】100147773
【氏名又は名称】義村 宗洋
(72)【発明者】
【氏名】深見 匠
(72)【発明者】
【氏名】五十嵐 大
(72)【発明者】
【氏名】張 一凡
【審査官】金沢 史明
(56)【参考文献】
【文献】特開2005-018366(JP,A)
【文献】国際公開第2020/246018(WO,A1)
【文献】深見 匠, 他,高精度かつ高速な秘密線形回帰の実装と評価,2021年暗号と情報セキュリティシンポジウム,2021年01月,4B2-2,pp. 1-7
(58)【調査した分野】(Int.Cl.,DB名)
G09C 1/00
G06F 17/12
(57)【特許請求の範囲】
【請求項1】
複数の秘密計算装置を含む秘密共役勾配法計算システムにより実行される、N個の対称正定値行列A
1, …, A
Nからなる多次元行列A~の秘匿値と、N個のベクトルb
→
1, …, b
→
Nからなる行列Bの秘匿値とを入力とし、A
1
-1b
→
1, …, A
N
-1b
→
Nからなる行列Xの秘匿値を出力する秘密共役勾配法計算方法であって、
・
Tは行列・の転置を表し、diag(・)は行列・の対角成分を出力する関数を表し、nは所定の自然数を表し、0
nは長さnで要素がすべて0のベクトルを表し、
各秘密計算装置の初期化部が、次式を秘密計算することで、前記行列Xの秘匿値、行列R=(r
→
1, …, r
→
N)の秘匿値、行列P=(p
→
1, …, p
→
N)の秘匿値、およびベクトルγ
→の秘匿値を生成し、
【数18】
各秘密計算装置の第一計算部が、1以上N以下の各整数iについて、行列計算で必要な通信を1回にまとめて行うように、次式を秘密計算することで、ベクトルα
→=(α
1, …, α
N)の秘匿値を生成し、
【数19】
各秘密計算装置の第二計算部が、次式を秘密計算することで、前記行列Xの秘匿値を更新し、
【数20】
各秘密計算装置の第三計算部が、1以上N以下の各整数iについて、行列計算で必要な通信を1回にまとめて行うように、次式を秘密計算することで、前記行列Rの秘匿値を更新し、
【数21】
各秘密計算装置の第四計算部が、N個の値同士の乗算を1個のベクトルの要素同士の乗算に変換しながら、次式を秘密計算することで、ベクトルβ
→の秘匿値を生成し、
【数22】
各秘密計算装置の第五計算部が、次式を秘密計算することで、前記行列Pの秘匿値を更新し、
【数23】
各秘密計算装置の第六計算部が、N個の値同士の乗算を1個のベクトルの要素同士の乗算に変換しながら、次式を秘密計算することで、前記ベクトルγ
→の秘匿値を更新する、
【数24】
秘密共役勾配法計算方法。
【請求項2】
請求項1に記載の秘密共役勾配法計算方法であって、
前記初期化部、第四計算部、および前記第六計算部は、
前記行列Rに含まれるベクトルr
→
1, …, r
→
Nを連結した連結ベクトルr
→を生成し、2個の前記連結ベクトルr
→の要素同士を乗算した要素積ベクトルg
→を生成し、前記要素積ベクトルg
→の要素をn個ずつに分割してそれぞれ合計した結果ベクトルe
→を求めることで、R
TRを計算する、
秘密共役勾配法計算方法。
【請求項3】
請求項1に記載の秘密共役勾配法計算方法であって、
前記第一計算部および前記第三計算部は、
1以上N以下の各整数iについて、前記行列Pに含まれるベクトルp
→
iと前記多次元行列A~に含まれる対称正定値行列A
iとを行列計算するとき、その行列計算を秘密計算する際に必要となるローカル演算をN個まとめて行い、その行列計算で必要となる通信を1回の通信でまとめて行う、
秘密共役勾配法計算方法。
【請求項4】
複数の秘密計算装置を含み、N個の対称正定値行列A
1, …, A
Nからなる多次元行列A~の秘匿値と、N個のベクトルb
→
1, …, b
→
Nからなる行列Bの秘匿値とを入力とし、A
1
-1b
→
1, …, A
N
-1b
→
Nからなる行列Xの秘匿値を出力する秘密共役勾配法計算システムであって、
・
Tは行列・の転置を表し、diag(・)は行列・の対角成分を出力する関数を表し、nは所定の自然数を表し、0
nは長さnで要素がすべて0のベクトルを表し、
各秘密計算装置は、
次式を秘密計算することで、前記行列Xの秘匿値、行列R=(r
→
1, …, r
→
N)の秘匿値、行列P=(p
→
1, …, p
→
N)の秘匿値、およびベクトルγ
→の秘匿値を生成する初期化部と、
【数25】
1以上N以下の各整数iについて、行列計算で必要な通信を1回にまとめて行うように、次式を秘密計算することで、ベクトルα
→=(α
1, …, α
N)の秘匿値を生成する第一計算部と、
【数26】
次式を秘密計算することで、前記行列Xの秘匿値を更新する第二計算部と、
【数27】
1以上N以下の各整数iについて、行列計算で必要な通信を1回にまとめて行うように、次式を秘密計算することで、前記行列Rの秘匿値を更新する第三計算部と、
【数28】
N個の値同士の乗算を1個のベクトルの要素同士の乗算に変換しながら、次式を秘密計算することで、ベクトルβ
→の秘匿値を生成する第四計算部と、
【数29】
次式を秘密計算することで、前記行列Pの秘匿値を更新する第五計算部と、
【数30】
N個の値同士の乗算を1個のベクトルの要素同士の乗算に変換しながら、次式を秘密計算することで、前記ベクトルγ
→の秘匿値を更新する第六計算部と、
【数31】
を含む秘密共役勾配法計算システム。
【請求項5】
請求項4に記載の秘密共役勾配法計算システムにおいて用いられる前記秘密計算装置。
【請求項6】
請求項1から3のいずれかに記載の秘密共役勾配法計算方法の各ステップをコンピュータに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
この発明は、秘密計算技術に関し、特に、共役勾配法を秘密計算する技術に関する。
【背景技術】
【0002】
共役勾配法は、対称正定値行列を係数とする連立一次方程式を解くためのアルゴリズムである。共役勾配法は、対称正定値行列Aとベクトルb→があるとき、対称正定値行列Aの逆行列A-1を計算せずに、直接A-1b→を計算する手法である。共役勾配法は、機械学習等でよく用いられている。
【0003】
秘密計算上で機械学習を行う場合、共役勾配法を効率よく計算する必要がある。特許文献1には、秘密計算で共役勾配法を効率的に計算する技術が開示されている。
【先行技術文献】
【特許文献】
【0004】
【発明の概要】
【発明が解決しようとする課題】
【0005】
特許文献1に記載された従来技術は、1個の対称正定値行列とベクトルの組に対する共役勾配法を効率よく計算する技術である。そのため、特許文献1に記載された従来技術を用いて、N個の対称正定値行列とベクトルの組に対する共役勾配法を計算するためには、N回の共役勾配法を計算する必要があり、処理時間がO(N)で増加する。
【0006】
この発明の目的は、上記のような技術的課題に鑑みて、複数の対称正定値行列とベクトルの組に対する共役勾配法を効率的に計算することである。
【課題を解決するための手段】
【0007】
この発明の一態様の秘密共役勾配法計算方法は、複数の秘密計算装置を含む秘密共役勾配法計算システムにより実行される、N個の対称正定値行列A
1, …, A
Nからなる多次元行列A~の秘匿値と、N個のベクトルb
→
1, …, b
→
Nからなる行列Bの秘匿値とを入力とし、A
1
-1b
→
1, …, A
N
-1b
→
Nからなる行列Xの秘匿値を出力する秘密共役勾配法計算方法であって、・
Tは行列・の転置を表し、diag(・)は行列・の対角成分を出力する関数を表し、nは所定の自然数を表し、0
nは長さnで要素がすべて0のベクトルを表し、各秘密計算装置の初期化部が、次式を秘密計算することで、行列Xの秘匿値、行列R=(r
→
1, …, r
→
N)の秘匿値、行列P=(p
→
1, …, p
→
N)の秘匿値、およびベクトルγ
→の秘匿値を生成し、
【数1】
各秘密計算装置の第一計算部が、1以上N以下の各整数iについて、行列計算で必要な通信を1回にまとめて行うように、次式を秘密計算することで、ベクトルα
→=(α
1, …, α
N)の秘匿値を生成し、
【数2】
各秘密計算装置の第二計算部が、次式を秘密計算することで、行列Xの秘匿値を更新し、
【数3】
各秘密計算装置の第三計算部が、1以上N以下の各整数iについて、行列計算で必要な通信を1回にまとめて行うように、次式を秘密計算することで、行列Rの秘匿値を更新し、
【数4】
各秘密計算装置の第四計算部が、N個の値同士の乗算を1個のベクトルの要素同士の乗算に変換しながら、次式を秘密計算することで、ベクトルβ
→の秘匿値を生成し、
【数5】
各秘密計算装置の第五計算部が、次式を秘密計算することで、行列Pの秘匿値を更新し、
【数6】
各秘密計算装置の第六計算部が、N個の値同士の乗算を1個のベクトルの要素同士の乗算に変換しながら、次式を秘密計算することで、ベクトルγ
→の秘匿値を更新する。
【数7】
【発明の効果】
【0008】
この発明によれば、複数の対称正定値行列とベクトルの組に対する共役勾配法を1回の共役勾配法で計算することができるため、効率的である。
【図面の簡単な説明】
【0009】
【
図1】
図1は、秘密共役勾配法計算システムの機能構成を例示する図である。
【
図2】
図2は、秘密計算装置の機能構成を例示する図である。
【
図3】
図3は、秘密共役勾配法計算方法の処理手続きを例示する図である。
【
図4】
図4は、コンピュータの機能構成を例示する図である。
【発明を実施するための形態】
【0010】
はじめに、この明細書における表記方法および用語の定義について説明する。
【0011】
<表記方法>
文中で使用する記号「→」(上付き右矢印)「~」(チルダ)は、本来直前の文字の真上に記載されるべきものであるが、テキスト記法の制限により、当該文字の直後に記載する。数式中においてはこれらの記号は本来の位置、すなわち文字の真上に記述している。例えば、「a→」「C~」は数式中では次式で表される。
【0012】
【0013】
「→」(上付き右矢印)が付された文字は、ベクトルを表す。例えば、N個の値a1, a2, …, aNからなるベクトルをa→=(a1, a2, …, aN)と表記する。ベクトルの要素の番号は、下付き添え字で表す。例えば、ベクトルa→のi番目の要素は、aiと表記する。
【0014】
小文字のアルファベットで表されるベクトルがあるとき、同じアルファベットの大文字は、複数のベクトルからなる行列を表す。例えば、N個のベクトルb→
1, b→
2, …, b→
Nからなる行列をB=(b→
1, b→
2, …, b→
N)と表記する。
【0015】
ベクトルの要素の番号は下付き添え字で表すが、ベクトルに番号を表す下付き添え字が付されている場合、下付き添え字をカンマで区切り、ベクトルの番号とベクトルの要素の番号を併記する。例えば、i番目のベクトルb→iのj番目の要素は、b
i,j
と表記する。
【0016】
「~」(チルダ)が付された大文字アルファベットは、多次元行列を表す。例えば、N個の行列C1, C2, …, CNをもつ多次元行列をC~=(C1, C2, …, CN)と表記する。
【0017】
[・]は値・を暗号化した秘匿文を表す。暗号化が秘密分散により行われた場合、「シェア」と呼ぶ。
【0018】
α→βはαからβに変換することを表す。
【0019】
α←βはαにβを代入することを表す。
【0020】
・T(上付き添え字のT)は行列・の転置を表す。
【0021】
α→Tβ→は、ベクトルα→とベクトルβ→の内積を表す。
【0022】
<秘密計算>
暗号化された数値を復元することなく特定の演算結果を得る方法として、秘密計算と呼ばれる方法がある(例えば、参考文献1参照)。参考文献1に記載された方法では、3つの秘密計算装置に数値の断片を分散させるという暗号化を行い、3つの秘密計算装置が協調計算を行うことにより、数値を復元することなく、加減算、定数加算、乗算、定数倍、論理演算(否定、論理積、論理和、排他的論理和)、データ形式変換(整数、二進数)の結果を3つの秘密計算装置に分散された状態、すなわち暗号化されたまま保持させることができる。
【0023】
〔参考文献1〕千田浩司、濱田浩気、五十嵐大、高橋克巳、“軽量検証可能3パーティ秘匿関数計算の再考”、コンピュータセキュリティシンポジウム2010、2010年
【0024】
<従来の共役勾配法>
従来の共役勾配法のアルゴリズム(Algorithm 1)を以下に示す。このアルゴリズムは、対称正定値行列Aとベクトルb
→と閾値δとを入力とし、A
-1b
→の計算結果を出力する。共役勾配法を秘密計算で行う場合、アルゴリズム中で扱う値・をすべてシェア[・]に置き換えればよい。
【表1】
【0025】
ここで、0nは長さnで要素がすべて0のベクトルを表す。
【0026】
<提案の共役勾配法>
本発明で提案する共役勾配法のアルゴリズム(Algorithm 2)を以下に示す。このアルゴリズムは、N個の対称正定値行列A
1, A
2, …, A
Nからなる多次元行列A~=(A
1, A
2, …, A
N)とN個のベクトルb
→
1, b
→
2, …, b
→
Nからなる行列B=(b
→
1, b
→
2, …, b
→
N)と反復回数δとを入力とし、N個のベクトルx
→
1, x
→
2, …, x
→
Nからなる行列X=(x
→
1, x
→
2, …, x
→
N)(ただし、x
→
i=A
i
-1b
→
i、i=1, …, N)を出力する。
【表2】
【0027】
ここで、diag(・)は、行列・の対角成分を出力する関数であり、ステップ7.の割り算は、ベクトルの要素ごとの割り算を意味する。
【0028】
Algorithm 2を計算するために、以下の要素技術1、2が用いられる。要素技術1は、複数のベクトル同士の内積をまとめて計算する方法である。要素技術2は、複数のベクトルと行列の計算をまとめて行う方法である。要素技術1は、Algorithm 2のステップ3, 7, 9を計算するために用いられる。要素技術2は、Algorithm 2のステップ4, 6を計算するために用いられる。
【0029】
<要素技術1:ベクトル同士の内積をまとめて計算する方法>
要素技術1は、行列C=(c→
1, c→
2, …, c→
N)と行列D=(d→
1, d→
2, …, d→
N)があるとき、e→←CTD=(c→
1
Td→
1, c→
2
Td→
2, …, c→
N
Td→
N)を計算する手法である。なお、行列C, Dに含まれる各ベクトル(c→
1, c→
2, …, c→
N), (d→
1, d→
2, …, d→
N)は、すべて長さnとする。ここで、nは所定の自然数である。
【0030】
まず、行列Cと行列Dの要素であるベクトルをそれぞれ連結し、連結ベクトルc→とd→を生成する。
C=(c→
1, c→
2, …, c→
N)→c→=(c1,1, c1,2, …, c1,n, c2,1, c2,2, …, c2,n, …, cN,1, cN,2, …, cN,n)
D=(d→
1, d→
2, …, d→
N)→d→=(d1,1, d1,2, …, d1,n, d2,1, d2,2, …, d2,n, …, dN,1, dN,2, …, dN,n)
【0031】
次に、行列Cと行列Dの要素同士を乗算し、要素積ベクトルg→を生成する。
g→←c→×d→=(c1,1×d1,1, c1,2×d1,2, …, c1,n×d1,n, c2,1×d2,1, c2,2×d2,2, …, c2,n×d2,n,…, cN,1×dN,1, cN,2×dN,2, …, cN,n×dN,n)
【0032】
最後に、要素積ベクトルg→の要素をn個ずつに分割し、n個の要素それぞれを合計し、結果ベクトルe→を生成する。
e→←(sum(c1,1×d1,1, c1,2×d1,2, …, c1,n×d1,n), sum(c2,1×d2,1, c2,2×d2,2, …, c2,n×d2,n), …, sum(cN,1×dN,1, cN,2×dN,2, …, cN,n×dN,n))
【0033】
従来は、N個のベクトル同士の内積を計算するために、N回の値同士の乗算が必要であった。要素技術1を用いることにより、N個のベクトル同士の内積を、要素同士の乗算1回で計算できるようになる。秘密計算では、値同士の乗算もベクトルの要素同士の乗算も必要となる通信は1回である。そのため、N個の値同士の乗算を、要素数がNのベクトルの要素同士の乗算に変換すれば、通信回数をN分の1に低減することができる。秘密計算では、特に、乗算に多くの通信量が必要となるため、乗算の回数を低減させることで、処理を大幅に高速化できる。
【0034】
<要素技術2:ベクトルと行列の計算をまとめて行う方法>
要素技術2は、行列C=(c→
1, c→
2, …, c→
N)と多次元行列D~=(D1, D2, …, DN)があるとき、F←(c→
1
TD1, c→
2
TD2, …, c→
N
TDN)を計算する手法である。
【0035】
秘密計算で行列計算を行う際は、シェアに対して乗算と加算からなるローカル演算を行った後、パーティ間でローカルの演算結果を通信する。そのため、従来技術でN個の行列計算を行う場合には、N回の通信を行う必要がある。そこで、N個の行列計算それぞれで必要となるローカル演算を先にまとめて行い、その後各行列計算で必要となる通信を1回でまとめて行う。これにより、N個の行列計算を1回の通信で行うことができる。通信は秘密計算においてボトルネックとなるため、通信回数を低減することで、処理を高速化できる。
【0036】
以下、この発明の実施の形態について詳細に説明する。なお、図面中において同じ機能を有する構成部には同じ番号を付し、重複説明を省略する。
【0037】
[実施形態]
図1を参照して、実施形態の秘密共役勾配法計算システムの構成例を説明する。秘密共役勾配法計算システム100は、例えば、
図1に示すように、K(≧2)台の秘密計算装置1
1, …, 1
Kを含む。本実施形態では、秘密計算装置1
1, …, 1
Kはそれぞれ通信網9へ接続される。通信網9は、接続される各装置が相互に通信可能なように構成された回線交換方式もしくはパケット交換方式の通信網であり、例えばインターネットやLAN(Local Area Network)、WAN(Wide Area Network)などを用いることができる。なお、各装置は必ずしも通信網9を介してオンラインで通信可能である必要はない。例えば、秘密計算装置1
1, …, 1
Kへ入力する情報を磁気テープやUSBメモリなどの可搬型記録媒体に記憶し、その可搬型記録媒体から秘密計算装置1
1, …, 1
Kへオフラインで入力するように構成してもよい。
【0038】
図2を参照して、実施形態の秘密共役勾配法計算システム100に含まれる秘密計算装置1
k(k=1, …, K)の構成例を説明する。秘密計算装置1
kは、例えば、
図2に示すように、入力部11、初期化部12、第一計算部13、第二計算部14、第三計算部15、第四計算部16、第五計算部17、第六計算部18、反復制御部19、および出力部20を含む。この秘密計算装置1
k(k=1, …, K)が他の秘密計算装置1
k'(k'=1, …, K、ただしk≠k')と協調しながら
図3に示す各ステップの処理を行うことにより本実施形態の秘密共役勾配法計算方法が実現される。
【0039】
秘密計算装置は、例えば、中央演算処理装置(CPU: Central Processing Unit)、主記憶装置(RAM: Random Access Memory)などを有する公知又は専用のコンピュータに特別なプログラムが読み込まれて構成された特別な装置である。秘密計算装置は、例えば、中央演算処理装置の制御のもとで各処理を実行する。秘密計算装置に入力されたデータや各処理で得られたデータは、例えば、主記憶装置に格納され、主記憶装置に格納されたデータは必要に応じて中央演算処理装置へ読み出されて他の処理に利用される。秘密計算装置の各処理部は、少なくとも一部が集積回路等のハードウェアによって構成されていてもよい。
【0040】
図3を参照して、実施形態の秘密共役勾配法計算システム100が実行する秘密共役勾配法計算方法の処理手続きを説明する。なお、以下の説明中の数式では、表記を簡略化するために秘匿値を表す括弧書き([・])は省略しているが、すべての値、ベクトル、行列は秘匿化されているものとする。
【0041】
ステップS11において、各秘密計算装置1kの入力部11へ、N個の対称正定値行列A1, A2, …, ANからなる多次元行列A~=(A1, A2, …, AN)の秘匿値[A~]、N個のベクトルb→
1, b→
2, …, b→
Nからなる行列B=(b→
1, b→
2, …, b→
N)の秘匿値[B]、および反復回数δの秘匿値[δ]が入力される。反復回数δは、計算結果の精度と処理速度を鑑みて設定すればよいが、共役勾配法では10程度に設定すればよいことが知られている。多次元行列A~の秘匿値[A~]は、第一計算部13へ出力される。行列Bの秘匿値[B]は、初期化部12へ出力される。反復回数δの秘匿値[δ]は、反復制御部19へ出力される。
【0042】
ステップS12において、各秘密計算装置1kの初期化部12は、式(1)(2)(3)を秘密計算することで、N個のベクトルx→
1, …, x→
Nからなる行列X=(x→
1, …, x→
N)の秘匿値[X]、N個のベクトルr→
1, …, r→
Nからなる行列R=(r→
1, …, r→
N)の秘匿値[R]、N個のベクトルp→
1, …, p→
Nからなる行列P=(p→
1, …, p→
N)の秘匿値[P]、およびベクトルγ→の秘匿値[γ→]を生成する。行列X, R, Pに含まれる各ベクトル(x→
1, …, x→
N), (r→
1, …, r→
N), (p→
1, …, p→
N)およびベクトルγ→は、すべて長さnとする。また、初期化部12は、反復処理のインデックスjをj=1に初期化する。生成された行列Xの秘匿値[X]は、第二計算部14へ出力される。生成された行列R, Pの秘匿値[R], [P]は、第一計算部13へ出力される。生成されたベクトルγ→の秘匿値[γ→]は、第四計算部16へ出力される。
【0043】
【0044】
初期化部12は、式(3)のRTRを、上記要素技術1を用いてN個の乗算を1個のベクトルの要素同士の乗算に変換しながら秘密計算する。すなわち、式(3)のRTRを計算する際、以下の手順を実行する。まず、行列Rに含まれるベクトルr→
1, r→
2, …, r→
Nを連結し、連結ベクトルr→=(r1,1,…, r1,n, r2,1, …, r2,n, …, rN,1, …, rN,n)を生成する。次に、2個の連結ベクトルr→の要素同士を乗算し、要素積ベクトルg→←r→×r→=(r1,1×r1,1,…, r1,n×r1,n, r2,1×r2,1, …, r2,n×r2,n, …, rN,1×rN,1, …, rN,n×rN,n)を生成する。最後に、要素積ベクトルg→の要素をn個ずつに分割し、n個の要素それぞれを合計し、結果ベクトルe→←(sum(r1,1×r1,1,…, r1,n×r1,n), sum(r2,1×r2,1, …, r2,n×r2,n), …, sum(rN,1×rN,1, …, rN,n×rN,n))を生成する。
【0045】
ステップS13において、各秘密計算装置1kの第一計算部13は、1以上N以下の各整数iについて、式(4)をまとめて秘密計算することで、ベクトルα→=(α1, …, αN)の秘匿値[α→]を生成する。生成されたベクトルα→の秘匿値[α→]は、第二計算部14へ出力される。
【0046】
【0047】
第一計算部13は、式(4)のp→
i
TAip→
iを、上記要素技術2を用いてN個の行列計算で必要な通信を1回にまとめて行うように秘密計算する。すなわち、p→
i
TAip→
iのそれぞれで必要となるローカル演算を先にまとめて行い、その後p→
i
TAip→
iのそれぞれで必要となる通信を1回でまとめて行う。
【0048】
ステップS14において、各秘密計算装置1kの第二計算部14は、式(5)を秘密計算することで、行列Xの秘匿値[X]を更新する。更新された行列Xの秘匿値[X]は、出力部20へ出力される。
【0049】
【0050】
ステップS15において、各秘密計算装置1kの第三計算部15は、1以上N以下の各整数iについて、式(6)をまとめて秘密計算することで、行列Rの秘匿値[R]を更新する。更新された行列Rの秘匿値[R]は、反復制御部19へ出力される。
【0051】
【0052】
第三計算部15は、式(6)のAip→
iを、第一計算部13と同様に、上記要素技術2を用いてN個の行列計算で必要な通信を1回にまとめて行うように秘密計算する。
【0053】
ステップS16において、各秘密計算装置1kの第四計算部16は、式(7)を秘密計算することで、ベクトルβ→の秘匿値[β→]を生成する。生成されたベクトルβ→の秘匿値[β→]は、第五計算部17へ出力される。
【0054】
【0055】
第四計算部16は、式(7)のRTRを、初期化部12と同様に、上記要素技術1を用いてN個の乗算を1個のベクトルの要素同士の乗算に変換しながら秘密計算する。
【0056】
ステップS17において、各秘密計算装置1kの第五計算部17は、式(8)を秘密計算することで、行列Pの秘匿値[P]を更新する。更新された行列Pの秘匿値[P]は、第一計算部13へ出力される。
【0057】
【0058】
ステップS18において、各秘密計算装置1kの第六計算部18は、式(9)を秘密計算することで、ベクトルγ→の秘匿値[γ→]を更新する。更新されたベクトルγ→の秘匿値[γ→]は、第四計算部16へ出力される。
【0059】
【0060】
第六計算部18は、式(9)のRTRを、初期化部12と同様に、上記要素技術1を用いてN個の乗算を1個のベクトルの要素同士の乗算に変換しながら秘密計算する。
【0061】
ステップS19-1において、各秘密計算装置1kの反復制御部19は、インデックスjが反復回数δ以上となっているか否か、すなわちj≧δの真偽を判定する。j≧δが偽、すなわちj<δであれば、ステップS19-2へ処理を進める。j≧δが真であれば、ステップS20へ処理を進める。ステップS19-2において、各秘密計算装置1kの反復制御部19は、jをインクリメント、すなわちj←j+1を計算し、ステップS13へ処理を戻す。言い換えると、反復制御部19は、第一計算部13から第六計算部18までをδ回繰り返し実行する制御を行う。
【0062】
ステップS20において、各秘密計算装置1kの出力部20は、行列Xの秘匿値[X]をA1
-1b→
1, A2
-1b→
2, …, AN
-1b→
Nの秘匿値として出力する。
【0063】
[実施例1]
この発明の実施例1は、Algorithm 2の共役勾配法を用いて線形回帰を解く例である。線形回帰のモデルを求める式は、式(10)である。
【0064】
【0065】
逆行列は処理が重いため、式(10)は一般的に共役勾配法を用いて解かれる。Algorithm 2の共役勾配法を用いることで、それぞれ異なるデータセットを用いた複数の線形回帰モデルを、1回の共役勾配法でまとめて学習することができる。
【0066】
[実施例2]
この発明の実施例2は、Algorithm 2の共役勾配法を用いてリッジ回帰を解く例である。リッジ回帰のモデルを求める式は、式(11)である。
【0067】
【0068】
式(11)のαはハイパーパラメタを表しており、通常リッジ回帰を行う際は任意の値を設定して学習を行う。最適なハイパーパラメタの値は事前にわからないため、それぞれ異なる複数のハイパーパラメタを設定して、何回も学習する必要があることが課題となっている。Algorithm 2の共役勾配法を用いることで、それぞれ異なる複数のハイパーパラメタを設定した場合のリッジ回帰モデルを、1回の共役勾配法でまとめて学習することができる。これにより、最適なモデルを効率的に学習することができる。
【0069】
以上、この発明の実施の形態について説明したが、具体的な構成は、これらの実施の形態に限られるものではなく、この発明の趣旨を逸脱しない範囲で適宜設計の変更等があっても、この発明に含まれることはいうまでもない。実施の形態において説明した各種の処理は、記載の順に従って時系列に実行されるのみならず、処理を実行する装置の処理能力あるいは必要に応じて並列的にあるいは個別に実行されてもよい。
【0070】
[プログラム、記録媒体]
上記実施形態で説明した各装置における各種の処理機能をコンピュータによって実現する場合、各装置が有すべき機能の処理内容はプログラムによって記述される。そして、このプログラムを
図4に示すコンピュータの記憶部1020に読み込ませ、演算処理部1010、入力部1030、出力部1040などに動作させることにより、上記各装置における各種の処理機能がコンピュータ上で実現される。
【0071】
この処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体は、例えば、非一時的な記録媒体であり、磁気記録装置、光ディスク等である。
【0072】
また、このプログラムの流通は、例えば、そのプログラムを記録したDVD、CD-ROM等の可搬型記録媒体を販売、譲渡、貸与等することによって行う。さらに、このプログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することにより、このプログラムを流通させる構成としてもよい。
【0073】
このようなプログラムを実行するコンピュータは、例えば、まず、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、一旦、自己の非一時的な記憶装置である補助記録部1050に格納する。そして、処理の実行時、このコンピュータは、自己の非一時的な記憶装置である補助記録部1050に格納されたプログラムを一時的な記憶装置である記憶部1020に読み込み、読み込んだプログラムに従った処理を実行する。また、このプログラムの別の実行形態として、コンピュータが可搬型記録媒体から直接プログラムを読み込み、そのプログラムに従った処理を実行することとしてもよく、さらに、このコンピュータにサーバコンピュータからプログラムが転送されるたびに、逐次、受け取ったプログラムに従った処理を実行することとしてもよい。また、サーバコンピュータから、このコンピュータへのプログラムの転送は行わず、その実行指示と結果取得のみによって処理機能を実現する、いわゆるASP(Application Service Provider)型のサービスによって、上述の処理を実行する構成としてもよい。なお、本形態におけるプログラムには、電子計算機による処理の用に供する情報であってプログラムに準ずるもの(コンピュータに対する直接の指令ではないがコンピュータの処理を規定する性質を有するデータ等)を含むものとする。
【0074】
また、この形態では、コンピュータ上で所定のプログラムを実行させることにより、本装置を構成することとしたが、これらの処理内容の少なくとも一部をハードウェア的に実現することとしてもよい。