KR20180052063A - 컨볼루션 신경망 시스템 및 그것의 동작 방법 - Google Patents

컨볼루션 신경망 시스템 및 그것의 동작 방법 Download PDF

Info

Publication number
KR20180052063A
KR20180052063A KR1020170028471A KR20170028471A KR20180052063A KR 20180052063 A KR20180052063 A KR 20180052063A KR 1020170028471 A KR1020170028471 A KR 1020170028471A KR 20170028471 A KR20170028471 A KR 20170028471A KR 20180052063 A KR20180052063 A KR 20180052063A
Authority
KR
South Korea
Prior art keywords
input
weight
kernel
sparse
output
Prior art date
Application number
KR1020170028471A
Other languages
English (en)
Other versions
KR102335955B1 (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 US15/806,111 priority Critical patent/US11003985B2/en
Publication of KR20180052063A publication Critical patent/KR20180052063A/ko
Application granted granted Critical
Publication of KR102335955B1 publication Critical patent/KR102335955B1/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/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/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Health & Medical Sciences (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biomedical Technology (AREA)
  • Biophysics (AREA)
  • Evolutionary Computation (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Artificial Intelligence (AREA)
  • General Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • Computing Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Software Systems (AREA)
  • Neurology (AREA)
  • Complex Calculations (AREA)

Abstract

본 발명의 실시 예에 따른 컨볼루션 신경망 시스템은 희소 가중치 커널에서 '0'이 아닌 값(non-zero value)의 위치를 가리키는 희소 인덱스를 기반으로, 입력 데이터의 입력 값들 중 희소 가중치의 위치와 대응되는 입력 값을 출력하도록 구성되는 데이터 선택기, 및 희소 가중치 커널을 이용하여, 데이터 선택기로부터 출력되는 입력 값에 대한 컨볼루션 연산을 수행하도록 구성되는 곱셈-누산(MAC; multiply accumulate) 연산기를 포함한다.

Description

컨볼루션 신경망 시스템 및 그것의 동작 방법{CONVOLUTION NEURAL NETWORK SYSTEM AND OPERATION METHOD THEREOF}
본 발명은 심층 신경망(deep neural network)에 관한 것으로서, 더욱 상세하게는 컨볼루션 신경망 시스템 및 그것의 동작 방법에 관한 것이다.
최근 영상 인식을 위한 기술로 심층 신경망(Deep Neural Network) 기법의 하나인 컨볼루션 신경망(Convolutional Neural Network; 이하, CNN)이 활발하게 연구되고 있다. 신경망 구조는 사물 인식이나 필기체 인식 등 다양한 객체 인지 분야에서 뛰어난 성능을 보이고 있다. 특히, CNN은 객체 인식에 매우 효과적인 성능을 제공하고 있다.
최근에는 효율적인 CNN 구조가 제시되면서, 신경망을 이용한 인식률을 거의 인간이 인식할 수 있는 수준에까지 이르렀다. 그러나 CNN신경망 구조가 매우 복잡하기 때문에, 큰 연산량이 필요하고, 이에 따라, 고성능 서버 또는 GPU를 이용한 하드웨어 가속 방법이 사용된다. CNN 구조에서, 내부적으로 발생하는 대부분의 연산은 곱셈-누산기(MAC; Multiply-Accumulator)를 사용하여 수행된다. 그러나, CNN 신경망 내의 노드 간 연결 수가 매우 많고 곱셈을 요구하는 파라미터의 수가 많기 때문에 학습과정이나 인식과정에서 큰 연산량이 요구되고, 이로 인하여 큰 하드웨어 자원이 요구된다.
본 발명의 목적은 상술된 기술적 과제를 해결하기 위한 것으로써, 신경망 압축 기술에 따라 생성되는 희소 가중치를 기반으로 컨볼루션 신경망에서, 컨볼루션 연산을 감소시킬 수 있는 컨볼루션 신경망 시스템 및 그것의 동작 방법을 제공하는데 있다.
또한, 본 발명은 희소 가중치를 사용하는 컨볼루션 신경망 시스템에 있어서 효과적인 연산 방법 및 장치를 제공하며, 이에 따른 연산 수행 시간을 단축시켜 전체적인 성능을 향상시키는 것을 목적으로 한다.
본 발명의 실시 예에 따른 컨볼루션 신경망 시스템은 희소 가중치 커널에서 '0'이 아닌 값(non-zero value)의 위치를 가리키는 희소 인덱스를 기반으로, 입력 데이터의 입력 값들 중 상기 희소 가중치의 상기 위치와 대응되는 입력 값을 출력하도록 구성되는 데이터 선택기, 및 상기 희소 가중치 커널을 이용하여, 상기 데이터 선택기로부터 출력되는 상기 입력 값에 대한 컨볼루션 연산을 수행하도록 구성되는 곱셈-누산(MAC, multiply accumulate) 연산기를 포함하고, 상기 희소 가중치 커널은 적어도 하나의 '0'인 가중치 값을 포함한다.
실시 예로서, 상기 데이터 선택기는 입력 값들 중 상기 희소 가중치 커널에서, '0'인 값의 위치와 대응되는 입력 값을 출력하지 않도록 구성된다.
실시 예로서, 상기 컨볼루션 신경망 시스템은 외부 메모리로부터 상기 입력 데이터의 일부인 입력 타일을 저장하도록 구성되는 입력 버퍼 장치, 및 상기 MAC 연산기로부터의 상기 컨볼루션 연산의 결과 값을 저장하고, 상기 저장된 결과 값을 상기 외부 메모리로 제공하도록 구성되는 출력 버퍼 장치를 더 포함한다.
실시 예로서, 상기 컨볼루션 신경망 시스템은 외부 메모리로부터 상기 희소 가중치 커널을 수신하고, 상기 수신된 희소 가중치 커널을 상기 MAC 연산기로 제공하고, 상기 희소 가중치 커널의 상기 희소 인덱스를 상기 데이터 선택기로 제공하도록 구성되는 가중치 커널 버퍼 장치를 더 포함한다..
실시 예로서, 상기 데이터 선택기는 스위치 회로, 및 복수의 멀티플렉서(MUX, multiplexer)를 포함한다. 상기 스위치 회로는 상기 희소 가중치 커널을 기반으로 상기 입력 값들 각각을 상기 복수의 MUX로 제공하도록 구성되고, 상기 복수의 MUX 각각은 상기 희소 인덱스를 기반으로, 상기 스위치 회로에 의해 제공되는 상기 입력 값들 중 상기 희소 가중치의 위치와 대응되는 입력 값을 선택하여 출력하도록 구성된다.
실시 예로서, 상기 MAC 연산기는 상기 복수의 MUX 각각으로부터 출력되는 입력 값을 각각 수신하고, 상기 희소 가중치 커널을 기반으로 상기 수신된 입력 값에 대한 컨볼루션 연산을 각각 수행하도록 구성되는 복수의 MAC 코어를 포함한다.
실시 예로서, 상기 복수의 MAC 코어 각각은 상기 입력 값 및 상기 희소 가중치에 대한 곱셈 연산을 수행하도록 구성되는 곱셈기, 상기 곱셈 연산의 결과 및 이전 덧셈 연산의 결과에 대한 덧셈 연산을 수행하도록 구성되는 가산기, 및 상기 덧셈 연산의 결과를 저장하도록 구성되는 레지스터를 포함한다.
실시 예로서, 상기 희소 가중치 커널은 신경망 압축을 통해 완전 가중치 커널로부터 변환된 가중치 커널이고, 상기 완전 가중치 커널은 '0'이 아닌 가중치 값들로 구성된 컨볼루션 신경망 시스템.
실시 예로서, 상기 신경망 압축은 상기 완전 가중치 커널에 대한 파라미터 제거 기법, 가중치 공유 기법, 또는 파라미터 양자화 기법 중 적어도 하나를 기반으로 수행된다.
본 발명의 실시 예에 따른 컨볼루션 신경망 시스템은 외부 메모리로부터 복수의 입력 값을 포함하는 입력 타일을 수신하고, 상기 수신된 입력 타일의 상기 복수의 입력 값을 저장하도록 구성되는 입력 버퍼 장치, 희소 가중치 커널에서 '0'이 아닌 희소 가중치의 위치를 가리키는 희소 인덱스를 기반으로, 상기 입력 버퍼 장치로부터의 상기 복수의 입력 값 중 적어도 하나의 입력 값을 출력하도록 구성되는 데이터 선택기, 상기 데이터 선택기로부터 출력되는 상기 적어도 하나의 입력 값 및 상기 희소 가중치를 기반으로 컨볼루션 연산을 수행하도록 구성되는 곱셈-누산(MAC, multiply-accumulate) 연산기, 및 상기 MAC 연산기로부터의 상기 컨볼루션 연산의 결과 값을 저장하고, 상기 저장된 결과 값을 출력 타일로써 상기 외부 메모리로 제공하도록 구성되는 출력 버퍼 장치를 포함한다.
실시 예로서, 상기 데이터 선택기는 스위치 회로, 및 복수의 멀티플렉서(MUX, multiplexer)를 포함하고, 상기 스위치 회로는 상기 입력 타일의 크기 및 상기 희소 가중치 커널을 기반으로, 상기 복수의 입력 값 각각을 상기 복수의 MUX 각각으로 연결하도록 구성되고, 상기 복수의 MUX 각각은 상기 희소 인덱스를 기반으로, 상기 연결된 입력 값들 중 상기 희소 가중치의 위치와 대응되는 상기 적어도 하나의 입력 값을 선택하여 출력하도록 구성된다.
실시 예로서, 상기 복수의 MUX 각각은 상기 희소 가중치 커널에서 '0'인 가중치의 위치와 대응되는 입력 값을 출력하지 않는다.
실시 예로서, 상기 복수의 MUX 각각으로부터의 상기 적어도 하나의 입력 값은 상기 희소 가중치의 위치와 대응되는 입력 값이다.
실시 예로서, 상기 희소 가중치 커널이 K×K (단, K는 자연수)의 크기를 갖는 경우, 상기 스위치 회로는 상기 복수의 MUX 각각으로 2K개의 입력 값들을 연결하도록 구성된다.
실시 예로서, 상기 MAC 연산기는 상기 복수의 MUX 각각으로부터의 상기 적어도 하나의 입력 값 및 상기 희소 가중치 커널을 기반으로 상기 컨볼루션 연산을 각각 수행하도록 구성되는 복수의 MAC 코어를 포함한다.
본 발명의 실시 예에 따른 컨볼루션 신경망 시스템의 동작 방법은 입력 데이터의 일부인 입력 타일을 저장하는 단계, 희소 가중치 커널을 기반으로 상기 입력 타일의 입력 값들 각각을 복수의 멀티플렉서(MUX, multiplexer) 각각으로 연결하는 단계, 상기 복수의 MUX 각각에서, 상기 희소 가중치 커널에 대한 희소 인덱스를 기반으로 상기 연결된 입력 값들 중 적어도 하나를 선택하는 단계, 상기 희소 가중치 커널을 사용하여 상기 선택된 적어도 하나의 입력 값에 대한 컨볼루션 연산을 수행하는 단계, 상기 컨볼루션 연산의 결과를 누적하는 단계, 및 상기 누적된 결과를 출력 타일로써 외부 메모리로 제공하는 단계를 포함한다.
실시 예로서, 상기 복수의 MUX 각각에서, 상기 희소 가중치 커널에 대한 희소 인덱스를 기반으로 상기 연결된 입력 값들 중 적어도 하나를 선택하는 단계는, 상기 희소 가중치 커널에서 '0'이 아닌 가중치의 위치와 대응되는 입력 값들을 선택하고, 상기 희소 가중치 커널에서 '0'인 가중치의 위치와 대응되는 입력 값들을 선택하지 않는 단계를 포함한다.
본 발명에 따르면, 희소(sparse) 행렬로 구성되는 파라미터(예를 들어, 가중치 커널)를 사용하는 컨볼루션 신경망 알고리즘의 연산을 보다 효과적으로 수행하는 컨볼루션 신경망 시스템이 제공된다.
본 발명에 따른 컨볼루션 신경망 시스템은 희소 행렬을 기반으로 입력 데이터에 대한 컨볼루션 연산을 선택적으로 수행할 수 있다. 따라서, 본 발명에 따른 컨볼루션 신경망 시스템은 작은 하드웨어에서 효과적인 연산 흐름을 갖게 되므로, 컨볼루션 신경망 시스템의 전제적인 연산 효율이 향상된다.
또한, 본 발명에 따른 컨볼루션 신경망 시스템은 희소 가중치 커널을 처리함에 있어서, 효과적인 하드웨어 구조를 제공할 수 있다. 일반적으로 하드웨어 구성은 등배열로 구현되고 반복성을 갖도록 동작이 되는 것이 좋기 때문에, 본 발명에 따른 컨볼루션 신경망 시스템은 하드웨어 배열 규칙성(regularity)를 유지하면서도 효과적으로 하드웨어 엔진을 운용할 수 있다.
도 1은 본 발명의 실시 예에 따른 컨볼루션 신경망(CNN; Convolution Neural Network)에서 구현되는 계층들을 예시적으로 보여주는 도면이다.
도 2는 도 1의 CNN에서의 컨볼루션 계층의 동작을 설명하기 위한 도면이다.
도 3은 부분 컨볼루션 연산을 수행하는 CNN 시스템을 구현하기 위한 하드웨어 구성을 예시적으로 보여주는 블록도이다.
도 4는 도 3의 CNN 시스템의 컨볼루션 연산을 설명하기 위한 도면이다.
도 5는 본 발명의 희소 가중치 커널을 예시적으로 보여주는 도면이다.
도 6은 본 발명의 실시 예에 따른 CNN 시스템의 하드웨어 구성을 보여주는 블록도이다.
도 7은 도 6의 CNN 시스템을 더욱 상세하게 보여주는 블록도이다.
도 8 및 도 9는 도 7의 CNN 시스템의 동작을 더욱 상세하게 설명하기 위한 도면들이다.
도 10은 본 발명에 따른 컨볼루션 신경망 시스템의 동작을 간략하게 보여주는 순서도이다.
이하에서, 본 발명의 기술 분야에서 통상의 지식을 가진 자가 본 발명을 용이하게 실시할 수 있을 정도로, 본 발명의 실시 예들이 명확하고 상세하게 기재될 것이다.
일반적으로, 컨볼루션(Convolution) 연산은 두 함수 간의 상관관계를 검출하기 위한 연산을 가리킨다. '컨볼루션 신경망(Convolutional Neural Network; 이하에서, CNN이라 칭함)'이라는 용어는 입력 데이터 또는 특정 피처(Feature)를 가리키는 커널(Kernel)과 특정 파라미터(예를 들어, 가중치, 바이어스 등) 사이의 컨볼루션 연산을 반복 수행함으로써, 이미지의 패턴을 결정하거나 또는 이미지의 특징을 추출하는 과정 또는 시스템을 통칭할 수 있다.
이하에서, 특정 연산 동작을 위하여 CNN 시스템으로 제공되거나 또는 특정 연산의 결과로 생성 또는 출력되는 값은 데이터라 칭한다. 데이터는 CNN 시스템으로 입력되는 이미지 또는 CNN 시스템 내의 특정 계층에서 생성되는 특징 맵(feature map) 또는 특정 값들을 가리킬 수 있다.
또한, 입력 데이터에 대한 신호 처리(예를 들어, 컨볼루션 연산)에서 사용되는 필터, 윈도우, 마스크 등은 커널(kernel)의 용어로 통칭된다. 또한, 이하의 상세한 설명에서, 본 발명의 실시 예를 명확하게 설명하고, 실시 예들의 모호함을 피하기 위하여, 당업자에 의해 잘 알려진 기능, 구성, 회로, 시스템, 또는 동작들은 생략된다.
또한, 상세한 설명 또는 도면에서 사용되는 기능 블록들은 본 발명의 실시 예에서 소프트웨어, 하드웨어, 또는 그것들의 조합으로 구현될 수 있으며, 소프트웨어는 기계 코드, 펌웨어, 임베디드 코드, 및 애플리케이션 소프트웨어일 수 있고, 하드웨어는 회로, 프로세서, 컴퓨터, 집적 회로, 집적 회로 코어들, 압력 센서, 관성 센서, 멤즈(MEMS; microelectromechanical system), 수동 소자들, 또는 그것들의 조합일 수 있다.
도 1은 본 발명의 실시 예에 따른 컨볼루션 신경망에서 구현되는 계층들(layers)을 예시적으로 보여주는 도면이다. 도 1을 참조하면, 컨볼루션 신경망(Convolutional Neural Network; 이하에서, "CNN"이라 칭함)(10)은 다양한 계층들에서의 다양한 연산(예를 들어, 컨볼루션 연산, 서브-샘플링 등)을 통해 입력 데이터를 완전 연결 계층으로 출력할 수 있다.
예를 들어, 제1 데이터(D1)가 CNN(10)으로 입력되는 입력 데이터이며, 1×28×28 픽셀 크기를 갖는 그레이(gray) 이미지인 것으로 가정한다. 즉, 제1 데이터(D1)의 채널 깊이는 '1'일 것이다. 제1 데이터(D1)가 CNN(10)으로 입력되면, 제1 계층(L1)은 제1 커널(K1)을 사용하여, 제1 데이터(D1)에 대한 컨볼루션 연산을 수행하여 제2 데이터(D2)를 출력 또는 생성할 수 있다. 예를 들어, 제1 계층(L1)은 컨볼루션 계층일 수 있다. 제1 커널(K1)이 5×5의 크기를 갖고, 제1 데이터(D1)의 에지(edge) 영역에서 데이터 패딩 없이 컨볼루션 연산이 수행되는 경우, 제2 데이터(D2)는 24×24의 크기를 갖고, 제2 데이터(D2)는 20개의 채널을 가질 것이다. 즉, 제2 데이터(D2)는 24×24×20(데이터 폭×데이터 너비×채널)의 크기로 출력될 수 있다.
이후에, 제2 계층(L2)은 제2 데이터(D2)에 대한 풀링 동작을 수행하여 제3 데이터(D3)를 출력 또는 생성할 수 있다. 예를 들어, 제2 계층(L2)은 풀링 계층(pooling layer)일 수 있다. 제2 계층(L2)에서의 풀링 동작은 제2 데이터(D2)에 대하여, 공간(spatial) 도메인 상에서 채널 수는 유지하면서 채널의 폭(width)과 높이(height)를 조정하는 동작을 가리킨다. 좀 더 상세한 예로써, 제2 계층(L2)이 2×2의 크기를 갖는 제2 커널(K2)을 사용하여 풀링 동작을 수행하는 경우, 제2 계층(L2)으로부터 생성된 제3 데이터(D3)는 12×12의 크기를 갖고, 20개의 채널을 가질 것이다. 즉, 제3 데이터(D3)는 20×12×12(채널×데이터 폭×데이터 너비)의 크기로 출력될 수 있다.
이후에, 제3 계층(L3)은 제3 커널(K3)을 사용하여, 제3 데이터(D3)에 대한 컨볼루션 연산을 수행하여, 제4 데이터(D4)를 출력 또는 생성할 수 있다. 이후에, 제4 계층(L4)은 제4 커널(K4)을 사용하여 제4 데이터에 대한 풀링 동작을 수행하여, 제5 데이터(D5)를 출력 또는 생성할 수 있다. 이 때, 제4 데이터(D4)는 50×8×8(채널×데이터 폭×데이터 너비)의 크기로 출력될 수 있고, 제5 데이터(D5)는 50×4×4(채널×데이터 폭×데이터 너비)의 크기로 출력될 수 있다. 예시적으로, 제3 및 제4 계층들(L3, L4) 각각은 컨볼루션 계층 및 풀링 계층일 수 있으며, 제1 및 제2 계층들(L1, L2)과 유사한 동작을 수행할 수 있다. 예시적으로, 제1 내지 제4 계층들(L1~L4)에 대한 동작들은 특정 조건이 만족될 때까지 반복 수행될 수 있다.
제5 계층(L5)은 제5 데이터(D5)에 대한 완전 연결망(FCN; full connected network) 동작을 수행하여, 완전 연결 데이터(20)를 출력할 수 있다. 예시적으로, 제5 계층(L5)은 완전 연결 계층(full connected layer)은 제1 또는 제3 계층(L1, L3)의 컨볼루션 계층과 달리, 커널을 사용하지 않으며, 입력 데이터의 전체 노드가 출력 데이터의 전체 노드와 모든 연결 관계를 유지할 수 있다.
예시적으로, 도 1에 도시된 CNN(10)의 각 계층들(L1~L5)은 간략화된 것이며, 실제 CNN(10)은 더 많은 계층들을 포함할 수 있다.
예시적으로, 도 1의 각 계층(L1~L5)에서의 파라미터의 개수 및 연결 개수는 표 1과 같을 수 있다. 예시적으로, 표 1에 기재된 수치들은 도 1에 도시된 각 데이터의 사이즈에 기반된 것으로써, 예시적인 것이다.
계층 제1 계층(L1)
컨볼루션 계층
제3 계층(L3)
컨볼루션 계층
제5 계층(L5)
완전 연결 계층
가중치 개수 500 25,000 400,000
바이어스 개수 20 50 500
연결 개수 299,520 1,603,200 400,500
표 1을 참조하면, 각 계층의 가중치 개수는 {출력 채널의 개수*입력 채널의 개수*커널의 높이*커널의 너비}이다. 즉, 제1 계층(L1)에 대하여, 출력 채널의 개수는 20이고, 입력 채널의 개수는 1이고, 커널의 높이는 5이고, 커널의 너비는 5이므로, 제1 계층(L1)에서 사용되는 가중치의 개수는 20*1*5*5=500개이다. 마찬가지로, 제3 계층(L3)에서 사용되는 가중치의 개수는 25,000개이고, 제5 계층(L5)에서 사용되는 가중치의 개수는 400,000개이다.
각 계층의 바이어스의 개수는 {출력 채널의 개수}이다. 즉, 제1 계층(L1)에 대하여, 출력 채널의 개수는 20이므로, 제1 계층(L1)에서 사용되는 바이어스의 개수는 20개이다. 마찬가지로, 제3 계층(L3)에서 사용되는 바이어스의 개수는 50이고, 제5 계층(L5)에서 사용되는 바이어스의 개수는 500이다.
각 계층의 연결 개수는 {파라미터의 개수*출력 데이터의 높이*출력 데이터의 너비}와 동일하다. 파라미터의 개수는 가중치의 개수 및 바이어스의 개수의 합을 가리킨다. 즉, 제1 계층(L1)에 대하여, 파라미터의 개수는 520개이고, 출력 데이터의 높이는 24이고, 출력 데이터의 너비는 24이므로, 제1 계층(L1)의 연결 개수는 520*24*24=299,520개이다. 마찬가지로, 제3 계층(L3)의 연결 개수는 1,603,200개이고, 제5 계층(L5)의 연결 개수는 400,500개이다.
표 1에 개시된 바와 같이, 컨볼루션 계층(예를 들어, L1, L3)은 완전 연결 계층(예를 들어, L5)보다 적은 파라미터의 개수를 갖는다. 그러나, 일부 컨볼루션 계층(예를 들어, L3)은 완전 연결 계층(예를 들어, L5)보다 더 많은 연결 수를 갖기 때문에, 일부 컨볼루션 계층에서는 더 많은 연산량을 요구한다. 이러한 컨볼루션 계층의 연산량을 감소시키기 위한 다양한 방법들이 개발되고 있다.
예시적으로, 앞서 설명된 바와 유사하게, 신경망은 입력 계층(Input layer), 히든 계층(Hidden layer), 및 출력 계층(Output layer)을 포함할 수 있다. 입력 계층은 학습을 수행하기 위한 입력 데이터를 수신하여 히든 계층으로 전달하도록 구성되고, 출력 계층은 히든 계층으로부터의 데이터를 기반으로 신경망의 출력을 생성하도록 구성된다. 히든 계층은 입력 계층을 통해 전달된 입력 데이터를 예측하기 쉬운 값으로 변화시킬 수 있다. 입력 계층과 히든 계층에 포함된 노드들은 가중치를 통해서 서로 연결되고, 히든 계층과 출력 계층에 포함된 노드들에서도 가중치를 통해 서로 연결될 수 있다.
신경망에서 입력 계층과 히든 계층 사이에 연산 처리량은 입출력 데이터들의 수 또는 크기에 따라 결정될 수 있다. 또한, 각 계층의 깊이가 깊어질수록 가중치의 크기 및 입출력 계층에 따른 연산 처리량이 급격하게 증가할 수 있다. 따라서, 신경망을 하드웨어로 구현하기 위하여 이러한 파라미터의 크기를 줄이기 위한 방법 또는 장치가 요구될 수 있다.
예를 들어, 파라미터의 크기를 줄이기 위한 방법으로써, 신경망 압축이 사용될 수 있다. 신경망 압축은 파라미터 제거(Drop out) 기법, 가중치 공유 기법, 양자화 기법 등을 포함할 수 있다. 파라미터 제거 기법은 신경망 내부의 파라미터들 중에서 가중치가 낮은 파라미터를 제거하는 방법이다. 가중치 공유 기법은 가중치가 비슷한 파라미터를 서로 공유하여 처리할 파라미터의 수를 감소시키는 기법이다. 그리고 양자화 기법은 가중치와 입출력 계층 및 히든 계층의 비트들의 크기를 양자화하여 파라미터의 수를 줄이기 위해 사용된다. 이상에서는 CNN(10)의 각 계층별 데이터와 커널들, 그리고 연결 파라미터들이 간략히 설명되었다.
도 2는 도 1의 CNN에서의 컨볼루션 계층의 동작을 설명하기 위한 도면이다. 간결한 설명을 위하여, CNN(10)의 컨볼루션 계층을 설명하는데 불필요한 구성 요소들은 생략된다. 또한, 컨볼루션 계층은 도 1의 제1 계층(L1)인 것으로 가정한다.
도 1 및 도 2를 참조하면, 입력 데이터(Din)는 N×W×H의 크기를 갖고, 입력 데이터(Din)에 대하여 컨볼루션 연산이 수행된 출력 데이터(Dout)는 M×C×R의 크기를 갖는다. 이 때, N은 입력 데이터(Din)의 채널의 개수를 가리키고, W는 입력 데이터(Din)의 너비를 가리키고, H는 입력 데이터(Din)의 높이를 가리킨다. M은 출력 데이터(Dout)의 채널의 개수를 가리키고, C는 출력 데이터(Dout)의 너비를 가리키고, R은 출력 데이터(Dout)의 높이를 가리킨다.
제1 계층(L1)의 곱셈-누산(MAC; Multiply Accumulate) 코어(L1_1)는 복수의 커널(KER_1~KER_M)을 기반으로, 입력 데이터(Din)에 대한 컨볼루션 연산을 수행하여 출력 데이터(Dout)를 생성할 수 있다. 예를 들어, 복수의 커널(KER_1~KER_M) 각각은 N×K×K의 크기를 가질 수 있다. MAC 코어(L1_1)는 K×K 사이즈의 커널과 입력 데이터(Din)의 중첩되는 데이터들 각각이 서로 곱할 수 있다(Multiplexing). MAC 코어(L1_1)는 입력 데이터(Din)의 각 채널 별로 곱해진 데이터의 값을 합산(Accumulation)하여 하나의 출력 데이터의 값(즉, 1×1×1의 데이터 값)으로 생성할 수 있다. MAC 코어(L1_1)는 이러한 연산 동작을 반복 수행하여, 복수의 커널(KER_1~KER_M) 각각에 대한 출력 데이터(Dout)를 생성할 수 있다. 이 때, 출력 데이터(Dout)의 채널의 개수는 복수의 커널(KER_1~KER_M)의 개수(즉, M개)와 동일할 것이다.
예시적으로, MAC 코어(L1_1)는 가산기, 곱셈기, 레지스터 등을 사용하여 상술된 컨볼루션 연산을 수행할 수 있다. 예를 들어, MAC 코어(L1_1)의 곱셈기는 입력 데이터의 입력 값 및 대응하는 가중치 값에 대한 곱셈 연산을 수행할 수 있다. 가산기는 곱셈 연산의 결과 및 레지스터에 저장된 이전 연산의 결과에 대한 덧셈 연산을 수행할 수 있다. 레지스터는 덧셈 연산의 결과값을 저장할 수 있다. 이후, 다른 입력 값이 MAC 코어(L1_1)로 입력되고, 상술된 연산을 반복 수행함으로써, 컨볼루션 연산이 수행될 수 있다.
그러나, 본 발명의 범위가 이에 한정되는 것은 아니며, MAC 코어(L1_1) 대신에 단순한 가산기, 곱셈기, 및 별도의 저장 회로 등을 통해 상술된 컨볼루션 연산이 구현될 수 있다. 바이어스(BIAS)는 채널의 수(M)의 크기로 출력 데이터(Dout)에 더해질 수 있다.
예시적으로, 상술된 컨볼루션 연산의 흐름은 표 2와 같이 표현될 수 있다. 표 2에 기재된 알고리즘 구성 또는 프로그램 코드는 컨볼루션 연산의 흐름을 예시적으로 보여주기 위한 것이며, 본 발명의 범위가 이에 한정되는 것은 아니다.
// Basic convolution computation
for ( row=0 ; row<R ; row++) {
for ( col=0 ; col<C ; col++) {
for ( to=0 ; to<M ; to++) {
for ( ti=0 ; ti<N ; ti++) {
for ( i=0 ; i<K ; i++) {
for ( j=0 ; j<K ; j++) {
output [to] [row] [col] +=
weights [to] [ti] [i] [j] *
input [ti] [ S*row+i] [ S*col+j] ;
}}}}}
표 2를 참조하면, input 은 입력 데이터(Din)이고 output은 출력 데이터(Dout)이다. R, C, M, N, K는 상술된 입력 데이터(Din) 및 출력 데이터(Dout)의 크기를 나타내는 변수들이다. H, W와 R, C의 상관 관계는 H=R+K-1이며, W=C+K-1로 표현될 수 있다.
상술된 컨볼루션 연산의 흐름에 따르면, 입출력 데이터의 크기가 매우 클 경우, 연산을 위한 메모리의 대역폭의 제한으로 인하여, 정상적인 연산 동작이 어려울 수 있다.
상술된 바와 같은 CNN(10)을 효율적으로 하드웨어로 구현하기 위해서는 다양한 요건들이 고려되어야 한다. 예를 들어, CNN(10)을 하드웨어로 구현하기 위해서는, 데이터 및 파라미터 전송을 위해 필요한 메모리 대역폭을 최소화하는 것이 요구된다. 객체를 인식하기 위해서는 카메라로부터 입력되는 실시간 영상 데이터나 외부 메모리에 저장된 이미지 데이터가 CNN(10)을 구성하는 하드웨어 회로로 입력된다. 구체적인 예로써, 실시간 영상에서 초당 약 30프레임을 지원하기 위해서는 매우 큰 메모리 대역폭이 요구된다. 3개 채널(레드, 그린, 블루) 각각에서 640×480의 크기를 갖는 픽셀 데이터를 지원하기 위해서는, 초당 28MByte의 데이터가 입력 계층으로 지속적으로 입력되어야 한다. 또한, 입력 데이터와 별도로 컨볼루션 연산과 같은 다양한 연산에 사용되는 파라미터 데이터가 하드웨어 회로 입력되어야 한다. 일 예로써, AlexNet은 단일 이미지를 인식할 때마다 약 61,000,000개의 파라미터를 필요로 한다. 각각의 파라미터의 비트 폭이 16-bit라고 가정할 경우, 128MByte의 크기를 갖는 파라미터가 요구된다. 뿐만 아니라, 하드웨어 회로가 내부적으로 데이터와 파라미터가 동시에 연산하는 구조를 가지고 있기 때문에, 외부 메모리와 출력 데이터 및 파라미터를 수시로 교환해야 한다.
또한, CNN(10)을 구현하기 위한 하드웨어 회로에 포함된 컨볼루션 연산기를 효과적으로 구현함으로써 연산처리 성능을 향상시켜야 한다. 일반적으로 컨볼루션(convolution) 연산은 어레이(array) 구조로 배열된 프로세싱 엘리먼트(processing element)를 이용하여 수행된다. 이러한 어레이 구조 연산기에서는, 가중치(weight)와 바이어스(bias)로 구성되어 있는 파라미터(parameter)에 대한 제어 및 입출력 데이터의 버퍼링(buffering)에 대한 제어가 중요하다. 또한, 단위 시간 동안 처리되는 처리율을 향상시키기 위해서는, 배열 구조의 컨벌버 연산기로 입력하는 파라미터 버퍼링이 중요하다.
상술된 요건들을 고려하면, 입력 데이터, 출력 데이터, 또는 파라미터를 적절하게 분할함으로써, 많은 연산량을 처리하는 연산 하드웨어를 효율적으로 설계할 수 있다. 예를 들어, CNN(10)은 입력 데이터를 일정하게 분할하고, 분할된 데이터 단위로 입력 데이터를 읽고, 처리할 수 있다. 이후에, MAC 코어(L1_1)는 분할된 개수만큼 반복적으로 연산을 처리하여, 연산 결과를 외부 메모리에 저장할 수 있다. 즉, CNN(10)의 하드웨어 자원이 한정되어 있기 때문에, 입력 데이터를 분할하여 연산하는 부분 컨볼루션 연산을 반복적으로 사용함으로써, 하드웨어 자원의 한정을 극복할 수 있다.
도 3은 부분 컨볼루션 연산을 수행하는 CNN 시스템을 구현하기 위한 하드웨어 구성을 예시적으로 보여주는 블록도이다. 도 3에서, 본 발명의 실시 예에 따른 신경망 시스템을 FPGA나 GPU 등의 하드웨어로 구현하기 위한 필수 구성들이 도시된다. 이하의 도면 및 상세한 설명에서 기재된 기능 블록들은 하드웨어 구성, 소프트웨어 구성, 또는 그것들의 조합으로 구현될 수 있다.
도 3을 참조하면, CNN 시스템(100)은 입력 버퍼 장치(110), 곱셈-누산(MAC; Multiply Accumulate) 연산기(120), 출력 버퍼 장치(130), 및 가중치 커널 버퍼 장치(140)를 포함할 수 있다. CNN(100)은 외부 메모리(101)와 연결되어, 입력 데이터의 일부(Din_T), 가중치 커널, 및 출력 데이터의 일부(Dout_T)를 교환하도록 구성될 수 있다.
예를 들어, 입력 버퍼 장치(110)는 입력 데이터의 일부(Din_T)를 외부 메모리(101)로부터 로드할 수 있다. 예를 들어, 상술된 바와 같은 부분 연산을 수행하기 위하여, 입력 데이터가 일정하게 분할될 수 있다. 입력 버퍼 장치(110)는 분할된 입력 데이터의 일부(Din_T)를 외부 메모리(101)로부터 로드할 수 있다. 간결한 설명을 위하여, 입력 버퍼 장치(110)로 로드되는 입력 데이터의 일부(Din_T)는 입력 타일(input tile)이라 칭한다.
예시적으로, 입력 버퍼 장치(110)의 크기는 컨볼루션 연산을 위한 커널(Kernel)의 사이즈에 따라 가변될 수 있을 것이다. 예를 들면, 커널의 사이즈가 K×K인 경우, MAC 연산기(120)에 의한 커널과의 컨볼루션 연산을 순차적으로 수행하기 위한 충분한 크기의 입력 데이터가 입력 버퍼 장치(110)로 로드되어야 할 것이다. 즉, 커널의 크기를 기반으로 입력 버퍼 장치(110)의 크기 또는 입력 타일(Din_T)의 크기가 결정될 수 있다.
MAC 연산기(120)는 입력 버퍼 장치(110), 가중치 커널 버퍼 장치(140), 그리고 출력 버퍼(140)를 사용하여 컨볼루션 연산을 수행할 수 있다. 예를 들어, MAC 연산기(120)는 복수의 MAC 코어(121~12i)를 포함할 수 있다. 도 2를 참조하여 설명된 바와 같이, 복수의 MAC 코어(121~12i) 각각은 복수의 커널을 사용하여 입력 타일(Din_T)에 대한 컨볼루션 연산을 수행할 수 있다. 이 때, 컨볼루션 연산은 병렬로 처리될 수 있다. 복수의 MAC 코어(121~12i)의 개수는 커널의 크기 또는 입력 타일(Din_T)의 크기에 따라 결정될 수 있다. 예시적으로, 복수의 MAC 코어(121~12i) 각각은 도 2를 참조하여 설명된 MAC 코어(L1_1)와 유사한 동작을 수행하거나 또는 구조를 가질 수 있다.
출력 버퍼 장치(130)는 MAC 연산기(120)에 의해 실행되는 컨볼루션 연산 또는 풀링 동작에 대한 출력 데이터의 일부(Dout_T)를 로드할 수 있다. 출력 버퍼 장치(130)에 로드된 출력 데이터의 일부(Dout_T)는 복수의 커널에 의한 각 컨볼루션 연산 루프의 실행 결과에 따라 업데이트될 수 있다. 또는 출력 버퍼 장치(130)에 로드된 출력 데이터의 일부(Dout_T)는 외부 메모리(101)로 제공되고, 복수의 출력 데이터의 일부(Dout_T)가 조합되어 출력 데이터(Dout)를 구성할 수 있다. 이하에서, 간결한 설명을 위하여, 출력 버퍼 장치(130)로 로드되는 출력 데이터의 일부(Dout_T)는 출력 타일(output tile)이라 칭한다.
가중치 커널 버퍼 장치(140)는 MAC 연산기(120)에서 수행되는 컨볼루션 연산, 바이어스(Bias) 가산, 활성화(ReLU), 풀링(Pooling) 등에 필요한 파라미터들을 외부 메모리(101)로부터 로드하고, 로드된 파라미터들을 MAC 연산기(120)로 제공할 수 있다. 또한, 학습 단계에서 학습된 파라미터들이 가중치 커널 버퍼 장치(140)에 저장될 수도 있다. 가중치 커널 버퍼 장치(140)에 저장된 학습된 파라미터들은 외부 메모리(101)로 제공되고, 갱신될 수 있다.
도 4는 도 3의 CNN 시스템의 컨볼루션 연산을 설명하기 위한 도면이다. 간결한 설명을 위하여, 하나의 MAC 코어(121)가 컨볼루션 연산을 수행하는 구성이 도 4에 도시되며, CNN 시스템(100)의 컨볼루션 연산을 설명하는데 불필요한 구성 요소들은 생략된다.
도 3 및 도 4를 참조하면, 입력 버퍼 장치(110)는 입력 데이터(Din)의 일부인 입력 타일(Din_T)을 로드할 수 있다. 이 때, 입력 타일(Din_T)은 Tn×Tw×Th의 크기를 가질 수 있다. Tn은 입력 타일(Din_T)의 채널의 개수를 가리키고, Tw는 입력 타일(Din_T)의 너비를 가리키고, Th는 입력 타일(Din_T)의 높이를 가리킨다. Tn, Tw, 및 Th는 MAC 연산기(120)의 연산 능력, 입력 버퍼 장치(110)의 크기, 커널의 크기, 또는 커널의 개수에 따라 결정될 수 있다.
MAC 코어(121)는 가중치 커널 버퍼 장치(140)로부터의 복수의 커널(KER_1~KER_M)을 사용하여 입력 버퍼 장치(110)로 로드된 입력 타일(Din_T)에 대한 컨볼루션 연산을 수행할 수 있다. 예를 들어, MCC 코어(121)는 도 2를 참조하여 설명된 바와 같이 컨볼루션 연산을 수행할 수 있다. MAC 코어(121)는 컨볼루션 연산을 수행하여, 출력 타일(Dout_T)을 생성할 수 있다.
생성된 출력 타일(Dout_T)은 출력 버퍼 장치(130)로 로드될 수 있다. 예시적으로, 출력 타일(Dout_T)은 Tm×Tc×Tr의 크기를 가질 수 있다. Tm은 출력 타일(Dout_T)의 채널 개수를 가리키고, Tc는 출력 타일(Dout_T)의 너비를 가리키고, Tr은 출력 타일(Dout_T)의 높이를 가리킬 수 있다. Tm, Tc, 및 Tr은 입력 타일(Din_T)의 크기 및 커널들의 크기에 따라 결정될 수 있다. 예시적으로, 출력 버퍼 장치(130)에 저장된 출력 타일(Dout_T)은 외부 메모리 장치(101)로 제공될 수 있다.
예시적으로, 입력 데이터(Din)에 대한 다른 입력 타일들에 대하여, 상술된 컨볼루션 연산이 반복적으로 수행되고, 반복 수행의 결과를 조합함으로써, 출력 데이터(Dout)가 생성될 수 있다.
예시적으로, 상술된 바와 같이, 부분 연산을 위하여, 입력 데이터(Din)가 일정한 크기(즉, 일정한 타일 단위)로 분할되고, 분할된 입력 타일 별로 상술된 컨볼루션 연산이 수행될 수 있다. 따라서, 메모리 대역폭, 메모리 용량 등과 같은 하드웨어 제한에 영향을 받지 않기 때문에, 입력 데이터에 대한 연산이 효율적으로 수행될 수 있다.
예시적으로, 상술된 부분 컨볼루션 연산의 흐름은 표 3과 같이 표현될 수 있다. 표 3에 기재된 알고리즘 구성 또는 프로그램 코드는 부분 컨볼루션 연산의 흐름을 예시적으로 보여주기 위한 것이며, 본 발명의 범위가 이에 한정되는 것은 아니다.
// Basic convolution computation
for ( row=0 ; row<R ; row+=Tr) {
for ( col=0 ; col<C ; col+=Tc) {
for ( to=0 ; to<M ; to+=Tm) {
for ( ti=0 ; ti<N ; ti+=Tn) {
// load tiled input
// load tiled weights
// load tiled output
// on-chip data computation
for ( trr=row ; trr <min (row+Tr , R) ; trr++) {
for ( tcc=col ; tcc <min (col+Tc , C ) ; tcc++) {
for ( too=to ; too<min ( to+Tm, M) ; too++) {
for ( tii = ti ; tii <min ( ti +Tn , N) ; tii++) {
for ( i=0 ; i<K ; i++) {
for ( j=0 ; j<K ; j++) {
output [too] [trr] [tcc] +=
weights [too] [tii] [i] [j] *
input [tii] [ S*trr+i] [ S*tcc+j] ;
}}}}}}
// store tiled output
}}}}
예시적으로, 입력 타일(Din_T)의 높이를 가리키는 Th는 {Tr+K-1}로 표현될 수 있으며, 입력 타일(Din_T)의 너비를 가리키는 Tw는 {Tc+K-1}로 표현될 수 있다. 표 3에 도시된 알고리즘 구성에서는 Th와 Tw가 기재되지 않았으나, 실제 하드웨어로 구현 시에는 입력 버퍼 장치(110)의 크기로 표현될 수 있다.
표 3을 참조하면, Tr, Tc, Tm, Tn, 및 K의 변수들로 표현되는 부분 컨볼루션 루프 연산이 하드웨어 엔진으로 동작되고, 이러한 하드웨어 엔진은 입력 데이터(Din)의 전체적인 분할 개수(즉, 입력 타일(Din_T)의 개수)만큼 반복적으로 수행될 수 있다.
상술한 구성의 CNN 모델을 FPGA나 GPU 등의 하드웨어로 구현될 수 있다. 이때, 하드웨어 플랫폼의 자원, 동작 시간, 전력 소모 등을 고려하여 입력 및 입력 버퍼 장치(110)의 크기, 출력 버퍼 장치(130)의 크기, 가중치 커널 버퍼 장치(140)의 크기, 병렬 처리 MAC 코어들의 수, 그리고 메모리 액세스의 수가 결정되어야 한다.
일반적인 신경망 설계를 위해서는 커널의 가중치들은 '0'이 아닌 값들(Non-Zero values)로 가득 차있다는 가정 하에서 설계 파라미터들이 결정된다. 즉, 지붕 천정(Roof top) 모델이 일반적인 신경망 설계 파라미터를 결정하기 위해 사용된다. 그러나, 모바일용 하드웨어 및 제한된 FPGA 상에서의 신경망 모델이 구현될 경우, 하드웨어 제한으로 인하여, 신경망의 크기를 줄이기 위한 방법 또는 장치가 요구된다. 많은 파라미터들을 필요로 하는 신경망 연산에서 전체 연산을 최소화하기 위해 신경망에 필요한 파라미터의 수 또는 크기를 줄이는 방법은 신경망 압축(Deep compression)이라 불린다.
상술된 신경망 압축을 통해, 컨볼루션 연산에서 사용되는 가중치 커널들이 희소 가중치(Sparse weight)의 형태로 압축될 수 있다. 희소 가중치는 압축된 신경망의 한 요소로서, 모든 뉴런들의 연결들을 표현하기보다 압축된 연결 또는 압축된 커널을 표현하도록 구성된다. 예를 들면, 2차원 K×K 사이즈의 가중치 커널에서, 가중치 값들 중 일부는 '0' 값을 갖도록 압축된다. 이 때, '0'을 갖지 않는 가중치는 희소 가중치(Sparse weight)라 불린다.
희소 가중치를 갖는 커널(즉, 희소 가중치 커널)을 사용하면, CNN에서의 연산량이 감소될 수 있다. 즉, 가중치 커널 필터의 희소성에 따라서 전체 연산 처리량이 감소될 수 있다. 예를 들면, 2차원 K×K 사이즈의 가중치 커널에서 '0'이 전체 가중치들의 90%인 경우, 희소성은 90%라 할 수 있다. 따라서, 희소성은 90%의 가중치 커널을 사용하면, 실제 연산량은 일반적인 가중치 커널(즉, 비희소 가중치 커널)을 사용하는 연산량에 대비하여 10%로 감소하게 된다.
도 5는 본 발명의 희소 가중치 커널을 설명하기 위한 도면이다. 간결한 설명을 위하여, 가중치 커널에서, K=3이며, 채널의 개수는 1인 것으로 가정한다. 즉, 가중치 커널은 1×3×3의 크기를 가질 것이다.
도 5를 참조하면, 일반적인 신경망 모델에서의 완전 가중치 커널(KW)(full weight kernel)은 신경망 압축을 통해 희소 가중치 커널(SW)(sparse weight kernel)로 변환될 수 있다.
K가 3인 경우, 완전 가중치 커널(KW)은 9개 가중치 값들(K0~K8)을 갖는 행렬로 표현될 수 있다. 신경망 압축 동작은 파라미터 제거, 가중치 공유, 양자화 등의 다양한 동작들을 포함할 수 있다. 파라미터 제거 기법은 입력 데이터 또는 히든 계층에서 일부 뉴런을 생략하는 기법이다. 가중치 공유 기법은 신경망 내에서 각각의 계층 별로 동일하거나 또는 비슷한 파라미터들을 단일 대표 값으로 맵핑함으로써, 파라미터들을 서로 공유하는 기법이다. 양자화 기법은 가중치나 입출력 계층 및 히든 계층의 데이터 크기를 양자화하는 방법이다. 하지만, 신경망 압축 동작은 상술된 기법들에 제한되지 않으며, 다른 다양한 압축 기법들을 포함할 수 있다.
완전 가중치 커널(KW)은 신경망 압축을 통해 일부 가중치 값들이 '0'을 가지는 희소 가중치 커널(SW)로 전환된다. 예를 들어, 신경망 압축에 의해, 완전 가중치 커널(KW)의 가중치 값들(K0~K8) 각각은 희소 가중치 커널(SW)의 가중치 값들(W0~W8)로 변환될 수 있다. 이 때, 다양한 알고리즘에 의해 희소 가중치 커널(SW)의 일부 가중치 값들(W1, W2, W3, W4, W6, W7, W8)은 '0'의 값을 가질 수 있다. 즉, 희소 가중치 커널(SW)의 가중치 값들(W0~W8) 중 일부는 '0'의 값을 가질 수 있고, 나머지 일부는 '0'이 아닌 값(non-zero value)을 가질 수 있다. 이 때, '0'이 아닌 값들은 희소 가중치라 칭한다.
압축 신경망에서의 커널 특성은 희소 가중치(예를 들어, W0, W5)의 위치와 값에 의해서 결정될 수 있다. 실질적으로 MAC 코어들(121~12i, 도 3 참조)이 입력 타일과 가중치 커널의 컨볼루션 연산을 수행하는 경우, 가중치 커널에서 '0'인 값들에 대응하는 곱셈 연산 또는 덧셈 연산은 생략될 수 있다. 따라서, 희소 가중치들(W0, W5)에 대한 곱셈 연산 및 덧셈 연산만이 수행될 수 있다. 따라서, 희소 가중치 커널(SW)의 희소 가중치만을 사용하는 컨볼루션 연산에서의 계산량이 크게 감소된다. 완전 가중치가 아닌 희소 가중치만을 외부 메모리(201)와 교환하므로 메모리 액세스 횟수 또는 메모리 대역폭도 감소할 것이다.
예시적으로, 희소 가중치 커널을 사용하여 부분 컨볼루션 연산이 수행되는 경우, 표 3의 알고리즘은 표 4와 같이 변환될 수 있다.
// on-chip data computation
for ( too=to ; too<min ( to+Tm, M) ; too++) {
for ( tii = ti ; tii <min ( ti +Tn , N) ; tii++) {
for ( s=0 ; s<NNZ(too,tii) ; s++) {
i=sparse_id×(too, tii, s) / K;
j=sparse_id×(too, tii, s) % K;
for ( trr=row ; trr <min (row+Tr , R) ; trr++) {
for ( tcc=col ; tcc <min (col+Tc , C ) ; tcc++) {
output [too] [trr] [tcc] +=
weights [too] [tii] [s] *
input [tii] [ S*trr+i] [ S*tcc+j] ;
}}}}}
표 4를 참조하면, 표 3의 알고리즘과 비교하면, 커널 단위(K×K)로 수행되는 루프(loop) 연산을 웨이트의 희소행렬에서 '0'이 아닌 NNZ(Number of Non-Zero)로 변경된다. 즉, 가중치 커널의 가중치 값들 중에 '0'인 가중치 값에 대한 연산이 수행되지 않기 때문에, 전체적인 연산량이 감소될 수 있다. 또한 연산에 필요한 MAC을 R×C 로 구현할 수 있기 때문에 일반적인 하드웨어 구성이 구현될 수 있다.
도 6은 본 발명의 실시 예에 따른 CNN 시스템의 하드웨어 구성을 보여주는 블록도이다. 이하에서, 간결한 설명을 위하여, MAC 연산기(220)에서 사용되는 가중치 커널은 앞서 설명된 희소 가중치 커널(SW)인 것으로 가정한다. 또한, 본 발명의 실시 예들을 모호하게 하지 않기 위하여, 가중치 커널 이외의 다른 파라미터들(예를 들어, 바이어스 등)에 대한 설명은 생략한다.
도 6을 참조하면, CNN 시스템(200)은 입력 버퍼 장치(210), MAC 연산기(220), 출력 버퍼 장치(230), 가중치 커널 버퍼 장치(240), 및 데이터 선택기(250)를 포함할 수 있다. MAC 연산기(220)는 복수의 MAC 코어(221~22i)를 포함할 수 있다. 예시적으로, MAC 코어들(221~22i) 각각은 도 2를 참조하여 설명된 MAC 코어(L1_1)와 유사한 동작을 수행하거나 또는 유사한 구조를 가질 수 있다. CNN 시스템(200)은 외부 메모리(201)와 입력 타일(Din_T), 출력 타일(Dout_T)을 교환하도록 구성될 수 있다.
입력 버퍼 장치(210), MAC 연산기(220), 출력 버퍼 장치(230), 가중치 커널 버퍼 장치(240), 복수의 MAC 코어(221~22i), 및 외부 메모리(201)는 도 3 및 도 4를 참조하여 설명되었으므로, 이에 대한 상세한 설명은 생략된다.
CNN 시스템(200)은 도 3의 CNN 시스템(100)과 비교하여 데이터 선택기(250)를 더 포함할 수 있다. 데이터 선택기(250)는 입력 버퍼 장치(210)에 로드된 입력 타일(Din_T) 중 일부 데이터 값만 MAC 연산기(220)로 제공하도록 구성될 수 있다.
예를 들어, 가중치 커널 버퍼 장치(240)는 희소 가중치 커널(SW)을 포함할 수 있다. 데이터 선택기(250)는 가중치 커널 버퍼 장치(240)로부터 희소 가중치 커널(SW)의 희소 인덱스(SPI)를 수신하고, 수신된 희소 인덱스(SPI)를 기반으로 입력 타일(Din_T)의 데이터 값들 중 일부 데이터 값만 MAC 연산기(220)로 제공할 수 있다. 희소 인덱스(SPI)는 희소 가중치 커널(SW)에서, '0'이 아닌 값을 갖는 가중치의 위치에 대한 정보를 가리킨다. 예를 들어, 도 5에 도시된 희소 가중치 커널(SW)에 대한 희소 인덱스(SPI)는 W0, W5의 위치 정보(즉, {행, 열}의 형태로 {0,0}, {1,2}, 또는 단순 위치 형태(즉, 인덱스 번호)로 (0,5))를 가리킬 것이다.
좀 더 상세한 예로써, 앞서 설명된 바와 같이, 가중치 커널이 희소 행렬로 구성된 희소 가중치 커널(SW)인 경우, '0'의 값을 갖는 가중치 값에 대한 곱셈 연산 또는 덧셈 연산은 생략될 수 있다. 즉, 데이터 선택기(250)는 희소 인덱스(SPI)를 기반으로 '0'이 아닌 가중치와 대응되는 데이터 값만 MAC 연산기(220)로 제공하고, MAC 연산기(220)는 제공된 데이터 값에 대한 덧셈 연산 또는 곱셈 연산을 수행할 수 있다. 따라서, '0'의 가중치와 대응되는 연산이 생략될 수 있다.
예시적으로, 데이터 선택기(250)의 하드웨어 구성은 도 7 내지 도 9를 참조하여 더욱 상세하게 설명된다. 그러나, 데이터 선택기(250)의 구성이 이하에서 설명되는 다양한 하드웨어 구성에 제한되는 것은 아니며, 다양한 형태로 변형될 수 있다.
도 7은 도 6의 CNN 시스템을 더욱 상세하게 보여주는 블록도이다. 간결한 설명을 위하여, 하나의 입력 타일(Din_T)에 대한 CNN 시스템(200)의 구성이 도 7에 도시된다. 그러나, 본 발명의 범위가 이에 한정되는 것은 아니며, CNN 시스템(200)은 다른 입력 타일들 각각에 대한 구성 요소들을 더 포함하거나 또는 도 7에 도시된 구성 요소들을 기반으로 각 입력 타일에 대한 연산 동작을 반복 수행할 수 있다.
도 6 및 도 7을 참조하면, CNN 시스템(200)은 입력 버퍼 장치(210), MAC 연산기(220), 출력 버퍼 장치(230), 가중치 커널 버퍼 장치(240), 및 데이터 선택기(250)를 포함할 수 있다. 입력 버퍼 장치(210), MAC 연산기(220), 출력 버퍼 장치(230), 가중치 커널 버퍼 장치(240), 및 데이터 선택기(250)는 도 6을 참조하여 설명되었으므로, 이에 대한 상세한 설명은 생략된다.
입력 버퍼 장치(210)는 복수의 입력 버퍼를 포함할 수 있다. 복수의 입력 버퍼 각각은 입력 타일(Din_T)의 데이터 값을 로드하도록 구성될 수 있다. 예를 들어, 입력 타일(Din_T)은 Tn×Tw×Th의 크기를 가질 수 있다. 입력 타일(Din_T)은 각 채널 별로 Tw×Th의 크기를 갖는 서브 입력 타일들로 구분될 수 있다. 서브 입력 타일의 각 데이터 값은 입력 버퍼들로 로드될 수 있다. 예시적으로, 가중치 커널의 채널 개수에 따라, 복수의 서브 입력 타일 각각의 데이터 값이 입력 버퍼들로 병렬로 로드될 수 있다.
데이터 선택기(250)는 스위치 회로(25A) 및 복수의 멀티플렉서(251~25i)(MUX; multiplexer)를 포함할 수 있다. 스위치(250)는 희소 가중치 커널(SW)을 기반으로, 복수의 입력 버퍼에 저장된 데이터 값을 복수의 MUX(251~25i) 각각으로 제공할 수 있다.
예를 들어, Tn=3, Th=3, 및 Tn=1이고, 희소 가중치 커널(SW)의 K=2이고, 스트라이드는 1인 것으로 가정하자. 이 경우, 입력 타일(Din_T)은 제0 내지 제8 입력 값들(I0~I8)을 갖는 행렬로 표현될 수 있으며, 제0 내지 제8 입력 값들(I0~I8) 각각은 제0 내지 제8 입력 버퍼들에 저장될 수 있다. 이 때, 스위치(25A)는 제0, 제1, 제3, 및 제4 입력 값들(I0, I1, I3, I4)이 제1 MUX(251)로 제공되도록 제0, 제1, 제3, 및 제4 입력 버퍼들을 제1 MUX(251)와 연결할 수 있다. 또한, 스위치(25A)는 제1, 제2, 제4, 및 제5 입력 값들(I1, I2, I4, I5)이 제2 MUX(252)로 제공되도록 제1, 제2, 제4, 및 제5 입력 버퍼들을 제2 MUX(252)와 연결할 수 있다. 마찬가지로, 스위치(25A)는 제3, 제4, 제6, 및 제7 입력 값들(I3, I4, I6, I7)이 제3 MUX(253)로 제공되도록 제3, 제4, 제6, 및 제7 입력 버퍼들을 제3 MUX(253)와 연결할 수 있다. 스위치(24A)는 상술된 방식을 통해, 희소 가중치 커널(SW)을 기반으로 복수의 입력 버퍼 및 복수의 MUX(251~25i)를 서로 연결할 수 있다.
복수의 MUX(251~25i) 각각은 가중치 커널 버퍼 장치(240)로부터의 희소 인덱스(SPI)를 기반으로, 연결된 입력 버퍼들로부터의 데이터 값 중 어느 하나를 선택하여 MAC 연산기(220)의 MAC 코어들(221~22i)로 제공할 수 있다. 예를 들어, MUX들 각각(251~25i)는 희소 인덱스(SPI)를 기반으로 '0'이 아닌 가중치 위치와 대응되는 데이터 값을 선택하고, 선택된 데이터 값을 MAC 코어(221)로 전달할 수 있다. 좀 더 상세한 예로써, Tn=3, Th=3, 및 Tn=1이고, 희소 가중치 커널(SW)의 K=2이고, 스트라이드는 1이며, 희소 인덱스(SPI)(즉, '0'이 아닌 가중치의 위치)가 [0,0]인 것으로 가정하자. 이 경우, 앞서 설명된 바와 같이, 제0, 제1, 제3, 및 제4 데이터 값들(I0, I1, I3, I4)이 제1 MUX(251)로 제공될 것이다. 앞서 설명된 바와 같이, 희소 인덱스(SPI)가 [0,0]이므로, [0,0]의 위치와 대응하는 데이터 값 이외의 데이터 값에 대한 컨볼루션 연산은 생략될 수 있다. 다시 말해서, 희소 인덱스(SPI)가 가리키는 위치(즉, [0,0])와 대응되는 제0 데이터 값(I0)에 대한 컨볼루션 연산은 수행되어야 하므로, MUX(251)는 희소 인덱스(SPI)가 가리키는 위치(즉, [0,0])와 대응되는 제0 데이터 값(I0)을 선택하여, MAC 코어(221)로 제공할 수 있다. 다른 MUX들(252~25i) 또한 상술된 바와 유사한 동작을 수행할 수 있다.
MAC 연산기(220)의 복수의 MAC 코어(221~22i) 각각은 수신된 데이터 값 및 희소 가중치 커널(SW)을 기반으로 곱셈 연산 및 덧셈 연산(즉, 컨볼루션 연산)을 수행하여, 출력 데이터를 출력할 수 있다.
출력 버퍼 장치(230)는 복수의 출력 버퍼를 포함하고, 복수의 출력 버퍼 각각은 복수의 MAC 코어(221~22i) 각각으로부터의 출력 데이터를 저장하거나 또는 누적할 수 있다. 예를 들어, MAC 연산기(220)는 상술된 바와 같이, 제1 희소 가중치 커널을 이용하여 입력 타일(Din_T)에 대한 컨볼루션 연산을 수행할 수 있다. 이 후, MAC 연산기(220)는 제1 희소 가중치 커널과 다른 제2 희소 가중치 커널을 이용하여 입력 타일(Din_T)에 대한 컨볼루션 연산을 수행할 수 있다. 제1 희소 가중치 커널을 이용한 컨볼루션 연산의 결과는 출력 타일(Dout_T)의 제1 채널일 수 있고, 제2 희소 가중치 커널을 이용한 컨볼루션 연산의 결과는 출력 타일(Dout_2)의 제2 채널일 수 있다. 즉, 출력 버퍼 장치(230)는 복수의 희소 가중치 커널을 사용하여 수행된 컨볼루션 연산의 결과들을 출력 타일(Dout_T)의 서로 다른 채널로써 저장하거나 또는 누적할 수 있다. 다시 말해서, 하나의 입력 타일(Din_T)에 대하여, M개의 희소 가중치 커널들을 사용하여 컨볼루션 연산이 수행된 경우, 출력 타일(Dout_T)은 M개의 채널을 가질 수 있다.
상술된 바와 같이, 본 발명에 따른 데이터 선택기(250)는 희소 가중치 커널(SW)의 희소 인덱스(SPI)를 기반으로, '0'이 아닌 가중치 값의 위치와 대응되는 데이터 값만 MAC 연산기(220)로 제공하기 때문에, '0'의 가중치 값의 위치와 대응되는 데이터 값들에 대한 컨볼루션 연산이 생략될 수 있다. 따라서, CNN 시스템(200)의 연산 효율이 향상된다.
도 8 및 도 9는 도 7의 CNN 시스템의 동작을 더욱 상세하게 설명하기 위한 도면들이다. 본 발명의 실시 예에 따른 하드웨어로 구현된 CNN 시스템(200)의 동작을 명확하게 설명하는데 불필요한 구성 요소들은 생략된다.
또한, 이하에서, 도면의 간결성 및 설명의 편의를 위하여, 특정한 데이터 조건들을 가정하여 설명하기로 한다. 도 7 내지 도 9를 참조하면, 입력 타일(Din_T)의 채널(Tn)은 1개이고, 너비(Tw)는 4이고, 높이(Th)는 4인 것으로 가정한다. 즉, 입력 타일(Din)은 1×4×4의 크기를 가지며, 도 8에 도시된 바와 같이, 제0 내지 제15 입력 값들(I0~I15)을 포함할 것이다. 제0 내지 제15 입력 값들(I0~I15)은 도 8에 도시된 바와 같이 행렬 형태로 표현될 수 있다.
또한, 희소 가중치 커널(SW)의 너비 및 높이를 가리키는 K 값은 3이고, 스트라이드는 1인 것으로 가정한다. 즉 희소 가중치 커널(SW)은 1×3×3의 크기를 가지며, 제0 및 제8 가중치 값들(W0~W8)을 포함할 것이다. 제0 및 제8 가중치 값들(W0~W8)은 도 8에 도시된 바와 같이, 행렬 형태로 표현될 수 있다. 또한, 제0 및 제8 가중치 값들(W0~W8) 중 제1, 제2, 제3, 제4, 제6, 제7, 및 제8 가중치 값들(W1, W2, W3, W4, W6, W7, W8)은 '0'이며, 제0 및 제5 가중치 값들(W0, W5)은 '0'이 아닌 것으로 가정한다. 즉, 희소 가중치 커널(SW)의 희소 인덱스(SPI)는 제0 및 제5 가중치 값들(W0, W5)의 위치와 대응될 것이다.
또한, 상술된 입력 타일(Din_T) 및 희소 가중치 커널(SW)을 기반으로 수행된 컨볼루션 연산의 결과인 출력 데이터(Dout_T)의 채널(Tm)은 1이고, 너비(Tc)는 2이고, 높이(Tr)는 2일 것이다.
상술된 조건들은 본 발명의 구성 요소들의 동작을 명확하게 설명하기 위한 것이며, 본 발명의 범위가 이에 한정되는 것은 아니다. 입력 데이터, 입력 타일, 가중치 커널, 다른 파라미터들 등의 크기들 및 값들은 다양하게 변형될 수 있으며, 이러한 변형들에 따라, CNN 시스템(200)에 포함된 하드웨어 구성들의 개수 또는 구조가 변형될 수 있다.
도 8에 도시된 입력 타일(Din_T) 및 희소 가중치 커널(SW)에 대하여, CNN 시스템(200)은 제0 내지 제3 컨볼루션 연산들(CON0~CON3)을 수행할 수 있다.
예를 들어, 도 9에 도시된 바와 같이, 입력 타일(Din_T)의 제0 내지 제15 입력 값들(I0~I15)은 제0 내지 제15 입력 버퍼들(210_00~210_15)로 각각 로드될 수 있다. 스위치 회로(25A)는 희소 가중치 커널(SW)을 기반으로 제0 내지 제15 입력 버퍼들(210_00~210_15)을 MUX들(221~224)로 연결할 수 있다. MUX들(221~224) 각각은 희소 인덱스(SPI)를 기반으로 연결된 입력 버퍼들로부터의 입력 값들 중 하나를 선택하여 MAC 코어들(221~224)로 각각 제공할 수 있다. MAC 코어들(221~224) 각각은 수신된 입력 값 및 희소 가중치 커널(SW)을 사용하여 컨볼루션 연산을 수행할 수 있다.
예시적으로, 스위치 회로(25A)는 희소 가중치 커널(SW) 및 입력 타일(Din_T)의 크기(즉, Tn×Tw×Th)를 기반으로 복수의 입력 버퍼 및 복수의 MUX를 서로 연결할 수 있다. 그러나, 본 발명의 실시 예를 명확하게 설명하기 위하여, 입력 타일(Din_T)의 크기를 특정 크기로 가정하였으므로, 도 6 내지 도 7에서 이와 같은 구성은 별도로 도시되지 않는다. 그러나, 본 발명의 범위가 이에 한정되는 것은 아니며, 스위치 회로(25A)의 구성 또는 스위치 회로(25A)에 의한 연결 관계는 희소 가중치 커널(SW) 및 입력 타일(Din_T)의 크기(즉, Tn×Tw×Th)를 기반으로 다양하게 변형될 수 있다.
이하에서, 좀 더 구체적인 데이터 선택기(250)의 동작 및 컨볼루션 연산이 설명된다.
제0 컨볼루션 연산(CON0)은 MAC 코어(221)에 의해 수행될 수 있다. 예를 들어, 입력 타일(Din_T)의 제0, 제1, 제2, 제4, 제5, 제6, 제8, 제9, 및 제10 입력 값들(I0, I1, I2, I4, I5, I6, I8, I9, I10) 및 희소 가중치 커널(SW)을 기반으로 제0 컨볼루션 연산(CON0)이 수행되고, 제0 컨볼루션 연산(CON0)의 결과로써, 제0 출력 값(R0)이 생성될 수 있다.
예를 들어, 앞서 설명된 바와 같이, 스위치 회로(25A)는 제0, 제1, 제2, 제4, 제5, 제6, 제8, 제9, 및 제10 입력 값들(I0, I1, I2, I4, I5, I6, I8, I9, I10)이 MUX(221)로 제공되도록, 입력 버퍼들(210_00, 210_01, 210_02, 210_04, 210_05, 210_06, 210_08, 210_09, 210_10)을 MUX(221)와 연결(도 9의 스위치 회로(25A) 내의 실선 참조)할 수 있다. MUX(221)는 희소 인덱스(SPI)를 기반으로 연결된 입력 버퍼들로부터의 입력 값들 중 하나를 선택하여 MAC 코어(221)로 제공할 수 있다.
도 8을 참조하여 설명된 바와 같이, 희소 인덱스(SPI)는 제0 및 제5 가중치 값들(W0, W5)의 위치와 대응될 수 있다. 이 경우, 제0 컨볼루션 연산(CON0)에서, 제0 입력 데이터(I0)가 제0 가중치 값(W0)의 위치와 대응되고, 제6 입력 데이터(I6)가 제5 가중치 값(W5)의 위치와 대응될 것이다. 이 경우, MUX(221)는 제0 가중치 값(W0)의 위치와 대응되는 제0 입력 데이터(I0)를 먼저 출력할 것이다. MAC 코어(221)는 수신된 제0 입력 데이터(I0) 및 희소 가중치 커널(SW)의 제0 가중치 값(W0)에 대한 곱셈 연산을 수행하고, 그 결과를 내부 레지스터에 저장할 것이다. 이후, MUX(221)는 희소 인덱스(SPI)를 기반으로 제5 가중치 값(W5)의 위치와 대응되는 제6 입력 데이터(I6)를 출력할 것이다. MAC 코어(221)는 제6 입력 데이터(I6) 및 희소 가중치 커널(SW)의 제5 가중치 값(W5)의 곱셈 연산을 수행하고, 곱셈 연산의 결과 및 레지스터에 저장된 값(즉, 제0 입력 데이터(I0) 및 제0 가중치 값(W0)의 곱셈 연산의 결과 값)을 누적하는 덧셈 연산을 수행할 수 있다. 연산 결과는 내부 레지스터에 저장될 수 있다. 이후, 희소 인덱스(SPI)에 포함된 위치들과 대응되는 입력 값에 대한 연산이 모두 수행되었으므로, 제0 컨볼루션 연산(CON0)은 종료되고, 연산 결과는 제0 출력 값(R0)으로써, 출력 버퍼(230_00)로 제공된다.
제1 컨볼루션 연산(CON1)은 MAC 코어(222)에 의해 수행될 수 있다. 예를 들어, 입력 타일(Din_T)의 제1, 제2, 제3, 제5, 제6, 제7, 제9, 제10, 및 제11 입력 값들(I1, I2, I3, I5, I6, I7, I9, I10, I11) 및 희소 가중치 커널(SW)을 기반으로 제1 컨볼루션 연산(CON1)이 수행되고, 제1 컨볼루션 연산(CON1)의 결과로써, 제1 출력 값(R1)이 생성될 수 있다.
예를 들어, 앞서 설명된 바와 같이, 스위치 회로(25A)는, 제1, 제2, 제3, 제5, 제6, 제7, 제9, 제10, 및 제11 입력 값들(I1, I2, I3, I5, I6, I7, I9, I10, I11)이 MUX(221)로 제공되도록, 입력 버퍼들(210_01, 210_02, 210_03, 210_05, 210_06, 210_07, 210_09, 210_10, 210_11)을 MUX(222)와 연결(도 9의 스위치 회로(25A) 내의 제1 파선 참조)할 수 있다. MUX(222)는 희소 인덱스(SPI)를 기반으로 연결된 입력 버퍼들로부터의 입력 값들 중 하나를 선택하여 MAC 코어(222)로 제공할 수 있다.
도 8을 참조하여 설명된 바와 같이, 희소 인덱스(SPI)는 제0 및 제5 가중치 값들(W0, W5)의 위치와 대응될 수 있다. 이 경우, 제1 컨볼루션 연산(CON1)에서, 제1 입력 데이터(I1)가 제0 가중치 값(W0)의 위치와 대응되고, 제7 입력 데이터(I7)가 제5 가중치 값(W5)의 위치와 대응될 것이다. 제0 컨볼루션 연산(CON0)에서 설명된 바와 유사하게, MUX(222)는 제1 및 제7 입력 값들(I1, I7)을 순차적으로 MAC 코어(222)로 전송하고, MAC 코어(222)는 희소 가중치 커널(SW)을 기반으로 제1 및 제7 입력 값들(I1, I7)에 대한 제1 컨볼루션 연산(CON1)을 수행할 것이다. 제1 컨볼루션 연산(CON1)의 결과로써 제1 출력 값(R1)이 생성되고, 제1 출력 값(R1)은 출력 버퍼(230_1)로 제공될 것이다.
제0 및 제1 컨볼루션 연산들(CON0, CON1)에서 설명된 바와 유사하게, MAC 코어들(223, 224)은 제2 및 제3 컨볼루션 연산들(CON2, CON3)을 수행할 수 있다. 스위치 회로(25A)는 희소 가중치 커널(SW)을 기반으로 제4, 제5, 제6, 제8, 제9, 제10, 제12, 제13, 및 제14 입력 값들(I4, I5, I6, I8, I9, I10, I12, I13, I14)이 MUX(223)로 제공되도록, 입력 버퍼들(210_04, 210_05, 210_06, 210_08, 210_09, 210_10, 210_12, 210_13, 210_14)을 MUX(223)와 연결(도 9의 스위치 회로(25A) 내의 제2 파선 참조)할 수 있다. 스위치 회로(25A)는 희소 가중치 커널(SW)을 기반으로 제5, 제6, 제7, 제9, 제10, 제11, 제13, 제14, 및 제15 입력 값들(I5, I6, I7, I9, I10, I11, I13, I14, I15)이 MUX(223)로 제공되도록, 입력 버퍼들(210_05, 210_06, 210_07, 210_09, 210_10, 210_11, 210_13, 210_14, 210_15)을 MUX(224)와 연결(도 9의 스위치 회로(25A) 내의 점선 참조)할 수 있다.
제2 컨볼루션 연산(CON2)을 위하여, MUX(223)는 희소 인덱스(SPI)를 기반으로 제4 및 제10 입력 값들(I4, I10)을 순차적으로 출력하고, MAC 코어(223) 희소 가중치 커널(SW)을 기반으로 제4 및 제10 입력 값들(I4, I10)에 대한 제2 컨볼루션 연산(CON2)을 수행할 것이다. 제2 컨볼루션 연산(CON2)의 결과인 제2 출력 값(R2)은 출력 버퍼(230_02)에 저장될 수 있다.
제3 컨볼루션 연산(CON3)을 위하여, MUX(224)는 희소 인덱스(SPI)를 기반으로 제5 및 제11 입력 값들(I5, I11)을 순차적으로 출력하고, MAC 코어(224) 희소 가중치 커널(SW)을 기반으로 제5 및 제111 입력 값들(I5, I11)에 대한 제3 컨볼루션 연산(CON3)을 수행할 것이다. 제3 컨볼루션 연산(CON3)의 결과인 제3 출력 값(R3)은 출력 버퍼(230_03)에 저장될 수 있다.
상술된 실시 예에서는, 설명의 편의 및 명확성을 위하여, 제0 내지 제3 컨볼루션 연산들(CON0~CON3)이 서로 구분되어 설명되었으나, 본 발명의 범위가 이에 한정되는 것은 아니며, 제0 내지 제3 컨볼루션 연산들(CON0~CON3)은 서로 병렬로 수행될 수 있다. 예를 들어, 입력 타일(Din_T)의 입력 값들(I0~I15)이 입력 버퍼들(210_00~210_15)로 로드되고, 스위치 회로(25A)는 희소 가중치 커널(SW)을 기반으로 입력 버퍼들(210_00~210_15) 및 MUX들(221~224) 사이의 연결을 앞서 설명된 바와 같이 구성할 수 있다. 이 후, MUX들(221~224) 각각은 제0 가중치 값(W0)의 위치와 대응되는 제0, 제1, 제4, 및 제5 입력 값들(I0, I1, I4, I5)을 제1 데이터 세트(D1)로써 출력할 수 있다. MAC 코어들(221~224)은 제0, 제1, 제4, 및 제5 입력 값들(I0, I1, I4, I5) 및 희소 가중치 커널(SW)을 기반으로 각각 컨볼루션 연산을 수행할 수 있다. 이 후, MUX들(221~224) 각각은 제5 가중치 값(W5)의 위치와 대응되는 제6, 제7, 제10, 및 제11 입력 값들(I6, I7, I10, I11)을 제2 데이터 세트(D2)로써 출력할 수 있다. MAC 코어들(221~240)은 제6, 제7, 제10, 및 제11 입력 값들(I6, I7, I10, I11) 및 희소 가중치 커널(SW)을 기반으로 각각 컨볼루션 연산을 수행할 수 있다.
즉, 데이터 선택부(250)는 희소 인덱스(SPI)를 기반으로 복수의 커널 영역에서, 하나의 가중치 값의 위치와 대응하는 입력 값을 출력하고, MAC 연산기(220)는 희소 가중치 커널(SW)을 기반으로, 수신된 입력 값에 대한 컨볼루션 연산을 수행한다. 데이터 선택부(250)는 희소 인덱스(SPI)를 기반으로 '0'이 아닌 가중치 값의 위치와 대응되는 입력 데이터만 출력하기 때문에, (다시 말해서, '0'의 가중치 값의 위치와 대응되는 입력 값을 출력하지 않기 때문에,) 0의 가중치 값에 대응하는 컨볼루션 연산이 생략될 수 있다. 즉, 가중치 커널의 가중치 값들에서 '0'의 개수가 증가할수록 컨볼루션 연산 감소 효과는 증가하며, 이에 따라, CNN 시스템의 전체적인 성능이 향상될 수 있다.
상술된 본 발명의 실시 예들은 하나의 컨볼루션 계층에서 수행되는 연산 동작을 보여준다. 그러나, 본 발명의 범위가 이에 한정되는 것은 아니며, 본 발명에 따른 CNN 시스템은 상술된 실시 예들에 따른 연산 동작 또는 컨볼루션 계층을 반복 수행할 수 있다.
도 10은 본 발명에 따른 컨볼루션 신경망 시스템의 동작을 간략하게 보여주는 순서도이다. 도 6, 도 7, 및 도 10을 참조하면, S110 단계에서, CNN 시스템(200)은 입력 타일을 저장할 수 있다. 예를 들어, CNN 시스템(200)의 입력 버퍼 장치(210)는 앞서 설명된 바와 같이, 외부 메모리(201)로부터 입력 데이터(Din)의 일부인 입력 타일(Din_T)을 저장할 수 있다.
S120 단계에서, CNN 시스템(200)은 입력 타일의 입력 값들을 복수의 MUX(251~25i)로 연결할 수 있다. 예를 들어, 도 7을 참조하여 설명된 바와 같이, CNN 시스템(200)의 스위치 회로(25A)는 희소 가중치 커널(SW)을 기반으로 입력 타일(Din_T)의 입력 값들을 복수의 MUX(251~25i)로 연결할 수 있다.
S130 단계에서, CNN 시스템(200)은 희소 인덱스를 기반으로 연결된 입력 값들 중 적어도 하나를 선택할 수 있다. 예를 들어, 도 7을 참조하여 설명된 바와 같이, 복수의 MUX(251~25i) 각각은 희소 인덱스(SPI)를 기반으로 희소 가중치의 위치와 대응되는 입력 값들을 선택할 수 있다. 이 때, 희소 가중치의 위치와 대응되지 않는 입력 값들(즉, '0'인 가중치의 위치와 대응되는 입력 값들)은 선택되지 않을 것이다.
S140 단계에서, CNN 시스템(200)은 희소 가중치 커널을 사용하여 적어도 하나의 입력 값에 대한 컨볼루션 연산을 수행할 수 있다. 예를 들어, 도 7을 참조하여 설명된 바와 같이, MAC 연산기(220)의 복수의 MAC 코어(221~22i) 각각은 희소 가중치 커널을 사용하여, 복수의 MUX(251~25i) 각각으로부터 출력되는 입력 값에 대한 컨볼루션 연산을 수행할 수 있다.
S150 단계에서, CNN 시스템(200)은 컨볼루션 연산의 결과를 저장 및 누적할 수 있다. 예를 들어, 도 7을 참조하여 설명된 바와 같이, 출력 버퍼 장치(230)는 MAC 연산기(220)로부터의 연산 결과를 저장할 수 있다.
예시적으로, 복수의 희소 가중치 커널이 사용되는 경우, S130 단계 및 S140 단계는 복수의 희소 가중치 커널 각각에 대하여 반복 수행될 수 있다. 반복 수행의 결과는 출력 버퍼 장치(230)에 누적될 수 있다.
S160 단계에서, CNN 시스템(200)은 누적된 컨볼루션 연산의 결과를 출력 타일로써 출력할 수 있다. 예를 들어, 도 6을 참조하여 설명된 바와 같이, 입력 타일(Din_T)에 대한 컨볼루션 연산이 모두 수행된 경우, 출력 버퍼 장치(230)는 연산 결과를 누적하여 출력 타일(Dout_T)로써 외부 메모리(201)로 제공할 수 있다.
예시적으로, CNN 시스템(200)은 입력 데이터(Din)의 전체 입력 타일들 각각에 대하여 상술된 동작들을 수행할 수 있으며, 이에 따라, 복수의 출력 타일을 외부 메모리(201)로 제공할 수 있다. 복수의 출력 타일이 서로 조합 또는 누적됨으로써, 최종 출력 데이터(Dout)가 생성될 수 있다.
상술된 바와 같이, 본 발명에 따른 CNN 시스템은 신경망 압축을 통해 연산에 요구되는 파라미터들의 개수 또는 크기를 감소시킬 수 있으며, 이에 따라, 요구되는 연산이 감소될 수 있다. 이 때, 본 발명에 따른 CNN 시스템은 가중치와 연관된 희소 인덱스를 사용하여 하드웨어 구성을 간결하게 할 수 있다. 이에 따라, 일반적으로 하드웨어 구성은 등배열로 구현되고 반복성을 갖게끔 동작이 되는 것이 성능 향상 또는 하드웨어 구성의 간결성에 유리하기 때문에, 본 발명에 따른 CNN 시스템은 하드웨어 배열 규칙성(regularity)를 유지하면서도 효과적으로 하드웨어 엔진을 운용할 수 있다.
상술된 내용은 본 발명을 실시하기 위한 구체적인 실시 예들이다. 본 발명은 상술된 실시 예들뿐만 아니라, 단순하게 설계 변경되거나 용이하게 변경할 수 있는 실시 예들 또한 포함할 것이다. 또한, 본 발명은 실시 예들을 이용하여 용이하게 변형하여 실시할 수 있는 기술들도 포함될 것이다. 따라서, 본 발명의 범위는 상술된 실시 예들에 국한되어 정해져서는 안되며 후술하는 특허청구범위뿐만 아니라 이 발명의 특허청구범위와 균등한 것들에 의해 정해져야 할 것이다.

Claims (17)

  1. 희소 가중치 커널에서 '0'이 아닌 값(non-zero value)의 위치를 가리키는 희소 인덱스를 기반으로, 입력 데이터의 입력 값들 중 상기 희소 가중치의 상기 위치와 대응되는 입력 값을 출력하도록 구성되는 데이터 선택기; 및
    상기 희소 가중치 커널을 이용하여, 상기 데이터 선택기로부터 출력되는 상기 입력 값에 대한 컨볼루션 연산을 수행하도록 구성되는 곱셈-누산(MAC; multiply accumulate) 연산기를 포함하고,
    상기 희소 가중치 커널은 적어도 하나의 '0'인 가중치 값을 포함하는 컨볼루션 신경망 시스템.
  2. 제 1 항에 있어서,
    상기 데이터 선택기는 입력 값들 중 상기 희소 가중치 커널에서, '0'인 값의 위치와 대응되는 입력 값을 출력하지 않도록 구성되는 컨볼루션 신경망 시스템.
  3. 제 1 항에 있어서,
    외부 메모리로부터 상기 입력 데이터의 일부인 입력 타일을 저장하도록 구성되는 입력 버퍼 장치; 및
    상기 MAC 연산기로부터의 상기 컨볼루션 연산의 결과 값을 저장하고, 상기 저장된 결과 값을 상기 외부 메모리로 제공하도록 구성되는 출력 버퍼 장치를 더 포함하는 컨볼루션 신경망 시스템.
  4. 제 1 항에 있어서,
    외부 메모리로부터 상기 희소 가중치 커널을 수신하고, 상기 수신된 희소 가중치 커널을 상기 MAC 연산기로 제공하고, 상기 희소 가중치 커널의 상기 희소 인덱스를 상기 데이터 선택기로 제공하도록 구성되는 가중치 커널 버퍼 장치를 더 포함하는 컨볼루션 신경망 시스템.
  5. 제 1 항에 있어서,
    상기 데이터 선택기는
    스위치 회로; 및
    복수의 멀티플렉서(MUX; multiplexer)를 포함하고,
    상기 스위치 회로는 상기 희소 가중치 커널을 기반으로 상기 입력 값들 각각을 상기 복수의 MUX로 제공하도록 구성되고,
    상기 복수의 MUX 각각은 상기 희소 인덱스를 기반으로, 상기 스위치 회로에 의해 제공되는 상기 입력 값들 중 상기 희소 가중치의 위치와 대응되는 입력 값을 선택하여 출력하도록 구성되는 컨볼루션 신경망 시스템.
  6. 제 5 항에 있어서,
    상기 MAC 연산기는 상기 복수의 MUX 각각으로부터 출력되는 입력 값을 각각 수신하고, 상기 희소 가중치 커널을 기반으로 상기 수신된 입력 값에 대한 컨볼루션 연산을 각각 수행하도록 구성되는 복수의 MAC 코어를 포함하는 컨볼루션 신경망 시스템.
  7. 제 6 항에 있어서,
    상기 복수의 MAC 코어 각각은,
    상기 입력 값 및 상기 희소 가중치에 대한 곱셈 연산을 수행하도록 구성되는 곱셈기;
    상기 곱셈 연산의 결과 및 이전 덧셈 연산의 결과에 대한 덧셈 연산을 수행하도록 구성되는 가산기; 및
    상기 덧셈 연산의 결과를 저장하도록 구성되는 레지스터를 포함하는 컨볼루션 신경망 시스템.
  8. 제 1 항에 있어서,
    상기 희소 가중치 커널은 신경망 압축을 통해 완전 가중치 커널로부터 변환된 가중치 커널이고,
    상기 완전 가중치 커널은 '0'이 아닌 가중치 값들로 구성된 컨볼루션 신경망 시스템.
  9. 제 8 항에 있어서,
    상기 신경망 압축은 상기 완전 가중치 커널에 대한 파라미터 제거 기법, 가중치 공유 기법, 또는 파라미터 양자화 기법 중 적어도 하나를 기반으로 수행되는 컨볼루션 신경망 시스템.
  10. 외부 메모리로부터 복수의 입력 값을 포함하는 입력 타일을 수신하고, 상기 수신된 입력 타일의 상기 복수의 입력 값을 저장하도록 구성되는 입력 버퍼 장치;
    희소 가중치 커널에서 '0'이 아닌 희소 가중치의 위치를 가리키는 희소 인덱스를 기반으로, 상기 입력 버퍼 장치로부터의 상기 복수의 입력 값 중 적어도 하나의 입력 값을 출력하도록 구성되는 데이터 선택기;
    상기 데이터 선택기로부터 출력되는 상기 적어도 하나의 입력 값 및 상기 희소 가중치를 기반으로 컨볼루션 연산을 수행하도록 구성되는 곱셈-누산(MAC; multiply-accumulate) 연산기; 및
    상기 MAC 연산기로부터의 상기 컨볼루션 연산의 결과 값을 저장하고, 상기 저장된 결과 값을 출력 타일로써 상기 외부 메모리로 제공하도록 구성되는 출력 버퍼 장치를 포함하는 컨볼루션 신경망 시스템.
  11. 제 10 항에 있어서,
    상기 데이터 선택기는
    스위치 회로; 및
    복수의 멀티플렉서(MUX; multiplexer)를 포함하고,
    상기 스위치 회로는 상기 입력 타일의 크기 및 상기 희소 가중치 커널을 기반으로, 상기 복수의 입력 값 각각을 상기 복수의 MUX 각각으로 연결하도록 구성되고,
    상기 복수의 MUX 각각은 상기 희소 인덱스를 기반으로, 상기 연결된 입력 값들 중 상기 희소 가중치의 위치와 대응되는 상기 적어도 하나의 입력 값을 선택하여 출력하도록 구성되는 컨볼루션 신경망 시스템.
  12. 제 11 항에 있어서,
    상기 복수의 MUX 각각은 상기 희소 가중치 커널에서 '0'인 가중치의 위치와 대응되는 입력 값을 출력하지 않는 컨볼루션 신경망 시스템.
  13. 제 11 항에 있어서,
    상기 복수의 MUX 각각으로부터의 상기 적어도 하나의 입력 값은 상기 희소 가중치의 위치와 대응되는 입력 값인 컨볼루션 신경망 시스템.
  14. 제 11 항에 있어서,
    상기 희소 가중치 커널이 K×K (단, K는 자연수)의 크기를 갖는 경우, 상기 스위치 회로는 상기 복수의 MUX 각각으로 2K개의 입력 값들을 연결하도록 구성되는 컨볼루션 신경망 시스템.
  15. 제 11 항에 있어서,
    상기 MAC 연산기는 상기 복수의 MUX 각각으로부터의 상기 적어도 하나의 입력 값 및 상기 희소 가중치 커널을 기반으로 상기 컨볼루션 연산을 각각 수행하도록 구성되는 복수의 MAC 코어를 포함하는 컨볼루션 신경망 시스템.
  16. 컨볼루션 신경망 시스템의 동작 방법에 있어서,
    입력 데이터의 일부인 입력 타일을 저장하는 단계;
    희소 가중치 커널을 기반으로 상기 입력 타일의 입력 값들 각각을 복수의 멀티플렉서(MUX; multiplexer) 각각으로 연결하는 단계;
    상기 복수의 MUX 각각에서, 상기 희소 가중치 커널에 대한 희소 인덱스를 기반으로 상기 연결된 입력 값들 중 적어도 하나를 선택하는 단계;
    상기 희소 가중치 커널을 사용하여 상기 선택된 적어도 하나의 입력 값에 대한 컨볼루션 연산을 수행하는 단계;
    상기 컨볼루션 연산의 결과를 누적하는 단계; 및
    상기 누적된 결과를 출력 타일로써 외부 메모리로 제공하는 단계를 포함하는 동작 방법.
  17. 제 16 항에 있어서,
    상기 복수의 MUX 각각에서, 상기 희소 가중치 커널에 대한 희소 인덱스를 기반으로 상기 연결된 입력 값들 중 적어도 하나를 선택하는 단계는,
    상기 희소 가중치 커널에서 '0'이 아닌 가중치의 위치와 대응되는 입력 값들을 선택하고, 상기 희소 가중치 커널에서 '0'인 가중치의 위치와 대응되는 입력 값들을 선택하지 않는 단계를 포함하는 동작 방법.

KR1020170028471A 2016-11-07 2017-03-06 컨볼루션 신경망 시스템 및 그것의 동작 방법 KR102335955B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
US15/806,111 US11003985B2 (en) 2016-11-07 2017-11-07 Convolutional neural network system and operation method thereof

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
KR1020160147744 2016-11-07
KR20160147744 2016-11-07

Publications (2)

Publication Number Publication Date
KR20180052063A true KR20180052063A (ko) 2018-05-17
KR102335955B1 KR102335955B1 (ko) 2021-12-08

Family

ID=62486293

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020170028471A KR102335955B1 (ko) 2016-11-07 2017-03-06 컨볼루션 신경망 시스템 및 그것의 동작 방법

Country Status (1)

Country Link
KR (1) KR102335955B1 (ko)

Cited By (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2019231095A1 (en) * 2018-05-30 2019-12-05 Samsung Electronics Co., Ltd. Electronic apparatus and control method thereof
KR20200072666A (ko) 2018-12-13 2020-06-23 서울대학교산학협력단 합성곱 계층의 선택적 데이터 처리 방법 및 이를 이용한 뉴럴 프로세서
KR20200093404A (ko) * 2019-01-28 2020-08-05 포항공과대학교 산학협력단 신경망 가속기 및 그것의 동작 방법
KR20200095163A (ko) * 2019-01-31 2020-08-10 한국기술교육대학교 산학협력단 가속 회로에 적합한 합성곱 신경망의 Conv-XP 프루닝 장치
CN112684977A (zh) * 2019-10-18 2021-04-20 旺宏电子股份有限公司 存储器装置及其存储器内计算方法
KR20210065625A (ko) * 2019-11-27 2021-06-04 고려대학교 산학협력단 이종 곱셈-누셈 유닛을 이용하는 심층 신경망의 가속기
CN113065640A (zh) * 2021-03-17 2021-07-02 西北工业大学 一种基于卷积核形状自动学习的图像分类网络压缩方法
CN113228057A (zh) * 2019-01-11 2021-08-06 三菱电机株式会社 推理装置和推理方法
KR20210121533A (ko) * 2020-03-30 2021-10-08 포항공과대학교 산학협력단 일정한 확률의 인덱스 매칭을 수행하는 희소성 인식 신경 처리 유닛 및 처리 방법
KR102371451B1 (ko) * 2021-05-27 2022-03-07 충남대학교 산학협력단 멀티포트 메모리를 이용한 병렬 곱셈장치
US11483585B2 (en) 2019-09-11 2022-10-25 Samsung Electronics Co., Ltd. Electronic apparatus and controlling method thereof
KR102576762B1 (ko) * 2022-10-27 2023-09-11 한국과학기술원 인 메모리 연산에 기반하여 dnn 종단 간 학습 및 추론을 지원하는 가속기 구조
CN112684977B (zh) * 2019-10-18 2024-05-28 旺宏电子股份有限公司 存储器装置及其存储器内计算方法

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5241372A (en) * 1990-11-30 1993-08-31 Sony Corporation Video image processing apparatus including convolution filter means to process pixels of a video image by a set of parameter coefficients
US20160012330A1 (en) * 2014-03-06 2016-01-14 Progress, Inc. Neural network and method of neural network training

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5241372A (en) * 1990-11-30 1993-08-31 Sony Corporation Video image processing apparatus including convolution filter means to process pixels of a video image by a set of parameter coefficients
US20160012330A1 (en) * 2014-03-06 2016-01-14 Progress, Inc. Neural network and method of neural network training

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
Han, Song, et al. EIE: Efficient inference engine on compressed deep neural network. ACM SIGARCH Computer Architecture News 44.3. 2016.6.* *

Cited By (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11941501B2 (en) 2018-05-30 2024-03-26 Samsung Electronics Co., Ltd. Electronic apparatus and control method thereof
WO2019231095A1 (en) * 2018-05-30 2019-12-05 Samsung Electronics Co., Ltd. Electronic apparatus and control method thereof
KR20200072666A (ko) 2018-12-13 2020-06-23 서울대학교산학협력단 합성곱 계층의 선택적 데이터 처리 방법 및 이를 이용한 뉴럴 프로세서
CN113228057B (zh) * 2019-01-11 2024-05-31 三菱电机株式会社 推理装置和推理方法
CN113228057A (zh) * 2019-01-11 2021-08-06 三菱电机株式会社 推理装置和推理方法
KR20200093404A (ko) * 2019-01-28 2020-08-05 포항공과대학교 산학협력단 신경망 가속기 및 그것의 동작 방법
KR20200095163A (ko) * 2019-01-31 2020-08-10 한국기술교육대학교 산학협력단 가속 회로에 적합한 합성곱 신경망의 Conv-XP 프루닝 장치
US11483585B2 (en) 2019-09-11 2022-10-25 Samsung Electronics Co., Ltd. Electronic apparatus and controlling method thereof
CN112684977A (zh) * 2019-10-18 2021-04-20 旺宏电子股份有限公司 存储器装置及其存储器内计算方法
CN112684977B (zh) * 2019-10-18 2024-05-28 旺宏电子股份有限公司 存储器装置及其存储器内计算方法
KR20210065625A (ko) * 2019-11-27 2021-06-04 고려대학교 산학협력단 이종 곱셈-누셈 유닛을 이용하는 심층 신경망의 가속기
KR20210121533A (ko) * 2020-03-30 2021-10-08 포항공과대학교 산학협력단 일정한 확률의 인덱스 매칭을 수행하는 희소성 인식 신경 처리 유닛 및 처리 방법
US11928578B2 (en) 2020-03-30 2024-03-12 POSTECH Research and Business Development Foundation Sparsity-aware neural processing unit for performing constant probability index matching and processing method of the same
CN113065640B (zh) * 2021-03-17 2024-01-09 西北工业大学 一种基于卷积核形状自动学习的图像分类网络压缩方法
CN113065640A (zh) * 2021-03-17 2021-07-02 西北工业大学 一种基于卷积核形状自动学习的图像分类网络压缩方法
KR102371451B1 (ko) * 2021-05-27 2022-03-07 충남대학교 산학협력단 멀티포트 메모리를 이용한 병렬 곱셈장치
KR102576762B1 (ko) * 2022-10-27 2023-09-11 한국과학기술원 인 메모리 연산에 기반하여 dnn 종단 간 학습 및 추론을 지원하는 가속기 구조

Also Published As

Publication number Publication date
KR102335955B1 (ko) 2021-12-08

Similar Documents

Publication Publication Date Title
US11003985B2 (en) Convolutional neural network system and operation method thereof
KR102335955B1 (ko) 컨볼루션 신경망 시스템 및 그것의 동작 방법
US10860922B2 (en) Sparse convolutional neural network accelerator
US20180204110A1 (en) Compressed neural network system using sparse parameters and design method thereof
CN111898733B (zh) 一种深度可分离卷积神经网络加速器架构
KR20170126997A (ko) 신경망 프로세서의 벡터 컴퓨테이션 유닛
KR20180083030A (ko) 이진 파라미터를 갖는 컨볼루션 신경망 시스템 및 그것의 동작 방법
CN111461311B (zh) 基于众核处理器的卷积神经网络运算加速方法及装置
KR20180037558A (ko) 적응적 프루닝 및 가중치 공유를 사용하는 컨볼루션 신경망 시스템 및 그것의 동작 방법
CN108765282B (zh) 基于fpga的实时超分辨方法及系统
CN111931917A (zh) 前向计算的实现方法及装置、存储介质、电子装置
CN110766128A (zh) 卷积计算单元、计算方法及神经网络计算平台
CN112395092A (zh) 数据处理方法及人工智能处理器
CN113033794A (zh) 基于深度可分离卷积的轻量级神经网络硬件加速器
CN110334800A (zh) 一种用于视频识别的轻量级3d卷积网络系统
CN110377874B (zh) 卷积运算方法及系统
Wen et al. RFC-HyPGCN: A runtime sparse feature compress accelerator for skeleton-based GCNs action recognition model with hybrid pruning
Niu et al. SPEC2: Spectral sparse CNN accelerator on FPGAs
Venieris et al. unzipFPGA: Enhancing FPGA-based CNN engines with on-the-fly weights generation
US9009179B2 (en) System, method, and computer program product for performing graph matching
CN114003201A (zh) 矩阵变换方法、装置及卷积神经网络加速器
CN113052299A (zh) 基于通信下界的神经网络存内计算装置及加速方法
US6809422B2 (en) One-chip image processing apparatus
JP7387017B2 (ja) アドレス生成方法及びユニット、深層学習処理器、チップ、電子機器並びにコンピュータプログラム
CN110765413B (zh) 矩阵求和结构及神经网络计算平台

Legal Events

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