Processing

Please wait...

Settings

Settings

Goto Application

1. WO2020194465 - NEURAL NETWORK CIRCUIT

Document

明 細 書

発明の名称 ニューラルネットワーク回路

技術分野

0001  

背景技術

0002   0003   0004   0005   0006   0007   0008   0009   0010  

先行技術文献

非特許文献

0011  

発明の概要

発明が解決しようとする課題

0012   0013   0014   0015   0016   0017   0018   0019   0020  

課題を解決するための手段

0021  

発明の効果

0022  

図面の簡単な説明

0023  

発明を実施するための形態

0024   0025   0026   0027   0028   0029   0030   0031   0032   0033   0034   0035   0036   0037   0038   0039   0040   0041   0042   0043   0044   0045   0046   0047   0048   0049   0050   0051   0052   0053   0054   0055   0056   0057  

符号の説明

0058  

請求の範囲

1   2   3   4   5   6   7   8   9  

図面

1   2   3   4   5   6   7   8   9   10  

明 細 書

発明の名称 : ニューラルネットワーク回路

技術分野

[0001]
 本発明は、畳み込みニューラルネットワークに関連するニューラルネットワーク回路に関する。

背景技術

[0002]
 画像認識を初めとする種々の分野において、畳み込みニューラルネットワーク(CNN:Convolutional Neural Network)が使用されている。CNNを用いる場合、演算量が膨大になる。その結果、処理速度が低下する。
[0003]
 一般に、畳み込み層において、空間方向の畳み込み演算とチャネル方向の畳み込み演算とが同時に実行されるので、演算量が膨大になる。そこで、空間方向への畳み込み演算とチャネル方向への畳み込み演算と分けて、それらを個別に実行する方式が考案されている(例えば、非特許文献1参照)。
[0004]
 非特許文献1に記載された畳み込み演算方式(以下、depthwise separable 畳み込みという。) では、畳み込みは、1×1畳み込みのpointwise 畳み込みとdepthwise 畳み込みとに分離される。pointwise 畳み込みは、空間方向への畳み込みを行わず、チャネル方向への畳み込みを行う。depthwise 畳み込みは、チャネル方向への畳み込みを行わず、空間方向への畳み込みを行う。depthwise 畳み込みフィルタのサイズは、例えば3×3である。
[0005]
 図8は、畳み込み演算で使用される畳み込みフィルタを説明するための説明図である。図8において、(a)は、通常の(一般的な)畳み込みフィルタに関する。(b)は、depthwise separable 畳み込みで使用されるdepthwise 畳み込みフィルタに関する。(c)は、depthwise separable 畳み込みで使用されるpointwise 畳み込みフィルタに関する。
[0006]
 一般的な畳み込みフィルタを用いる場合、入力特徴マップの縦サイズをH、入力特徴マップの横サイズをW、入力チャネル数をM、フィルタサイズをK×K、出力チャネル数をNとすると、乗算量(演算量)は、H・W・M・K・K・Nである。
[0007]
 図8(a)には、フィルタサイズのサイズがD ×D の場合が示されている。その場合、演算量は、
 H・W・M・D ・D ・N        ・・・(1)
 である。
[0008]
 depthwise separable 畳み込みにおけるdepthwise 畳み込みでは、チャネル方向への畳み込みが行われないので(図8(b)における左端の立体参照)、演算量は、
 H・W・D ・D ・M          ・・・(2)
 である。
[0009]
 depthwise separable 畳み込みにおけるpointwise 畳み込みでは、空間方向への畳み込みが行われないので、図8(c)に示すように、D =1である。よって、演算量は、
 H・W・M・M             ・・・(3)
 である。
[0010]
 (2)式による演算量と(3)式による演算量との和(depthwise separable 畳み込みの演算量)を、(1)式による演算量(一般的な畳み込み演算の演算量)と比較すると、depthwise separable 畳み込みの演算量は、一般的な畳み込み演算の演算量の[(1/N)+(1/D )]である。depthwise 畳み込みフィルタのサイズが3×3である場合、一般に、Nの値は3よりもはるかに大きいので、depthwise separable 畳み込みの演算量は、一般的な畳み込み演算の演算量に比べて、1/9程度に削減される。

先行技術文献

非特許文献

