Nothing Special   »   [go: up one dir, main page]

KR102667790B1 - 뉴럴 네트워크 회로, 에지 디바이스 및 뉴럴 네트워크 연산 방법 - Google Patents

뉴럴 네트워크 회로, 에지 디바이스 및 뉴럴 네트워크 연산 방법 Download PDF

Info

Publication number
KR102667790B1
KR102667790B1 KR1020210047004A KR20210047004A KR102667790B1 KR 102667790 B1 KR102667790 B1 KR 102667790B1 KR 1020210047004 A KR1020210047004 A KR 1020210047004A KR 20210047004 A KR20210047004 A KR 20210047004A KR 102667790 B1 KR102667790 B1 KR 102667790B1
Authority
KR
South Korea
Prior art keywords
circuit
memory
quantization
layer
convolution
Prior art date
Application number
KR1020210047004A
Other languages
English (en)
Other versions
KR20210127099A (ko
Inventor
고우메이 도미다
니콜라이 네즈
Original Assignee
립마인드 가부시키가이샤
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 립마인드 가부시키가이샤 filed Critical 립마인드 가부시키가이샤
Publication of KR20210127099A publication Critical patent/KR20210127099A/ko
Application granted granted Critical
Publication of KR102667790B1 publication Critical patent/KR102667790B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • 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/15Correlation function computation including computation of convolution operations
    • G06F17/153Multidimensional correlation or convolution
    • 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
    • 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/57Arithmetic logic units [ALU], i.e. arrangements or devices for performing two or more of the operations covered by groups G06F7/483 – G06F7/556 or for performing logical operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Data Mining & Analysis (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biomedical Technology (AREA)
  • Biophysics (AREA)
  • Health & Medical Sciences (AREA)
  • Computing Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Artificial Intelligence (AREA)
  • Molecular Biology (AREA)
  • General Health & Medical Sciences (AREA)
  • Evolutionary Computation (AREA)
  • Computational Linguistics (AREA)
  • Mathematical Analysis (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Neurology (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Complex Calculations (AREA)
  • Details Of Television Systems (AREA)
  • Electrotherapy Devices (AREA)

Abstract

IoT 기기 등의 내장 기기에 내장 가능하면서 고성능인 뉴럴 네트워크 회로를 제공한다. 뉴럴 네트워크 회로는, 입력 데이터를 저장하는 제1 메모리와, 상기 제1 메모리에 저장된 상기 입력 데이터와 가중치에 대하여 컨벌루션 연산을 행하는 컨벌루션 연산 회로와, 상기 컨벌루션 연산 회로의 컨벌루션 연산 출력 데이터를 저장하는 제2 메모리와, 상기 제2 메모리에 저장된 상기 컨벌루션 연산 출력 데이터에 대하여 양자화 연산을 행하는 양자화 연산 회로를 구비하고, 상기 양자화 연산 회로의 양자화 연산 출력 데이터는, 상기 제1 메모리에 저장되고, 상기 제1 메모리에 저장된 상기 양자화 연산 출력 데이터는, 상기 컨벌루션 연산 회로에 상기 입력 데이터로서 입력된다.

Description

뉴럴 네트워크 회로, 에지 디바이스 및 뉴럴 네트워크 연산 방법{NEURAL NETWORK CIRCUIT, EDGE DEVICE AND METHOD FOR NEURAL NETWORK CALCULATION}
본 발명은, 뉴럴 네트워크 회로(neural network circuit), 에지 디바이스(edge device) 및 뉴럴 네트워크 연산 방법에 관한 것이다. 본원은, 2020년 04월 13일에, 일본에 출원된 2020-071932호에 기초하여 우선권을 주장하고, 그 내용을 여기에 원용한다.
최근, 컨벌루션 뉴럴 네트워크(Convolutional Neural Network: CNN)가 화상 인식 등의 모델로서 사용되고 있다. 컨벌루션 뉴럴 네트워크는, 컨벌루션층이나 풀링층(pooling layer)을 구비하는 다층 구조이며, 컨벌루션 연산 등의 다수의 연산을 필요로 한다. 컨벌루션 뉴럴 네트워크에 의한 연산을 고속화하는 연산 방법이 여러 가지 고안되어 있다(특허문헌 1등).
일본 공개특허 제2018-077829호 공보
한편, IoT 기기(機器) 등의 내장 기기에 있어서도 컨벌루션 뉴럴 네트워크를 이용한 화상 인식 등을 실현하는 것이 요구되고 있다. 내장 기기에 있어서는, 특허문헌 1등에 기재된 대규모 전용(專用) 회로를 내장하는 것은 어렵다. 또한, CPU나 메모리 등의 하드웨어 자원이 한정된 내장 기기에 있어서는, 컨벌루션 뉴럴 네트워크의 충분한 연산 성능을 소프트웨어만에 의해 실현하는 것은 어렵다.
상기 사정을 감안하여, 본 발명은, IoT 기기 등의 내장 기기에 내장 가능하면서 고성능인 뉴럴 네트워크 회로, 에지 디바이스 및 뉴럴 네트워크 연산 방법을 제공하는 것을 목적으로 한다.
상기 문제점을 해결하기 위해, 본 발명은 이하의 수단을 제안하고 있다.
본 발명의 제1 태양(態樣)에 관한 뉴럴 네트워크 회로는, 입력 데이터를 저장하는 제1 메모리와, 상기 제1 메모리에 저장된 상기 입력 데이터와 가중치에 대하여 컨벌루션 연산을 행하는 컨벌루션 연산 회로와, 상기 컨벌루션 연산 회로의 컨벌루션 연산 출력 데이터를 저장하는 제2 메모리와, 상기 제2 메모리에 저장된 상기 컨벌루션 연산 출력 데이터에 대하여 양자화 연산을 행하는 양자화 연산 회로를 구비하고, 상기 양자화 연산 회로의 양자화 연산 출력 데이터는, 상기 제1 메모리에 저장되고, 상기 제1 메모리에 저장된 상기 양자화 연산 출력 데이터는, 상기 컨벌루션 연산 회로에 상기 입력 데이터로서 입력된다.
본 발명의 제1 태양에 관한 뉴럴 네트워크 연산 방법은, 제1 메모리 영역과 제2 메모리 영역을 사용하여 컨벌루션 연산과 양자화 연산을 행하는 뉴럴 네트워크 연산 방법으로서, 상기 제1 메모리 영역에 저장된 입력 데이터에 대하여 레이어 2M-1(M은 자연수)의 상기 컨벌루션 연산을 행하고, 상기 레이어 2M-1의 컨벌루션 연산 출력 데이터를 상기 제2 메모리 영역에 저장하고, 상기 제2 메모리 영역에 저장된 상기 레이어 2M-1의 상기 컨벌루션 연산 출력 데이터에 대하여 레이어 2M의 상기 양자화 연산을 행하고, 상기 레이어 2M의 양자화 연산 출력 데이터를 상기 제1 메모리 영역에 저장하고, 상기 제1 메모리 영역에 저장된 상기 레이어 2M의 상기 양자화 연산 출력 데이터를 상기 입력 데이터로 하여 레이어 2M+1의 상기 컨벌루션 연산을 행하고, 레이어 2M+1의 상기 컨벌루션 연산 출력 데이터를 상기 제2 메모리 영역에 저장한다.
본 발명의 뉴럴 네트워크 회로, 에지 디바이스 및 뉴럴 네트워크 연산 방법은, IoT 기기 등의 내장 기기에 내장 가능하면서 고성능이다.
도 1은 컨벌루션 뉴럴 네트워크를 나타낸 도면이다.
도 2는 컨벌루션층이 행하는 컨벌루션 연산을 설명하는 도면이다.
도 3은 컨벌루션 연산의 데이터의 전개(展開)를 설명하는 도면이다.
도 4는 제1 실시형태에 관한 뉴럴 네트워크 회로의 전체 구성을 나타낸 도면이다.
도 5는 동 뉴럴 네트워크 회로의 동작예를 나타낸 타이밍 차트이다.
도 6은 동 뉴럴 네트워크 회로의 다른 동작예를 나타낸 타이밍 차트이다.
도 7은 동 뉴럴 네트워크 회로의 DMAC의 내부 블록도이다.
도 8은 동 DMAC의 제어 회로의 스테이트 천이도(遷移圖)이다.
도 9는 동 뉴럴 네트워크 회로의 컨벌루션 연산 회로의 내부 블록도이다.
도 10은 동 컨벌루션 연산 회로의 승산기의 내부 블록도이다.
도 11은 동 승산기의 적화(積和) 연산 유닛의 내부 블록도이다.
도 12는 동 컨벌루션 연산 회로의 어큐뮬레이터(accumulator) 회로의 내부 블록도이다.
도 13은 동 어큐뮬레이터 회로의 어큐뮬레이터 유닛의 내부 블록도이다.
도 14는 동 뉴럴 네트워크 회로의 양자화 연산 회로의 내부 블록도이다.
도 15는 동 양자화 연산 회로의 벡터 연산 회로와 양자화 회로의 내부 블록도이다.
도 16은 연산 유닛의 블록도이다.
도 17은 동 양자화 회로의 벡터 양자화 유닛의 내부 블록도이다.
도 18은 세마포어(semaphore)에 의한 동 뉴럴 네트워크 회로의 제어를 설명하는 도면이다.
도 19는 제1 데이터 플로우의 타이밍 차트이다.
도 20은 제2 데이터 플로우의 타이밍 차트이다.
(제1 실시형태)
본 발명의 제1 실시형태에 대하여, 도 1 내지 도 20을 참조하여 설명한다.
도 1은, 컨벌루션 뉴럴 네트워크(200)[이하, 「CNN(200)」이라고 함]를 나타낸 도면이다. 제1 실시형태에 관한 뉴럴 네트워크 회로(100)[이하, 「NN 회로(100)」라고 함]가 행하는 연산은, 추론 시에 사용하는 학습이 끝난 CNN(200) 중 적어도 일부이다.
[CNN(200)]
CNN(200)은, 컨벌루션 연산을 행하는 컨벌루션층(210)과, 양자화 연산을 행하는 양자화 연산층(220)과, 출력층(230)을 포함하는 다층 구조의 네트워크이다. CNN(200) 중 적어도 일부에 있어서, 컨벌루션층(210)과 양자화 연산층(220)이 교호적(交互的)으로 연결되어 있다. CNN(200)은, 화상 인식이나 동영상 인식에 널리 사용되는 모델이다. CNN(200)은, 전체 결합층 등의 다른 기능을 가지는 층(레이어)을 더 구비해도 된다.
도 2는, 컨벌루션층(210)이 행하는 컨벌루션 연산을 설명하는 도면이다.
컨벌루션층(210)은, 입력 데이터 a에 대하여 가중치 w를 사용한 컨벌루션 연산을 행한다. 컨벌루션층(210)은, 입력 데이터 a와 가중치 w를 입력으로 하는 적화 연산을 행한다.
컨벌루션층(210)에 대한 입력 데이터 a(액티베이션 데이터, 특징 맵이라고도 함)는, 화상 데이터 등의 다차원 데이터이다. 본 실시형태에 있어서, 입력 데이터 a는, 요소(要素)(x, y, c)로 이루어지는 3차원 텐서(tensor)이다. CNN(200)의 컨벌루션층(210)은, 저비트의 입력 데이터 a에 대하여 컨벌루션 연산을 행한다. 본 실시형태에 있어서, 입력 데이터 a의 요소는, 2비트의 부호없는 정수(整數)(0, 1, 2, 3)이다. 입력 데이터 a의 요소는, 예를 들면, 4비트나 8비트 부호없는 정수라도 된다.
CNN(200)에 입력되는 입력 데이터가, 예를 들면, 32비트의 부동(浮動) 소수점형 등, 컨벌루션층(210)에 대한 입력 데이터 a와 형식이 상이한 경우, CNN(200)은 컨벌루션층(210)의 앞에 형변환(型變煥)이나 양자화를 행하는 입력층을 더 구비해도 된다.
컨벌루션층(210)의 가중치 w(필터, 커넬이라고도 함)는, 학습 가능한 파라미터인 요소를 구비하는 다차원 데이터이다. 본 실시형태에 있어서, 가중치 w는, 요소(i, j, c, d)로 이루어지는 4차원 텐서이다. 가중치 w는, 요소(i, j, c)로 이루어지는 3차원 텐서(이후, 「가중치 wo」라고 함)를 d개 가지고 있다. 학습이 끝난 CNN(200)에서의 가중치 w는, 학습이 끝난 데이터이다. CNN(200)의 컨벌루션층(210)은, 저비트의 가중치 w를 사용하여 컨벌루션 연산을 행한다. 본 실시형태에 있어서, 가중치 w의 요소는, 1비트의 부호부 정수(0, 1)이며, 값 「0」은 +1을 나타내고, 값 「1」은 ―1을 나타낸다.
컨벌루션층(210)은, 식 1에 나타낸 컨벌루션 연산을 행하고, 출력 데이터 f를 출력한다. 식 1에 있어서, s는 스트라이드(stride)를 나타낸다. 도 2에 있어서 점선으로 나타낸 영역은, 입력 데이터 a에 대하여 가중치 wo가 적용되는 영역 ao(이후, 「적용 영역 ao」라고 함)의 하나를 나타내고 있다. 적용 영역 ao의 요소는, (x+i, y+j, c)로 표현된다.
[식 1]
… 식 1
양자화 연산층(220)은, 컨벌루션층(210)이 출력하는 컨벌루션 연산의 출력에 대하여 양자화 등을 실시한다. 양자화 연산층(220)은, 풀링층(221)과, 배치 정규화층[batch normalization layer)(222)과, 활성화 함수층(關數層)(223)과, 양자화층(224)을 가진다.
풀링층(221)은, 컨벌루션층(210)이 출력하는 컨벌루션 연산의 출력 데이터 f에 대하여 평균 풀링(pooling)(식 2)이나 MAX 풀링(식 3) 등의 연산을 실시하여, 컨벌루션층(210)의 출력 데이터 f를 압축한다. 식 2 및 식 3에 있어서, u는 입력 텐서를 나타내고, v는 출력 텐서를 나타내고, T는 풀링 영역의 크기를 나타낸다. 식 3에 있어서, max는 T에 포함되는 i와 j의 조합에 대한 u의 최대값을 출력하는 함수이다.
[식 2]
… 식 2
[식 3]
… 식 3
배치 정규화층(222)은, 양자화 연산층(220)이나 풀링층(221)의 출력 데이터에 대하여, 예를 들면, 식 4에 나타낸 바와 같은 연산에 의해 데이터 분포의 정규화를 행한다. 식 4에 있어서, u는 입력 텐서를 나타내고, v는 출력 텐서를 나타내고, α는 스케일을 나타내고, β는 바이어스를 나타낸다. 학습이 끝난 CNN(200)에 있어서, α 및 β는 학습이 끝난 상수(定數; constant) 벡터이다.
[식 4]
… 식 4
활성화 함수층(223)은, 양자화 연산층(220)이나 풀링층(221)이나 배치 정규화층(222)의 출력에 대하여 ReLU(식 5) 등의 활성화 함수의 연산을 행한다. 식 5에 있어서, u는 입력 텐서이며, v는 출력 텐서이다. 식 5에 있어서, max는 인수(引數; argument) 중 가장 큰 수치를 출력하는 함수이다.
[식 5]
… 식 5
양자화층(224)은, 양자화 파라미터에 기초하여, 풀링층(221)이나 활성화 함수층(223)의 출력에 대하여, 예를 들면, 식 6에 나타낸 바와 같은 양자화를 행한다. 식 6에 나타낸 양자화는, 입력 텐서 u를 2비트로 비트 삭감하고 있다. 식 6에 있어서, q(c)는 양자화 파라미터의 벡터이다. 학습이 끝난 CNN(200)에 있어서, q(c)는 학습이 끝난 상수 벡터이다. 식 6에서의 부등호 「≤」은 「<」이라도 된다.
[식 6]
… 식 6
출력층(230)은, 항등함수(恒等關數)나 소프트맥스(softmax) 함수 등에 의해 CNN(200)의 결과를 출력하는 층이다. 출력층(230)의 전단(前段)의 레이어는, 컨벌루션층(210)이라도 되고, 양자화 연산층(220)이라도 된다.
CNN(200)은, 양자화된 양자화층(224)의 출력 데이터가, 컨벌루션층(210)에 입력되므로, 양자화를 행하지 않는 다른 컨벌루션 뉴럴 네트워크와 비교하여, 컨벌루션층(210)의 컨벌루션 연산의 부하가 작다.
[컨벌루션 연산의 분할]
NN 회로(100)는, 컨벌루션층(210)의 컨벌루션 연산(식 1)의 입력 데이터를 부분 텐서로 분할하여 연산한다. 부분 텐서로의 분할하는 방법이나 분할 수는 특별히 한정되지 않는다. 부분 텐서는, 예를 들면, 입력 데이터 a(x+i, y+j, c)를 a(x+i, y+j, co)로 분할함으로써 형성된다. 그리고, NN 회로(100)는, 컨벌루션층(210)의 컨벌루션 연산(식 1)의 입력 데이터를 분할하지 않고 연산할 수도 있다.
컨벌루션 연산의 입력 데이터 분할에 있어서, 식 1에서의 변수(變數) c는, 식 7에 나타낸 바와 같이, 사이즈 Bc의 블록으로 분할된다. 또한, 식 1에서의 변수 d는, 식 8에 나타낸 바와 같이, 사이즈 Bd의 블록으로 분할된다. 식 7에 있어서, co는 오프셋이며, ci는 0로부터 Bc-1까지의 인덱스이다. 식 8에 있어서, do는 오프셋이며, di는 0로부터 (Bd-1)까지의 인덱스이다. 그리고, 사이즈 Bc와 사이즈 Bd는 같아도 된다.
[식 7]
… 식 7
[식 8]
… 식 8
식 1에서의 입력 데이터 a(x+i, y+j, c)는, c축 방향에 있어서 사이즈 Bc로 분할되고, 분할된 입력 데이터 a(x+i, y+j, co)로 표현된다. 이후의 설명에 있어서, 분할된 입력 데이터 a를 「분할 입력 데이터(a)」라고도 한다.
식 1에서의 가중치 w(i, j, c, d)는, c축 방향에 있어서 사이즈 Bc 및 d축 방향에 있어서 사이즈 Bd로 분할되고, 분할된 가중치 w(i, j, co, do)로 표현된다. 이후의 설명에 있어서, 분할된 가중치 w를 「분할 가중치 w」라고도 한다.
사이즈 Bd로 분할된 출력 데이터 f(x, y, do)는, 식 9에 의해 구해진다. 분할된 출력 데이터 f(x, y, do)를 조합함으로써, 최종적인 출력 데이터 f(x, y, d)를 산출할 수 있다.
[식 9]
… 식 9
[컨벌루션 연산의 데이터의 전개]
NN 회로(100)는, 컨벌루션층(210)의 컨벌루션 연산에서의 입력 데이터 a 및 가중치 w를 전개하여 컨벌루션 연산을 행한다.
도 3은, 컨벌루션 연산의 데이터의 전개를 설명하는 도면이다.
분할 입력 데이터 a(x+i, y+j, co)는, Bc개의 요소를 구비하는 벡터 데이터로 전개된다. 분할 입력 데이터 a의 요소는, ci로 인덱스된다(0≤ci<Bc). 이후의 설명에 있어서, (i, j)마다 벡터 데이터로 전개된 분할 입력 데이터 a를 「입력 벡터 A」라고도 한다. 입력 벡터 A는, 분할 입력 데이터 a(x+i, y+j, co×Bc)로부터 분할 입력 데이터 a[x+i, y+j, co×Bc+(Bc-1)]까지를 요소로 한다.
분할 가중치 w(i, j, co, do)는, Bc×Bd개의 요소를 구비하는 매트릭스 데이터로 전개된다. 매트릭스 데이터로 전개된 분할 가중치 w의 요소는, ci와 di에 의해 인덱스된다(0≤di<Bd). 이후의 설명에 있어서, i, j마다 매트릭스 데이터로 전개된 분할 가중치 w를 「가중치 매트릭스 W」라고도 한다. 가중치 매트릭스 W는, 분할 가중치 w(i, j, co×Bc, do×Bd)로부터 분할 가중치 w[i, j, co×Bc+(Bc-1), do×Bd+(Bd-1)]까지를 요소로 한다.
입력 벡터 A와 가중치 매트릭스 W를 승산함으로써, 벡터 데이터가 산출된다. i, j, co마다 산출된 벡터 데이터를 3차원 텐서로 정형(整形)함으로써, 출력 데이터 f(x, y, do)를 얻을 수 있다. 이와 같은 데이터의 전개를 행함으로써, 컨벌루션층(210)의 컨벌루션 연산을, 벡터 데이터와 매트릭스 데이터와의 승산에 의해 실시할 수 있다.
[NN 회로(100)]
도 4는, 본 실시형태에 관한 NN 회로(100)의 전체 구성을 나타낸 도면이다.
NN 회로(100)는, 제1 메모리(1)와, 제2 메모리(2)와, DMA 컨트롤러(3)(이하, 「DMAC(3)」라고도 함)과, 컨벌루션 연산 회로(4)와, 양자화 연산 회로(5)와, 컨트롤러(6)를 구비한다. NN 회로(100)는, 제1 메모리(1) 및 제2 메모리(2)를 통해, 컨벌루션 연산 회로(4)와 양자화 연산 회로(5)가 루프형으로 형성되어 있는 것을 특징으로 한다.
제1 메모리(1)는, 예를 들면, SRAM(Static RAM) 등으로 구성된 휘발성의 메모리 등의 재기입 가능한 메모리이다. 제1 메모리(1)에는, DMAC(3)나 컨트롤러(6)를 통해 데이터의 기입(write) 및 판독이 행해진다. 제1 메모리(1)는, 컨벌루션 연산 회로(4)의 입력 포트와 접속되어 있고, 컨벌루션 연산 회로(4)는 제1 메모리(1)로부터 데이터를 판독할 수 있다. 또한, 제1 메모리(1)는, 양자화 연산 회로(5)의 출력 포트와 접속되어 있고, 양자화 연산 회로(5)는 제1 메모리(1)에 데이터를 기입할 수 있다. 외부 호스트 CPU는, 제1 메모리(1)에 대한 데이터의 기입이나 판독에 의해, NN 회로(100)에 대한 데이터의 입출력을 행할 수 있다.
제2 메모리(2)는, 예를 들면, SRAM(Static RAM) 등으로 구성된 휘발성의 메모리 등의 재기입 가능한 메모리이다. 제2 메모리(2)에는, DMAC(3)나 컨트롤러(6)를 통해 데이터의 기입 및 판독이 행해진다. 제2 메모리(2)는, 양자화 연산 회로(5)의 입력 포트와 접속되어 있고, 양자화 연산 회로(5)는 제2 메모리(2)로부터 데이터를 판독할 수 있다. 또한, 제2 메모리(2)는, 컨벌루션 연산 회로(4)의 출력 포트와 접속되어 있고, 컨벌루션 연산 회로(4)는 제2 메모리(2)에 데이터를 기입할 수 있다. 외부 호스트 CPU는, 제2 메모리(2)에 대한 데이터의 기입이나 판독에 의해, NN 회로(100)에 대한 데이터의 입출력을 행할 수 있다.
DMAC(3)는, 외부 버스(EB)에 접속되어 있고, DRAM 등의 외부 메모리와 제1 메모리(1)와의 사이의 데이터 전송을 행한다. 또한, DMAC(3)는, DRAM 등의 외부 메모리와 제2 메모리(2)와의 사이의 데이터 전송을 행한다. 또한, DMAC(3)는, DRAM 등의 외부 메모리와 컨벌루션 연산 회로(4)와의 사이의 데이터 전송을 행한다. 또한, DMAC(3)는, DRAM 등의 외부 메모리와 양자화 연산 회로(5)와의 사이의 데이터 전송을 행한다.
컨벌루션 연산 회로(4)는, 학습이 끝난 CNN(200)의 컨벌루션층(210)에서의 컨벌루션 연산을 행하는 회로이다. 컨벌루션 연산 회로(4)는, 제1 메모리(1)에 저장된 입력 데이터 a를 판독하고, 입력 데이터 a에 대하여 컨벌루션 연산을 실시한다. 컨벌루션 연산 회로(4)는, 컨벌루션 연산의 출력 데이터 f(이후, 「컨벌루션 연산 출력 데이터」라고도 함)를 제2 메모리(2)에 기입한다.
양자화 연산 회로(5)는, 학습이 끝난 CNN(200)의 양자화 연산층(220)에서의 양자화 연산 중 적어도 일부를 행하는 회로이다. 양자화 연산 회로(5)는, 제2 메모리(2)에 저장된 컨벌루션 연산의 출력 데이터 f를 판독하고, 컨벌루션 연산의 출력 데이터 f에 대하여 양자화 연산(풀링, 배치 정규화, 활성화 함수, 및 양자화 중 적어도 양자화를 포함하는 연산)을 행한다. 양자화 연산 회로(5)는, 양자화 연산의 출력 데이터(이후, 「양자화 연산 출력 데이터」라고도 함)를 제1 메모리(1)에 기입한다.
컨트롤러(6)는, 외부 버스(EB)에 접속되어 있고, 외부의 호스트 CPU의 슬레이브로서 동작한다. 컨트롤러(6)는, 파라미터 레지스터나 상태 레지스터를 포함하는 레지스터(61)를 구비하고 있다. 파라미터 레지스터는, NN 회로(100)의 동작을 제어하는 레지스터이다. 상태 레지스터는 세마포어 S를 포함하는 NN 회로(100)의 상태를 나타내는 레지스터이다. 외부 호스트 CPU는, 컨트롤러(6)를 경유하여, 레지스터(61)에 액세스할 수 있다.
컨트롤러(6)는, 내부 버스(IB)를 통해, 제1 메모리(1)와, 제2 메모리(2)와, DMAC(3)과, 컨벌루션 연산 회로(4)와, 양자화 연산 회로(5)와 접속되어 있다. 외부 호스트 CPU는, 컨트롤러(6)를 경유하여, 각 블록에 대하여 액세스할 수 있다. 예를 들면, 외부 호스트 CPU는, 컨트롤러(6)를 경유하여, DMAC(3)나 컨벌루션 연산 회로(4)나 양자화 연산 회로(5)에 대한 명령을 지시할 수 있다. 또한, DMAC(3)나 컨벌루션 연산 회로(4)나 양자화 연산 회로(5)는, 내부 버스(IB)를 통해, 컨트롤러(6)가 구비하는 상태 레지스터[세마포어](S)를 포함함]를 갱신할 수 있다. 상태 레지스터(세마포어 S를 포함함)는, DMAC(3)나 컨벌루션 연산 회로(4)나 양자화 연산 회로(5)와 접속된 전용 배선을 통해 갱신되도록 구성되어 있어도 된다.
NN 회로(100)는, 제1 메모리(1)나 제2 메모리(2) 등을 가지므로, DRAM 등의 외부 메모리로부터의 DMAC(3)에 의한 데이터 전송에 있어서, 중복되는 데이터의 데이터 전송의 횟수를 저감할 수 있다.
이로써, 메모리 액세스에 의해 발생하는 소비 전력을 대폭 저감할 수 있다.
[NN 회로(100)의 동작예 1]
도 5는, NN 회로(100)의 동작예를 나타낸 타이밍 차트이다. DMAC(3)는, 레이어(1)의 입력 데이터 a를 제1 메모리(1)에 저장한다. DMAC(3)는, 컨벌루션 연산 회로(4)가 행하는 컨벌루션 연산의 순서에 맞추어, 레이어(1)의 입력 데이터 a를 분할하여 제1 메모리(1)에 전송해도 된다.
컨벌루션 연산 회로(4)는, 제1 메모리(1)에 저장된 레이어(1)의 입력 데이터 a를 판독한다. 컨벌루션 연산 회로(4)는, 레이어(1)의 입력 데이터 a에 대하여 도 1에 나타낸 레이어(1)의 컨벌루션 연산을 행한다. 레이어(1)의 컨벌루션 연산의 출력 데이터 f는, 제2 메모리(2)에 저장된다.
양자화 연산 회로(5)는, 제2 메모리(2)에 저장된 레이어(1)의 출력 데이터 f를 판독한다. 양자화 연산 회로(5)는, 레이어(1)의 출력 데이터 f에 대하여 레이어(2)의 양자화 연산을 행한다. 레이어(2)의 양자화 연산의 출력 데이터는, 제1 메모리(1)에 저장된다.
컨벌루션 연산 회로(4)는, 제1 메모리(1)에 저장된 레이어(2)의 양자화 연산의 출력 데이터를 판독한다. 컨벌루션 연산 회로(4)는, 레이어(2)의 양자화 연산의 출력 데이터를 입력 데이터 a로 하여 레이어(3)의 컨벌루션 연산을 행한다. 레이어(3)의 컨벌루션 연산의 출력 데이터 f는, 제2 메모리(2)에 저장된다.
컨벌루션 연산 회로(4)는, 제1 메모리(1)에 저장된 레이어 2M-2(M은 자연수)의 양자화 연산의 출력 데이터를 판독한다. 컨벌루션 연산 회로(4)는, 레이어 2M-2의 양자화 연산의 출력 데이터를 입력 데이터 a로 하여 레이어 2M-1의 컨벌루션 연산을 행한다. 레이어 2M-1의 컨벌루션 연산의 출력 데이터 f는, 제2 메모리(2)에 저장된다.
양자화 연산 회로(5)는, 제2 메모리(2)에 저장된 레이어 2M-1의 출력 데이터 f를 판독한다. 양자화 연산 회로(5)는, 2M-1 레이어의 출력 데이터 f에 대하여 레이어 2M의 양자화 연산을 행한다. 레이어 2M의 양자화 연산의 출력 데이터는, 제1 메모리(1)에 저장된다.
컨벌루션 연산 회로(4)는, 제1 메모리(1)에 저장된 레이어 2M의 양자화 연산의 출력 데이터를 판독한다. 컨벌루션 연산 회로(4)는, 레이어 2M의 양자화 연산의 출력 데이터를 입력 데이터 a로 하여 레이어 2M+1의 컨벌루션 연산을 행한다. 레이어 2M+1의 컨벌루션 연산의 출력 데이터 f는, 제2 메모리(2)에 저장된다.
컨벌루션 연산 회로(4)와 양자화 연산 회로(5)가 교호적으로 연산을 행하고, 도 1에 나타낸 NN(200)의 연산을 진행하여 간다. NN 회로(100)는, 컨벌루션 연산 회로(4)가 시분할에 의해 레이어 2M-1과 레이어 2M+1의 컨벌루션 연산을 실시한다. 또한, NN 회로(100)는, 양자화 연산 회로(5)가 시분할에 의해 레이어 2M-2와 레이어 2M의 양자화 연산을 실시한다. 그러므로, NN 회로(100)는, 레이어마다 별개의 컨벌루션 연산 회로(4)와 양자화 연산 회로(5)를 실장(實裝)하는 경우와 비교하여, 회로 규모가 현저하게 작다.
NN 회로(100)는, 복수의 레이어의 다층 구조인 CNN(200)의 연산을, 루프형(loop shape)으로 형성된 회로에 의해 연산한다. NN 회로(100)는, 루프형의 회로 구성에 의해, 하드웨어 자원을 효율적으로 이용할 수 있다. 그리고, NN 회로(100)는, 루프형으로 회로를 형성하기 위해, 각 레이어로 변화하는 컨벌루션 연산 회로(4)나 양자화 연산 회로(5)에서의 파라미터는 적절히 갱신된다.
CNN(200)의 연산에 NN 회로(100)에 의해 실시할 수 없는 연산이 포함되는 경우, NN 회로(100)는 외부 호스트 CPU 등의 외부 연산 디바이스에 중간 데이터를 전송한다. 외부 연산 디바이스가 중간 데이터에 대하여 연산을 행한 후, 외부 연산 디바이스에 의한 연산 결과는 제1 메모리(1)나 제2 메모리(2)에 입력된다. NN 회로(100)는, 외부 연산 디바이스에 의한 연산 결과에 대한 연산을 재개한다.
[NN 회로(100)의 동작예 2]
도 6은, NN 회로(100)의 다른 동작예를 나타낸 타이밍 차트이다.
NN 회로(100)는, 입력 데이터 a를 부분 텐서로 분할하여, 시분할에 의해 부분 텐서에 대한 연산을 행해도 된다. 부분 텐서로의 분할하는 방법이나 분할 수는 특별히 한정되지 않는다.
도 6은, 입력 데이터 a를 2개의 부분 텐서로 분해한 경우의 동작예를 나타내고 있다. 분해된 부분 텐서를, 「제1 부분 텐서(a1)」, 「제2 부분 텐서(a2)」라고 한다. 예를 들면, 레이어 2M-1의 컨벌루션 연산은, 제1 부분 텐서(a1)에 대응하는 컨벌루션 연산[도 6에 있어서, 「레이어 2M-1(a1)」이라고 표기]와, 제2 부분 텐서서(a2)에 대응하는 컨벌루션 연산[도 6에 있어서, 「레이어 2M-1(a2)」라고 표기]로 분해된다.
제1 부분 텐서(a1)에 대응하는 컨벌루션 연산 및 양자화 연산과, 제2 부분 텐서(a2)에 대응하는 컨벌루션 연산 및 양자화 연산은, 도 6에 나타낸 바와 같이, 독립적으로 실시할 수 있다.
컨벌루션 연산 회로(4)는, 제1 부분 텐서(a1)에 대응하는 레이어 2M-1의 컨벌루션 연산[도 6에 있어서, 레이어 2M-1(a1)으로 나타내는 연산]을 행한다. 그 후, 컨벌루션 연산 회로(4)는, 제2 부분 텐서(a2)에 대응하는 레이어 2M-1의 컨벌루션 연산[도 6에 있어서, 레이어 2M-1(a2)으로 나타내는 연산]을 행한다. 또한, 양자화 연산 회로(5)는, 제1 부분 텐서(a1)에 대응하는 레이어 2M의 양자화 연산[도 6에 있어서, 레이어 2M(a1)로 나타내는 연산]을 행한다. 이와 같이, NN 회로(100)는, 제2 부분 텐서(a2)에 대응하는 레이어 2M-1의 컨벌루션 연산과, 제1 부분 텐서(a1)에 대응하는 레이어 2M의 양자화 연산을 병렬로 실시할 수 있다.
다음에, 컨벌루션 연산 회로(4)는, 제1 부분 텐서(a1)에 대응하는 레이어 2M+1의 컨벌루션 연산[도 6에 있어서, 레이어 2M+1(a1)로 나타내는 연산]을 행한다. 또한, 양자화 연산 회로(5)는, 제2 부분 텐서(a2)에 대응하는 레이어 2M의 양자화 연산[도 6에 있어서, 레이어 2M(a2)로 나타내는 연산]을 행한다. 이와 같이, NN 회로(100)는, 제1 부분 텐서(a1)에 대응하는 레이어 2M+1의 컨벌루션 연산과, 제2 부분 텐서(a2)에 대응하는 레이어 2M의 양자화 연산을 병렬로 실시할 수 있다.
제1 부분 텐서(a1)에 대응하는 컨벌루션 연산 및 양자화 연산과, 제2 부분 텐서(a2)에 대응하는 컨벌루션 연산 및 양자화 연산은, 독립적으로 실시할 수 있다. 그러므로, NN 회로(100)는, 예를 들면, 제1 부분 텐서(a1)에 대응하는 레이어 2M-1의 컨벌루션 연산과, 제2 부분 텐서(a2)에 대응하는 레이어 2M+2의 양자화 연산을 병렬로 실시해도 된다. 즉, NN 회로(100)가 병렬로 연산하는 컨벌루션 연산과 양자화 연산은, 연속하는 레이어의 연산에 한정되지 않는다.
입력 데이터 a를 부분 텐서로 분할함으로써, NN 회로(100)는 컨벌루션 연산 회로(4)와 양자화 연산 회로(5)를 병렬하여 동작시키는 것이 가능하다. 그 결과, 컨벌루션 연산 회로(4)와 양자화 연산 회로(5)가 대기하는 시간이 삭감되어, NN 회로(100)의 연산 처리 효율이 향상된다. 도 6에 나타낸 동작예에 있어서 분할 수는 2이었지만, 분할 수가 2보다 클 경우에도 마찬가지로, NN 회로(100)는 컨벌루션 연산 회로(4)와 양자화 연산 회로(5)를 병렬하여 동작시키는 것이 가능하다.
예를 들면, 입력 데이터 a가 「제1 부분 텐서(a1)」, 「제2 부분 텐서(a2)」및 「제3 부분 텐서(a3)」로 분할되는 경우, NN 회로(100)는, 제2 부분 텐서(a2)에 대응하는 레이어 2M-1의 컨벌루션 연산과, 제3 부분 텐서(a3)에 대응하는 레이어 2M의 양자화 연산을 병렬로 실시해도 된다. 연산의 순서는, 제1 메모리(1) 및 제2 메모리(2)에서의 입력 데이터 a의 저장 상황에 따라 적절히 변경된다.
그리고, 부분 텐서에 대한 연산 방법으로서는, 동일 레이어에서의 부분 텐서의 연산을 컨벌루션 연산 회로(4) 또는 양자화 연산 회로(5)에서 행한 후에 다음의 레이어에서의 부분 텐서의 연산을 행하는 예(방법 1)을 나타내었다. 예를 들면, 도 6에 나타낸 바와 같이, 컨벌루션 연산 회로(4)에 있어서, 제1 부분 텐서(a1) 및 제2 부분 텐서(a2)에 대응하는 레이어 2M-1의 컨벌루션 연산[도 6에 있어서, 레이어 2M-1(a1) 및 레이어 2M-1(a2)로 나타내는 연산]을 행한 후에, 제1 부분 텐서(a1) 및 제2 부분 텐서(a2)에 대응하는 레이어 2M+1의 컨벌루션 연산[도 6에 있어서, 레이어 2M+1(a1) 및 레이어 2M+1(a2)로 나타내는 연산]을 실시하고 있다.
그러나, 부분 텐서에 대한 연산 방법은 이에 한정되지 않는다. 부분 텐서에 대한 연산 방법은, 복수 레이어에서의 일부의 부분 텐서의 연산을 한 후에 잔부(殘部)의 부분 텐서의 연산을 실시하는 방법이라도 된다(방법 2). 예를 들면, 컨벌루션 연산 회로(4)에 있어서, 제1 부분 텐서(a1)에 대응하는 레이어 2M-1 및 제1 부분 텐서(a1)에 대응하는 레이어 2M+1의 컨벌루션 연산을 행한 후에, 제2 부분 텐서(a2)에 대응하는 레이어 2M-1 및 제2 부분 텐서(a2)에 대응하는 레이어 2M+1의 컨벌루션 연산을 실시해도 된다.
또한, 부분 텐서에 대한 연산 방법은, 방법 1과 방법 2을 조합시켜 부분 텐서를 연산하는 방법이라도 된다. 단, 방법 2을 사용하는 경우에는, 부분 텐서의 연산 순서에 관한 의존 관계에 따라 연산을 실시할 필요가 있다.
다음에, NN 회로(100)의 각각의 구성에 관하여 상세하게 설명한다.
[DMAC(3)]
도 7은, DMAC(3)의 내부 블록도이다.
DMAC(3)는, 데이터 전송 회로(31)와, 스테이트 컨트롤러(32)를 가진다. DMAC(3)는, 데이터 전송 회로(31)에 대한 전용의 스테이트 컨트롤러(32)를 구비하고 있고, 명령 커맨드가 입력되면, 외부의 컨트롤러를 필요로 하지 않고 DMA 데이터 전송을 실시할 수 있다.
데이터 전송 회로(31)는, 외부 버스(EB)에 접속되어 있고, DRAM 등의 외부 메모리와 제1 메모리(1)와의 사이의 DMA 데이터 전송을 행한다. 또한, 데이터 전송 회로(31)는, DRAM 등의 외부 메모리와 제2 메모리(2)와의 사이의 DMA 데이터 전송을 행한다. 또한, 데이터 전송 회로(31)는, DRAM 등의 외부 메모리와 컨벌루션 연산 회로(4)와의 사이의 데이터 전송을 행한다. 또한, 데이터 전송 회로(31)는, DRAM 등의 외부 메모리와 양자화 연산 회로(5)와의 사이의 데이터 전송을 행한다. 데이터 전송 회로(31)의 DMA 채널 수는 한정되지 않는다. 예를 들면, 제1 메모리(1)와 제2 메모리(2)의 각각에 전용의 DMA 채널을 가지고 있어도 된다.
스테이트 컨트롤러(32)는, 데이터 전송 회로(31)의 스테이트를 제어한다. 또한, 스테이트 컨트롤러(32)는, 내부 버스(IB)를 통해 컨트롤러(6)와 접속되어 있다. 스테이트 컨트롤러(32)는, 명령 큐(33)와 제어 회로(34)를 구비한다.
명령 큐(33)는, DMAC(3)용의 명령 커맨드(C3)가 저장되는 큐이며, 예를 들면, FIFO 메모리로 구성된다. 명령 큐(33)에는, 내부 버스(IB)를 경유하여 1개 이상의 명령 커맨드(C3)가 기입된다.
제어 회로(34)는, 명령 커맨드(C3)를 디코드하고, 명령 커맨드(C3)에 기초하여 순차적으로 데이터 전송 회로(31)를 제어하는 스테이트 머신이다. 제어 회로(34)는, 논리 회로에 의해 실장되어 있어도 되고, 소프트웨어에 의해 제어되는 CPU에 의해 실장되어 있어도 된다.
도 8은, 제어 회로(34)의 스테이트 천이도이다. 제어 회로(34)는, 명령 큐(33)에 명령 커맨드(C3)가 입력되면(Not empty), 아이들 스테이트(S1)로부터 디코드 스테이트(S2)로 천이(遷移)한다.
제어 회로(34)는, 디코드 스테이트(S2)에 있어서, 명령 큐(33)로부터 출력되는 명령 커맨드(C3)를 디코드한다. 또한, 제어 회로(34)는, 컨트롤러(6)의 레지스터(61)에 저장된 세마포어 S를 판독하고, 명령 커맨드(C3)에 있어서 지시된 데이터 전송 회로(31)의 동작을 실행할 수 있는지를 판정한다. 실행 불가능한 경우(Not ready), 제어 회로(34)는 실행 가능해질 때까지 기다린다(Wait). 실행할 수 있는 경우(ready), 제어 회로(34)는 디코드 스테이트(S2)로부터 실행 스테이트(S3)로 천이한다.
제어 회로(34)는, 실행 스테이트(S3)에 있어서, 데이터 전송 회로(31)를 제어하여, 데이터 전송 회로(31)에 명령 커맨드(C3)에 있어서 지시된 동작을 실시하게 한다. 제어 회로(34)는, 데이터 전송 회로(31)의 동작이 종료되면, 명령 큐(33)로부터 실행을 끝낸 명령 커맨드(C3)를 캔슬하는 동시에, 컨트롤러(6)의 레지스터(61)에 저장된 세마포어 S를 갱신한다. 제어 회로(34)는, 명령 큐(33)에 명령이 있는 경우(Not empty), 실행 스테이트(S3)로부터 디코드 스테이트(S2)로 천이한다. 제어 회로(34)는, 명령 큐(33)에 명령이 없는 경우(empty), 실행 스테이트(S3)로부터 아이들 스테이트(S1)로 천이한다.
[컨벌루션 연산 회로(4)]
도 9는, 컨벌루션 연산 회로(4)의 내부 블록도이다.
컨벌루션 연산 회로(4)는, 가중치 메모리(41)와, 승산기(42)와, 어큐뮬레이터 회로(43)와, 스테이트 컨트롤러(44)를 가진다. 컨벌루션 연산 회로(4)는, 승산기(42) 및 어큐뮬레이터 회로(43)에 대한 전용의 스테이트 컨트롤러(44)를 구비하고 있고, 명령 커맨드가 입력되면, 외부의 컨트롤러를 필요로 하지 않고 컨벌루션 연산을 실시할 수 있다.
가중치 메모리(41)는, 컨벌루션 연산에 사용하는 가중치 w가 저장되는 메모리이며, 예를 들면, SRAM(Static RAM) 등으로 구성된 휘발성의 메모리 등의 재기입 가능한 메모리이다. DMAC(3)는, DMA 전송에 의해, 컨벌루션 연산에 필요한 가중치 w를 가중치 메모리(41)에 기입한다.
도 10은, 승산기(42)의 내부 블록도이다.
승산기(42)는, 입력 벡터 A와 가중치 매트릭스 W를 승산한다. 입력 벡터 A는, 전술한 바와 같이, 분할 입력 데이터 a(x+i, y+j, co)가 i, j마다 전개된 Bc개의 요소를 구비하는 벡터 데이터이다. 또한, 가중치 매트릭스 W는, 분할 가중치 w(i, j, co, do)가 i, j마다 전개된 Bc×Bd개의 요소를 구비하는 매트릭스 데이터이다. 승산기(42)는, Bc×Bd개의 적화 연산 유닛(47)을 가지고, 입력 벡터 A와 가중치 매트릭스 W를 승산을 병렬하여 실시할 수 있다.
승산기(42)는, 승산에 필요한 입력 벡터 A와 가중치 매트릭스 W를, 제1 메모리(1) 및 가중치 메모리(41)로부터 판독하여 승산을 실시한다. 승산기(42)는, Bd개의 적화 연산 결과 O(di)를 출력한다.
도 11은, 적화 연산 유닛(47)의 내부 블록도이다.
적화 연산 유닛(47)은, 입력 벡터 A의 요소 A(ci)와, 가중치 매트릭스 W의 요소 W(ci, di)와의 승산을 실시한다. 또한, 적화 연산 유닛(47)은, 승산 결과와 다른 적화 연산 유닛(47)의 승산 결과 S(ci, di)와 가산한다. 적화 연산 유닛(47)은, 가산 결과 S(ci+1, di)를 출력한다. 요소 A(ci)는, 2비트의 부호없는 정수(0, 1, 2, 3)이다. 요소 W(ci, di)는, 1비트의 부호부 정수(0, 1)이며, 값 「0」은 +1을 나타내고, 값 「1」은 ―1을 나타낸다.
적화 연산 유닛(47)은, 반전기(反轉器)(인버터)(47a)와, 실렉터(selector)(47b)와, 가산기(47c)을 가진다. 적화 연산 유닛(47)은, 승산기를 이용하지 않고, 반전기(47a) 및 실렉터(47b)만을 사용하여 승산을 행한다. 실렉터(47b)는, 요소 W(ci, di)가 「0」의 경우, 요소 A(ci)의 입력을 선택한다. 실렉터(47b)는, 요소 W(ci, di)가 「1」의 경우, 요소 A(ci)를 반전기에 의해 반전시킨 보수를 선택한다. 요소 W(ci, di)는, 가산기(47c)의 Carry-in에도 입력된다. 가산기(47c)는, 요소 W(ci, di)가 「0」일 때, S(ci, di)에 요소 A(ci)를 가산한 값을 출력한다. 가산기(47c)는, W(ci, di)가 「1」일 때, S(ci, di)로부터 요소 A(ci)를 감산한 값을 출력한다.
도 12는, 어큐뮬레이터 회로(43)의 내부 블록도이다. 어큐뮬레이터 회로(43)는, 승산기(42)의 적화 연산 결과 O(di)를 제2 메모리(2)에 어큐물레이트한다. 어큐뮬레이터 회로(43)는, Bd개의 어큐뮬레이터 유닛(48)을 가지고, Bd개의 적화 연산 결과 O(di)를 병렬하여 제2 메모리(2)에 어큐물레이트할 수 있다.
도 13은, 어큐뮬레이터 유닛(48)의 내부 블록도이다. 어큐뮬레이터 유닛(48)은, 가산기(48a)와, 마스크부(48b)를 구비하고 있다. 가산기(48a)는, 적화 연산 결과 O의 요소 O(di)와, 제2 메모리(2)에 저장된 식 1에 나타낸 컨벌루션 연산의 도중 경과인 부분합(部分和)을 가산한다. 가산 결과는, 요소당 16비트이다. 가산 결과는, 요소당 16비트에 한정되지 않고, 예를 들면, 요소당 15비트나 17비트라도 된다.
가산기(48a)는, 가산 결과를 제2 메모리(2)의 동일 어드레스에 기입한다. 마스크부(48b)는, 초기화 신호 cleaR이 어써트(assert)되었을 경우에, 제2 메모리(2)로부터의 출력을 마스크하고, 요소 O(di)에 대한 가산 대상을 제로로 한다. 초기화 신호 cleaR은, 제2 메모리(2)에 도중 경과의 부분합이 저장되어 있지 않은 경우에 어써트된다.
승산기(42) 및 어큐뮬레이터 회로(43)에 의한 컨벌루션 연산이 완료되면, 제2 메모리에, 출력 데이터 f(x, y, do)가 저장된다.
스테이트 컨트롤러(44)는, 승산기(42) 및 어큐뮬레이터 회로(43)의 스테이트를 제어한다. 또한, 스테이트 컨트롤러(44)는, 내부 버스(IB)를 통해 컨트롤러(6)와 접속되어 있다. 스테이트 컨트롤러(44)는, 명령 큐(45)와 제어 회로(46)를 구비한다.
명령 큐(45)는, 컨벌루션 연산 회로(4)용의 명령 커맨드(C4)가 저장되는 큐이며, 예를 들면, FIFO 메모리로 구성된다. 명령 큐(45)에는, 내부 버스(IB) 경유하여 명령 커맨드(C4)가 기입된다.
제어 회로(46)는, 명령 커맨드(C4)를 디코드하고, 명령 커맨드(C4)에 기초하여 승산기(42) 및 어큐뮬레이터 회로(43)를 제어하는 스테이트 머신이다. 제어 회로(46)는, DMAC(3)의 스테이트 컨트롤러(32)의 제어 회로(34)와 동일한 구성이다.
[양자화 연산 회로(5)]
도 14는, 양자화 연산 회로(5)의 내부 블록도이다. 양자화 연산 회로(5)는, 양자화 파라미터 메모리(51)와, 벡터 연산 회로(52)와, 양자화 회로(53)와, 스테이트 컨트롤러(54)를 구비하는 양자화 연산 회로(5)는, 벡터 연산 회로(52) 및 양자화 회로(53)에 대한 전용의 스테이트 컨트롤러(54)를 구비하고 있고, 명령 커맨드가 입력되면, 외부의 컨트롤러를 필요로 하지 않고 양자화 연산을 실시할 수 있다.
양자화 파라미터 메모리(51)는, 양자화 연산에 사용하는 양자화 파라미터 q가 저장되는 메모리이며, 예를 들면, SRAM(Static RAM) 등으로 구성된 휘발성의 메모리 등의 재기입 가능한 메모리이다. DMAC(3)는, DMA 전송에 의해, 양자화 연산에 필요한 양자화 파라미터 q를 양자화 파라미터 메모리(51)에 기입한다.
도 15는, 벡터 연산 회로(52)와 양자화 회로(53)의 내부 블록도이다. 벡터 연산 회로(52)는, 제2 메모리(2)에 저장된 출력 데이터 f(x, y, do)에 대하여 연산을 행한다. 벡터 연산 회로(52)는, Bd개의 연산 유닛(57)을 가지고, 출력 데이터 f(x, y, do)에 대하여 병렬로 SIMD 연산을 행한다.
도 16은, 연산 유닛(57)의 블록도이다.
연산 유닛(57)은, 예를 들면, ALU(57a)와, 제1 실렉터(57b)와, 제2 실렉터(57c)와, 레지스터(57d)와, 시프터(57e)를 가진다. 연산 유닛(57)은, 공지의 범용 SIMD 연산 회로가 구비하는 다른 연산기 등을 더 구비해도 된다.
벡터 연산 회로(52)는, 연산 유닛(57)이 구비하는 연산기 등을 조합함으로써, 출력 데이터 f(x, y, do)에 대하여, 양자화 연산층(220)에서의 풀링층(221)이나, 배치 정규화층(222)이나, 활성화 함수층(223)의 연산 중 1개 이상의 연산을 행한다.
연산 유닛(57)은, 레지스터(57d)에 저장된 데이터와 제2 메모리(2)로부터 판독한 출력 데이터 f(x, y, do)의 요소 f(di)를 ALU(57a)에 의해 가산할 수 있다. 연산 유닛(57)은, ALU(57a)에 의한 가산 결과를 레지스터(57d)에 저장할 수 있다. 연산 유닛(57)은, 제1 실렉터(57b)의 선택에 의해 레지스터(57d)에 저장된 데이터 대신에 「0」을 ALU(57a)에 입력함으로써 가산 결과를 초기화할 수 있다. 예를 들면, 풀링 영역이 2×2인 경우, 시프터(57e)는 ALU(57a)의 출력을 2bit 우측 시프트함으로써 가산 결과의 평균값을 출력할 수 있다. 벡터 연산 회로(52)는, Bd개의 연산 유닛(57)에 의한 상기한 연산 등을 반복함으로써, 식 2에 나타낸 평균 풀링의 연산을 실시할 수 있다.
연산 유닛(57)은, 레지스터(57d)에 저장된 데이터와 제2 메모리(2)로부터 판독한 출력 데이터 f(x, y, do)의 요소 f(di)를 ALU(57a)에 의해 비교할 수 있다. 연산 유닛(57)은, ALU(57a)에 의한 비교 결과에 따라 제2 실렉터(57c)를 제어하여, 레지스터(57d)에 저장된 데이터와 요소 f(di) 중 큰 쪽을 선택할 수 있다. 연산 유닛(57)은, 제1 실렉터(57b)의 선택에 의해 요소 f(di)의 취할 수 있는 값의 최소값을 ALU(57a)에 입력함으로써 비교 대상을 최소값으로 초기화할 수 있다. 본 실시형태에 있어서 요소 f(di)는 16bit 부호 붙임 정수이므로, 요소 f(di)가 취할 수 있는 값의 최소값은 「0×8000」이다. 벡터 연산 회로(52)는, Bd개의 연산 유닛(57)에 의한 상기한 연산 등을 반복함으로써, 식 3의 MAX 풀링의 연산을 실시할 수 있다. 그리고, MAX 풀링의 연산에서는 시프터(57e)는 제2 실렉터(57c)의 출력을 시프트 하지 않는다.
연산 유닛(57)은, 레지스터(57d)에 저장된 데이터와 제2 메모리(2)로부터 판독한 출력 데이터 f(x, y, do)의 요소 f(di)를 ALU(57a)에 의해 감산할 수 있다. 시프터(57e)는 ALU(57a)의 출력을 좌측 시프트(즉 승산) 또는 우측 시프트(즉 제산)할 수 있다. 벡터 연산 회로(52)는, Bd개의 연산 유닛(57)에 의한 상기한 연산 등을 반복함으로써, 식 4의 배치 정규화의 연산을 실시할 수 있다.
연산 유닛(57)은, 제2 메모리(2)로부터 판독한 출력 데이터 f(x, y, do)의 요소 f(di)와 제1 실렉터(57b)에 의해 선택된 「0」를 ALU(57a)에 의해 비교할 수 있다. 연산 유닛(57)은, ALU(57a)에 의한 비교 결과에 따라 요소 f(di)와 미리 레지스터(57d)에 저장된 상수 값 「0」 중 어느 하나를 선택하여 출력할 수 있다. 벡터 연산 회로(52)는, Bd개의 연산 유닛(57)에 의한 상기한 연산 등을 반복함으로써, 식 5의 ReLU 연산을 실시할 수 있다.
벡터 연산 회로(52)는, 평균 풀링, MAX 풀링, 배치 정규화, 활성화 함수의 연산 및 이들 연산의 조합을 실시할 수 있다. 벡터 연산 회로(52)는, 범용 SIMD 연산을 실시할 수 있으므로, 양자화 연산층(220)에서의 연산에 필요한 다른 연산을 실시해도 된다. 또한, 벡터 연산 회로(52)는, 양자화 연산층(220)에서의 연산 이외의 연산을 실시해도 된다.
그리고, 양자화 연산 회로(5)는, 벡터 연산 회로(52)를 구비하지 않아도 된다. 양자화 연산 회로(5)가 벡터 연산 회로(52)를 구비하고 있지 않은 경우, 출력 데이터 f(x, y, do)는 양자화 회로(53)에 입력된다.
양자화 회로(53)는, 벡터 연산 회로(52)의 출력 데이터에 대하여, 양자화를 행한다. 양자화 회로(53)는, 도 15에 나타낸 바와 같이, Bd개의 양자화 유닛(58)을 가지고, 벡터 연산 회로(52)의 출력 데이터에 대하여 병렬로 연산을 행한다.
도 17은, 양자화 유닛(58)의 내부 블록도이다. 양자화 유닛(58)은, 벡터 연산 회로(52)의 출력 데이터의 요소 in(di)에 대하여 양자화를 행한다. 양자화 유닛(58)은, 비교기(58a)와, 인코더(encoder)(58b)를 가진다. 양자화 유닛(58)은 벡터 연산 회로(52)의 출력 데이터(16비트/요소)에 대하여, 양자화 연산층(220)에서의 양자화층(224)의 연산(식 6)을 행한다. 양자화 유닛(58)은, 양자화 파라미터 메모리(51)로부터 필요한 양자화 파라미터 q(th0, th1, th2)를 판독하고, 비교기(58a)에 의해 입력 in(di)와 양자화 파라미터 q라는 비교를 행한다. 양자화 유닛(58)은, 비교기(58a)에 의한 비교 결과를 인코더(58b)에 의해 2비트/요소로 양자화한다. 식 4에서의 α(c)와 β(c)는, 변수(c)마다 상이한 파라미터이므로, α(c)와 β(c)를 반영하는 양자화 파라미터 q(th0, th1, th2)는 in(di)마다 상이한 파라미터이다.
양자화 유닛(58)은, 입력 in(di)를 3개의 임계값 th0, th1, th2와 비교함으로써, 입력 in(di)를 4영역(예를 들면, in≤th0, th0<in≤th1, th1<in≤th2, th2<in)로 분류하고, 분류 결과를 2비트로 인코드하여 출력한다. 양자화 유닛(58)은, 양자화 파라미터 q(th0, th1, th2)의 설정에 의해, 양자화와 병행하여 배치 정규화나 활성화 함수의 연산을 행할 수도 있다.
양자화 유닛(58)은, 임계값 th0을 식 4의 β(c), 임계값의 차(th1-th0 및 th2-th1)을 식 4의 α(c)로서 설정하여 양자화를 행함으로써, 식 4에 나타낸 배치 정규화의 연산을 양자화와 병행하여 실시할 수 있다. (th1-th0 및 th2-th1)을 크게 함으로써 α(c)를 작게 할 수 있다. (th1-th0 및 th2-th1)을 작게 함으로써, α(c)를 크게 할 수 있다.
양자화 유닛(58)은, 입력 in(di)의 양자화와 병행하여 활성화 함수의 ReLU 연산을 실시할 수 있다. 예를 들면, 양자화 유닛(58)은, in(di)≤th0 및 th2<in(di)로 되는 영역에서는 출력값을 포화시킨다. 양자화 유닛(58)은, 출력이 비선형(非線形)으로 되도록 양자화 파라미터 q를 설정함으로써 활성화 함수의 연산을 양자화와 병행하여 실시할 수 있다.
스테이트 컨트롤러(54)는, 벡터 연산 회로(52) 및 양자화 회로(53)의 스테이트를 제어한다. 또한, 스테이트 컨트롤러(54)는, 내부 버스(IB)를 통해 컨트롤러(6)와 접속되어 있다. 스테이트 컨트롤러(54)는, 명령 큐(55)와 제어 회로(56)를 구비한다.
명령 큐(55)는, 양자화 연산 회로(5)용의 명령 커맨드(C5)가 저장되는 큐이며, 예를 들면, FIFO 메모리로 구성된다. 명령 큐(55)에는, 내부 버스(IB) 경유하여 명령 커맨드(C5)가 기입된다.
제어 회로(56)는, 명령 커맨드(C5)를 디코드하고, 명령 커맨드(C5)에 기초하여 벡터 연산 회로(52) 및 양자화 회로(53)를 제어하는 스테이트 머신이다. 제어 회로(56)는, DMAC(3)의 스테이트 컨트롤러(32)의 제어 회로(34)와 동일한 구성이다.
양자화 연산 회로(5)는, Bd개의 요소를 구비하는 양자화 연산 출력 데이터를 제1 메모리(1)에 기입한다. 그리고, Bd와 Bc의 바람직한 관계를 식 10에 나타낸다. 식 10에 있어서 n은 정수이다.
[식 10]
… 식 10
[컨트롤러(6)]
컨트롤러(6)는, 외부 호스트 CPU로부터 전송되는 명령 커맨드를, DMAC(3), 컨벌루션 연산 회로(4) 및 양자화 연산 회로(5)가 구비하는 명령 큐에 전송한다. 컨트롤러(6)는, 각각의 회로에 대한 명령 커맨드를 저장하는 명령 메모리를 가져도 된다.
컨트롤러(6)는, 외부 버스(EB)에 접속되어 있고, 외부 호스트 CPU의 슬레이브로서 동작한다. 컨트롤러(6)는, 파라미터 레지스터나 상태 레지스터를 포함하는 레지스터(61)를 구비하고 있다. 파라미터 레지스터는, NN 회로(100)의 동작을 제어하는 레지스터이다. 상태 레지스터는, 세마포어 S를 포함하는 NN 회로(100)의 상태를 나타내는 레지스터이다.
[세마포어 S]
도 18은, 세마포어 S에 의한 NN 회로(100)의 제어를 설명하는 도면이다. 세마포어 S는, 제1 세마포어 S1과, 제2 세마포어 S2와, 제3 세마포어 S3를 가진다. 세마포어 S는, P조작에 의해 감소되고, V조작에 의해 인크리먼트된다. DMAC(3), 컨벌루션 연산 회로(4) 및 양자화 연산 회로(5)에 의한 P조작 및 V조작은, 내부 버스(IB)를 경유하여, 컨트롤러(6)가 구비하는 세마포어 S를 갱신한다.
제1 세마포어 S1는, 제1 데이터 플로우 F1의 제어에 사용된다. 제1 데이터 플로우 F1는, DMAC(3)[프로듀서(Producer)]가 제1 메모리(1)에 입력 데이터 a를 기입하고, 컨벌루션 연산 회로(4)[컨슈머(Consumer)]가 입력 데이터 a를 판독하는 데이터 플로우이다. 제1 세마포어 S1은, 제1 라이트 세마포어 S1W와, 제1 리드 세마포어 S1R을 가진다.
제2 세마포어 S2는, 제2 데이터 플로우 F2의 제어에 사용된다. 제2 데이터 플로우 F2는, 컨벌루션 연산 회로(4)(프로듀서)가 출력 데이터 f를 제2 메모리(2)에 기입하고, 양자화 연산 회로(5)(컨슈머)가 출력 데이터 f를 판독하는 데이터 플로우이다. 제2 세마포어 S2는, 제2 라이트 세마포어 S2W와, 제2 리드 세마포어 S2R를 가진다.
제3 세마포어 S3는, 제3 데이터 플로우 F3의 제어에 사용된다. 제3 데이터 플로우 F3는, 양자화 연산 회로(5)(프로듀서)가 양자화 연산 출력 데이터를 제1 메모리(1)에 기입하고, 컨벌루션 연산 회로(4)(컨슈머)가 양자화 연산 회로(5)의 양자화 연산 출력 데이터를 판독하는 데이터 플로우이다. 제3 세마포어 S3는, 제3 라이트 세마포어 S3W와, 제3 리드 세마포어 S3R를 가진다.
[제1 데이터 플로우 F1]
도 19는, 제1 데이터 플로우 F1의 타이밍 차트이다. 제1 라이트 세마포어 S1W는, 제1 데이터 플로우 F1에서의 DMAC(3)에 의한 제1 메모리(1)에 대한 기입을 제한하는 세마포어이다. 제1 라이트 세마포어 S1W는, 제1 메모리(1)에 있어서, 예를 들면, 입력 벡터 A 등의 소정의 사이즈의 데이터를 저장 가능한 메모리 영역 중, 데이터가 판독이 끝난 상태에서 다른 데이터를 기입 가능한 메모리 영역의 수를 나타내고 있다. 제1 라이트 세마포어 S1W가 「0」의 경우, DMAC(3)는 제1 메모리(1)에 대하여 제1 데이터 플로우 F1에서의 기입을 행하지 않고, 제1 라이트 세마포어 S1W가 「1」이상으로 될 때까지 기다리게 된다.
제1 리드 세마포어 S1R은, 제1 데이터 플로우 F1에서의 컨벌루션 연산 회로(4)에 의한 제1 메모리(1)로부터의 판독을 제한하는 세마포어이다. 제1 리드 세마포어 S1R은, 제1 메모리(1)에 있어서, 예를 들면, 입력 벡터 A 등의 소정의 사이즈의 데이터를 저장 가능한 메모리 영역 중, 데이터가 기입이가 끝난 상태에서 판독 가능한 메모리 영역의 수를 나타내고 있다. 제1 리드 세마포어 S1R이 「0」의 경우, 컨벌루션 연산 회로(4)는 제1 메모리(1)로부터의 제1 데이터 플로우 F1에서의 판독을 행하지 않고, 제2 리드 세마포어 S2R이 「1」이상으로 될 때까지 기다리게 된다.
DMAC(3)는, 명령 큐(33)에 명령 커맨드(C3)가 저장되는 것에 의해, DMA 전송을 개시한다. 도 19에 나타낸 바와 같이, 제1 라이트 세마포어 S1W가 「0」이 아니기 때문에, DMAC(3)는 DMA 전송을 개시한다(DMA 전송 1). DMAC(3)는, DMA 전송을 개시할 때, 제1 라이트 세마포어 S1W에 대하여 P조작을 행한다. DMAC(3)는, DMA 전송의 완료 후에, 제1 리드 세마포어 S1R에 대하여 V조작을 행한다.
컨벌루션 연산 회로(4)는, 명령 큐(45)에 명령 커맨드(C4)가 저장되는 것에 의해, 컨벌루션 연산을 개시한다. 도 19에 나타낸 바와 같이, 제1 리드 세마포어 S1R이 「0」이므로, 컨벌루션 연산 회로(4)는 제1 리드 세마포어 S1R이 「1」이상으로 될 때까지 기다리게 된다[디코드 스테이트(S2)에서의 Wait]. DMAC(3)에 의한 V조작에 의해 제1 리드 세마포어 S1R이 「1」이 되면, 컨벌루션 연산 회로(4)는 컨벌루션 연산을 개시한다(컨벌루션 연산 1). 컨벌루션 연산 회로(4)는, 컨벌루션 연산을 개시할 때, 제1 리드 세마포어 S1R에 대하여 P조작을 행한다. 컨벌루션 연산 회로(4)는, 컨벌루션 연산의 완료 후에, 제1 라이트 세마포어 S1W에 대하여 V조작을 행한다.
도 19에 있어서 「DMA 전송 3」으로 기재된 DMA 전송을 DMAC(3)가 개시할 때, 제1 라이트 세마포어 S1W가 「0」이므로, DMAC(3)는 제1 라이트 세마포어 S1W가 「1」이상으로 될 때까지 기다리게 된다[디코드 스테이트(S2)에서의 Wait]. 컨벌루션 연산 회로(4)에 의한 V조작에 의해 제1 라이트 세마포어 S1W가 「1」이상으로 되면, DMAC(3)는 DMA 전송을 개시한다.
DMAC(3)과 컨벌루션 연산 회로(4)는, 세마포어 S1를 사용함으로써, 제1 데이터 플로우 F1에 있어서 제1 메모리(1)에 대한 액세스 경합을 방지할 수 있다. 또한, DMAC(3)과 컨벌루션 연산 회로(4)는, 세마포어 S1를 사용함으로써, 제1 데이터 플로우 F1에서의 데이터 전송의 동기(同期)를 취하면서, 독립적으로 병렬로 동작할 수 있다.
[제2 데이터 플로우 F2]
도 20은, 제2 데이터 플로우 F2의 타이밍 차트이다. 제2 라이트 세마포어 S2W는, 제2 데이터 플로우 F2에서의 컨벌루션 연산 회로(4)에 의한 제2 메모리(2)에 대한 기입을 제한하는 세마포어이다. 제2 라이트 세마포어 S2W는, 제2 메모리(2)에 있어서, 예를 들면, 출력 데이터 f 등의 소정의 사이즈의 데이터를 저장 가능한 메모리 영역 중, 데이터가 판독이 끝난 상태에서 다른 데이터를 기입 가능한 메모리 영역의 수를 나타내고 있다. 제2 라이트 세마포어 S2W가 「0」의 경우, 컨벌루션 연산 회로(4)는 제2 메모리(2)에 대하여 제2 데이터 플로우 F2에서의 기입을 행하지 않고, 제2 라이트 세마포어 S2W가 「1」이상으로 될 때까지 기다리게 된다.
제2 리드 세마포어 S2R은, 제2 데이터 플로우 F2에서의 양자화 연산 회로(5)에 의한 제2 메모리(2)로부터의 판독을 제한하는 세마포어이다. 제2 리드 세마포어 S2R은, 제2 메모리(2)에 있어서, 예를 들면, 출력 데이터 f 등의 소정의 사이즈의 데이터를 저장 가능한 메모리 영역 중, 데이터가 기입이가 끝난 상태에서 판독 가능한 메모리 영역의 수를 나타내고 있다. 제2 리드 세마포어 S2R이 「0」의 경우, 양자화 연산 회로(5)는 제2 메모리(2)로부터의 제2 데이터 플로우 F2에서의 판독을 행하지 않고, 제2 리드 세마포어 S2R이 「1」이상으로 될 때까지 기다리게 된다.
컨벌루션 연산 회로(4)는, 도 20에 나타낸 바와 같이, 컨벌루션 연산을 개시할 때, 제2 라이트 세마포어 S2W에 대하여 P조작을 행한다. 컨벌루션 연산 회로(4)는, 컨벌루션 연산의 완료 후에, 제2 리드 세마포어 S2R에 대하여 V조작을 행한다.
양자화 연산 회로(5)는, 명령 큐(55)에 명령 커맨드(C5)가 저장되는 것에 의해, 양자화 연산을 개시한다. 도 20에 나타낸 바와 같이, 제2 리드 세마포어 S2R이 「0」이므로, 양자화 연산 회로(5)는 제2 리드 세마포어 S2R이 「1」이상으로 될 때까지 기다리게 된다[디코드 스테이트(S2)에서의 Wait]. 컨벌루션 연산 회로(4)에 의한 V조작에 의해 제2 리드 세마포어 S2R이 「1」이 되면, 양자화 연산 회로(5)는 양자화 연산을 개시한다(양자화 연산 1). 양자화 연산 회로(5)는, 양자화 연산을 개시할 때, 제2 리드 세마포어 S2R에 대하여 P조작을 행한다. 양자화 연산 회로(5)는, 양자화 연산의 완료 후에, 제2 라이트 세마포어 S2W에 대하여 V조작을 행한다.
도 20에 있어서 「양자화 연산 2」라고 기재된 양자화 연산을 양자화 연산 회로(5)가 개시할 때, 제2 리드 세마포어 S2R이 「0」이므로, 양자화 연산 회로(5)는 제2 리드 세마포어 S2R이 「1」이상으로 될 때까지 기다리게 된다[디코드 스테이트(S2)에서의 Wait]. 컨벌루션 연산 회로(4)에 의한 V조작에 의해 제2 리드 세마포어 S2R이 「1」이상으로 되면, 양자화 연산 회로(5)는 양자화 연산을 개시한다.
컨벌루션 연산 회로(4)와 양자화 연산 회로(5)는, 세마포어 S2를 사용함으로써, 제2 데이터 플로우 F2에 있어서 제2 메모리(2)에 대한 액세스 경합을 방지할 수 있다. 또한, 컨벌루션 연산 회로(4)와 양자화 연산 회로(5)는, 세마포어 S2를 사용함으로써, 제2 데이터 플로우 F2에서의 데이터 전송의 동기를 취하면서, 독립적으로 병렬로 동작할 수 있다.
[제3 데이터 플로우 F3]
제3 라이트 세마포어 S3W는, 제3 데이터 플로우 F3에서의 양자화 연산 회로(5)에 의한 제1 메모리(1)에 대한 기입을 제한하는 세마포어이다. 제3 라이트 세마포어 S3W는, 제1 메모리(1)에 있어서, 예를 들면, 양자화 연산 회로(5)의 양자화 연산 출력 데이터 등의 소정의 사이즈의 데이터를 저장 가능한 메모리 영역 중, 데이터가 판독이 끝난 상태에서 다른 데이터를 기입 가능한 메모리 영역의 수를 나타내고 있다. 제3 라이트 세마포어 S3W가 「0」의 경우, 양자화 연산 회로(5)는 제1 메모리(1)에 대하여 제3 데이터 플로우 F3에서의 기입을 행하지 않고, 제3 라이트 세마포어 S3R이 「1」이상으로 될 때까지 기다리게 된다.
제3 리드 세마포어 S3R은, 제3 데이터 플로우 F3에서의 컨벌루션 연산 회로(4)에 의한 제1 메모리(1)로부터의 판독을 제한하는 세마포어이다. 제3 리드 세마포어 S3R은, 제1 메모리(1)에 있어서, 예를 들면, 양자화 연산 회로(5)의 양자화 연산 출력 데이터 등의 소정의 사이즈의 데이터를 저장 가능한 메모리 영역 중, 데이터가 기입이가 끝난 상태에서 판독 가능한 메모리 영역의 수를 나타내고 있다. 제3 리드 세마포어 S3R이 「0」의 경우, 컨벌루션 연산 회로(4)는 제3 데이터 플로우 F3에서의 제1 메모리(1)로부터의 판독을 행하지 않고, 제3 리드 세마포어 S3R이 「1」이상으로 될 때까지 기다리게 된다.
양자화 연산 회로(5)와 컨벌루션 연산 회로(4)는, 세마포어 S3를 사용함으로써, 제3 데이터 플로우 F3에 있어서 제1 메모리(1)에 대한 액세스 경합을 방지할 수 있다. 또한, 양자화 연산 회로(5)와 컨벌루션 연산 회로(4)는, 세마포어 S3를 사용함으로써, 제3 데이터 플로우 F3에서의 데이터 전송의 동기를 취하면서, 독립적으로 병렬로 동작할 수 있다.
제1 메모리(1)는, 제1 데이터 플로우 F1 및 제3 데이터 플로우 F3에 있어서 공유된다. NN 회로(100)는, 제1 세마포어 S1와 제3 세마포어 S3를 별개로 설치함으로써, 제1 데이터 플로우 F1와 제3 데이터 플로우 F3를 구별하여 데이터 전송의 동기를 취할 수 있다.
[컨벌루션 연산 회로(4)의 동작 1]
컨벌루션 연산 회로(4)는, 컨벌루션 연산을 행할 때, 제1 메모리(1)로부터 판독을 행하여, 제2 메모리(2)에 대하여 기입을 행한다. 즉, 컨벌루션 연산 회로(4)는, 제1 데이터 플로우 F1에 있어서는 컨슈머이며, 제2 데이터 플로우 F2에 있어서는 프로듀서이다. 그러므로, 컨벌루션 연산 회로(4)는, 컨벌루션 연산을 개시할 때, 제1 리드 세마포어 S1R에 대하여 P조작을 행하고(도 19 참조), 제2 라이트 세마포어 S2W에 대하여 P조작을 행한다(도 20 참조). 컨벌루션 연산 회로(4)는, 컨벌루션 연산의 완료 후에, 제1 라이트 세마포어 S1W에 대하여 V조작을 행하고(도 19 참조), 제2 리드 세마포어 S2R에 대하여 V조작을 행한다(도 20 참조).
컨벌루션 연산 회로(4)는, 컨벌루션 연산을 개시할 때, 제1 리드 세마포어 S1R이 「1」이상, 또한, 제2 라이트 세마포어 S2W가 「1」이상으로 될 때까지 기다리게 된다[디코드 스테이트(S2)에서의 Wait].
[양자화 연산 회로(5)의 동작]
양자화 연산 회로(5)는, 양자화 연산을 행할 때, 제2 메모리(2)로부터 판독을 행하여, 제1 메모리(1)에 대하여 기입을 행한다. 즉, 양자화 연산 회로(5)는, 제2 데이터 플로우 F2에 있어서는 컨슈머이며, 제3 데이터 플로우 F3에 있어서는 프로듀서이다. 그러므로, 양자화 연산 회로(5)는, 양자화 연산을 개시할 때, 제2 리드 세마포어 S2R에 대하여 P조작을 행하여, 제3 라이트 세마포어 S3W에 대하여 P조작을 행한다. 양자화 연산 회로(5)는 양자화 연산의 완료 후에, 제2 라이트 세마포어 S2W에 대하여 V조작을 행하고, 제3 리드 세마포어 S3R에 대하여 V조작을 행한다.
양자화 연산 회로(5)는, 양자화 연산을 개시할 때, 제2 리드 세마포어 S2R이 「1」이상, 또한, 제3 라이트 세마포어 S3W가 「1」이상으로 될 때까지 기다리게 된다[디코드 스테이트(S2)에서의 Wait].
[컨벌루션 연산 회로(4)의 동작 2]
컨벌루션 연산 회로(4)가 제1 메모리(1)로부터 판독하는 입력 데이터는, 제3 데이터 플로우에 있어서 양자화 연산 회로(5)가 기입한 데이터인 경우도 있다. 이 경우, 컨벌루션 연산 회로(4)는, 제3 데이터 플로우 F3에 있어서는 컨슈머이며, 제2 데이터 플로우 F2에 있어서는 프로듀서이다. 그러므로, 컨벌루션 연산 회로(4)는, 컨벌루션 연산을 개시할 때, 제3 리드 세마포어 S3R에 대하여 P조작을 행하여, 제2 라이트 세마포어 S2W에 대하여 P조작을 행한다. 컨벌루션 연산 회로(4)는, 컨벌루션 연산의 완료 후에, 제3 라이트 세마포어 S3W에 대하여 V조작을 행하고, 제2 리드 세마포어 S2R에 대하여 V조작을 행한다.
컨벌루션 연산 회로(4)는, 컨벌루션 연산을 개시할 때, 제3 리드 세마포어 S3R가 「1」이상, 또한, 제2 라이트 세마포어 S2W가 「1」이상으로 될 때까지 기다리게 된다[디코드 스테이트(S2)에서의 Wait].
이상 설명한 바와 같이, 본 실시형태에 관한 NN 회로(100)에 의하면, 컨벌루션 연산 회로(4)와 양자화 연산 회로(5)가 루프형으로 형성되어 있고, 컨벌루션 연산 회로(4)와 양자화 연산 회로(5)가 교대(도 5) 또는 병렬(도 6)로, 도 1에 나타낸 NN(200)의 연산을 행한다. 그러므로, NN 회로(100)는 회로 규모가 작아, IoT 기기 등의 내장 기기에 내장 가능하다.
본 실시형태에 관한 NN 회로(100)에 의하면, 컨벌루션 연산 회로(4)에 대한 입력 데이터는, 양자화 연산 회로(5)에 의해 양자화된다. 그러므로, 컨벌루션 연산 회로(4)의 연산량을 삭감성과, 컨벌루션 연산 회로(4)의 회로 규모를 저감할 수 있다.
본 실시형태에 관한 NN 회로(100)에 의하면, DMAC(3)와 양자화 연산 회로(5)와 컨벌루션 연산 회로(4)는, 세마포어 S를 사용함으로써, 사용하는 데이터 플로우에서의 데이터 전송의 동기를 취하면서, 독립적으로 병렬로 동작할 수 있다. 또한, 본 실시형태에 관한 NN 회로(100)에 의하면, 데이터 플로우마다 세마포어를 설치함으로써, 데이터 플로우를 구별하여 데이터 전송의 동기를 취할 수 있다. 그러므로, NN 회로(100)는, 각각의 회로가 순차적으로 실행되는 경우와 비교하여, 연산 속도가 빠르게 고성능이다.
이상, 본 발명의 제1 실시형태에 대하여 도면을 참조하여 상세히 설명했지만, 구체적인 구성은 이 실시형태에 한정되지 않고, 본 발명의 요지를 벗어나지 않는 범위의 설계 변경 등도 포함된다. 또한, 전술한 실시형태 및 변형예에 있어서 나타낸 구성 요소는 적절하게 조합시켜 구성할 수 있다.
(변형예 1)
상기 실시형태에 있어서, 제1 메모리(1)와 제2 메모리(2)는 다른 메모리 이었지만, 제1 메모리(1)와 제2 메모리(2)의 태양은 이에 한정되지 않는다. 제1 메모리(1)와 제2 메모리(2)는, 예를 들면, 동일 메모리에서의 제1 메모리 영역과 제2 메모리 영역으로 해도 된다.
(변형예 2)
상기 실시형태에 있어서, 세마포어 S는 제1 데이터 플로우 F1, 제2 데이터 플로우 F2 및 제3 데이터 플로우 F3에 대하여 설치되어 있었지만, 세마포어 S의 태양은 이에 한정되지 않는다. 세마포어 S는, 예를 들면, DMAC(3)가 가중치 w를 가중치 메모리(41)에 기입하고, 승산기(42)가 가중치 w를 판독하는 데이터 플로우에 설치되어 있어도 된다. 세마포어 S는, 예를 들면, DMAC(3)가 양자화 파라미터 q를 양자화 파라미터 메모리(51)에 기입하고, 양자화 회로(53)가 양자화 파라미터 q를 판독하는 데이터 플로우에 설치되어 있어도 된다.
(변형예 3)
예를 들면, 상기 실시형태에 기재된 NN 회로(100)에 입력되는 데이터는 단일의 형식에 한정되지 않고, 정지 화상, 동영상, 음성, 문자, 수치 및 이들의 조합에 의해 구성할 수 있다. 그리고, NN 회로(100)에 입력되는 데이터는, NN 회로(100)가 설치되는 에지 디바이스에 탑재될 수 있는, 광 센서, 온도계, 글로벌 포지셔닝 시스템(GPS; Global Positioning System) 계측기, 각속도(角速度; angular velocity) 계측기, 풍속계 등의 물리량 측정기에서의 측정 결과에 한정되지 않는다. 주변 기기로부터 유선 또는 무선 통신 경유하여 수신하는 기지국 정보, 차량·선박 등의 정보, 기후 정보, 혼잡 상황에 관한 정보 등의 주변 정보나 금융 정보나 개인 정보 등의 상이한 정보를 조합시켜도 된다.
(변형예 4)
NN 회로(100)가 설치되는 에지 디바이스는, 배터리 등으로 구동하는 휴대 전화기 등의 통신 기기, 퍼스널 컴퓨터 등의 스마트 디바이스, 디지털 카메라, 게임기기, 로봇 제품 등의 모바일 기기를 상정하지만, 이에 한정되는 것은 아니다. Power on Ethernet(PoE) 등에 있어서의 공급 가능한 피크 전력 제한, 제품 발열의 저감 또는 장시간 구동의 요청이 높은 제품에 이용함으로써도 다른 선행예에 없는 효과를 얻을 수 있다. 예를 들면, 차량이나 선박 등에 탑재되는 차량 탑재 카메라나, 공공 시설이나 노상 등에 설치되는 감시 카메라 등에 적용함으로써 장시간의 촬영을 실현할 수 있을뿐아니라, 경량화나 고내구화(高耐久化)에도 기여한다. 또한, 텔레비전이나 디스플레이 등의 표시 디바이스, 의료 카메라나 수술 로봇 등의 의료기기, 제조 현장이나 건축 현장에서 사용되는 작업 로봇 등에도 적용함으로써 마찬가지의 효과를 얻을 수 있는 것이 가능하다.
(변형예 5)
NN 회로(100)는, NN 회로(100)의 일부 또는 전부(全部)를 1개의 이상의 프로세서를 사용하여 실현해도 된다. 예를 들면, NN 회로(100)는, 입력층 또는 출력층의 일부 또는 전부를 프로세서에 의한 소프트웨어 처리에 의해 실현해도 된다. 소프트웨어 처리에 의해 실현하는 입력층 또는 출력층의 일부는, 예를 들면, 데이터의 정규화나 변환이다. 이로써, 다양한 형식의 입력 형식 또는 출력 형식에 대응할 수 있다. 그리고, 프로세서로 실행하는 소프트웨어는, 통신 수단이나 외부 미디어를 사용하여 재기입 가능하게 구성해도 된다.
(변형예 6)
NN 회로(100)는, CNN(200)에서의 처리의 일부를 클라우드 상의 그래픽 프로세싱 유닛(GPU; Graphics Processing Unit) 등을 조합함으로써 실현해도 된다. NN 회로(100)는, NN 회로(100)가 설치되는 에지 디바이스로 행한 처리에 더하여, 클라우드 상에서 다시 처리를 행하거나, 클라우드 상에서의 처리에 더하여 에지 디바이스 상에서 처리를 행하거나 함으로써, 보다 복잡한 처리를 적은 자원으로 실현할 수 있다. 이와 같은 구성에 의하면, NN 회로(100)는, 처리 분산에 의해 에지 디바이스와 클라우드와의 사이의 통신량을 저감할 수 있다.
(변형예 7)
NN 회로(100)가 행하는 연산은, 학습이 끝난 CNN(200) 중 적어도 일부이었지만, NN 회로(100)가 행하는 연산의 대상은 이에 한정되지 않는다. NN 회로(100)가 행하는 연산은, 예를 들면, 컨벌루션 연산과 양자화 연산과 같이, 2종류의 연산을 반복하는 학습이 끝난 뉴럴 네트워크 중 적어도 일부라도 된다.
또한, 본 명세서에 기재된 효과는, 어디까지나 설명적 또는 예시적인 것으로서 한정적은 아니다. 즉, 본 개시에 관한 기술은, 상기한 효과와 동시에, 또는 상기한 효과 대신에, 본 명세서의 기재로부터 당업자에게는 명백한 다른 효과를 얻을 수 있다.
[산업 상의 이용 가능성]
본 발명은, 뉴럴 네트워크의 연산에 적용할 수 있다.
200: 컨벌루션 뉴럴 네트워크
100: 뉴럴 네트워크 회로(NN 회로)
1: 제1 메모리
2: 제2 메모리
3: DMA 컨트롤러(DMAC)
4: 컨벌루션 연산 회로
42: 승산기
43: 어큐뮬레이터 회로
5: 양자화 연산 회로
52: 벡터 연산 회로
53: 양자화 회로
6: 컨트롤러
61: 레지스터
S: 세마포어
F1: 제1 데이터 플로우
F2: 제2 데이터 플로우
F3: 제3 데이터 플로우

Claims (20)

  1. 입력 데이터를 저장하는 제1 메모리; 및
    상기 제1 메모리에 저장된 상기 입력 데이터와 가중치에 대하여 컨벌루션(convolution) 연산을 행하는 컨벌루션 연산 회로;
    상기 컨벌루션 연산 회로의 컨벌루션 연산 출력 데이터를 저장하는 제2 메모리; 및
    상기 제2 메모리에 저장된 상기 컨벌루션 연산 출력 데이터에 대하여 양자화 연산을 행하는 양자화 연산 회로;
    를 포함하고,
    상기 제1 메모리는 상기 양자화 연산 회로의 양자화 연산 출력 데이터를 저장하고,
    상기 컨벌루션 연산 회로는, 상기 입력 데이터로서 상기 제1 메모리에 저장된 상기 양자화 연산 출력 데이터에 대하여 상기 컨벌루션 연산을 행하고,
    상기 제1 메모리와, 상기 컨벌루션 연산 회로와, 상기 제2 메모리와, 상기 양자화 연산 회로는, 루프형으로 형성되어 있고,
    상기 컨벌루션 연산 회로는, 컨벌루션 연산 명령에 기초하여 상기 컨벌루션 연산 회로를 제어하는 상기 컨벌루션 연산 회로용 컨트롤러를 가지고,
    상기 양자화 연산 회로는, 양자화 연산 명령에 기초하여 상기 양자화 연산 회로를 제어하는 상기 양자화 연산 회로용 컨트롤러를 가지는,
    뉴럴 네트워크 회로(neural network circuit).
  2. 제1항에 있어서,
    상기 컨벌루션 연산 회로는, 상기 컨벌루션 연산 회로용의 명령 커맨드에 기초하여, 상기 제1 메모리로부터 상기 입력 데이터를 판독하고, 상기 컨벌루션 연산 출력 데이터를 상기 제2 메모리에 기입하고,
    상기 양자화 연산 회로는, 상기 양자화 연산 회로용의 명령 커맨드에 기초하여, 상기 제2 메모리로부터 상기 컨벌루션 연산 출력 데이터를 판독하고, 상기 양자화 연산 출력 데이터를 상기 제1 메모리에 기입하는, 뉴럴 네트워크 회로.
  3. 제1항에 있어서,
    상기 입력 데이터는, 제1 부분 텐서(tensor)와 제2 부분 텐서로 분해되고,
    상기 제1 부분 텐서에 대한 상기 컨벌루션 연산 회로에 의한 상기 컨벌루션 연산과, 상기 제2 부분 텐서를 입력으로 하는 상기 컨벌루션 연산의 상기 컨벌루션 연산 출력 데이터에 대한 상기 양자화 연산 회로에 의한 상기 양자화 연산은, 병렬로 실행되는, 뉴럴 네트워크 회로.
  4. 제1항에 있어서,
    상기 컨벌루션 연산 회로는, 상기 제1 메모리에 저장된 상기 입력 데이터에 대하여 레이어 2M-1(M은 자연수)의 상기 컨벌루션 연산을 행하고, 상기 레이어 2M-1의 상기 컨벌루션 연산 출력 데이터를 상기 제2 메모리에 저장하고,
    상기 양자화 연산 회로는, 상기 제2 메모리에 저장된 상기 레이어 2M-1의 상기 컨벌루션 연산 출력 데이터에 대하여 레이어 2M의 상기 양자화 연산을 행하고, 상기 레이어 2M의 상기 양자화 연산 출력 데이터를 상기 제1 메모리에 저장하고,
    상기 컨벌루션 연산 회로는, 상기 제1 메모리에 저장된 상기 레이어 2M의 상기 양자화 연산 출력 데이터를 상기 입력 데이터로 하여 레이어 2M+1의 상기 컨벌루션 연산을 행하고, 상기 레이어 2M+1의 상기 컨벌루션 연산 출력 데이터를 상기 제2 메모리에 저장하고,
    상기 레이어 2M-1과 상기 레이어 2M과 상기 레이어 2M+1은, 순차적으로 연결된 뉴럴 네트워크의 적어도 일부인, 뉴럴 네트워크 회로.
  5. 제4항에 있어서,
    상기 입력 데이터는, 제1 부분 텐서와 제2 부분 텐서로 분해되고,
    상기 제1 부분 텐서에 대응하는 상기 레이어 2M+1의 상기 컨벌루션 연산과, 상기 제2 부분 텐서를 입력으로 하는 상기 컨벌루션 연산의 상기 컨벌루션 연산 출력 데이터에 대응하는 상기 레이어 2M의 상기 양자화 연산은, 병렬로 실시되는, 뉴럴 네트워크 회로.
  6. 제1항에 있어서,
    상기 컨벌루션 연산 회로는,
    상기 입력 데이터와 상기 가중치를 적화(積和) 연산하는 승산기; 및
    상기 승산기의 적화 연산 결과를 누적 가산하는 어큐뮬레이터(accumulator) 회로;를 구비하는, 뉴럴 네트워크 회로.
  7. 제6항에 있어서,
    상기 승산기는, 상기 입력 데이터와 상기 가중치를 반전기(反轉器) 및 실렉터(selector)에 의해 승산하는, 뉴럴 네트워크 회로.
  8. 제1항에 있어서,
    상기 입력 데이터는 벡터 데이터이며,
    상기 가중치는 매트릭스 데이터인, 뉴럴 네트워크 회로.
  9. 제1항에 있어서,
    상기 입력 데이터의 각각의 요소(要素)는 2비트이며,
    상기 가중치의 각각의 요소는 1비트인, 뉴럴 네트워크 회로.
  10. 제1항에 있어서,
    상기 양자화 연산 회로는, 상기 컨벌루션 연산 출력 데이터를 정규화하는 회로를 더 구비하는, 뉴럴 네트워크 회로.
  11. 제1항에 있어서,
    상기 양자화 연산 회로는, 풀링(pooling)의 연산을 실시하는 회로를 더 구비하는, 뉴럴 네트워크 회로.
  12. 제1항에 있어서,
    상기 양자화 연산 회로는, 활성화 함수의 연산을 실시하는 회로를 더 구비하는, 뉴럴 네트워크 회로.
  13. 제1항에 있어서,
    외부 메모리로부터 상기 제1 메모리에 상기 입력 데이터를 전송하는 DMA 컨트롤러를 더 포함하는, 뉴럴 네트워크 회로.
  14. 제1항에 있어서,
    상기 제2 메모리는, 랜덤 액세스 가능하면서 재기입 가능한 메모리인, 뉴럴 네트워크 회로.
  15. 제13항에 있어서,
    상기 DMA 컨트롤러에 의한 상기 제1 메모리에 대한 기입을 제한하는 제1 라이트 세마포어(semaphore); 및
    상기 컨벌루션 연산 회로에 의한 상기 제1 메모리로부터의 판독을 제한하는 제1 리드 세마포어;를 더 포함하는, 뉴럴 네트워크 회로.
  16. 제1항에 있어서,
    상기 컨벌루션 연산 회로에 의한 상기 제2 메모리에 대한 기입을 제한하는 제2 라이트 세마포어; 및
    상기 양자화 연산 회로에 의한 상기 제2 메모리로부터의 판독을 제한하는 제2 리드 세마포어;를 더 포함하는, 뉴럴 네트워크 회로.
  17. 제1항에 있어서,
    상기 양자화 연산 회로에 의한 상기 제1 메모리에 대한 기입을 제한하는 제3 라이트 세마포어; 및
    상기 컨벌루션 연산 회로에 의한 상기 제1 메모리로부터의 판독을 제한하는 제3 리드 세마포어;를 더 포함하는, 뉴럴 네트워크 회로.
  18. 제1항에 기재된 뉴럴 네트워크 회로를 포함하고, 배터리에 의해 구동되는, 에지 디바이스(edge device).
  19. 제1 메모리 영역과 제2 메모리 영역을 사용하여 컨벌루션 연산과 양자화 연산을 행하는 뉴럴 네트워크 연산 방법으로서,
    상기 제1 메모리 영역에 저장된 입력 데이터에 대하여 레이어 2M-1(M은 자연수)의 상기 컨벌루션 연산을 행하고, 상기 레이어 2M-1의 컨벌루션 연산 출력 데이터를 상기 제2 메모리 영역에 저장하는 단계;
    상기 제2 메모리 영역에 저장된 상기 레이어 2M-1의 상기 컨벌루션 연산 출력 데이터에 대하여 레이어 2M의 상기 양자화 연산을 행하고, 상기 레이어 2M의 양자화 연산 출력 데이터를 상기 제1 메모리 영역에 저장하는 단계; 및
    상기 제1 메모리 영역에 저장된 상기 레이어 2M의 상기 양자화 연산 출력 데이터를 상기 입력 데이터로 하여 레이어 2M+1의 상기 컨벌루션 연산을 행하고, 상기 레이어 2M+1의 상기 컨벌루션 연산 출력 데이터를 상기 제2 메모리 영역에 저장하는 단계;
    를 포함하고,
    상기 레이어 2M-1과 상기 레이어 2M과 상기 레이어 2M+1은, 순차적으로 연결된 뉴럴 네트워크의 적어도 일부이고,
    상기 컨벌루션 연산은, 컨벌루션 연산 명령에 기초하여 제어되고,
    상기 양자화 연산은, 상기 컨벌루션 연산 명령과는 별도의 양자화 연산 명령에 기초하여 관리되는,
    뉴럴 네트워크 연산 방법.
  20. 제19항에 있어서,
    상기 입력 데이터를, 제1 부분 텐서와 제2 부분 텐서로 분해하고,
    상기 제1 부분 텐서에 대응하는 상기 레이어 2M+1의 상기 컨벌루션 연산과, 상기 제2 부분 텐서를 입력으로 하는 상기 컨벌루션 연산의 상기 컨벌루션 연산 출력 데이터에 대응하는 상기 레이어 2M의 상기 양자화 연산을, 병렬로 실시하는, 뉴럴 네트워크 연산 방법.
KR1020210047004A 2020-04-13 2021-04-12 뉴럴 네트워크 회로, 에지 디바이스 및 뉴럴 네트워크 연산 방법 KR102667790B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
JPJP-P-2020-071932 2020-04-13
JP2020071932A JP6896306B1 (ja) 2020-04-13 2020-04-13 ニューラルネットワーク回路、エッジデバイスおよびニューラルネットワーク演算方法

Publications (2)

Publication Number Publication Date
KR20210127099A KR20210127099A (ko) 2021-10-21
KR102667790B1 true KR102667790B1 (ko) 2024-05-20

Family

ID=76540464

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020210047004A KR102667790B1 (ko) 2020-04-13 2021-04-12 뉴럴 네트워크 회로, 에지 디바이스 및 뉴럴 네트워크 연산 방법

Country Status (5)

Country Link
US (1) US20210319294A1 (ko)
JP (1) JP6896306B1 (ko)
KR (1) KR102667790B1 (ko)
CN (1) CN113537479A (ko)
TW (1) TWI773245B (ko)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2023056644A (ja) * 2021-10-08 2023-04-20 LeapMind株式会社 ニューラルネットワーク回路およびニューラルネットワーク回路の制御方法
WO2023139990A1 (ja) * 2022-01-24 2023-07-27 LeapMind株式会社 ニューラルネットワーク回路およびニューラルネットワーク演算方法
KR20240128219A (ko) 2023-02-17 2024-08-26 주식회사 이엠솔루션 IoT 에지 디바이스에 기반하여 고속의 시각정보를 제공하는 지능 플랫폼 시스템 및 그 서비스 제공방법

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2019113007A1 (en) * 2017-12-05 2019-06-13 Wave Computing, Inc. Pipelined tensor manipulation within a reconfigurable fabric
US20190332903A1 (en) * 2017-04-24 2019-10-31 Intel Corporation Compute optimizations for neural networks

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04233063A (ja) * 1990-12-28 1992-08-21 Matsushita Electric Ind Co Ltd ニューロプロセッサ
CN101091314B (zh) * 2005-10-18 2010-05-19 松下电器产业株式会社 半导体集成电路
JP6539459B2 (ja) * 2015-02-24 2019-07-03 国立大学法人広島大学 Lvqニューラルネットワーク
JP6964234B2 (ja) 2016-11-09 2021-11-10 パナソニックIpマネジメント株式会社 情報処理方法、情報処理装置およびプログラム
US10528321B2 (en) * 2016-12-07 2020-01-07 Microsoft Technology Licensing, Llc Block floating point for neural network implementations
US10474458B2 (en) * 2017-04-28 2019-11-12 Intel Corporation Instructions and logic to perform floating-point and integer operations for machine learning
CN112214726B (zh) * 2017-07-07 2024-05-03 华为技术有限公司 运算加速器
KR102534917B1 (ko) * 2017-08-16 2023-05-19 에스케이하이닉스 주식회사 신경망 처리 회로를 구비하는 메모리 장치 및 이를 포함하는 메모리 시스템
US10699160B2 (en) * 2017-08-23 2020-06-30 Samsung Electronics Co., Ltd. Neural network method and apparatus
CN108364061B (zh) * 2018-02-13 2020-05-05 北京旷视科技有限公司 运算装置、运算执行设备及运算执行方法
CN110245741A (zh) * 2018-03-09 2019-09-17 佳能株式会社 多层神经网络模型的优化和应用方法、装置及存储介质
US20190332925A1 (en) * 2018-04-30 2019-10-31 International Business Machines Corporation Neural hardware accelerator for parallel and distributed tensor computations
TW202005312A (zh) * 2018-05-15 2020-01-16 美商萊特美特股份有限公司 用於訓練基於矩陣的可微分程式的系統及方法
JP7046171B2 (ja) * 2018-05-15 2022-04-01 三菱電機株式会社 演算装置
US10860865B2 (en) * 2018-09-13 2020-12-08 Chiral Software, Inc. Predictive security camera system
US10713012B2 (en) * 2018-10-15 2020-07-14 Intel Corporation Method and apparatus for efficient binary and ternary support in fused multiply-add (FMA) circuits

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20190332903A1 (en) * 2017-04-24 2019-10-31 Intel Corporation Compute optimizations for neural networks
WO2019113007A1 (en) * 2017-12-05 2019-06-13 Wave Computing, Inc. Pipelined tensor manipulation within a reconfigurable fabric

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
Y. Li 등. "High-performance Convolutional Neural Network Accelerator Based on Systolic Arrays and Quantization". 2019 IEEE 4th International Conference on Signal and Image Processing (ICSIP)*

Also Published As

Publication number Publication date
US20210319294A1 (en) 2021-10-14
JP6896306B1 (ja) 2021-06-30
TWI773245B (zh) 2022-08-01
TW202139077A (zh) 2021-10-16
CN113537479A (zh) 2021-10-22
KR20210127099A (ko) 2021-10-21
JP2021168095A (ja) 2021-10-21

Similar Documents

Publication Publication Date Title
KR102667790B1 (ko) 뉴럴 네트워크 회로, 에지 디바이스 및 뉴럴 네트워크 연산 방법
CN110147251B (zh) 用于计算神经网络模型的系统、芯片及计算方法
KR20190098671A (ko) 뉴럴 네트워크의 고속 처리 방법 및 그 방법을 이용한 장치
WO2021210527A1 (ja) ニューラルネットワーク回路の制御方法
WO2022163861A1 (ja) ニューラルネットワーク生成装置、ニューラルネットワーク演算装置、エッジデバイス、ニューラルネットワーク制御方法およびソフトウェア生成プログラム
US7769981B2 (en) Row of floating point accumulators coupled to respective PEs in uppermost row of PE array for performing addition operation
WO2022030037A1 (ja) ニューラルネットワーク回路およびニューラルネットワーク回路の制御方法
WO2024038662A1 (ja) ニューラルネットワーク学習装置およびニューラルネットワーク学習方法
WO2024111644A1 (ja) ニューラルネットワーク回路およびニューラルネットワーク演算方法
WO2023058422A1 (ja) ニューラルネットワーク回路およびニューラルネットワーク回路の制御方法
WO2023139990A1 (ja) ニューラルネットワーク回路およびニューラルネットワーク演算方法
US20240037412A1 (en) Neural network generation device, neural network control method, and software generation program
US20230316071A1 (en) Neural network generating device, neural network generating method, and neural network generating program
JP2024118195A (ja) ニューラルネットワーク回路およびニューラルネットワーク演算方法
JP2022183833A (ja) ニューラルネットワーク回路およびニューラルネットワーク演算方法
JP2022105437A (ja) ニューラルネットワーク回路およびニューラルネットワーク演算方法
KR102719910B1 (ko) 비정형 희소성을 위한 멀티칩 모듈 cim 기반의 전치 매크로를 갖는 하이브리드 희소-밀집 cim 트랜스포머 가속기
JP2023154880A (ja) ニューラルネットワーク生成方法およびニューラルネットワーク生成プログラム
JP2023006509A (ja) ソフトウェア生成装置およびソフトウェア生成方法
US20240256901A1 (en) Information processing apparatus, information processing method and non-transitory computer-readable storage medium
JP2022114698A (ja) ニューラルネットワーク生成装置、ニューラルネットワーク制御方法およびソフトウェア生成プログラム
JP2022170512A (ja) ニューラルネットワーク生成装置、ニューラルネットワーク演算装置、エッジデバイス、ニューラルネットワーク制御方法およびソフトウェア生成プログラム
US20240249150A1 (en) System for allocating deep neural network to processing unit based on reinforcement learning and operation method of the system
CN110647984A (zh) 芯片、集成处理设备及其操作方法

Legal Events

Date Code Title Description
E902 Notification of reason for refusal
AMND Amendment
E902 Notification of reason for refusal
E601 Decision to refuse application
AMND Amendment
X701 Decision to grant (after re-examination)
GRNT Written decision to grant