JP2020027547A - テンソルデータ計算装置、テンソルデータ計算方法及びプログラム - Google Patents

テンソルデータ計算装置、テンソルデータ計算方法及びプログラム Download PDF

Info

Publication number
JP2020027547A
JP2020027547A JP2018153244A JP2018153244A JP2020027547A JP 2020027547 A JP2020027547 A JP 2020027547A JP 2018153244 A JP2018153244 A JP 2018153244A JP 2018153244 A JP2018153244 A JP 2018153244A JP 2020027547 A JP2020027547 A JP 2020027547A
Authority
JP
Japan
Prior art keywords
matrix
factor
tensor
product
calculation
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.)
Granted
Application number
JP2018153244A
Other languages
English (en)
Other versions
JP7091930B2 (ja
Inventor
達史 松林
Tatsufumi Matsubayashi
達史 松林
良太 今井
Ryota Imai
良太 今井
匡宏 幸島
Masahiro Kojima
匡宏 幸島
浩之 戸田
Hiroyuki Toda
浩之 戸田
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nippon Telegraph and Telephone Corp
Original Assignee
Nippon Telegraph and Telephone Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Nippon Telegraph and Telephone Corp filed Critical Nippon Telegraph and Telephone Corp
Priority to JP2018153244A priority Critical patent/JP7091930B2/ja
Priority to PCT/JP2019/024792 priority patent/WO2020035997A1/ja
Priority to US17/268,207 priority patent/US20210319080A1/en
Publication of JP2020027547A publication Critical patent/JP2020027547A/ja
Application granted granted Critical
Publication of JP7091930B2 publication Critical patent/JP7091930B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/544Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
    • G06F7/5443Sum of products
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix 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)
  • Theoretical Computer Science (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Mathematical Analysis (AREA)
  • Computational Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Computing Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Software Systems (AREA)
  • Complex Calculations (AREA)

Abstract

【課題】非負値テンソル因子分解に関する処理を高速化すること。【解決手段】行列積計算用プロセッサを有し、N次(Nは2以上の整数)の非負値テンソルデータを因子分解によってN個の因子行列に分解するテンソルデータ計算装置であって、所定の目的関数値を最適化するための前記因子行列の更新式を、該因子行列以外の他のN−1個の因子行列をクロネッカー積により展開した第1の行列と、前記非負値テンソルデータと前記N個の因子行列のテンソル積とにより定義される第2の行列との行列積を含む形式で表現し、前記更新式を計算する因子分解手段と、前記更新式に含まれる前記行列積を前記行列積計算用プロセッサにより計算する行列計算手段と、を有し、前記因子分解手段は、前記行列計算手段により計算された前記行列積の計算結果を用いて、前記更新式を計算する、ことを特徴とする。【選択図】図3

Description

本発明は、テンソルデータ計算装置、テンソルデータ計算方法及びプログラムに関する。
購買ログやチェックインログ等のログデータは、一般に、テンソルとして表現することが可能である。また、これらのログデータは正の実数値で表現されるため、テンソルとして表現されたログデータは非負値テンソル因子分解(NTF:Nonnegative Tensor Factorization)を用いて因子分析を行うことが可能である。例えば、非特許文献1には、一般的な非負値テンソル因子分解の手法が開示されている。
複数の商品の中からユーザが購入した商品を表すデータが、ユーザ毎に数日間分存在する例を考える。この例の場合、これらのデータは「ユーザ×商品×日」の3次のテンソルデータ(すなわち、モード数が3のテンソルデータ)として表現することができる。そこで、ユーザ数をI、商品数をJ、日数をKとして、当該テンソルデータをR(Rank)個の基底に因子分解するとすれば、この因子分解の計算量はI×J×K×Rに比例する。したがって、例えば、I=1000、J=1000、K=1000、R=100とした場合、当該テンソルデータの非負値テンソル因子分解には1000億回規模の計算が必要となる。
ここで、非負値テンソル因子分解の計算例について、より具体的に説明する。非負値テンソル因子分解では、非負性を保ったまま、テンソルデータを因子行列のテンソル積に分解する。例えば、「ユーザ数I×商品数J×日数K」の3次のテンソルデータXは3個の因子行列A、B及びCに分解することができ、以下の式(1)のように表すことができる。
なお、本明細書のテキストでは、推定量を表す記号であるハット「^」を、便宜上、文字の頭上ではなく、文字の直前に記載する。例えば、Xの推定量は「^X」と表す。上記の因子行列A、B及びCはそれぞれI×R、J×R、K×Rの非負値の行列である。以降では、Xの各要素をxijk、Aの各要素をair、Bの各要素をbjr、Cの各要素をckr、^Xの各要素を^xijkと表す。なお、xijk、air、bjr、ckr及び^xijkは非負値である。
このとき、因子行列A、B及びCのテンソル積は、以下の式(2)のように各基底の積で表される。
上記のテンソルデータXと^Xとが近似的に等しくなるように、因子行列A、B及びCを求める手法がテンソル因子分解である。すなわち、テンソル因子分解では、Lを距離関数(この距離関数が最適化問題の目的関数となる。)として、L(X|^X)を最小化させるような因子行列A、B及びCを求める。距離関数Lとして、一般化KLダイバージェンス(gKL)距離を用いた場合、距離関数Lは以下の式(3)のように表される。
このとき、A、B及びCの更新式はそれぞれ以下の式(4)〜(6)のように表される。
また、^Xの更新式は以下の式(7)のように表される。
各air、bjr及びckrを適切な値に初期化した上で、任意の最適化アルゴリズムにより、上記の式(4)〜(7)の更新式を何回か繰り返し適用することで、因子分解後のA、B及びCが得られる。
ここで、上記の式(4)に示すairの更新式をプログラムの処理として実行する場合、I×R個の各airに対して、当該airの値を求めるためのJ×K回のループ処理を実行する必要がある。したがって、この場合、最終的にI×J×K×R回のループ処理を実行する必要がある。また、^xijk、bjr及びckrの更新式についても同様の回数のループ処理を実行する必要がある。
ところで、近年、GPU(Graphics Processing Unit)を数値計算に利用した手法が深層学習を中心に広まっている。深層学習では行列積計算を行う処理が多く、その計算量が問題となっている。例えば、N×Nの正方行列同士の積は、その計算量がN×N×Nに比例する。これに対して、GPUは単純な並列処理を得意とし、行列積計算等を高速に行うことが可能である。GPUにより行列積を計算することで、例えば、CPU(Central Processing Unit)と比較して100倍以上の高速化を図ることが可能となっている。また、行列積の計算に特化した専用のチップ(又はプロセッサ)が組み込まれたGPUも知られており、このGPUにより更に10倍以上の高速化を図ることも可能となっている。以降では、行列積の計算に特化した専用のチップ(又はプロセッサ)を「行列積専用プロセッサ」とも表す。
Liu, Weixiang, Tianfu Wang, and Siping Chen. "Nonnegative tensor factorization for clustering genes with time series microarrays from different conditions: A case study." Biomedical Engineering and Informatics (BMEI), 2010 3rd International Conference on. Vol. 6. IEEE, 2010.
しかしながら、例えば、上記の式(4)〜(7)に示すように、因子行列の更新式は、テンソル積で表現されている。このため、行列積専用プロセッサが組み込まれたGPUを用いて、因子行列の更新式をそのまま計算することはできない。
これに対して、因子行列の更新式におけるテンソル積を行列積として表現することができれば、行列積専用プロセッサが組み込まれたGPUを用いて、因子行列の更新式を計算することができ、非負値テンソル因子分解に関する処理を高速化することができる。
本発明の実施の形態は、上記の点に鑑みてなされたもので、非負値テンソル因子分解に関する処理を高速化することを目的とする。
上記目的を達成するため、本発明の実施の形態は、行列積計算用プロセッサを有し、N次(Nは2以上の整数)の非負値テンソルデータを因子分解によってN個の因子行列に分解するテンソルデータ計算装置であって、所定の目的関数値を最適化するための前記因子行列の更新式を、該因子行列以外の他のN−1個の因子行列をクロネッカー積により展開した第1の行列と、前記非負値テンソルデータと前記N個の因子行列のテンソル積とにより定義される第2の行列との行列積を含む形式で表現し、前記更新式を計算する因子分解手段と、前記更新式に含まれる前記行列積を前記行列積計算用プロセッサにより計算する行列計算手段と、を有し、前記因子分解手段は、前記行列計算手段により計算された前記行列積の計算結果を用いて、前記更新式を計算する、ことを特徴とする。
非負値テンソル因子分解に関する処理を高速化することができる。
行列積専用プロセッサが組み込まれたGPUの構成の一例を説明するための図である。 行列積専用プロセッサにおける行列積の計算の一例を説明するための図である。 本発明の実施の形態におけるテンソルデータ計算装置の機能構成の一例を示す図である。 本発明の実施の形態におけるテンソルデータ計算装置のハードウェア構成の一例を示す図である。 更新処理の手順の一例を説明するための図(その1)である。 更新処理の手順の一例を説明するための図(その2)である。 更新処理の手順の一例を説明するための図(その3)である。 更新処理の手順の一例を説明するための図(その4)である。 更新処理の手順の一例を説明するための図(その5)である。
以下、本発明の実施の形態について説明する。本発明の実施の形態では、行列積専用プロセッサにより行列積を計算することで、非負値テンソル因子分解に関する処理を高速に行うことが可能なテンソルデータ計算装置10について説明する。
<行列積専用プロセッサが組み込まれたGPUの構成>
まず、行列積専用プロセッサが組み込まれたGPUの構成について、図1を参照しながら説明する。図1は、行列積専用プロセッサが組み込まれたGPUの構成の一例を説明するための図である。なお、以降の本発明の実施の形態の説明では、GPUは、行列積専用プロセッサが組み込まれたGPUを指すものとする。
図1に示すように、本発明の実施の形態におけるテンソルデータ計算装置10には、1台以上のGPU(図1では、一例として4台)が搭載されている。そして、各GPUは、PCI Express等のバスを介してCPUやメモリ等と通信可能に接続されている。
また、各GPUには、複数のGPC(GPU Processing Cluster)や複数のデバイスメモリ、メモリコントローラ、L2キャッシュ、ギガスレッドエンジン、ハイスピードハブ等が含まれる。また、各GPCには、複数のSM(Stream Multiprocessor)や複数のTPC(Texture Processor Cluster)等が含まれる。更に、各SMには、L1キャッシュ(又は共有メモリ)や複数のPB(Processing Block)等が含まれる。
そして、各PBには、L0キャッシュやWarpスケジューラ、Dispatch Unit、レジスタ等に加えて、行列積専用プロセッサを含む様々なプロセッサが含まれる。このような様々プロセッサには、例えば、倍精度(64bit)の浮動小数点演算を可能とするプロセッサ(FP64)、単精度(32bit)の浮動小数点演算を可能とするプロセッサ(FP32)、整数演算を可能とするプロセッサ(INT)等がある。また、図1に示す例では、1つのPB内に2つの行列積専用プロセッサが含まれており、各行列積専用プロセッサが4×16個の積和演算器により構成されている。
各PBはSMのL1キャッシュと高速かつ低遅延でデータ通信が可能であり、通信量を抑えつつ多くのプロセッサを同時に利用することによって、並列処理の高速化を実現している。なお、行列積専用プロセッサとしては、例えば、NVIDIA社のGPUアーキテクチャの1つである「Volta」世代以降のGPUに組み込まれる「TensorCore」等が挙げられる。
<行列積専用プロセッサにおける行列積の計算>
ここで、行列積専用プロセッサによる行列積の計算について、図2を参照しながら説明する。図2は、行列積専用プロセッサにおける行列積の計算の一例を説明するための図である。図2では、より一般に、行列積と行列和とを計算する場合、すなわち、4×4の行列をA、B及びCとして、D=AB+Cを計算する場合について説明する。なお、行列積のみを計算する場合は、C=0とすれば良く、4×4よりも大きい行列積を扱う場合には、分割して計算した結果を随時Cに代入して積算することによって、より大きな行列積を計算することができる。以降では、A、B、C及びDの各要素をそれぞれaij、bij、cij及びdijとする。
図2に示すように、行列積専用プロセッサは、i=1からi=4まで行列Aのi行目の要素ai1、ai2、ai3、ai4を順に入力して、この行列Aのi行目のai1、ai2、ai3、ai4と、L1キャッシュ(又は共有メモリ)に格納されているBのj列目の要素b1j、b2j、b3j、b4jとの積和をjに関して並列に計算した上で、L1キャッシュ(又は共有メモリ)に格納されているCのi行j列目の要素cijをjに関して並列に加算する。
このように、行列積専用プロセッサは、流れ作業的にDの各要素dijをjに関して並列に計算することができるため、効率的に行列積及び行列和D=AB+Cを計算することができる。なお、行列積専用プロセッサが4×4の行列同士の行列積と行列和とをjに関して並列に計算することは一例であって、行列積プロセッサに含まれる積和演算器の構成によっては、任意の行数及び列数の行列同士の行列積を並列に計算することができても良い。
<テンソルデータ計算装置10の機能構成>
次に、本発明の実施の形態におけるテンソルデータ計算装置10の機能構成について、図3を参照しながら説明する。図3は、本発明の実施の形態におけるテンソルデータ計算装置10の機能構成の一例を示す図である。
図3に示すように、本発明の実施の形態におけるテンソルデータ計算装置10は、データ入力部101と、データ格納部102と、テンソル因子分解部103と、行列積計算部104と、データ出力部105とを有する。これらの機能部のうち、例えば、データ入力部101、データ格納部102、テンソル因子分解部103及びデータ出力部105は、テンソルデータ計算装置10にインストールされた1以上のプログラムがCPUに実行させる処理により実現可能である。他方で、例えば、行列積計算部104は、テンソルデータ計算装置10にインストールされた1以上のプログラムがCPU及びGPUに実行させる処理により実現可能である。
また、本発明の実施の形態におけるテンソルデータ計算装置10は、データ記憶部201と、行列積計算用記憶部202とを有する。データ記憶部201は、例えば補助記憶装置等の記憶装置を用いて実現される。他方で、行列積計算用記憶部202は、上述したGPUのL1キャッシュや共有メモリ等を用いて実現される。
データ入力部101は、テンソルとして表現可能なデータを入力する。ここで、データ入力部101は、例えば、通信ネットワークを介して他の装置等からデータを受信することで、当該データを入力しても良いし、補助記憶装置等の記憶装置に格納されているデータを読み出すことで、当該データを入力しても良い。
データ格納部102は、データ入力部101が入力したデータをテンソルデータとしてデータ記憶部201に格納する。これにより、テンソルデータがデータ記憶部201に記憶される。
テンソル因子分解部103は、データ記憶部201に記憶されているテンソルデータを非負値テンソル因子分解するための処理を行う。このとき、テンソル因子分解部103は、因子行列の更新式(例えば、上記の式(4)〜(6))におけるテンソル積を行列積で表現する。そして、テンソル因子分解部103は、因子行列の更新式における行列積の計算を行列積計算部104に依頼する。
行列積計算部104は、テンソル因子分解部103からの依頼に応じて、行列積計算用記憶部202を用いて行列積専用プロセッサにより行列積を計算する。そして、行列積計算部104は、行列積の計算結果をテンソル因子分解部103に返信する。
データ出力部105は、テンソル因子分解部103による処理結果(すなわち、非負値テンソル因子分解により得られた因子行列)を示すデータを出力する。ここで、データ出力部105の出力先は限定されない。データ出力部105の出力先は、例えば、補助記憶装置等の記憶装置であっても良いし、ディスプレイ等の表示装置であっても良いし、通信ネットワークを介して接続される所定の装置等であっても良い。
<テンソルデータ計算装置10のハードウェア構成>
次に、本発明の実施の形態におけるテンソルデータ計算装置10のハードウェア構成について、図4を参照しながら説明する。図4は、本発明の実施の形態におけるテンソルデータ計算装置10のハードウェア構成の一例を示す図である。
図4に示すように、本発明の実施の形態におけるテンソルデータ計算装置10は、入力装置301と、表示装置302と、外部I/F303と、RAM(Random Access Memory)304と、ROM(Read Only Memory)305と、通信I/F306と、CPU307と、1以上のGPU308と、補助記憶装置309とを有する。これら各ハードウェアは、それぞれがバスBを介して通信可能に接続されている。
入力装置301は、例えばキーボードやマウス、タッチパネル等であり、ユーザが各種操作を入力するのに用いられる。表示装置302は、例えばディスプレイ等であり、テンソルデータ計算装置10の処理結果を表示する。なお、テンソルデータ計算装置10は、入力装置301及び表示装置302のうちの少なくとも一方を有していなくても良い。
外部I/F303は、外部装置とのインタフェースである。外部装置には、記録媒体303a等がある。テンソルデータ計算装置10は、外部I/F303を介して、記録媒体303a等の読み取りや書き込みを行うことができる。記録媒体303aには、テンソルデータ計算装置10が有する各機能部(例えば、データ入力部101、データ格納部102、テンソル因子分解部103、行列積計算部104及びデータ出力部105)を実現する1以上のプログラム等が記録されていても良い。
記録媒体303aとしては、例えば、フレキシブルディスク、CD(Compact Disc)、DVD(Digital Versatile Disk)、SDメモリカード(Secure Digital memory card)、USB(Universal Serial Bus)メモリカード等が挙げられる。
RAM304は、プログラムやデータを一時保持する揮発性の半導体メモリである。ROM305は、電源を切ってもプログラムやデータを保持することができる不揮発性の半導体メモリである。ROM305には、例えば、OS(Operating System)に関する設定情報や通信ネットワークに関する設定情報等が格納されている。
通信I/F306は、テンソルデータ計算装置10を通信ネットワークに接続するためのインタフェースである。テンソルデータ計算装置10が有する各機能部を実現する1以上のプログラムは、通信I/F306を介して、所定のサーバ等から取得(ダウンロード)されても良い。
CPU307は、ROM305や補助記憶装置309等からプログラムやデータをRAM304上に読み出して、各種の制御処理等を実行する演算装置である。GPU308は、データを並列に処理可能な演算装置である。GPU308には、行列積の計算に特化した行列積専用プロセッサ310が組み込まれている。行列積専用プロセッサ310は、上述したように、例えば4×4行列同士の行列積を並列処理することにより効率的に行列積を計算することが可能な演算装置である。テンソルデータ計算装置10が有する各機能部は、例えば補助記憶装置309に格納されている1以上のプログラムがCPU307又は/及びGPU308に実行させる処理により実現される。
補助記憶装置309は、例えばHDD(Hard Disk Drive)やSSD(Solid State Drive)等であり、プログラムやデータを格納している不揮発性の記憶装置である。補助記憶装置309に格納されているプログラムやデータには、例えば、OS、アプリケーションプログラム、テンソルデータ計算装置10が有する各機能部を実現する1以上のプログラム等が挙げられる。
本発明の実施の形態におけるテンソルデータ計算装置10は、図4に示すハードウェア構成を有することにより、後述する各種処理を実現することができる。なお、図4に示す例では、テンソルデータ計算装置10が1台のコンピュータで実現される場合のハードウェア構成を示したが、これに限られず、テンソルデータ計算装置10は複数台のコンピュータで実現されていても良い。
<非負値テンソル因子分解>
ここで、本発明の実施の形態におけるテンソルデータ計算装置10により非負値テンソル因子分解を行う場合について説明する。以降では、データ記憶部201に記憶されているI×J×Kの3次のテンソルデータXを、I×Rの因子行列Aと、J×Rの因子行列Bと、K×Rの因子行列Cとに分解する場合について説明する。ただし、Xの各要素xijk、Aの各要素air、Bの各要素ajr及びCの各要素ckrはいずれも非負値である。なお、Rは因子行列A、B及びCの基底数である。
このとき、上述したように、テンソルデータXは、上記の式(1)のように表すことができる。また、因子行列A、B及びCを求めるための距離関数Lとして一般化KLダイバージェンス(gKL)距離を用いた場合、この距離関数L(X|^X)は、上記の式(3)のように表すことができる。そして、このとき、因子行列A、B及びCの更新式は、上記の式(4)〜(6)のように表される。
そこで、上記の式(4)〜(6)に示す更新式(すなわち、airの更新式、bjrの更新式及びckrの更新式)におけるテンソル積を行列積で表現する場合について説明する。なお、以降では、データ入力部101により入力されたデータが、データ格納部102によってテンソルデータXとしてデータ記憶部201に格納されているものとする。
≪airの更新式≫
まず、上記の式(4)に示すairの更新式における分数部分の分母は、rのみに依存する項として、以下の式(8)のように表すことができる。
このQは、図5に示す更新処理により事前に計算することができる。図5は、更新処理の手順の一例を説明するための図(その1)である。以降では、Qを格納する配列要素をQ[r]、計算結果を一時的に保持する変数をBr_tmp及びCr_tmp、因子行列Bの各要素bjrを格納する配列要素をb[j][r]、因子行列Cの各要素ckrを格納する配列要素をc[k][r]とする。
図5に示すように、テンソル因子分解部103は、rに関するR回のループ処理(S100)の中で、r毎に、Br_tmp及びCr_tmpを0に初期化(S100−1)した上で、jに関するJ回のループ処理(S100−2)と、kに関するK回のループ処理(S100−3)と、Q[r]←1.0/(Br_tmp×Cr_tmp)の計算処理(S100−4)とを実行する。ここで、「←」は、右辺の計算結果を左辺に代入することを表す。
また、テンソル因子分解部103は、jに関するJ回のループ処理の中で、j毎に、Br_tmp←Br_tmp+b[j][r]の計算処理(S100−2−1)を実行する。同様に、テンソル因子分解部103は、kに関するK回のループ処理の中で、k毎に、Cr_tmp←Cr_tmp+c[k][r]の計算処理(S100−3−1)を実行する。
以上により、rのみに依存する項として、上記の式(4)に示すairの更新式の分母Qが計算される。上述したように、このQは、上記の式(4)の更新式によって実際にaijを更新する前に、事前に計算しておくことができる。
次に、上記の式(4)に示すairの更新式における分数部分の分子は、2つの行列W及びZの行列積として表現することができる。具体的には、WをP×Rの非負行列(ただし、P=J×K)として、
とした場合に、Wの各要素wprは、因子行列Bの要素bjrと因子行列Cの要素ckrとの積wpr=bjr×ckrで表されるものとする。これは、因子行列Bと因子行列Cとをクロネッカー積により展開することを意味する。ここで、p=j×K+kである。
ただし、p=j×K+kは、変数jの取り得る値がj=0,・・・,J−1である場合を想定したものである。例えば、変数jの取り得る値がj=1,・・・,Jである場合は、p=(j−1)×K+kとする。
上記の行列Wを用いて、^xijkは、以下の式(9)のように表すことができる。
ここで、tは転置を表す。また、{AWipは行列積AWの(i,p)要素である。pはj及びkで表現することができるため、この行列積AWは間接的に行列積計算が可能である。なお、上記の式(9)では、Wの転置行列としてWと表現しているが、行列積専用プロセッサ310により行列積を計算する際には、データ構造の形式上、Wを別の行列W´=Wとして、行列積AW´を計算した方が好ましい場合もある。
これらのW及びW´=Wは、図6に示す更新処理により計算することができる。図6は、更新処理の手順の一例を説明するための図(その2)である。以降では、行列Wのwprを格納する配列要素をw[p][r]、行列W´=Wの各要素wrp´を格納する配列要素をw_dash[r][p]とする。
図6に示すように、テンソル因子分解部103は、jに関するJ回のループ処理(S200)の中で、j毎に、kに関するK回のループ処理(S200−1)を実行する。また、テンソル因子分解部103は、kに関するK回のループ処理の中で、k毎に、p←j×K+kの計算処理(S200−1−1)を行った上で、rに関するR回のループ処理(S200−1−2)を実行する。更に、テンソル因子分解部103は、rに関するR回のループ処理の中で、r毎に、w[p][r]←b[j][r]×c[k][r]の計算処理(S200−1−2−1)を実行した後、w_dash[r][p]←w[p][r]の計算処理(S200−1−2−2)を実行する。
また、^Xの各要素^xijk={AWipは、上記の図6に示す更新処理でW´が計算された後に、図7に示す更新処理により計算することができる。図7は、更新処理の手順の一例を説明するための図(その3)である。以降では、^Xの各要素^xijkを格納する配列要素をx_hat[i][p]とする。なお、^Xの各要素^xijkを格納する配列要素をx_hat[i][j][k]として、^xijkを3次元配列に格納しても良い。ただし、行列積専用プロセッサ310の計算結果を直接格納するためには、2次元配列に格納する方が好ましい場合もある。
図7に示すように、テンソル因子分解部103は、iに関するI回のループ処理(S300)を実行する。このとき、テンソル因子分解部103は、iに関するI回のループ処理の中で、i毎に、行列積計算部104に対して行列積の計算を依頼する。
行列積の計算が依頼された場合、行列積計算部104は、pに関するP/4回のループ処理(S300−1)を実行する。また、行列積計算部104は、pに関するP/4回のループ処理の中で、p毎に、rに関するR/4回のループ処理(S300−1−1)を実行する。更に、行列積計算部104は、rに関するR/4回のループ処理の中で、r毎に、各x_hat[i][p]←行列積専用プロセッサ310による行列積計算(a,w_dash)の計算処理(S300−1−1−1)を実行する。
ここで、上記のステップS300−1−1の計算処理の右辺は、行列A及びW´をそれぞれ4×4行列に分割した場合に、rに関するループ回数及びiに関するループ回数に対応する4×4行列Airと、当該rに関するループ回数及びpに関するループ回数に対応する4×4行列Wrp´との行列積を計算することを表す。なお、Airの各配列要素a[i][r]は、Aの各配列要素a[i][r]のうちの或る16個の配列要素である。同様に、Wrp´の各配列要素w_dash[r][p]は、W´の各配列要素w_dash[r][p]のうちの或る16個の配列要素である。
また、上記のステップS300−1−1の計算処理の左辺は、当該rに関するループ回数及びpに関するループ回数に対応する4×4行列^Xrpの各配列要素x_hat[i][p]を表す。なお、^Xrpの各配列要素x_hat[i][p]は、^Xの各配列要素x_hat[i][p]のうちの或る16個の要素である。
このように、行列積計算部104は、行列積専用プロセッサ310により、4×4行列毎に、^Xの各配列要素^xijk(すなわち、行列積AW´の(i,p)要素)を計算する。このとき、行列積計算部104は、例えば、各配列要素w_dash[r][p]を行列積計算用記憶部202に格納した上で、図2で説明したように、4×4の行列毎に、16個の配列要素a[i][r]と、16個の配列要素w_dash[r][p]との積和を並列に計算することで、行列積AW´を計算する。なお、pに関するループ回数がP/4、rに関するループ回数がR/4であるが、これは、本発明の実施の形態における行列積専用プロセッサ310が4×4の行列同士の行列積を同時に計算するためである(すなわち、行列積を(P×R)/16回の処理に分割して計算を行うためである。)。一般に、例えば、行列積専用プロセッサ310がM×Mの行列同士の行列積を同時に計算することができる場合、pに関するループ回数をP/M、rに関するループ回数をR/Mとすれば良い。
なお、テンソル因子分解部103は、例えば、cublasGemmEx()関数等を呼び出すことで、行列積計算部104に対して行列積AW´の計算を依頼することができる。また、行列AやW´の行数や列数が4の倍数でない場合は、例えば、適宜0でパディングすれば良い。
次に、ZをI×Pの非負行列として、
とした場合に、Zの各要素zipは、
で表されるものとする。
これにより、上記の式(4)に示すairの更新式は、以下の式(10)のように表すことができる。
ここで、{ZW}irは行列積ZWの(i,r)要素であり、
として行列積を計算することができる。したがって、最終的に、この行列積を行列積専用プロセッサ310により計算させることで、非負値テンソル因子分解に関する処理の高速化が可能となる。
Zの各要素zipは、上記の図7に示す更新処理で^Xが計算された後に、図8に示す更新処理により計算することができる。図8は、更新処理の手順の一例を説明するための図(その4)である。以降では、Zの各要素zipを格納する配列要素をz[i][p]、Xの各要素xijkを格納する配列要素をx[i][j][k]とする。
図8に示すように、テンソル因子分解部103は、iに関するI回のループ処理(S400)の中で、i毎に、jに関するループ処理(S400−1)を実行する。また、テンソル因子分解部103は、jに関するループ処理の中で、j毎に、kに関するK回のループ処理(S400−1−1)を実行する。更に、テンソル因子分解部103は、kに関するK回のループ処理の中で、k毎に、p←j×K+kの計算処理(S400−1−1−1)を実行した後、z[i][p]←x[i][j][k]/x_hat[i][p]の計算処理(S400−1−2)を実行する。
そして、因子行列Aの各要素airは、上記の図8に示す更新処理でZが計算された後に、図9に示す更新処理により更新することができる(すなわち、上記の式(10)により各airを更新することができる。)。図9は、更新処理の手順の一例を説明するための図(その5)である。以降では、計算結果を一時的に保持する配列をZW_tmp、この配列の配列要素をZW_tmp[r]とする。
図9に示すように、テンソル因子分解部103は、iに関するI回のループ処理(S500)を実行する。また、テンソル因子分解部103は、i毎に、ZW_tmp[r]を0に初期化(S500−1)した上で、行列積計算部104に対して行列積の計算を依頼する。
行列積の計算が依頼された場合、行列積計算部104は、rに関するR/4回のループ処理(S500−2)を実行する。また、行列積計算部104は、rに関するR/4回のループ処理の中で、r毎に、pに関するP/4回のループ処理(S500−2−1)を実行する。更に、行列積計算部104は、pに関するP/4回のループ処理の中で、p毎に、各ZW_tmp[r]←行列積専用プロセッサ310による行列積計算(z,w)の計算処理(S500−2−1−1)を実行する。
また、行列積計算部104は、行列積計算部104によりpに関するP/4回のループ処理が実行された後、a[i][r]←a[i][r]×ZW_tmp[r]×Q[r]の計算処理(S500−2−2)を実行する。これにより、因子行列Aの各配列要素a[i][r]が更新される。
ここで、上記のステップS500−2−1−1の計算処理の右辺は、行列Z及びWをそれぞれ4×4行列に分割した場合に、pに関するループ回数及びiに関するループ回数に対応する4×4行列Zipと、当該pに関するループ回数及びrに関するループ回数に対応する4×4行列Wprとの行列積を計算することを表す。なお、Zipの各配列要素z[i][p]は、Zの各配列要素z[i][p]のうちの或る16個の配列要素である。同様に、Wprの各配列要素w[p][r]は、Wの各配列要素w[p][r]のうちの或る16個の配列要素である。
また、上記のステップS500−2−1−1の計算処理の左辺は、4×4行列Zipと4×4行列Wprとの行列積Zipprの各配列要素ZW_tmp[r]を表す。
このように、行列積計算部104は、行列積専用プロセッサ310により、4×4行列毎に、行列積ZWを計算する。このとき、行列積計算部104は、例えば、各配列要素w[p][r]を行列積計算用記憶部202に格納した上で、図2で説明したように、4×4の行列毎に、16個の配列要素z[i][p]と、16個の配列要素w[p][r]との積和を並列に計算することで、行列積ZWを計算する。なお、pに関するループ回数がP/4、rに関するループ回数がR/4であるが、これは、上述したように、本発明の実施の形態における行列積専用プロセッサ310が4×4の行列同士の行列積を同時に計算するためである(すなわち、行列積を(P×R)/16回の処理に分割して計算を行うためである。)。一般に、例えば、行列積専用プロセッサ310がM×Mの行列同士の行列積を同時に計算することができる場合、pに関するループ回数をP/M、rに関するループ回数をR/Mとすれば良い。
なお、テンソル因子分解部103は、上述したように、例えば、cublasGemmEx()関数等を呼び出すことで、行列積計算部104に対して行列積AW´の計算を依頼することができる。また、行列AやW´の行数や列数が4の倍数でない場合は、例えば、適宜0でパディングすれば良い。
≪bjrの更新式≫
上記の式(5)に示すbjrの更新式については、上述したairの更新式の説明において、各記号を以下のように読み替えれば良い。
・air→bjr
・bjr→air
・jに関するJまでの和Σ→iに関するIまでの和Σ
・P=J×K→P=I×K
・p=j×K+k→p=i×K+k
・{AWip→{BWjp
・zip→zjp(すなわち、ZをJ×Pの行列と読み替える。)
・{ZW}ir→{ZW}jr
これにより、上記の式(5)に示すbjrの更新式についても、bjr:=bjr{ZW}jrと行列積で表現することができる。
≪ckrの更新式≫
上記の式(6)に示すckrの更新式については、上述したairの更新式の説明において、各記号を以下のように読み替えれば良い。
・air→ckr
・ckr→air
・kに関するKまでの和Σ→iに関するIまでの和Σ
・P=J×K→P=J×I
・p=j×K+k→p=j×I+i
・{AWip→{CWkp
・zip→zkp(すなわち、ZをK×Pの行列と読み替える。)
・{ZW}ir→{ZW}kr
これにより、上記の式(6)に示すckrの更新式についても、ckr:=ckr{ZW}krと行列積で表現することができる。
以上のように、本発明の実施の形態におけるテンソルデータ計算装置10は、3次の非負値のテンソルデータXをテンソル因子分解する場合に、このテンソルデータXの因子行列A、B及びCの更新式を行列積で表現することができる。そして、本発明の実施の形態におけるテンソルデータ計算装置10は、この行列積を行列積専用プロセッサ310により計算する。これにより、本発明の実施の形態におけるテンソルデータ計算装置10は、非負値テンソル因子分解に関する処理を高速に実行することができるようになる。なお、非負値テンソル因子分解の処理結果(すなわち、最終的に得られた因子行列A、B及びCをそれぞれ示すデータ)は、データ出力部105により所定の出力先に出力される。
<2次のテンソルの場合>
上記では3次の非負値のテンソルデータXをテンソル因子分解する場合について説明したが、本発明の実施の形態は、2次のテンソル(すなわち、行列)の因子分解でも同様に適用することができる。以降では、2次の非負値のテンソルデータXのテンソル因子分解(すなわち、非負値の行列データXの行列因子分解)について説明する。
2次の非負値のテンソルデータXのテンソル因子分解は、因子行列をA及びBとして、以下の式(11)のように表すことができる。
このとき、例えば、airの更新式は、以下の式(12)のように表される。
また、このとき、^Xの各要素^xij
であり、^Xは行列積ABで表現することができる。このため、^Xは行列積専用プロセッサ310により計算することができる。
また、3次のテンソルの場合と同様に、行列Zを
として表現する。同様に、Q
と表現する。これにより、airの更新式は、以下の式(13)で表すことができる。
したがって、この更新式に含まれる行列積を行列積専用プロセッサ310に計算させることで、2次のテンソルの非負値テンソル因子分解に関する処理の高速化も可能となる。なお、bjrの更新式についても、3次のテンソルの場合と同様に読み替えることによって行列積で表現することができる。
<高次のテンソルの場合>
また、本発明の実施の形態は、高次の非負値のテンソルデータXをテンソル因子分解する場合についても同様に適用することができる。以降では、N次(N≧4)の非負値のテンソルデータXのテンソル因子分解について説明する。
N次のテンソルデータ
のテンソル因子分解は、以下の式(14)に示すように、
がXを再現できるように(すなわち、Xと^Xとが近似的に等しくなるように)、N個の因子行列
を求める手法である。
ここで、上記の式(14)のテンソル積^Xは、以下の式(15)のように表すことができる。
このとき、距離関数Lとして一般化KLダイバージェンス(gKL)距離を用いた場合、
の更新式は、以下の式(16)のように表される。
この更新式は、2次や3次のテンソルの場合と同様に、行列積として表現することができる。
まず、上記の式(16)に示す更新式における分数部分の分母は、rのみに依存する項として、以下の式(17)のように表すことができる。
次に、上記の式(16)に示す更新式における分数部分の分子は、2つの行列W(n)及びZ(n)の行列積として表現することができる。具体的には、W(n)をP(n)×Rの非負行列(ただし、P(n)=In+1×・・・×I×I×・・・×In−1)として、
とする。このとき、W(n)の各要素は行列Yの要素の積として、
と表されるものとする。これは、因子行列Yn+1,・・・,Y,Y,・・・,Yn−1をクロネッカー積により展開することを意味する。ここで、
である。
上記の行列W(n)を用いて、^Xの各要素は、以下の式(18)のように表すことができる。
ここで、
は行列積Y(n)tの(i,p)要素であり、pを用いて間接的に行列積計算が可能である。
次に、2次や3次のテンソルの場合と同様に、行列Z(n)を、
として、
とする。
これにより、上記の式(16)に示す更新式は、以下の式(19)のように表すことができる。
ここで、
は行列積Z(n)(n)の(i,r)要素であり、
として、行列積を計算することができる。したがって、最終的に、この行列積を行列積専用プロセッサ310により計算させることで、N次のテンソルの非負値テンソル因子分解に関する処理の高速化も可能となる。
<まとめ>
以上のように、本発明の実施の形態におけるテンソルデータ計算装置10は、非負値のテンソルデータXをテンソル因子分解する場合に、このテンソルデータXの各因子行列の更新式を行列積で表現することができる。すなわち、本発明の実施の形態におけるテンソルデータ計算装置10は、各因子行列をクロネッカー積により展開することで、各因子行列の更新式を行列積で表現することを可能としている。
これにより、本発明の実施の形態におけるテンソルデータ計算装置10は、この行列積を行列積専用プロセッサ310により計算ことができ、非負値テンソル因子分解に関する処理を高速に実行することができるようになる。
なお、本発明の実施の形態は、更に、特開2016−139391号公報に開示されている手法を組み合わせることもできる。この場合、メモリへのランダムアクセスによる処理速度の低下を抑えることができると共に、非負値テンソル因子分解に関する処理を高速化させることができるようになる。
本発明は、具体的に開示された上記の実施形態に限定されるものではなく、特許請求の範囲から逸脱することなく、種々の変形や変更が可能である。
10 テンソルデータ計算装置
101 データ入力部
102 データ格納部
103 テンソル因子分解部
104 行列積計算部
105 データ出力部
201 データ記憶部
202 行列積計算用記憶部

Claims (6)

  1. 行列積計算用プロセッサを有し、N次(Nは2以上の整数)の非負値テンソルデータを因子分解によってN個の因子行列に分解するテンソルデータ計算装置であって、
    所定の目的関数値を最適化するための前記因子行列の更新式を、該因子行列以外の他のN−1個の因子行列をクロネッカー積により展開した第1の行列と、前記非負値テンソルデータと前記N個の因子行列のテンソル積とにより定義される第2の行列との行列積を含む形式で表現し、前記更新式を計算する因子分解手段と、
    前記更新式に含まれる前記行列積を前記行列積計算用プロセッサにより計算する行列計算手段と、
    を有し、
    前記因子分解手段は、
    前記行列計算手段により計算された前記行列積の計算結果を用いて、前記更新式を計算する、ことを特徴とするテンソルデータ計算装置。
  2. 前記非負値テンソルデータは、I×J×Kの3次のテンソルを示すデータであり、
    前記第2の行列は、
    p=j×K+k(ただし、jは1≦1≦Jとなる整数、kは1≦k≦Kとなる)として、前記非負値テンソルデータの(i,j,k)要素と、前記N個の因子行列のテンソル積の(i,j,k)要素との商を(i,p)要素とする行列である、ことを特徴とする請求項1に記載のテンソルデータ計算装置。
  3. 前記因子行列を、I×Rの因子行列A、J×Rの因子行列B,K×Rの因子行列Cとして、
    前記因子行列Aの更新式に含まれる行列積を定義する前記第1の行列は、
    前記因子分解の基底数Rを表す変数をr(1≦r≦R)、前記因子行列Bの各要素をbjr、前記因子行列Cの各要素をckrとして、bjr×ckrを(p,r)要素とする行列である、ことを特徴とする請求項2に記載のテンソルデータ計算装置。
  4. 前記因子分解手段は、
    前記更新式の所定の項を、前記因子分解の基底数を表す変数のみに依存する項として計算する、ことを特徴とする請求項1乃至3の何れか一項に記載のテンソルデータ計算装置。
  5. 行列積計算用プロセッサを有し、N次(Nは2以上の整数)の非負値テンソルデータを因子分解によってN個の因子行列に分解するテンソルデータ計算装置が、
    所定の目的関数値を最適化するための前記因子行列の更新式を、該因子行列以外の他のN−1個の因子行列をクロネッカー積により展開した第1の行列と、前記非負値テンソルデータと前記N個の因子行列のテンソル積とにより定義される第2の行列との行列積を含む形式で表現し、前記更新式を計算する因子分解手順と、
    前記更新式に含まれる前記行列積を前記行列積計算用プロセッサにより計算する行列計算手順と、
    を実行し、
    前記因子分解手順は、
    前記行列計算手順により計算された前記行列積の計算結果を用いて、前記更新式を計算する、ことを特徴とするテンソルデータ計算方法。
  6. コンピュータを、請求項1乃至4の何れか一項に記載のテンソルデータ計算装置における各手段として機能させるためのプログラム。
JP2018153244A 2018-08-16 2018-08-16 テンソルデータ計算装置、テンソルデータ計算方法及びプログラム Active JP7091930B2 (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP2018153244A JP7091930B2 (ja) 2018-08-16 2018-08-16 テンソルデータ計算装置、テンソルデータ計算方法及びプログラム
PCT/JP2019/024792 WO2020035997A1 (ja) 2018-08-16 2019-06-21 テンソルデータ計算装置、テンソルデータ計算方法及びプログラム
US17/268,207 US20210319080A1 (en) 2018-08-16 2019-06-21 Tensor data calculating apparatus, tensor data calculating method and program

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2018153244A JP7091930B2 (ja) 2018-08-16 2018-08-16 テンソルデータ計算装置、テンソルデータ計算方法及びプログラム

Publications (2)

Publication Number Publication Date
JP2020027547A true JP2020027547A (ja) 2020-02-20
JP7091930B2 JP7091930B2 (ja) 2022-06-28

Family

ID=69524744

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2018153244A Active JP7091930B2 (ja) 2018-08-16 2018-08-16 テンソルデータ計算装置、テンソルデータ計算方法及びプログラム

Country Status (3)

Country Link
US (1) US20210319080A1 (ja)
JP (1) JP7091930B2 (ja)
WO (1) WO2020035997A1 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102326586B1 (ko) * 2019-11-19 2021-11-16 재단법인대구경북과학기술원 큰 규모 분산 행렬 곱 처리 방법 및 그 장치
CN113970710B (zh) * 2021-10-26 2023-06-09 广东电网有限责任公司佛山供电局 一种电力变压器直流偏磁运行状态监测方法及系统

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2011154554A (ja) * 2010-01-27 2011-08-11 Nec Corp 欠損値予測装置、欠損値予測方法及び欠損値予測プログラム
JP2013037471A (ja) * 2011-08-05 2013-02-21 Nec Corp 確率モデル更新システム、確率モデル更新装置、確率モデル更新方法およびプログラム
JP2015088118A (ja) * 2013-11-01 2015-05-07 日本電信電話株式会社 データ解析装置、方法、及びプログラム
JP2016173784A (ja) * 2015-03-18 2016-09-29 日本電信電話株式会社 テンソル因子分解処理装置、テンソル因子分解処理方法及びテンソル因子分解処理プログラム

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7400772B1 (en) * 2003-05-20 2008-07-15 Sandia Corporation Spatial compression algorithm for the analysis of very large multivariate images
US8452770B2 (en) * 2010-07-15 2013-05-28 Xerox Corporation Constrained nonnegative tensor factorization for clustering

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2011154554A (ja) * 2010-01-27 2011-08-11 Nec Corp 欠損値予測装置、欠損値予測方法及び欠損値予測プログラム
JP2013037471A (ja) * 2011-08-05 2013-02-21 Nec Corp 確率モデル更新システム、確率モデル更新装置、確率モデル更新方法およびプログラム
JP2015088118A (ja) * 2013-11-01 2015-05-07 日本電信電話株式会社 データ解析装置、方法、及びプログラム
JP2016173784A (ja) * 2015-03-18 2016-09-29 日本電信電話株式会社 テンソル因子分解処理装置、テンソル因子分解処理方法及びテンソル因子分解処理プログラム

Also Published As

Publication number Publication date
JP7091930B2 (ja) 2022-06-28
US20210319080A1 (en) 2021-10-14
WO2020035997A1 (ja) 2020-02-20

Similar Documents

Publication Publication Date Title
Bauer et al. Clear and compress: Computing persistent homology in chunks
Li et al. Graph neural networks accelerated molecular dynamics
Sihombing et al. Parallel fault tree analysis for accurate reliability of complex systems
WO2020035997A1 (ja) テンソルデータ計算装置、テンソルデータ計算方法及びプログラム
Charara et al. Tile low-rank GEMM using batched operations on GPUs
D’Amore et al. Mathematical approach to the performance evaluation of matrix multiply algorithm
Woźniak Fast GPU integration algorithm for isogeometric finite element method solvers using task dependency graphs
JP4477959B2 (ja) ブロードキャスト型並列処理のための演算処理装置
Dass et al. Distributed training of support vector machine on a multiple-FPGA system
Sikorska et al. Genome-wide analysis of large-scale longitudinal outcomes using penalization—GALLOP algorithm
Melnick et al. Accelerated impurity solver for DMFT and its diagrammatic extensions
WO2015004421A1 (en) A method of performing a matrix operation in a distributed processing system
Shah et al. Accelerating revised simplex method using gpu-based basis update
Zhang et al. Pass-efficient randomized LU algorithms for computing low-rank matrix approximation
Meligy et al. Relaxation parameters and composite refinement techniques
Song et al. G-IK-SVD: parallel IK-SVD on GPUs for sparse representation of spatial big data
JP7020555B2 (ja) 情報処理装置、情報処理方法、及びプログラム
Aliaga et al. Solving dense generalized eigenproblems on multi-threaded architectures
Khezrimotlagh et al. Data envelopment analysis and big data: Revisit with a faster method
JP2016139391A (ja) テンソルデータ計算装置、テンソルデータ計算方法、及びプログラム
Zagidullin et al. Supercomputer Modelling of Spatially-heterogeneous Coagulation using MPI and CUDA
Zhang et al. Mixed-precision block incomplete sparse approximate preconditioner on Tensor core
Slavchev Performance analysis of hierarchical semi-separable compression solver for fractional diffusion problems
Ruffa et al. Parallelized solution of banded linear systems with an introduction to p-adic computation
Kohashi et al. Performance prediction of massively parallel computation by Bayesian inference

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20201201

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20220301

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20220426

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20220517

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20220530

R150 Certificate of patent or registration of utility model

Ref document number: 7091930

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150