[0011]
非特許文献1 : A. G. Howard et al., "MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications" 、Google Inc. 、2017年4月

発明の概要

発明が解決しようとする課題

[0012]
 以下、depthwise separable 畳み込みにおけるdepthwise 畳み込みにおいて、3×3のフィルタが用いられるとする。その場合、非特許文献1のTable. 1に示されているように、1×1行列演算(1×1畳み込み演算)と3×3行列演算(3×3畳み込み演算)とが交互に多数回繰り返し実行される。
[0013]
 depthwise separable 畳み込みを行う演算回路を実現する場合、一例として、図9に示すような構成が考えられる。図9に示す演算回路は、pointwise 畳み込みを実行する1×1畳み込み演算回路10、depthwise 畳み込みを実行する3×3畳み込み演算回路30、DRAM(Dynamic Random Access Memory)50、および重みメモリ60を含む。
[0014]
 3×3畳み込み演算回路30は、DRAM50から特徴マップのデータを読み出し、重みメモリ60から読み出した重み係数を用いて、depthwise 畳み込みを実行する。3×3畳み込み演算回路30は、演算結果を、DRAM50に書き込む。1×1畳み込み演算回路10は、DRAM50からデータを読み出し、重みメモリ60から読み出した重み係数を用いて、pointwise 畳み込みを実行する。1×1畳み込み演算回路10は、演算結果を、DRAM50に書き込む。1×1畳み込み演算回路10および3×3畳み込み演算回路30が出力する演算結果の量および入力するデータの量は膨大である。よって、データを格納するメモリとして、一般に、大容量でも比較的安価なDRAM50が用いられる。
[0015]
 なお、1×1畳み込み演算回路10が演算処理を開始する前に、重みメモリ60に、1×1畳み込み演算用の重み係数がロードされる。また、3×3畳み込み演算回路30が演算処理を開始する前に、重みメモリ60に、3×3畳み込み演算用の重み係数がロードされる。
[0016]
 上述したように、DRAMは、比較的安価であり、また、大容量の素子である。しかし、DRAMは、低速なメモリ素子である。すなわち、DRAMのメモリ帯域は狭い。したがって、演算回路とメモリの間のデータ転送がボトルネックになる。その結果、演算速度が制限される。特に、1回の畳み込み演算に必要なデータをDRAMから読み出す時間が、1回の畳み込み演算時間を上回る場合をメモリボトルネックという。
[0017]
 処理速度を向上させるために、畳み込み層における行列演算を行う演算器として、シストリックアレイ(Systoric Array)を用いた演算器を使用することが考えられる。あるいは、積和演算を行う演算器として、SIMD(Single Instruction Multiple Data)型の演算器を使用することが考えられる。
[0018]
 例えば、図10に例示するように、pointwise 畳み込みとdepthwise 畳み込みとを時間的に交互に実行可能な1×1・3×3兼用回路70を構築することが考えられる。そして、1×1・3×3兼用回路70が、シストリックアレイまたはSIMD型の演算器で実現されることによって、高速な演算回路が構築される。
[0019]
 しかし、図10に示された構成でも、1×1・3×3兼用回路70とDRAM50との間でデータが授受されるので、演算回路とメモリの間のデータ転送に関するボトルネックは解消されない。なお、シストリックアレイを用いた演算器またはSIMD型の演算器を、図9に示された1×1畳み込み演算回路10や3×3畳み込み演算回路30に適用することも可能である。その場合でも、演算回路とメモリの間のデータ転送に関するボトルネックは解消されない。むしろ、演算器の処理効率が上昇し演算時間が削減されるため、演算時間よりもデータ転送時間が大きくなる傾向が増大し、データ転送に関するボトルネックが発生しやすくなる。
[0020]
 本発明は、狭帯域のメモリとの間のデータ転送に起因する演算速度の制限を緩和できるニューラルネットワーク回路を提供することを目的とする。

課題を解決するための手段

[0021]
 本発明によるニューラルネットワーク回路は、畳み込み演算を空間方向への畳み込み演算とチャネル方向への畳み込み演算とに分けて、それらを個別に実行するニューラルネットワーク回路であって、チャネル方向への畳み込みを行う1×1畳み込み演算回路と、1×1畳み込み演算回路の演算結果が格納されるSRAMと、SRAMに格納された演算結果に対して空間方向への畳み込みを行うN×N畳み込み演算回路とを含む。

発明の効果

[0022]
 本発明によれば、狭帯域のメモリとの間のデータ転送に起因する演算速度の制限が緩和される。

図面の簡単な説明

[0023]
[図1] 第1の実施形態のニューラルネットワーク回路の構成例を示すブロック図である。
[図2] 第2の実施形態のニューラルネットワーク回路の構成例を示すブロック図である。
[図3] 第3の実施形態のニューラルネットワーク回路の構成例を示すブロック図である。
[図4] 第4の実施形態のニューラルネットワーク回路の構成例を示すブロック図である。
[図5] ニューラルネットワーク回路の主要部を示すブロック図である。
[図6] 他の態様のニューラルネットワーク回路の主要部を示すブロック図である。
[図7] 別の態様のニューラルネットワーク回路の主要部を示すブロック図である。
[図8] 畳み込み演算で使用される畳み込みフィルタを説明するための説明図である。
[図9] depthwise separable 畳み込みを行う演算回路の一例を示すブロック図である。
[図10] depthwise separable 畳み込みを行う演算回路の他の例を示すブロック図である。

発明を実施するための形態

[0024]
 以下、本発明の実施形態を図面を参照して説明する。
[0025]
実施形態1.
 図1は、第1の実施形態のニューラルネットワーク回路の構成例を示すブロック図である。
[0026]
 図1に示すニューラルネットワーク回路は、1×1畳み込み演算回路10、重みメモリ11、3×3畳み込み演算回路30、重みメモリ31、DRAM40、およびSRAM(Static Random Access Memory )20を備えている。
[0027]
 重みメモリ11は、1×1畳み込み演算用の重み係数を記憶する。重みメモリ31は、3×3畳み込み演算用の重み係数を記憶する。
[0028]
 図1に示すニューラルネットワーク回路は、空間方向への畳み込み演算とチャネル方向への畳み込み演算と分けて、それらを個別に実行する。具体的には、1×1畳み込み演算回路10は、DRAM40から演算対象のデータを読み出し、重みメモリ11から読み出した重み係数を用いて、depthwise separable 畳み込みにおけるpointwise 畳み込み(1×1フィルタを用いるチャネル方向への畳み込み)を実行する。3×3畳み込み演算回路30は、SRAM20から演算対象のデータを読み出し、重みメモリ31から読み出した重み係数を用いて、depthwise separable 畳み込みにおけるdepthwise 畳み込み(3×3フィルタを用いる空間方向への畳み込み)を実行する。
[0029]
 なお、本実施形態では、depthwise 畳み込みで用いられるフィルタのサイズは3×3であるが、すなわち、depthwise 畳み込みにおいて3×3畳み込み演算が実行されるが、フィルタのサイズが3であることは必須のことではない、フィルタのサイズはN×N(N:2以上の自然数)であればよい。
[0030]
 DRAM40には、3×3畳み込み演算回路30の演算結果が格納される。1×1畳み込み演算回路10は、DRAM40から演算対象のデータを読み出す。SRAM20には、1×1畳み込み演算回路10の演算結果が格納される。3×3畳み込み演算回路30は、SRAM20から演算対象のデータを読み出す。
[0031]
 図1に示されたような回路構成は、以下のような理由で採用される。
[0032]
 図1に示されたニューラルネットワーク回路は、図8(b),(c)に示されたdepthwise separable 畳み込みを参照すると、depthwise 畳み込みにおいて、3×3のフィルタが用いられる場合の例に相当する。すなわち、D =3である。
[0033]
 3×3畳み込み演算回路30の演算量は、H・W・M・3 ((4)式とする。)である。1×1畳み込み演算回路10の演算量は、H・W・M・N((5)式とする。)である。上述したように、一般に、出力チャネル数Nの値はD よりもはるかに大きい。すなわち、N>>D (この例では、3)である。一例として、Nとして、64~1024のいずれかの値が用いられる。なお、入力チャネル数Mについても同様の値が用いられる。
