JP2018116561A - Delayed Sparse Matrix - Google Patents
Delayed Sparse Matrix Download PDFInfo
- Publication number
- JP2018116561A JP2018116561A JP2017007741A JP2017007741A JP2018116561A JP 2018116561 A JP2018116561 A JP 2018116561A JP 2017007741 A JP2017007741 A JP 2017007741A JP 2017007741 A JP2017007741 A JP 2017007741A JP 2018116561 A JP2018116561 A JP 2018116561A
- Authority
- JP
- Japan
- Prior art keywords
- matrix
- memory
- calculation
- procedure
- memory usage
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/16—Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Pure & Applied Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Computational Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Theoretical Computer Science (AREA)
- Computing Systems (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Complex Calculations (AREA)
Abstract
【課題】メモリに収まりきらない行列データが現われる計算をメモリに収まるようにする。【解決手段】メモリに収まりきらないmatrixとのmatrix productのみが必要で、matrix productの演算手順だけなら、より少ないメモリで表現できる場合には、その手順をメモリに保存してmatrix productの演算結果が必要になったら毎回その手順を実行して演算結果を生成することで、メモリ使用量を減らす。【選択図】なし
Description
本発明は matrix を使った計算において、
matrix を遅延評価で表現することで、
メモリ使用量を減らす方法である。
matrix を遅延評価で表現することで、
メモリ使用量を減らす方法である。
1000x1000の diagonal sparse matrix を考える。
この matrix の対角成分が 2,3,2,3,2,3,... と同じ成分が連続している場合、
従来の sparse matrix の表現方法では対角成分全てを格納する大きさ1000の配列が必要となる。
しかし、この matrix は簡単なプログラムで生成できる。
例えば python のコードで書くと
lambda i,j: (2 if i%2==0 else 3) if i==j else 0
で表わせる。
matrix の (i,j) 成分が必要になったら、毎回この手順を評価して値を得るようにすることで、 matrix を表現できる。
このコードの文字列は大きさ1000の配列よりはるかに小さい。
このように matrix を手順で表現し、その手順を遅延評価して利用することで、
メモリ使用量を大幅に減らすことができる。
ただし計算時間が増大するため、この方法が使われることは特殊な実装でしかない。
しかし近年は巨大なデータの統計処理が頻繁に行なわれるようになったため、この方法が有効な場面は増えてきている。
この matrix の対角成分が 2,3,2,3,2,3,... と同じ成分が連続している場合、
従来の sparse matrix の表現方法では対角成分全てを格納する大きさ1000の配列が必要となる。
しかし、この matrix は簡単なプログラムで生成できる。
例えば python のコードで書くと
lambda i,j: (2 if i%2==0 else 3) if i==j else 0
で表わせる。
matrix の (i,j) 成分が必要になったら、毎回この手順を評価して値を得るようにすることで、 matrix を表現できる。
このコードの文字列は大きさ1000の配列よりはるかに小さい。
このように matrix を手順で表現し、その手順を遅延評価して利用することで、
メモリ使用量を大幅に減らすことができる。
ただし計算時間が増大するため、この方法が使われることは特殊な実装でしかない。
しかし近年は巨大なデータの統計処理が頻繁に行なわれるようになったため、この方法が有効な場面は増えてきている。
べき乗法のような matrix product の演算結果のみが必要となる場合を考える。
matrix product を線形写像とみなせば、この写像演算の遅延評価によって演算結果を表現できる。
例えば、前述の diagonal sparse matrix にベクトルxをかけた結果は python のコードで書くと
lambda i,x: (2*x[i] if i%2==0 else 3*x[i])
で表わされ、同様にはるかに少ないメモリ使用量で表現できる。
同様の事は加算などの他の演算にも言える。
matrix product を線形写像とみなせば、この写像演算の遅延評価によって演算結果を表現できる。
例えば、前述の diagonal sparse matrix にベクトルxをかけた結果は python のコードで書くと
lambda i,x: (2*x[i] if i%2==0 else 3*x[i])
で表わされ、同様にはるかに少ないメモリ使用量で表現できる。
同様の事は加算などの他の演算にも言える。
matrix 演算を遅延評価で表現する方法としては、既に expression templates と呼ばれる方法がある。
しかし expression templates は計算時間を減らす方法であり、メモリ使用量を減らす方法としては使われていない。
ここで述べた方法は逆に計算時間を増加させるため単純に expression templates を適用しただけでは実現できない。
しかし expression templates は計算時間を減らす方法であり、メモリ使用量を減らす方法としては使われていない。
ここで述べた方法は逆に計算時間を増加させるため単純に expression templates を適用しただけでは実現できない。
近年ビデオカードのGPUを使った計算方法が注目されている。
一般的にGPUは少ないメモリしか持たない。
GPUの少ないメモリに大きな matrix のデータを格納できるとCPUよりも高速な計算が可能となる。
そのために前述の遅延評価でメモリ使用量の減少させる方法を使うことができる。
一般的にGPUは少ないメモリしか持たない。
GPUの少ないメモリに大きな matrix のデータを格納できるとCPUよりも高速な計算が可能となる。
そのために前述の遅延評価でメモリ使用量の減少させる方法を使うことができる。
計算の途中段階でのメモリ使用量を減らすことで今迄は不可能だった大規模なデータの計算が可能な場合もある。
1つの例としてcorrespondence analysis がある。
correspondence analysis の入力として与えられる
contingency table は一般的には sparse matrix である。
しかし計算の途中段階の singular value decomposition を行なう部分に注目すると、
singular value decomposition にかける直前の matrix は必ず dense matrix となりメモリ使用量が大幅に増加する。
具体的には
S=P - r * c.T
は必ず dense matrix となる。
ここで N を contingency table を表わす python scipy library の sparse matrix とした時、
P = N / N.sum()
r = P.sum(axis=1)
c = P.sum(axis=0).T
とした。
r * c.T が必ず dense matrix となるため N が sparse matrix であっても S は dense matrix となってしまう。
N が 1000x1000 の diagonal sparse matrix で非零要素が対角成分の1000個しかない場合でも、 S は 1000x1000 の dense matrix となり1000倍のメモリが必要になる。
この matrix S は前述の遅延評価で表現すると、contingency table の sparse matrix N とほぼ同程度のメモリ使用量で表現できる。
randomized singular value decomposition の様な入力 matrix に matrix product しか行なわない方法で
singular value decomposition の計算をする場合は matrix product を遅延評価で表わした matrix を使うことができる。
具体的には matrix product S*X を
lambda X:P*X+r*(c.T *X)
の遅延評価で表現すれば contingency table の sparse matrix N とほぼ同程度のメモリ使用量で matrix product
と singular value decomposition の計算ができる。
こうすることでメモリ使用量だけでなく計算速度の改善もできる。
例えば N が 1000x1000 の diagonal sparse matrix で最初の10個の singular value だけ求めたい場合は、
matrix product S*X の X には 1000x10 の大きさの matrix しか表われないため、1000+1000x10 の配列のメモリ使用量だけですむ。
matrix S を展開してしまうと 1000x1000 の配列のメモリ使用量が必要となり約100倍のメモリが必要となる。
1つの例としてcorrespondence analysis がある。
correspondence analysis の入力として与えられる
contingency table は一般的には sparse matrix である。
しかし計算の途中段階の singular value decomposition を行なう部分に注目すると、
singular value decomposition にかける直前の matrix は必ず dense matrix となりメモリ使用量が大幅に増加する。
具体的には
S=P - r * c.T
は必ず dense matrix となる。
ここで N を contingency table を表わす python scipy library の sparse matrix とした時、
P = N / N.sum()
r = P.sum(axis=1)
c = P.sum(axis=0).T
とした。
r * c.T が必ず dense matrix となるため N が sparse matrix であっても S は dense matrix となってしまう。
N が 1000x1000 の diagonal sparse matrix で非零要素が対角成分の1000個しかない場合でも、 S は 1000x1000 の dense matrix となり1000倍のメモリが必要になる。
この matrix S は前述の遅延評価で表現すると、contingency table の sparse matrix N とほぼ同程度のメモリ使用量で表現できる。
randomized singular value decomposition の様な入力 matrix に matrix product しか行なわない方法で
singular value decomposition の計算をする場合は matrix product を遅延評価で表わした matrix を使うことができる。
具体的には matrix product S*X を
lambda X:P*X+r*(c.T *X)
の遅延評価で表現すれば contingency table の sparse matrix N とほぼ同程度のメモリ使用量で matrix product
と singular value decomposition の計算ができる。
こうすることでメモリ使用量だけでなく計算速度の改善もできる。
例えば N が 1000x1000 の diagonal sparse matrix で最初の10個の singular value だけ求めたい場合は、
matrix product S*X の X には 1000x10 の大きさの matrix しか表われないため、1000+1000x10 の配列のメモリ使用量だけですむ。
matrix S を展開してしまうと 1000x1000 の配列のメモリ使用量が必要となり約100倍のメモリが必要となる。
同様のことは sparse data に対する canonical correlation analysis や principal component analysis
でも言える。
でも言える。
expression templates https://en.wikipedia.org/wiki/Expression_templates
解決しようとする問題は、メモリに収まりきらない行列データが現われる計算の問題である。
メモリに収まりきらない行列が、より少ないメモリを使った手順で生成できる時、
その手順そのものをメモリに保存して、行列の値が必要になったら、毎回その手順を遅延評価して行列の値を生成することで、メモリ使用量を減らすことを特徴とする。
その手順そのものをメモリに保存して、行列の値が必要になったら、毎回その手順を遅延評価して行列の値を生成することで、メモリ使用量を減らすことを特徴とする。
メモリに収まりきらない matrix との matrix product のみが必要で、
matrix product の演算手順だけなら、より少ないメモリで表現できる場合には、
その手順をメモリに保存して matrix product の演算結果が必要になったら毎回その手順を実行して演算結果を生成することで、メモリ使用量を減らすことを特徴とする。
および matrix product 以外の matrix 演算についても同様の方法を利用する方法。
matrix product の演算手順だけなら、より少ないメモリで表現できる場合には、
その手順をメモリに保存して matrix product の演算結果が必要になったら毎回その手順を実行して演算結果を生成することで、メモリ使用量を減らすことを特徴とする。
および matrix product 以外の matrix 演算についても同様の方法を利用する方法。
計算の途中結果がメモリに収まりきらないため計算できなかった大きな sparse データの
correspondence analysis
や
canonical correlation analysis
や
principal component analysis
が出来るようになる。
correspondence analysis
や
canonical correlation analysis
や
principal component analysis
が出来るようになる。
matrix 演算を表わす関数、例えば
*, +
などのオペレータ関数が、
遅延評価で表わされた行列に作用した場合に、
遅延評価を評価して値になるように拡張することで、
randomized singular value decomposition
や、
べき乗法などのプログラムコードを書き換えることなく、
そのまま実行できるようにして実現した。
*, +
などのオペレータ関数が、
遅延評価で表わされた行列に作用した場合に、
遅延評価を評価して値になるように拡張することで、
randomized singular value decomposition
や、
べき乗法などのプログラムコードを書き換えることなく、
そのまま実行できるようにして実現した。
python scikit-learn-0.17.1 library において
randomized singular value decomposition
の実装である
randomized_svd
関数内では matrix product は
safe_sparse_dot
関数を使って行われるようになっている。
この safe_sparse_dot 関数を遅延評価で表わされた行列にも適用できるよう拡張することで、
遅延評価で表現された行列の
singular value decomposition
が可能となる。
randomized singular value decomposition
の実装である
randomized_svd
関数内では matrix product は
safe_sparse_dot
関数を使って行われるようになっている。
この safe_sparse_dot 関数を遅延評価で表わされた行列にも適用できるよう拡張することで、
遅延評価で表現された行列の
singular value decomposition
が可能となる。
背景技術で説明した
contingency table N が sparse matrix となる場合の correspondence analysis は、この safe_sparse_dot 関数に拡張をした
randomized_svd 関数に、遅延評価で表わされた前述の行列 S を適用することで少ないメモリでの計算が可能となる。
contingency table N が 1000x1000 の diagonal sparse matrix の場合にはメモリ使用量は1/1000になる。
contingency table N が sparse matrix となる場合の correspondence analysis は、この safe_sparse_dot 関数に拡張をした
randomized_svd 関数に、遅延評価で表わされた前述の行列 S を適用することで少ないメモリでの計算が可能となる。
contingency table N が 1000x1000 の diagonal sparse matrix の場合にはメモリ使用量は1/1000になる。
sparse なデータが頻繁に現われる自然言語処理の問題で特に有効である。
Claims (5)
- 行列を遅延評価で表現することでメモリ使用量を減らす方法およびアルゴリズムおよび、その実装。
- 請求項1を使って計算の途中段階での
メモリ使用量を減らす
correspondence analysis
- 請求項2と同様のメモリ使用量を減らす
canonical correlation analysis
および
principal component analysis
- 請求項1の方法をテンソルに適用した方法およびアルゴリズムおよび、その実装。
- 請求項1および請求項2および請求項3および請求項4の方法でメモリ使用量を減らしてGPUのメモリにデータを格納する方法およびアルゴリズムおよび、その実装。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2017007741A JP2018116561A (ja) | 2017-01-19 | 2017-01-19 | Delayed Sparse Matrix |
PCT/JP2018/001465 WO2018135599A2 (ja) | 2017-01-19 | 2018-01-18 | 遅延疎行列 |
US16/478,942 US20200042571A1 (en) | 2017-01-19 | 2018-01-18 | Delayed sparse matrix |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2017007741A JP2018116561A (ja) | 2017-01-19 | 2017-01-19 | Delayed Sparse Matrix |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2018116561A true JP2018116561A (ja) | 2018-07-26 |
Family
ID=62908107
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2017007741A Pending JP2018116561A (ja) | 2017-01-19 | 2017-01-19 | Delayed Sparse Matrix |
Country Status (3)
Country | Link |
---|---|
US (1) | US20200042571A1 (ja) |
JP (1) | JP2018116561A (ja) |
WO (1) | WO2018135599A2 (ja) |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9760538B2 (en) * | 2014-12-22 | 2017-09-12 | Palo Alto Research Center Incorporated | Computer-implemented system and method for efficient sparse matrix representation and processing |
-
2017
- 2017-01-19 JP JP2017007741A patent/JP2018116561A/ja active Pending
-
2018
- 2018-01-18 US US16/478,942 patent/US20200042571A1/en not_active Abandoned
- 2018-01-18 WO PCT/JP2018/001465 patent/WO2018135599A2/ja active Application Filing
Also Published As
Publication number | Publication date |
---|---|
WO2018135599A4 (ja) | 2018-11-22 |
US20200042571A1 (en) | 2020-02-06 |
WO2018135599A2 (ja) | 2018-07-26 |
WO2018135599A3 (ja) | 2018-09-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106951962B (zh) | 用于神经网络的复合运算单元、方法和电子设备 | |
CN107729996B (zh) | 零系数跳过卷积神经网络引擎 | |
CN111738448B (zh) | 量子线路模拟方法、装置、设备及存储介质 | |
JP6998968B2 (ja) | ディープニューラルネットワークの実行方法、実行装置、学習方法、学習装置及びプログラム | |
KR102359265B1 (ko) | 프로세싱 장치 및 프로세싱 장치에서 연산을 수행하는 방법 | |
US11720787B2 (en) | Method and system for training machine learning system | |
CN112199707A (zh) | 一种同态加密中的数据处理方法、装置以及设备 | |
CN114372577B (zh) | 用于管理量子系统的状态的方法、设备、装置和介质 | |
CN114997407A (zh) | 量子测量设备的噪声消除方法及装置、电子设备和介质 | |
RU2680761C1 (ru) | Безопасные преобразования данных | |
Gümüş et al. | Global asymptotic stability of a nonautonomous difference equation | |
US10482157B2 (en) | Data compression apparatus and data compression method and storage medium | |
JP2018116561A (ja) | Delayed Sparse Matrix | |
EP3096308B1 (en) | Element replication device, element replication method, and program | |
US11599334B2 (en) | Enhanced multiply accumulate device for neural networks | |
US11379224B2 (en) | Scale calculation apparatus and computer readable medium | |
Toscani | Wealth redistribution in conservative linear kinetic models | |
CN115760614A (zh) | 图像去噪方法、装置、电子设备及存储介质 | |
CN109582295B (zh) | 一种数据处理方法、装置、存储介质及处理器 | |
KR102281047B1 (ko) | 4개의 입력 내적 회로를 사용하는 삼각 함수 계산 | |
KR102315279B1 (ko) | 작업 그룹의 크기를 결정하는 장치 및 방법 | |
US8793280B2 (en) | Key-break and record-loop processing in parallel data transformation | |
CN118503605B (zh) | 数据处理方法、计算设备及存储介质 | |
US20230214447A1 (en) | Data processing apparatus, data processing method, and recording medium | |
KR20210152956A (ko) | 곱셈/누산 연산을 수행하기 위한 디바이스 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20170413 |