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

KR20160142791A - 뉴럴 네트워크 실시 방법 및 장치 - Google Patents

뉴럴 네트워크 실시 방법 및 장치 Download PDF

Info

Publication number
KR20160142791A
KR20160142791A KR1020160069379A KR20160069379A KR20160142791A KR 20160142791 A KR20160142791 A KR 20160142791A KR 1020160069379 A KR1020160069379 A KR 1020160069379A KR 20160069379 A KR20160069379 A KR 20160069379A KR 20160142791 A KR20160142791 A KR 20160142791A
Authority
KR
South Korea
Prior art keywords
region
weight
circuit
mask
zero
Prior art date
Application number
KR1020160069379A
Other languages
English (en)
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 KR20160142791A publication Critical patent/KR20160142791A/ko

Links

Images

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/76Arrangements for rearranging, permuting or selecting data according to predetermined rules, independently of the content of the data
    • G06F7/764Masking
    • 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
    • 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

Landscapes

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

Abstract

뉴럴 네트워크의 실행(implementing)은 입력 특성 맵의 첫번째 영역과 콘볼루션 커널의 첫번째 영역의 조합의 처리 여부의 결정과 출력 특성 맵의 적어도 한 부분을 생성하기 위해 콘볼루션 커널의 첫번째 영역을 사용하여 입력 특성 맵의 첫번째 영역상에서 콘볼루션 동작(convolution operation)을 수행하는 것을 포함할 수 있다.

Description