[0034]
 (4)式と(5)式とを比較すると、1×1畳み込み演算回路10の演算量の方が、3×3畳み込み演算回路30の演算量よりも数倍以上大きいことがわかる。一方で1×1畳み込み演算回路10および3×3畳み込み演算回路30への入力のサイズの違いは M1/M3 であり、一般的に、M1=M3 または M1*2=M3 とすることが多いため、多くて2倍程度の違いである。つまり、演算量が数倍以上小さい3×3畳み込み演算回路30の方が1×1畳み込み演算回路10よりもメモリボトルネックになりやすい。
[0035]
 したがって、上述したように、3×3畳み込み演算回路30が1×1畳み込み演算回路10の演算結果をメモリ素子から読み出す時間が長いと、ニューラルネットワーク回路の全体的な演算速度が低下してしまう。
[0036]
 そこで、図1に示されたように、1×1畳み込み演算回路10の演算結果がSRAM20に格納されるように、1×1畳み込み演算回路10と3×3畳み込み演算回路30との間に、SRAM20が設置される。
[0037]
 SRAM素子(chip)からのデータ読み出し速度は、DRAM素子からのデータ読み出し速度よりも速い。したがって、図1に示されたようにSRAM20が配置されることによって、ニューラルネットワーク回路の全体的な演算速度が向上する。
[0038]
 なお、SRAM素子の集積度はDRAM素子の集積度よりも低い等の原因で、SRAM素子の容量単価は、DRAM素子の容量単価に比べて高価である。
[0039]
 しかし、図1に示された構成では、1×1畳み込み演算回路10の全ての演算結果がSRAM20に格納されなくてもよい。1×1畳み込み演算回路10による3行分の畳み込み演算の演算結果がSRAM20に格納されれば、3×3畳み込み演算回路30が畳み込み演算を開始できるからである。すなわち、本実施形態において、大容量のSRAM20を設けることは要求されない。よって、SRAM20が用いられても、ニューラルネットワーク回路のコスト上昇を抑制することができる。
[0040]
 また、3×3畳み込み演算回路30による3×3畳み込みの演算量は、1×1畳み込み演算回路10による1×1畳み込みの演算量よりも少ない。したがって、図1に示されたように、3×3畳み込みの演算結果がDRAM40を介して1×1畳み込み演算回路10に供給されるように構成されていても、そのような構成が、ニューラルネットワーク回路の全体的な演算速度に与える影響は相対的に小さい。
[0041]
 上述したように、1×1畳み込み演算回路10の演算量は、3×3畳み込み演算回路30の演算量よりも多い。例えば、N=1024とすると、1×1畳み込み演算回路10の演算量は、3×3畳み込み演算回路30の演算量に対して、(1024/9)=約114(倍)である。
[0042]
 1×1畳み込み演算回路10における演算器の個数と、3×3畳み込み演算回路30における演算器の個数との比率を、演算量に応じて設定されることが好ましい。なお、演算器は、それぞれ、畳み込み演算を実行する。N=1024の例では、1×1畳み込み演算回路10における演算器の個数を、3×3畳み込み演算回路30における演算器の個数に対して、例えば、100~130倍程度にすることが考えられる。なお、演算量に応じて演算器数を設定する手法は、例えば、演算器数の総数に制約がある場合に有効に活用される。演算器数の総数に制約がある場合は、一例として、後述するように、ニューラルネットワーク回路が、FPGA(Field Programmable Gate Array )を用いて構築される場合である。
[0043]
 また、入力チャネル数Mと出力チャネル数Nとのそれぞれは、2のn乗(n:自然数)に設定されることが多い。すると、1×1畳み込み演算回路10と3×3畳み込み演算回路30とのそれぞれにおいて、演算器の個数が2のn乗であると、種々の畳み込みニューラルネットワークとの親和性が高くなる。
[0044]
実施形態2.
 図2は、第2の実施形態のニューラルネットワーク回路の構成例を示すブロック図である。
[0045]
 第2の実施形態では、ニューラルネットワーク回路における1×1畳み込み演算回路10と3×3畳み込み演算回路30とが、FPGA101上に構築されている。1×1畳み込み演算回路10および3×3畳み込み演算回路30の機能は、第1の実施形態におけるそれらの機能と同じである。
[0046]
実施形態3.
 図3は、第3の実施形態のニューラルネットワーク回路の構成例を示すブロック図である。
[0047]
 第3の実施形態では、ニューラルネットワーク回路における1×1畳み込み演算回路10と3×3畳み込み演算回路30とに加えて、SRAM20もFPGA102上に構築されている。1×1畳み込み演算回路10、SRAM20および3×3畳み込み演算回路30の機能は、第1の実施形態におけるそれらの機能と同じである。
[0048]
実施形態4.
 図4は、第4の実施形態のニューラルネットワーク回路の構成例を示すブロック図である。
[0049]
 図4には、重み係数格納部80が明示されている。重み係数格納部80には、例えば、1つの畳み込み層で使用されうる全ての重み係数があらかじめ設定されている。そして、1×1畳み込み演算と3×3畳み込み演算とが交互に多数回繰り返し実行される場合、ある回の1×1畳み込み演算が開始される前に、1×1畳み込み演算用の重み係数が、重み係数格納部80から重みメモリ11に転送される。また、ある回の3×3畳み込み演算が開始される前に、3×3畳み込み演算用の重み係数が、重み係数格納部80から重みメモリ31に転送される。
[0050]
 図4に示された1×1畳み込み演算回路10、重みメモリ11、SRAM20、3×3畳み込み演算回路30、重みメモリ31、およびDRAM40の作用は、第1~第3の実施形態の場合と同様である。
[0051]
 重みメモリ11は、1×1畳み込み演算回路10に対応して設けられている。重みメモリ31は、3×3畳み込み演算回路30に対応して設けられている。また、上述したように、1×1畳み込み演算回路10による3行分の畳み込み演算の演算結果がSRAM20に格納されれば、3×3畳み込み演算回路30が畳み込み演算を開始できる。その後、1×1畳み込み演算回路10と3×3畳み込み演算回路30とは、並行動作する。1×1畳み込み演算回路10と3×3畳み込み演算回路30とが並行動作するので、そのことからも、ニューラルネットワーク回路の全体的な演算速度が向上する。しかも、重みメモリ11と重みメモリ31とが別個に設けられているので、例えば、1×1畳み込み演算回路10が最初の3行分の畳み込み演算を実行しているときに、重み係数格納部80から3×3畳み込み演算回路30に3×3畳み込み演算用の重み係数が転送されるように構成されることによって、ニューラルネットワーク回路の全体的な演算速度がより向上する。
[0052]
 以上に説明したように、上記の各実施形態では、畳み込み演算を、空間方向への畳み込み演算とチャネル方向への畳み込み演算と分けて、それらを個別に実行するニューラルネットワーク回路において、1×1畳み込み演算回路10の演算結果がSRAM20に格納され、3×3畳み込み演算回路30が、SRAM20から、1×1畳み込み演算回路10の演算結果を入手するように構成されているので、ニューラルネットワーク回路の価格の上昇が抑えられつつ、ニューラルネットワーク回路の全体的な演算速度が向上する。
[0053]
 なお、上記の各実施形態では、depthwise separable 畳み込みとして、非特許文献1に記載されたようなMobileNetsを例にしたが、各実施形態のニューラルネットワーク回路は、MobileNets以外のdepthwise separable 畳み込みに適用可能である。例えば、3×3畳み込み演算回路30に相当する部分の処理がdepthwise 畳み込みではなく、depthwise畳み込みの一般系であるGroupedConvolutionであってもよい。GroupedConvolutionとは、Convolutionへの入力チャネルをG個のグループに分割してグループ単位で畳み込みを実施するものである。言い換えると、 入力チャネル数をM 、出力チャネル数をN としたとき、入力チャネル数がM/G 、出力チャネル数がN/G である3×3畳み込みをG個並行に実施する。depthwise 畳み込みは、このGroupedConvolutionにおいて、M=N=G とした場合に相当する。
[0054]
 図5は、ニューラルネットワーク回路の主要部を示すブロック図である。図5に示すニューラルネットワーク回路201は、チャネル方向への畳み込みを行う1×1畳み込み演算回路10と、1×1畳み込み演算回路10の演算結果が格納されるSRAM20と、SRAM20に格納された演算結果に対して空間方向への畳み込みを行うN×N畳み込み演算回路301(実施形態では、例えば、図1等に示された3×3畳み込み演算回路30で実現される。)とを備える。
