KR20220049432A - 팝카운트 기반 딥러닝 신경망 연산 방법, 곱셈 누산기 및 장치 - Google Patents
팝카운트 기반 딥러닝 신경망 연산 방법, 곱셈 누산기 및 장치 Download PDFInfo
- Publication number
- KR20220049432A KR20220049432A KR1020200163708A KR20200163708A KR20220049432A KR 20220049432 A KR20220049432 A KR 20220049432A KR 1020200163708 A KR1020200163708 A KR 1020200163708A KR 20200163708 A KR20200163708 A KR 20200163708A KR 20220049432 A KR20220049432 A KR 20220049432A
- Authority
- KR
- South Korea
- Prior art keywords
- multiplication
- value
- result
- values
- count
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/06—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
- G06N3/063—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/46—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using electromechanical counter-type accumulators
- G06F7/462—Multiplying; dividing
- G06F7/463—Multiplying; dividing by successive additions or subtractions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Health & Medical Sciences (AREA)
- Biophysics (AREA)
- Biomedical Technology (AREA)
- Life Sciences & Earth Sciences (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Health & Medical Sciences (AREA)
- Artificial Intelligence (AREA)
- Evolutionary Computation (AREA)
- Data Mining & Analysis (AREA)
- Mathematical Physics (AREA)
- Molecular Biology (AREA)
- Computational Linguistics (AREA)
- Mathematical Analysis (AREA)
- Computational Mathematics (AREA)
- Neurology (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
본 발명은 팝카운트 기반 딥러닝 신경망 연산 방법, 곱셈 누산기 및 장치에 관한 것이다. 본 발명의 일 실시예에 따른 연산 방법은 딥러닝 신경망(deep learning neural network)에 대한 연산 방법으로서, 가중치(W)들과 입력 값(A)들 간의 곱셈(제1 곱셈)들에 대해 각각, 제1 곱셈 결과 값들의 종류에 따른 원-핫 인코딩(one-hot encoding)의 코드들을 생성하는 단계; 상기 생성된 각 코드에 대해 팝카운트(pop-count)를 수행하는 단계; 서로 다른 상수 값인 상기 각 종류의 제1 곱셈 결과 값과 상기 팝카운트의 각 카운트 값 간의 상수 곱셈(제2 곱셈)에 대한 결과 값들을 누산하는 단계;를 포함한다.
Description
본 발명은 팝카운트 기반 딥러닝 신경망 연산 방법, 곱셈 누산기 및 장치에 관한 것으로서, 더욱 상세하게는 심층신경망(deep neural network; DNN) 등과 같은 딥러닝 신경망(deep learning neural network)에 대한 연산을 팝카운트(pop-count)에 기반하여 처리하는 방법, 곱셈 누산기 및 장치에 관한 것이다.
심층신경망(deep neural network; DNN) 등의 딥러닝 신경망(deep learning neural network)은 입력층(input layer)과 출력층(output layer) 사이에 여러 개의 은닉층(hidden layer)들로 이뤄진 인공신경망(artificial neural network; ANN)이다. 이때, 딥러닝 신경망은 일반적인 인공신경망과 마찬가지로 복잡한 비선형 관계(non-linear relationship)들을 모델링할 수 있다.
이러한 딥러닝 신경망은 많은 파라미터 수와 연산량으로 인해 하드웨어 동작 시 많은 에너지와 시간이 소모되며, 이를 줄이기 위해 연산의 비트-정밀도를 낮추는 방법이 사용되고 있다. 특히, 딥러닝 신경망에 대한 연산은 세부적으로 수많은 곱셈 결과(multiplication result)들을 누적(accumulation)하는 곱셈-누산 연산의 반복이다. 이때, 비트-정밀도가 낮아질수록 곱셈 결과 값의 종류가 적어지면서, 동일한 값을 가지는 곱셈 결과들이 더 많이 누적되는 현상이 발생한다.
종래 기술의 경우, 이러한 동일한 결과 값을 가지는 곱셈들의 반복을 고려하지 않고 단순히 곱셈 연산을 반복 수행하므로, 하드웨어의 전력 효율 측면에서 매우 비효율적인 문제점이 있다.
상기한 바와 같은 종래 기술의 문제점을 해결하기 위하여, 본 발명은 비트-정밀도가 낮은 딥러닝 신경망에 대한 연산을 팝카운트(pop-count)에 기반하여 처리하는 기술을 제공하는데 그 목적이 있다.
다만, 본 발명이 해결하고자 하는 과제는 이상에서 언급한 과제에 제한되지 않으며, 언급되지 않은 또 다른 과제들은 아래의 기재로부터 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자에게 명확하게 이해될 수 있을 것이다.
상기와 같은 과제를 해결하기 위한 본 발명의 일 실시예에 따른 연산 방법은 딥러닝 신경망(deep learning neural network)에 대한 연산 방법으로서, 가중치(W)들과 입력 값(A)들 간의 곱셈(제1 곱셈)들에 대해 각각, 제1 곱셈 결과 값들의 종류에 따른 원-핫 인코딩(one-hot encoding)의 코드들을 생성하는 단계; 상기 생성된 각 코드에 대해 팝카운트(pop-count)를 수행하는 단계; 및 서로 다른 상수 값인 상기 각 종류의 제1 곱셈 결과 값과 상기 팝카운트의 각 카운트 값 간의 상수 곱셈(제2 곱셈)에 대한 결과 값들을 누산하는 단계;를 포함한다.
상기 누산하는 단계는, 상기 제2 곱셈 결과 값들을 도출하는 제1 도출 단계; 및 상기 제2 곱셈 결과 값들에 대한 누산 결과 값을 도출하는 제2 도출 단계;를 포함할 수 있다.
상기 제1 도출 단계는 상기 상수 값과 상기 카운트 값 간에 곱셈 연산을 수행하는 상수 곱셈기를 이용하거나, 상기 상수 값의 비트에 대한 시프트(shift)를 수행하는 시프터(shifter)를 이용하는 단계를 포함할 수 있다.
상기 제1 도출 단계는 상기 제2 곱셈 결과 값들이 저장된 순람표(Lookup table)을 이용하는 단계를 포함할 수 있다.
상기 제2 도출 단계는 상기 제2 곱셈 결과 값들 간에 누산 연산을 수행하는 가산기 트리(adder tree)를 이용하는 단계를 포함할 수 있다.
상기 누산하는 단계는 상기 제2 곱셈 결과 값들이 저장된 순람표(Lookup table)를 기반으로 분산 산술(distributed arithmetic)을 수행하는 단계를 포함할 수 있다.
상기 생성하는 단계는 가중치와 입력 값의 비트 종류에 따라, 상기 제1 곱셈 결과 값의 종류를 구분하여 상기 코드를 생성하는 단계를 포함할 수 있다.
상기 생성하는 단계는, 상기 제1 곱셈에 대해 그 결과 값이 0(zero)인지 여부를 구분하는 제1 구분 단계; 및 그 결과 값이 0이 아닌 것(non-zero)으로 구분된 각 제1 곱셈에 대해 그 나머지의 결과 값 종류로 구분하는 제2 구분 단계; 및 상기 제2 구분 단계에서 구분된 결과를 기반으로, 상기 코드를 생성하는 단계;를 포함할 수 있다.
상기 제2 구분 단계는, 상기 non-zero로 구분된 각 제1 곱셈에 대해, 가중치와 입력 값의 최상위비트(most significant bit)를 기준으로 2개 그룹으로 그 결과 값의 종류를 구분하는 제2-1 단계; 및 상기 2개 그룹에 대해 각 그룹에 속한 제1 곱셈에 대해 그 결과 값의 종류를 구분하는 제2-2 구분 단계;를 포함할 수 있다.
본 발명의 일 실시예에 따른 연산 방법은, 상기 각 제1 곱셈 결과 값들의 종류에 대해, 그 반복 확률에 따라 다수의 데이터로 구분하는 단계; 및 제1 데이터에 속하는 상기 제1 곱셈에 대해, 상기 생성하는 단계, 상기 수행하는 단계 및 상기 누산하는 단계를 각각 적용하는 제1 연산 단계; 상기 제1 데이터 보다 반복 확률이 낮은 제2 데이터에 속하는 상기 제1 곱셈에 대해, 상기 제1 연산 단계와 다른 곱셈-누산의 연산을 수행하는 제2 연산 단계; 및 제1 및 제2 연산 단계의 결과 값들을 누산하는 제3 연산 단계;를 더 포함할 수 있다.
본 발명의 일 실시예에 따른 곱셈-누산기는 딥러닝 신경망 연산에 적용되는 곱셈 누산기로서, 가중치(W)들과 입력 값(A)들 간의 곱셈(제1 곱셈)들에 대해 각각, 제1 곱셈 결과 값들의 종류에 따른 원-핫 인코딩(one-hot encoding)의 코드들을 생성하는 인코더; 상기 생성된 각 코드에 대해 팝카운트(pop-count)를 수행하는 팝카운터; 및 서로 다른 상수 값인 상기 각 종류의 제1 곱셈 결과 값과 상기 팝카운트의 각 카운트 값 간의 상수 곱셈(제2 곱셈) 결과 값들을 누산하는 곱셈-누산 연산부;를 포함한다.
상기 곱셈-누산 연산부는 상기 상수 값과 상기 카운트 값 간에 곱셈 연산을 수행하는 상수 곱셈기나, 상기 상수 값의 비트에 대한 시프트(shift)를 수행하는 시프터(shifter)를 기반으로 상기 제2 곱셈 결과 값을 도출할 수 있다.
상기 곱셈-누산 연산부는 상기 제2 곱셈 결과 값들이 저장된 순람표(Lookup table)를 기반으로 상기 제2 곱셈 결과 값들을 도출할 수 있다.
상기 곱셈-누산 연산부는 상기 제2 곱셈 결과 값들 간에 누산 연산을 수행하는 가산기 트리(adder tree)를 기반으로 상기 제2 곱셈 결과 값들을 누산할 수 있다.
상기 곱셈-누산 연산부는 상기 제2 곱셈 결과 값이 저장된 순람표(Lookup table)를 기반으로 분산 산술(distributed arithmetic)을 수행하여 상기 제2 곱셈 결과 값들을 누산할 수 있다.
상기 인코더는 가중치와 입력 값의 비트 종류에 따라, 상기 제1 곱셈 결과 값의 종류를 구분하여 상기 코드를 생성할 수 있다.
상기 인코더는 상기 각 제1 곱셈에 대해 그 결과 값이 0(zero)인지 여부를 제1 구분하고, 그 결과 값이 0이 아닌 것(non-zero)으로 구분된 각 제1 곱셈에 대해 그 결과 값의 종류를 제2 구분하며, 상기 제2 구분된 결과를 기반으로, 상기 코드를 생성할 수 있다.
상기 인코더는 상기 제2 구분 시, 상기 non-zero로 구분된 각 제1 곱셈에 대해 가중치와 입력 값의 최상위비트(most significant bit)를 기준으로 2개 그룹으로 그 결과 값의 종류를 구분한 후, 상기 2개 그룹에 대해 각 그룹에 속한 제1 곱셈에 대해 그 결과 값의 종류를 구분할 수 있다.
본 발명의 일 실시예에 따른 곱셈-누산기는, 상기 인코더, 상기 팝카운터 및 상기 곱셈-누산 연산부를 각각 포함하며, 제1 데이터에 속하는 상기 제1 곱셈을 처리하는 제1 연산부; 상기 제1 데이터 보다 반복 확률이 낮은 제2 데이터에 속하는 상기 제1 곱셈에 대해, 상기 제1 연산부와 다른 곱셈-누산의 연산을 수행하는 제2 연산부; 및 제1 및 제2 연산부의 결과 값들을 누산하는 제3 연산부;를 더 포함할 수 있다.
본 발명의 일 실시예에 따른 전자 장치는 딥러닝 신경망(deep learning neural network) 연산을 수행하는 전자 장치로서, 상기 딥러닝 신경망의 가중치(W)들과, 상기 딥러닝 신경망의 입력층에 입력되는 입력 값(A)들을 저장한 메모리; 및 상기 메모리에 저장된 가중치들과 입력 값들 간의 곱셈(제1 곱셈)들에 대한 누산 결과 값을 계산하는 곱셈-누산기;를 포함한다.
상기 곱셈-누산기는, 상기 제1 곱셈들에 대해 각각, 제1 곱셈 결과 값들의 종류에 따른 원-핫 인코딩(one-hot encoding)의 코드들을 생성할 수 있고, 상기 생성된 각 코드에 대해 팝카운트(pop-count)를 수행할 수 있으며, 서로 다른 상수 값인 상기 각 종류의 제1 곱셈 결과 값과 상기 팝카운트의 각 카운트 값 간의 상수 곱셈(제2 곱셈) 결과 값들을 누산할 수 있다.
상기와 같이 구성되는 본 발명은 비트-정밀도가 낮은 심층신경망 등의 딥러닝 신경망에 대한 연산에서 많이 누적되는 동일한 결과 값을 가지는 곱셈들을 팝카운트 연산과 상수 곱셈으로 변환함으로써, 처리 속도를 향상시키면서, 그 하드웨어의 면적 및 소모 전력을 상당히 줄일 수 있는 이점이 있다.
본 발명은 딥 러닝 신경망 연산을 처리하는 모바일, 에지 기기 및 서버 등의 다양한 하드웨어에 적용 가능한 이점이 있다.
본 발명에서 얻을 수 있는 효과는 이상에서 언급한 효과들로 제한되지 않으며, 언급하지 않은 또 다른 효과들은 아래의 기재로부터 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자에게 명확하게 이해될 수 있을 것이다.
도 1은 딥러닝 신경망의 구성에 대한 일 예를 나타낸다.
도 2는 딥러닝 신경망에서, 전단에 위치한 층(전단 층)의 다수 노드와 후단에 위치한 층(후단 층)의 어느 한 노드 사이의 연결 관계에 대한 일 예를 나타낸다.
도 3은 딥러닝 신경망에서, 입력층의 다수 노드와 제1 은닉층의 어느 한 노드 사이의 연결 관계에 대한 일 예를 나타낸다.
도 4는 입력 데이터의 비트-정밀도에 따른 TOPS(Tera Operations Per Second) 성능 비교의 일 예를 나타낸다.
도 5는 낮은 비트-정밀도(2-bit)에서 입력 데이터 확률 분포 및 곱셈 연산 결과의 확률 분포 개념도에 대한 일 예를 나타낸다.
도 6은 딥러닝 신경망 연산을 위한 일반적인 곱셈-누산의 하드웨어에 대한 일 예를 나타낸다.
도 7은 도 6의 곱셈-누산 하드웨어에서 발생하는 입력 데이터의 비트-플립(bit-flip)에 따른 에너지(전력) 소모 증가를 나타낸다.
도 8은 일반적인 곱셈-누산기에서 수행되는 곱셈-누산 연산의 개념도를 나타낸다.
도 9는 본 발명의 일 실시예에 따른 전자 장치(1)의 블록 구성도를 나타낸다.
도 10은 본 발명의 일 실시예에 따른 전자 장치(1)에서 신경망 처리부(10)의 블록 구성도를 나타낸다.
도 11은 제1 연산부(100)의 블록 구성도를 나타낸다.
도 12 및 도 13은 제1 연산부(100)의 동작에 대한 다양한 예를 나타낸다.
도 14는 효율적인 팝카운트를 위해, 단계적으로 원-핫 인코딩 코드를 생성 과정을 나타낸다.
도 15는 본 발명의 일 실시예에 따른 딥러닝 신경망의 연산 방법의 순서도를 나타낸다.
도 16은 본 발명의 다른 일 실시예에 따른 딥러닝 신경망의 연산 방법의 순서도를 나타낸다.
도 17은 4-bit × 4-bit 정밀도에서 제1 곱셈 결과 값들의 반복 확률 분포에 대한 시뮬레이션 결과의 일 예를 나타낸다.
도 2는 딥러닝 신경망에서, 전단에 위치한 층(전단 층)의 다수 노드와 후단에 위치한 층(후단 층)의 어느 한 노드 사이의 연결 관계에 대한 일 예를 나타낸다.
도 3은 딥러닝 신경망에서, 입력층의 다수 노드와 제1 은닉층의 어느 한 노드 사이의 연결 관계에 대한 일 예를 나타낸다.
도 4는 입력 데이터의 비트-정밀도에 따른 TOPS(Tera Operations Per Second) 성능 비교의 일 예를 나타낸다.
도 5는 낮은 비트-정밀도(2-bit)에서 입력 데이터 확률 분포 및 곱셈 연산 결과의 확률 분포 개념도에 대한 일 예를 나타낸다.
도 6은 딥러닝 신경망 연산을 위한 일반적인 곱셈-누산의 하드웨어에 대한 일 예를 나타낸다.
도 7은 도 6의 곱셈-누산 하드웨어에서 발생하는 입력 데이터의 비트-플립(bit-flip)에 따른 에너지(전력) 소모 증가를 나타낸다.
도 8은 일반적인 곱셈-누산기에서 수행되는 곱셈-누산 연산의 개념도를 나타낸다.
도 9는 본 발명의 일 실시예에 따른 전자 장치(1)의 블록 구성도를 나타낸다.
도 10은 본 발명의 일 실시예에 따른 전자 장치(1)에서 신경망 처리부(10)의 블록 구성도를 나타낸다.
도 11은 제1 연산부(100)의 블록 구성도를 나타낸다.
도 12 및 도 13은 제1 연산부(100)의 동작에 대한 다양한 예를 나타낸다.
도 14는 효율적인 팝카운트를 위해, 단계적으로 원-핫 인코딩 코드를 생성 과정을 나타낸다.
도 15는 본 발명의 일 실시예에 따른 딥러닝 신경망의 연산 방법의 순서도를 나타낸다.
도 16은 본 발명의 다른 일 실시예에 따른 딥러닝 신경망의 연산 방법의 순서도를 나타낸다.
도 17은 4-bit × 4-bit 정밀도에서 제1 곱셈 결과 값들의 반복 확률 분포에 대한 시뮬레이션 결과의 일 예를 나타낸다.
본 발명의 상기 목적과 수단 및 그에 따른 효과는 첨부된 도면과 관련한 다음의 상세한 설명을 통하여 보다 분명해질 것이며, 그에 따라 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자가 본 발명의 기술적 사상을 용이하게 실시할 수 있을 것이다. 또한, 본 발명을 설명함에 있어서 본 발명과 관련된 공지 기술에 대한 구체적인 설명이 본 발명의 요지를 불필요하게 흐릴 수 있다고 판단되는 경우에는 그 상세한 설명을 생략하기로 한다.
본 명세서에서 사용된 용어는 실시예들을 설명하기 위한 것이며, 본 발명을 제한하고자 하는 것은 아니다. 본 명세서에서, 단수형은 문구에서 특별히 언급하지 않는 한 경우에 따라 복수형도 포함한다. 본 명세서에서, "포함하다", “구비하다”, “마련하다” 또는 “가지다” 등의 용어는 언급된 구성요소 외의 하나 이상의 다른 구성요소의 존재 또는 추가를 배제하지 않는다.
본 명세서에서, “또는”, “적어도 하나” 등의 용어는 함께 나열된 단어들 중 하나를 나타내거나, 또는 둘 이상의 조합을 나타낼 수 있다. 예를 들어, “또는 B”“및 B 중 적어도 하나”는 A 또는 B 중 하나만을 포함할 수 있고, A와 B를 모두 포함할 수도 있다.
본 명세서에서, “예를 들어” 등에 따르는 설명은 인용된 특성, 변수, 또는 값과 같이 제시한 정보들이 정확하게 일치하지 않을 수 있고, 허용 오차, 측정 오차, 측정 정확도의 한계와 통상적으로 알려진 기타 요인을 비롯한 변형과 같은 효과로 본 발명의 다양한 실시 예에 따른 발명의 실시 형태를 한정하지 않아야 할 것이다.
본 명세서에서, 어떤 구성요소가 다른 구성요소에 '연결되어’ 있다거나 '접속되어' 있다고 기재된 경우, 그 다른 구성요소에 직접적으로 연결되어 있거나 또는 접속되어 있을 수도 있지만, 중간에 다른 구성요소가 존재할 수도 있다고 이해되어야 할 것이다. 반면에, 어떤 구성요소가 다른 구성 요소에 '직접 연결되어' 있다거나 '직접 접속되어' 있다고 언급된 때에는, 중간에 다른 구성요소가 존재하지 않는 것으로 이해될 수 있어야 할 것이다.
본 명세서에서, 어떤 구성요소가 다른 구성요소의 '상에' 있다거나 '접하여' 있다고 기재된 경우, 다른 구성요소에 상에 직접 맞닿아 있거나 또는 연결되어 있을 수 있지만, 중간에 또 다른 구성요소가 존재할 수 있다고 이해되어야 할 것이다. 반면, 어떤 구성요소가 다른 구성요소의 '바로 위에' 있다거나 '직접 접하여' 있다고 기재된 경우에는, 중간에 또 다른 구성요소가 존재하지 않은 것으로 이해될 수 있다. 구성요소 간의 관계를 설명하는 다른 표현들, 예를 들면, '~사이에'와 '직접 ~사이에' 등도 마찬가지로 해석될 수 있다.
본 명세서에서, '제1', '제2' 등의 용어는 다양한 구성요소를 설명하는데 사용될 수 있지만, 해당 구성요소는 위 용어에 의해 한정되어서는 안 된다. 또한, 위 용어는 각 구성요소의 순서를 한정하기 위한 것으로 해석되어서는 안되며, 하나의 구성요소와 다른 구성요소를 구별하는 목적으로 사용될 수 있다. 예를 들어, '제1구성요소'는 '제2구성요소'로 명명될 수 있고, 유사하게 '제2구성요소'도 '제1구성요소'로 명명될 수 있다.
다른 정의가 없다면, 본 명세서에서 사용되는 모든 용어는 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자에게 공통적으로 이해될 수 있는 의미로 사용될 수 있을 것이다. 또한, 일반적으로 사용되는 사전에 정의되어 있는 용어들은 명백하게 특별히 정의되어 있지 않는 한 이상적으로 또는 과도하게 해석되지 않는다.
이하, 첨부된 도면을 참조하여 본 발명에 따른 바람직한 실시예를 상세히 설명하도록 한다.
도 1은 딥러닝 신경망의 구성에 대한 일 예를 나타낸다.
딥러닝 신경망(deep learning neural network)은, 도 1에 도시된 바와 같이, 입력층(input layer)과 출력층(output layer) 사이에 다수의 은닉층(hidden layer)(즉, n개의 은닉층)(단, n은 2이상의 자연수)을 포함하는 인공신경망(artificial neural network; ANN)이다. 이러한 딥러닝 신경망은 다수의 은닉층을 통해 입력층과 출력층 간의 다양한 비선형적 관계(non-linear relationship)를 학습하여 모델링할 수 있다.
이때, 입력층, 다수의 은닉층 및 출력층은 각각 다수의 노드(N)를 포함한다. 가령, 도 1에 도시된 바와 같이, 입력층은 Ni1, …Nik(단, k는 2이상의 자연수)의 노드들을, 제1 은닉층은 Nh11, …Nh1m(단, m는 2이상의 자연수)의 노드들을, 제n 은닉층은 Nhn1, …Nhns(단, n 및 s는 2이상의 자연수), 출력층은 No1, …Nok(단, p는 2이상의 자연수)의 노드들을 각각 포함할 수 있다.
도 2는 딥러닝 신경망에서, 전단에 위치한 층(전단 층)의 다수 노드와 후단에 위치한 층(후단 층)의 어느 한 노드 사이의 연결 관계에 대한 일 예를 나타낸다. 또한, 도 3은 딥러닝 신경망에서, 입력층의 다수 노드와 제1 은닉층의 어느 한 노드 사이의 연결 관계에 대한 일 예를 나타낸다.
딥러닝 신경망에서, 전단 층의 노드(전단 노드)들은 후단 층의 노드(후단 노드)들과 다양한 방식으로 연결된다. 이때, 각 노드는 가중치(W)를 가지며, 각 후단 노드의 노드 값은 그와 연결된 전단 노드의 노드 값 및 가중치에 의해 결정될 수 있다.
즉, 도 2를 참조하면, 다수의 전단 노드(NF1, …NFr)(단, r은 2 이상의 자연수)는 적어도 하나의 후단 노드(NB)와 연결된다. 이때, 각 전단 노드인 NF1, …NFr에 대해, 각 노드 값(즉, 입력 값)(activation)이 AF1, …AFr이고, 각 가중치(weight)가 WF1, …WFr라면, 후단 노드(NB)의 노드 값은 h(WF1AF1 + …+ WFrAFr)이다. 이때, h는 활성화 함수(activation function)로서, 예를 들어 쌍곡 탄젠트 함수, 시그모이드 함수, ReLU 함수 등일 수 있으나, 이에 한정되는 것은 아니다.
가령, 도 3에 도시된 바와 같이, 입력층의 각 노드인 Ni1, …Nik에 입력 값(activation)이 A1, …Ak가 입력되고, 그 각 입력 노드의 가중치(weight)가 W1, …WK라면, 제1 은닉층의 Nh11의 노드 값은 h(W1A1 + …. + WkAk)이다.
이러한 딥러닝 신경망 연산은 수많은 연산을 통해 다양한 분야의 어플리케이션에서 높은 정확도를 보여주고 있다. 하지만, 딥러닝 신경망은 통상적으로 수백만개 내지 수십억개의 파라미터 수와 연산량을 갖기 때문에, 하드웨어 구현 시 많은 전력 및 에너지를 소모하고 긴 처리시간을 갖는다. 이에 따라, 효과적으로 파라미터 저장공간과 연산량을 줄이기 위해, 입력 데이터의 비트-정밀도를 감소시키는 방법, 즉 각 입력 값에 대한 할당 데이터의 비트 수를 줄이는 방법을 사용한다. 이때, 입력 데이터는 딥러닝 신경망에서 각 층에 입력되는 데이터로서, 특히 딥러닝 신경망의 각 후단 층에 입력되는 데이터일 수 있다. 즉, 하나의 후단 노드에 대한 입력 데이터는 그와 연결된 전단 노드의 노드 값인 입력 값(activation; A)과, 그와 연결된 전단 노드의 가중치(weight; W)를 포함한다.
만일, 입력 데이터의 비트-정밀도를 절반으로 줄인다면, 동일 연산에 소모하는 하드웨어의 전력 및 에너지를 약 1/4로 줄일 수 있다. 특히, 추론 연산의 경우, 모바일이나 에지 기기에서 동작하는 경우가 많은데, 학습 연산보다 낮은 비트-정밀도를 요구하기 때문에, 이러한 비트-정밀도를 낮춰서 사용하는 다양한 방식들이 보편화되고 있다.
딥러닝 신경망 연산을 위해, 도 2 및 도 3에 도시된 바와 같이, 입력 값(A)들과 가중치(W)들 사이의 곱셈-누산(multiply-accumulate) 연산(즉, 입력 값들과 가중치들에 대한 곱셈 연산과, 그 곱셈 결과 값들을 누적하는 연산)이 수행되는데, 이때 전체 연산의 가장 큰 오버헤드는 곱셈 연산이다. 하지만, 비트-정밀도가 감소하면서, 동일한 결과 값을 가는 곱셈 연산들이 자주 반복되는 현상이 발생한다. 특히, 곱셈을 위한 입력 값들과 가중치 값들이 균등 분포(uniform distribution)가 아닌 정규 분포(normal distribution)(특히, 가중치의 경우) 및 반-정규 분포(half-normal distribution)(특히, 입력 값의 경우)를 갖기 때문에, 동일한 결과 값을 가지는 곱셈들의 반복 현상은 더욱 심화된다.
높은 비트-정밀도에서는 곱셈 결과 값의 종류가 많아서 normal distribution/half-normal distribution의 영향이 있더라도 확률적으로 동일한 결과 값을 가지는 곱셈들이 많이 반복되지 않기 때문에 곱셈-누산 연산이 효율적이다. 하지만, 낮은 비트-정밀도에서는 동일한 결과 값을 가지는 곱셈들이 훨씬 자주 반복된다. 이에 따라 종래 기술과 같이 모든 곱셈에 대해 각각 곱셈 연산을 수행하는 경우, 동일한 결과 값을 가지는 곱셈들에 대한 반복적인 연산에 그 전력 및 에너지의 대부분을 소모하게 된다. 이처럼 낮은-비트 정밀도에서는 동일한 결과 값을 가지는 곱셈 연산의 반복을 대체하여, 하드웨어의 전력 효율을 증대할 수 있는 새로운 연산 방법이 필요하다.
도 4는 입력 데이터의 비트-정밀도에 따른 TOPS(Tera Operations Per Second) 성능 비교의 일 예를 나타낸다.
딥러닝 신경망 연산의 비트-정밀도는 일반적으로 입력 데이터의 비트-정밀도로 표현될 수 있다. 도 4를 참조하면, 입력 데이터의 비트-정밀도 변화에 따른 GPU의 연산 처리 속도(TOPS) 성능을 비교할 수 있다. A100 GPU는 NVIDIA社의 최신 GPU 모델로 딥러닝 신경망 처리 전용 GPU이다. A100의 경우, 이전 버전인 V100과 달리 정수 8-bi (INT8), 정수 4-bit(INT4), 정수 1-bit(BINARY) 등과 같이, 초기에 사용되던 부동소수점 32-bit(FP32) 또는 16-bit(FP16) 보다 훨씬 낮은 비트-정밀도의 입력 데이터 형태를 지원한다. 정수 4-bit 연산의 경우, 부동소수점 32-bit 연산 대비 동일 GPU내에서 1248배의 연산 처리 속도 증가를 나타낸다.
도 5는 낮은 비트-정밀도(2-bit)에서 입력 데이터 확률 분포 및 곱셈 연산 결과의 확률 분포 개념도에 대한 일 예를 나타낸다.
도 5를 참조하면, 2-bit의 낮은 비트-정밀도에서 입력 데이터의 확률 분포 및 곱셈 연산 결과의 확률 분포를 알 수 있다. 이 경우, 곱셈 결과 값의 종류는 0, 1, 2, 3, 4, 6 및 9의 총 7가지가 있으며, 입력 데이터 분포에 따라 그 곱셈 결과 값이 작은 종류일수록(즉, 9, 6, 4, 3, 2, 1 및 0의 순서로), 그 반복 확률이 더 커진다. 즉, 딥러닝 신경망의 각 층에서, 입력 데이터의 가중치(W)는 normal distribution을 가지며, 입력 값(A)은 half-normal distribution을 가진다. 이러한 분포에 의해, 0, 1, 2 및 3과 같이 그 곱셈 결과 값이 작은 종류에 속하는 곱셈들이 자주 반복된다.
도 6은 딥러닝 신경망 연산을 위한 일반적인 곱셈-누산의 하드웨어에 대한 일 예를 나타내고, 도 7은 도 6의 곱셈-누산 하드웨어에서 발생하는 입력 데이터의 비트-플립(bit-flip)에 따른 에너지(전력) 소모 증가를 나타낸다. 또한, 도 8은 일반적인 곱셈-누산기에서 수행되는 곱셈-누산 연산의 개념도를 나타낸다.
도 6 및 도 7을 참조하면, 일반적인 딥러닝 신경망의 하드웨어에서의 비트-플립에 따른 에너지(혹은 전력) 소모 증가를 알 수 있다. 즉, 일반적인 딥러닝 신경망의 하드웨어는 2차원 배열(2D array) 구조로 곱셈-누산(multiply-accumulation)의 연산을 수행하는데, 입력 데이터가 바뀌면 비트-플립으로 인해 그 결과 값이 같은 곱셈들에 대해서도 그 하드웨어 내부에서 스위칭 전력 소모가 발생한다. 도 7을 참조하면, 이러한 비트-플립의 횟수와 그 에너지 소모는 서로 비례 관계임을 알 수 있다.
특히, 도 6과 같은 일반적인 곱셈-누산 하드웨어의 2D array 구조는 도 8의 구조를 다수 개 사용하는 구조를 가진다. 이때, 도 8의 구조에서, 가장 에너지 소모가 큰 부분은 곱셈기인데, 동일한 결과 값을 가지는 곱셈들에 대해 비트-플립으로 인한 스위칭 전력을 반복적으로 소모하는 것은 전체 하드웨어의 전력 효율 측면에서 비효율적이다.
이에, 본 발명은 딥러닝 신경망 연산을 팝카운트(pop-count)에 기반한 처리(즉, 제1 연산 방법)를 수행함으로써, 하드웨어의 전력 소모를 줄이고자 한다. 즉, 본 발명은 입력 데이터의 분포에 의해 어떤 곱셈 연산이 반복되는지를 예측하고, 이를 이용하여 반복 횟수를 세는 팝카운트 연산과 반복횟수×곱셈결과(미리 정해진 상수)의 상수곱셈 연산으로, 기존의 곱셈-누산 연산을 대체하고자 한다. 또한, 본 발명은 반복 횟수가 많은 경우에는 제1 연산 방법을 수행하고, 반복횟수가 적은 경우에는 종래의 일반적인 곱셈-누산 연산 방법(즉, 제2 연산 방법)을 수행하여, 상대적으로 높은 비트-정밀도에서도 반복 연산을 제거하도록 확장 가능하면서, 낮은 비트-정밀도에서의 효율은 더욱 향상시킬 수 있도록 한다.
도 9는 본 발명의 일 실시예에 따른 전자 장치(1)의 블록 구성도를 나타낸다.
본 발명의 일 실시예에 따른 전자 장치(1)는 딥러닝 신경망에 대한 연산을 수행하는 컴퓨팅(computing)이 가능한 장치이다.
예를 들어, 전자 장치는 데스크탑 PC(desktop personal computer), 랩탑 PC(laptop personal computer), 태블릿 PC(tablet personal computer), 넷북 컴퓨터(netbook computer), 워크스테이션(workstation), PDA(personal digital assistant), 스마트폰(smartphone), 스마트패드(smartpad), 또는 휴대폰(mobile phone), 등일 수 있으나, 이에 한정되는 것은 아니다.
이때, 딥러닝 신경망은 딥 러닝(deep learning) 기법에 따른 모델링을 위한 인공신경망으로서, 도 1 내지 도 3에 따라 상술한 입력층, 은닉층 및 출력층과, 각 층 내의 다수 노드를 각각 포함할 수 있다. 이러한 딥러닝 신경망은 다양한 딥 러닝 기법에 따라 학습 데이터에 의해 기 학습된 학습 모델일 수 있다.
즉, 딥러닝 신경망은 다수의 층을 포함하여, 학습을 통해 입력과 출력 간의 관계에 대한 함수를 가질 수 있다. 즉, 딥러닝 신경망은 입력과 출력 간의 관계를 다수의 은닉층으로 표현한다. 가령, 딥러닝 신경망의 기 학습된 모델에 대해, 입력층에 입력 데이터가 입력되면, 해당 은닉층의 함수 작용에 따른 출력 데이터가 출력층에 출력될 수 있다. 이때, 다수의 은닉층은 각각 적어도 하나 이상의 필터를 포함할 수 있으며, 각 필터는 가중치(weight)의 매트릭스(matrix)를 가질 수 있다.
예를 들어, 딥 러닝 기법은 Deep Neural Network(DNN), Convolutional Neural Network(CNN), Recurrent Neural Network(RNN), Restricted Boltzmann Machine(RBM), Deep Belief Network(DBN), Deep Q-Networks 등을 포함할 수 있으나, 이에 한정되는 것은 아니다.
이러한 전자 장치(1)는, 도 9에 도시된 바와 같이, 신경망 처리부(10), 입력부(20), 통신부(30), 디스플레이(미도시), 메모리(40) 및 제어부(50)를 포함할 수 있다.
신경망 처리부(10)는 딥러닝 신경망에 대한 연산을 위해 곱셈-누산의 연산을 수행하는 구성으로서, 각종 회로 등에 의해 구현된 하드웨어일 수 있다. 다만, 신경망 처리부(10)의 구성 및 작용 등에 대한 상세한 설명은 후술하도록 한다.
입력부(20)는 다양한 사용자(감시자 등)의 입력에 대응하여, 입력데이터를 발생시키며, 다양한 입력수단을 포함할 수 있다. 예를 들어, 입력부(20)는 키보드(key board), 키패드(key pad), 돔 스위치(dome switch), 터치 패널(touch panel), 터치 키(touch key), 터치 패드(touch pad), 마우스(mouse), 메뉴 버튼(menu button) 등을 포함할 수 있으나, 이에 한정되는 것은 아니다. 가령, 입력부(20)는 딥러닝 신경망 연산을 위한 명령 등을 입력 받을 수 있다.
통신부(30)는 다른 장치와의 통신을 수행하는 구성이다. 예를 들어, 통신부(30)는 5G(5th generation communication), LTE-A(long term evolution-advanced), LTE(long term evolution), 블루투스, BLE(bluetooth low energe), NFC(near field communication), 와이파이(WiFi) 통신 등의 무선 통신을 수행하거나, 케이블 통신 등의 유선 통신을 수행할 수 있으나, 이에 한정되는 것은 아니다. 가령, 통신부(30)는 타 장치로부터 딥러닝 신경망에 대한 정보를 수신할 수 있으며, 딥러닝 신경망에 대한 연산 결과 등을 타 장치로 송신할 수 있다.
메모리(40)는 전자 장치(1)의 동작에 필요한 각종 정보를 저장한다. 저장 정보로는 딥러닝 신경망에 대한 정보, 제1 및 제2 데이터에 대한 통계 값에 관한 정보, 후술할 딥러닝 신경망에 대한 연산 방법에 관련된 프로그램 정보 등이 포함될 수 있으나, 이에 한정되는 것은 아니다. 예를 들어, 메모리(40)는 그 유형에 따라 하드디스크 타입(hard disk type), 마그네틱 매체 타입(Sagnetic media type), CD-ROM(compact disc read only memory), 광기록 매체 타입(Optical Media type), 자기-광 매체 타입(Sagneto-optical media type), 멀티미디어 카드 마이크로 타입(Sultimedia card micro type), 플래시 저장부 타입(flash memory type), 롬 타입(read only memory type), 또는 램 타입(random access memory type) 등을 포함할 수 있으나, 이에 한정되는 것은 아니다. 또한, 메모리(40)는 그 용도/위치에 따라 캐시(cache), 버퍼, 주기억장치, 또는 보조기억장치이거나 별도로 마련된 저장 시스템일 수 있으나, 이에 한정되는 것은 아니다.
한편, 전자 장치(1)는 디스플레이(미도시)를 더 포함할 수도 있다. 이때, 디스플레이는 다양한 영상 데이터를 화면으로 표시하는 것으로서, 비발광형 패널이나 발광형 패널로 구성될 수 있다. 예를 들어, 디스플레이는 액정 디스플레이(LCD; liquid crystal display), 발광 다이오드(LED; light emitting diode) 디스플레이, 유기 발광 다이오드(OLED; organic LED) 디스플레이, 마이크로 전자기계 시스템(MEMS; micro electro mechanical systems) 디스플레이, 또는 전자 종이(electronic paper) 디스플레이 등을 포함할 수 있으나, 이에 한정되는 것은 아니다. 또한, 디스플레이는 입력부(20)와 결합되어 터치 스크린(touch screen) 등으로 구현될 수 있다. 가령, 디스플레이는 딥러닝 신경망에 대한 정보, 딥러닝 신경망 연산을 위한 설정 정보, 딥러닝 신경망에 대한 연산 결과 등 결과 등을 화면으로 표시할 수 있다.
제어부(50)는 전자 장치(1)의 다양한 제어 동작을 수행할 수 있다. 즉, 제어부(50)는 후술할 딥러닝 신경망 연산 방법의 수행을 제어할 수 있으며, 전자 장치(1)의 나머지 구성, 즉 신경망 처리부(10), 입력부(20), 통신부(30), 디스플레이(미도시), 메모리(40) 등의 동작을 제어할 수 있다. 예를 들어, 제어부(50)는 하드웨어인 프로세서(processor) 또는 해당 프로세서에서 수행되는 소프트웨어인 프로세스(process) 등을 포함할 수 있으나, 이에 한정되는 것은 아니다.
도 10은 본 발명의 일 실시예에 따른 전자 장치(1)에서 신경망 처리부(10)의 블록 구성도를 나타낸다.
신경망 처리부(10)는 딥러닝 신경망에 대한 연산을 처리하며, 도 10에 도시된 바와 같이, 곱셈 누산기(11) 및 버퍼(12)를 포함할 수 있다. 이러한 곱셈 누산기(11)나, 곱셈 누산기(11) 및 버퍼(12)를 포함하는 구성은 다양한 회로로 구현된 하드웨어 구성일 수 있다. 다만, 곱셈 누산기(11), 즉 제1 연산부 내지 제3 연산부(100, 200, 300)는 프로세스 등의 하드웨어 구성이 소프트웨어 구성일 수도 있으며, 이 경우에 해당 소프트웨어에 대한 정보는 메모리(40)에 저장되어 제어부(50)의 제어에 따라 동작할 수 있다. 또한, 신경망 처리부(10) 또는 곱셈 누산기(11)는 제어부(50) 내에 별도로 마련된 하드웨어 구성일 수도 있다.
곱셈 누산기(11)는 곱셈 누산에 대한 연산을 수행하는 구성으로서, 제1 연산부 내지 제3 연산부(100, 200, 300)를 포함할 수 있다.
도 11은 제1 연산부(100)의 블록 구성도를 나타내며, 도 12 및 도 13은 제1 연산부(100)의 동작에 대한 다양한 예를 나타낸다.
제1 연산부(100)는 제1 연산 방법, 즉 팝카운트(pop-count)에 기반한 처리를 수행하는 구성으로서, 도 11 내지 도 13에 도시된 바와 같이, 인코더(110), 팝카운터(120) 및 곱셈-누산 연산부(130)를 포함할 수 있다. 즉, 제1 연산부(100)는 반복적인 곱셈 연산을 간단한 팝카운트 연산과 상수 곱셈 연산으로 대체하는 구조를 가질 수 있다.
인코더(110)는 입력 데이터들의 곱셈, 즉 가중치(W)들과 입력 값(A)들 간의 곱셈(제1 곱셈)들에 대해 각각, 제1 곱셈 결과 값들의 종류에 따른 원-핫 인코딩(one-hot encoding)의 코드들을 생성한다. 즉, 각 제1 곱셈에 대해, 로드(load)가 큰 곱셈기를 이용한 곱셈 연산을 수행하지 않고, 단지 그 가중치(W)의 비트 종류와 그 입력 값(A)의 비트 종류에 따라, 그 제1 곱셈의 종류(즉, 제1 곱셈 결과 값의 종류)에 매칭(matching)되는 원-핫 인코딩 코드를 생성하는 것이다.
구체적으로, 가중치(W) 및 입력 값(A)의 비트 개수에 따라, 유한한 제1 곱셈 결과 값 종류의 개수도 결정되며, 그 유한한 종류의 각 제1 곱셈 결과 값은 서로 다른 상수 값을 가진다. 또한, 가중치(W) 및 입력 값(A)의 비트 종류에 따라, 제1 곱셈 결과 값의 종류가 매칭될 수 있으며, 매칭된 제1 곱셈 결과 값 종류에 따라 원-핫 인코딩 코드를 생성할 수 있다.
즉, 원-핫 인코딩 코드는 제1 곱셈 결과 값 종류의 개수만큼의 비트 개수를 가질 수 있다. 이때, 제1 곱셈이 해당하는 그 결과 값의 종류에 대한 비트 자리에 대해서만 1의 비트를 부여하고, 제1 곱셈이 해당하지 않는 나머지 결과 값 종류에 대한 비트 자리에 대해서는 0의 비트를 부여함으로써, 각 제1 곱셈을 원-핫 인코딩 코드로 표현할 수 있다.
예를 들어, 도 12 및 도 13에 도시된 바와 같이, 가중치(W)들 및 입력 값(A)들이 각각 2-bit를 가지는 경우, 그 결과 값은 0을 제외하고 1, 2, 3, 4, 6 및 9의 6개 종류를 가진다. 이때, 1, 2, 3, 4, 6 및 9의 제1 곱셈 결과 값은 서로 다른 상수 값을 가진다. 즉, 제1 곱셈 결과 값 종류인 1, 2, 3, 4, 6 및 9의 개수인 6만큼 6개 비트 자리를 마련하고, 2-bit인 가중치(W) 및 입력 값(A)의 종류에 따라, 그 제1 곱셈 결과 값의 종류를 구분하여, 마련된 각 비트 자리에 대해 1 또는 0의 비트를 부여한다.
즉, 가중치(W) 및 입력 값(A)의 곱셈인 제1 곱셈이 [01] × [01]인 경우, 1의 결과 값 종류의 비트 자리에만 1을 부여하여 [100000]의 코드를 생성하고, 제1 곱셈이 [01] × [10] 또는 [10] × [01]인 경우, 2의 결과 값 종류의 비트 자리에만 1을 부여하여 [010000]의 코드를 생성한다. 또한, 제1 곱셈이 [01] × [11] 또는 [11] × [01]인 경우, 3의 결과 값 종류의 비트 자리에만 1을 부여하여 [001000]의 코드를 생성하고, 제1 곱셈이 [10] × [10]인 경우, 4의 결과 값 종류의 비트 자리에만 1을 부여하여 [000100]의 코드를 생성한다. 또한, 제1 곱셈이 [10] × [11] 또는 [11] × [10]인 경우, 6의 결과 값 종류의 비트 자리에만 1을 부여하여 [000010]의 코드를 생성하고, 제1 곱셈이 [11] × [11]인 경우, 9의 결과 값 종류의 비트 자리에만 1을 부여하여 [000001]의 코드를 생성한다. 이와 같은 방식으로, 각 제1 곱셈에 대해, 그 가중치(W) 및 입력 값(A)의 종류에 따라, 그 결과 값의 종류를 구분하여, 원-핫 인코딩 코드를 생성할 수 있다.
물론, 제1 곱셈의 결과 값이 0인 경우에 대해서도 그 비트 자리를 부여하여 원-핫 인코딩 코드를 생성할 수 있다. 다만, 도 12 및 도 13에 도시된 바와 같이, 제1 곱셈의 결과 값이 0인 경우에 대해서는 원-핫 인코딩 코드와 별도로 그에 대해 표시할 수 있다. 이는 그 결과 값이 0인 제1 곱셈의 경우에 대해서는 곱셈 및 누산 등의 연산이 필요 없기 때문에, 해당 경우를 별도로 분리하여 표시하는 것이다.
가령, 도 12 및 도 13에 도시된 바와 같이, 가중치(W) 및 입력 값(A)의 각 값들에 대해, 각각 0(zero)인지 0이 아닌지(non-zero)인지를 index로 미리 표시(0인 경우에 0으로 표시)한 다음, 해당 index 중에 하나라도 0이라면 해당 제1 곱셈은 그 결과 값이 0인 것으로 Non-zero라 구분된 영역에 별도로 표시한다. 즉, Non-zero 영역이 0인 제1 곱셈은 그 결과 값이 0인 경우이다. 반면, Non-zero 영역이 1인 제1 곱셈은 그 결과 값이 0이 아닌 경우이며, 해당 제1 곱셈에 대해 그 가중치(W) 및 입력 값(A)의 비트 종류에 따라, 그 제1 곱셈 결과 값 종류를 구별하여, 원-핫 인코딩 코드를 생성한다.
도 14는 효율적인 팝카운트를 위해, 단계적으로 원-핫 인코딩 코드를 생성 과정을 나타낸다.
한편, 제1 연산부(100)에서 가장 큰 비중을 차지하는 부분은 원-핫 인코딩 값을 찾아서 팝카운트를 하는 부분으로, 이 부분의 효율적인 구현이 매우 중요하다. 이에 따라, zero/non-zero를 먼저 구분하고 단계적으로 절반씩 구분해가며 원-핫 인코딩 값을 생성하면, 팝카운트 연산의 효율적인 구현이 가능하다.
가령, 도 14에 도시된 바와 같이, 인코더(110)는 Non-zero 영역에 대해 구분(즉, 각 제1 곱셈에 대해 그 결과 값이 0인지 여부를 구분)하는 제1 구분을 먼저 수행한 후, Non-zero 영역이 1인 각 제1 곱셈(즉, 그 결과 값이 non-zero인 것으로 구분된 각 제1 곱셈)에 대해서만 그 결과 값의 종류를 제2 구분을 수행할 수 있다.
또한, 제2 구분에 대해서도, 인코더(110)는 non-zero로 구분된 각 제1 곱셈에 대해, 가중치(W) 및 입력 값(A)의 최상위비트(most significant bit; MSB)를 기준으로 2개 그룹으로 그 결과 값의 종류를 구분하는 제2-1 구분을 수행한 후, 2개 그룹에 대해 각 그룹에 속한 제1 곱셈에 대해, 그 결과 값의 종류를 구분하는 제2-2 구분을 수행할 수 있다.
예를 들어, 가중치(W) 및 입력 값(A)이 곱셈이 [00] × [00], [01] × [00], [00] × [01] 등인 제1 곱셈의 경우, 가중치(W)의 비트가 모두 0이거나 입력 값(A)의 비트가 모두 0이므로(또는, 그 index 중에 어느 하나가 0이므로), 그 결과 값은 0으로 제1 구분할 수 있다.
또한, 가중치(W) 및 입력 값(A)의 곱셈이 [01] × [01]인 제1 곱셈의 경우, 가중치(W) 및 입력 값(A)의 비트가 모두 0이 아니므로(또는, 그 index가 모두 1이므로), 그 결과 값이 0이 아닌 것으로 제1 구분할 수 있다. 이후, [01] 및 [01]의 각 MBS 중에 적어도 하나가 0이므로, 그 결과 값이 1, 2 및 3 중에 하나인 것으로 제2-1 구분할 수 있다. 이후, [01] 및 [01]의 나머지 비트 등의 종류에 따라, 그 결과 값이 1인 것으로 제2-2 구분할 수 있다.
또한, 가중치(W) 및 입력 값(A)의 곱셈이 [11] × [10]인 제1 곱셈의 경우, 가중치(W) 및 입력 값(A)의 비트가 모두 0이 아니므로(또는, 그 index가 모두 1이므로), 그 결과 값이 0이 아닌 것으로 제1 구분할 수 있다. 이후, [11] 및 [10]의 각 MBS가 모두 1이므로, 그 결과 값이 4, 6 및 9 중에 하나인 것으로 제2-1 구분할 수 있다. 이후, [11] 및 [10]의 나머지 비트 등의 종류에 따라, 그 결과 값이 3인 것으로 제2-2 구분할 수 있다.
즉, 가중치(W) 및 입력 값(A)의 각 비트 자리의 비트 종류에 따른 제1 및 제2 구분(제2-1 및 제2-2 구분)과 같은 단계적인 처리를 수행하는 경우, 인코더(110)는 보다 효율적으로 팝카운트가 가능한 원-핫 인코딩 코드를 생성할 수 있는 이점이 있다. 가령, 인코더(110)은 이러한 단계적인 처리가 하드웨어 구성 또는 소프트웨어 구성으로 구현될 수 있다. 특히, 이러한 단계적인 처리가 반영된 하드웨어 구성의 경우, 보다 빠르고 효율적인 원-핫 인코딩 코드의 생성이 가능한 이점이 있다.
다만, 본 발명은 이러한 단계적 수행에 한정되는 것은 아니며, 인코더(110)가 A 및 W의 각 비트 자리를 병렬적으로 매칭 처리하여, 그 결과 값 종류를 구분하여 각 제1 곱셈에 대한 원-핫 인코딩 코드를 생성하는 병렬 처리 구조를 가질 수도 있다.
팝카운터(120)는 인코더(110)에서 생성된 각 원-핫 인코딩 코드에 대해 팝카운트(pop-count)를 수행한다. 이때, 팝카운트는 대상 집합인 각 원-핫 인코딩 코드에 대해, 그 비트 자리 별로(즉, 제1 곱셈 결과 값의 종류 별로) 해당 자리에 부여된 비트들에서 0을 제외한 수(즉, 1)에 대해 팝카운트 처리하여, 각 자리에 대한 카운트 값(즉, 팝카운트 값)을 생성한다.
예를 들어, 제1 곱셈 결과 값의 종류가 1, 2, 3, 4, 6 및 9이고, 인코더(110)에서 다음의 표 1과 같은 16개 원-핫 인코딩 코드를 생성할 수 있다(이하, “제1 예시”라 지칭함).
16개 원-핫 인코딩 코드 | 각 제1 곱셈 결과 값 종류의 팝카운트 값 | |||||
제1 종류 (1) |
제2 종류 (2) |
제3 종류 (3) |
제4 종류 (4) |
제5 종류 (6) |
제6 종류 (9) |
|
[100000], [010000], [100000], [010000], [100000], [010000], [100000], [001000], [000100], [000010], [000001], [000100], [000010], [000100], [000001], [000100] |
4 | 3 | 1 | 4 | 2 | 2 |
이러한 제1 예시에서, 제1 내지 제6 종류에 따른 팝카운트 값은 각각 4, 3, 1, 4, 2 및 2이다. 즉, 이러한 팝카운트 값을 통해, 16개의 제1 곱셈에서, 제1 종류가 4번, 제2 종류가 3번, 제3 종류가 1번, 제4 종류가 4번, 제5 종류가 2번, 제6 종류가 2번 반복됨을 알 수 있다. 곱셈-누산 연산부(130)는 팝카운터(120)에서 도출된 팝카운트 값을 기반으로, 제1 곱셈 결과 값들을 누산한다. 즉, 곱셈-누산 연산부(130)는 서로 다른 상수 값인 각 종류의 제1 곱셈 결과 값과 각 카운트 값 간의 상수 곱셈(제2 곱셈)에 대한 결과 값들을 누산할 수 있다.
즉, 제1 예시에서, 곱셈-누산 연산부(130)는, 제1 종류의 값인 1과 그 팝카운트 값인 4 간의 제2 곱셈 결과 값(즉, 1×4=4)과, 제2 종류의 값인 2와 그 팝카운트 값인 2 간의 제2 곱셈 결과 값(즉, 2×3=6)과, 제3 종류의 값인 3과 그 팝카운트 값인 1 간의 제2 곱셈 결과 값(즉, 3×1=3)과, 제4 종류의 값인 4와 그 팝카운트 값인 4 간의 제2 곱셈 결과 값(즉, 4×4=16)과, 제5 종류의 값인 6과 그 팝카운트 값인 2 간의 제2 곱셈 결과 값(즉, 6×2=12)과, 제6 종류의 값인 9와 그 팝카운트 값인 2 간의 제2 곱셈 결과 값(즉, 9×2=18)을 각각 누산한다. 그 누산 결과 값은 4+6+3+16+12+18=59 이다.
이때, 곱셈-누산 연산부(130)는 제1 곱셈 결과 값(상수 값)과 카운트 값(변수 값) 간에 곱셈 연산(상수 값 × 변수 값)을 수행하는 상수 곱셈기(131)를 이용하여, 제2 곱셈 결과 값을 도출할 수 있다. 또한, 곱셈-누산 연산부(130)는 제1 곱셈 결과 값(상수 값)의 비트에 대한 시프트(shift)를 수행하는 시프터(shifter)(132)를 이용하여, 제2 곱셈 결과 값을 도출할 수 있다. 다만, 시프터(132)는 단순히 그 상수 값의 비트를 왼쪽으로 시프트함으로써 제2 곱셈 결과 값을 도출하거나, 그 상수 값의 비트를 왼쪽으로 시프트하면서 그 끝자리 비트에 1을 부여함으로써 제2 곱셈 결과 값을 도출할 수 있다. 이러한 시프트 수행 시 끝자리 비트에 대해 1을 부여하는 작용은 상수 값 및 변수 값의 비트 종류에 따라 선택될 수 있다.
도 12에서, 곱셈-누산 연산부(130)는 제3 종류(제1 곱셈 결과 값이 3), 제5 종류(제1 곱셈 결과 값이 6) 및 제6 종류(제1 곱셈 결과 값이 9)에 대해 상수 곱셈기(131)를 이용하였고, 나머지 제1 종류(제1 곱셈 결과 값이 1), 제2 종류(제1 곱셈 결과 값이 2) 및 제4 종류(제1 곱셈 결과 값이 4)에 대해 시프터(132)를 이용함으로써, 각 제2 곱셈 결과 값을 도출하였으나, 본 발명이 이에 한정되는 것은 아니다.
예를 들어, 제1 종류의 상수 값(제1 곱셈 결과 값)은 1, 즉 [01]이고, 그 카운트 값이 3인 경우, 그 제2 곱셈 결과 값은 1×3=3이다. 이를 위해, 제1 종류의 비트인 [01]을 왼쪽으로 한번 시프트하면서 그 끝자리에 1을 부여함으로써, [11]인 3의 제2 곱셈 결과 값을 도출할 수 있다.
예를 들어, 제2 종류의 상수 값은 2, 즉 [10]이고, 그 카운트 값이 2인 경우, 그 제2 곱셈 결과 값은 2×2=4이다. 이를 위해, 제2 종류의 비트인 [10]을 왼쪽으로 한번 시프트함으로써, [100]인 4의 제2 곱셈 결과 값을 도출할 수 있다.
또한, 곱셈-누산 연산부(130)는 입력들에 대한 누산 작용을 수행하는 가산기 트리(adder tree)(133)를 이용하여, 상수 곱셈기(131) 또는 시프터(132)에 의해 도출된 제2 곱셈 결과 값들을 누산할 수 있다.
한편, 도 13에서, 곱셈-누산 연산부(130)는 제2 곱셈 결과 값들이 저장된 순람표(Lookup table; LUT)(134)를 이용하여, 제2 곱셈 결과 값들을 도출할 수도 있다. 즉, 순람표에는 제1 곱셈 결과 값(상수 값)과 카운트 값(변수 값)의 제2 곱셈 결과 값들이 저장되어 있다. 이러한 순람표(134)에 카운트 값(변수 값)만을 입력하거나, 제1 곱셈 결과 값(상수 값) 및 카운트 값(변수 값)을 입력하면, 곱셈 연산 없이도 그와 매칭되는 제2 곱셈 결과 값을 획득할 수 있다. 다만, 이 경우에도, 가산기 트리(133)를 이용하여, 순람표(134)를 통해 획득한 제2 곱셈 결과 값들을 누산할 수 있다. 다만, 본 발명이 이에 한정되는 것은 아니며, 곱셈-누산 연산부(130)는 제2 곱셈 결과 값이 저장된 순람표(134)를 기반으로, 분산 산술(distributed arithmetic)을 수행함으로써 제2 곱셈 결과 값들을 누산할 수도 있다.
즉, 제1 연산부(100)는 가중치(W)와 입력 값(A)의 조합을 보고 0이 아닌 곱셈 결과(가령, 1,2,3,4,6,9)와 매칭하는 회로를 통해, 현재 가중치와 입력 값에서 어떤 곱셈 결과들이 있는지 매칭(matching)하여, 원-핫 인코딩(one-hot encoding)을 생성한다. 이후, 제1 연산부(100)는 원-핫 인코딩 값들에 대해 팝카운트를 수행한다. 이후, 제1 연산부(100)는 팝카운트를 통해 얻은 각 제1 곱셈의 반복 횟수와 이미 알고 있는 그 제1 곱셈 결과 값을 곱하는 반복 횟수 × 제1 곱셈 결과 값(미리 정해진 상수 값)의 상수 곱셈 연산을 하고, 이를 누적함으로써 도 8에 도시된 곱셈-누산의 연산과 동일한 결과를 얻을 수 있다.
특히, 상수 곱셈 연산은 곱셈의 한쪽 피연산자(operand)가 상수 값이기 때문에, 하드웨어 구현 시 일반적인 곱셈 연산과 비교하여, 매우 작은 면적과 전력을 소모하는 이점이 있다. 또한, 원-핫 인코딩을 찾는 매칭 연산과 팝카운트 연산 역시 기존 연산에 비해 하드웨어 구현이 효율적인 연산들이다. 따라서, 도 12 및 도 13에 도시된 바와 같은 하드웨어 구성을 구현하면, 도 8에 도시된 종래의 곱셈-누산 연산에 기반한 하드웨어보다 전반적으로 그 전력 효율이 뛰어난 이점을 가질 수 있다.
도 17은 4-bit × 4-bit 정밀도에서 제1 곱셈 결과 값들의 반복 확률 분포에 대한 시뮬레이션 결과의 일 예를 나타낸다.
한편, 제1 연산 방법에 따라 팝카운트 기반 연산으로 모든 연산을 수행할 경우, 상대적으로 높은 비트-정밀도에서는 그 개수가 상당히 많은 제1 곱셈 결과 값 종류를 모두 커버해야 하므로, 팝카운트 오버헤드가 급격히 증가한다. 또한, 낮은 비트-정밀도 내에서도, 도 17에 도시된 바와 같이, 상대적으로 반복 확률이 높은 제1 곱셈 결과 값 종류와, 상대적으로 반복 확률이 낮은 곱셈 결과 값 종류가 극명하게 나눠지므로, 이를 충분히 활용하고 높은 비트-정밀도에서도 반복되는 제1 곱셈을 제거하는 효과를 적용할 수 있는 확장성 있는 하드웨어 구조 등의 구성이 필요하다.
이에 따라, 제1 곱셈들에 대해, 그 결과 값 종류의 반복 확률에 따라 다수의 데이터로 구분할 수 있다. 즉, 반복 확률이 상대적으로 높아 자주 반복되는 데이터(제1 데이터)에 속하는 제1 곱셈들에 대해서는 제1 연산부(100)에서 처리한다. 반면, 반복 확률이 상대적으로 낮아 자주 반복되지 않는 데이터(제2 데이터)에 속하는 제1 곱셈들에 대해서는 제2 연산부(200)에서 처리한다. 다만, 이러한 제1 및 제2 데이터에 대해서는 사전에 통계적 처리에 의해 그 통계 값이 메모리(40)에 기 저장되어 있는 것이 바람직하다.
다음으로, 제2 연산부(200)는 제1 연산부(100)와 다른 곱셈-누산의 연산을 수행하는 구성이다. 가령, 제2 연산부(200)는 제2 연산 방법을 수행하는 구성일 수 있다. 이 경우, 제2 연산부(200)는, 종래 기술과 같이, 제1 곱셈에 대해, 해당 각 가중치(W)와 해당 각 입력 값(A) 간의 곱셈 연산과, 그 곱셈 연산의 결과 값에 대한 누산 연산을 각각 수행할 수 있다. 예를 들어, 이러한 각각의 연산을 위해, 제2 연산부(200)는 도 6 또는 도 7의 구조를 가질 수 있으나, 이에 한정되는 것은 아니다.
예를 들어, 입력 데이터에서, W가 W1, W2, W3 및 W4이고, A가 A1, A2, A3 및 A4인 경우, 제2 연산부(200)는 W1×A1, W2×A2, W3×A3 및 W4×A4의 각각에 대한 제1 곱셈의 연산과, 이들 그 제1 곱셈 결과 값들에 대한 누적 연산(즉, W1×A1 + W2×A2 + W3×A3 + W4×A4)을 각각 수행하도록 구성될 수 있다.
제3 연산부(300)는 제1 및 제2 연산부(100, 200)의 결과 값들을 누산한다. 즉, 제3 연산부(300)는 제1 연산부(100)에서 처리된 제1 데이터에 속한 제1 곱셈들의 누산 결과 값(즉, 제1 데이터의 제1 곱셈 결과 값들에 대한 누산 결과 값)과, 제2 연산부(200)에서 처리된 제2 데이터에 속한 제1 곱셈들의 누산 결과 값(즉, 제2 데이터의 제1 곱셈 결과 값들에 대한 누산 결과 값)을 누산한다.
상술한 바와 같이, 본 발명은 전체 입력 데이터를 반복 확률이 높은 제1 데이터와, 반복 확률이 낮은 제2 데이터로 구분함으로써, 구분된 각 데이터의 종류에 따라 각 제1 곱셈에 대해 다양한 곱셈-누산을 수행할 수 있다. 특히, 제1 데이터는 팝카운트-상수 곱셈을 기반으로 제1 연산부(100)에서 수행하여 그 반복 연산을 줄이는 효과를 가질 수 있다. 또한, 제2 데이터와 같이 반복 확률 대비 원-핫 인코딩 생성 오버헤드가 큰 부분은 일반적인 곱셈-누산 기반으로 제2 연산부(200)에서 처리한다.
이러한 구조를 적용하면, 전체 데이터 중 대부분의 반복 확률(도 17에서 80%)이 일부 제1 곱셈 결과 값 종류에 몰려 있는 데이터가 팝카운트-상수 곱셈 기반의 제1 연산부(100)에서 처리되므로, 그 처리 속도를 향상시키면서 그 소모 전력을 상당히 줄일 수 있다. 또한, 제2 연산부(200)는 기존의 곱셈-누산 기반 하드웨어보다 훨씬 적은 곱셈-누산기(도 17에서 20%)만 있어도 빠른 연산 처리 속도를 유지할 수 있다. 다만, 제1 연산부(100)와 재2 연산부(200) 간의 처리 속도를 동기화하는 제어가 필요할 수 있다.
버퍼(12)는 곱셈 누산기(11)의 동작, 즉 제1 연산부 내지 제3 연산부(100, 200, 300)의 동작에 필요한 다양한 데이터를 임시 저장하는 메모리로서, 제1 연산부 내지 제3 연산부(100, 200, 300)에 대한 글로벌 버퍼(global buffer)의 기능을 제공할 수 있다. 가령, 버퍼(12)는 제어부(50)와 메모리(40)의 사이에 고속으로 동작하여, 제1 연산부 내지 제3 연산부(100, 200, 300)와 메모리(40) 간의 데이터 전달을 연계할 수 있다. 즉, 버퍼(12)는 제1 연산부(100)로 제1 데이터를 전달할 수 있고, 제2 연산부(200)로 제2 데이터를 전달할 수 있다. 또한, 버퍼(120)는 제3 연산부(300)에서 누산된 결과 값인 제3 데이터를 제3 연산부(300)로부터 전달받을 수 있다.
한편, 신경망 처리부(10)는 프로세서 등의 별도의 자체 제어부(미도시)를 포함할 수 있다. 이러한 제어부는 전자 장치(1)의 제어부(50)의 명령에 따라, 상술한 곱셈 누산기(11) 및 버퍼(12)의 동작을 제어할 수 있으나, 이에 한정되는 것은 아니다.
이하, 본 발명의 다양한 실시예에 따른 딥러닝 신경망의 연산 방법에 대해 설명하도록 한다.
도 15는 본 발명의 일 실시예에 따른 딥러닝 신경망의 연산 방법의 순서도를 나타낸다.
본 발명의 일 실시예에 따른 딥러닝 신경망의 연산 방법은, 도 15에 도시된 바와 같이, S101 내지 S103을 포함한다. 이러한 S101 내지 S103는 제어부(50)에 의해 제어될 수 있으며, 상술한 바와 같이 신경망 처리부(10)의 제1 연산부(100)의 동작이 수행되는 단계들일 수 있다.
S101은 가중치(W)들과 입력 값(A)들 간의 곱셈(제1 곱셈)들에 대해 각각, 제1 곱셈 결과 값들의 종류에 따른 원-핫 인코딩(one-hot encoding)의 코드들을 생성하는 단계이다.
가령, S101에서, 가중치와 입력 값의 비트 종류에 따라, 제1 곱셈 결과 값의 종류를 구분하여 원-핫 인코딩 코드를 생성할 수 있다.
구체적으로, S101은 제1 곱셈에 대해 그 결과 값이 0(zero)인지 여부를 구분하는 제1 구분 단계와, 그 결과 값이 0이 아닌 것(non-zero)으로 구분된 각 제1 곱셈에 대해 그 나머지의 결과 값 종류로 구분하는 제2 구분 단계와, 제2 구분 단계에서 구분된 결과를 기반으로 원-핫 인코딩 코드를 생성하는 단계를 각각 포함할 수 있다.
또한, 제2 구분 단계는, non-zero로 구분된 각 제1 곱셈에 대해, 가중치와 입력 값의 최상위비트(most significant bit)를 기준으로 2개 그룹으로 그 결과 값의 종류를 구분하는 제2-1 단계와, 2개 그룹에 대해 각 그룹에 속한 제1 곱셈에 대해 그 결과 값의 종류를 구분하는 제2-2 구분 단계를 각각 포함할 수 있다.
즉, S101은 상술한 제1 연산부(100)의 인코더(110)의 동작이 수행되는 단계일 수 있다.
이후, S102는 S101에서 생성된 각 원-핫 인코딩 코드에 대해 팝카운트(pop-count)를 수행하는 단계이다. 즉, S102는 상술한 제1 연산부(100)의 팝카운터(120)의 동작이 수행되는 단계일 수 있다.
이후, S103은 서로 다른 상수 값인 상기 각 종류의 제1 곱셈 결과 값과 상기 팝카운트의 각 카운트 값 간의 상수 곱셈(제2 곱셈)에 대한 결과 값들을 누산하는 단계이다.
구체적으로, S103은 제2 곱셈 결과 값들을 도출하는 제1 도출 단계와, 상기 제2 곱셈 결과 값들에 대한 누산 결과 값을 도출하는 제2 도출 단계를 포함할 수 있다.
가령, 제1 도출 단계는 상수 값과 카운트 값 간에 곱셈 연산을 수행하는 상수 곱셈기를 이용하거나, 상수 값의 비트에 대한 시프트(shift)를 수행하는 시프터(shifter)를 이용하는 단계를 포함할 수 있다. 또한, 제1 도출 단계는 제2 곱셈 결과 값들이 저장된 순람표(Lookup table)을 이용하는 단계를 포함할 수 있다.
또한, 제2 도출 단계는 제2 곱셈 결과 값들 간에 누산 연산을 수행하는 가산기 트리(adder tree)를 이용하는 단계를 포함할 수 있다.
한편, S103은 제2 곱셈 결과 값들이 저장된 순람표(Lookup table)를 기반으로 분산 산술(distributed arithmetic)을 수행하는 단계를 포함할 수 있다.
즉, S103은 상술한 제1 연산부(100)의 곱셈-누산 연산부(130)의 동작이 수행되는 단계일 수 있다.
도 16은 본 발명의 다른 일 실시예에 따른 딥러닝 신경망의 연산 방법의 순서도를 나타낸다.
본 발명의 다른 일 실시예에 따른 딥러닝 신경망의 연산 방법은, 도 16에 도시된 바와 같이, S201 내지 S203을 포함한다. 이러한 S201 내지 S203는 제어부(50)에 의해 제어될 수 있으며, 상술한 바와 같이 신경망 처리부(10)의 제1 연산부 내지 제3 연산부(100, 200, 300)에서 수행될 수 있다.
S201은 각 제1 곱셈 결과 값들의 종류에 대해, 그 반복 확률에 따라 다수의 데이터로 구분하는 단계이다. 이때, 메모리(40)에 기 저장되어 버퍼(12)로 전달된 통계 데이터를 기반으로 다수의 데이터를 구분할 수 있다. 가령, 상대적으로 반복 확률이 높은 제1 데이터와, 상대적으로 반복 확률이 낮은 제2 데이터로 구분할 수 있다.
이후, S202는 구분된 데이터에 따라, 제1 연산 방법 또는 제2 연산 방법이 수행되는 단계이다.
S202는 제1 데이터에 속하는 상기 제1 곱셈에 대해, S101 내지 S103에 따른 제1 연산 방법을 적용하는 제1 연산 단계를 포함할 수 있다. 즉, 이러한 제1 연산 단계는 상술한 제1 연산부(100)의 동작이 수행되는 단계일 수 있다.
또한, S202는 제2 데이터에 속하는 상기 제1 곱셈에 대해, 제1 연산 단계와 다른 곱셈-누산의 연산을 수행하는 제2 연산 단계를 포함할 수 있다. 가령, 해당 각 가중치와 해당 각 입력 값 간의 곱셈 연산과, 그 곱셈 연산의 결과 값에 대한 누산 연산을 각각 수행하는 제2 연산 방법을 적용할 수 있다. 즉, 이러한 제2 연산 단계는 상술한 제2 연산부(200)의 동작이 수행되는 단계일 수 있다.
이후, S203은 제1 및 제2 연산 단계의 결과 값들을 누산하는 단계이다. 즉, S203은 상술한 제3 연산부(300)의 동작이 수행되는 단계일 수 있다.
상술한 바와 같이 구성되는 본 발명은 비트-정밀도가 낮은 심층신경망 등의 딥러닝 신경망에 대한 연산에서 많이 누적되는 동일한 결과 값을 가지는 곱셈들을 팝카운트 연산과 상수 곱셈으로 변환함으로써, 처리 속도를 향상시키면서, 그 하드웨어의 면적 및 소모 전력을 상당히 줄일 수 있는 이점이 있다. 또한, 본 발명은 딥 러닝 신경망 연산을 처리하는 모바일, 에지 기기 및 서버 등의 다양한 하드웨어에 적용 가능한 이점이 있다.
본 발명의 상세한 설명에서는 구체적인 실시 예에 관하여 설명하였으나 본 발명의 범위에서 벗어나지 않는 한도 내에서 여러 가지 변형이 가능함은 물론이다. 그러므로 본 발명의 범위는 설명된 실시 예에 국한되지 않으며, 후술되는 청구범위 및 이 청구범위와 균등한 것들에 의해 정해져야 한다.
1: 전자 장치
10: 신경망 처리부
11: 곱셈 누산기 12: 버퍼
20: 입력부 30: 통신부
40: 메모리 50: 제어부
100: 제1 연산부 110: 인코더
120: 팝카운터 130: 곱셈-누산 연산부
131: 상수 곱셈기 132: 시프터
133: 가산기 트리 134: 순람표
200: 제2 연산부 300: 제3 연산부
11: 곱셈 누산기 12: 버퍼
20: 입력부 30: 통신부
40: 메모리 50: 제어부
100: 제1 연산부 110: 인코더
120: 팝카운터 130: 곱셈-누산 연산부
131: 상수 곱셈기 132: 시프터
133: 가산기 트리 134: 순람표
200: 제2 연산부 300: 제3 연산부
Claims (20)
- 딥러닝 신경망(deep learning neural network)에 대한 연산 방법으로서,
가중치(W)들과 입력 값(A)들 간의 곱셈(제1 곱셈)들에 대해 각각, 제1 곱셈 결과 값들의 종류에 따른 원-핫 인코딩(one-hot encoding)의 코드들을 생성하는 단계;
상기 생성된 각 코드에 대해 팝카운트(pop-count)를 수행하는 단계; 및
서로 다른 상수 값인 상기 각 종류의 제1 곱셈 결과 값과 상기 팝카운트의 각 카운트 값 간의 상수 곱셈(제2 곱셈)에 대한 결과 값들을 누산하는 단계;
를 포함하는 연산 방법.
- 제1항에 있어서,
상기 누산하는 단계는,
상기 제2 곱셈 결과 값들을 도출하는 제1 도출 단계; 및
상기 제2 곱셈 결과 값들에 대한 누산 결과 값을 도출하는 제2 도출 단계;를 포함하는 연산 방법.
- 제2항에 있어서,
상기 제1 도출 단계는 상기 상수 값과 상기 카운트 값 간에 곱셈 연산을 수행하는 상수 곱셈기를 이용하거나, 상기 상수 값의 비트에 대한 시프트(shift)를 수행하는 시프터(shifter)를 이용하는 단계를 포함하는 연산 방법.
- 제2항에 있어서,
상기 제1 도출 단계는 상기 제2 곱셈 결과 값들이 저장된 순람표(Lookup table)을 이용하는 단계를 포함하는 연산 방법.
- 제3항 또는 제4항에 있어서,
상기 제2 도출 단계는 상기 제2 곱셈 결과 값들 간에 누산 연산을 수행하는 가산기 트리(adder tree)를 이용하는 단계를 포함하는 연산 방법.
- 제1항에 있어서,
상기 누산하는 단계는 상기 제2 곱셈 결과 값들이 저장된 순람표(Lookup table)를 기반으로 분산 산술(distributed arithmetic)을 수행하는 단계를 포함하는 연산 방법.
- 제1항에 있어서,
상기 생성하는 단계는 가중치와 입력 값의 비트 종류에 따라, 상기 제1 곱셈 결과 값의 종류를 구분하여 상기 코드를 생성하는 단계를 포함하는 연산 방법.
- 제7항에 있어서,
상기 생성하는 단계는,
상기 제1 곱셈에 대해 그 결과 값이 0(zero)인지 여부를 구분하는 제1 구분 단계; 및
그 결과 값이 0이 아닌 것(non-zero)으로 구분된 각 제1 곱셈에 대해 그 나머지의 결과 값 종류로 구분하는 제2 구분 단계; 및
상기 제2 구분 단계에서 구분된 결과를 기반으로, 상기 코드를 생성하는 단계;
를 포함하는 연산 방법.
- 제8항에 있어서,
상기 제2 구분 단계는,
상기 non-zero로 구분된 각 제1 곱셈에 대해, 가중치와 입력 값의 최상위비트(most significant bit)를 기준으로 2개 그룹으로 그 결과 값의 종류를 구분하는 제2-1 단계; 및
상기 2개 그룹에 대해 각 그룹에 속한 제1 곱셈에 대해 그 결과 값의 종류를 구분하는 제2-2 구분 단계;
를 포함하는 연산 방법.
- 제1항에 있어서,
상기 각 제1 곱셈 결과 값들의 종류에 대해, 그 반복 확률에 따라 다수의 데이터로 구분하는 단계; 및
제1 데이터에 속하는 상기 제1 곱셈에 대해, 상기 생성하는 단계, 상기 수행하는 단계 및 상기 누산하는 단계를 각각 적용하는 제1 연산 단계;
상기 제1 데이터 보다 반복 확률이 낮은 제2 데이터에 속하는 상기 제1 곱셈에 대해, 상기 제1 연산 단계와 다른 곱셈-누산의 연산을 수행하는 제2 연산 단계; 및
제1 및 제2 연산 단계의 결과 값들을 누산하는 제3 연산 단계;
를 더 포함하는 연산 방법.
- 딥러닝 신경망 연산에 적용되는 곱셈 누산기로서,
가중치(W)들과 입력 값(A)들 간의 곱셈(제1 곱셈)들에 대해 각각, 제1 곱셈 결과 값들의 종류에 따른 원-핫 인코딩(one-hot encoding)의 코드들을 생성하는 인코더;
상기 생성된 각 코드에 대해 팝카운트(pop-count)를 수행하는 팝카운터; 및
서로 다른 상수 값인 상기 각 종류의 제1 곱셈 결과 값과 상기 팝카운트의 각 카운트 값 간의 상수 곱셈(제2 곱셈) 결과 값들을 누산하는 곱셈-누산 연산부;
를 포함하는 곱셈 누산기.
- 제11항에 있어서,
상기 곱셈-누산 연산부는 상기 상수 값과 상기 카운트 값 간에 곱셈 연산을 수행하는 상수 곱셈기나, 상기 상수 값의 비트에 대한 시프트(shift)를 수행하는 시프터(shifter)를 기반으로 상기 제2 곱셈 결과 값을 도출하는 곱셈 누산기.
- 제11항에 있어서,
상기 곱셈-누산 연산부는 상기 제2 곱셈 결과 값들이 저장된 순람표(Lookup table)를 기반으로 상기 제2 곱셈 결과 값들을 도출하는 곱셈 누산기.
- 제12항 또는 제13항에 있어서,
상기 곱셈-누산 연산부는 상기 제2 곱셈 결과 값들 간에 누산 연산을 수행하는 가산기 트리(adder tree)를 기반으로 상기 제2 곱셈 결과 값들을 누산하는 곱셈 누산기.
- 제11항에 있어서,
상기 곱셈-누산 연산부는 상기 제2 곱셈 결과 값이 저장된 순람표(Lookup table)를 기반으로 분산 산술(distributed arithmetic)을 수행하여 상기 제2 곱셈 결과 값들을 누산하는 곱셈 누산기.
- 제11항에 있어서,
상기 인코더는 가중치와 입력 값의 비트 종류에 따라, 상기 제1 곱셈 결과 값의 종류를 구분하여 상기 코드를 생성하는 곱셈 누산기.
- 제11항에 있어서,
상기 인코더는 상기 각 제1 곱셈에 대해 그 결과 값이 0(zero)인지 여부를 제1 구분하고, 그 결과 값이 0이 아닌 것(non-zero)으로 구분된 각 제1 곱셈에 대해 그 결과 값의 종류를 제2 구분하며, 상기 제2 구분된 결과를 기반으로, 상기 코드를 생성하는 곱셈 누산기.
- 제17항에 있어서,
상기 인코더는 상기 제2 구분 시, 상기 non-zero로 구분된 각 제1 곱셈에 대해 가중치와 입력 값의 최상위비트(most significant bit)를 기준으로 2개 그룹으로 그 결과 값의 종류를 구분한 후, 상기 2개 그룹에 대해 각 그룹에 속한 제1 곱셈에 대해 그 결과 값의 종류를 구분하는 곱셈 누산기.
- 제11항에 있어서,
상기 인코더, 상기 팝카운터 및 상기 곱셈-누산 연산부를 각각 포함하며, 제1 데이터에 속하는 상기 제1 곱셈을 처리하는 제1 연산부;
상기 제1 데이터 보다 반복 확률이 낮은 제2 데이터에 속하는 상기 제1 곱셈에 대해, 상기 제1 연산부와 다른 곱셈-누산의 연산을 수행하는 제2 연산부; 및
제1 및 제2 연산부의 결과 값들을 누산하는 제3 연산부;
를 더 포함하는 곱셈 누산기.
- 딥러닝 신경망(deep learning neural network) 연산을 수행하는 전자 장치로서,
상기 딥러닝 신경망의 가중치(W)들과, 상기 딥러닝 신경망의 입력층에 입력되는 입력 값(A)들을 저장한 메모리; 및
상기 메모리에 저장된 가중치들과 입력 값들 간의 곱셈(제1 곱셈)들에 대한 누산 결과 값을 계산하는 곱셈-누산기;를 포함하며,
상기 곱셈-누산기는,
상기 제1 곱셈들에 대해 각각, 제1 곱셈 결과 값들의 종류에 따른 원-핫 인코딩(one-hot encoding)의 코드들을 생성하고, 상기 생성된 각 코드에 대해 팝카운트(pop-count)를 수행하며, 서로 다른 상수 값인 상기 각 종류의 제1 곱셈 결과 값과 상기 팝카운트의 각 카운트 값 간의 상수 곱셈(제2 곱셈) 결과 값들을 누산하는 전자 장치.
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/KR2020/017253 WO2022080579A1 (ko) | 2020-10-14 | 2020-11-30 | 팝카운트 기반 딥러닝 신경망 연산 방법, 곱셈 누산기 및 장치 |
US17/254,254 US20220317973A1 (en) | 2020-10-14 | 2020-11-30 | Pop count-based deep learning neural network computation method, multiply accumulator and device |
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020200132847 | 2020-10-14 | ||
KR20200132847 | 2020-10-14 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20220049432A true KR20220049432A (ko) | 2022-04-21 |
KR102553941B1 KR102553941B1 (ko) | 2023-07-10 |
Family
ID=81437572
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020200163708A KR102553941B1 (ko) | 2020-10-14 | 2020-11-30 | 팝카운트 기반 딥러닝 신경망 연산 방법, 곱셈 누산기 및 장치 |
Country Status (1)
Country | Link |
---|---|
KR (1) | KR102553941B1 (ko) |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20170351781A1 (en) * | 2016-06-06 | 2017-12-07 | Salesforce.Com, Inc. | Relevant information retrieval in record management systems |
WO2019213745A1 (en) * | 2018-05-08 | 2019-11-14 | The Governing Council Of The University Of Toronto | Neural network processing element |
KR20200121497A (ko) | 2019-04-16 | 2020-10-26 | 한국전자통신연구원 | 가중치 신경망의 신경망 연산 방법 및 장치 |
-
2020
- 2020-11-30 KR KR1020200163708A patent/KR102553941B1/ko active IP Right Grant
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20170351781A1 (en) * | 2016-06-06 | 2017-12-07 | Salesforce.Com, Inc. | Relevant information retrieval in record management systems |
WO2019213745A1 (en) * | 2018-05-08 | 2019-11-14 | The Governing Council Of The University Of Toronto | Neural network processing element |
KR20200121497A (ko) | 2019-04-16 | 2020-10-26 | 한국전자통신연구원 | 가중치 신경망의 신경망 연산 방법 및 장치 |
Also Published As
Publication number | Publication date |
---|---|
KR102553941B1 (ko) | 2023-07-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112074806B (zh) | 用于块浮点计算的系统、方法和计算机存储介质 | |
Wang et al. | A high-speed and low-complexity architecture for softmax function in deep learning | |
CN107340993B (zh) | 运算装置和方法 | |
CN112088354B (zh) | 使用共享指数的块浮点计算 | |
KR102655950B1 (ko) | 뉴럴 네트워크의 고속 처리 방법 및 그 방법을 이용한 장치 | |
CN110738315A (zh) | 一种神经网络精度调整方法及装置 | |
CN113994347A (zh) | 用于负值和正值的非对称缩放因子支持的系统和方法 | |
Abed et al. | High‐performance low‐power approximate Wallace tree multiplier | |
EP3971787A1 (en) | Spatial tiling of compute arrays with shared control | |
US11270196B2 (en) | Multi-mode low-precision inner-product computation circuits for massively parallel neural inference engine | |
Chen et al. | Approximate softmax functions for energy-efficient deep neural networks | |
CN112085154A (zh) | 用于神经网络的压缩和推断加速的非对称量化 | |
KR20210086233A (ko) | 완화된 프루닝을 통한 행렬 데이터 처리 방법 및 그 장치 | |
Yin et al. | MINT: Multiplier-less INTeger Quantization for Energy Efficient Spiking Neural Networks | |
CN111492369B (zh) | 人工神经网络中移位权重的残差量化 | |
KR102553941B1 (ko) | 팝카운트 기반 딥러닝 신경망 연산 방법, 곱셈 누산기 및 장치 | |
US20240281393A1 (en) | Circular buffer for input and output of tensor computations | |
KR102037043B1 (ko) | 세밀한 정밀도 조정이 가능한 곱셈누적기 | |
US20220317973A1 (en) | Pop count-based deep learning neural network computation method, multiply accumulator and device | |
Parhami | Truncated ternary multipliers | |
CN112889025A (zh) | 利用硬件计算效率优化神经网络 | |
CN112384935A (zh) | 分布式神经网络核心网络中的层级并行 | |
Wang et al. | Trained biased number representation for ReRAM-based neural network accelerators | |
JP2020042399A (ja) | 積和演算装置、積和演算方法、及びシステム | |
JP7506276B2 (ja) | 半導体ハードウェアにおいてニューラルネットワークを処理するための実装および方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
E902 | Notification of reason for refusal | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant |