KR20200049366A - 뉴럴 네트워크 프로세서 및 그것의 컨볼루션 연산 방법 - Google Patents

뉴럴 네트워크 프로세서 및 그것의 컨볼루션 연산 방법 Download PDF

Info

Publication number
KR20200049366A
KR20200049366A KR1020180132559A KR20180132559A KR20200049366A KR 20200049366 A KR20200049366 A KR 20200049366A KR 1020180132559 A KR1020180132559 A KR 1020180132559A KR 20180132559 A KR20180132559 A KR 20180132559A KR 20200049366 A KR20200049366 A KR 20200049366A
Authority
KR
South Korea
Prior art keywords
kernel
intermediate value
values
input feature
neural network
Prior art date
Application number
KR1020180132559A
Other languages
English (en)
Other versions
KR102637733B1 (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 삼성전자주식회사
Priority to KR1020180132559A priority Critical patent/KR102637733B1/ko
Priority to US16/524,717 priority patent/US11244028B2/en
Priority to CN201910773855.0A priority patent/CN111126559A/zh
Priority to TW108134606A priority patent/TWI834729B/zh
Publication of KR20200049366A publication Critical patent/KR20200049366A/ko
Application granted granted Critical
Publication of KR102637733B1 publication Critical patent/KR102637733B1/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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F5/00Methods or arrangements for data conversion without changing the order or content of the data handled
    • G06F5/01Methods or arrangements for data conversion without changing the order or content of the data handled for shifting, e.g. justifying, scaling, normalising
    • 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/46Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using electromechanical counter-type accumulators
    • G06F7/461Adding; subtracting
    • 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
    • G06F2207/00Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F2207/38Indexing scheme relating to groups G06F7/38 - G06F7/575
    • G06F2207/48Indexing scheme relating to groups G06F7/48 - G06F7/575
    • G06F2207/4802Special implementations
    • G06F2207/4818Threshold devices
    • G06F2207/4824Neural 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)
  • General Engineering & Computer Science (AREA)
  • Mathematical Physics (AREA)
  • Data Mining & Analysis (AREA)
  • Biomedical Technology (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biophysics (AREA)
  • Health & Medical Sciences (AREA)
  • Computing Systems (AREA)
  • Software Systems (AREA)
  • Computational Linguistics (AREA)
  • Molecular Biology (AREA)
  • General Health & Medical Sciences (AREA)
  • Evolutionary Computation (AREA)
  • Artificial Intelligence (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Mathematical Analysis (AREA)
  • Pure & Applied Mathematics (AREA)
  • Neurology (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Image Analysis (AREA)

Abstract

본 개시에 따르면, 뉴럴 네트워크 연산을 수행하는 뉴럴 네트워크 프로세서는, 입력 피처 맵을 저장하는 입력 피처 메모리, 커널 데이터에 포함된 복수의 웨이트 값들을 기초로 연산된 복수의 커널 중간 값들을 포함하는 커널 중간 데이터를 저장하는 커널 중간 데이터 메모리 및 입력 피처 메모리 및 커널 중간 데이터 메모리 각각으로부터 입력 피처 맵 및 커널 중간 데이터를 수신하고, 입력 피처 맵을 기초로 복수의 커널 중간 값들 중 적어도 하나를 선택함으로써 컨볼루션 연산을 수행하도록 구성되는 연산 회로를 포함할 수 있다,

Description

뉴럴 네트워크 프로세서 및 그것의 컨볼루션 연산 방법{NEURAL NETWORK PROCESSOR AND CONVOLUTION OPERATION METHOD THEREOF}
본 개시의 기술적 사상은 뉴럴 네트워크 프로세서 및 그것의 컨볼루션 연산 방법에 관한 것으로서, 자세하게는 뉴럴 네트워크 연산을 수행하기 위한 뉴럴 네트워크 프로세서 및 뉴럴 네트워크 프로세서의 컨볼루션 연산 방법에 관한 것이다.
뉴럴 네트워크(neural network)는 생물학적 뇌를 모델링한 컴퓨터 과학적 아키텍쳐(computational architecture)를 참조한다. 최근 뉴럴 네트워크(neural network) 기술이 발전함에 따라, 다양한 종류의 전자 시스템에서 하나 이상의 뉴럴 네트워크 모델을 이용한 뉴럴 네트워크 장치를 사용하여 입력 데이터를 분석하고 유효한 정보를 추출하는 연구가 활발히 진행되고 있다.
뉴럴 네트워크 장치는 복잡한 입력 데이터에 대한 많은 양의 연산을 필요로 한다. 따라서, 뉴럴 네트워크 장치가 입력을 실시간으로 분석하고, 정보를 추출하기 위해서 뉴럴 네트워크 연산을 효율적으로 처리할 수 있는 기술이 요구된다.
본 개시의 기술적 사상은 뉴럴 네트워크 프로세서 및 뉴럴 네트워크 프로세서의 컨볼루션 연산 방법에 있어서, 연산량을 줄이고, 에너지 효율을 증가시키기 위한 방법 및 장치를 제공한다.
상기와 같은 목적을 달성하기 위하여, 본 개시의 기술적 사상의 일측면에 따른 뉴럴 네트워크 연산을 수행하는 뉴럴 네트워크 프로세서는, 입력 피처 맵을 저장하는 입력 피처 메모리, 커널 데이터에 포함된 복수의 웨이트 값들을 기초로 연산된 복수의 커널 중간 값들을 포함하는 커널 중간 데이터를 저장하는 커널 중간 데이터 메모리 및 입력 피처 메모리 및 커널 중간 데이터 메모리 각각으로부터 입력 피처 맵 및 커널 중간 데이터를 수신하고, 입력 피처 맵을 기초로 복수의 커널 중간 값들 중 적어도 하나를 선택함으로써 컨볼루션 연산을 수행하도록 구성되는 연산 회로를 포함할 수 있다,
본 개시의 기술적 사상의 일측면에 따른 뉴럴 네트워크 연산을 수행하는 뉴럴 네트워크 프로세서의 컨볼루션 연산 방법은, 커널 데이터의 복수의 웨이트 값들을 이용해 연산을 수행함으로써 복수의 커널 중간 값들을 생성하는 단계, 연산 회로가, 복수의 커널 중간 값들 및 입력 피처 맵을 내부 메모리로부터 수신하는 단계, 입력 피처 맵에 포함된 입력 피처 값들을 기초로, 복수의 커널 중간 값들 중 적어도 하나의 커널 중간 값을 선택하는 단계 및 선택된 커널 중간 값 및 레지스터에 저장된 출력 중간 값을 이용해 연산을 수행함으로써 출력 중간 값을 업데이트 하는 단계를 포함할 수 있다.
본 개시의 기술적 사상의 일측면에 따른 뉴럴 네트워크 연산을 수행하는 뉴럴 네트워크 프로세서는, 입력 피처 맵을 저장하는 입력 피처 메모리, 커널 데이터에 포함된 복수의 웨이트 값들을 기초로 연산된 복수의 커널 중간 값들을 저장하는 커널 중간 데이터 메모리, 및 입력 피처 메모리 및 커널 중간 데이터 메모리 각각으로부터 입력 피처 맵 및 복수의 커널 중간 값들을 수신하고, 입력 피처 맵 및 복수의 커널 중간 값들을 기초로 컨볼루션 연산을 수행하도록 구성되는 연산 회로를 포함할 수 있고, 연산 회로는, 입력 피처 맵에 포함된 입력 피처 값들에 따라서, 복수의 커널 중간 값들 중 하나를 선택하여 출력하도록 구성되는 다중화기를 포함할 수 있다.
본 개시의 예시적 실시예에 따른 뉴럴 네트워크 프로세서 및 뉴럴 네트워크프로세서의 컨볼루션 연산 방법에 의하면, 컨볼루션 연산에 이용되는 웨이트 값들에 대해 사전 연산을 수행하고 연산된 값들을 미리 구비해 놓고, 구비된 값들 중 적어도 하나의 값을 선택하여 컨볼루션 연산을 수행함으로써 컨볼루션 연산의 연산량을 줄일 수 있고, 뉴럴 네트워크 프로세서의 에너지 효율을 증가시킬 수 있다.
도 1은 본 개시의 예시적 실시 예에 따른 전자 시스템을 나타낸다.
도 2는 본 개시의 예시적 실시 예에 따른 전자 시스템을 나타낸다.
도 3은 뉴럴 네트워크 구조의 일 예로서, 컨볼루션 뉴럴 네트워크의 구조를 나타낸다.
도 4a 및 도 4b는 뉴럴 네트워크의 컨볼루션 연산을 설명하기 위한 도면이다.
도 5는 본 개시의 예시적 실시 예에 따른 뉴럴 네트워크 프로세서를 나타낸다.
도 6a 및 도 6b는 본 개시의 예시적 실시 예에 따른 커널 중간 데이터 메모리를 나타낸다.
도 7은 본 개시의 예시적 실시 예에 따른 연산 회로를 나타낸다.
도 8은 본 개시의 예시적 실시 예에 따른 연산 회로를 나타낸다.
도 9는 본 개시의 예시적 실시 예에 따른 뉴럴 네트워크 프로세서의 컨볼루션 연산 방법의 순서도를 나타낸다.
도 10은 본 개시의 예시적 실시 예에 따른 입력 피처 값들 및 뉴럴 네트워크 프로세서의 컨볼루션 연산 방법의 순서도를 나타낸다.
도 11a 내지 도 11c는 본 개시의 예시적 실시 예에 따른 커널 중간 데이터 메모리를 나타낸다.
도 12는 본 개시의 예시적 실시 예에 따른 연산 회로를 나타낸다.
도 13은 본 개시의 예시적 실시 예에 따른 오프셋 보정 회로를 나타낸다.
도 14는 본 개시의 예시적 실시 예에 따른 연산 회로를 나타낸다.
도 15는 본 개시의 예시적 실시 예에 따른 연산기를 나타낸다.
도 16은 본 개시의 예시적 실시 예에 따른 연산 회로를 나타낸다.
도 17은 본 개시의 예시적 실시 예에 따른 연산기를 나타낸다.
도 18은 본 개시의 예시적 실시 예에 따른 연산 회로를 나타낸다.
이하, 첨부한 도면을 참조하여 본 발명의 실시예에 대해 상세히 설명한다.
도 1은 본 개시의 예시적 실시 예에 따른 전자 시스템(10)을 나타낸다. 전자 시스템(10)은 뉴럴 네트워크를 기초로 입력 데이터를 실시간으로 분석하여 유효한 정보를 추출하고, 추출된 정보를 기초로 상황을 판단하거나 전자 시스템(10)이 탑재되는 전자 장치의 구성들을 제어할 수 있다. 예를 들어, 전자 시스템(10)은 드론(drone), 첨단 운전자 보조 시스템(Advanced Drivers Assistance System; ADAS) 등과 같은 로봇 장치, 스마트 TV, 스마트 폰, 의료 장치, 모바일 장치, 영상 표시 장치, 계측 장치, IoT(Internet of Things) 장치 등에 적용될 수 있으며, 이외에도 다양한 종류의 전자 장치 중 하나에 탑재될 수 있다.
전자 시스템(10)은 적어도 하나의 IP 블록(Intellectual Property) 및 뉴럴 네트워크 프로세서(100)를 포함할 수 있다. 예를 들어, 전자 시스템(10)은 제1 IP 블록(IP1) 내지 제3 IP 블록(IP3) 및 뉴럴 네트워크 프로세서(100)를 포함할 수 있다.
전자 시스템(10)은 다양한 종류의 IP 블록들을 포함할 수 있다. 예를 들어, IP 블록들은 프로세싱 유닛(processing unit), 프로세싱 유닛에 포함된 복수의 코어들(cores), MFC(Multi-Format Codec), 비디오 모듈(예컨대, 카메라 인터페이스, JPEG(Joint Photographic Experts Group) 프로세서, 비디오 프로세서, 또는 믹서 등), 3D 그래픽 코어, 오디오 시스템, 드라이버, 디스플레이 드라이버, 휘발성 메모리, 비휘발성 메모리(non-volatile memory), 메모리 컨트롤러(memory controller), 입출력 인터페이스 블록(input and output interface block), 또는 캐시 메모리(cache memory) 등을 포함할 수 있다. 제1 IP 블록(IP1) 내지 제3 IP 블록(IP3) 각각은 상기 다양한 종류의 IP 블록들 중 적어도 하나를 포함할 수 있다.
IP들을 연결하기 위한 기술에는 시스템 버스(System Bus)를 기반으로 한 연결 방식이 있다. 예를 들어, 표준 버스 규격으로서, ARM(Advanced RISC Machine) 사의 AMBA(Advanced Microcontroller Bus Architecture) 프로토콜이 적용될 수 있다. AMBA 프로토콜의 버스 타입에는 AHB(Advanced High-Performance Bus), APB(Advanced Peripheral Bus), AXI(Advanced eXtensible Interface), AXI4, ACE(AXI Coherency Extensions) 등이 포함될 수 있다. 전술된 버스 타입들 중 AXI는 IP들 사이의 인터페이스 프로토콜로서, 다중 아웃스탠딩 어드레스(multiple outstanding address) 기능과 데이터 인터리빙(data interleaving) 기능 등을 제공할 수 있다. 이외에도, 소닉사(SONICs Inc.)의 uNetwork 나 IBM사의 CoreConnect, OCP-IP의 오픈 코어 프로토콜(Open Core Protocol) 등 다른 타입의 프로토콜이 시스템 버스에 적용되어도 무방할 것이다.
뉴럴 네트워크 프로세서(100)는 뉴럴 네트워크를 생성하거나, 뉴럴 네트워크를 훈련(train, 또는 학습(learn))하거나, 수신되는 입력 데이터를 기초로 연산을 수행하고, 수행 결과를 기초로 정보 신호(information signal)를 생성하거나, 뉴럴 네트워크를 재훈련(retrain)할 수 있다. 뉴럴 네트워크의 모델들은 GoogleNet, AlexNet, VGG Network 등과 같은 CNN(Convolution Neural Network), R-CNN(Region with Convolution Neural Network), RPN(Region Proposal Network), RNN(Recurrent Neural Network), S-DNN(Stacking-based deep Neural Network), S-SDNN(State-Space Dynamic Neural Network), Deconvolution Network, DBN(Deep Belief Network), RBM(Restricted Boltzmann Machine), Fully Convolutional Network, LSTM(Long Short-Term Memory) Network, Classification Network 등 다양한 종류의 모델들을 포함할 수 있으나 이에 제한되지는 않는다. 뉴럴 네트워크 프로세서(100)는 뉴럴 네트워크의 모델들에 따른 연산을 수행하기 위한 하나 이상의 프로세서를 포함할 수 있다. 또한, 뉴럴 네트워크 프로세서(100)는 뉴럴 네트워크의 모델들에 대응되는 프로그램들을 저장하기 위한 별도의 메모리를 포함할 수도 있다. 뉴럴 네트워크 프로세서(100)는 뉴럴 네트워크 처리 장치(neural network processing device), 뉴럴 네트워크 집적 회로(neural network integrated circuit) 또는 뉴럴 네트워크 처리 유닛(Neural network Processing Unit; NPU) 등으로 달리 호칭될 수 있다.
뉴럴 네트워크 프로세서(100)는 시스템 버스를 통해 적어도 하나의 IP 블록으로부터 다양한 종류의 입력 데이터를 수신할 수 있고, 입력 데이터를 기초로 정보 신호를 생성할 수 있다. 예를 들어, 뉴럴 네트워크 프로세서(100)는 입력 데이터에 뉴럴 네트워크 연산을 수행함으로써 정보 신호를 생성해낼 수 있으며, 뉴럴 네트워크 연산은 컨볼루션 연산을 포함할 수 있다. 뉴럴 네트워크 프로세서(100)의 컨볼루션 연산에 관해서는 도 4a 및 도 4b를 참조해 보다 자세히 설명된다. 뉴럴 네트워크 프로세서(100)가 생성하는 정보 신호는 음성 인식 신호, 사물 인식 신호, 영상 인식 신호, 생체 정보 인식 신호 등과 같은 다양한 종류의 인식 신호들 중 적어도 하나를 포함할 수 있다. 예를 들어, 뉴럴 네트워크 프로세서(100)는 비디오 스트림에 포함되는 프레임 데이터를 입력 데이터로서 수신하고, 프레임 데이터로부터 프레임 데이터가 나타내는 이미지에 포함된 사물에 대한 인식 신호를 생성할 수 있다. 하지만, 이에 제한되는 것은 아니며, 뉴럴 네트워크 프로세서(100)는 다양한 종류의 입력 데이터를 수신할 수 있고, 입력 데이터에 따른 인식 신호를 생성할 수 있다.
본 개시의 예시적 실시 예에 따른 전자 시스템(10)에 의하면, 뉴럴 네트워크 프로세서(100)는 컨볼루션 연산에 이용되는 커널 데이터(kernel data)에 포함된 웨이트 값(weight value)들을 이용해 연산을 선제적으로 수행함으로써 커널 중간 데이터(kernel intermediate data)를 생성할 수 있고, 커널 중간 데이터를 저장할 수 있다. 예를 들어, 뉴럴 네트워크 프로세서(100)는 컨볼루션 연산에서 웨이트 값들에 행해질 수 있는 다양한 조합의 연산을 미리 수행함으로써 커널 중간 데이터를 생성 및 저장할 수 있다. 일 실시 예에서, 커널 중간 데이터는 복수의 커널 중간 값들을 포함할 수 있으며, 복수의 커널 중간 값들 각각은 복수의 웨이트 값들의 선형 결합(linear combination)을 통해 얻어진 값일 수 있다. 커널 중간 데이터에 관해서는, 도 6a, 도 6b 및 도 11a 내지 도 11c를 참조하여 보다 자세히 설명된다. 뉴럴 네트워크 프로세서(100)는 입력 피처 맵에 포함된 입력 피처 값들을 기초로 복수의 커널 중간 값들 중 적어도 하나의 커널 중간 값을 선택함으로써 컨볼루션 연산을 수행할 수 있다.
위와 같이, 본 개시의 예시적 실시 예에 따른 전자 시스템(10)에 따르면, 컨볼루션 연산에 앞서, 컨볼루션 연산에 이용되는 커널 데이터의 웨이트 값들에 대해 미리 연산을 수행하여 커널 중간 값들을 구비해 놓음으로써 컨볼루션 연산의 연산량을 줄일 수 있고, 이와 더불어 뉴럴 네트워크 프로세서(100)의 에너지 효율을 증가시킬 수 있다.
도 2는 본 개시의 예시적 실시 예에 따른 전자 시스템(10)을 나타낸다. 특히, 도 2는 도 1에 개시된 전자 시스템(10)의 보다 구체적인 예시적 실시 예를 나타낸다. 도 2의 전자 시스템(10)에 관해 도 1과 중복되는 설명은 생략한다.
전자 시스템(10)은 뉴럴 네트워크 처리 유닛(Neural network Processing Unit; NPU; 100), RAM(Random Access Memory; 200), 프로세서(300), 메모리(400) 및 센서 모듈(500)을 포함할 수 있다. 뉴럴 네트워크 처리 유닛(100)은 도 1의 뉴럴 네트워크 프로세서(100)에 대응되는 구성일 수 있다.
RAM(200)은 프로그램들, 데이터, 또는 명령들(instructions)을 일시적으로 저장할 수 있다. 예컨대, 메모리(400)에 저장된 프로그램들 및/또는 데이터는 프로세서(300)의 제어 또는 부팅 코드에 따라 RAM(200)에 일시적으로 로딩될 수 있다. RAM(200)은 DRAM(Dynamic RAM) 또는 SRAM(Static RAM) 등의 메모리를 이용해 구현될 수 있다.
프로세서(300)는 전자 시스템(10)의 전반적인 동작을 제어할 수 있으며, 일 예로서 프로세서(300)는 중앙 프로세싱 유닛(Central Processing Unit; CPU)일 수 있다. 프로세서(300)는 하나의 프로세서 코어(Single Core)를 포함하거나, 복수의 프로세서 코어들(Multi-Core)을 포함할 수 있다. 프로세서(300)는 RAM(200) 및 메모리(400)에 저장된 프로그램들 및/또는 데이터를 처리 또는 실행할 수 있다. 예를 들어, 프로세서(300)는 메모리(400)에 저장된 프로그램들을 실행함으로써 전자 시스템(10)의 기능들을 제어할 수 있다.
메모리(400)는 데이터를 저장하기 위한 저장 장소로서, 예를 들어, OS(Operating System), 각종 프로그램들 및 각종 데이터를 저장할 수 있다. 메모리(400)는 DRAM일 수 있으나, 이에 한정되는 것은 아니다. 메모리(400)는 휘발성 메모리(volatile memory) 또는 비휘발성 메모리(non-volatile memory) 중 적어도 하나를 포함할 수 있다. 비휘발성 메모리는 ROM(Read Only Memory), PROM(Programmable ROM), EPROM(Electrically Programmable ROM), EEPROM(Electrically Erasable and Programmable ROM), 플래시 메모리, PRAM(Phase-change RAM), MRAM(Magnetic RAM), RRAM(Resistive RAM), FRAM(Ferroelectric RAM) 등을 포함할 수 있다. 휘발성 메모리는 DRAM(Dynamic RAM), SRAM(Static RAM), SDRAM(Synchronous DRAM) 등을 포함할 수 있다. 또한 일 실시 예에 있어서, 메모리(400)는 HDD(Hard Disk Drive), SSD(Solid-State Drive), CF(Compact Flash), SD(Secure Digital), Micro-SD(Micro Secure Digital), Mini-SD(Mini Secure Digital), xD(extreme digital) 또는 Memory Stick 중 적어도 하나를 포함할 수도 있다.
센서 모듈(500)은 전자 시스템(10) 주변의 정보를 수집할 수 있다. 센서 모듈(500)은 전자 시스템(10) 외부로부터 이미지 신호를 센싱 또는 수신할 수 있고, 센싱 또는 수신된 이미지 신호를 이미지 데이터, 즉 이미지 프레임으로 변환할 수 있다. 이를 위해, 센서 모듈(500)은 센싱 장치, 예컨대 촬상 장치, 이미지 센서, 라이더(LIDAR; light detection and ranging) 센서, 초음파 센서, 적외선 센서 등 다양한 종류의 센싱 장치들 중 적어도 하나를 포함하거나, 또는 상기 장치로부터 센싱 신호를 수신할 수 있다. 일 실시 예에서, 센서 모듈(500)은 이미지 프레임을 뉴럴 네트워크 처리 유닛(100)에 제공할 수 있다. 예를 들어, 센서 모듈(500)은 이미지 센서를 포함할 수 있으며, 전자 시스템(10)의 외부 환경을 촬영함으로써 비디오 스트림을 생성하고, 비디오 스트림의 연속되는 이미지 프레임들을 뉴럴 네트워크 처리 유닛(100)에 순차적으로 제공할 수 있다.
본 개시의 예시적 실시 예에 따른 전자 시스템(10)에 의하면, 뉴럴 네트워크 처리 유닛(100)은 컨볼루션 연산에 이용되는 커널 데이터(kernel data)에 포함된 웨이트 값(weight value)들을 이용해 연산을 수행함으로써 커널 중간 데이터(kernel intermediate data)를 생성할 수 있고, 커널 중간 데이터를 저장할 수 있다. 뉴럴 네트워크 처리 유닛(100)은 입력 피처 맵에 포함된 입력 피처 값들을 기초로 복수의 커널 중간 값들 중 적어도 하나의 커널 중간 값을 선택함으로써 컨볼루션 연산을 수행할 수 있다.
위와 같이, 본 개시의 예시적 실시 예에 따른 전자 시스템(10)에 따르면, 컨볼루션 연산에 앞서, 컨볼루션 연산에 이용되는 커널 데이터의 웨이트 값들에 대해 미리 연산을 수행하여 커널 중간 값들을 구비해 놓음으로써 컨볼루션 연산의 연산량을 줄일 수 있고, 이와 더불어 뉴럴 네트워크 처리 유닛(100)의 에너지 효율을 증가시킬 수 있다.
도 3은 뉴럴 네트워크 구조의 일 예로서, 컨볼루션 뉴럴 네트워크의 구조를 나타낸다. 뉴럴 네트워크(NN)는 복수의 레이어들(L1 내지 Ln)을 포함할 수 있다. 복수의 레이어들(L1 내지 Ln) 각각은 선형 레이어 또는 비선형 레이어일 수 있으며, 일 실시 예에 있어서, 적어도 하나의 레이어 및 적어도 하나의 비선형 레이어가 결합되어 하나의 레이어로 지칭될 수도 있다. 예시적으로, 선형 레이어는 컨볼루션 레이어(convolution layer) 및 풀리 커넥티드 레이어(fully-connected layer)를 포함할 수 있으며, 비선형 레이어는 풀링(pooling layer) 및 활성 레이어(activation layer)를 포함할 수 있다.
예시적으로, 제1 레이어(L1)는 컨볼루션 레이어이고, 제2 레이어(L2)는 풀링 레이어이고, 제n 레이어(Ln)는 출력 레이어로서 풀리 커넥티드 레이어일 수 있다. 뉴럴 네트워크(NN)는 활성 레이어를 더 포함할 수 있으며, 다른 종류의 연산을 수행하는 레이어를 더 포함할 수 있다.
복수의 레이어들(L1 내지 Ln) 각각은 입력되는 데이터(예컨대, 이미지 프레임) 또는 이전 레이어에서 생성된 피처 맵을 입력 피처 맵으로서 수신하고, 입력 피처 맵을 연산함으로써 출력 피처 맵 또는 인식 신호(REC)를 생성할 수 있다. 이 때, 피처 맵은 입력 데이터의 다양한 특징이 표현된 데이터를 의미한다. 피처 맵들(FM1, FM2, FMn)은 예컨대 2차원 매트릭스 또는 3차원 매트릭스(또는 텐서(tensor)) 형태를 가질 수 있다. 피처 맵들(FM1, FM2, FMn)은 너비(W)(또는 칼럼), 높이(H)(또는 로우) 및 깊이(D)를 가지며, 이는 좌표상의 x축, y축 및 z축에 각각 대응될 수 있다. 이 때, 깊이(D)는 채널 수로 지칭될 수 있다.
제1 레이어(L1)는 제1 피처 맵(FM1)을 웨이트 맵(WM)과 컨볼루션함으로써 제2 피처 맵(FM2)을 생성할 수 있다. 웨이트 맵(WM)은 제1 피처 맵(FM1)을 필터링할 수 있으며, 필터 또는 커널로도 지칭될 수 있다. 웨이트 맵(WM)의 깊이, 즉 채널 개수는 제1 피처 맵(FM1)의 깊이, 즉 채널 개수와 동일하며, 웨이트 맵(WM)과 제1 피처 맵(FM1)의 동일한 채널끼리 컨볼루션 될 수 있다. 웨이트 맵(WM)이 제1 피처 맵(FM1)을 슬라이딩 윈도우로 하여 횡단하는 방식으로 시프트 될 수 있다. 시프트되는 양은 "스트라이드(stride) 길이" 또는 "스트라이드"로 지칭될 수 있다. 각 시프트 동안, 웨이트 맵(WM)에 포함되는 웨이트 값들 각각이 제1 피처 맵(FM1)과 중첩되는 영역에서의 모든 피처 데이터들과 곱해지고 더해질 수 있다. 웨이트 맵(WM)에 포함되는 웨이트 값들 각각이 제1 피처 맵(FM1)과 중첩되는 영역에서의 제1 피처 맵(FM1)의 데이터들을 추출 데이터라 칭할 수 있다. 제1 피처 맵(FM1)과 웨이트 맵(WM)이 컨볼루션 됨에 따라, 제2 피처 맵(FM2)의 하나의 채널이 생성될 수 있다. 도 3에는 하나의 웨이트 맵(WM)이 표시되었으나, 실질적으로는 복수의 웨이트 맵들이 제1 피처 맵(FM1)과 컨볼루션 되어, 제2 피처 맵(FM2)의 복수의 채널들이 생성될 수 있다. 다시 말해, 제2 피처 맵(FM2)의 채널의 수는 웨이트 맵의 개수에 대응될 수 있다.
제2 레이어(L2)는 풀링을 통해 제2 피처 맵(FM2)의 공간적 크기(spatial size)를 변경함으로써, 제3 피처 맵(FM3)을 생성할 수 있다. 풀링은 샘플링 또는 다운-샘플링으로 지칭될 수 있다. 2차원의 풀링 윈도우(PW)가 풀링 윈도우(PW)의 사이즈 단위로 제2 피처 맵(FM2) 상에서 시프트 되고, 풀링 윈도우(PW)와 중첩되는 영역의 피처 데이터들 중 최대값(또는 피처 데이터들의 평균값)이 선택될 수 있다. 이에 따라, 제2 피처 맵(FM2)으로부터 공간적 사이즈가 변경된 제3 피처 맵(FM3)이 생성될 수 있다. 제3 피처 맵(FM3)의 채널과 제2 피처 맵(FM2)의 채널 개수는 동일하다.
제n 레이어(Ln)는 제n 피처 맵(FMn)의 피처들을 조합함으로써 입력 데이터의 클래스(class)(CL)를 분류할 수 있다. 또한, 제n 레이어(Ln)는 클래스에 대응되는 인식 신호(REC)를 생성할 수 있다. 실시 예에 있어서, 입력 데이터는 비디오 스트림(video stream)에 포함되는 프레임 데이터에 대응될 수 있으며, 제n 레이어(Ln)는 이전 레이어로부터 제공되는 제n 피처 맵(FMn)을 기초로 프레임 데이터가 나타내는 이미지에 포함되는 사물에 해당하는 클래스를 추출함으로써, 사물을 인식하고, 인식된 사물에 상응하는 인식 신호(REC)를 생성할 수 있다.
도 4a 및 도 4b는 뉴럴 네트워크의 컨볼루션 연산을 설명하기 위한 도면이다.
도 4a를 참조하면, 입력 피처 맵들(201)은 D개의 채널들을 포함하고, 각 채널의 입력 피처 맵은 H행 W열의 크기를 가질 수 있다(D, H, W는 자연수). 커널들(202) 각각은 R행 S열의 크기를 갖고, 커널들(202)은 입력 피처 맵들(201)의 채널 수(또는 깊이)(D) 에 대응되는 개수의 채널들을 포함할 수 있다(R, S는 자연수). 출력 피처 맵들(203)은 입력 피처 맵들(201)과 커널들(202) 간의 3차원 컨볼루션 연산을 통해 생성될 수 있고, 컨볼루션 연산에 따라 Y개의 채널들을 포함할 수 있다.
하나의 입력 피처 맵과 하나의 커널 간의 컨볼루션 연산을 통해 출력 피처 맵이 생성되는 과정은 도 4b를 참조해 설명될 수 있으며, 도 4b에서 설명되는 2차원 컨볼루션 연산이 전체 채널들의 입력 피처 맵들(201)과 전체 채널들의 커널들(202) 간에 수행됨으로써, 전체 채널들의 출력 피처 맵들(203)이 생성될 수 있다.
도 4b를 참조하면, 설명의 편의를 위해, 입력 피처 맵(210)은 6x6 크기(size)를 가지고, 원본 커널(220)은 3x3 크기를 가지고, 출력 피처 맵(230)은 4x4 크기인 것으로 가정하나, 이에 제한되지 않으며 뉴럴 네트워크는 다양한 크기의 피처 맵들 및 커널들로 구현될 수 있다. 또한, 입력 피처 맵(210), 원본 커널(220) 및 출력 피처 맵(230)에 정의된 값들은 모두 예시적인 값들일 뿐이고, 본 개시에 따른 실시 예들이 이에 제한되지 않는다.
원본 커널(220)은 입력 피처 맵(210)에서 3x3 크기의 윈도우 단위로 슬라이딩하면서 컨볼루션 연산을 수행할 수 있다. 컨볼루션 연산은 입력 피처 맵(210)의 어느 윈도우의 각 피처 데이터 및 원본 커널(220)에서 대응되는 위치의 각 웨이트 값들 간의 곱셈을 함으로써 획득된 값들을 모두 합산함에 따라 출력 피처 맵(230)의 각 피처 데이터를 구하는 연산을 나타낼 수 있다. 웨이트 값들과 곱해지는 상기 입력 피처 맵(210)의 윈도우에 포함된 데이터들을 입력 피처 맵(210)으로부터 추출된 추출 데이터라 칭할 수 있다. 구체적으로, 원본 커널(220)은 먼저 입력 피처 맵(210)의 제1 추출 데이터(211)와 컨볼루션 연산을 수행할 수 있다. 즉, 제1 추출 데이터(211)의 각 피처 데이터 1, 2, 3, 4, 5, 6, 7, 8, 9는 각각 대응되는 원본 커널(220)의 웨이트 값인 -1, -3, 4, 7, -2, -1, -5, 3, 1과 곱해지고, 그 결과로서 -1, -6, 12, 28, -10, -6, -35, 24, 9가 획득될 수 있다. 다음으로, 획득된 값들 -1, -6, 12, 28, -10, -6, -35, 24, 9를 모두 더한 결과인 15가 계산되고, 출력 피처 맵(230)의 1행 1열의 피처 데이터(231)는 15로 결정될 수 있다. 여기서 출력 피처 맵(230)의 1행 1열의 피처 데이터(231)는 제1 추출 데이터(211)에 대응된다. 마찬가지 방식으로, 입력 피처 맵(210)의 제2 추출 데이터(212)와 원본 커널(220) 간의 컨볼루션 연산이 수행됨으로써 출력 피처 맵(230)의 1행 2열의 피처 데이터(232)인 4가 결정될 수 있다. 최종적으로, 입력 피처 맵(210)의 마지막 추출 데이터인 제16 추출 데이터(213)와 원본 커널(220) 간의 컨볼루션 연산이 수행됨으로써 출력 피처 맵(230)의 4행 4열의 피처 데이터(233)인 11이 결정될 수 있다.
다시 말해, 하나의 입력 피처 맵(210)과 하나의 원본 커널(220) 간의 컨볼루션 연산은 입력 피처 맵(210)의 추출 데이터 및 원본 커널(220)의 대응되는 웨이트 값들의 곱셈 및 곱셈 결과들의 합산을 반복적으로 수행함으로써 처리될 수 있고, 컨볼루션 연산의 결과로서 출력 피처 맵(230)이 생성될 수 있다.
위에서 살펴본 바와 같이, 컨볼루션 연산에서, 커널에 포함된 웨이트 값들은 입력 피처 맵(210)에 포함된 입력 피처 값들과 여러 번 곱해지게 된다. 컨볼루션 연산에서, 곱셈 연산의 수가 증가할수록 그 연산의 양이 증가하게 되고, 이는 뉴럴 네트워크 프로세서의 에너지 효율 저하를 야기하게 된다.
도 1을 함께 참조하면, 본 개시의 예시적 실시 예에 따른 뉴럴 네트워크 프로세서(100)에 의하면, 컨볼루션 연산에 앞서, 뉴럴 네트워크 프로세서(100)는 커널 데이터에 포함된 웨이트 값들을 이용해 커널 중간 값들을 포함하는 커널 중간 데이터를 생성하고, 커널 중간 데이터를 저장할 수 있다. 뉴럴 네트워크 프로세서(100)는, 컨볼루션 연산에서, 입력 피처 맵 및 커널 중간 데이터를 이용할 수 있다. 일 실시 예에서, 뉴럴 네트워크 프로세서(100)는 입력 피처 맵에 포함된 입력 피처 값들을 기초로 복수의 커널 중간 값들 중 적어도 하나의 커널 중간 값을 선택함으로써 컨볼루션 연산을 수행할 수 있다. 본 개시의 예시적 실시 예에 따른 뉴럴 네트워크 프로세서(100)에 의하면, 웨이트 값들을 이용한 사전 연산을 수행하고, 커널 중간 값들을 저장해 놓음으로써 컨볼루션 연산에서 곱셈 연산의 양을 줄일 수 있다. 이에 따라, 뉴럴 네트워크 프로세서(100)의 컨볼루션 연산에서 연산 양이 감소할 수 있고, 뉴럴 네트워크 프로세서(100)의 에너지 효율이 향상될 수 있다. 본 개시의 예시적 실시 예에 따른 뉴럴 네트워크 프로세서(100)의 컨볼루션 연산 방법 및 이를 위한 장치가 이하의 도면들을 통해 보다 구체적으로 설명된다.
도 5는 본 개시의 예시적 실시 예에 따른 뉴럴 네트워크 프로세서(100)를 나타낸다. 뉴럴 네트워크 프로세서(100)는 내부 메모리(120), 연산 회로(140) 및 프로세서(160)를 포함할 수 있다. 도 5의 뉴럴 네트워크 프로세서(100)에 관해 도 1 및 도 2와 중복되는 설명은 생략한다.
내부 메모리(120)는 뉴럴 네트워크 프로세서(100)의 외부로부터 수신되는 외부 데이터를 수신할 수 있다. 외부 데이터는 입력 데이터라 칭해질 수도 있다. 내부 메모리(120)는 외부 데이터, 연산에 필요한 각종 데이터 및 웨이트 값들을 저장할 수 있다. 이를 위해, 내부 메모리(120)는 입력 피처 맵(IFM)을 저장하는 입력 피처 메모리(122), 커널 데이터를 저장하는 커널 메모리(124) 및 커널 중간 데이터(KID)를 저장하는 커널 중간 데이터 메모리(126)를 포함할 수 있다. 입력 피처 메모리(122), 커널 메모리(124) 및 커널 중간 데이터 메모리(126)는 별개의 하드웨어로 구성될 수도 있으나, 이에 제한되지는 않는다. 예를 들어, 입력 피처 메모리(122), 커널 메모리(124) 및 커널 중간 데이터 메모리(126) 중 2개 이상의 메모리들은 하나의 하드웨어 내에서 다른 영역에 대응되는 메모리를 나타낼 수 있다. 입력 피처 메모리(122), 커널 메모리(124) 및 커널 중간 데이터 메모리(126) 각각은 DRAM(Dynamic RAM), SRAM(Static RAM), SDRAM(Synchronous RAM)과 같은 다양한 종류의 메모리로서 구현될 수 있다.
입력 피처 메모리(122)는 입력 피처 맵(IFM)을 저장할 수 있고, 입력 피처 맵(IFM)을 연산 회로(140)에 제공할 수 있다.
커널 메모리(124)는 컨볼루션 연산에 이용되는 커널 데이터를 저장할 수 있다. 커널 데이터는 복수의 웨이트 값들을 포함할 수 있다.
커널 중간 데이터 메모리(126)는 커널 데이터(KD)에 포함된 복수의 웨이트 값들을 기초로 연산된 커널 중간 데이터(KID)를 저장할 수 있다. 일 실시 예에서, 커널 중간 데이터(KID)는 외부에서 연산되어 뉴럴 네트워크 프로세서(100)에 전송되거나, 프로세서(160)와 같은 내부 연산 유닛에 의해 연산될 수 있다. 커널 중간 데이터(KID)는 복수의 커널 중간 값들을 포함할 수 있으며, 복수의 커널 중간 값들 각각은 복수의 웨이트 값들의 선형 결합으로 얻어진 값일 수 있다. 커널 중간 데이터 메모리(126)는 커널 중간 데이터(KID)를 연산 회로(140)에 제공할 수 있다.
연산 회로(140)는 입력 피처 메모리(122)로부터 입력 피처 맵(IFM)을 수신할 수 있고, 커널 중간 데이터 메모리(126)로부터 커널 중간 데이터(KID)를 수신할 수 있다. 연산 회로(140)는 수신된 입력 피처 맵(IFM) 및 수신된 커널 중간 데이터(KID)를 이용해 컨볼루션 연산을 수행할 수 있다. 연산 회로(140)는 컨볼루션 연산을 수행함으로써 출력 피처(output feature; OF)를 생성해낼 수 있고, 출력 피처 생성하는 과정을 반복함으로써 출력 피처 맵을 생성해낼 수 있다.
연산 회로(140)에 의해 수신되는 입력 피처 맵(IFM)은 복수의 입력 피처 값들을 포함할 수 있다. 연산 회로(140)는 복수의 입력 피처 값들 중 현재(current) 연산에 이용되는 입력 피처 값들을 기초로, 커널 중간 데이터(KID)에 포함된 복수의 커널 중간 값들 중 적어도 하나의 커널 중간 값을 선택할 수 있다. 일 실시 예에서, 입력 피처 값들이 1-bit의 데이터인 경우, 연산 회로(140)는 선택된 적어도 하나의 커널 중간 값을 출력 피처(OF)로서 출력할 수 있다. 또한 일 실시 예에서, 입력 피처 값들이 2-bit 이상의 비트 수를 갖는 데이터인 경우, 연산 회로(140)는 선택된 적어도 하나의 커널 중간 값에 내부 레지스터에 저장된 출력 중간 값을 1-bit 혹은 그 이상의 비트 수 만큼 쉬프트 시킨 쉬프트 된 출력 중간 값을 합산할 수 있으며, 상기 합산 동작을 적어도 1회 수행함으로써 출력 피처(OF)를 생성해낼 수 있다. 연산 회로(140)의 컨볼루션 연산 동작에 관해서는 이하의 도면들을 통해 보다 자세히 설명된다.
프로세서(160)는 뉴럴 네트워크 프로세서(100)의 전반적인 동작을 제어할 수 있으며, 일 예로서 프로세서(160)는 중앙 프로세싱 유닛(Central Processing Unit; CPU)일 수 있다. 프로세서(160)는 하나의 프로세서 코어(Single Core)를 포함하거나, 복수의 프로세서 코어들(Multi-Core)을 포함할 수 있다. 프로세서(160)는 내부 메모리(120)에 저장된 프로그램들을 실행함으로써 뉴럴 네트워크 프로세서(100)의 기능들을 제어할 수 있다.
도 6a 및 도 6b는 본 개시의 예시적 실시 예에 따른 커널 중간 데이터 메모리(126)를 나타낸다. 커널 중간 데이터 메모리(126)는 커널 중간 데이터(KID)를 저장할 수 있다. 특히, 도 6a는, 컨볼루션 연산에 이용되는 커널 데이터가 2개의 웨이트 값들을 포함하는 경우를 도시하며, 도 6b는, 컨볼루션 연산에 이용되는 커널 데이터가 3개의 웨이트 값들을 포함하는 경우를 도시한다. 하지만, 도 6a 및 도 6b는 설명의 편의를 위한 예시를 도시하는 것일 뿐, 커널 데이터에 포함된 웨이트의 개수가 이에 제한되지는 않을 것이다.
도 6a를 참조하면, 컨볼루션 연산에 이용되는 커널 데이터는 2개의 웨이트 값들을 포함할 수 있다. 예를 들어, 커널 데이터는 제1 웨이트 값(w_1) 및 제2 웨이트 값(w_2)을 포함할 수 있다. 예를 들어, 커널 데이터는 2행 1열의 행렬(matrix)이거나, 1행 2열의 행렬(matrix)일 수 있다.
커널 중간 데이터(KID)는 복수의 커널 중간 값들을 포함할 수 있다. 복수의 커널 중간 값들 각각은 복수의 웨이트 값들의 선형 결합으로 얻어진 값일 수 있다. 예를 들어, 복수의 커널 중간 값들 각각은 이하 [수학식 1]과 같이 표현될 수 있다.
Figure pat00001
(KIV: 커널 중간 값, w_1: 제1 웨이트 값, w_2: 제2 웨이트 값, a_1, a_2: 실수(real number))
특히, 웨이트 값들에 곱해지는 계수(coefficient)들인 a_1 및 a_2는, M-bit(단, M은 자연수)로 표현되는 숫자일 수 있다. 도 6a는 특히, a_1 및 a_2가 1-bit으로 표현되는 숫자인 실시 예를 나타낸다. 따라서, a_1 및 a_2 각각은 '0' 또는 '1'의 값을 가질 수 있으며, 커널 중간 데이터(KID)는 a_1 및 a_2의 조합으로부터 얻어지는 4개의 커널 중간 값들을 포함할 수 있다.
예를 들어, (a_2, a_1)이 (0,0)에 대응되는 경우, 제1 커널 중간 값(KIV_1)은 '0'의 값을 가질 수 있다. 마찬 가지로 예를 들어, (a_2, a_1)이 (0,1)에 대응되는 경우, 제2 커널 중간 값(KIV_2)은 'w_1'의 값을 가질 수 있으며, (a_2, a_1)이 (1,0)에 대응되는 경우, 제3 커널 중간 값(KIV_3)은 'w_2'의 값을 가질 수 있으며, (a_2, a_1)이 (1,1)에 대응되는 경우, 제4 커널 중간 값(KIV_4)은 'w_1+w_2'의 값을 가질 수 있다.
복수의 커널 중간 값들에 대해 달리 표현하자면, 복수의 커널 중간 값들 각각은, 복수의 웨이트 값들을 나열함으로써 형성되는 벡터인 (w_2, w_1)와 각각의 웨이트 값에 곱해지는 계수들을 나열함으로써 형성되는 벡터인 (a_2, a_1)을 내적(inner product)함으로써 생성되는 값일 수 있다. 예를 들어, 도 6a와 같은 경우, 복수의 커널 중간 값들 각각은, 복수의 웨이트 값들을 나열함으로써 형성되는 벡터인 (w_2, w_1)와 각각의 요소(element)가 '0' 또는 '1'을 갖는 2열의 벡터를 내적함으로써 생성되는 값일 수 있다.
이와 같이 연산된 커널 중간 데이터(KID)는, 도 5의 연산 회로(140)의 컨볼루션 연산에 이용될 수 있다.
도 6b를 참조하면, 컨볼루션 연산에 이용되는 커널 데이터는 3개의 웨이트 값들을 포함할 수 있다. 예를 들어, 커널 데이터는 제1 웨이트 값(w_1), 제2 웨이트 값(w_2) 및 제3 웨이트 값(w_3)을 포함할 수 있다. 예를 들어, 커널 데이터는 3행 1열의 행렬(matrix)이거나, 1행 3열의 행렬(matrix)일 수 있다.
커널 중간 데이터(KID)는 복수의 커널 중간 값들을 포함할 수 있다. 복수의 커널 중간 값들 각각은 복수의 웨이트 값들의 선형 결합으로 얻어진 값일 수 있다. 예를 들어, 복수의 커널 중간 값들 각각은 이하 [수학식 2]과 같이 표현될 수 있다.
Figure pat00002
(KIV: 커널 중간 값, w_1: 제1 웨이트 값, w_2: 제2 웨이트 값, w_3: 제3 웨이트 값, a_1, a_2, a_3: 실수(real number))
특히, 웨이트 값들에 곱해지는 계수(coefficient)들인 a_1, a_2 및 a_3는, M-bit로 표현되는 숫자일 수 있다. 도 6b는 특히, a_1, a_2 및 a_3가 1-bit으로 표현되는 숫자인 실시 예를 나타낸다. 따라서, a_1, a_2 및 a_3 각각은 '0' 또는 '1'의 값을 가질 수 있으며, 커널 중간 데이터(KID)는 a_1, a_2 및 a_3의 조합으로부터 얻어지는 8개의 커널 중간 값들을 포함할 수 있다.
예를 들어, (a_3, a_2, a_1)이 (0,0,0)에 대응되는 경우, 제1 커널 중간 값(KIV_1)은 '0'의 값을 가질 수 있다. 마찬 가지로 예를 들어, (a_3, a_2, a_1)이 (0,0,1)에 대응되는 경우, 제2 커널 중간 값(KIV_2)은 'w_1'의 값을 가질 수 있다. 이후 제3 커널 중간 값(KIV_3) 내지 제8 커널 중간 값(KIV_8) 각각은, (a_3, a_2, a_1)이 (0,1,0), (0,1,1), (1,0,0), (1,0,1), (1,1,0), (1,1,1)에 대응되는 경우의 값을 가질 수 있다.
복수의 커널 중간 값들에 대해 달리 표현하자면, 복수의 커널 중간 값들 각각은, 복수의 웨이트 값들을 나열함으로써 형성되는 벡터인 (w_3, w_2, w_1)와 각각의 웨이트 값에 곱해지는 계수들을 나열함으로써 형성되는 벡터인 (a_3, a_2, a_1)를 내적(inner product)함으로써 생성되는 값일 수 있다. 예를 들어, 도 6b와 같은 경우, 복수의 커널 중간 값들 각각은, 복수의 웨이트 값들을 나열함으로써 형성되는 벡터인 (w_3, w_2, w_1)와 각각의 요소(element)가 '0' 또는 '1'을 갖는 3열의 벡터를 내적함으로써 생성되는 값일 수 있다.
이와 같이 연산된 커널 중간 데이터(KID)는, 도 5의 연산 회로(140)의 컨볼루션 연산에 이용될 수 있다.
도 7은 본 개시의 예시적 실시 예에 따른 연산 회로(140)를 나타낸다. 도 7의 연산 회로(140)에 관해 도 5와 중복되는 설명은 생략한다.
연산 회로(140)는 선택 제어 회로(142) 및 다중화기(multiplexer; 144)를 포함할 수 있다.
선택 제어 회로(142)는 입력 피처 맵(IFM)을 기초로 선택 제어 신호(CTRL_SEL)를 생성할 수 있다. 입력 피처 맵(IFM)은 복수의 입력 피처 값들을 포함할 수 있다. 선택 제어 회로(142)는, 복수의 입력 피처 값들 중 현재(current) 연산에 이용되는 입력 피처 값들을 기초로, 다중화기(144)가 커널 중간 데이터(KID)에 포함된 복수의 커널 중간 값들 중 하나의 커널 중간 값을 선택하도록 하기 위한 선택 제어 신호(CTRL_SEL)를 생성할 수 있다. 선택 제어 회로(142)는 생성된 선택 제어 신호(CTRL_SEL)를 다중화기(144)에 제공할 수 있다.
선택 제어 회로(142)는 다양한 형태로 구현될 수 있으며, 실시 예에 따라 선택 제어 회로(142)는 하드웨어 형태로 구현되거나 또는 소프트웨어 형태로 구현될 수 있다. 예를 들어, 선택 제어 회로(142)가 하드웨어의 형태로 구현되는 경우, 선택 제어 회로(142)는 복수의 입력 피처 값들을 기초로 선택 제어 신호(CTRL_SEL)를 생성하기 위한 회로들을 포함할 수 있다. 또한 예를 들어, 선택 제어 회로(142)가 소프트웨어로 구현되는 경우, 뉴럴 네트워크 프로세서의 내부 메모리에 로딩된 프로그램 및/또는 인스트럭션들이 연산 회로(140)에 포함된 제어 로직 또는 뉴럴 네트워크 프로세서의 프로세서에 의해 실행됨으로써 선택 제어 신호(CTRL_SEL)를 생성할 수 있다. 하지만 상기 실시 예들에 한정되는 것도 아니며, 선택 제어 회로(142)는 펌웨어와 같이 소프트웨어와 하드웨어가 결합된 형태로 구현될 수도 있다.
다중화기(144)는 커널 중간 데이터(KID) 및 선택 제어 신호(CTRL_SEL)를 기초로 출력 피처(OF)를 생성해낼 수 있다. 일 실시 예에서, 다중화기(144)는, 선택 제어 신호(CTRL_SEL)에 기초하여, 커널 중간 데이터(KID)에 포함된 복수의 커널 중간 값들 중 하나의 값을 선택함으로써 출력 피처(OF)를 생성해낼 수 있다.
비제한적인 예시로서, 입력 피처 맵이 1행 3열의 커널 데이터와 컨볼루션 연산이 수행되는 경우에 대해 설명한다. 도 6b를 함께 참조하면, 입력 피처 맵에서 커널 데이터와 곱해지는 입력 피처 값이 각각 '0', '1', '1'인 경우, 선택 제어 회로(142)는, 다중화기(144)가 복수의 커널 중간 값들 중 제4 커널 중간 값(KIV_4)을 선택하도록 선택 제어 신호(CTRL_SEL)를 생성할 수 있고, 다중화기(144)는, 선택 제어 신호(CTRL_SEL)에 기초하여 복수의 커널 중간 값들 중 제4 커널 중간 값(KIV_4)을 선택할 수 있다. 다중화기(144)는, 제4 커널 중간 값(KIV_4)을 출력 피처(OF)로서 출력할 수 있다. 따라서, 본 개시의 예시적 실시 예에 따른 연산 회로(140)는 곱셈 연산을 수행하지 않고도, 복수의 커널 중간 값들 중 하나의 커널 중간 값을 선택함으로써 컨볼루션 연산을 수행해낼 수 있다.
도 8은 본 개시의 예시적 실시 예에 따른 연산 회로(140)를 나타낸다. 연산 회로(140)에 관한 도 5 및 도 7과 중복되는 설명은 생략한다. 도 8은 특히 입력 피처 맵(IFM)에 포함된 입력 피처 값들이 2-bit 이상의 비트 수를 갖는 경우의 연산 회로(140)를 도시한다.
연산 회로(140)는 선택 제어 회로(142), 다중화기(144), 덧셈기(145), 레지스터(146) 및 쉬프터(147)를 포함할 수 있다.
선택 제어 회로(142)는 입력 피처 맵(IFM)에 포함된 복수의 입력 피처 값들 중 현재(current) 연산에 이용되는 입력 피처 값들을 기초로 선택 제어 신호(CTRL_SEL)를 생성할 수 있다. 선택 제어 회로(142)는, 입력 피처 값들의 상위 비트의 값들을 기초로 선택 제어 신호(CTRL_SEL)를 생성한 뒤, 이후 입력 피처 값들의 하위 비트의 값들을 기초로 선택 제어 신호(CTRL_SEL)를 생성할 수 있다.
다중화기(144)는, 선택 제어 신호(CTRL_SEL)를 기초로, 커널 중간 데이터(KID)에 포함된 복수의 커널 중간 값들 중 하나의 커널 중간 값을 선택함으로써 선택된 커널 중간 값(KIV_SEL)을 생성할 수 있다. 다중화기(144)는 선택된 커널 중간 값(KIV_SEL)을 덧셈기(145)에 제공할 수 있다.
일 실시 예에서, 덧셈기(145), 레지스터(146) 및 쉬프터(147)는, 복수의 입력 피처 값들의 최상위 비트의 값들부터 최하위 비트 값들 까지에 대한 연산이 누적될 때까지, 출력 중간 값을 업데이트하는 동작을 수행할 수 있다.
레지스터(146)는 출력 중간 값을 저장할 수 있다. 레지스터(146)는 현재까지 누적된 누적 출력 중간 값(OIV_acc)을 쉬프터(147)에 제공할 수 있다.
쉬프터(147)는 레지스터(146)에 의해 제공된 누적 출력 중간 값(OIV_acc)을 1-bit 혹은 그 이상의 비트 수 만큼 쉬프트 시킴으로써 쉬프트 된 출력 중간 값(OIV_shift)을 생성할 수 있고, 쉬프트 된 출력 중간 값(OIV_shift)을 덧셈기(145)에 제공할 수 있다.
덧셈기(145)는, 복수의 입력 피처 값들의 최상위 비트에 대한 연산에서는, 선택된 커널 중간 값(KIV_SEL)에 합산 동작을 수행하지 않을 수 있다. 달리 표현하면, 복수의 입력 피처 값들의 최상위 비트에 대한 연산에서는, 덧셈기(145)는 선택된 커널 중간 값(KIV_SEL)에 '0'을 더함으로써 업데이트 된 출력 중간 값(OIV_upd)을 생성해낼 수 있다.
덧셈기(145)는, 복수의 입력 피처 값들의 최상위 비트가 아닌 비트에 대한 연산에서는, 선택된 커널 중간 값(KIV_SEL)에 쉬프트 된 출력 중간 값(OIV_shift)을 합산하는 연산을 수행함으로써 업데이트 된 출력 중간 값(OIV_upd)을 생성해낼 수 있다. 덧셈기(145)는, 업데이트 된 출력 중간 값(OIV_upd)을 레지스터(146)에 제공할 수 있고, 레지스터(146)는 업데이트 된 출력 중간 값(OIV_upd)을 저장할 수 있다.
레지스터(146)는, 복수의 입력 피처 값들의 최하위 비트에 대한 연산에서 업데이트 된 출력 중간 값(OIV_upd)을 출력 피처(OF)로서 출력할 수 있다.
입력 피처 값들이 2-bit 이상의 비트 수를 갖는 경우, 연산 회로(140)의 컨볼루션 연산 방법에 대해서는 도 10을 참조하여 보다 자세히 설명된다.
도 9는 본 개시의 예시적 실시 예에 따른 뉴럴 네트워크 프로세서의 컨볼루션 연산 방법의 순서도를 나타낸다. 도 9는 도 5 및 도 8을 함께 참조하여 설명된다.
뉴럴 네트워크 프로세서(100)는 커널 데이터에 포함된 복수의 웨이트 값들을 기초로 복수의 커널 중간 값들을 생성할 수 있다(S100). 일 실시 예에서, 뉴럴 네트워크 프로세서(100)에 포함된 프로세서(160)는 복수의 웨이트 값들을 선형 결합하는 연산을 수행함으로써 복수의 커널 중간 값들을 생성할 수 있다. 뉴럴 네트워크 프로세서(100)의 내부 메모리(120)에 포함된 커널 중간 데이터 메모리(126)는 생성된 복수의 커널 중간 값들을 저장할 수 있다.
뉴럴 네트워크 프로세서(100)에 포함된 연산 회로(140)는, 복수의 커널 중간 값들 및 입력 피처 맵(IFM)을 수신할 수 있다(S200). 연산 회로(140)는 입력 피처 메모리(122)로부터 입력 피처 맵(IFM)을 수신할 수 있고, 커널 중간 데이터 메모리(126)로부터 복수의 커널 중간 값들을 포함하는 커널 중간 데이터(KID)를 수신할 수 있다.
뉴럴 네트워크 프로세서(100)는, 입력 피처 맵에 포함된 복수의 입력 피처 값들 중 현재(current) 연산에 이용되는 입력 피처 값들을 기초로, 복수의 커널 주간 값들 중 적어도 하나의 커널 중간 값을 선택할 수 있다(S300). 예를 들어, 연산 회로(140)에 포함된 선택 제어 회로(142)는, 입력 피처 값들을 기초로 선택 제어 신호(CTRL_SEL)를 생성할 수 있고, 연산 회로(140)에 포함된 다중화기(144)는, 선택 제어 신호(CTRL_SEL)를 기초로 복수의 커널 중간 값들 중 적어도 하나의 중간 값을 선택할 수 있다.
뉴럴 네트워크 프로세서(100)는, 선택된 커널 중간 값(KIV_SEL) 및 출력 중간 값을 이용해 연산을 수행함으로써 출력 중간 값을 업데이트 할 수 있다(S400). 일 실시 예에서, 연산 회로(140)에 포함된 레지스터(146)는 출력 중간 값을 저장할 수 있고, 누적 출력 중간 값(OIV_acc)을 쉬프터(147)에 제공할 수 있다. 쉬프터(147)는 누적 출력 중간 값(OIV_acc)을 1-bit 쉬프트 시킴으로써 쉬프트 된 출력 중간 값(OIV_shift)을 덧셈기(145)에 제공할 수 있다. 덧셈기(145)는 선택된 커널 중간 값(KIV_SEL)에 쉬프트 된 출력 중간 값(OIV_shift)을 합산함으로써 업데이트 된 출력 중간 값(OIV_upd)을 생성해낼 수 있다.
도 10은 본 개시의 예시적 실시 예에 따른 입력 피처 값들(IF_1, IF_2, IF_3) 및 뉴럴 네트워크 프로세서의 컨볼루션 연산 방법의 순서도를 나타낸다. 도 10은 뉴럴 네트워크 프로세서가 컨볼루션 연산에서, 입력 피처 맵(IFM)에 포함된 제1 입력 피처 값(IF_1), 제2 입력 피처 값(IF_2) 및 제3 입력 피처 값(IF_3)에 커널 데이터를 곱하는 과정을 나타내며, 복수의 입력 피처 값들이 4-bit의 데이터인 경우를 나타낸다. 복수의 입력 피처 값들의 비트 수는 설명의 편의를 위한 예시적인 것일 뿐 이에 제한 해석되어서는 안 된다. 도 10은 도 8을 함께 참조하여 설명된다.
연산 회로(140)는 입력 피처 값들의 최상위 비트인 IF_1[4], IF_2[4] 및 IF_3[4]에 대해 먼저 연산을 수행한다. 선택 제어 회로(142)는 IF_1[4], IF_2[4] 및 IF_3[4]를 기초로 선택 제어 신호(CTRL_SEL)를 생성하고, 다중화기(144)는 선택 제어 신호(CTRL_SEL)에 기초하여 복수의 커널 중간 값들 중 하나의 커널 중간 값을 선택할 수 있다(S1120). 이하에서, 설명의 편의를 위해, S1120 단계와 같은 선택 제어 회로(142) 및 다중화기(144)의 동작을 커널 중간 값 선택 동작이라 칭하기로 한다. 덧셈기(145)는 선택된 커널 중간 값(KIV_SEL)에 '0'을 합산할 수 있다(S1140). 다시 표현하면, 덧셈기(145)는 선택된 커널 중간 값(KIV_SEL)에 합산 동작을 수행하지 않고, 선택된 커널 중간 값(KIV_SEL)을 업데이트 된 출력 중간 값(OIV_upd)으로서 생성할 수 있다. 레지스터(146)는 업데이트 된 출력 중간 값(OIV_upd)을 저장할 수 있다(S1160). 레지스터(146)는 저장된 출력 중간 값을 누적 출력 중간 값(OIV_acc)으로서 쉬프터(147)에 제공할 수 있고, 쉬프터(147)는 누적 출력 중간 값(OIV_acc)을 1-bit 쉬프트 시킴으로써 쉬프트 된 출력 중간 값(OIV_shift)을 생성할 수 있다(S1180).
선택 제어 회로(142) 및 다중화기(1140)는 입력 피처 값들의 다음 비트인 IF_1[3], IF_2[3] 및 IF_3[3]에 대해 커널 중간 값 선택 동작을 수행할 수 있다(S1220). 덧셈기(145)는 선택된 커널 중간 값(KIV_SEL)에 쉬프트 된 출력 중간 값(OIV_shift)을 합산함으로써 업데이트 된 출력 중간 값(OIV_upd)을 생성할 수 있다(S1240). 레지스터(146)는 업데이트 된 출력 중간 값(OIV_upd)을 저장할 수 있다(S1260). 레지스터(146)는 저장된 출력 중간 값을 누적 출력 중간 값(OIV_acc)으로서 쉬프터(147)에 제공할 수 있고, 쉬프터(147)는 누적 출력 중간 값(OIV_acc)을 1-bit 쉬프트 시킴으로써 쉬프트 된 출력 중간 값(OIV_shift)을 생성할 수 있다(S1280).
선택 제어 회로(142) 및 다중화기(1140)는 입력 피처 값들의 다음 비트인 IF_1[2], IF_2[2] 및 IF_3[2]에 대해서는 IF_1[3], IF_2[3] 및 IF_3[3]에 대한 동작과 동일한 방식에 의해 커널 중간 값 선택 동작(S1320), 덧셈 동작(S1340), 레지스터 저장 동작(S1360) 및 쉬프트 동작(S1380)이 수행될 수 있다.
선택 제어 회로(142) 및 다중화기(1140)는 입력 피처 값들의 최하위 비트인 IF_1[1], IF_2[1] 및 IF_3[1]에 대해 커널 중간 값 선택 동작을 수행할 수 있다(S1420). 덧셈기(145)는 선택된 커널 중간 값(KIV_SEL)에 쉬프트 된 출력 중간 값(OIV_shift)을 합산함으로써 업데이트 된 출력 중간 값(OIV_upd)을 생성할 수 있다(S1440). 레지스터(146)는 업데이트 된 출력 중간 값(OIV_upd)을 저장할 수 있다(S1460). 또한 레지스터(146)는 입력 피처 값들의 최하위 비트에 대한 연산에서 업데이트 된 출력 중간 값(OIV_upd)을 출력 피처(OF)로서 출력할 수 있다.
도 11a 내지 도 11c는 본 개시의 예시적 실시 예에 따른 커널 중간 데이터 메모리(126a, 126b, 126c)를 나타낸다. 도 11a 내지 도 11c는 커널 데이터가 3개의 웨이트 값들을 포함하는 경우를 도시하지만, 이는 설명의 편의를 위한 것이며 이에 제한되는 것은 아니다. 다시 말해, 웨이트 값의 개수는 커널 데이터에 따라 달라질 수 있다.
도 11a를 참조하면, 커널 중간 데이터 메모리(126a)는 복수의 커널 중간 값들을 포함하는 커널 중간 데이터(KID)를 저장할 수 있다. 도 11a에 도시된 커널 중간 데이터(KID)는 도 6b와 실질적으로 동일할 수 있다. 제1 커널 중간 값(KIV_1) 내지 제8 커널 중간 값(KIV_8) 각각은 제1 웨이트 값(w_1), 제2 웨이트 값(w_2) 및 제3 웨이트 값(w_3)의 선형 결합에 의해 얻어진 값일 수 있고, 선형 결합에 이용되는 계수(coefficient)는 ‘0’ 및 ‘1’일 수 있다.
도 11b를 참조하면, 커널 중간 데이터 메모리(126a)는 복수의 커널 중간 값들을 포함하는 커널 중간 데이터(KID)를 저장할 수 있다. 제1 커널 중간 값(KIV_1) 내지 제8 커널 중간 값(KIV_8) 각각은 제1 웨이트 값(w_1), 제2 웨이트 값(w_2) 및 제3 웨이트 값(w_3)의 선형 결합에 의해 얻어진 값일 수 있고, 선형 결합에 이용되는 계수는 ‘-1’ 및 ‘1’일 수 있다. 다시 말해, 도 11b를 도 11a와 비교하면, 도 11a의 커널 중간 데이터(KID)에서 이용된 계수 ‘0’을 ‘-1’로 치환한 결과가 도 11b의 커널 중간 데이터(KID)와 동일할 수 있다.
도 11b의 커널 중간 데이터(KID)를 계속 살피면, 제1 커널 중간 값(KIV_1) 내지 제4 커널 중간 값(KIV_4)은 제5 커널 중간 값(KIV_5) 내지 제8 커널 중간 값(KIV_8)과 대칭적인 관계에 있는 것을 확인할 수 있다. 예를 들어, 제1 커널 중간 값(KIV_1)과 제8 커널 중간 값(KIV_8)은 크기가 같되, 부호가 반대이다. 제2 커널 중간 값(KIV_2) 및 제7 커널 중간 값(KIV_7)의 관계도 동일하며, 제3 커널 중간 값(KIV_3) 및 제6 커널 중간 값(KIV_6)의 관계도 동일하며, 제4 커널 중간 값(KIV_4) 및 제5 커널 중간 값(KIV_5)의 관계도 동일하다. 커널 중간 값들의 대칭적인 특징에 기인하여, 커널 중간 데이터(KID)에 포함된 커널 중간 값들의 개수를 도 11b에 비해 절반으로 줄일 수 있고, 커널 중간 값들의 개수가 감소된 실시 예는 도 11c에 도시된다.
도 11c를 참조하면, 커널 중간 데이터 메모리(126c)는 수정된 커널 중간 데이터(MKID)를 저장할 수 있다. 수정된 커널 중간 데이터(MKID)는 복수의 수정된 커널 중간 값들을 포함할 수 있고, 복수의 수정된 커널 중간 값들 각각은 제1 웨이트 값(w_1), 제2 웨이트 값(w_2) 및 제3 웨이트 값(w_3)의 선형 결합에 의해 얻어진 값일 수 있고, 선형 결합에 이용되는 계수는 ‘-1’ 및 ‘1’일 수 있다. 도 11c를 도 11b와 비교하면, 도 11b의 커널 중간 데이터(KID)에 포함된 제1 커널 중간 값(KIV_1) 내지 제4 커널 중간 값(KIV_4)은 도 11c의 수정된 커널 중간 데이터(MKID)에 포함된 제1 수정된 커널 중간 값(MKIV_1) 내지 제4 수정된 커널 중간 값(MKIV_4)에 대응될 수 있다. 다시 말해, 커널 데이터에 포함된 웨이트 값의 개수가 N개(N은 자연수)인 경우, 수정된 커널 중간 데이터(MKID)는 2^(N-1)개의 수정된 커널 중간 값들을 포함할 수 있다.
도 11b를 참조해 설명되었듯이, 도 11b의 커널 중간 값들의 대칭적인 특징에 기인하여, 도 11c의 커널 중간 데이터 메모리(126c)는 도 11b의 커널 중간 데이터 메모리(126b)에 비해 절반의 양에 대응되는 데이터를 저장할 수 있다.
도 11c 이외에 다른 실시 예도 가능할 수 있다. 예를 들어, 제1 수정된 커널 중간 값(MKIV_1)은 도 11b의 제1 커널 중간 값(KIV_1) 및 제8 커널 중간 값(KIV_8) 중 하나에 대응되고, 제2 수정된 커널 중간 값(MKIV_2)은 도 11b의 제2 커널 중간 값(KIV_2) 및 제7 커널 중간 값(KIV_7) 중 하나에 대응되고, 제3 수정된 커널 중간 값(MKIV_3)은 도 11b의 제3 커널 중간 값(KIV_3) 및 제6 커널 중간 값(KIV_6) 중 하나에 대응되고, 제4 수정된 커널 중간 값(MKIV_4)은 도 11b의 제4 커널 중간 값(KIV_4) 및 제5 커널 중간 값(KIV_5) 중 하나에 대응될 수 있다.
도 11b 및 도 11c의 실시 예에 따른 커널 중간 데이터 메모리(126b, 126c)의 경우, 도 11a와 비교할 때, ‘0’이 ‘-1’로 치환되었기 때문에, 컨볼루션 연산에서 커널 중간 값이 선택된 이후, 값을 보정할 필요가 있다. 이를 위해, 이하의 도면에서 설명되는 바와 같이, 연산 회로는 오프셋 보정 회로를 더 포함할 수 있다.
도 12는 본 개시의 예시적 실시 예에 따른 연산 회로(140)를 나타낸다. 연산 회로(140)는 선택 제어 회로(142), 다중화기(144), 연산기(145), 레지스터(146), 쉬프터(147) 및 오프셋 보정 회로(148)를 포함할 수 있다. 도 12는 특히, 커널 중간 데이터 메모리가 도 11c와 같은 수정된 커널 중간 데이터(MKID)를 저장하는 실시 예에 대응되는 연산 회로(140)를 도시한다. 도 12에 관해서, 도 8과 중복되는 설명은 생략하며, 도 8과의 차이점을 중심으로 설명한다.
다중화기(144)는, 선택 제어 회로(142)에 의해 제공되는 선택 제어 신호(CTRL_SEL)에 기초해, 커널 중간 데이터 메모리로부터 수신되는 수정된 커널 중간 데이터(MKID)에 포함된 복수의 수정된 커널 중간 값들 중 적어도 하나의 수정된 커널 중간 값을 선택할 수 있다. 다중화기(144)에 의해 선택된 값을 선택된 수정 커널 중간 값(MKIV_SEL)이라 칭하기로 한다.
연산기(145)는 쉬프트 된 출력 중간 값(OIV_shift) 및 선택된 수정 커널 중간 값(MKIV_SEL)을 이용해 연산을 수행할 수 있다. 연산기(145)에 의해 수행되는 연산의 종류는 선택 제어 회로(142)에 의해 제공되는 연산 선택 신호(OP_SEL)에 기초하여 결정될 수 있다. 일 실시 예에서, 연산기(145)는 연산 선택 신호(OP_SEL)에 기초하여 합산 연산 또는 감산 연산을 수행할 수 있다.
예를 들어, 도 11c를 함께 참조하면, 입력 피처 맵(IFM)에 포함된 복수의 입력 피처 값들 중 현재(current) 연산에 이용되는 입력 피처 값들의 특정 비트(예를 들어, 최상위 비트, 차상위 비트 혹은 최하위 비트 등)에 대응되는 값들이 (0, 0, 0)인 경우, 다중화기(144)는 선택 제어 신호(CTRL_SEL)에 기초해 복수의 수정된 커널 중간 값들 중 제1 수정된 커널 중간 값(MKIV_1)을 선택할 수 있고, 연산기(145)는 연산 선택 신호(OP_SEL)에 기초해 쉬프트 된 출력 중간 값(OIV_shift)에 선택된 수정 커널 중간 값(MKIV_SEL)을 합산할 수 있다.
또한, 다른 예로서, 도 11c를 함께 참조하면, 입력 피처 맵(IFM)에 포함된 복수의 입력 피처 값들 중 현재(current) 연산에 이용되는 입력 피처 값들의 특정 비트(예를 들어, 최상위 비트, 차상위 비트 혹은 최하위 비트 등)에 대응되는 값들이 (1, 1, 0)인 경우, 다중화기(144)는 선택 제어 신호(CTRL_SEL)에 기초해 복수의 수정된 커널 중간 값들 중 제2 수정된 커널 중간 값(MKIV_2)을 선택할 수 있고, 연산기(145)는 연산 선택 신호(OP_SEL)에 기초해 쉬프트 된 출력 중간 값(OIV_shift)에 선택된 수정 커널 중간 값(MKIV_SEL)을 감산할 수 있다.
레지스터(146)는, 복수의 입력 피처 값들의 최하위 비트에 대한 연산에서 업데이트 된 출력 중간 값(OIV_upd)을 최종적으로 출력 중간 값(OIV)으로서 오프셋 보정 회로(148)에 제공할 수 있다.
오프셋 보정 회로(148)는, 수정된 커널 중간 데이터(MKID)에서 ‘0’을 ‘-1’로 치환된 양에 대응되는 값을 출력 중간 값(OIV)에 보정할 수 있다. 이를 위해, 오프셋 보정 회로(148)는 도 13과 같이 덧셈기로 구현될 수 있으며, 일 실시 예에서, 오프셋 보정 회로(148)는 출력 중간 값(OIV)에 오프셋 값을 합산함으로써 출력 피처(OF)를 출력할 수 있다.
도 13은 본 개시의 예시적 실시 예에 따른 오프셋 보정 회로(148)를 나타낸다. 도 13의 오프셋 보정 회로(148)에 관해, 도 12와 중복되는 설명은 생략한다.
오프셋 보정 회로(148)는 출력 중간 값(OIV)을 기초로 출력 피처(OF)를 생성할 수 있다. 예를 들어, 오프셋 보정 회로(148)는 덧셈기로 구현될 수 있으며, 오프셋 보정 회로(148)는 출력 중간 값(OIV)에 오프셋 값(OFS)을 합산함으로써 출력 피처(OF)를 생성해낼 수 있다. 일 실시 예에서, 오프셋 값(OFS)은 현재 연산에 이용되는 커널 데이터에 포함된 복수의 웨이트 값들의 합(sum)과 같을 수 있다. 예를 들어, 도 11c의 실시 예에서, 오프셋 값(OFS)은 이하 [수학식 3]과 같이 제1 웨이트 값(w_1), 제2 웨이트 값(w_2) 및 제3 웨이트 값(w_3)의 합을 '2'로 나눈 값과 같을 수 있다.
Figure pat00003
도 14는 본 개시의 예시적 실시 예에 따른 연산 회로(140)를 나타낸다. 도 14의 연산 회로(140)와 관련하여 도 8과 중복되는 설명은 생략하며, 도 8과의 차이점을 중심으로 설명한다.
[수학식 1] 및 [수학식 2]에서 a_1 및 a_2가 1-bit으로 표현되는 값인 실시 예들이 설명되었으나, a_1 및 a_2는 2-bit 이상으로 표현되는 값일 수도 있다. 도 14는 특히 a_1 및 a_2가 2-bit으로 표현되는 값인 실시 예에 대응되는 연산 회로(140)를 도시한다.
a_1 및 a_2가 2-bit으로 표현되는 경우, 연산 회로(140)는, a_1 및 a_2의 상위 비트에 대한 커널 중간 값을 선택하고, a_1 및 a_2의 하위 비트에 대한 커널 중간 값을 선택한 뒤, 선택된 커널 중간 값들에 연산을 수행함으로써 필요한 결과 값을 얻어낼 수 있다. 다시 말해, 연산 회로(140)는 a_1 및 a_2의 상위 비트에 대응되는 선택 동작을 통해 제1 선택된 커널 중간 값(KIV_SEL_1)을 얻어내고, a_1 및 a_2의 하위 비트에 대응되는 선택 동작을 통해 제2 선택된 커널 중간 값(KIV_SEL_2)을 얻어낸 뒤, 아래와 같은 [수학식 4]의 연산을 통해 연산된 커널 중간 값(KIV_OP)을 얻어낼 수 있다.
Figure pat00004
상기와 같은 동작을 위해, 연산 회로(140)는 다중화 회로(multiplexing circuit; 141) 및 연산기(143)를 포함할 수 있으며, 다중화 회로(141)는 제1 다중화기(144_1) 및 제2 다중화기(144_2)를 포함할 수 있다.
선택 제어 신호(CTRL_SEL)는 제1 선택 제어 신호(CTRL_SEL_1) 및 제2 선택 제어 신호(CTRL_SEL_2)를 포함할 수 있다. 제1 다중화기(144_1)는, 제1 선택 제어 신호(CTRL_SEL_1)에 기초해, 커널 중간 데이터(KID)에 포함된 복수의 커널 중간 값들 중 적어도 하나의 커널 중간 값을 선택할 수 있고, 제1 선택된 커널 중간 값(KIV_SEL_1)을 연산기(143)에 제공할 수 있다. 제2 다중화기(144_2)는, 제2 선택 제어 신호(CTRL_SEL_2)에 기초해, 커널 중간 데이터(KID)에 포함된 복수의 커널 중간 값들 중 적어도 하나의 커널 중간 값을 선택할 수 있고, 제2 선택된 커널 중간 값(KIV_SEL_2)을 연산기(143)에 제공할 수 있다.
연산기(143)는 제1 선택된 커널 중간 값(KIV_SEL_1) 및 제2 선택된 커널 중간 값(KIV_SEL_2)을 이용해 연산을 수행함으로써 연산된 커널 중간 값(KIV_OP)을 생성해낼 수 있다. 일 실시 예에서, 연산기(143)는 [수학식 4]와 같은 연산을 수행할 수 있다. 연산기(143)에 대한 실시 예는 도 15를 참조해 설명된다.
도 15는 본 개시의 예시적 실시 예에 따른 연산기(143)를 나타낸다. 연산기(143)에 관한 도 14와 중복되는 설명은 생략한다.
연산기(143)는 제로 패딩 회로(143_1) 및 덧셈기(143_2)를 포함할 수 있다.
제로 패딩 회로(143_1)는 제1 선택된 커널 중간 값(KIV_SEL_1)의 최하위 비트에 ‘0’을 추가하여 덧셈기(143_2)에 제공할 수 있다. 일 실시 예에서, 제로 패딩 회로(143_1)는 쉬프터로 구현될 수 있다.
덧셈기(143_2)는 ‘0’이 추가된 제1 선택된 커널 중간 값(KIV_SEL_1)과 제2 선택된 커널 중간 값(KIV_SEL_2)을 합산함으로써 연산된 커널 중간 값(KIV_OP)을 생성해낼 수 있다.
상기와 같은 연산기(143)의 동작을 통해, 연산기(143)는 [수학식 4]와 같은 연산을 수행할 수 있다.
도 16은 본 개시의 예시적 실시 예에 따른 연산 회로(140)를 나타낸다. 도 16의 연산 회로(140)와 관련하여 도 8과 중복되는 설명은 생략하며, 도 8과의 차이점을 중심으로 설명한다. 도 16은 특히 a_1 및 a_2가 4-bit으로 표현되는 값인 실시 예에 대응되는 연산 회로(140)를 도시한다.
a_1 및 a_2가 4-bit으로 표현되는 경우, 연산 회로(140)는, a_1 및 a_2의 최상위 비트에 대응되는 선택 동작을 통해 제1 선택된 커널 중간 값(KIV_SEL_1)을 얻어내고, a_1 및 a_2의 차상위 비트에 대응되는 선택 동작을 통해 제2 선택된 커널 중간 값(KIV_SEL_2)을 얻어내고, a_1 및 a_2의 차하위 비트에 대응되는 선택 동작을 통해 제3 선택된 커널 중간 값(KIV_SEL_3)을 얻어내고, a_1 및 a_2의 최하위 비트에 대응되는 선택 동작을 통해 제4 선택된 커널 중간 값(KIV_SEL_4)을 얻어낸 뒤, 아래와 같은 [수학식 5]의 연산을 통해 연산된 커널 중간 값(KIV_OP)을 얻어낼 수 있다.
Figure pat00005
상기와 같은 동작을 위해, 연산 회로(140)는 다중화 회로(multiplexing circuit; 141) 및 연산기(143)를 포함할 수 있으며, 다중화 회로(141)는 제1 다중화기(144_1), 제2 다중화기(144_2), 제3 다중화기(144_3) 및 제4 다중화기(144_4)를 포함할 수 있다.
선택 제어 신호(CTRL_SEL)는 제1 선택 제어 신호(CTRL_SEL_1) 내지 제4 선택 제어 신호(CTRL_SEL_4)를 포함할 수 있다. 제1 다중화기(144_1)는, 제1 선택 제어 신호(CTRL_SEL_1)에 기초해, 커널 중간 데이터(KID)에 포함된 복수의 커널 중간 값들 중 적어도 하나의 커널 중간 값을 선택할 수 있고, 제1 선택된 커널 중간 값(KIV_SEL_1)을 연산기(143)에 제공할 수 있다. 마찬가지의 방식으로, 제4 다중화기(144_4)는, 제4 선택 제어 신호(CTRL_SEL_4)에 기초해, 커널 중간 데이터(KID)에 포함된 복수의 커널 중간 값들 중 적어도 하나의 커널 중간 값을 선택할 수 있고, 제2 선택된 커널 중간 값(KIV_SEL_4)을 연산기(143)에 제공할 수 있다.
연산기(143)는 제1 선택된 커널 중간 값(KIV_SEL_1) 내지 제4 선택된 커널 중간 값(KIV_SEL_4)을 이용해 연산을 수행함으로써 연산된 커널 중간 값(KIV_OP)을 생성해낼 수 있다. 일 실시 예에서, 연산기(143)는 [수학식 5]와 같은 연산을 수행할 수 있다. 연산기(143)에 대한 실시 예는 도 17를 참조해 설명된다.
도 17은 본 개시의 예시적 실시 예에 따른 연산기(143)를 나타낸다. 연산기(143)에 관한 도 16과 중복되는 설명은 생략한다.
연산기(143)는 제1 제로 패딩 회로(143_1), 제1 덧셈기(143_2), 제2 제로 패딩 회로(143_3), 제2 덧셈기(143_4), 제3 제로 패딩 회로(143_5) 및 제5 덧셈기(143_6)를 포함할 수 있다.
제1 제로 패딩 회로(143_1)는 제1 선택된 커널 중간 값(KIV_SEL_1)의 최하위 비트에 ‘0’을 추가하여 제1 덧셈기(143_2)에 제공할 수 있다. 일 실시 예에서, 제1 제로 패딩 회로(143_1)는 쉬프터로 구현될 수 있다.
제1 덧셈기(143_2)는 ‘0’이 추가된 제1 선택된 커널 중간 값(KIV_SEL_1)과 제2 선택된 커널 중간 값(KIV_SEL_2)을 합산함으로써 얻어진 값을 제3 제로 패딩 회로(143_5)에 제공할 수 있다.
제2 제로 패딩 회로(143_3)는 제3 선택된 커널 중간 값(KIV_SEL_3)의 최하위 비트에 ‘0’을 추가하여 제2 덧셈기(143_4)에 제공할 수 있다. 일 실시 예에서, 제2 제로 패딩 회로(143_3)는 쉬프터로 구현될 수 있다.
제2 덧셈기(143_4)는 ‘0’이 추가된 제3 선택된 커널 중간 값(KIV_SEL_3)과 제4 선택된 커널 중간 값(KIV_SEL_4)을 합산함으로써 얻어진 값을 제3 덧셈기(143_6)에 제공할 수 있다.
제3 제로 패딩 회로(143_5)는 제1 덧셈기(143_2)로부터 제공된 값의 최하위 비트에 ‘00’을 추가하여 제3 덧셈기(143_6)에 제공할 수 있다. 일 실시 예에서, 제3 제로 패딩 회로(143_3)는 쉬프터로 구현될 수 있다.
제3 덧셈기(143_6)는 제2 덧셈기(143_4) 및 제3 제로 패딩 회로(143_5)로부터 제공되는 값을 합산함으로써 연산된 커널 중간 값(KIV_OP)을 출력할 수 있다.
상기와 같은 연산기(143)의 동작을 통해, 연산기(143)는 [수학식 5]와 같은 연산을 수행할 수 있다.
도 18은 본 개시의 예시적 실시 예에 따른 연산 회로(140)를 나타낸다. 도 18은 특히, 도 12에 대응되는 실시 예와 도 14에 대응되는 실시 예가 결합된 실시 예를 나타내는 것일 수 있다.
연산 회로(140)는 다중화 회로(141), 선택 제어 회로(142), 제1 연산기(143), 제2 연산기(145), 레지스터(146), 쉬프터(147) 및 오프셋 보정 회로(148)를 포함할 수 있다. 도 18의 제1 연산기(143)는 도 14의 연산기(143)에 대응될 수 있으며, 도 18의 제2 연산기(145)는 도 12의 연산기(145)에 대응될 수 있다.
제1 다중화기(144_1)는, 제1 선택 제어 신호(CTRL_SEL_1)에 기초해, 수정된 커널 중간 데이터(MKID)에 포함된 복수의 수정된 커널 중간 값들 중 제1 선택된 수정 커널 중간 값(MKIV_SEL_1)을 선택할 수 있다. 제2 다중화기(144_2)는, 제2 선택 제어 신호(CTRL_SEL_2)에 기초해, 복수의 수정된 커널 중간 값들 중 제2 선택된 수정 커널 중간 값(MKIV_SEL_2)을 선택할 수 있다.
제1 연산기(143)는, [수학식 4]와 같은 연산을 이용해, 제1 선택된 수정 커널 중간 값(MKIV_SEL_1) 및 제2 선택된 수정 커널 중간 값(MKIV_SEL_2)으로부터 연산된 수정 커널 중간 값(MKIV_OP)을 얻어낼 수 있다.
제2 연산기(145)는 연산된 수정 커널 중간 값(MKIV_OP) 및 쉬프트 된 출력 중간 값(OIV_shift)에 연산 동작을 수행할 수 있고, 연산 동작의 종류는 연산 선택 신호(OP_SEL)에 기초해 결정될 수 있다.
제2 연산기(145), 레지스터(146) 및 쉬프터(147)에 의해 출력 중간 값이 업데이트 될 수 있으며, 오프셋 보정 회로(148)는 레지스터(146)가 제공한 출력 중간 값(OIV)에 오프셋 값을 합산함으로써 출력 피처(OF)를 생성할 수 있다.
상기 개시된 실시 예들 외에, 도 12에 대응되는 실시 예 및 도 16에 대응되는 실시 예가 결합된 실시 예와 같은 다양한 실시 예 또한 가능할 것이다.
이상에서와 같이 도면과 명세서에서 예시적인 실시 예들이 개시되었다. 본 명세서에서 특정한 용어를 사용하여 실시 예들을 설명되었으나, 이는 단지 본 개시의 기술적 사상을 설명하기 위한 목적에서 사용된 것이지 의미 한정이나 특허청구범위에 기재된 본 개시의 범위를 제한하기 위하여 사용된 것은 아니다. 그러므로 본 기술분야의 통상의 지식을 가진 자라면 이로부터 다양한 변형 및 균등한 타 실시 예가 가능하다는 점을 이해할 것이다. 따라서, 본 개시의 진정한 기술적 보호범위는 첨부된 특허청구범위의 기술적 사상에 의해 정해져야 할 것이다.

Claims (10)

  1. 뉴럴 네트워크 연산을 수행하는 뉴럴 네트워크 프로세서에 있어서,
    입력 피처 맵을 저장하는 입력 피처 메모리;
    커널 데이터에 포함된 복수의 웨이트 값들을 기초로 연산된 복수의 커널 중간 값들을 포함하는 커널 중간 데이터를 저장하는 커널 중간 데이터 메모리; 및
    상기 입력 피처 메모리 및 상기 커널 중간 데이터 메모리 각각으로부터 상기 입력 피처 맵 및 상기 커널 중간 데이터를 수신하고, 상기 입력 피처 맵을 기초로 상기 복수의 커널 중간 값들 중 적어도 하나를 선택함으로써 컨볼루션 연산을 수행하도록 구성되는 연산 회로를 포함하는 뉴럴 네트워크 프로세서.
  2. 제1항에 있어서,
    상기 복수의 커널 중간 값들 각각은,
    상기 복수의 웨이트 값들의 선형 결합을 통해 얻어진 값이고, 상기 선형 결합에 이용된 계수(coefficient)는 '0' 또는 '1'인 것을 특징으로 하는 뉴럴 네트워크 프로세서.
  3. 제1항에 있어서,
    상기 복수의 커널 중간 값들 각각은,
    상기 복수의 웨이트 값들의 선형 결합을 통해 얻어진 값이고, 상기 선형 결합에 이용된 계수(coefficient)는 '-1' 또는 '1'인 것을 특징으로 하는 뉴럴 네트워크 프로세서.
  4. 제1항에 있어서,
    상기 연산 회로는,
    상기 입력 피처 맵에 포함된 입력 피처 값들을 기초로 선택 제어 신호를 생성하도록 구성되는 선택 제어 회로; 및
    상기 선택 제어 회로에 의해 제공되는 상기 선택 제어 신호에 기초하여, 상기 복수의 커널 중간 값들 중 하나의 커널 중간 값을 선택하도록 구성되는 다중화기(multiplexer)를 포함하는 것을 특징으로 하는 뉴럴 네트워크 프로세서.
  5. 제4항에 있어서,
    상기 연산 회로는,
    출력 중간 값을 저장하는 레지스터;
    상기 레지스터에 저장된 출력 중간 값을 1-bit 쉬프트시키도록 구성되는 쉬프터(shifter); 및
    상기 다중화기에 의해 선택된 커널 중간 값을 쉬프트 된 출력 중간 값과 합산함으로써 업데이트 된 출력 중간 값을 상기 레지스터에 제공하는 덧셈기(adder)를 더 포함하는 것을 특징으로 하는 뉴럴 네트워크 프로세서.
  6. 제4항에 있어서,
    상기 연산 회로는,
    출력 중간 값을 저장하는 레지스터;
    상기 레지스터에 저장된 출력 중간 값을 1-bit 쉬프트 시키는 쉬프터(shifter); 및
    상기 다중화기에 의해 선택된 커널 중간 값을 쉬프트 된 출력 중간 값과 연산함으로써 업데이트 된 출력 중간 값을 상기 레지스터에 제공하는 연산기(operator)를 더 포함하고,
    상기 연산기에 의해 수행되는 연산의 종류는,
    상기 선택 제어 회로에 의해 제공되는 연산 선택 신호에 기초하여 결정되는 것을 특징으로 하는 뉴럴 네트워크 프로세서.
  7. 제6항에 있어서,
    상기 연산 회로는,
    상기 레지스터에 의해 제공되는 최종 출력 중간 값에 오프셋 값을 합산함으로써 생성된 출력 값을 보상하도록 구성되는 것을 특징으로 하는 뉴럴 네트워크 프로세서.
  8. 제1항에 있어서,
    상기 연산 회로는,
    상기 입력 피처 맵에 포함된 입력 피처 값들을 기초로 선택 제어 신호를 생성하도록 구성되는 선택 제어 회로;
    복수의 다중화기들을 포함하되, 상기 복수의 다중화기들 각각은 상기 선택 제어 회로에 의해 제공되는 상기 선택 제어 신호에 기초하여, 상기 복수의 커널 중간 값들 중 하나의 커널 중간 값을 선택하도록 구성되는 복수의 다중화기들; 및
    상기 복수의 다중화기들에 의해 선택된 커널 중간 값들을 이용해 연산 동작을 수행하는 연산기를 포함하는 것을 특징으로 하는 뉴럴 네트워크 프로세서.
  9. 뉴럴 네트워크 연산을 수행하는 뉴럴 네트워크 프로세서의 컨볼루션 연산 방법에 있어서,
    커널 데이터의 복수의 웨이트 값들을 이용해 연산을 수행함으로써 복수의 커널 중간 값들을 생성하는 단계;
    연산 회로가, 상기 복수의 커널 중간 값들 및 입력 피처 맵을 내부 메모리로부터 수신하는 단계;
    상기 입력 피처 맵에 포함된 입력 피처 값들을 기초로, 상기 복수의 커널 중간 값들 중 적어도 하나의 커널 중간 값을 선택하는 단계; 및
    선택된 커널 중간 값 및 레지스터에 저장된 출력 중간 값을 이용해 연산을 수행함으로써 상기 출력 중간 값을 업데이트 하는 단계를 포함하는 뉴럴 네트워크 프로세서의 컨볼루션 연산 방법.
  10. 제9항에 있어서,
    상기 출력 중간 값을 업데이트 하는 단계는,
    상기 레지스터에 저장된 상기 출력 중간 값을 1-bit 혹은 그 이상의 비트 수 만큼 쉬프트 시키는 단계; 및
    쉬프트 된 출력 중간 값을 상기 선택된 커널 중간 값과 합산하는 단계를 포함하는 것을 특징으로 하는 뉴럴 네트워크 프로세서의 컨볼루션 연산 방법.
KR1020180132559A 2018-10-31 2018-10-31 뉴럴 네트워크 프로세서 및 그것의 컨볼루션 연산 방법 KR102637733B1 (ko)

Priority Applications (4)

Application Number Priority Date Filing Date Title
KR1020180132559A KR102637733B1 (ko) 2018-10-31 2018-10-31 뉴럴 네트워크 프로세서 및 그것의 컨볼루션 연산 방법
US16/524,717 US11244028B2 (en) 2018-10-31 2019-07-29 Neural network processor and convolution operation method thereof
CN201910773855.0A CN111126559A (zh) 2018-10-31 2019-08-21 神经网络处理器及其卷积操作方法
TW108134606A TWI834729B (zh) 2018-10-31 2019-09-25 神經網路處理器及其卷積操作方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020180132559A KR102637733B1 (ko) 2018-10-31 2018-10-31 뉴럴 네트워크 프로세서 및 그것의 컨볼루션 연산 방법

Publications (2)

Publication Number Publication Date
KR20200049366A true KR20200049366A (ko) 2020-05-08
KR102637733B1 KR102637733B1 (ko) 2024-02-19

Family

ID=70328695

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020180132559A KR102637733B1 (ko) 2018-10-31 2018-10-31 뉴럴 네트워크 프로세서 및 그것의 컨볼루션 연산 방법

Country Status (3)

Country Link
US (1) US11244028B2 (ko)
KR (1) KR102637733B1 (ko)
CN (1) CN111126559A (ko)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11687762B2 (en) 2018-02-27 2023-06-27 Stmicroelectronics S.R.L. Acceleration unit for a deep learning engine
US10977854B2 (en) 2018-02-27 2021-04-13 Stmicroelectronics International N.V. Data volume sculptor for deep learning acceleration
US11586907B2 (en) 2018-02-27 2023-02-21 Stmicroelectronics S.R.L. Arithmetic unit for deep learning acceleration
US10741568B2 (en) 2018-10-16 2020-08-11 Silicon Storage Technology, Inc. Precision tuning for the programming of analog neural memory in a deep learning artificial neural network
WO2022139859A1 (en) * 2020-12-23 2022-06-30 Silicon Storage Technology, Inc. Input and digital output mechanisms for analog neural memory in a deep learning artificial neural network
US11961392B2 (en) * 2021-03-04 2024-04-16 The University Of North Carolina At Charlotte Worker-in-the-loop real time safety system for short-duration highway workzones
WO2022193074A1 (zh) * 2021-03-15 2022-09-22 深圳市大疆创新科技有限公司 Rpn网络的后处理方法及装置

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20160026912A1 (en) * 2014-07-22 2016-01-28 Intel Corporation Weight-shifting mechanism for convolutional neural networks
US20160358068A1 (en) * 2015-06-04 2016-12-08 Samsung Electronics Co., Ltd. Reducing computations in a neural network
US20180260711A1 (en) * 2016-01-20 2018-09-13 Cambricon Technologies Corporation Limited Calculating device and method for a sparsely connected artificial neural network
US20180268256A1 (en) * 2017-03-16 2018-09-20 Aquifi, Inc. Systems and methods for keypoint detection with convolutional neural networks

Family Cites Families (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4612435B2 (ja) 2005-02-25 2011-01-12 日本電信電話株式会社 音響モデル学習装置および音声認識装置
JP4801107B2 (ja) 2008-03-06 2011-10-26 日本電信電話株式会社 音声認識装置、方法、プログラム及びその記録媒体
US9563825B2 (en) 2014-11-20 2017-02-07 Adobe Systems Incorporated Convolutional neural network using a binarized convolution layer
US10192162B2 (en) 2015-05-21 2019-01-29 Google Llc Vector computation unit in a neural network processor
US10049322B2 (en) 2015-05-21 2018-08-14 Google Llc Prefetching weights for use in a neural network processor
US9747546B2 (en) 2015-05-21 2017-08-29 Google Inc. Neural network processor
US10438117B1 (en) 2015-05-21 2019-10-08 Google Llc Computing convolutions using a neural network processor
US20180046898A1 (en) 2016-08-11 2018-02-15 Vivante Corporation Zero Coefficient Skipping Convolution Neural Network Engine
US9959498B1 (en) 2016-10-27 2018-05-01 Google Llc Neural network instruction set architecture
US10175980B2 (en) 2016-10-27 2019-01-08 Google Llc Neural network compute tile
KR101827779B1 (ko) 2016-12-05 2018-02-09 포항공과대학교 산학협력단 디지털-아날로그 변환기와 아날로그-디지털 변환기를 이용한 비트 직렬 곱셈누적 연산기
WO2018113790A1 (zh) * 2016-12-23 2018-06-28 北京中科寒武纪科技有限公司 一种人工神经网络运算的装置及方法
US10691975B2 (en) * 2017-07-19 2020-06-23 XNOR.ai, Inc. Lookup-based convolutional neural network
US11593658B2 (en) * 2017-10-20 2023-02-28 Shanghai Cambricon Information Technology Co., Ltd Processing method and device
CN107729994B (zh) * 2017-11-28 2020-05-26 南京地平线机器人技术有限公司 执行卷积神经网络中的卷积层的运算的方法和装置
CN107832842B (zh) * 2017-11-28 2020-05-22 南京地平线机器人技术有限公司 针对折叠特征数据执行卷积运算的方法和装置
GB201801639D0 (en) * 2018-02-01 2018-03-21 Ruff Brendan Patrick Low precision efficient multiplication free convolutional filter bank device
US11941501B2 (en) * 2018-05-30 2024-03-26 Samsung Electronics Co., Ltd. Electronic apparatus and control method thereof
US11455370B2 (en) * 2018-11-19 2022-09-27 Groq, Inc. Flattened input stream generation for convolution with expanded kernel
US20200160161A1 (en) * 2018-11-20 2020-05-21 Korea Advanced Institute Of Science And Technolgy Deep neural network accelerator including lookup table based bit-serial processing elements
US20190149134A1 (en) * 2019-01-14 2019-05-16 Intel Corporation Filter optimization to improve computational efficiency of convolution operations

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20160026912A1 (en) * 2014-07-22 2016-01-28 Intel Corporation Weight-shifting mechanism for convolutional neural networks
US20160358068A1 (en) * 2015-06-04 2016-12-08 Samsung Electronics Co., Ltd. Reducing computations in a neural network
US20180260711A1 (en) * 2016-01-20 2018-09-13 Cambricon Technologies Corporation Limited Calculating device and method for a sparsely connected artificial neural network
US20180268256A1 (en) * 2017-03-16 2018-09-20 Aquifi, Inc. Systems and methods for keypoint detection with convolutional neural networks

Also Published As

Publication number Publication date
US20200133989A1 (en) 2020-04-30
CN111126559A (zh) 2020-05-08
KR102637733B1 (ko) 2024-02-19
TW202018598A (zh) 2020-05-16
US11244028B2 (en) 2022-02-08

Similar Documents

Publication Publication Date Title
KR102637733B1 (ko) 뉴럴 네트워크 프로세서 및 그것의 컨볼루션 연산 방법
CN110033003B (zh) 图像分割方法和图像处理装置
KR102452953B1 (ko) 뉴럴 네트워크의 컨볼루션 연산을 수행하는 방법 및 장치
JP6987860B2 (ja) ハードウェアにおけるカーネルストライドの実行
JP7325158B2 (ja) ニューラル・ネットワーク・コアにおける動的精度のためのデータ表現
US11429838B2 (en) Neural network device for neural network operation, method of operating neural network device, and application processor including the neural network device
EP3373210A1 (en) Transposing neural network matrices in hardware
KR20200091623A (ko) 위노그라드 변환에 기반한 뉴럴 네트워크의 컨볼루션 연산을 수행하는 방법 및 장치
US20200118249A1 (en) Device configured to perform neural network operation and method of operating same
US11562046B2 (en) Neural network processor using dyadic weight matrix and operation method thereof
CN111340077B (zh) 基于注意力机制的视差图获取方法和装置
US11775807B2 (en) Artificial neural network and method of controlling fixed point in the same
JP2020107338A (ja) ニューラルネットワークのコンボルーション演算を処理する方法及びその装置
CN111797881A (zh) 图像分类方法及装置
KR102633139B1 (ko) 데이터를 추출하는 집적 회로, 그것을 포함하는 뉴럴 네트워크 프로세서 및 뉴럴 네트워크 장치
CN112925505A (zh) 算术设备、算术设备的操作方法和神经网络处理器
CN112789627B (zh) 一种神经网络处理器、数据处理方法及相关设备
KR20210124888A (ko) 뉴럴 네트워크 연산 수행을 위한 뉴럴 네트워크 장치, 뉴럴 네트워크 장치의 동작 방법 및 뉴럴 네트워크 장치를 포함하는 애플리케이션 프로세서
WO2021081854A1 (zh) 一种卷积运算电路和卷积运算方法
KR20200129957A (ko) 피처맵 데이터에 대한 압축을 수행하는 뉴럴 네트워크 프로세서 및 이를 포함하는 컴퓨팅 시스템
KR20200062014A (ko) 다이어딕 매트릭스 형태의 웨이트를 이용해 뉴럴 네트워크를 가속하는 장치 및 그것의 동작 방법
WO2023122896A1 (zh) 一种数据处理方法和装置
US20210312269A1 (en) Neural network device for neural network operation, method of operating neural network device, and application processor including neural network device
TWI834729B (zh) 神經網路處理器及其卷積操作方法
KR20200056898A (ko) 프로세싱 장치 및 프로세싱 장치에서 덧셈 연산을 처리하는 방법

Legal Events

Date Code Title Description
A201 Request for examination
E701 Decision to grant or registration of patent right
GRNT Written decision to grant