뉴럴 네트워크 실시 방법 및 장치 {Method and apparatus for implementing neural network}
본 개시는 뉴럴 네트워크 실시 방법 및 장치에 관한 것이다.
뉴럴 네트워크(neural network)는 생물학적 뇌를 모델링한 컴퓨터 과학적 아키텍쳐(computational architecture)를 참조한다. 뉴럴 네트워크 내에서, 뇌의 뉴런들에 해당되는 노드들은 서로 연결되어 있고, 입력 데이터를 처리하기 위하여 집합적으로 동작한다. 서로 다른 종류의 뉴럴 네트워크들을 예로 들면, Convolutional Neural Networks(CNN), Recurrent Neural Networks(RNN), Deep Belief Networks, Restricted Boltzman Machines 등이 있으나, 이에 제한되지 않는다. 피드-포워드(feed-forward) 뉴럴 네트워크에서, 뉴럴 네트워크의 뉴런들은 다른 뉴런들과의 연결들(links)을 갖는다. 이와 같은 연결들은 뉴럴 네트워크를 통해, 오직 한 방향으로만, 예를 들어 순방향(forward direction)으로 확장될 수 있다.
뉴럴 네트워크는 복잡한 입력 데이터로부터 “특성들(features)”을 추출하기 위해 이용될 수 있다. 뉴럴 네트워크는 복수의 계층들(layers)을 포함할 수 있다. 각각의 계층은 입력 데이터를 수신할 수 있고, 해당 계층의 입력 데이터를 처리하여 출력 데이터를 생성할 수 있다. 출력 데이터는, 뉴럴 네트워크가 입력 이미지 또는 특성 맵을 콘볼루션 커널들(convolution kernels)과 콘볼루션하여 생성한 입력 데이터의 특성 맵(feature map)일 수 있다. 뉴럴 네트워크의 초기 계층들은 이미지와 같은 입력으로부터 에지들 또는 그레디언트들과 같은 낮은 레벨의 특성들(low level features)을 추출하도록 동작될 수 있다. 뉴럴 네트워크의 다음 계층들은 눈, 코 등과 같은 점진적으로 더 복잡한 특성들을 추출할 수 있다.
다양한 실시예들에 따라 뉴럴 네트워크 실시 방법 및 장치를 제공한다. 본 실시예가 이루고자 하는 기술적 과제는 상기된 바와 같은 기술적 과제들로 한정되지 않으며, 이하의 실시예들로부터 또 다른 기술적 과제들이 유추될 수 있다.
상술한 기술적 과제를 달성하기 위한 기술적 수단으로서, 본 개시의 제 1 측면은 뉴럴 네트워크(neural network)를 실시(implement)하는 방법에 있어서 입력 특성 맵의 제1 영역(a first region of input feature map) 및 콘볼루션 커널의 제 1 영역(a first region of convolution kernel)의 조합(combination)의 처리 여부를 결정하는 단계; 및 상기 조합의 처리에 대한 결정에 대응하여, 출력 특성 맵(output feature map)의 적어도 한 부분(portion)을 생성하기 위해 상기 콘볼루션 커널의 제 1 영역을 이용하여, 상기 입력 특성 맵의 제 1 영역에 콘볼루션 동작을 수행하는 단계를 포함할 수 있다.
또한, 상기 결정하는 단계는 상기 입력 특성 맵의 제 1 영역 내의 0이 아닌 값(non-zero value) 및 상기 콘볼루션 커널의 제 1 영역 내의 0이 아닌 값(non-zero value)을 식별(identifying)하는 단계를 포함할 수 있다.
또한, 상기 결정하는 단계는 상기 입력 특성 맵의 제 1 영역상기 콘볼루션 커널의 제 1 영역 중 적어도 하나의 0인 부분 및 0이 아닌 부분(zero and non-zero portions)을 나타내는 마스크(mask)를 생성하는 단계를 포함할 수 있다.
또한, 상술한 기술적 과제를 달성하기 위한 기술적 수단으로서, 본 개시의 제 2측면은 뉴럴 네트워크(neural network)를 실시(implement)하는 장치에 있어서 입력 데이터 영역들(regions of input data)에 적용될 웨이트들(weights)이 0인지 여부를 결정하는 웨이트 처리 회로(weight processing circuit); 상기 입력 데이터의 영역들이 0인지 여부를 결정하는 데이터 스테이지 회로(data staging circuit); 및 0이 아닌 상기 입력 데이터의 영역들에 0이 아닌 웨이트를 적용하는 곱셈 누산 회로(multiply-accumulate circuit)를 포함할 수 있다.
또한, 상술한 기술적 과제를 달성하기 위한 기술적 수단으로서, 본 개시의 제 3측면은 제 1 측면의 방법을 컴퓨터에서 실행하기 위한 프로그램을 기록한 컴퓨터로 읽을 수 있는 비일시적(non-transitory) 기록매체를 제공할 수 있다.
도 1은 일 실시 예에 따른 뉴럴 네트워크 엔진(NN 엔진)을 설명하기 위한 도면이다.
도 2는 NN 엔진의 다른 실시 예를 도시한다.
도 3은 NN 엔진에 대한 동작 방법의 실시 예를 나타내는 흐름도이다.
도 4는 NN 엔진에 대한 동작 방법의 다른 실시 예를 나타내는 흐름도이다.
도 5는 NN 엔진의 다른 실시 예를 나타내는 도면이다.
도 6은 NN 엔진에 대한 동작 방법의 다른 실시 예를 나타내는 흐름도이다.
도 7은 NN 엔진에 의한 0 아닌 웨이트들(non-zero weights)의 트래버셜(traversal) 및 웨이트들의 압축 해제(decompression) 실시 예를 나타내는 도면이다.
도 8은 NN 엔진에 의한 처리를 위해, 메모리로부터 입력 특성 맵의 영역들의 검색(retrieval)을 나타내는 도면이다.
도 9-14는 NN 엔진에 의해 0 웨이트 생략(zero weight skipping)을 이용하여 웨이트들을 적용하는 실시 예를 나타내는 도면이다.
도 15a 및 15b는 NN 엔진으로 입력 특성 맵을 처리하는 실시 예를 나타내는 도면이다.
도 15c은 다중 NN 엔진들(multiple NN engines)에 의해 입력 특성 맵들의 동시 처리(concurrent processing)의 실시 예를 나타내는 도면이다.
도 16은 뉴럴 네트워크의 하나 이상의 분류 레이어들(classification layers) 처리를 위한 또는 벡터 프로덕터 처리를 위한 엔진의 일 실시 예를 나타내는 도면이다.
이하에서는 도면을 참조하여 본 실시예들을 상세히 설명한다.
다양한 기술적 특징은 도면의 설명을 참조하여 이해될 수 있다. 본 개시에서 기술되는 프로세스, 기계(machine), 제품(manufacture) 및 그 조합은 실시 예를 위해 제공된다. 기술된 어떤 특별한 구조적 및 기능적 사항(detail)은 제한적으로 해석되지 않는다. 개시된 기술에 관한 설명은 구조적 내지 기능적 설명을 위한 실시 예에 불과하므로, 개시된 기술의 권리범위는 본문에 설명된 실시 예에 의하여 제한되는 것으로 해석되어서는 아니 된다. 즉, 실시 예는 다양한 변경이 가능하고 여러 가지 형태를 가질 수 있으므로 개시된 기술의 권리범위는 기술적 사상을 실현할 수 있는 균등물들을 포함하는 것으로 이해되어야 한다.
본 개시는 뉴럴 네트워크(neural networks)와 관련되며, 구체적으로 뉴럴 네트워크에서 계산을 감소시키는 것과 관련된다.
다수의 뉴럴 네트워크는 에지(edge), 그래디언트(gradient), 얼룩(blob)의 특성(feature) 또는 코, 눈과 같은 높은 레벨의 특성(feature)을 추출하기 위해 동작하는 다수의 MAC(multiply-and-accumulate)를 수반하는 포워드 실행(forward execution)을 실시(implement)한다. 일 실시 예에 따른 포워드 실행 뉴럴 네트워크(forward execution neural networks)는 CNNs(Convolutional Neural Networks), RNN(Recurrent Neural Networks), DBNs(Deep Belief Networks) 및 RBM(Restricted Boltzman Machine)을 포함할 수 있으나 이에 제한되지 않는다. 다수의 경우에, MAC 동작(operation)을 이용하여 실시(implement)되는 콘볼루션(convolution)은 대략 90%의 뉴럴 네트워크 실행의 계산 비용, 퍼포먼스 및/또는 전력을 포함한다. 뉴럴 네트워크(NN) 엔진의 개시된 실시 예는 전체적인(overall) 뉴럴 네트워크의 정확도(accuracy)를 유지하면서 MAC 동작(operation)의 수를 감소시킴으로서, 효율을 개선할 수 있다.
예를 들면, SNN(Spiking Neural Networks)은 CNNs와는 여러 측면(aspects)에서 상이한 방식으로 동작하는 다른 변형(variant)의 뉴럴 네트워크이다. SNNs에서 “뉴런(neuron)” 연산 유닛(computational unit)에 인가되는 입력은 스파이크들(spikes)이고, 연결(connection)의 시냅틱 강도(synaptic strength)에 따라 가중(weighted)된다. 뉴런의 포스트 시냅틱 포텐셜(post-synaptic potential)에 더해진 가중된 스파이크들의 합은 임계치와 비교되고, 더해진 스파이크들과 포스트 시냅틱 포텐셜의 합이 임계치를 초과하면 뉴런에 의해 스파이크가 생성된다. 이러한 임계치의 한가지 효과는 주어진 타입의 충분히 중요한 특성들이 대부분의 위치에서 탐지되지 않기 때문에 뉴럴 네트워크의 다수의 부분들이 스파이크를 포함하지 않는다는 것이다.
일 실시 예에 따라, 다른 특성들 중에서 45˚ 에지를 탐지하는 NN 엔진에 대해 알아본다. 특정(particular) 이미지는 전체 이미지에 대한 퍼센트로, 45˚ 에지가 거의 포함되어있지 않을 수 있다. 45˚에지 탐지와 관련하여 이미지의 대부분 위치에서 스파이크가 없기 때문에, 대부분의 네트워크에서 수행될 계산이 거의 없다. 이는, 입력 스파이크가 없는 뉴런은 출력 스파이크를 생성하지 않기 때문이다. 그리고, 이러한 뉴런들에 대해서는 계산이 요구되지 않는다. 또한, 이러한 비활성화 뉴런들에 연결된 뉴런들은 잘 활성화되지 않는다. SNN의 임계치 특성(thresholding feature of SNN’s)은 네트워크 대부분의 활성화(activity)를 억제시켜 계산 및 관련된 전력을 감소시키는 효과를 갖는다.
개시된 실시 예는 뉴럴 네트워크를 SNN 실시(SNN implementation)로 전환(convert)없이, CNNs 및 관련된 넌-스파이킹(non-spiking) 뉴럴 네트워크 타입들과 함께 사용될 수 있다. SNNs는 전력 면에서는 이점을 보이지만, 유사한 네트워크 토폴로지(topology)에서 감소된(reduced) 정확성을 나타낸다(예: CNN이 SCNN으로 전환(convert)되는 경우).
본 개시에 따른 진보성 있는 배열(arrangement)에 따를 때, SNN의 그것들과 유사한 전력 및 성능(performance) 이점들은 SNN 가속(accelation)의 요구 및 스파이킹 실시(spiking implementation)로 전환하기 위한 뉴럴 네트워크의 재정의(redefinition) 없이 획득될 수 있다. 이러한 이점들은 낮은 비용과 CNN 실시(CNN implementation)를 향한 비침습적(non-invasive) 변화를 이용하여 획득될 수 있다. 일 측면에 따르면, 억제(suppression)가 실시되지 않는 네트워크에서의 정확도 수준(level of accuracy)을 유사하게 유지하는 동안, 전력을 절약하고(save), 성능(performance)을개선하기 위해 CNNs 및 다른 넌-스파이킹 네트워크 변형(variant)에 네트워크 억제(network suppression)가 적용될 수 있다.
뉴럴 네트워크를 실행하는 방법 및 시스템이 개시된다. 발명의 상세한 설명에서 개시되는 실시 예는 CNNs 및 관련된 뉴럴 네트워크를 위한 뉴럴 네트워크 실행의 전력 및 성능의 개선을 도울 수 있다. 일 측면에 따르면, 뉴럴 네트워크의 중요치 않은(non-critical) 부분(portion) 내의 동작(activity)은 선택적으로(selectively) 그리고 다이나믹하게 (dynamically) 억제(suppressed)되거나 생략(skipped)된다. 예를 들면, 웨이트 매트릭스와 입력 특성 맵을 컨벌빙(convolving)하는 동안, NN 엔진은 콘볼루션의 각 계산(computation)이 조건을 만족하는지 여부를 결정할 수 있다. 일 예에 따른 조건은 계산이 0 입력 값 및/또는 0 웨이트 값을 포함하는 것일 수 있다. 다시 말해서, 특정 조건(the condition)을 만족하는 것은 계산이 최종 계산에 영향을 미치지 않음을 나타낼 수 있다. 따라서, NN 엔진은 임의의 조건(a condition) 탐지에 대응하여 계산을 수행하지 않고, 특정 조건(the condition) 탐지에 대응하여 계산을 수행할 수 있다.
NN 엔진은 여러 방식으로 NN의 생략(skip) 또는 억제(suppress) 영역인지 여부를 결정하는 특정 조건을 탐지할 수 있다. 일 실시 예에 따르면, 억제된 뉴럴 네트워크의 영역은 레이어의 출력 측(output side)에서 트랙(tracked)되어 다음 레이어 내의 억제 영역의 처리는 생략될 수 있다. 일 실시 예가 도 1과 관련하여 개시된다. 계산이 생략될지 여부를 결정하는 조건은 입력 값과 웨이트 값이 메모리로부터 판독(read)되면 입력 측에서 탐지될 수 있다. 일 실시 예는 도 2 및 5와 관련하여 개시된다.
그렇게 해서, 뉴럴 네트워크의 전력 소비는 감소하는 동시에, 처리 속도의 관점에서 뉴럴 네트워크의 성능은 증가할 수 있다. 억제된 영역의 처리를 생략하는 능력(ability)은 성능을 향상시키고, 0을 곱하도록 MACs를 전환(conversions)하는 것 및 누산기(accumulator)에 0을 가산하는 것에 의해 이미 획득되는 전력 절약 이상으로 전력을 감소시킬 수 있다. 개시된 실시 예는 정확도에 거의 영향을 주지 않으면서, 네트워크 활성화(activity)의 수많은 부분을 제거(eliminate)할 수 있다.
다른 측면에서, 뉴럴 네트워크들은 복합 기능 근사(complex function approximations)를 이용하기 때문에, 뉴럴 네트워크에 의해 수행되는 동작들(the operations)은 뉴럴 네트워크의 전반적인 정확도(overall accuracy)에 중대한 영향을 주지 않고, 어느 정도(to a degree) 수정되거나 근사될 수 있다. 또한, 근사가 정확도에 영향을 미치는 경우, 근사의 정확도에 대한 영향은 추가적인 네트워크 트레이닝(network training)을 통해 완화될 수 있다.
도 1은 일 실시 예에 따른 뉴럴 네트워크 엔진(NN 엔진)(100)을 설명하기 위한 도면이다. NN 엔진(100)은 CNN이나 CNN과 유사한 다른 뉴럴 네트워크와 같은 뉴럴 네트워크를 실행할 수 있다. NN 엔진(100)은 억제 매커니즘(suppression mechanism) 및/또는 트래킹 및 로직 우회 매커니즘(tracking and logic bypass mechanism)을 실시할 수 있다. 억제(suppression)는 이하에서 설명하는 바와 같이 NN 엔진(100)내에서 여러 가지 다른 회로 블록으로 실시될 수 있다.
NN 엔진(100)은 뉴럴 네트워크의 다음 레이어에 의해 소모될(to be consumed) 출력 특성 맵들을 생성하기 위한 뉴럴 네트워크의 입력 특성 맵들에 대한 처리의 맥락(context)에서 일반적으로 설명된다. 도시된 바와 같이, NN 엔진(100)은 제어 회로(control circuit)(105)를 포함한다. 제어 회로(105)는 입력 패치 회로(input fetch circuit)(110), 콘볼루션 회로(115), 우회 처리 회로(bypass processing circuit)(120), 누산 회로(accumulator circuit)(125), 활성화 회로(activation circuit)(130), 풀링 및 서브-샘플링 회로(pooling and sub-sampling circuit)(PSS)(135) 및 마스크 생성 회로(mask generation circuit)(140)의 동작(operation)을 제어하고 조정(coordinate)한다.
설명의 목적으로, 점선(dotted lines)은 제어 회로(105)에서 NN 엔진(100)의 여러 회로 블록으로 제공되는 제어 신호를 나타낸다. 실선(solid lines)은 회로 블록들 중 데이터 신호를 나타낸다. 데이터 선 상의 화살표는 NN 엔진(100)을 통한 데이터의 일반적인 흐름을 나타내는 것이고, 데이터의 흐름이 단방향임을 나타내는 것은 아니다. 데이터 신호(data signals)는 회로 블록들 간의 통신 및 데이터 교환을 위해 실시 되는 양방향의 데이터 흐름을 나타낼 수 있다. 또한, 제어 신호는 양방향성일 수 있다.
일 실시 예에 따라, 제어 회로(105)는 마스크(170)를 판독하고, 대응하여, 입력 특성 맵들(160) 중 하나 이상을 검색(retrieve)하도록 입력 페치 회로(100)에 명령(instruct)한다. 일 측면에 따르면, 마스크는 뉴럴 네트워크의 어느 영역이 억제되는지 트랙하기 위해 사용되고, 억제된 영역은 억제되지 않은 영역과는 달리 처리되거나 우회될 수 있다. 본 개시에서 정의된 바와 같이 “억제된 영역(suppressed region)”은, 특성 맵을 참조할 때, 영역의 각 값이 동일하거나, NN 엔진의 자연적 동작에 의해 또는 NN 엔진에 의한 억제의 적용(예: 양자화 또는 클램핑)에 의해 상당히(substantially) 동일한 영역을 의미할 수 있다.
도 1의 실시 예에서, NN 엔진(100)은 특성 맵의 억제된 영역을 트랙하기 위해 특성 맵 당 마스크(예: 하나의 마스크)를 유지할 수 있다. 예를 들면, 각 마스크 영역(mask field)은 특성 맵에 대응되는 R×S의 직사각형 영역을 나타낼 수 있다(R 및 S가 정수). 각 마스크 필드는 1 비트 또는 2 이상의 비트로 실시될 수 있다. 일 실시 예에 따르면, NN 엔진(100)은 모두 0 값인 영역과 모두 1 값인 영역을 트랙할 수 있다. 이 경우, 각 마스크 필드는 2비트일 수 있다. 각 필드는 특성 맵의 대응되는 영역의 값이 모두 0인지 또는 모두 1인지 나타낼 수 있다. 다른 예로, NN 엔진(100)은 모두 0 값을 갖는 억제된 영역만을 트랙할 수 있다. 이 경우, 각 마스크 필드는 1비트일 수 있다. 다른 실시 예에 따라, 추가적(additional) 또는 양자택일적으로(alternatively), 트랙 영역은 동일한 값 또는 상당히(substantially) 동일한 값을 가질 수 있다. 또한, 도 2 및 5는 계산 레벨(computation level)에서 활성화(activity)가 억제된 실시 예를 개시한다(예: 계산은 적어도 하나의 0으로 평가된(zero-valued) 입력 값 또는 웨이트 값을 수반함).
도 1은 마스크 생성 회로(mask generation circuit)(140)가 PSS 회로(135)의 동작 후, 마스크를 생성하도록 동작하는 일 예를 도시한다. 또한, 도 1의 예는 뉴럴 네트워크의 다음(subsequent) 또는 다른 레이어들의 처리에 사용하기 위한 마스크를 저장(store)한다. 본 개시에서 설명된 다른 실시 예들은 마스크 생성과는 다르게 동작한다. 마스크 생성은 로컬 메모리로부터 판독한 데이터에 대응하여 발생할 수 있고, 뉴럴 네트워크의 다음(subsequent) 또는 다른 레이어들의 처리를 위해 저장될 필요가 없는 마스크와 같이 동적으로(dynamically) 수행될 수 있다. 도 2 및 5는 동적(dynamic) 마스크 생성을 이용하는 실시 예를 도시하고 있다. 또한, 도 2 및 5는 우회 처리 회로(bypass processing circuitry)(120)가 생략될 수 있는 예를 설명한다. 그 대신(instead), 본 실시 예들은 0이 아닌 입력 및 웨이트 값(non-zero input and weight values)을 둘 다 수반하는(involving) 계산(computations)을 처리하는 하나의 처리 경로(one processing path)를 포함한다. 적어도 하나의 0 입력 값 또는 웨이트 값(zero input value or weight value)을 수반하는 계산은 생략(skipped)될 수 있다.
도 1을 다시 참조하면, 실시의 일 예에서, R의 차원(dimension)은 S의 차원과 동일할 수 있다. 또한, 더 큰 수용적(receptive) 필드(또는 콘볼루션 풋프린트(convolution footprint))를 이용하여 판독되는 특성 맵을 위해 마스크는 더 클 수 있다. 예를 들면, 특성 맵이 11×11 콘볼루션 입력(the input to an 11×11 convolution)이라면 R 및 S 차원(dimensions R and S)은 16일 수 있다. 5×5 콘볼루션에 대해서, R 및 S 차원은 8 또는 9일 수 있다. R 및 S차원에 대한 더 작은 값은 더 많은 마스크 오버헤드(more mask overhead)의 비용에서 더 작은 억제 영역내의 불필요한 콘볼루션을 막는(inhibit) 파인 그레인 능력(fine grain ability)을 제공할 수 있다. 일반적으로 마스크 오버헤드는 작을 수 있다.
입력 패치 회로(110)는 제어 회로(105)의 제어 하에서 메모리(145)로부터 입력 특성 맵(160)을 판독할 수 있다. 구체적으로, 입력 패치 회로(110)는 제어 회로(105)의 제어 하에서 입력 특성 맵(160)의 선택된 영역을 검색할 수 있다. 일 실시 예로, 마스크(170) 판독에 있어서, 제어 회로(105)는 입력 특성 맵(160)의 어느 영역이 처리를 필요로 하고, 입력 특성 맵(160)의 어느 영역이 처리를 필요로 하지 않는지를 결정한다. 예를 들면, 모두 0인 영역을 나타내는 마스크(170)는 해당 영역은 처리될 필요가 없음을 나타낼 수 있다. 이 경우, 제어 회로(105)는 입력 패치 회로(110)을 해당 영역을 생략하도록 명령(instruct)할 수 있다. 입력 특성 맵(160)의 해당 영역이 처리를 필요로 하는 경우, 제어 회로(105)는 해당 영역이 콘볼루션 회로(115)를 통해 처리되어야 할지 또는 우회 처리 회로(120)를 통해 처리되어야 할지 결정할 수 있다. 웨이트(175)는 메모리(145) 또는 NN 엔진(100)에 연결된 다른 메모리에 저장될 수 있다.
입력 패치 회로(110)는 제어 회로(105)에 의해 명령받은 대로(as instructed) 입력 특성 맵(160)의 영역을 판독하고, 판독한 영역에 콘볼루션 회로(115) 또는 우회 처리 회로(120)를 제공할 수 있다. 콘볼루션 회로(115)는
입력 패치 회로(110)에 의해 패치된 입력 특성 맵들의 영역에 콘볼루션 커널을 적용할 수 있다. 예를 들면, 콘볼루션 회로(115)는 제 1 필터로 제 1 입력 특성 맵(160)을 컨벌브(convolve)하고, 제 2 필터로 제 2 입력 특성 맵(160)을 컨벌브하는 등, 주어진 영역에 대해 컨벌브를 수행할 수 있다. 우회 처리 회로(120)의 동작은 아래에서 자세히 설명된다.
누산 회로(accumulator circuit)(125)는 콘볼루션 회로(115) 및 우회 처리 회로(120)로부터 출력을 수신할 수 있다. 누산 회로(125)는 영역 기준(basis)으로 부분적 결과(partial results)를 합할 수 있다. 활성화 회로(130)는 누산 회로(125)로부터 합쳐진 결과를 수신하고, 합쳐진 결과에 활성화 기능(activation function)을 적용할 수 있다. 활성화 회로(130)는 PSS 회로(135)로 출력을 생성할 수 있다.
일 실시 예에 따르면, 활성화 회로(130)는 수신한 입력을 양자화함으로써 억제를 적용할 수 있다. 활성화 회로(130)는 수신한 입력과 하나 이상의 억제 임계치(suppression thresholds)의 비교에 따라 선택적으로 양자화를 수행할 수 있다. 예를 들면, 활성화 기능에 인가되는 입력이 낮은 억제 임계치(lower suppression threshold) 이하인 경우, 활성화 회로(130)는 활성화 기능의 출력이 0이 되도록 한다. 다른 예로, 활성화 기능에 인가되는 입력이 높은 억제 임계치(upper suppression threshold) 이상인 경우, 활성화 회로(130)는 활성화 기능의 출력이, 모두 1인 것 과같이, 최대 값(“MAX_VALUE”)이 되도록 한다. 일 실시 예에 따르면, 활성화 회로(130)는 활성화 기능의 구분적 선형 근사자 실시(piecewise linear approximator implementation)를 실시하고, 이를 통해 임계처리(thresholding) 또는 양자화(quantization)가 거의 비용 소모 없이 적용될 수 있다.
PSS회로(135)는 출력 특성 맵(150)을 생성하고, 출력 특성 맵(150)의 결과를 메모리(145)에 저장한다. 예를 들면, 16×16 출력 특성맵이 주어지면, PSS 회로(135)는 각 2×2 부분에서 최대 값을 취하여 서브샘플로 낮추어 8×8 출력 특성맵을 획득하여 출력 특성 맵(150)으로 메모리(145)에 기록한다.
다른 예로, PSS 회로는 억제(suppression)를 적용한다. 예를 들면, 풀링 동안, PSS 회로(135)는 활성화 회로(130)의 출력을 스캔하고, 활성화 회로(130)로부터 인접 출력(neighboring outputs)의 슬라이딩 윈도(sliding window) 내의 평균 또는 최대 값을 생성한다. PSS 회로(135)는 저 비용(low cost)에서 임계치 비교(threshold comparisons)를 수행한다. 풀링 동안 억제를 수행함으로써, 양자화 로직(quantization logic)은 인접 노드의 값을 고려(take into account)하고, 값의 그룹(group of values)에대한 억제에 영향을 미친다(condition). 값의 그룹을 고려하는 것(considering)은 NN 엔진(100)이 억제 값이 없는 영역(a region of no suppression values)에서 억제된 값의 영역(a region of suppressed values)으로 변화(transition)하는 곳에서, 인공적 에지(artificial edge)의 도입을 줄이거나 최소화하도록 할 수 있다.
억제는 활성화 회로(130) 또는 PSS 회로(135)에 의해 임계화(thresholding)를 이용해서 수행될 수 있다. 도시된 바와 같이, PSS 회로(135)는 마스크 생성 회로(140)와 연결될 수 있다. PSS 회로(135)는 출력 특성 맵(150)을 마스크 생성 회로(140)에 제공할 수 있다. 마스크 생성 회로(140)는 도시된 바와 같이 메모리(145)에 저장된 출력 특성 맵(150) 각각에 대해서 마스크(155)를 생성할 수 있다. 일반적으로 마스크 생성 회로(140)는 0 탐지(zero detection)를 수행하고, 마스크(150)를 생성할 수 있다. 생성된 마스크(150)는 뉴럴 네트워크의 다음 레이어 처리에서, 입력 마스크(예: 마스크 170)로 사용될 수 있다. NN 엔진(100)은 처리를 지속할 수 있고, 뉴럴 네트워크의 추가 레이어에서 처리되도록 기술된 바와 같이 처리를 반복할 수 있다. 논의된 바와 같이, 다른 실시 예에서, 도 2 및 도 5에 도시된 바와 같이 마스크는 데이터가 메모리로부터 판독 됨에 따라 동적으로 생성될 수 있고, 뉴럴 네트워크의 차후 레이어(subsequent layer)내의 특성 맵을 처리하기위해 저장될 필요가 없다.
일 실시 예에 따르면, 낮은 특성 강도의 탐지나 0에 클램핑(또는 양자화)에 추가적으로 또는 대안으로(alternative to), NN 엔진은 높은 특성 강도의 탐지 및 MAX_VALUE에 클램핑(또는 양자화)함으로써 또는 평탄 영역(area of flatness)을 생성하기 위한 특성 맵 값들을 양자화함으로써 우회 콘볼루션 동작을 수행할 수 있다. 정의된 바와 같이, 평탄 영역(area of flatness)은 값들(values)이 상당히 동일하거나 동일한 특성 맵 내 인접 값들의 그룹을 의미할 수 있다. 평탄 영역(area of flatness)은 또한 값들이 모두 최대 값이 아니거나 모두 0 값이 아닌 영역을 의미할 수 있다. 값들은 값들이 기설정된 범위 내에 있는 경우 상당히 동일(substantially the same)할 수 있다. NN 엔진(100)은 평탄한 특성 맵의 부분을 탐지할 수 있다. 평탄 영역내 인접 노드들의 세트에 대한 수용적 필드(receptive field)의 탐지에 대응하여, NN 엔진(100)은 콘볼루션 동작을 우회하고, 대신 콘볼루션 웨이트를 더하고, 스케일링 인자(scaling factor)라고 불리는 평탄 영역의 상수 값을 합쳐진 웨이트(summed weights)에 곱할 수 있다. 스케일링 인자는 값들이 상당히 동일하지만 같지는 않은 경우에, 평탄 영역의 값들의 평균일 수 있다. 평탄 영역의 값들(the values)이 같은 경우에, 스케일링 인자는 해당 값(the value)일 수 있다. 콘볼루션 웨이트는 웨이트(175)로부터 판독될 수 있다.
예를 들면, 우회 처리 회로(120)는 웨이트들을 더하고, 더해진 웨이트들에 평탄 영역의 스케일링 인자를 곱하는 것과 같이 우회 처리 동작을 수행할 수 있다. 개시된 양자화는 로컬 대비 재정규화(local contrast renormalization)와 유사할 수 있으나 결과적으로 제한된 개수의(limited number of) 이산 값(discrete values)이 될 수 있다. 제한된 개수의 이산 값(예: 8, 16)은 범위를 유지(preserve)할 수 있으나 정확도(precision)를 감소시킬 수 있다. 양자화는 활성화가 좁은 범위에 있는(fall into a narrow range) 경우, 같은 값들의 밴드(bands)나 윤곽(contours)를 생성하는 효과를 가져올 수 있다. 콘볼루션의 입력들이 이러한 윤곽 내에 있는(land within these contours) 경우, NN 엔진(100)은 콘볼루션 회로(115)를 우회하고, 대신 웨이트들을 더하고, 더한 결과를 우회 처리 회로(120)를 사용하여 평탄 영역의 값들에 의해 스케일할 수 있다. 입력 페치 회로(110)는 마스크(170)의 판독에 대응하여, 제어 회로(105)의 제어 하에 적절한 회로 블록에 해당 영역(the region)을 제공할 수 있다.
다른 예로, 억제 특성 작동 상태(with feature suppression enabled)에서 레이어 N에서의 입력 특성 맵을 사용하는 다음 레이어(예: 레이어 N+1)내의 특성 맵을 생성할 때, 제어 회로(105)는 대응되는 마스크에 따라 완전히 억제된 레이어 N 내의 영역에 현재 출력 영역(예를 들면, 4×4 블록)이 나타나는지(map) 여부를 결정할 수 있다. 마스크는 모두 0이거나 모두 1일 수 있다. 레이어 N내의 영역이 모두 0임을 탐지하면 이에 대응하여, 예를 들면, 제어 로직(105)은 해당 영역을 생략(skip)하고 다른 영역을 처리하기 위해 선택하도록 입력 패치 회로(110)에 명령(instruct)할 수 있다. 입력 영역이 모두 1인 경우, 우회 처리 회로(120)는 출력 영역 내의 모든 노드들에 대한 스케일링 인자(이 경우에는 1)가 곱해진 콘볼루션 웨이트들의 합과 같은 숫자(a number equaling a sum)를 출력(output)할 수 있다. 이 스케일된 웨이트들의 합은 콘볼루션 회로(115)가 콘볼루션을 수행한 경우, 출력과 적어도 근사(approximately equal)할 수 있다.
입력 특성 맵이 양자화되어 평탄 밴드(flat bands)가 된 레벨이 상대적으로 거의 없는 경우를 서포트(support)하기 위해서, 제어 회로(105)는 모두 0이거나 모두 1인 콜스 마스크(coarse mask)의 탐지에 추가적으로(in addition) 또는 대안으로(in the alternative to) 평탄 영역(flat regions)을 탐지할 수 있다. 예를 들면, 제어 회로(105)는 입력 특성 맵(160)으로부터 실제 영역을 판독할 수 있고, 동일하거나 상당히 동일한 특정 영역의 모든 값들을 탐지할 수 있다. 이 경우, 제어 회로(105)는 입력 패치 회로(110)에 입력 특성 맵(160)의 영역을 판독 또는 패치를 다시 생략(skip)할 것을 명령할 수 있고, 평탄 영역의 값들로부터 결정된 스케일링 인자로 스케일된 웨이트들의 합을 생성하여 출력할 것을 우회 처리 회로(120)에 명령할 수 있다. 예를 들면, 제어 회로(105)는 스케일된 합(scaled sum)을 생성하기 위해서 스케일링 인자와 명령을 우회 처리 회로(120)에 제공할 수 있다.
상술된 바와 같이, NN 엔진(100)은 마스크를 생성하기 위해 동작할 수 있다. 일 실시 예로, NN 엔진(100)은 레이어 N 내의 특성 맵 X를 생성하기 위해 모든 출력 영역을 통해 루프(loop)할 수 있다. NN 엔진(100)은 레이어 N-1의 각 특성 맵의 입력 영역 내의 콘볼루션들의 합을 결정할 수 있다. 또한, NN 엔진(100)은 출력 특성 맵의 영역을 생성할 수 있다. 예를 들면, NN 엔진(100)은 활성화 기능을 적용 및/또는 풀링 및 서브샘플링의 수행을 할 수 있다.
마스크 생성과 관련된 이하의 동작은 활성화 기능 단계(stage)의 부분(part) 또는 풀링 및 서브샘플링 단계(stage)의 부분으로 NN 엔진(100)에 의해 수행될 수 있다. NN 엔진(100)은 모든 출력이 낮은 억제 임계치(a lower suppression threshold)(TL) 이하인지 여부를 결정할 수 있다. 많약 그렇다면(if so), NN 엔진(100)은 출력 특성 맵의 이 영역에 대응되는 마스크 필드를 모두 0으로 설정(set)할 수 있다. 만약 그렇지 않다면(if not), NN 엔진(100)은 해당 영역(the region)의 모든 출력들이 높은 억제 임계치(upper suppression threshold)(TH)보다 큰지 여부를 결정할 수 있다. 만약 NN 엔진(100)이 해당 영역(the region)의 모든 출력들이 높은 임계치(the upper threshold)보다 크다고 결정한다면 NN 엔진(100)은 출력 특성 맵의 해당 영역(the region)에 대응되는 마스크 필드를 모두 1로 설정(set)할 수 있다.
모든 출력들이 낮은 억에 임계치보다 낮지 않거나 높은 억제 임계치보다 크지 않은 경우, NN 엔진(100)은 출력 특성 맵의 해당 영역(the region)에 대응되는 마스크 필드를 “모두 1이 아니(not all 1)”거나 “모두 0이 아니(not all 0)”도록 설정할 수 있다. 어떤 경우라도 NN 엔진(100)은 중간 데이터 메모리(intermediate data memory)를 노드 값들(node values)로 갱신할 수 있다. 예를 들면, 마스크 생성 회로(140)는 개시된 바와 같이 체킹(checking)을 수행하고 마스크 필드를 업데이트할 수 있다. PSS 회로(135)는 결과 데이터(the resulting data)를 메모리에 저장할 수 있다.
NN 엔진(100)은 레이어 N의 현재 특성 맵에 대한 마지막 영역(the last region)이 생성되었는지 여부를 결정할 수 있다. 만약 그렇다면(if so), NN 엔진(100)은 현재 특성 맵의 처리를 완료(complete)할 수 있다. NN 엔진(100)은 레이어 N의 다른 특성 맵의 영역들에 대한 처리를 계속(continue)할 수 있다. 만약 현재 특성 맵에 대한 마지막 영역(the last region)이 생성되지 않았다면, NN 엔진(100)은 레이어 N의 현재 특성 맵에 대한 다음 영역으로 계속(continue to)할 수 있다. 제어 회로(105)는 처리 되고 있는 현재 특성 맵의 특정 영역을 트랙(track)할 수 있다.
개시된 바와 같이, NN 엔진(100)은 마스크를 이용하여 억제를 적용하도록 동작할 수 있다. 일 실시 예에 따라, NN 엔진(100)은 뉴럴 네트워크의 레이어 N의 특성 맵 X를 생성할 수 있다. NN 엔진(100)은 처리되고 있는 영역이 출력 특성 맵 X에 대한 마지막 영역(the last region)인지 여부를 결정할 수 있다. 만약 그렇다면, NN 엔진(100)은 처리를 또는 다음 출력 특성 맵 또는 다음 레이어로 이동을 정지할(discontinue) 수 있다.
만약 처리되는 영역이 마지막 영역(the last region)이 아니라면, NN 엔진(100)은 특성 맵 X에 대한 다음 직사각형 출력 영역(a next rectangular output region)의 생성을 시작할 수 있다. 따라서, NN 엔진(100)은 다음 입력 특성 맵의 영역에 대한 처리를 시작할 수 있다. NN 엔진(100)은 현재 입력 특성 맵의 현재 영역에 대응되는 마스크 필드를 판독할 수 있다. 예를 들면, 제어 회로(105)는 마스크 필드를 판독할 수 있다. 마스크 필드는 처리되고 있는 입력 특성 맵의 영역이 콘볼루션 회로(115)에 의해 수행되는 일반적인 콘볼루션 처리를 받는지(undergo), 생략되는지(be skipped) 또는 우회 처리 회로(120)에 의해 수행될 수 있는 우회 처리를 받는지(undergo) 나타낼 수 있다.
일 측면에서, 제어 회로(105)는 마스크 필드가 해당 영역이 모두 0이거나 모두 1임을 나타내는지 결정할 수 있다. 예를 들면, 만약 NN 엔진(100)이 해당 영역이 모두 0이라고 결정한다면 해당 영역은 생략될 수 있다. 이 경우, 해당 영역은 콘볼루션 경로(convolution path)를 통해 처리되지 않고, 효율적으로 우회될 수 있다. 다른 측면에서, 해당 영역은 수신한 입력을 무시하고 0을 출력하는 것과 같은 우회 처리 회로(120)에 제공될 수 있다.
만약 NN 엔진(100)이 해당 영역이 모두 1이라고 결정한 경우, 해당 영역은 콘볼루션 결과를 생성하기 위해 우회 처리 회로(120)을 통해 처리될 수 있다. 일 실시 예에서, 제어 회로(105)는 입력 패치 회로(110)에 검색(retrieve)을 명령하고, 우회 처리 회로(120)에 해당 영역을 제공할 수 있다. 제어 회로(105)는 사용될 스케일링 인자를 우회 처리 회로(120)에 제공할 수 있다. 다른 예로, 제어 회로(105)는 입력 패치 회로(110)에 해당 영역을 검색하지 말고 우회 제어 회로(120)에 웨이트들의 합을 생성하고 스케일링 인자로 스케일 할 것을 명령할 수 있다.
만약 NN 엔진(100)이 해당 영역이 모두 0이 아니고 모두 1이 아니라고 결정한 경우, NN 엔진(100)은 현재 출력 특성 맵으로의 입력 레이어의 컨트리뷰션(contribution)을 생성하기 위해 콘볼루션 경로를 따를(follow) 수 있다. 예를 들면, 제어 회로(105)는 입력 패치 회로(110)에 해당 영역을 검색하고 해당 영역을 콘볼루션 회로(115)에 제공할 것을 명령할 수 있다.
NN 엔진(100)은 현재 특성 맵에 대한 결과를 누산기(accumulator)에 더할 수 있다. 누산 회로(125)는 결과를 더한다. NN 엔진(100)은 모든 입력 특성 맵이 처리되었는지 여부를 결정할 수 있다. 만약 그렇다면, NN 엔진(100)은 활성화 기능을 통해서 컨벌브된 값들(convolved values)의 합을 실행(run)할 수 있다. 예를 들면, 활성화 회로(130)는 활성화 기능을 수신한 합에 적용할 수 있다. 개시된 바와 같이 일 실시 예에서, 활성화 회로(130)는 억제를 적용할 수 있다. 다른 예로, 활성화 회로(130)는 수신한 입력과 낮은 억제 임계치를 비교할 수 있다. 활성화 회로(130)가 입력이 낮은 억제 임계치(the lower suppression threshold)보다 작다고 결정함에 대응하여, 활성화 회로(130)는 해당 영역에 대해서 0을 출력할 수 있다. 다른 예로, 활성화 회로(130)는 수신한 입력과 ㅅ높은 억제 임계치를 비교할 수 있다. 활성화 회로(130)가 출력이 높은 억제 임계치보다 크다고 결정함에 대응하여, 활성화 회로는 해당 영역에 대해서 MAX_VALUES를 출력할 수 있다. NN 엔진(100)은 입력 특성 맵이 처리될 때까지 처리를 유지할 수 있다.
도 1의 NN 엔진(100)은 오직 설명을 목적으로 제공된다. 다른 실시 예에서, 우회 처리 회로는 제어 회로로부터 스케일링 인자를 수신하는 대신에 사용될 스케일링 인자를 계산할 수 있다. 예를 들면, 모두 0인 모두 1인 또는 평탄 영역인 영역의 수신에 대응하여 우회 처리 회로는 해당 영역에 대해서 모두 0인 조건을 탐지하거나, 모두 1인 조건을 탐지하거나 또는 스케일링 인자로 사용될 수 있는 값의 평균을 계산할 수 있다.
도 2는 NN 엔진(100)의 다른 실시 예를 도시한다. NN 엔진(100)은 CNN과 같은 뉴럴 네트워크나 CNN과 유사한 다른 뉴럴 네트워크를 실행할 수 있다. NN 엔진(100)은 억제 매커니즘 및/또는 트래킹 및 로직 우회 매커니즘을 시행할 수 있다. 억제는 뉴럴 네트워크의 웨이트 및 입력 데이터에 관해(with regard to) NN 엔진(100) 내에서 시행(implement)될 수 있다. 예를 들면, 하나 또는 둘의 웨이트 또는 입력 데이터가 0인 경우, 입력 특성 맵의 영역의 처리는 생략될 수 있다. 또한, 뉴럴 네트워크의 억제된 영역을 나타내는 마스크(masks)가 메모리에 저장되어 있지 않고, 뉴럴 네트워크의 레이어간에 패스(pass)되는 경우에 대한 NN 엔진(100)이 도 1의 경우의 실시 예이다.
도 1을 참조하여 설명하면, 제어 신호(control signals)는 파선(dashed lines)으로 표시된다. 데이터 라인 상의 화살표는 NN 엔진(100)을 통한 데이터의 일반적인 흐름을 나타내고, 데이터의 단방향의(unidirectional) 흐름을 나타내는 것은 아니다. 데이터 신호는 회로 블록 간(among the circuit blocks) 통신 및 데이터 교환(data exchange)을 실시하기 위해 구현되는 양방향 신호(bidirectional signals)를 나타낼 수 있다. 제어 신호(the controls signals)는 양방향성(bidirectional)일 수 있다.
NN 엔진(100)은 제어 회로(105)를 포함할 수 있다. 제어 회로(105)는 입력 패치 회로(110), 콘볼루션 회로(115), 마스크 생성 및 웨이트 적용 제어 회로(mask generation & weight application control circuit)(MGWAC 회로)(220), 누산 회로(125), 활성화 회로(130) 및 PSS 회로(135)의 동작을 제어 및 조정(coordinate)할 수 있다. NN 엔진(100)은 누산 회로(125), 활성화 회로(130) 및 PSS 회로(135)에 대해서(with respect to) 도 1의 실시 예와 상당히 유사하게 동작할 수 있다. 도 2의 실시 에에서, 마스크는 메모리(145)에 저장될 필요가 없다. 메모리(145)는 출력 특성 맵(150), 입력 특성 맵(160) 및 웨이트들(165)를 저장할 수 있다. 다른 측면에서, 웨이트들(165)은 NN 엔진(100)과 연결된 다른 메모리에 저장될 수 있다.
입력 패치 회로(110)는 제어 회로(105)의 제어 하에서 메모리(145)로부터 입력 특성 맵(160) 및 웨이트들(165)을 검색(retrieve) 또는 판독(read)할 수 있다. 일 실시 예에 따르면, MGWAC 회로(220)는 메모리로부터 검색된 입력 특성 맵(160)의 영역이 억제되었는지 여부를 결정할 수 있다. 반면에, 제어 회로(105)는 어떤 영역 및 입력 특성 맵이 제어 목적으로 입력 패치 회로(110)에 의해 검색되었는지 트랙 및 나타낼 수 있고, MGWAC 회로(220)는 해당 영역(the region)이 억제되었는지 여부를 결정할 수 있다. 일 실시 예에 따르면, 도 2와 관련하여, MGWAC 회로(220)는 해당 영역이 모두 0 값(all zero values)을 포함하고 있는지 여부를 결정할 수 있다. 또한, MGWAC 회로(220)는 주어진 영역에 적용되는 웨이트들이 모두 0 값인지 여부를 결정할 수 있다.
일 실시 예에 따라, MGWAC 회로(220)는 어떤 영역들 및 웨이트들의 조합이 0이 아닌(non-zero)지 결정할 수 있다. 예를 들면, MGWAC 회로(220)는 영역 및 영역에 적용될 웨이트를 평가(evaluate)할 수 있다. 해당 영역의 모든 값들이 0이거나 해당 영역에 적용될 웨이트가 0인 경우 또는 양자에 모두 해당하는 경우, MGWAC 회로(220)는 콘볼루션 회로(115)에 해당 영역 및 해당 웨이트의 조합을 제공하지 않는다. 일 측면에서, MGWAC 회로(220)는 모두 0이 아닌(non-zero)영역 및 웨이트의 다음 조합을 결정할 수 있다. 해당 영역이 모두 0이 아니고(not all zeros), 웨이트가 0이 아닌 경우, MGWAC 회로(220)는 0이 아닌 영역 및 0이 아닌 웨이트의 조합을 처리를 위해서 콘볼루션 회로(115)에 제공할 수 있다. 콘볼루션 회로(115)로부터의 결과는 누산 회로(125)에 제공될 수 있다.
일 실시 예에 따르면, MGWAC 회로(220)는 입력 특성 맵의 해당 영역이 0이 아닌 값을 포함하고, 콘볼루션 커널의 대응 영역(예: 웨이트)이 0이 아닌 값을 포함함에 대한 결정에 대응하여 영역 및 웨이트의 조합이 처리되도록 결정할 수 있다. MGWAC 회로(220)는 입력 특성 맵 및/또는 콘볼루션 커널의 영역의 0 및 0이 아닌 부분을 나타내는 하나 이상의 마스크를 생성할 수 있다. 마스크는 플라이(fly) 상에서(예: 메모리(145)로부터 입력 특성 맵의 영역 및/또는 콘볼루션 커널의 영역의 판독에 대응하여) 생성될 수 있다.
예를 들면, MGWAC 회로(220)는 입력 특성 맵의 제 1 영역의 0 및 0이 아닌 부분을 나타내는 제1 마스크 및 콘볼루션 커널의 제 1 영역의 0 및 0이 아닌 부분을 나타내는 제 2 마스크를 생성할 수 있다. MGWAC 회로(220)는 제 1 마스크와 제 2 마스크를 비교할 수 있다. 이와 관련하여, MGWAC 회로(220)는 입력 특성 맵의 영역, 콘볼루션 커널의 영역 또는 둘 모두가 모두 0 값(all zero values)을 포함하는지에 대한 결정에 대응하여, 입력 특성 맵의 영역 및 콘볼루션 커널의 영역이 생략되도록 하는 콘볼루션 처리(convolution processing)를 결정할 수 있다.
도 2의 실시 예에서, 임계 처리(thresholding)는 도 1에서 개시된 바와 같이 활성화 회로(130) 또는 PSS 회로(135)에 의해 수행될 수 있다. PSS 회로(135)는 출력 특성 맵(150)을 메모리(145)에 기록(write)하고 출력 특성 맵(160)을 추가 처리(예: 마스크 생성)을 위한 다른 회로에 제공할 필요는 없다. 일 실시 예에 따르면, 클램프 값에 대한 0으로의 임계처리(thresholding to clamp values to zero)가 수행될 수 있다.
도 2에 도시된 NN 엔진의 실시 예는 오직 설명을 위한 목적으로 제공된다. NN 엔진 동작 및 대안(alternatives)의 다른 측면들이 이하에서 개시된다.
도 3은 도 2의 NN 엔진과 같은 NN 엔진에 대한 동작 방법(300)의 실시 예를 나타내는 흐름도이다. 블록(305)에서 NN엔진은 뉴럴 네트워크의 레이어 N 내의 특성 맵 X를 생성하기 모든 출력 영역을 통해 루프(loop)할 수 있다. 블록(310) 내에서, NN 엔진은 다음 입력 특성 맵을 판독할 수 있고, 선택적으로(optionally) 임계 처리(thresholding)를 적용할 수 있고 마스크를 생성할 수 있다. 마스크는 입력 특성 맵의 여러 영역이 모두 0 값(all zero values)을 가지고 있는지 여부를 나타낼 수 있다.
블록(315)에서, NN 엔진은 대응하는 0 아닌 입력(non- zero input)으로 다음 0 아닌 웨이트(non-zero)를 식별할 수 있다. 예를 들면, NN 엔진은 해당 영역이 모두 0 값(all zero values)을 가지지 않은 경우, 입력 특성 맵의 영역에 적용될 다음 0 아닌 웨이트(next non-zero weight)를 식별할 수 있다. 블록(320)에서, NN 엔진은 얼라인된(aligned) 입력 데이터(예: 0 아닌 영역)에 웨이트를 적용하거나 누산된 출력 값(accumulated output values)에 결과를 합산할 수 있다.
블록(325)에서 NN 엔진은 블록(320)에서 처리된 웨이트가 현재 커널 내의 마지막 0 아닌 웨이트(last non-zero weight)인지 여부를 결정할 수 있다. 만약 그렇다면, 방법(300)은 블록(330)으로 계속될 수 있다. 만약 그렇지 않다면, 방법(300)은 처리를 계속하기 위해서 블록(315)으로 되돌아올(loop back) 수 있다. 블록(330)에서, NN 엔진은 블록(320)에서 처리된 입력 특성 맵이 현재 레이어 내의 마지막 입력 특성 맵인지 여부를 결정할 수 있다. 만약 그렇다면 방법(300)은 블록(335)으로 진행될 수 있다. 만약 그렇지 않다면, 방법(300)은 처리를 계속하기 위해서 블록(310)으로 되돌아올(loop back) 수 있다.
블록(335)에서 NN엔진은 현재 영역에 대한 결과를 활성화 회로(들) 및 PSS 회로(들)로 출력할 수 있다. 블록(340)에서, NN 엔진은 레이어 N 내의 현재 특성 맵에 대한 마지막 영역이 생성되었는지 여부를 결정할 수 있다. 만약 그렇다면, 방법(300)은 종료될 수 있다. 만약 그렇지 않다면, 방법은 NN 엔진이 레이어 N 내의 현재 특성 맵에 대한 다음 영역으로 이동하는 블록(345)에서 계속될 수 있다. 블록(345) 이후, 방법(300)은 처리를 계속하기 위해서 블록(305)으로 되돌아올(loop back) 수 있다.
도 4는 도 2의 NN 엔진과 같은 NN 엔진에 대한 동작 방법(400)의 실시 예를 나타내는 흐름도이다. 블록(405)에서, NN 엔진은 뉴럴 네트워크의 레이어 N의 특성 맵 X를 생성할 수 있다. 블록(410)에서, NN 엔진은 출력 특성 맵 X에 대한 마지막 영역이 처리되었는지 여부를 결정할 수 있다. 만약 그렇다면 방법(400)은 나가기(exit)하여, 다음 출력 특성 맵 또는 다음 레이어로 이동할 수 있다. 만약 그렇지 않다면, 방법(400)은 블록(415)로 진행될 수 있다.
블록(415)에서 NN 엔진은 다음 직사각형 출력 영역(rectangular output region)을 생성할 수 있다. 블록(420)에서, NN 엔진은 다음 입력 특성 맵을 처리할 수 있다. 예를 들면, NN 엔진은 블록(420)에서 다음 입력 특성 맵의 처리를 시작할 수 있다. 블록(425)에서 NN 엔진은 현재 입력 특성 맵에 대응되는 마스크를 생성할 수 있다. 도 4의 예에서, 마스크는 현재 입력 특성 맵의 어느 영역이 모두 0 값(all zero values)을 가지고 있는지 또는 모두 0 값(all zero values)을 가지고 있는 영역이 있는지 나타낼 수 있다. 블록(430)에서, NN 엔진은 다음 0 아닌 웨이트에 대응되는 입력이 모두 0 값(all zero values)을 가지고 있는지 여부를 결정할 수 있다. 블록(430) 내의 입력(the input within block 430)은 처리에 의해 선택된 현재 입력 특성 맵의 영역일 수 있다. 만약 다음 0 아닌 웨이트에 대한 영역이 모두 0 값을 가지고 있다면, 방법(400)은 블록(435)로 계속될 수 있다. 블록(435)에서, NN 엔진은 다음 0 아닌 웨이트(non-zero weight)로 이동할 수 있다. 따라서, 적용될 웨이트(the weight to be applied) 또는 해당 영역(the region)이 모두 0 값들(all zero values)을 가진 경우 입력의 처리는 생략될 수 있다. 블록(435) 이후, 방법(the method)은 0 아닌 웨이트에 대응되는 다음 입력이 평가(evaluated)되는 블록(430)으로 되돌아올(loop back) 수 있다.
블록(430)을 다시 참조하면, 다음 0 아닌 웨이트에 대한 해당 영역이 모두 0 값을 가지고 있지 않으면, 방법(400)은 블록(430)에서 블록(440)으로 진행될 수 있다. 블록(440)에서, NN 엔진은 입력 레이어의 현재 출력 특성 맵에 대한 컨트리뷰션(contribution)을 생성하기 휘애 웨이트를 적용할 수 있다. 예를 들면, 콘볼루션 회로는 웨이트를 적용할 수 있다. 블록(445)에서, NN 엔진은 현재 입력 특성 맵에 대한 결과를 누산기에 합산할 수 있다. 예를 들면, 콘볼루션 회로는 결과를 누산 회로에 제공할 수 있다.
블록(450)에서, NN 엔진은 모든 입력 특성 맵이 처리되었는지 여부를 결정할 수 있다. 만약 그렇다면, 방법(400)은 블록(455)로 계속될 수 있다. 만약 그렇지 않다면, 방법(400)은 처리를 계속하기 위해서 블록(420)으로 되돌아올(loop back) 수 있다. 블록(455)에서, NN 엔진은 활성화 기능을 통해 컨벌브된(convolved) 값들의 합산을 실행할 수 있다. 예를 들면, 누산 회로는 활성화 회로에 컨벌브된 값들의 합을 보낼 수 있다. 활성화 기능으로부터의 결과는 상술된 바와 같이 PSS 회로를 통해 더 처리될 수 있다.
도 5는 NN 엔진(500)의 다른 실시 예의 도면이다. NN 엔진(500)은 CNN이나 CNN과 유사한 다른 뉴럴 네트워크와 같은 뉴럴 네트워크를 실행할 수 있다. NN 엔진(500)은 억제 메커니즘 및/또는 트래킹 및 로직 우회 메커니즘을 시행할 수 있다. 억제는 뉴럴 네트워크의 웨이트 및 입력 데이터와 관련하여(with regard to) NN 엔진(500) 내에서 시행될 수 있다. 예를 들면, 웨이트들 및 입력 데이터 중 하나 또는 둘 모두가 0인 경우, 입력 특성 맵의 영역의 처리는 생략될 수 있다.
NN 엔진(500)은 곱셈 누산 회로(multiply-accumulate circuit)(504)와 연결된 복수개의 입력 데이터 경로들(502)을 포함할 수 있다. 도 5의 실시 예에서, NN 엔진(500)은 네 개의 입력 데이터 경로들(502-1, 502-2, 502-3, 502-4)을 포함할 수 있다. 각 입력 데이터 경로(502)는 메모리(506), 웨이트 처리 회로(508), 마이크로 트래버셜 제어부(micro traversal controller)(510) 및 데이터 스테이지 회로(data staging circuit)(512)를 포함할 수 있다. 도 1에서 개시된 바와 같이, 제어 신호는 파선(dashed lines)으로 표시된다. 데이터 신호는 실선(solid lines)을 이용하여 표시된다. 라인 상의 화살표는 NN 엔진(500)을 통한 데이터의 일반적인 흐름을 나타내고, 데이터의 단방향의(unidirectional) 흐름을 나타내는 것은 아니다. 데이터 신호는 회로 블록 간(among the circuit blocks) 통신 및 데이터 교환(data exchange)을 실시하기 위해 구현되는 양방향 신호(bidirectional signals)를 나타낼 수 있다. 이와 유사하게, 도 5에서, 제어 신호 상의 화살표는 일반적인 제어의 흐름을 나타내고, 단방향 통신을 나타낼 것을 의도하지 않는다. 제어 신호(controls signals)는 양방향성(bidirectional)일 수 있다.
설명을 위해, NN 엔진은 입력 특성 맵의 4×4 영역에서 동작한다. 따라서, NN 엔진(500)을 참조하여 설명되는 여러 신호들의 비트 폭(bit widths)은 4×4 영역 사이즈를 이용한다. 다른 영역 사이즈가 사용될 수 있다. 예를 들면, 사이즈 2×2의 영역은 동작을 생략할지 여부를 결정함에 있어, 증가된 그래뉴래러티(granularity)를 제공하기 위해 사용될 수 있다. 작게 사이즈된 영역(또는 크게 사이즈된 영역)은 상술된 다양한 신호들에 대한 다른 비트 폭들(bit widths)을 야기할 수 있다. 일 실시 예에 따른 신호 사이즈들은 여기서 기술된 예로 제한되지 않는다.
마이크로 트래버셜 제어부(micro traversal controller)(510)는 웨이트 처리 회로(508) 및 데이터 스테이지 회로(512)에 베이스 주소들 및 차원들(base addresses and dimensions)을 제공할 수 있다. “차원들(dimensions)”은 뉴럴 네트워크의 레이어당 특성 맵들의 수, 타일 사이즈, 웨이트 매트릭스 차원 등을 의미할 수 있다. 예를 들면, 마이크로 트래버셜 제어부(510)는 하나 이상의 콘볼루션 레이어들의 타일(예: 1개의 타일)에 대한 특성 맵들 및 4×4 영역들을 통한 트래버셜(traversal)을 위해 웨이트 처리 회로(508) 및 데이터 스테이지 회로(512)로의 제어 신호들을 생성하거나 완전히 연결된 레이어들(fully connect layers) 내의 모든 입력들로부터 16 출력들(16 outputs)을 생성할 수 있다.
메모리(506)는 압축된 포맷(compressed format)내의 뉴럴 네트워크의 웨이트들의 서브셋(subset) 및 입력 특성 맵들의 서브셋을 저장할 수 있다. 웨이트는 어떤 다양한(a variety of) 알려진 압축 기술들(known compression technologies)을 이용한 압축된 포맷으로 저장될 수 있다. 도시된 바와 같이, 메모리(506)는 8개의 뱅크들(banks)를 포함할 수 있다. 일 실시 예에 따라, 메모리(506)는 SRAM(static random access memory) 디바이스로 구현될(implemented) 수 있다. 또한, 메모리(506)는 웨이트 처리 회로(508) 및 데이터 스테이지 회로(512)로 온칩 메모리(on-chip memory)로 구현될(implemented) 수 있다. 예를 들면, 칩이나 집적 회로(integrated circuit)는 각각의 복수개의 데이터 경로(502), 다른 타입의 처리 및 제어를 위한 다른 모듈들(예: 곱셈 누산 회로들, PSS 회로들 등), 다른 외부 메모리와 통신, 명령 파싱 등을 포함할 수 있다.
웨이트 처리 회로(508)는 웨이트 디컴프레서(weight decompressor)(514), 웨이트 버퍼(516) 및 웨이트 트랜스미터(518)를 포함할 수 있다. 웨이트 디컴프레서(514)는 제어 신호(536) 및 데이터 신호(538)을 통해(via) 메모리(506)로부터 웨이트들을 판독할 수 있다. 예를 들면, 제어 신호(536)는 뱅크(bank) 및 라인 선택 신호(line select signal)일 수 있다. 데이터 신호(538)은 128비트의 데이터 신호일 수 있다. 개시된 바와 같이, 웨이트들은 메모리(506)에 압축된 포맷(compressed format)으로 저장될 수 있다. 일반적으로 웨이트 디컴프레서(514)는 메모리(506)로부터 압축된 웨이트들을 판독할 수 있고, 데이터 신호(540)를 통해 웨이트 버퍼(516)에 압축 해제된(decompressed) 웨이트들을 저장할 수 있다. 웨이트 디컴프레서(514)는 한번에(at a time) 입력 특성 맵의 특정 4×4 영역(a particular 4×4 region)의 처리를 위해 필요한 웨이트들(예: 한번에 16 웨이트들)을 압축된 포맷으로(in compressed format) 판독할 수 있다. 웨이트 디컴프레서(514)는 압축된 웨이트들의 수신에 대응하여, 각 웨이트가 사이즈에서 8 또는 9 비트인 웨이트들을 압축 해제할 수 있다.
웨이트 디컴프레서(514)는 4×4 영역에 적용될 어떤 웨이트가 0인지 나타내는 16 비트 웨이트 마스크를 생성할 수 있다. 웨이트 디컴프레서(514)는 웨이트 버퍼 엔트리의 일부로(as part of a weight buffer entry) 데이터 신호(540)를 통해서 웨이트 버퍼(516)에 0 아닌 압축 해제된 웨이트들을 저장할 수 있다. 압축 해제된 웨이트들은 모든 16 웨이트들이 0 아님을 가정할 때(presuming all 16 weights are non zero), 기껏해야(at most) 128 비트의 웨이트 버퍼 엔트리(128 bits of the weight buffer entry)를 요구한다. 웨이트 디컴프레서(514)는 0 아닌 웨이트들의 x, y 위치를 나타내는 16 비트 웨이트 마스크를 저장할 수 있다. 예를 들면, 16 비트 마스크는 0 값인 웨이트들을 가진 처리될 4×4 영역에 대한 웨이트들(those weights)을 나타낼 수 있다.(예: 마스크의 대응하는 비트 위치에(in the corresponding bit position of the mask) 0을 사용 하고, 1은 0 아닌 웨이트를 나타냄.) 16 비트 마스크는 144 비트 엔트리들을 야기하는(resulting in 144 bit entries) 압축 해제된 웨이트(the decompressed weights)로 엔트리에(within the entry) 저장될 수 있다. 데이터 신호(540)는 144 비트 신호일 수 있다.
웨이트 버러(516)로부터의 웨이트들과 16 비트 마스크는 웨이트 트랜스미터(518)에 제공된다. 일 실시 예에 따르면, 웨이트 트랜스미터(518)는 128 비트 신호일 수 있는 데이터 신호(544)를 통해(via) 웨이트들을 판독한다. 웨이트들은 데이터 신호(544)를 통해 웨이트 트랜스미터(518)에 의해 판독될 수 있고, 웨이트 시프트 레지스터(520)에 저장될 수 있다. 16 비트 웨이트 마스크는 제어 신호(542)를 통해 웨이트 트랜스미터(518)에 의해 판독될 수 있고, 웨이트 마스크 레지스터(522)에 저장될 수 있다. 웨이트 트랜스미터(518)는 데이터 신호(522)를 오버하여(over data signal 552) 각 클럭 사이클(each clock cycle)에 하나의 0 아닌 웨이트(one non-zero weight)를 곱셈 누산 회로(504)로(예: 제 1 포트로) 시프트 아웃(shift out)할 수 있다.
일 측면에서, 웨이트들은 웨이트 트랜스미터(518)를 여러 위치로 브로드캐스트(broadcast out)할 수 있다. 예를 들면, 0 아닌 웨이트가 8 비트의 폭인 경우에도, 데이터 신호는 128 비트의 폭이어서, 웨이트가 하나 이상의 위치로 보내지는 것을 허용할 수 있다. 예를 들면, 곱셈 누산 회로(504)는 각각은 동일한 웨이트를 수신하는 여러 입력(multiple input)을 가지고 있을 수 있다.
데이터 스테이지 회로(512)는 메모리(506)로부터 입력 특성 맵들의 4×4 영역들을 패치(fetch)하고 0들 마스크(a zeros mask)를 생성할 수 있다. 일 측면에서, 웨이트 트랜스미터(518)는 4×4 영역(예: 16 비트 웨이트 마스크를 사용)에 적용하기 위한 각 웨이트들의 위치를 알 수 있고, 제어 신호(546)을 통해서 웨이트 어플리케이션 제어부(532)에 정보를 보낼 수 있다. 웨이트 어플리케이션 제어부(532)는 웨이트 트랜스미터(518)로부터 수신한 정보에 기초하여, 대응하는 입력 데이터의 x, y 영역(예: 웨이트 처리 회로(508)에 의해 검색되는 4×4 웨이트들을 이용하여 처리될 입력 특성 맵의 영역)에 멀티플렉스 출력(multiplex out)하도록 입력 패치 회로(524)에 명령할 수 있다. 예를 들면, 입력 패치 회로(524)는 해당 영역(the region)을 검색(retrieve)하기 위해서 메모리(506) 내의 주소를 생성하고, 생성한 주소를 제어 신호(548)을 통해 메모리(506)에 제공할 수 있다. 제어 신호(548)는 뱅크 및 선택 라인일 수 있다. 검색된 영역은 데이터 스테이지 회로(512)에 제공될 수 있고, 특히(more particularly), 신호(550)를 통해서 메모리(506)로부터 컴포넌트 마스크 생성부(component mask generator)(528)에 제공될 수 있다.
컴포넌트 마스크 생성부(528)는 어떤 인접(contiguous) 4×4 영역이 0인지 나타내는 입력 특성 맵의 검색된 영역에 대한 마스크들을 생성할 수 있다. 일 측면에서, 컴포넌트 마스크 생성부(528)는 데이터 신호(550)를 통해 데이터의 128 비트로 16개의 8비트 값들(입력 데이터의 4×4 영역)을 수신할 수 있다. 각 8비트 값들에 대해서, 컴포넌트 마스크 생성부(528)는 대응되는 4×4 영역의 값(corresponding value of the 4×4 region)이 0인지 여부를 각 비트가 특정하는 16비트 컴포넌트 마스크의 하나의 비트를 생성하기 위해 8비트들의 로직 OR 동작(operation)을 수행할 수 있다. 컴포넌트 마스크 생성부(528)는 데이터 신호(554)를 통해 입력 데이터 FIFO(input data first in first out)(526)내의 엔트리에 128 비트의 데이터와 생성된 컴포넌트 마스크를 기록(write)할 수 있다. 데이터 신호(554)와 입력 데이터 FIFO(526) 내의 각 엔트리는 144 비트의 폭일 수 있다.
얼라인먼트 마스크 생성부(alignment mask generator)(530)는 제어 신호(555)를 통해 입력 데이터 FIFO(526)으로부터 16 비트 컴포넌트 마스크들을 판독할 수 있다. 얼라인먼트 마스크 생성부(530)는 전체 4×4 영역(the entire 4×4 region)이 각 얼라인먼트에서 입력 데이터 FIFO(526)으로부터 판독된 컴포넌트 마스크에 기초하여 0인지 여부를 결정할 수 있다. 예를 들면 얼라인먼트 마스크 생성부(530)는 컴퍼넌트 마스크들을 사용하여 얼라인먼트 마스크라는(called an alignment mask) 추가 16 비트 마스크를 생성할 수 있다. 4×4 영역에 대해서 16개의 가능한 얼라인먼트들이 있을 수 있다. 얼라인먼트 마스크 생성부(530)는 제어 신호(558)를 통해 웨이트 어플리케이션 제어부(532)와 연결될 수 있다. 제어 신호(558)는 16비트 신호일 수 있다. 제어 신호(558)를 통해서, 얼라인먼트 마스크 생성부(530)는 입력 데이터가 제어 신호(558)을 통해 주어진 웨이트에 대한 모든 얼라인먼트들에 대해 0인지 여부를 웨이트 어플리케이션 제어부(532)에 알릴 수 있다. 웨이트 어플리케이션 제어부(532)는 웨이트 처리 회로(508)의 동작 마다(per operation) 0 아닌 웨이트들만을 수신할 수 있다.
데이터 얼라이너(534)는 입력 데이터 FIFO(526)의 엔트리들로부터 4×4 영역들을 판독할 수 있다. 예를 들면, 입력 데이터 FIFO(526) 내의 엔트리로부터 어라인먼트 마스크 생성부(530)에 의해 판독되는 주어진 컴포넌트 마스크에 대해서, 데이터 얼라이너(534)는 데이터 신호(556)을 통해 같은 엔트리로부터 4×4 영역의 값을 판독할 수 있다. 데이터 신호(556)은 128 비트 신호일 수 있다.
웨이트 어플리케이션 제어부(532)는 얼라인 먼트 마스크 생성부(530)에 의해 결정된 주어진 웨이트에 대해 모든 입력 데이터가 0인지 여부를 결정할 수 있다. 웨이트가 모두 0인 4×4 영역(이하에서 0 영역으로 표시(hereafter a “zero region”))에 대응하는(예: 적용될(is to be applied to))지에 대한 결정에 대응하여, 웨이트 어플리케이션 제어부(532)는 생략될 웨이트와 영역의 처리를 야기할 수 있다. 예를 들면, 웨이트 어플리케이션 제어부(532)는 데이터 신호(562)를 통해서 곱셈 누산 회로(504)에 입력 데이터 FIFO(526)로부터 판독된 0 영역(zero region)을 출력하지 말 것을 제어 신호(560)를 통해서 데이터 얼라이너(534)에게 명령할 수 있다. 웨이트가 모두 0은 아닌 4×4 영역에 대응하는지에 대한 결정에 대응하여, 웨이트 어플리케이션 제어부(532)는 신호(562)를 통해서 곱셉 누산 회로(504)에 해당 영역(the region)을 출력할 것을 데이터 얼라이너(534)에 명령할 수 있다.
일 실시 예에서, 웨이트 어플리케이션 제어부(532)는 제어 신호(546)를 통해 웨이트 트랜스미터(518)에 명령을 제공할 수 있다. 예를 들면, 웨이트 어플리케이션 제어부(532)는 데이터 신호(552)를 통해 곱셈 누산 회로(504)에 웨이트를 전송할지 여부를 웨이트 트랜스미터(518)에 명령할 수 있다. 입력 데이터가 0인 경우, 얼라인먼트 마스크 생성부(530)에 의해 결정된 바와 같이, 웨이트 어플리케이션 제어부(532)는 0 아닌 웨이트를 곱셈 누산 회로(504)에 전송하지 않을 것을 웨이트 트랜스미터(518)에 명령할 수 있다. 웨이트 어플리케이션 제어부(532)는 반복적으로 그와 같은 조합을 검색하는 것이 아니라, 첫번째 0 아닌 웨이트를 0 아닌 입력과 직접적으로 동일시하고, 그 조합(that combination)을 처리함으로서, 처리가 없을 사이클을 제거할 수 있다.
도시된 바와 같이 곱셈 누산 회로(504)는 추가적인 입력 데이터 경로(502-2, 502-3, 502-4)로부터 웨이트들 및 데이터를 수신할 수 있다. 도 5의 실시 예에서, NN 엔진(500)은 4개의 입력 데이터 경로를 포함할 수 있다. 다른 실시 예에서, 더 많은 입력 데이터 경로들이 제공될 수 있다. 예를 들면 8 또는 16개의 입력 데이터 경로들이 제공될 수 있다. 예를 들면, 영역들은 4×4보다는 2×2일 수 있다.
도 5에서 도시되지 않았지만, 곱셈 누산 회로(504)로부터 출력(output)상에서 동작하는 도 1 및/또는 2에 개시된 바와 같이, NN 엔진(500)은 활성화 회로망(activation circuitry) 및 풀링 및 서브 샘플링 회로망(pooling and sub-sampling circuitry)을 포함할 수 있다. 또한 억제는 도시된 바와 같이 NN 엔진(500)의 활성화 회로망(activation circuitry) 및 풀링 및 서브 샘플링 회로망(pooling and sub-sampling circuitry) 내에서 구현될(implemented) 수 있다.
도 6은 NN 엔진에 대한 동작 방법(600)의 일 실시 예를 나타내는 흐름도이다. 방법(600)은 입력 데이터 및/또는 웨이트들 내의 0 조건들을 탐지하는 것에 대응하여 생략 처리를 수행하는 도 5의 NN 엔진(500)과 같이, NN 엔진에 의해 구현되는(implemented) 동작의 일반적인 방법을 나타낸다.
방법(600)은 메모리로부터 입력 특성 맵의 영역을 처리하기 위해 NN 엔진이 웨이트들을 검색하는 블록(605)에서 시작할 수 있다. 웨이트들은 압축된 포맷으로 메모리 내에 저장되어 있을 수 있다. 블록(610)에서 NN 엔진은 웨이트들을 압축 해제할 수 있다. 블록(615)에서 NN 엔진은 블록(605)에서 검색된 웨이트들을 사용하여 처리될 입력 특성 맵의 영역을 검색할 수 있다.
블록(620)에서, NN 엔진은 0 웨이트들을 결정할 수 있다. NN 엔진은 블록(605) 내에서 검색된 어떤 웨이트들이 0 값을 갖는지 결정할 수 있다. 블록(625)에서 NN 엔진은 0 웨이트들에 대해서 처리를 생략할 수 있다. 예를 들면, NN 엔진은 0 값을 가진 웨이트들(weights that have zero values)의 추가 전송(further transmission)을 억제하여, 0 값을 가진 웨이트들(weights with zero values)은 블록(615)에서 검색된 입력 특성 맵의 영역에 적용되지 않을 수 있다. 사이클들은 이와 달리(otherwise) 0 아닌 웨이트들을 적용하기 위해 이용될 수 있는(be used to apply non-zero weights) 0 값의 웨이트들 적용(applying a weight of zero value)에 전념(devote to)할 수 있다. 0 값 웨이트들은 네트워크 실행 이전에(prior to network execution) 오프라인으로 결정될 수 있고, 이 정보는 웨이트 데이터 내에(예를 들면, 압축 포맷의 일부로) 포함될 수 있다.
블록(630)에서, NN 엔진은 입력 특성 맵의 영역이 모두 0인지(즉 0 영역인지) 여부를 결정할 수 있다. 상술된 바와 같이 NN엔진은 해당 영역(the region)의 어떤 값들이 0인지 결정할 수 있고, 해당 값들(the values)이 해당 영역(the region)의 각 가능한 얼라인먼트에 대해서 모두 0(all zero)인지 여부를 결정할 수 있다. 블록(635)에서, NN 엔진은 0 아닌 웨이트들에 대응되는 0 영역들의 처리를 생략하면서, 0아닌 웨이트들에 대응(the corresponding non-zero weights)을 이용하여 입력 데이터의 0 아닌 영역들을 처리할 수 있다. 예를 들면, 0 영역에 적용될 0 아닌 웨이트 결정에 대응하여, NN 엔진은 0 영역 및 해당 웨이트의 처리를 생략할 수 있다. NN 엔진은 0 영역 또는 0 아닌 웨이트를 곱셈 누산 회로에 전송하지 않을 수 있다. 0 아닌 웨이트들에 대응되는 0 아닌 영역들은 처리를 위해서 곱셈 누산 회로에 제공될 수 있다.
도 6은 일반적인 영역들의 처리를 나타내고 있다. 방법(600)은 입력 특성 맵의 추가 영역들, 추가 입력 특성 맵들 및 뉴럴 네트워크의 추가적인 레이어들을 처리하기 위해 반복될 수 있다. 설명을 쉽게 하기 위해서(for ease of illustration), 활성화 스테이지 및 풀링 및 서브 샘플링 스테이지와 같은 스테이지들은 설명되지 않는다.
도 7은 도 5의 NN 엔진에 의해 웨이트들의 압축 해제 및 0 아닌 웨이트들의 트래버셜의 실시 예를 나타낸다. 도시된 바와 같이, 웨이트 디컴프레서(514)는 메모리(506)로부터 압축된 웨이트들을 판독하고, 웨이트 버퍼(516)에 압축 해제된 웨이트들을 저장한다. 웨이트 디컴프레서(514)는 압축 해제된 웨이트들로 웨이트 버퍼(516)에 저장되는 웨이트 마스크들을 생성할 수 있다. 도 7의 우측편(right-hand side)은 웨이트 디컴프레서(514)로부터 출력의 일 실시 예를 나타낸다. 도 7은 4개의 다른 4×4 웨이트 매트릭스들을 이용하여 개시되는(represented) 7×7 웨이트 매트릭스를 시용하는 실시 예를 나타낸다. 문자 A, B, C, D, E, F, G, H, I, J, K, L, M, N, P, Q, R, S, T, W, X, Y, Z는 0 아닌 웨이트들을 나타낼 수 있다.
도시된 바와 같이 압축 해제된 웨이트들의 각각의 사분면(quadrant)의 웨이트들은 처음에는(initially) 메모리(506) 내에 함께 압축되어 있을 수 있다. 웨이트들은 웨이트들 H-L 이전에 웨이트들 A-G이 적용되도도록, 사분면(quadrant) 순서로 적용될 수 있다. 웨이트들 H-L에 뒤이어 웨이트들 W-Z가 적용될 수 있다. 웨이트들 W-Z에 뒤이에 웨이트들 M-T가 적용될 수 있다. 일 실시 예에 따르면 웨이트 트랜스미터(518)는 도 5에 도시된 순서로 0 아닌 웨이트들을 출력할 수 있다. (즉, 웨이트 A를 출력하고, 그리고 나서 웨이트 B를 출력하고, 그리고 나서 웨이트 C를 출력하고 등등) 예를 들면, 웨이트 트랜스미터(518)는 0 웨이트들을 생략하면서 나타나는(shown) 순서로 0 아닌 웨이트들을 트래벌스(traverse)하는 로직을 포함할 수 있다. 예를 들면, 0 웨이트들은 웨이트 트랜스미터(518)로부터 출력되지 않을 수 있다.
도 8은 도 5의 NN 엔진에 의한 처리를 위해, 메모리로부터 입력 특성 맵의 영역들의 검색(retrieval)을 나타내는 도면이다. 도시된 바와 같이, 메모리(506)는 4×4 영역에 입력 특성 맵들을 저장할 수 있다. 도 8의 우측편(right-hand side)은 메모리(506)에 저장된 입력 특성 맵들의 영역들의 공간적 레이아웃을 나타낸다. 각각의 A, B, C, D, E, F, G, H, I 영역은 입력 특성 맵의 4×4 영역일 수 있다. 4×4 영역들은 입력 패치 회로(524)에 의해 메모리로부터 패치되므로, 컴포넌트 마스크 생성부(528) 및 얼라인먼트 마스크 생성부(530)는 플라이 상에서(on the fly) 컴포넌트 마스크들과 얼라인먼트 마스크들을 생성할 수 있다. (예: NN 엔진(500)의 동작 동안 동적으로(dynamically during operation of NN engine 500)) 도 8에서 사용된 참조 문자들(reference letters)은 오직 설명을 위한 목적으로 개시되었고, 도 7의 0 아닌 웨이트들을 나타내기 위해 사용된 참조 문자들과 같거나 관련되지 않을 수 있다.
도 9-14는 NN 엔진에 의해 0 웨이트 생략(zero weight skipping)을 이용하여 웨이트들을 적용하는 실시 예를 나타내는 도면이다. 도 9-14는 웨이트들에 대한 0 생략(zero skipping for weights)을 설명하기 위해서 복수개의 연속적인 사이클들(consecutive cycles) 상에서 수행되는 동작들에 대한 실시 예를 나타낸다.
도 9는 첫번째 사이클에서 수행되는 처리의 일 실시 예를 나타낸다. 도 9에서, 입력 특성 맵(905)의 4×4 영역(910)은 웨이트 매트릭스(915)의 0 아닌 웨이트(920)를 사용하여 처리될 수 있다. 웨이트(920)의 영역 (910)에 대한 적용(application)은 출력 영역(925)를 야기(result in)할 수 있다.
도 10은 두번째 사이클(a second cycle)에서 수행될 수 있는 처리의 실시 예를 나타낸다. 도 10에서, 입력 특성 맵(905)의 4×4 영역(1010)은 웨이트 매트릭스(915)의 0 아닌 웨이트(1020)를 이용하여 처리될 수 있다. 영역(1010)에 웨이트(1020)의 적용은 출력 영역(1025)을 야기(result in)할 수 있다.
도 11을 참조하면, 처리된 다음 웨이트는 0의 값을 가진 웨이트 매트릭스(915)내의 웨이트(1120)일 수 있다. 그러나, 웨이트(1120)는 0의 값을 가지고 있기 때문에, 웨이트(1120)은 생략될 수 있다. 따라서, 4×4 영역(1110)의 처리는 도 11에서 생략될 수 있다. 웨이트(1120) 및 영역(1110)에 대해서 사이클이 소모되지 않고 출력이 생성되지 않을 수 있다.
도 12는 세번째 사이클(in a third cycle)에서 수행될 처리의 실시 예를 나타낸다. 도 12에서, 입력 특성 맵(905)의 4×4 영역(1210)은 웨이트 매트릭스(915)의 0 아닌 웨이트(1220)을 사용하여 처리될 수 있다. 영역(1210)에 웨이트(1220)의 적용은 출력 영역(1225)를 야기(result in)할 수 있다.
도 13을 참조하면, 처리된 다음 웨이트는 0의 값을 가진 웨이트 매트릭스(915)내의 웨이트(1320)일 수 있다. 그러나, 웨이트(1320)는 0의 값을 가지고 있기 때문에, 웨이트(1320)은 생략될 수 있다. 따라서, 4×4 영역(1310)의 처리는 도 13에서 생략될 수 있다. 웨이트(1320) 및 영역(1310)에 대해서 사이클이 소모되지 않고 출력이 생성되지 않을 수 있다.
도 14를 참조하면, 처리된 다음 웨이트는 0의 값을 가진 웨이트 매트릭스(915)내의 웨이트(1420)일 수 있다. 웨이트(1420)를 처리함에 있어, NN 엔진은 웨이트(1420)을 사용하여 처리될 4×4 영역(1410)은 0 영역(예: 모두 0 값을 가지는)임을 결정할 수 있다. 따라서, NN 엔진은 영역(1410)과 웨이트(1420)의 처리를 생략할 수 있다. 사이클이 소모되지 않고 출력이 생성되지 않을 수 있다. NN 엔진은 좌하단 코너(the lower left hand corner)의 0 값을 가지는 웨이트를 계속해서 생략할 수 있고, 이에 따라, 처리될 다음 웨이트는 0.07값을 가진 웨이트일 수 있다. NN 엔진은 4번째 사이클의 대응하는 4×4 영역에 이 웨이트를 적용할 수 있다. 우하단 코너(the lower right hand corner)의 웨이트 매트릭스(915)의 마지막 웨이트는 0의 값을 가질 수 있고 생략될 수 있다.
도 15a 및 15b는 도 5의 NN 엔진에 의해 입력 특성 맵을 처리하는 일 예를 나타내는 도면이다. 도 15c은 도 5의 NN 엔진의 다중 인스턴스(multiple instance)에 의해 입력 특성 맵들의 동시 처리(concurrent processing)의 실시 예를 나타내는 도면이다. 도 15a, 15b, 15c는 입력 특성 맵들의 영역을 검색하기 위해서 그리고, 주어진 영역의 처리를 생략할지 여부를 결정하기 위해 NN 엔진에 의해 사용되는 마스크를 생성하기 위해서 수행될 수 있는 일련의 동작들(the sequence of operations)을 나타낸다. 도 15a 및 15b는 4×4 의 출력에 대한 입력 특성 맵의 컨트리뷰션(contribution)을 생성하기 위한 하나의 입력 특성 맵에 대한 처리를 나타낸다. 도 15c은 다중 입력 특성 맵들의 처리를 나타낸다.
도 5를 참조하면, 각각 경로들은 다른 웨이트 매트릭스를 다른 입력 특성 맵(예: 도 15c을 참조)에 적용하는, 병력적으로 동작하는 4, 8, 16 입력 데이터 경로들이 있을 수 있다. 입력 데이터 경로들은 분리되어(decoupled) 각각의 경로들은 그들의 각각의 웨이트 매트릭스들 내의 다른 위치들로부터 웨이트들을을 적용할 수 있다. 각각의 입력 맵들에 대해서, 웨이트 및 16 입력들은 각 사이클에 곱셉 누산 회로의 4 입력들 중 하나에 인가(feed into)될 수 있다. 4 입력들(4 inputs)은 곱셈 누산 회로의 누산 레지스터에 가중(weighted) 및 합산(added)될 수 있다. 하나의 0 아닌 웨이트는 사이클마다 16 뉴런(neurons)에 적용될 수 있다. 이 실시 예는 0 아닌 웨이트들과 특셩 맵의 4×4 영역이 일치(coincide)하지 않는 경우를 가정할 때, 16 뉴런들에 모든 웨이트들을 적용하기 위해, 23(vs 49) 사이클을 요구한다.
도 15a을 참조하면, 사이클-3(cycle-3)의 왼쪽에서 오른쪽으로 움직이는 맨 위의 행(top row)에서, NN 엔진은 처리를 위해서 메모리로부터 데이터 레지스터로 입력 특성 맵의 첫번째 4×4 영역(a first 4×4 region)을 로드(load)한다. 예를 들면, 입력 패치 회로(524)는 메모리로부터 4×4 영역을 패치하고, 컴포넌트 마스크 생성부(528)에 영역을 제공할 수 있다. 컴포넌트 마스크 생성부(528)는 입력 데이터 FIFO(526)에 해당 영역(the region)을 로드할 수 있다. 또한, 첫번째 4×4 영역에 대한 컴포넌트 마스크(1550)는 컴포넌트 마스크 생성부(528)에 의해 생성되고, 입력 데이터 FIFO(526)에 저장될 수 있다. 컴포넌트 마스크(1550)의 각 비트는 4×4 영역 위에(in the 4×4 region above) 있는 대응되는 8비트 값(the corresponding 8비트 값)이 0 또는 0이 아닌지 나타낼 수 있다.
사이클-2에서 NN 엔진은 처리를 위해(for processing) 메모리의 입력 특성 맵의 다음 또는 두번째 4×4 영역(next, or second, 4×4 region)을 데이터 레지스터로(into data registers) 로드(load)할 수 있다. 또한, NN 엔진은 두번째 4×4 영역에 대한 컴포넌트 마스크(1552)를 생성할 수 있다. 사이클-1에서, NN 엔진은 처리를 위해(for processing) 메모리의 입력 특성 맵의 다음 또는 세번째 4×4 영역(next, or thrid, 4×4 region)을 데이터 레지스터로(into data registers) 로드(load)할 수 있다. NN 엔진은 (레이블되지 않은) 세번째 4×4 영역에 대한 컴포넌트 마스크를 생성할 수 있다. 또한, 사이클-1에서, NN 엔진은 얼라인먼트 마스크 생성을 시작할 수 있다. 얼라인먼트 마스크는 각 얼라인먼트에서 인접한(contiguous) 4×4 내의 모든 엘리먼트가 0인지 여부를 나타낼 수 있다.
도시된 바와 같이, NN 엔진은 첫번째 4 행들의 가로로 0이 연속 마스크(1502)(the first four rows of a horizontal “0” runs mask 1502)를 생성한다. 예를 들면, 얼라인먼트 마스크 생성부(530)는 첫번째 4 행들의 가로로 0이 연속 마스크(1502)(the first four rows of a horizontal “0” runs mask 1502)를 생성하기 위해, 생성된 컴포넌트 마스크들 처리를 시작할 수 있다. 얼라인먼트 마스크 생성부(530)는 외곽(outline)에 나타난 맨 위의 행의 첫번째 4 비트들에 논리 OR 동작을 수행하고, 결과를 마스크(1502)의 맨 위의 왼쪽 필드에 위치시킬(place) 수 있다. 얼라인먼트 마스크 생성부(530)는 맨 위의 행의 두번째, 세번째, 네번째, 다섯번째 비트들에 논리 OR 동작을 수행하고, 결과를 마스크(1502)의 맨 위의 왼쪽에서 두번째 필드에 위치시킬(place) 수 있다. 얼라인먼트 마스크 생성부(530)는 마스크(1502)에서 동그라미 쳐진(circled) 비트들을 생성하기 위해서 외곽선이 그려진 4 비트들의 그룹들(outlined groups of 4 bits)에 논리적인 OR 동작이 수행되도록 도시된 바와 같이 비트 값들을 생성하는 것을 계속(continue)할 수 있다. 마스크(1502)는 16개의 4입력 OR 게이트들과 같은 회로 형태(circuit configuration)의 일 실시 예를 이용하여 한번에(at one time) 생성될 수 있다. 개시된 비트들의 생성은 설명을 목적으로 개시되었으며 발명을 제한하지 않는다.
사이클 0에서, NN 엔진은 처리를 위해서(for processing) 메모리의 입력 특성 맵의 다음 또는 네번째 4×4 영역(next, or fourth, 4×4 region)을 데이터 레지스터로(into data registers) 로드(load)할 수 있다. 또한, NN 엔진은 네번째 4×4 영역에 대한 컴포넌트 마스크를 생성할 수 있다. 사이클 0에서 NN 엔진은 수직으로 비트들에 논리 OR 동작을 수행함으로써(by locally OR’ing bits vertically) 마스크(1502)의 나머지(remainder)를 생성할 수 있다. 도시된 바와 같이, 얼라인먼트 마스크(1504)의 맨 위의 왼쪽 비트를 생성하기 위해 국지적으로(locally) OR 동작이 외곽선(outline) 내에 나타난 첫 번째 열(column)의 첫 번째 4 비트들에 대해서 수행된다. 처리(the process)는 완성된 16 비트 얼라인먼트 마스크(1504)를 생성할 때까지 계속될 수 있다. 얼라인먼트 마스크(1504)의 비트 위치는 비트 위치에 의해 나타나는 4×4의 맨 위 왼쪽 코너의 위치에 대응될 수 있다.
사이클 1에서, NN 엔진은 웨이트 적용을 시작할 수 있다. 설명을 위해, 맨 위 왼쪽 코너에서 시작하는 4×4 영역은 사이클 1에 대해 도 15a에 도시된 바 및 도 7에 설명된 바와 같이 “A”의 0 아닌 웨이트(a non-zero weight of “A”)를 사용하여 처리될 수 있다. 또한, 얼라인먼트 마스크(1504)의 맨 위 왼쪽 위치에서 나타나는 바와 같이 외곽선이 그려진(outlined) 4×4 영역은 0이 아닐(non-zero) 수 있다. 따라서 NN 엔진은 웨이트 A를 사이클 1에서 외곽선이 그려진 4×4 영역에 적용할 수 있다.
사이클 2에서, NN 엔진은 도 7에 도시된 바와 같이 적용될 웨이트(the weight)는 0이므로, 첫번째 행(row) 내의 왼쪽으로부터 두번째 위치의 좌상 코너에 의해 정의되는 4×4 영역을 생략할 수 있다. 그 대신, 웨이트 B는 0이 아니기 때문에, NN 엔진은 웨이트 B의 윤곽선으로 보여지는(shown) 4×4 영역을 처리할 수 있고, 얼라인먼트 마스크(1504)는 맨 위 행 내의 왼쪽으로부터 세번째 비트 위치의 0 아닌 데이터를 나타낼 수 있다.
도 15b를 참조하면, 사이클 3에서, NN 엔진은 사이클 3에 대한 외곽선에 나타난 4×4 영역에 대응하는 도 7의 다음 0 아닌 웨이트 C(the next non-zero weight C)를 처리할 수 있다. 얼라인먼트 마스크(1504)는 맨 위 행 내의 왼쪽부터 4번째 비트 위치에 따라 해당 4×4 영역(the 4×4 region)이 0이 아님을 나타낼 수 있다. 따라서, NN 엔진은 외곽선 내에서 보여지는(shown) 4×4 영역에 0 아닌 웨이트 C를 적용할 수 있다.
사이클 4에서, NN 엔진은 사이클 4에 대한 외곽선 내에서 보여지는 4×4 영역에 대응되는 도 7의 다음 0 아닌 웨이트 D(the next non-zero weight D of FIG. 7)를 처리할 수 있다. 얼라인먼트 마스크(1504)는 두번째 행(row) 내의 왼쪽부터 세번째 비트 위치에 따라 해당 4×4 영역(the 4×4 region)은 0이 아님을 나타낼 수 있다. 따라서, NN 엔진은 외곽선 내에 보여지는 해당 4×4 영역(the 4×4 region)에 0 아닌 웨이트 D를 적용할 수 있다.
사이클 5에서, 얼라인먼트 마스크(1504)의 세번째 행(row) 내의 왼쪽으로부터 두번째 비트가 0 아닌 웨이트 E에 의해 처리될 4×4 영역이 0 영역(zero region)임을 나타내기 때문에, NN 엔진은 도 7의 0 아닌 웨이트 E에 대응되는 4×4 영역을 생략할 수 있다. 따라서, 사이클 5에서, NN 엔진은 사이클 5에 대한 외곽선에서 보여지는 영역에 대응되는 도 7의 다음 0 아닌 웨이트 F(the next non-zero weight F of FIG. 7)를 처리할 수 있다. 얼라인먼트 마스크(1504)는 세번째 행 내의 왼쪽에서 네번째 비트 위치에 따라 해당 4×4 영역(the 4×4 region)이 0이 아님을 나타낼 수 있다. 또한, 사이클 5에서, NN 엔진은 처리를 위해 다음 4×4 영역을 검색할 수 있다.
사이클 6에서, NN 엔진은 사이클 6에 대한 외곽선 내에서 보여지는 4×4 영역에 대응되는 도 7의 다음 0 아닌 웨이트 G(the next non-zero weight G of FIG. 7)를 처리할 수 있다. 얼라인먼트 마스크(1504)는 네번째 행(row) 내의 왼쪽부터 두번째 비트 위치에 따라 해당 4×4 영역(the 4×4 region)은 0이 아님을 나타낼 수 있다. 따라서, NN 엔진은 사이클 6에 대한 외곽선에서 보여지는 4×4 영역에 0 아닌 웨이트 G를 적용할 수 있다. 또한, 사이클 6에서, NN 엔진은 마지막(final) 16 비트 얼라인먼트 마스크(1506)을 생성할 수 있다.
사이클 7에서, NN 엔진은 사이클 7에 대한 외곽선에 나타난 4×4 영역에 대응하는 도 7의 다음 0 아닌 웨이트 H(the next non-zero weight H)를 처리할 수 있다. 얼라인먼트 마스크(1506)는 첫번째 행 내의 왼쪽부터 첫번째 비트 위치에 따라 해당 4×4 영역(the 4×4 region)이 0이 아님을 나타낼 수 있다. 따라서, NN 엔진은 사이클 7에 대한 외곽선 내에서 보여지는(shown) 4×4 영역에 0 아닌 웨이트 H를 적용할 수 있다.
사이클 8에서, 얼라인먼트 마스크(1506)의 첫번째 행(row) 내의 왼쪽으로부터 두번째 비트가 0 아닌 웨이트 I를 이용하여 처리될 4×4 영역이 0 영역(zero region)임을 나타내기 때문에, NN 엔진은 도 7의 0 아닌 웨이트 I에 대응되는 4×4 영역을 생략할 수 있다. 따라서, 사이클 8에서, NN 엔진은 사이클 8에 대한 외곽선에서 보여지는 영역에 대응되는 도 7의 다음 0 아닌 웨이트 J(the next non-zero weight J of FIG. 7)를 처리할 수 있다. 얼라인먼트 마스크(1506)는 두번째 행 내의 왼쪽에서 세번째 비트 위치에 따라 해당 4×4 영역(the 4×4 region)이 0이 아님을 나타낼 수 있다.
사이클 9의 시작에서(in starting cycle 9), 세번째 행 내의 첫번째 및 두번째 비트 위치가 0이기 때문에, NN 엔진은 도 7의 웨이트 K 및 L에 대응하는 다은 두개의 4×4 영역들을 생략할 수 있다. NN 엔진은 개시된 바와 같이 계속하여 처리를 계속할 수 있다.
도 15c을 참조하면, 도면은 4개의 입력 데이터 경로들(예: 도 5의 502-1, 502-2, 502-3, 502-4)에 의한 동시 처리(concurrent procesing)(1500-3)를 나타낸다. 입력 데이터 경로들은 웨이트 매트릭스들(1552-1568) 및 특성 맵들(1570-1586) 상에서 동작할 수 있다. 구체적으로, 각 열(column)은 여러 사이클들 상에서(over) 4개의 입력 데이터 경로들 중 하나에 대한 처리를 나타낼 수 있다. 예를 들면, 첫번째 입력 데이터 경로(the first input data path)의 동작들(the operations)은 첫번째 열에 의해 보여진다. 두번째 입력 데이터 경로(the second input data path)의 동작들(the operations)은 두번째 열에 의해 보여진다. 세번째 입력 데이터 경로(the third input data path)의 동작들(the operations)은 세번째 열에 의해 보여진다. 네번째 입력 데이터 경로(the fourth input data path)의 동작들(the operations)은 네번째 열에 의해 보여진다. 이와 같은 방식으로 첫번째 행은 네 입력 데이터 경로들의 첫번째 사이클을 나타내고, 두번째 행은 네 입력 데이터 경로들의 두번째 사이클을 나타낼 수 있다.
도 15c에서 도시된 바와 같이 각 입력 데이터 경로는 각 네번째 입력 특성 맵을 트래벌스(traverse) 하고, 대응되는 웨이트 매트릭스 내의 웨이트들을 적용할 수 있다. (예: 가능한 적은 사이클들 내에서(in as few cycles as possible)) 입력 데이터 경로가 각 0 아닌 웨이트를 처리한 경우, 입력 데이터 경로는 다음 특성 맵으로 이동한다. 예를 들면, 첫번째 입력 데이터 경로는 첫번째 웨이트 매트릭스(1552)로 첫번째 특성 맵(1570)을 컨벌브하고, 그리고 나서(then) 다섯번째 웨이트 매트릭스(1562)로 다섯번째 특성 맵(1580)을 컨벌브하기 위해 할당될 수 있다. 두번째 입력 데이터 경로는 두번째 웨이트 매트릭스(1554)로 두번째 특성 맵(1572)을 컨벌브하고, 그리고 나서(then) 여섯번째 웨이트 매트릭스(1564)로 여섯번째 특성 맵(1582)을 컨벌브하기 위해 할당될 수 있다. 세번째 입력 데이터 경로는 세번째 웨이트 매트릭스(1556)로 세번째 특성 맵(1574)을 컨벌브하고, 그리고 나서(then) 일곱번째 웨이트 매트릭스(1566)로 일곱번째 특성 맵(1584)을 컨벌브하기 위해 할당될 수 있다. 네번째 입력 데이터 경로는 네번째 웨이트 매트릭스(1558)로 네번째 특성 맵(1576)을 컨벌브하고, 그리고 나서(then) 여덟번째 웨이트 매트릭스(1568)로 여덟번째 특성 맵(1586)을 컨벌브하기 위해 할당될 수 있다.
입력 데이터 경로들 각각은 단일 입력 데이터 경로 처리(single input data path processing)와 관련되어 상술된 바와 같이 입력 특성 맵을 처리할 수 있다. (예: 도 15a, 15b와 관련되어 개시된 바와 같이) 사이클 1에서 5까지 진행되는 동안, 입력 데이터 경로들(the input data paths)은 각각의 웨이트 매트릭스(1552-1558)을 이용하여 입력 특성 맵(1570-1576)을 처리할 수 있다. 또한, 첫번째 세 입력 데이터 경로들은 첫번째 네 입력 특성 맵(1570-1574)을 여전히 처리하고 있고, 네번째 입력 데이터 경로는 네번째 입력 특성 맵(1576)의 처리를 완료할 수 있다. 따라서, 사이클 6에서, 첫번째 세 입력 데이터 경로들은 첫번째 네 입력 특성 맵(1570-1574)의 처리를 계속하고(continue), 네번째 입력 데이터 경로는 웨이트 매트리스(1568)로 여덟번째 입력 특성 맵(1586)의 처리를 시작할 수 있다. 사이클 6의 완성시, 첫번째 및 두번째 입력 데이터 경로들은 첫번째 입력 특성 맵(1570) 및 두번째 입력 특성 맵(1572) 각각의 처리를 완료할 수 있다.
따라서, 사이클 7에서, 첫번째 및 두번째 입력 데이터 경로는 다섯번째 입력 특성 맵(1580)(웨이트 매트릭스(1562)와 함께) 및 여섯번째 입력 특성 맵(1582)(웨이트 매트릭스(1564)와 함께) 각각의 처리를 시작할 수 있다. 세번째 입력 데이터 경로는 세번째 입력 특성 맵(1574)의 처리를 계속할 수 있다. 네번째 입력 데이터 경로는 여덟번째 입력 특성 맵(1586)이 처리를 계속할 수 있다.
사이클 8 및 9에서, 첫번째 및 두번째 입력 데이터 경로는 다섯번째 입력 특성 맵(1580) 및 여섯번째 입력 특성 맵(1582)의 처리를 계속할 수 있다. 세번째 입력 데이터 경로는 세번째 입력 특성 맵(1574)의 처리를 완료할 수 있고, 웨이트 매트릭스(1566)을 이용하여 일곱번째 입력 특성 맵(1584)의 처리를 시작할 수 있다. 네번째 입력 데이터 경로는 여덟번째 입력 특성 맵(1586)의 처리를 계속할 수 있다.
따라서, 일 실시 예에 따라, 입력 데이터 경로는 입력 특성 맵을 동시 및 독립적으로 처리할 수 있다. 입력 특성 맵의 처리를 완료함에 대응하여, 입력 데이터 경로는 다른 입력 데이터 경로들이 그들의 각각의 입력 특성 맵에 대한 처리를 완료하였는지 여부에 관계 없이 다음 입력 특성 맵으로 이동할 수 있다. 그러나 충분한 입력 맵들 상에서(over enough input maps), 입력 데이터 경로들의 처리 시간은 균형(balance)이 잡힐 수 있다. 도 15c은 각각의 데이터 경로가 다른 콘볼루션 커널을 이용하여 다른 입력 특성 맵 상에서 동작할 수 있음을 나타낸다. (각각은 커널 및 입력 데이터의 희소성(sparsity)에 따라 사이클의 변수(a variable number) 상에 적용될 수 있다.)
도 16은 뉴럴 네트워크의 하나 이상의 분류 레이어를 처리하거나 일반적 벡터 프로덕트 모드에서의 처리를 위한 일 실시 예에 따른 엔진(1600)을 나타낸다. 도시된 실시 예에서, 엔진(1600)은 입력 데이터 및 입력 0 마스크(예: 얼라인먼트 마스크)를 저장하는 메모리(1602) 및 웨이트 0 마스크(예: 웨이트 마스크와 같은 비트마스크)를 저장하는 메모리(1604)를 포함할 수 있다. 상술된 바와 같이, 입력(the input)은 입력 특성 맵에 대응될 수 있고, 입력 0 마스크(the input-0 mask)는 입력 데이터의 0 및 0 아닌 값들의 위치를 나타내는 데이터이고, 웨이트 0 마스크(the weight-0 mask)는 웨이트 매트릭스들의 0 및 0 아닌 값들의 위치를 나타내는 데이터일 수 있다. 웨이트 매트릭스 데이터는 웨이트 값 스트림(1608-1622)과 병행하여(in parallel) 스트림될 수 있다.
AND 마스크(1606)(예: 비트마스크)는 입력 데이터 및 웨이트 매트릭스 데이터가 모두 0 아닌 위치(location)를 나타내는, 입력 0 마스크 및 웨이트 0 마스크 상의 AND 논리 동작의 결과를 저장하기 위해 이용될 수 있다. 입력 데이터의 엔트리 및 웨이트 매트릭스의 대응되는 엔트리가 0 아니라는 결정에 대응하여, 처리를 위해 엔트리가 곱셈 누산 어레이(1624)에 제공될 수 있다. 특히, 곱셈 누산 어레이(1624)는 병렬 처리를 위해(for parallel processing) MAUs(1626-1640)과 같은 여러 곱셈 누산 유닛을 포함할 수 있다. MAUs(1626-1640)는 각각의 누산 레지스터(1642-1656)를 포함할 수 있다. 또한, 엔진(1600)의 구체적인 사항은 아래에 기술된다.
일 실시 예에 따라, 압축된 웨이트 데이터는 SRAM과 같은 메모리로부터 판독될 수 있고, 웨이트 디컴프레서(예: 도 5의 웨이트 처리 회로(508)(weight processing circuit))는 0 아닌 웨이트들의 위치들을 나타내는 AND 마스크(1606) 및 병렬인 16개의 웨이트 값 스트림들(1608-1622)을 야기하는(result in) 웨이트 위치 스트림(one weight position stream)을 압축 해제(decompress)할 수 있다. 각 웨이트 값 스트림은 하나의 출력 결과를 생성하기 위해 입력 데이터 값에 적용될 0 아닌 웨이트들을 포함할 수 있다. 0 값 엔트리들이 저장되지 않았기 때문에, 0 값 엔트리들(zero zalued entries)은 값들간의 갭(gap)으로 보여질 수 있다.
병렬적으로, 입력 0 마스크 및 압축된(packed) 0 아닌 입력 데이터 값들은 SRAM(예: 메모리(1602))으로부터 판독될 수 있다. 입력 값들은 SRAM으로부터 판독되거나, 계산되고 SRAM에 저장되기 때문에, 입력 0 마스크는 이전 레이어 처리의 끝에(at the end of processing the prior layer), 플라이 상에(on the fly) 생성될 수 있다. 입력 0 마스크 내의 각 비트는 그 위치에서의(at that position) 입력 값이 0인지 여부를 나타낼 수 있다.
상술된 바와 같이, AND 마스크(1606)는 결합된 마스크로 이용할(serve as) 수 있고, 입력 0 마스크 및 웨이트 0 마스크상에 논리 AND 동작을 적용함으로써 계산될 수 있다. AND 마스크(1606)의 결과(the resultin AND mask 1606)는 어떤 위치에서 웨이트들이 입력 데이터 값에 적용될지 나타낼 수 있다. 예를 들면, 0 아닌 입력들(non-0 inputs) 및 0 아닌 웨이트들(non-0 weights)에 대한(with) 위치들은 AND 마스크(1606)에서 1로 마크되고, 다른 위치들은 0으로 마크될 수 있다.
AND 마스크(1606)에서 다음 1의 위치에 따라, 이전 0 아닌 입력 값들과 이전 0 아닌 웨이트들은 폐기될(discard) 수 있다.(예: 처리에서 생략) 상술된 예에서, 0 아닌 입력 및 대응되는 0 아닌 웨이트가 있는 첫번째 위치(the first location)가 4 엔트리(볼드로 표시)일 수 있다. 0아닌 입력 데이터의 각 세트 및 그것의 대응되는 0 아닌 웨이트들은 반복적인 검색(iteratively searching) 보다는 하나의 처리 단계(one processing step)에 있을 수 있다. 그 결과, 0 아닌 값들의 새로운 세트는 MAU(1626-1640) 입력들로 각 사이클에 제공될 수 있고, 유휴(idle) 사이클이 감소될 수 있다.
AND 마스크(1606) 내의 “1” 엔트리에 대응되는 선택된 입력 데이터는 MAUs(1626-1640)의 각각의 첫번째 입력에 전파(broadcast)될 수 있다. 16 0 아닌 웨이트 값들(16 non-zero weight values)에 대응되는 각각은 MAUs(1626-1640)의 두번째 입력에 각각 전송될 수 있다.
일 실시 예에서, 상술된 처리(process)는 입력 노드들의 서브셋 상에서 병렬로 동작하는 4, 8 또는 그 이상의 동일한 유닛들에서 반복될 수 있다. 그와 같이, 0 아닌 입력 값들 및 대응되는 0 아닌 웨이트들을 다른 멀티 입력 MAU 유닛 입력들에 피딩(feeding)하는 각 사이클에, 유사한 방식으로 - 그러나 두배로(- but doubled), 입력 데이터 값들 및 그들의 대응되는 웨이트들의 다른 서브셋들을 트래벌스하는 4(또는 8) 입력 패치 경로들이 있을 수 있다. MAU 입력들 중 2개가 도시된다. 전체적으로 8(또는 16) 개가 있을 수 있다.
일 실시 예에서, 개시된 바와 같이, 4 또는 8개의 동일한 유닛들이 그들의 할당된 입력 및 웨이트들을 통해 다른 비율에서(at differing rates) 두 배가 될 수 있고 동작할 수 있다(can be doubled and operate). 이 것은 각 서브셋에서 모든 0들의 효율적인 생략을 가능하게 할 수 있다. 0 입력 데이터 값들 및 0 웨이트들은 입력들의 각 서브셋에 다른 위치들 및 로컬 밀도(local densities)에서 있을 수 있다.
일 실시 예에서, 입력 데이터는 마스크들 및 압축된 0 아닌 값 포맷(packed non-0 value format)으로 리포맷될(reformatted) 수 있다(그것은 이전 레이어 처리에서 생성됨). SRAM에서, 입력은 128 비트 0 마스크로 16 128비트 단어들의 값에 뒤이어, 초기 단어들 내에 함께 압축된 모두 0 아닌 값들과 함께 저장될 수 있다. 16 단어들의 나머지(remainder)는 0들 또는 비초기화(uninitialized)될 수 있다.
여기서 사용된 용어들은 특별한 실시 예들을 설명하기 위한 목적으로 사용되었고 제한하여 해석되지 않는다.
본 실시 예들에 따른 장치는 프로세서, 프로그램 데이터를 저장하고 실행하는 메모리, 디스크 드라이브와 같은 영구 저장부(permanent storage), 외부 장치와 통신하는 통신 포트, 터치 패널, 키(key), 버튼 등과 같은 사용자 인터페이스 장치 등을 포함할 수 있다. 소프트웨어 모듈 또는 알고리즘으로 구현되는 방법들은 상기 프로세서상에서 실행 가능한 컴퓨터가 읽을 수 있는 코드들 또는 프로그램 명령들로서 컴퓨터가 읽을 수 있는 기록 매체 상에 저장될 수 있다. 여기서 컴퓨터가 읽을 수 있는 기록 매체로 마그네틱 저장 매체(예컨대, ROM(read-only memory), RAM(random-access memory), 플로피 디스크, 하드 디스크 등) 및 광학적 판독 매체(예컨대, 시디롬(CD-ROM), 디브이디(DVD: Digital Versatile Disc)) 등이 있다. 컴퓨터가 읽을 수 있는 기록 매체는 네트워크로 연결된 컴퓨터 시스템들에 분산되어, 분산 방식으로 컴퓨터가 판독 가능한 코드가 저장되고 실행될 수 있다. 매체는 컴퓨터에 의해 판독가능하며, 메모리에 저장되고, 프로세서에서 실행될 수 있다.
본 실시 예는 기능적인 블록 구성들 및 다양한 처리 단계들로 나타내어질 수 있다. 이러한 기능 블록들은 특정 기능들을 실행하는 다양한 개수의 하드웨어 또는/및 소프트웨어 구성들로 구현될 수 있다. 예를 들어, 실시 예는 하나 이상의 마이크로프로세서들의 제어 또는 다른 제어 장치들에 의해서 다양한 기능들을 실행할 수 있는, 메모리, 프로세싱, 로직(logic), 룩 업 테이블(look-up table) 등과 같은 직접 회로 구성들을 채용할 수 있다. 구성 요소들이 소프트웨어 프로그래밍 또는 소프트웨어 요소들로 실행될 수 있는 것과 유사하게, 본 실시 예는 데이터 구조, 프로세스들, 루틴들 또는 다른 프로그래밍 구성들의 조합으로 구현되는 다양한 알고리즘을 포함하여, C, C++, 자바(Java), 어셈블러(assembler) 등과 같은 프로그래밍 또는 스크립팅 언어로 구현될 수 있다. 기능적인 측면들은 하나 이상의 프로세서들에서 실행되는 알고리즘으로 구현될 수 있다. 또한, 본 실시 예는 전자적인 환경 설정, 신호 처리, 및/또는 데이터 처리 등을 위하여 종래 기술을 채용할 수 있다. “매커니즘”, “요소”, “수단”, “구성”과 같은 용어는 넓게 사용될 수 있으며, 기계적이고 물리적인 구성들로서 한정되는 것은 아니다. 상기 용어는 프로세서 등과 연계하여 소프트웨어의 일련의 처리들(routines)의 의미를 포함할 수 있다.
본 실시 예에서 설명하는 특정 실행들은 예시들로서, 어떠한 방법으로도 기술적 범위를 한정하는 것은 아니다. 명세서의 간결함을 위하여, 종래 전자적인 구성들, 제어 시스템들, 소프트웨어, 상기 시스템들의 다른 기능적인 측면들의 기재는 생략될 수 있다. 또한, 도면에 도시된 구성 요소들 간의 선들의 연결 또는 연결 부재들은 기능적인 연결 및/또는 물리적 또는 회로적 연결들을 예시적으로 나타낸 것으로서, 실제 장치에서는 대체 가능하거나 추가의 다양한 기능적인 연결, 물리적인 연결, 또는 회로 연결들로서 나타내어 질 수 있다.
본 명세서(특히 특허청구범위에서)에서 “상기”의 용어 및 이와 유사한 지시 용어의 사용은 단수 및 복수 모두에 해당하는 것일 수 있다. 또한, 범위(range)를 기재한 경우 상기 범위에 속하는 개별적인 값을 포함하는 것으로서(이에 반하는 기재가 없다면), 상세한 설명에 상기 범위를 구성하는 각 개별적인 값을 기재한 것과 같다. 마지막으로, 방법을 구성하는 단계들에 대하여 명백하게 순서를 기재하거나 반하는 기재가 없다면, 상기 단계들은 적당한 순서로 행해질 수 있다. 반드시 상기 단계들의 기재 순서에 한정되는 것은 아니다. 모든 예들 또는 예시적인 용어(예들 들어, 등등)의 사용은 단순히 기술적 사상을 상세히 설명하기 위한 것으로서 특허청구범위에 의해 한정되지 않는 이상 상기 예들 또는 예시적인 용어로 인해 범위가 한정되는 것은 아니다. 또한, 당업자는 다양한 수정, 조합 및 변경이 부가된 특허청구범위 또는 그 균등물의 범주 내에서 설계 조건 및 팩터에 따라 구성될 수 있음을 알 수 있다.
이제까지 본 발명에 대하여 그 바람직한 실시예들을 중심으로 살펴보았다. 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자는 본 발명이 본 발명의 본질적인 특성에서 벗어나지 않는 범위에서 변형된 형태로 구현될 수 있음을 이해할 수 있을 것이다. 그러므로 개시된 실시예들은 한정적인 관점이 아니라 설명적인 관점에서 고려되어야 한다. 본 발명의 범위는 전술한 설명이 아니라 특허청구범위에 나타나 있으며, 그와 동등한 범위 내에 있는 모든 차이점은 본 발명에 포함된 것으로 해석되어야 할 것이다.