[0055]
 図6は、他の態様のニューラルネットワーク回路の主要部を示すブロック図である。図6に示すニューラルネットワーク回路202は、さらに、N×N畳み込み演算回路301の演算結果が格納されるDRAM40を備え、1×1畳み込み演算回路10は、DRAM40に格納された演算結果に対してチャネル方向への畳み込みを行う。
[0056]
 図7は、別の態様のニューラルネットワーク回路の主要部を示すブロック図である。図7に示すニューラルネットワーク回路203は、さらに、1×1畳み込み演算回路10が使用する重み係数を記憶する第1の重みメモリ111(実施形態では、例えば、図1等に示されたと、重みメモリ11で実現される。)と、N×N畳み込み演算回路301が使用する重み係数を記憶する第2の重みメモリ311(実施形態では、例えば、図1等に示されたと、重みメモリ31で実現される。)とを備え、1×1畳み込み演算回路10とN×N畳み込み演算回路301とは、並行して畳み込み演算を実行する。
[0057]
 以上、実施形態を参照して本願発明を説明したが、本願発明は上記の実施形態に限定されるものではない。本願発明の構成や詳細には、本願発明のスコープ内で当業者が理解し得る様々な変更をすることができる。

符号の説明

[0058]
 10  1×1畳み込み演算回路
 11  重みメモリ
 20  SRAM
 30  3×3畳み込み演算回路
 31  重みメモリ
 40  DRAM
 80 重み係数格納部
 101,102 FPGA
 111 第1の重みメモリ
 301 N×N畳み込み演算回路
 311 第2の重みメモリ
 201,202,203 ニューラルネットワーク回路

請求の範囲

[請求項1]
 畳み込み演算を空間方向への畳み込み演算とチャネル方向への畳み込み演算とに分けて、それらを個別に実行するニューラルネットワーク回路であって、
 チャネル方向への畳み込みを行う1×1畳み込み演算回路と、
 前記1×1畳み込み演算回路の演算結果が格納されるSRAMと、
 前記SRAMに格納された演算結果に対して空間方向への畳み込みを行うN×N畳み込み演算回路とを備える
 ことを特徴とするニューラルネットワーク回路。
[請求項2]
 前記N×N畳み込み演算回路の演算結果が格納されるDRAMを備え、
 前記1×1畳み込み演算回路は、前記DRAMに格納された演算結果に対してチャネル方向への畳み込みを行う
 請求項1記載のニューラルネットワーク回路。
[請求項3]
 Nは3である請求項1または請求項2記載のニューラルネットワーク回路。
[請求項4]
 前記1×1畳み込み演算回路における演算器の数と前記N×N畳み込み演算回路における演算器の数とは、演算コストに応じて設定されている
 請求項1から請求項3のうちのいずれか1項に記載のニューラルネットワーク回路。
[請求項5]
 前記1×1畳み込み演算回路における演算器の数は、前記N×N畳み込み演算回路における演算器の数よりも多い
 請求項4記載のニューラルネットワーク回路。
[請求項6]
 前記1×1畳み込み演算回路における演算器の数と前記N×N畳み込み演算回路における演算器の数は、それぞれ、2のn乗である
 請求項1から請求項5のうちのいずれか1項に記載のニューラルネットワーク回路。
[請求項7]
 前記1×1畳み込み演算回路が使用する重み係数を記憶する第1の重みメモリと、
 前記N×N畳み込み演算回路が使用する重み係数を記憶する第2の重みメモリとを備え、
 前記1×1畳み込み演算回路と前記N×N畳み込み演算回路とは、並行して畳み込み演算を実行する
 請求項1から請求項6のうちのいずれか1項に記載のニューラルネットワーク回路。
[請求項8]
 少なくとも、前記1×1畳み込み演算回路と前記N×N畳み込み演算回路とがFPGAに形成されている
 請求項1から請求項7のうちのいずれか1項に記載のニューラルネットワーク回路。
[請求項9]
 前記SRAMも、前記FPGA形成されている
 請求項8記載のニューラルネットワーク回路。

図面

[ 図 1]

[ 図 2]

[ 図 3]

[ 図 4]

[ 図 5]

[ 図 6]

[ 図 7]

[ 図 8]

[ 図 9]

[ 図 10]