Claims (20)

  1. 뉴럴 네트워크(neural network)를 실시(implement)하는 방법에 있어서
    입력 특성 맵의 제1 영역(a first region of input feature map) 및 콘볼루션 커널의 제 1 영역(a first region of convolution kernel)의 조합(combination)의 처리 여부를 결정하는 단계; 및
    상기 조합의 처리에 대한 결정에 대응하여, 출력 특성 맵(output feature map)의 적어도 한 부분(portion)을 생성하기 위해 상기 콘볼루션 커널의 제 1 영역을 이용하여, 상기 입력 특성 맵의 제 1 영역에 콘볼루션 동작(convolution operation)을 수행하는 단계를 포함하는 방법.
  2. 제 1 항에 있어서,
    상기 결정하는 단계는
    상기 입력 특성 맵의 제 1 영역 내의 0이 아닌 값(non-zero value) 및 상기 콘볼루션 커널의 제 1 영역 내의 0이 아닌 값(non-zero value)을 식별(identifying)하는 단계를 포함하는 방법.
  3. 제 1 항에 있어서,
    상기 결정하는 단계는
    상기 입력 특성 맵의 제 1 영역 및 상기 콘볼루션 커널의 제 1 영역 중 적어도 하나의 0인 부분 및 0이 아닌 부분(zero and non-zero portions)을 나타내는 마스크(mask)를 생성하는 단계를 포함하는 방법.
  4. 제 3 항에 있어서,
    상기 마스크는 메모리로부터 상기 입력 특성 맵의 제 1 영역 또는 상기 콘볼루션 커널의 제 1 영역에 대한 판독(reading)에 대응하여 생성되는 방법.
  5. 제 3 항에 있어서,
    제1 마스크는 상기 입력 특성 맵의 제 1 영역의 0인 부분 및 0이 아닌 부분을 나타내고, 제 2 마스크는 상기 콘볼루션 커널의 제 1 영역의 0인 부분 및 0이 아닌 부분을 나타내고,
    상기 방법은 상기 제1 마스크와 상기 제2 마스크를 비교하는 단계를 더 포함하는 방법.
  6. 제 1 항에 있어서,
    상기 입력 특성 맵의 제 2 영역이 모두 0 값을 포함한다는 결정 또는 상기 콘볼루션 커널의 제 2 영역이 모두 0 값을 포함한다는 결정에 대응하여, 상기 입력 특성 맵의 제 2 영역 및 상기 콘볼루션 커널의 제 2 영역의 추가 조합(further combination)에 대한 콘볼루션 동작(convolution operation)을 스킵하는 단계를 더 포함하는 방법.
  7. 제 1 항에 있어서,
    상기 결정하는 단계 및 상기 콘볼루션 동작을 수행하는 단계는
    독립적이고 동시에 동작되는 복수의 데이터 패스 각각에 의해 실시되고,
    상기 각각의 데이터 패스는 다른 콘볼루션 커널을 이용하여 다른 입력 특성 맵을 동작하고, 콘볼루션 커널 데이터 및 입력 데이터의 희소성(sparsity)에 따라 사이클들의 가변수(variable number)에 적용되는 방법.
  8. 뉴럴 네트워크(neural network)를 실시(implement)하는 장치에 있어서
    제어부에 의해 제어되고, 메모리로부터 입력 특성 맵의 영역을 검색(retrieve)하는 페치 회로(fetch circuit);
    입력 특성 맵의 제1 영역(a first region of input feature map) 및 콘볼루션 커널의 제 1 영역(a first region of convolution kernel)의 조합(combination)의 처리 여부를 결정하는 마스크 생성 및 웨이트 적용 제어 회로(mask generation and weight application control circuit); 및
    상기 마스크 생성 및 웨이트 적용 제어 회로에 의한 결정에 대응하여, 상기 조합을 처리(process)하기 위해서 상기 조합에 콘볼루션 동작(convolution operation)을 수행하는 콘볼루션 회로를 포함하는 장치.
  9. 제 8 항에 있어서,
    상기 콘볼루션 회로로부터의 출력을 합산(sum)하는 누산 회로(accumulation circuit);
    상기 누산 회로의 출력을 합산하는 활성화 기능(activation function)을 적용(apply)하는 활성화 회로(activation circuit);
    상기 활성화 회로에 연결되는 풀링 및 서브-샘플링 회로(pooling and sub-sampling circuit)를 포함하는 장치
  10. 제 8 항에 있어서,
    상기 마스크 생성 및 웨이트 적용 제어 회로는 상기 입력 특성 맵의 제 1 영역이 0이 아닌 값을 포함하는지 및 상기 콘볼루션 커널의 제 1 영역이 0이 아닌 값을 포함하는지에 대한 결정에 대응하여, 상기 조합이 처리되는지를 결정하는 장치.
  11. 제 10 항에 있어서,
    상기 마스크 생성 및 웨이트 적용 제어 회로는
    상기 입력 특성 맵의 제1 영역 및 상기 콘볼루션 커널의 제 1 영역 중 적어도 하나의 0인 부분 및 0이 아닌 부분(zero and non-zero portions)을 나타내는 마스크를 생성하는 장치.
  12. 제 11 항에 있어서,
    상기 마스크는 메모리로부터 상기 입력 특성 맵의 제 1 영역 또는 상기 콘볼루션 커널의 제 1 영역에 대한 판독(reading)에 대응하여 생성되는 장치.
  13. 제 11 항에 있어서,
    제1 마스크는 상기 입력 특성 맵의 제 1 영역의 0인 부분 및 0이 아닌 부분을 나타내고, 제 2 마스크는 상기 콘볼루션 커널의 제 1 영역의 0인 부분 및 0이 아닌 부분을 나타내고,
    상기 마스크 생성 및 웨이트 적용 제어 회로는 상기 제1 마스크와 상기 제2 마스크를 비교하는 장치.
  14. 제 8 항에 있어서,
    상기 마스크 생성 및 웨이트 적용 제어 회로는
    상기 입력 특성 맵의 제 2 영역이 모두 0 값을 포함한다는 결정 또는 상기 콘볼루션 커널의 제 2 영역이 모두 0 값을 포함한다는 결정에 대응하여, 상기 입력 특성 맵의 제 2 영역 및 상기 콘볼루션 커널의 제 2 영역의 추가 조합(further combination)에 대한 콘볼루션 동작(convolution operation)의 스킵을 결정하는 장치.
  15. 뉴럴 네트워크(neural network)를 실시(implement)하는 장치에 있어서
    입력 데이터 영역들(regions of input data)에 적용될 웨이트들(weights)이 0인지 여부를 결정하는 웨이트 처리 회로(weight processing circuit);
    상기 입력 데이터의 영역들이 0인지 여부를 결정하는 데이터 스테이지 회로(data staging circuit); 및
    0이 아닌 상기 입력 데이터의 영역들에 0이 아닌 웨이트를 적용하는 곱셈 누산 회로(multiply-accumulate circuit)를 포함하는 장치
  16. 제 15 항에 있어서,
    선택된 웨이트가 0인 결정에 대응하여, 상기 웨이트 처리 회로는
    상기 선택된 웨이트를 상기 곱셈 누산 회로로 출력하지 않고,
    상기 데이터 스테이지 회로가 상기 선택된 웨이트에 대응되는 상기 입력 데이터의 영역들을 상기 곱셈 누산 회로로 출력하지 않도록 제어하는 장치.
  17. 제 15 항에 있어서,
    0 값만을 포함하는 선택된 영역에 대한 결정에 대응하여,
    상기 데이터 스테이지 회로는
    상기 선택된 영역을 상기 곱셈 출력 회로에 출력하지 않고,
    상기 웨이트 처리 회로를 상기 선택된 영역에 대응되는 상기 웨이트를 상기 곱셈 출력 회로에 출력하지 않도록 제어하는 장치.
  18. 제 15 항에 있어서,
    상기 웨이트 처리 회로는
    메모리로부터 검색된(retrieved) 복수개의 웨이트들을 압축 해제(decompress)하고, 0인 복수개의 웨이트들의 웨이트들을 나타내는 마스크를 생성하는 웨이트 디컴프레서(weight decompressor를 포함하는 장치.
  19. 제 15 항에 있어서,
    상기 데이터 스테이지 회로는
    0으로만 구성된 상기 입력 데이터의 영역들을 나타내는 컴포넌트 마스크(component mask)를 생성하는 컴포넌트 마스크 생성부(component mask generator);
    각 얼라인먼트의 인접 영역(contiguous region)의 모든 값이 0인지 여부를 나타내는 얼라인먼트 마스크를 생성하는 얼라인먼트 마스크 생성부(alignment mask generator); 및
    각 얼라인먼트의 영역내 모든 값이 0임을 나타내는 0이 아닌 웨이트에 대응되는 영역에 대해서, 상기 얼라인먼트 마스크 생성부로부터 얼라인먼트 마스크의 수신에 대응하여, 상기 0이 아닌 웨이트를 상기 곱셈 누산 회로로 출력하지 않도록 상기 웨이트 처리 회로를 제어하는 웨이트 적용 제어부(weight application controller)를 포함하는 장치.
  20. 제 15 항에 있어서,
    상기 곱셈 누산 회로는
    병렬적으로 동작하고 복수개의 곱셈 누산 유닛(multiply-accumulate unit)을 포함하는 곱셈 누산 어레이(multiply-accumulate array)를 포함하고,
    각 곱셈 누산 유닛(multiply-accumulate unit)은 콘볼루션 또는 벡터 프로덕트(vector product)를 실시하기 위해서 웨이트 값 스트림의 0이 아닌 웨이트 값만을 0이 아닌 입력 데이터에 적용하는 장치.
KR1020160069379A 2015-06-03 2016-06-03 뉴럴 네트워크 실시 방법 및 장치 KR20160142791A (ko)

Applications Claiming Priority (6)

Application Number Priority Date Filing Date Title
US201562170282P 2015-06-03 2015-06-03
US62/170,282 2015-06-03
US201562191266P 2015-07-10 2015-07-10
US62/191,266 2015-07-10
US15/099,109 2016-04-14
US15/099,109 US20160358069A1 (en) 2015-06-03 2016-04-14 Neural network suppression

Publications (1)

Publication Number Publication Date
KR20160142791A true KR20160142791A (ko) 2016-12-13

Family

ID=57451259

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020160069379A KR20160142791A (ko) 2015-06-03 2016-06-03 뉴럴 네트워크 실시 방법 및 장치

Country Status (2)

Country Link
US (1) US20160358069A1 (ko)
KR (1) KR20160142791A (ko)

Cited By (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107145939A (zh) * 2017-06-21 2017-09-08 北京图森未来科技有限公司 一种神经网络优化方法及装置
KR20180101978A (ko) * 2017-03-06 2018-09-14 삼성전자주식회사 뉴럴 네트워크 프로세서, 뉴럴 네트워크 프로세서의 동작 방법, 및 뉴럴 네트워크 장치
WO2018221863A1 (en) * 2017-05-31 2018-12-06 Samsung Electronics Co., Ltd. Method and device for processing multi-channel feature map images
WO2018226014A1 (ko) * 2017-06-07 2018-12-13 삼성전자주식회사 전자 장치 및 그 제어 방법
KR20180133770A (ko) * 2017-06-07 2018-12-17 삼성전자주식회사 전자 장치 및 그 제어 방법
WO2019066183A1 (ko) * 2017-09-26 2019-04-04 삼성전자주식회사 전자 장치 및 그 제어 방법
KR20190065144A (ko) * 2017-12-01 2019-06-11 한국전자통신연구원 뉴럴 네트워크에서의 프로세싱 엘리먼트 및 그 동작 방법
KR20190128795A (ko) * 2018-05-09 2019-11-19 에스케이하이닉스 주식회사 웨이트 매트릭스를 포맷하는 방법, 포맷된 데이터를 사용하는 가속기 및 이를 포함하는 시스템
KR20190129240A (ko) 2018-05-10 2019-11-20 서울대학교산학협력단 행 단위 연산 뉴럴 프로세서 및 이를 이용한 데이터 처리 방법
KR20200005361A (ko) * 2018-07-06 2020-01-15 포항공과대학교 산학협력단 뉴로모픽 시스템 및 그것의 동작 방법
WO2020032559A3 (ko) * 2018-08-07 2020-03-26 주식회사 딥바이오 뉴럴 네트워크를 이용한 질병의 진단 시스템 및 방법
KR20200088955A (ko) * 2019-01-15 2020-07-24 한국전자통신연구원 뉴로모픽 연산 장치 및 그것의 동작 방법
US10740865B2 (en) 2017-06-15 2020-08-11 Samsung Electronics Co., Ltd. Image processing apparatus and method using multi-channel feature map
US11164040B2 (en) 2018-12-19 2021-11-02 Korea University Research And Business Foundation Operation device of convolutional neural network and operation method thereof
US11409675B2 (en) 2020-12-22 2022-08-09 Samsung Electronics Co., Ltd. Data transmission method for convolution operation, fetcher, and convolution operation apparatus
US11483585B2 (en) 2019-09-11 2022-10-25 Samsung Electronics Co., Ltd. Electronic apparatus and controlling method thereof
US11501166B2 (en) 2019-10-16 2022-11-15 Samsung Electronics Co., Ltd. Method and apparatus with neural network operation
US11550543B2 (en) 2018-12-03 2023-01-10 Samsung Electronics Co., Ltd. Semiconductor memory device employing processing in memory (PIM) and method of operating the semiconductor memory device
US11568323B2 (en) 2017-09-26 2023-01-31 Samsung Electronics Co., Ltd. Electronic device and control method thereof
US12026611B2 (en) 2018-10-17 2024-07-02 Samsung Electronics Co., Ltd. Method and apparatus for quantizing parameters of neural network
US12056595B2 (en) 2017-12-05 2024-08-06 Samsung Electronics Co., Ltd. Method and apparatus for processing convolution operation in neural network using sub-multipliers

Families Citing this family (98)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10417525B2 (en) 2014-09-22 2019-09-17 Samsung Electronics Co., Ltd. Object recognition with reduced neural network weight precision
WO2017083742A1 (en) * 2015-11-12 2017-05-18 Google Inc. Neural network programmer
US10635968B2 (en) * 2016-03-24 2020-04-28 Intel Corporation Technologies for memory management of neural networks with sparse connectivity
US10387740B2 (en) * 2016-10-10 2019-08-20 Gyrfalcon Technology Inc. Object detection and recognition apparatus based on CNN based integrated circuits
US10402628B2 (en) 2016-10-10 2019-09-03 Gyrfalcon Technology Inc. Image classification systems based on CNN based IC and light-weight classifier
US10366328B2 (en) 2017-09-19 2019-07-30 Gyrfalcon Technology Inc. Approximating fully-connected layers with multiple arrays of 3x3 convolutional filter kernels in a CNN based integrated circuit
US9940534B1 (en) * 2016-10-10 2018-04-10 Gyrfalcon Technology, Inc. Digital integrated circuit for extracting features out of an input image based on cellular neural networks
US10360470B2 (en) 2016-10-10 2019-07-23 Gyrfalcon Technology Inc. Implementation of MobileNet in a CNN based digital integrated circuit
US10043095B2 (en) * 2016-10-10 2018-08-07 Gyrfalcon Technology, Inc. Data structure for CNN based digital integrated circuit for extracting features out of an input image
US10339445B2 (en) 2016-10-10 2019-07-02 Gyrfalcon Technology Inc. Implementation of ResNet in a CNN based digital integrated circuit
US10366302B2 (en) 2016-10-10 2019-07-30 Gyrfalcon Technology Inc. Hierarchical category classification scheme using multiple sets of fully-connected networks with a CNN based integrated circuit as feature extractor
US9959498B1 (en) * 2016-10-27 2018-05-01 Google Llc Neural network instruction set architecture
US11003985B2 (en) 2016-11-07 2021-05-11 Electronics And Telecommunications Research Institute Convolutional neural network system and operation method thereof
KR102631381B1 (ko) 2016-11-07 2024-01-31 삼성전자주식회사 컨볼루션 신경망 처리 방법 및 장치
EP3324343A1 (en) 2016-11-21 2018-05-23 Centre National de la Recherche Scientifique Unsupervised detection of repeating patterns in a series of events
US10032110B2 (en) * 2016-12-13 2018-07-24 Google Llc Performing average pooling in hardware
US10037490B2 (en) * 2016-12-13 2018-07-31 Google Llc Performing average pooling in hardware
KR20180073314A (ko) * 2016-12-22 2018-07-02 삼성전자주식회사 컨볼루션 신경망 시스템 및 그것의 동작 방법
US10824934B2 (en) * 2017-01-12 2020-11-03 Texas Instruments Incorporated Methods and apparatus for matrix processing in a convolutional neural network
US11113800B2 (en) 2017-01-18 2021-09-07 Nvidia Corporation Filtering image data using a neural network
US10096134B2 (en) * 2017-02-01 2018-10-09 Nvidia Corporation Data compaction and memory bandwidth reduction for sparse neural networks
KR102499396B1 (ko) * 2017-03-03 2023-02-13 삼성전자 주식회사 뉴럴 네트워크 장치 및 뉴럴 네트워크 장치의 동작 방법
WO2018171899A1 (en) * 2017-03-24 2018-09-27 Huawei Technologies Co., Ltd. Neural network data processing apparatus and method
KR102415508B1 (ko) * 2017-03-28 2022-07-01 삼성전자주식회사 컨볼루션 신경망 처리 방법 및 장치
US11037330B2 (en) * 2017-04-08 2021-06-15 Intel Corporation Low rank matrix compression
US10795836B2 (en) * 2017-04-17 2020-10-06 Microsoft Technology Licensing, Llc Data processing performance enhancement for neural networks using a virtualized data iterator
KR102670479B1 (ko) * 2017-05-19 2024-05-31 모비디어스 리미티드 콘볼루션 효율을 개선하기 위한 방법들, 시스템들, 및 장치
WO2018214913A1 (zh) 2017-05-23 2018-11-29 上海寒武纪信息科技有限公司 处理方法及加速装置
GB2568776B (en) * 2017-08-11 2020-10-28 Google Llc Neural network accelerator with parameters resident on chip
US10725740B2 (en) * 2017-08-31 2020-07-28 Qualcomm Incorporated Providing efficient multiplication of sparse matrices in matrix-processor-based devices
US11281746B2 (en) * 2017-09-14 2022-03-22 Mitsubishi Electric Corporation Arithmetic operation circuit, arithmetic operation method, and program
JP6957365B2 (ja) * 2017-09-22 2021-11-02 株式会社東芝 演算装置
EP3460724A1 (en) * 2017-09-22 2019-03-27 Kabushiki Kaisha Toshiba Operation device and operation system
CN109684901B (zh) * 2017-10-19 2023-06-06 富士通株式会社 图像处理装置和图像处理方法
CN107766292B (zh) * 2017-10-30 2020-12-29 中国科学院计算技术研究所 一种神经网络处理方法及处理系统
GB2568085B (en) * 2017-11-03 2020-01-01 Imagination Tech Ltd Hardware unit for performing matrix multiplication with clock gating
CN110020716B (zh) 2017-11-06 2024-10-15 畅想科技有限公司 神经网络硬件
KR20190051697A (ko) 2017-11-07 2019-05-15 삼성전자주식회사 뉴럴 네트워크의 디컨벌루션 연산을 수행하는 장치 및 방법
KR102561261B1 (ko) * 2017-11-14 2023-07-28 삼성전자주식회사 커널을 이용한 컨볼루션 연산 처리 방법 및 장치
CN108304913A (zh) * 2017-12-30 2018-07-20 北京理工大学 一种利用脉冲神经元阵列来实现卷积功能的方法
CN108416425B (zh) * 2018-02-02 2020-09-29 浙江大华技术股份有限公司 一种卷积运算方法及装置
US20210004668A1 (en) * 2018-02-16 2021-01-07 The Governing Council Of The University Of Toronto Neural network accelerator
WO2019165316A1 (en) * 2018-02-23 2019-08-29 The Regents Of The University Of California Architecture to compute sparse neural network
KR102697300B1 (ko) * 2018-03-07 2024-08-23 삼성전자주식회사 전자 장치 및 머신 러닝 수행 방법
DE102018203709A1 (de) * 2018-03-12 2019-09-12 Robert Bosch Gmbh Verfahren und Vorrichtung zum speichereffizienten Betreiben eines neuronalen Netzes
CN110321996B (zh) * 2018-03-28 2021-06-29 华为技术有限公司 一种基于卷积神经网络的图像处理的方法和装置
US10943027B2 (en) * 2018-03-28 2021-03-09 Sap Se Determination and visualization of effective mask expressions
US20190303757A1 (en) * 2018-03-29 2019-10-03 Mediatek Inc. Weight skipping deep learning accelerator
CN108629409B (zh) * 2018-04-28 2020-04-10 中国科学院计算技术研究所 一种基于主成分分析减少io开销的神经网络处理系统
JP7240657B2 (ja) * 2018-05-15 2023-03-16 Tokyo Artisan Intelligence株式会社 ニューラルネットワーク回路装置、ニューラルネットワーク、ニューラルネットワーク処理方法およびニューラルネットワークの実行プログラム
CN108648161B (zh) * 2018-05-16 2020-09-01 江苏科技大学 非对称核卷积神经网络的双目视觉障碍物检测系统及方法
US10817260B1 (en) * 2018-06-13 2020-10-27 Amazon Technologies, Inc. Reducing dynamic power consumption in arrays
US12099912B2 (en) 2018-06-22 2024-09-24 Samsung Electronics Co., Ltd. Neural processor
US10417342B1 (en) 2018-07-03 2019-09-17 Gyrfalcon Technology Inc. Deep learning device for local processing classical chinese poetry and verse
US11262982B2 (en) * 2018-07-23 2022-03-01 SK Hynix Inc. Computation circuit including a plurality of processing elements coupled to a common accumulator, a computation device and a system including the same
CN109344840B (zh) * 2018-08-07 2022-04-01 深圳市商汤科技有限公司 图像处理方法和装置、电子设备、存储介质、程序产品
US10311149B1 (en) 2018-08-08 2019-06-04 Gyrfalcon Technology Inc. Natural language translation device
US11836971B2 (en) * 2018-08-23 2023-12-05 Samsung Electronics Co., Ltd. Method and device with convolution neural network processing
US11868875B1 (en) * 2018-09-10 2024-01-09 Amazon Technologies, Inc. Data selection circuit
US10331983B1 (en) * 2018-09-11 2019-06-25 Gyrfalcon Technology Inc. Artificial intelligence inference computing device
US11467973B1 (en) * 2018-09-28 2022-10-11 Amazon Technologies, Inc. Fine-grained access memory controller
US10387772B1 (en) 2018-10-22 2019-08-20 Gyrfalcon Technology Inc. Ensemble learning based image classification systems
US11436482B2 (en) 2018-10-29 2022-09-06 Western Digital Technologies, Inc. Storing neural net works and weights for neural networks
US10768895B2 (en) 2018-11-08 2020-09-08 Movidius Limited Dot product calculators and methods of operating the same
KR20200057814A (ko) * 2018-11-13 2020-05-27 삼성전자주식회사 뉴럴 네트워크를 이용한 데이터 처리 방법 및 이를 지원하는 전자 장치
WO2020121202A1 (en) * 2018-12-11 2020-06-18 Mipsology SAS Realigning streams of neuron outputs in artificial neural network computations
CN109784372B (zh) * 2018-12-17 2020-11-13 北京理工大学 一种基于卷积神经网络的目标分类方法
KR20200081044A (ko) * 2018-12-27 2020-07-07 삼성전자주식회사 뉴럴 네트워크의 컨볼루션 연산을 처리하는 방법 및 장치
DE102020100209A1 (de) 2019-01-21 2020-07-23 Samsung Electronics Co., Ltd. Neuronale Netzwerkvorrichtung, neuronales Netzwerksystem und Verfahren zur Verarbeitung eines neuronalen Netzwerkmodells durch Verwenden eines neuronalen Netzwerksystems
US10346693B1 (en) * 2019-01-22 2019-07-09 StradVision, Inc. Method and device for attention-based lane detection without post-processing by using lane mask and testing method and testing device using the same
CN109816026B (zh) * 2019-01-29 2021-09-10 清华大学 卷积神经网络和脉冲神经网络的融合装置及方法
KR20200094534A (ko) * 2019-01-30 2020-08-07 삼성전자주식회사 뉴럴 네트워크 장치 및 뉴럴 네트워크 장치에서 멀티-비트 연산을 처리하는 방법
US12014505B2 (en) 2019-01-31 2024-06-18 Samsung Electronics Co., Ltd. Method and apparatus with convolution neural network processing using shared operand
CN109862208B (zh) * 2019-03-19 2021-07-02 深圳市商汤科技有限公司 视频处理方法、装置、计算机存储介质以及终端设备
KR20200111939A (ko) * 2019-03-20 2020-10-05 에스케이하이닉스 주식회사 신경망 가속 장치 및 그것의 동작 방법
GB2582352B (en) * 2019-03-20 2021-12-15 Imagination Tech Ltd Methods and systems for implementing a convolution transpose layer of a neural network
CN113396425B (zh) * 2019-03-25 2023-08-22 杭州飞步科技有限公司 加速方法、装置和片上系统
EP3953867A1 (en) * 2019-04-08 2022-02-16 Mipsology SAS Accelerating neuron computations in artificial neural networks by selecting input data
US11645510B2 (en) 2019-04-08 2023-05-09 Mipsology SAS Accelerating neuron computations in artificial neural networks by selecting input data
US11671111B2 (en) 2019-04-17 2023-06-06 Samsung Electronics Co., Ltd. Hardware channel-parallel data compression/decompression
US11211944B2 (en) 2019-04-17 2021-12-28 Samsung Electronics Co., Ltd. Mixed-precision compression with random access
KR20200129957A (ko) 2019-05-10 2020-11-18 삼성전자주식회사 피처맵 데이터에 대한 압축을 수행하는 뉴럴 네트워크 프로세서 및 이를 포함하는 컴퓨팅 시스템
CN112149047A (zh) * 2019-06-27 2020-12-29 深圳市中兴微电子技术有限公司 数据的处理方法及装置、存储介质和电子装置
US11467806B2 (en) 2019-11-27 2022-10-11 Amazon Technologies, Inc. Systolic array including fused multiply accumulate with efficient prenormalization and extended dynamic range
US11735177B2 (en) * 2019-12-12 2023-08-22 Silicon Laboratories Inc. Keyword spotting using machine learning
FR3105660B1 (fr) * 2019-12-18 2022-10-14 Commissariat Energie Atomique Procédé et dispositif de codage additif de signaux pour implémenter des opérations MAC numériques à précision dynamique
FR3105659B1 (fr) * 2019-12-18 2022-06-24 Commissariat Energie Atomique Procédé et dispositif de codage binaire de signaux pour implémenter des opérations MAC numériques à précision dynamique
CN113011577B (zh) * 2019-12-20 2024-01-05 阿里巴巴集团控股有限公司 处理单元、处理器核、神经网络训练机及方法
US12072806B2 (en) 2020-01-22 2024-08-27 Alibaba Group Holding Limited Compression and decompression module in a cache controller for reducing off-chip data traffic
KR20210106131A (ko) * 2020-02-20 2021-08-30 삼성전자주식회사 전자 장치 및 그의 제어 방법
US11620503B2 (en) * 2020-03-18 2023-04-04 Arm Limited Neural network processing
US10970619B1 (en) * 2020-08-21 2021-04-06 Moffett Technologies Co., Limited Method and system for hierarchical weight-sparse convolution processing
CN111798520B (zh) * 2020-09-08 2020-12-22 平安国际智慧城市科技股份有限公司 基于卷积神经网络的图像处理方法、装置、设备及介质
CN112200301B (zh) * 2020-09-18 2024-04-09 星宸科技股份有限公司 卷积计算装置及方法
TWI806199B (zh) * 2020-10-20 2023-06-21 大陸商華為技術有限公司 特徵圖資訊的指示方法,設備以及電腦程式
US20220310068A1 (en) * 2021-03-25 2022-09-29 Kwai Inc. Methods and devices for structured pruning for automatic speech recognition
US11880682B2 (en) 2021-06-30 2024-01-23 Amazon Technologies, Inc. Systolic array with efficient input reduction and extended array performance
US11669489B2 (en) * 2021-09-30 2023-06-06 International Business Machines Corporation Sparse systolic array design

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CA2134255C (en) * 1993-12-09 1999-07-13 Hans Peter Graf Dropped-form document image compression
US7920741B2 (en) * 2007-05-31 2011-04-05 Adobe Systems Incorporated System and method for image processing using integral histogram convolution
US10282465B2 (en) * 2014-02-25 2019-05-07 Intel Corporation Systems, apparatuses, and methods for deep learning of feature detectors with sparse coding

Cited By (27)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20180101978A (ko) * 2017-03-06 2018-09-14 삼성전자주식회사 뉴럴 네트워크 프로세서, 뉴럴 네트워크 프로세서의 동작 방법, 및 뉴럴 네트워크 장치
WO2018221863A1 (en) * 2017-05-31 2018-12-06 Samsung Electronics Co., Ltd. Method and device for processing multi-channel feature map images
KR20180131073A (ko) * 2017-05-31 2018-12-10 삼성전자주식회사 다채널 특징맵 영상을 처리하는 방법 및 장치
US10733767B2 (en) 2017-05-31 2020-08-04 Samsung Electronics Co., Ltd. Method and device for processing multi-channel feature map images
US11450086B2 (en) 2017-06-07 2022-09-20 Samsung Electronics Co., Ltd. Electronic device and method for controlling same
WO2018226014A1 (ko) * 2017-06-07 2018-12-13 삼성전자주식회사 전자 장치 및 그 제어 방법
KR20180133770A (ko) * 2017-06-07 2018-12-17 삼성전자주식회사 전자 장치 및 그 제어 방법
US10740865B2 (en) 2017-06-15 2020-08-11 Samsung Electronics Co., Ltd. Image processing apparatus and method using multi-channel feature map
CN107145939A (zh) * 2017-06-21 2017-09-08 北京图森未来科技有限公司 一种神经网络优化方法及装置
WO2019066183A1 (ko) * 2017-09-26 2019-04-04 삼성전자주식회사 전자 장치 및 그 제어 방법
US11568323B2 (en) 2017-09-26 2023-01-31 Samsung Electronics Co., Ltd. Electronic device and control method thereof
KR20190065144A (ko) * 2017-12-01 2019-06-11 한국전자통신연구원 뉴럴 네트워크에서의 프로세싱 엘리먼트 및 그 동작 방법
US12056595B2 (en) 2017-12-05 2024-08-06 Samsung Electronics Co., Ltd. Method and apparatus for processing convolution operation in neural network using sub-multipliers
KR20190128795A (ko) * 2018-05-09 2019-11-19 에스케이하이닉스 주식회사 웨이트 매트릭스를 포맷하는 방법, 포맷된 데이터를 사용하는 가속기 및 이를 포함하는 시스템
KR20190129240A (ko) 2018-05-10 2019-11-20 서울대학교산학협력단 행 단위 연산 뉴럴 프로세서 및 이를 이용한 데이터 처리 방법
KR20200005361A (ko) * 2018-07-06 2020-01-15 포항공과대학교 산학협력단 뉴로모픽 시스템 및 그것의 동작 방법
WO2020032559A3 (ko) * 2018-08-07 2020-03-26 주식회사 딥바이오 뉴럴 네트워크를 이용한 질병의 진단 시스템 및 방법
US12026611B2 (en) 2018-10-17 2024-07-02 Samsung Electronics Co., Ltd. Method and apparatus for quantizing parameters of neural network
US11822898B2 (en) 2018-12-03 2023-11-21 Samsung Electronics Co., Ltd. Semiconductor memory device employing processing in memory (PIM) and method of operating the semiconductor memory device
US11550543B2 (en) 2018-12-03 2023-01-10 Samsung Electronics Co., Ltd. Semiconductor memory device employing processing in memory (PIM) and method of operating the semiconductor memory device
US11164040B2 (en) 2018-12-19 2021-11-02 Korea University Research And Business Foundation Operation device of convolutional neural network and operation method thereof
KR20200088955A (ko) * 2019-01-15 2020-07-24 한국전자통신연구원 뉴로모픽 연산 장치 및 그것의 동작 방법
US11483585B2 (en) 2019-09-11 2022-10-25 Samsung Electronics Co., Ltd. Electronic apparatus and controlling method thereof
US11763153B2 (en) 2019-10-16 2023-09-19 Samsung Electronics Co., Ltd. Method and apparatus with neural network operation
US11501166B2 (en) 2019-10-16 2022-11-15 Samsung Electronics Co., Ltd. Method and apparatus with neural network operation
US11797461B2 (en) 2020-12-22 2023-10-24 Samsung Electronics Co., Ltd. Data transmission method for convolution operation, fetcher, and convolution operation apparatus
US11409675B2 (en) 2020-12-22 2022-08-09 Samsung Electronics Co., Ltd. Data transmission method for convolution operation, fetcher, and convolution operation apparatus

Also Published As

Publication number Publication date
US20160358069A1 (en) 2016-12-08

Similar Documents

Publication Publication Date Title
KR20160142791A (ko) 뉴럴 네트워크 실시 방법 및 장치
KR102397415B1 (ko) 신경망 계산 유닛에서 입력 데이터의 희소성 이용
CN110378468B (zh) 一种基于结构化剪枝和低比特量化的神经网络加速器
Jiao et al. Accelerating low bit-width convolutional neural networks with embedded FPGA
US20180260710A1 (en) Calculating device and method for a sparsely connected artificial neural network
KR102523263B1 (ko) 하드웨어 기반 풀링을 위한 시스템 및 방법
US9411726B2 (en) Low power computation architecture
WO2019220975A1 (ja) ニューラルネットワーク回路装置、ニューラルネットワーク処理方法およびニューラルネットワークの実行プログラム
KR102610842B1 (ko) 뉴럴 네트워크에서의 프로세싱 엘리먼트 및 그 동작 방법
CN112219210B (zh) 信号处理装置和信号处理方法
Faraone et al. Customizing low-precision deep neural networks for FPGAs
US10884736B1 (en) Method and apparatus for a low energy programmable vector processing unit for neural networks backend processing
CN113222102A (zh) 用于神经网络模型量化的优化方法
US20200218777A1 (en) Signal Processing Method and Apparatus
Wang et al. ac 2 slam: Fpga accelerated high-accuracy slam with heapsort and parallel keypoint extractor
Shu et al. High energy efficiency FPGA-based accelerator for convolutional neural networks using weight combination
KR20200110165A (ko) 뉴럴 네트워크의 레이어들의 처리에서 제로 값(zero value)의 연산을 처리하는 방법 및 장치
CN114004351A (zh) 一种卷积神经网络硬件加速平台
Kulkarni et al. Hybrid optimization for DNN model compression and inference acceleration
WO2020041934A1 (zh) 一种数据处理设备以及一种数据处理方法
KR102637568B1 (ko) 스파이킹 뉴럴 네트워크를 최적화하는 방법 및 장치
US10938412B2 (en) Decompression of model parameters using functions based upon cumulative count distributions
CN111767204B (zh) 溢出风险检测方法、装置及设备
JP6757349B2 (ja) 固定小数点を用いて認識処理を行う多層の畳み込みニューラルネットワーク回路を実現する演算処理装置
CN110610227B (zh) 人工神经网络调整方法及神经网络计算平台

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal