KR20200043617A - 고효율 연산 처리를 위한 인공 신경망 모듈 및 이의 스케쥴링 방법 - Google Patents

고효율 연산 처리를 위한 인공 신경망 모듈 및 이의 스케쥴링 방법 Download PDF

Info

Publication number
KR20200043617A
KR20200043617A KR1020180124166A KR20180124166A KR20200043617A KR 20200043617 A KR20200043617 A KR 20200043617A KR 1020180124166 A KR1020180124166 A KR 1020180124166A KR 20180124166 A KR20180124166 A KR 20180124166A KR 20200043617 A KR20200043617 A KR 20200043617A
Authority
KR
South Korea
Prior art keywords
neural network
artificial neural
vector register
convolution
convolution kernel
Prior art date
Application number
KR1020180124166A
Other languages
English (en)
Other versions
KR102164190B1 (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 KR1020180124166A priority Critical patent/KR102164190B1/ko
Publication of KR20200043617A publication Critical patent/KR20200043617A/ko
Application granted granted Critical
Publication of KR102164190B1 publication Critical patent/KR102164190B1/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
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology

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

본 발명은 적어도 하나의 입력 특징맵에 대해 컨볼루션 연산이 수행하기 위해 기지정된 크기의 가중치 행렬로 구성되는 적어도 하나의 컨볼루션 커널이 저장된 인공 신경망 모듈에서, 적어도 하나의 컨볼루션 커널의 각 축 방향 크기 중 기지정된 레인의 개수에 대응하는 크기의 축 방향에 따라 적어도 하나의 컨볼루션 커널의 가중치를 로드하고, 가중치가 로드되는 방향에 대응하여 입력 특징맵의 특징값을 로드하는 벡터 레지스터 및 벡터 레지스터에 로드된 다수의 가중치와 다수의 가중치에 대응하는 다수의 특징값에 대해 기지정된 연산하는 수행하는 연산부를 포함하는 인공 신경망 모듈 및 이의 스케쥴링 방법을 제공한다. 따라서 인공 신경망 모듈의 벡터 레지스터의 효율성을 크게 높일 뿐만 아니라, 고효율 연산 처리를 수행할 수 있도록 하여 인공 신경망의 성능을 대폭 향상시킬 수 있다.

Description

고효율 연산 처리를 위한 인공 신경망 모듈 및 이의 스케쥴링 방법{ARTIFICIAL NEURAL NETWORK MODULE AND SCHEDULING METHOD THEREOF FOR HIGHLY EFFECTIVE OPERATION PROCESSING}
본 발명은 인공 신경망 모듈 및 이의 스케쥴링 방법에 관한 것으로, 고효율 연산 처리를 위한 인공 신경망 모듈 및 이의 스케쥴링 방법에 관한 것이다.
최근 인간의 두뇌가 패턴을 인식하는 방법을 모사하여 두뇌와 비슷한 방식으로 여러 정보를 처리하도록 구성되는 인공 신경망(artificial neural network)이 다양한 분야에 적용되어 사용되고 있다.
특히 인공 신경망 중 하나인 컨볼루션 신경망(Convolution Neural Network)은 영상 인식, 음성인식, 자연어 처리 등 다양한 분야에 적용되어 사용되고 있다. 컨볼루션 신경망은 컨볼루션 연산을 이용하여 분류하고자 하는 이미지의 특징을 추출하고, 추출된 특징값을 분류하여 높은 정확도의 분류 성능을 얻을 수 있다.
그러나 컨볼루션 신경망은 연산과정에서 방대한 데이터를 바탕으로 많은 양의 곱셈과 덧셈 연산을 요구한다. 행렬 곱 기반의 컨볼루션 연산은 데이터 단위의 병렬처리에 적합한 구조를 가지고 있기 때문에, Graphic Processing Unit (GPU)를 활용할 경우 높은 성능 향상을 얻는 것이 가능하다. 이에 CPU가 아닌 GPU가 범용 연산을 수행할 수 있도록 하는 General Purpose GPU (GPGPU) 기법을 이용하여, 컨볼루션 신경망의 병렬 연산을 가속화하기 위한 연구가 활발하게 진행되고 있다.
그러나 사물 인터넷(Internet of Things: IoT) 장치와 같은 경량 하드웨어를 갖는 임베디드 시스템은 활용할 수 있는 GPU의 기능이 제한적이거나 사용할 수 없는 경우가 발생한다. 따라서 CPU의 자원을 효율적으로 활용하여 성능을 향상 시킬 수 있는 인공 신경망 모듈이 요구되고 있다.
한국 공개 특허 제10-2017-0099848호 (2017.09.01 공개)
본 발명의 목적은 컨볼루션 커널을 재구성하여 CPU의 자원을 효율적으로 활용할 수 있도록 하는 인공 신경망 모듈 및 이의 스케쥴링 방법을 제공하는데 있다.
본 발명의 다른 목적은 SIMD 장치 내 벡터 레지스터에서 사용되지 않는 레인의 수를 최소화하여, 연산의 수를 줄이고 연산 속도를 향상 시킬 수 있는 인공 신경망 모듈 및 이의 스케쥴링 방법을 제공하는데 있다.
상기 목적을 달성하기 위한 본 발명의 일 실시예에 따른 인공 신경망 모듈은 적어도 하나의 입력 특징맵에 대해 컨볼루션 연산이 수행하기 위해 기지정된 크기의 가중치 행렬로 구성되는 적어도 하나의 컨볼루션 커널이 저장된 인공 신경망 모듈에 있어서, 상기 적어도 하나의 컨볼루션 커널의 각 축 방향 크기 중 기지정된 레인의 개수에 대응하는 크기의 축 방향에 따라 상기 적어도 하나의 컨볼루션 커널의 가중치를 로드하고, 상기 가중치가 로드되는 방향에 대응하여 상기 입력 특징맵의 특징값을 로드하는 벡터 레지스터; 및 상기 벡터 레지스터에 로드된 상기 다수의 가중치와 상기 다수의 가중치에 대응하는 다수의 특징값에 대해 기지정된 연산하는 수행하는 연산부; 를 포함한다.
상기 벡터 레지스터는 기지정된 개수의 상기 레인으로 구성되는 다수의 벡터를 포함하고, 상기 적어도 하나의 컨볼루션 커널의 각 축 방향 크기 중 상기 레인 개수의 정수배와 동일하거나 가장 가까운 크기의 축 방향을 선택하고, 선택된 축 방향에 따라 상기 가중치를 벡터의 각 레인에 로드할 수 있다.
상기 벡터 레지스터는 상기 선택된 축 방향의 크기가 상기 레인의 개수보다 크면, 선택된 축 방향에 따른 상기 가중치를 다수의 벡터에 분할하여 로드할 수 있다.
상기 연산부는 상기 벡터 레지스터의 벡터에 로드된 다수의 가중치 중 대응하는 가중치와 상기 벡터 레지스터의 벡터에 로드된 다수의 특징값 중 가중치에 대응하는 특징값에 대해 곱셈 연산을 각각 수행하는 다수의 프로세스 유닛; 을 포함할 수 있다.
상기 연산부는 상기 다수의 프로세스 유닛 각각의 곱셈 연산의 결과를 합산하여 출력할 수 있다.
상기 벡터 레지스터는 상기 컨볼루션 커널이 다수의 2차원 컨볼루션 커널이면, 하나의 3차원 컨볼루션 커널로 통합하고, 통합된 3차원 컨볼루션 커널의 각 축 방향 크기 중 상기 레인 개수의 정수배와 동일하거나 가장 가까운 크기의 축 방향을 선택하여, 선택된 축 방향에 따라 상기 가중치를 벡터의 각 레인에 로드할 수 있다.
상기 목적을 달성하기 위한 본 발명의 다른 실시예에 따른 인공 신경망 모듈의 스케쥴링 방법은 적어도 하나의 입력 특징맵에 대해 컨볼루션 연산이 수행하기 위해 기지정된 크기의 가중치 행렬로 구성되는 적어도 하나의 컨볼루션 커널이 저장된 인공 신경망 모듈의 스케쥴링 방법에 있어서, 상기 적어도 하나의 컨볼루션 커널의 각 축 방향 크기 중 기지정된 레인의 개수에 대응하는 크기의 축 방향에 따라 상기 적어도 하나의 컨볼루션 커널의 가중치를 로드하는 단계; 상기 가중치가 로드되는 방향에 대응하여 상기 입력 특징맵의 특징값을 벡터 레지스터에 로드하는 단계; 및 상기 벡터 레지스터에 로드된 상기 다수의 가중치와 상기 다수의 가중치에 대응하는 다수의 특징값에 대해 기지정된 연산을 수행하는 단계; 를 포함한다.
따라서, 본 발명의 실시예에 따른 고효율 연산 처리를 위한 인공 신경망 모듈 및 이의 스케쥴링 방법은 컨볼루션 커널을 재구성하고, 이에 따라 입력 특징맵의 특징 값 행렬을 재구성함으로써, CPU 내에 포함되는 SIMD 장치의 벡터 레지스터에서 사용되지 않는 레인의 수를 최소화할 수 있다. 레인의 수를 최소화함으로써, 연산의 수를 줄이고 연산 속도를 향상 시켜, CPU의 자원을 효율적으로 활용할 수 있도록 한다.
도1 은 인공 신경망의 일예에 대한 개괄적 구조를 나타낸다.
도2 는 인공 신경망 모듈의 개략적 구조를 나타낸다.
도3 은 도1 의 제1 컨볼루션 커널이 벡터 레지스터에 저장되는 방식의 일예를 나타낸다.
도4 는 본 발명의 일 실시예에 따른 컨볼루션 커널을 재구성하는 개념을 나타낸다.
도5 는 도4 의 재구성된 제1 컨볼루션 커널의 가중치가 벡터 레지스터에 저장되는 방식의 일예를 나타낸다.
도6 은 본 발명의 일 실시예에 따른 인공 신공망 모듈의 스케쥴링 방법을 나타낸다.
본 발명과 본 발명의 동작상의 이점 및 본 발명의 실시에 의하여 달성되는 목적을 충분히 이해하기 위해서는 본 발명의 바람직한 실시예를 예시하는 첨부 도면 및 첨부 도면에 기재된 내용을 참조하여야만 한다.
이하, 첨부한 도면을 참조하여 본 발명의 바람직한 실시예를 설명함으로써, 본 발명을 상세히 설명한다. 그러나, 본 발명은 여러 가지 상이한 형태로 구현될 수 있으며, 설명하는 실시예에 한정되는 것이 아니다. 그리고, 본 발명을 명확하게 설명하기 위하여 설명과 관계없는 부분은 생략되며, 도면의 동일한 참조부호는 동일한 부재임을 나타낸다.
명세서 전체에서, 어떤 부분이 어떤 구성요소를 "포함"한다고 할 때, 이는 특별히 반대되는 기재가 없는 한 다른 구성요소를 제외하는 것이 아니라, 다른 구성요소를 더 포함할 수 있는 것을 의미한다. 또한, 명세서에 기재된 "...부", "...기", "모듈", "블록" 등의 용어는 적어도 하나의 기능이나 동작을 처리하는 단위를 의미하며, 이는 하드웨어나 소프트웨어 또는 하드웨어 및 소프트웨어의 결합으로 구현될 수 있다.
도1 은 인공 신경망의 일예에 대한 개괄적 구조를 나타낸다.
도1 은 인공 신경망(artificial neural network)의 일예로서, 컨볼루션 신경망(Convolution Neural Network: CNN)을 도시하였다. 특히 컨볼루션 신경망에서도 광학적 문자 인식(Optical character reader)에 사용되는 인공 신경망으로, 우편물의 우편 번호 인식, 및 숫자 인식을 위해 개발된 대표적인 컨볼루션 신경망인 LeNet-5의 개괄적 구조를 나타낸다.
LeNet-5는 일예로 32 X 32 크기의 입력 영상(Input)를 인가받아, 컨볼루션 연산 및 서브 샘플링 연산을 반복적으로 수행하며 특징맵(feature map: f.map)을 추출하고, 특징맵에서 추출된 특징값을 기반으로 기지정된 클래스 중 가장 가능성이 큰 클래스에 대응하는 값을 선택하도록 구성된다.
LeNet-5는 숫자를 인식하기 위해 개발된 신경망이므로, LeNet-5는 일예로 특징값을 0 ~ 9 사이의 숫자로 분류하고, 0 ~ 9 사이의 숫자 중 하나를 결과값으로 선택할 수 있다.
이하에서는 일예로 LeNet-5를 설명하지만, 다른 컨볼루션 신경망 및 인공 신경망 또한 기본적으로는 유사성을 갖고 있으며, 본 발명의 개념은 LeNet-5에 한정되지 않고, 다양한 인공 신경망에 적용될 수 있다.
도1 에서 C는 컨볼루션 레이어(Convolution layer), S는 서브 샘플링 레이어(Sub-sampling layer), FC는 완전 연결 레이어(Fully-Connected layer)를 의미하며, C, S, FC 뒤의 숫자는 레이어 인덱스를 나타낸다. 즉 LeNet-5는 3 개의 컨볼루션 레이어(C1, C2, C3), 2 개의 서브 샘플링 레이어(S1, S2) 및 2 개의 완전 연결 레이어(FC1, FC2)를 포함한다.
도1 을 참조하여, LeNet-5의 동작을 설명하면, 먼저 제1 컨볼루션 레이어(C1)는 32 X 32 크기의 입력값 행렬을 포함하는 입력 영상(Input)을 인가받고, 기지정된 크기의 가중치 행렬로 구성되는 6개(6N)의 제1 컨볼루션 커널(Convolution Kernel)(또는 마스크, 윈도우라고도 함)(CK1)을 이용하여 입력 영상(Input)에 대해 컨볼루션 연산하여 28 X 28 크기의 특징값 행렬을 포함하는 6개의 특징맵(f.map)을 생성한다.
6개의 제1 컨볼루션 커널(CK1) 각각은 입력 영상(Input)과 각각 컨볼루션 연산이 수행되는 제1 가중치 행렬을 포함한다. 입력 영상(Input)이 2차원 행렬로 표현될 수 있으므로, 입력 영상(Input)과 컨볼루션 연산되는 6개의 제1 컨볼루션 커널(CK1) 또한 2차원의 가중치 행렬로 구성될 수 있다. 6개의 제1 컨볼루션 커널(CK1) 각각은 일예로 5(W) X 5(H) 크기의 2차원 가중치 행렬로 구성될 수 있다.
그리고 제1 서브 샘플링 레이어(S1)는 제1 컨볼루션 레이어(C1)에서 출력되는 28 X 28 크기의 6개의 특징맵 각각에 대해 서브 샘플링하여, 6개의 특징맵 각각의 크기를 14 X 14의 크기로 줄인다. LeNet-5에서 서브 샘플링 레이어(S1)는 평균값 풀링(Average pooling)을 수행하여 서브-샘플링한다.
그리고 제2 컨볼루션 레이어(C2)는 제1 서브 샘플링 레이어(S1)에서 서브 샘플링된 14 X 14의 크기의 특징값 행렬을 갖는 6개의 특징맵을 입력 특징맵으로 인가받고, 6개의 입력 특징맵에 대해, 16개(16N)의 제2 컨볼루션 커널(CK2)을 이용하여 컨볼루션 연산하여 10 X 10 크기의 16개의 특징맵을 생성하여, 출력 특징맵을 출력한다.
여기서, 16개(N)의 제2 컨볼루션 커널(CK2) 각각은 일예로 5(W) X 5(H) X 6(D) 크기를 갖는 3차원 가중치 행렬로 구성될 수 있다.
한편, 제2 서브 샘플링 레이어(S2)는 제2 컨볼루션 레이어(C2)에서 출력되는 10 X 10 크기의 16개의 특징맵 각각을 서브 샘플링하여 16개의 특징맵 각각의 크기를 5 X 5의 크기로 줄인다. 여기서 제2 서브 샘플링 레이어(S2)는 제1 서브 샘플링 레이어(S1)과 마찬가지로 서브 샘플링을 위해 평균값 풀링을 수행할 수 있다.
제1 및 제2 서브 샘플링 레이어(S1, S2)는 이전 레이어에서 획득된 특징맵의 크기를 줄여, 인공 신경망의 계산 복잡성을 줄임으로써, 오버피팅(overfitting) 문제를 방지하기 위해 이용된다.
제3 컨볼루션 레이어(C3)는 제2 서브 샘플링 레이어(S2)에서 서브 샘플링된 5 X 5 크기의 16개의 특징맵을 입력 특징맵으로 인가받아, 입력된 16개의 입력 특징맵에 대해, 다시 120개(120N)개의 제3 컨볼루션 커널(CK3)로 컨볼루션 연산하여 1 X 1 크기의 120개의 특징맵을 생성한다.
여기서 120개(N)의 제3 컨볼루션 커널(CK3) 각각은 5(W) X 5(H) X 16(D) 크기의 3차원 가중치 행렬로 구현되어, 제2 서브 샘플링 레이어(S2)로부터 입력되는 5 X 5 크기의 16개의 입력 특징맵 모두와 컨볼루션 연산을 수행으로써, 16개의 입력 특징맵 모두를 120개의 모든 출력 특징맵과 연결한다. 제3 컨볼루션 레이어(C3)의 120개의 제3 컨볼루션 커널(CK3)가 모든 입력 특징맵을 모든 출력 특징맵에 연결하므로, 제3 컨볼루션 레이어(C3)는 입력 특징맵과 출력 특징맵을 완전 연결(Fully-connected)한다.
제3 컨볼루션 레이어(C3)는 제2 컨볼루션 레이어(C2)가 로우 레벨 특징을 글로벌 특징으로 확장한 것을 다시 컨볼루션 연산하여, 글로벌 특징이 120개의 특징맵 모두에 전체적으로 혼합되도록 하는 역할을 수행한다.
제1 완전 연결 레이어(FC1)와 제2 완전 연결 레이어(FC2)는 제3 컨볼루션 레이어(C3)에서 출력되는 1 X 1 크기의 120개의 특징맵을 각각 84개의 유닛을 갖는 10개의 클래스에 연결하여 분류하고, 분류된 10개의 클래스를 다시 단일 유닛을 갖는 10개의 클래스로 분류한다.
결과적으로 32 X 32 의 크기를 갖는 입력 영상이 10개의 클래스 중 하나로 분류되며, 10개의 클래스에 0 ~ 9까지의 숫자가 매칭되어 있다면, LeNet-5는 분류된 클래스에 대응하는 숫자를 결과로서 출력한다. 즉 32 X 32 의 크기를 갖는 입력 영상으로부터 0 ~ 9 사이의 숫자 중 하나의 숫자를 인식하여 출력할 수 있다.
이러한 컨볼루션 신경망에서 다수의 컨볼루션 레이어(C1 ~ C3)는 컨볼루션 커널(CK1 ~ CK3)을 이용하여 다수의 컨볼루션 연산을 수행하므로, 다수의 곱셈 및 덧셈 연산을 요구한다.
도2 는 인공 신경망 모듈의 개략적 구조를 나타낸다.
도2 를 참조하면 인공 신경망 모듈(100)은 연산 처리부(110) 및 메모리부(120)를 포함한다. 그리고 연산 처리부(110)는 연산부(111) 및 벡터 레지스터(vector register)(113)를 포함할 수 있다.
메모리부(110)는 입력 영상(Input)을 인가받아 저장하며, 다수의 컨볼루션 커널(CK1 ~ CK3)을 저장한다. 여기서 제1 내지 제3 컨볼루션 커널(CK1 ~ CK3) 각각은 가중치의 배열로 구성된 가중치 행렬로 구현된다. 가중치는 인공 신경망의 학습 시에, 즉 딥 러닝 시에 다수의 입력 영상(Input)에 대해, 컨볼루션 연산을 수행하고 오차를 역전파하여, 오차가 미리 지정된 수준 이하가 될 때까지 반복적으로 컨볼루션 연산을 수행함으로써 획득된 값일 수 있다.
연산 처리부(110)는 메모리부(120)에 저장된 입력 특징맵(또는 입력 영상(Input))과 다수의 컨볼루션 커널(CK1 ~ CK3) 중 현재 컨볼루션 연산을 수행해야 하는 컨볼루션 커널을 인가받아 컨볼루션 연산을 수행한다. 즉 다수의 컨볼루션 레이어(C1 ~ C3) 중 하나의 컨볼루션 레이어(예를 들면 제2 컨볼루션 레이어(C2))를 선택하고, 선택된 컨볼루션 레이어의 다수의 컨볼루션 커널(CK2) 중 하나의 컨볼루션 커널을 선택하여 입력 특징맵과 컨볼루션 연산을 수행한다.
연산 처리부(110)는 컨볼루션 연산이 수행된 결과를 메모리부(120)로 전송하여 저장할 수 있으며, 저장된 컨볼루션 연산 수행 결과에 대해 서브 샘플링 연산을 추가로 수행할 수 있다.
연산 처리부(110)의 벡터 레지스터(113)는 연산부(111)에서 연산되어야 할 데이터를 메모리부(120)로부터 로드하여 저장한다. 여기서 벡터 레지스터(113)가 로드하는 데이터는 입력 영상(Input)의 입력값(또는 이전 연산된 입력 특징맵의 특징값)과 컨볼루션 커널(CK1 ~ CK3) 각각의 가중치가 포함된다.
또한, 벡터 레지스터(113)는 이전 연산부(111)에서 컨볼루션 연산이 수행된 결과인 출력 특징맵 또는 서브 샘플링 연산이 수행된 결과인 입력 특징맵을 임시로 저장할 수 있다. 그리고 벡터 레지스터(113)는 연산부(111)에서 획득되는 출력 특징맵 또는 입력 특징맵을 인가받아 임시 저장하여, 다시 연산부(111)로 제공하거나 메모리부(120)로 전달하여 저장할 수 있다. 벡터 레지스터(113)는 메모리부(120)에 저장된 출력 특징맵 또는 입력 특징맵을 로드하여 연산부(111)로 전달할 수 있다.
여기서 벡터 레지스터(113)는 연산부(111)의 제어에 따라 메모리부(120)에 저장된 데이터를 기지정된 방식으로 로드할 수 있다.
연산부(111)는 적어도 하나의 프로세스 유닛을 포함하여, 컨볼루션 커널(CK1 ~ CK3)을 이용한 컨볼루션 연산을 수행할 수 있다. 또한 서브 샘플링 연산을 수행할 수 있다. 이하에서는 설명의 편의를 위하여, 입력 영상(Input)을 입력 특징맵과 별도로 구분하지 않는다. 즉 이하에서 입력 특징맵은 입력 영상(Input)을 포함한 용어로서 입력 영상(Input)가 입력 특징맵의 하나인 것으로 설명한다.
연산부(111)는 벡터 레지스터(113)로부터 입력 특징맵의 특징값 행렬(또는 입력 영상(Input)의 입력값 행렬)과 다수의 컨볼루션 커널(CK1 ~ CK3) 중 연산을 수행해야 하는 컨볼루션 커널을 기지정된 방식으로 컨볼루션 연산을 수행하고, 컨볼루션 연산 결과인 출력 특징맵을 다시 벡터 레지스터(113)로 전달한다. 또한 연산부(111)는 출력 특징맵을 인가받아 서브 샘플링 연산하여 입력 특징맵을 생성하고, 생성된 입력 특징맵을 벡터 레지스터(113)에 저장할 수 있다.
연산 처리부(110)는 일예로 다수의 프로세스 유닛(process unit)(PU)을 포함하는 CPU 등으로 구현될 수 있다. 도2 에서는 연산 처리부(110)가 연산부(111)과 벡터 레지스터(113)를 포함하는 것으로 도시하였으나, 경우에 따라서 벡터 레지스터(113)는 연산 처리부(110)와 별도로 구현될 수도 있다.
한편 CPU 등으로 구현되는 연산 처리부(110)는 최근 연산 효율성을 높이기 위해, 복잡한 연산을 단일 명령으로 일괄 처리할 수 있도록 SIMD(Single Instruction Multiple Data) 기법을 이용하는 것이 일반적이다. SIMD 기법은 다수의 프로세스 유닛들이 동일(또는 유사)한 연산을 다수의 데이터에 적용하여 동시에 처리하는 방식으로, 주로 백터(vector) 프로세서에서 이용되는 기술이다.
연산 처리부(110)에서 연산부(111)는 SIMD 기법을 이용하기 위해, SIMD 유닛(SIMDU)과 다수의 프로세스 유닛(PU)을 포함한다.
SIMD 유닛(SIMDU)은 명령의 효율성을 극대화 하기 위해, 단일 명령으로 다중 데이터를 처리할 수 있는 다수의 명령어 집합을 저장하고 있다. 그리고 저장된 명령어 집합 각각은 다수의 프로세스 유닛(PU)에 대해 데이터 수준 병렬성(Data Level Parallelism; DLP)을 이용하여 동시에 병렬로 연산을 수행하도록 한다. 즉 SIMD 유닛(SIMDU)은 벡터 레지스터(113)가 메모리부(120)로부터 다수의 데이터를 로드하여 저장하도록 하고, 저장된 데이터들에 대해 다수의 프로세스 유닛(PU)이 지정된 동일한 연산을 병렬로 수행하도록 한다.
여기서 SIMD 유닛(SIMDU)은 연산부(111)내의 하드웨어로 구현될 수도 있으나 연산부(111)에서 수행되는 동작을 지정하는 소프트웨어로 구현될 수도 있다.
예를 들면, 컨볼루션 신경망에서, SIMD 유닛(SIMDU)은 벡터 레지스터(113)가 메모리부(120)에 저장된 다수의 컨볼루션 커널(CK1 ~ CK3) 중 현재 연산이 수행되어야 하는 컨볼루션 커널과 입력 특징맵의 특징값 행렬(또는 입력 영상의 입력값 행렬)을 로드하여 저장하도록 제어한다. 그리고 다수의 프로세스 유닛(PU)이 벡터 레지스터(113)에 로드된 가중치 행렬에서 대응하는 가중치와 특징값 행렬의 대응하는 특징값을 인가받아 곱셈 연산을 수행하도록 제어할 수 있다.
상기에서는 인공 신경망 모듈(100)이 메모리부(120)를 포함하는 것으로 도시하였으나, 메모리부(120)는 인공 신경망 모듈(100)과 별도로 구비될 수도 있다. 즉 인공 신경망 모듈(100)은 연산 처리부(110)로 구성될 수 이다.
도3 은 도1 의 제1 컨볼루션 커널이 벡터 레지스터에 저장되는 방식의 일예를 나타낸다.
도1 을 참조하면, 6개(6N)의 제1 컨볼루션 커널(CK1) 각각은 5(W) X 5(H) 크기의 가중치 행렬로 구성되고, 이는 도3 의 (a)와 같이, 3차원 행렬(5(W) X 5(H) X 6(D)) 형태로 표현될 수 있다. 즉 제1 컨볼루션 레이어(C1)에서 5(W) X 5(H) 크기의 6개(6N)의 제1 컨볼루션 커널(CK1)은 5(W) X 5(H) X 6(N) 크기의 3차원 가중치 행렬로 구성된 하나의 컨볼루션 커널로 볼 수 있다. 즉 제1 컨볼루션 커널(CK1)의 개수는 3차원 가중치 행렬로 구성되는 하나의 제1 컨볼루션 커널의 깊이(D)인 것으로 볼 수 있다.
그리고 도3 에서 (b)는 6개(6N)의 제1 컨볼루션 커널(CK1)이 벡터 레지스터(113)에 저장되는 방식을 나타낸다.
도3 을 참조하면, 벡터 레지스터(113)에서 각 데이터가 할당되는 영역을 레인(lane)라고 하며, 벡터 레지스터에서 레인은 연산부(111)의 프로세스 유닛(PU)의 개수에 대응하여 미리 지정된 개수로 구비된다. 즉 다수의 프로세스 유닛(PU) 각각은 벡터 레지스터에서 레인 단위로 지정된 연산을 수행한다.
여기서 벡터 레지스터에서 레인(L0 ~ L7)의 개수는 일반적으로 2의 승수 개(여기서는 일예로 8개)로 구비된다. 그리고 (b)에 도시된 바와 같이, 제1 컨볼루션 커널(CK1)에서 가중치는 행(row) 방향의 벡터 단위로 벡터 레지스터(113)에 저장된다.
여기서 6개의 제1 컨볼루션 커널(CK1)은 5(W) X 5(H) 크기로 구성됨에 따라, 8개의 레인(L0 ~ L7)을 포함하는 벡터에서 5개의 레인(L0 ~ L4)에만 가중치가 저장된다.
도3 을 참조하면, 제1 컨볼루션 커널(CK1)에서 제1 행의 가중치(1 ~ 5)가 벡터 레지스터의 제1 벡터(vec_0)의 8개의 레인(L0 ~ L7) 중 5개의 레인(L0 ~ L4) 저장되고, 제2 행의 가중치(6 ~ 10)가 제2 벡터(vec_1)의 8개의 레인(L0 ~ L7) 중 5개의 레인(L0 ~ L4) 저장된다.
즉 벡터 레지스터(113)에서 8개의 레인 중 5개의 레인(L0 ~ L4) 만이 이용되고, 나머지 3개의 레인(L5 ~ L7)은 유휴 레인(Idle lanes)으로서 컨볼루션 연산에 이용되지 않는 무의미한 더미값이 저장된다. 더미값은 컨볼루션 연산에 영향을 미치지 않는 값으로 일예로 0의 값이 저장될 수 있다.
이로 인해, 벡터 레지스터(113)는 대략 62.5% 수준으로만 이용되며, 나머지 벡터 레지스터는 이용되지 않는다.
이는 5(W) X 5(H) X 6(D) 크기를 갖는 16개(16N)의 제2 가중치 행렬을 갖는 제2 컨볼루션 커널(CK2) 및 5(W) X 5(H) X 16(D) 크기를 갖는 120개(120N)의 제3 가중치 행렬을 갖는 제3 컨볼루션 커널(CK3)에서도 동일하게 적용된다. 즉 벡터 레지스터(113)가 제1 내지 제3 컨볼루션 커널(CK1 ~ CK3)의 가중치 행렬에서 행 방향 벡터 단위로 가중치를 로드하여 저장하기 때문에, 벡터 레지스터(113)의 저장 용량을 효율적으로 활용하지 못하는 한계가 있다.
뿐만 아니라, 벡터 레지스터(113)가 행 방향 벡터 단위로 가중치를 로드함에 따라 벡터 레지스터(113)는 30개의 벡터(vec_0 ~ Vec_29)에 가중치를 저장하게 된다. 이는 연산부(111)가 30회의 벡터 단위 곱셈을 수행해야 함을 의미한다.
도4 는 본 발명의 일 실시예에 따른 컨볼루션 커널을 재구성하는 개념을 나타내고, 도5 는 도4 의 재구성된 제1 컨볼루션 커널의 가중치가 벡터 레지스터에 저장되는 방식의 일예를 나타낸다.
본 실시예에 따른 인공 신경망 모듈은 벡터 레지스터의 데이터 저장 효율성과 CPU의 연산 효율성을 높이기 위해, 제1 내지 제3 컨볼루션 커널(CK1 ~ CK3)을 재구성한다.
도4 에서 (a)는 재구성되기 이전의 제1 내지 제3 컨볼루션 커널(CK1 ~ CK3)을 나타내고, (b)는 재구성된 제1 내지 제3 컨볼루션 커널(CK1 ~ CK3)을 나타낸다.
도4 를 참조하면, 본 실시예는 (a)에서 5(W) X 5(H) 크기를 갖고 깊이(D) 방향으로 배열된 6개(6N)의 제1 컨볼루션 커널(CK1)을 행 방향(W)으로 배열한다. 즉 2차원의 6개의 제1 컨볼루션 커널(CK1) 각각을 회전시키고, 회전된 6개의 제1 컨볼루션 커널(CK1)을 행 방향(W)으로 배열한 형태로서, 이는 6개의 제1 컨볼루션 커널(CK1)을 6(W) X 5(H) X 5(D)의 3차원 행렬 형태로 재구성한 것과 동일한 형태이다. 즉 6개의 2차원 제1 컨볼루션 커널(CK1)의 폭(W)과 높이(H) 및 개수(N) 중 가장 큰 값인 개수가 행 방향이 되는 3차원 행렬로 재구성한 형태이다. 여기서 제1 컨볼루션 커널(CK1)의 개수(6N)가 행 방향이 되도록 재구성되는 것은, 벡터 레지스터(113)가 행 방향 벡터 단위로 가중치를 로드하는 것으로 가정하였기 때문이다.
그리고 5(W) X 5(H) X 6(D) 크기를 갖는 16개(16N)의 제2 컨볼루션 커널(CK2) 각각은 깊이(D)가 행 방향이 되도록 재구성한다. 즉 16개의 제2 컨볼루션 커널(CK2) 각각을 6(W) X 5(H) X 5(D)의 형태로 재구성한다. 이는 3차원의 제2 컨볼루션 커널(CK2)을 재구성된 제1 컨볼루션 커널(CK1)과 유사하게 가장 긴 축, 즉 깊이(D)가 행 방향이 되도록 하기 위함이다.
또한 5(W) X 5(H) X 16(D) 크기를 갖는 120개(120N)의 제3 컨볼루션 커널(CK3)에서도 깊이(D)가 행 방향이 되도록 재구성하여, 120개의 제3 컨볼루션 커널(CK3) 각각이 16(W) X 5(H) X 5(D)이 되도록 재구성한다.
제1 내지 제3 컨볼루션 커널(CK1 ~ CK3)의 재구성은 도4 에 도시된 바와 같이, 제1 내지 제3 컨볼루션 커널(CK1 ~ CK3)을 회전시킨 것과 동일한 개념으로서, 각 컨볼루션 커널(CK1 ~ CK3)의 가중치의 위치 또한 도5 의 (a)에 도시된 바와 같이, 컨볼루션 커널(CK1 ~ CK3)의 회전에 따라 회전된 위치에 배치되는 것으로 볼 수 있다.
여기서 제1 내지 제3 컨볼루션 커널(CK1 ~ CK3)의 재구성은 실제 컨볼루션 커널(CK1 ~ CK3)을 회전시키는 것이 아니라, 이하의 도5 의 (a) 및 (b)에서 설명하는 바와 같이, SIMD 유닛(SIMDU)의 제어에 따라 벡터 레지스터(113)가 메모리(120)에 저장된 컨볼루션 커널(CK1 ~ CK3)의 가중치를 로드하는 순서를 설명하기 위한 개념이다.
상기에서는 벡터 레지스터(113)가 제1 내지 제3 컨볼루션 커널(CK1 ~ CK3)에서 행 방향 벡터 단위로 가중치를 로드하는 것으로 가정하였으므로, 제1 내지 제3 컨볼루션 커널(CK1 ~ CK3)을 행 방향(W), 열 방향(H) 및 깊이 방향(D) 크기 중 가장 큰 크기의 방향이 행 방향이 되도록 재구성하는 것으로 설명하였다. 그러나 벡터 레지스터(113)은 행 방향이 아닌 열 방향 또는 깊이 방향 벡터 단위로 가중치를 로드할 수도 있으며, 이 경우, 제1 내지 제3 컨볼루션 커널(CK1 ~ CK3)은 도4 및 도5 와 상이한 형태로 재구성될 수 있다. 즉 벡터 레지스터(113)가 가중치를 로드하는 방향에 따라 제1 내지 제3 컨볼루션 커널(CK1 ~ CK3)을 재구성할 수 있다.
또한 상기에서는 단순히 행 방향(W), 열 방향(H) 및 깊이 방향(D) 크기 중 가장 큰 크기의 방향이 즉 벡터 레지스터(113)가 가중치를 로드하는 방향이 되도록 재구성하는 것으로 설명하였으나, 이는 단지 예시일 뿐이다. 본 발명의 목적은 벡터 레지스터(113)의 효율성을 높여, 인공 신경망 모듈의 연산 성능을 향상 시키는 것이다. 이를 위해서는 제1 내지 제3 컨볼루션 커널(CK1 ~ CK3)의 가중치가 벡터 레지스터(113)의 다수의 벡터(vec_0 ~ vec_24) 각각에서 가능한 다수의 레인(L0 ~ L7)에 로드되도록 해야 한다. 그러므로 제1 내지 제3 컨볼루션 커널(CK1 ~ CK3)은 행 방향(W), 열 방향(H) 및 깊이 방향(D) 크기 중 각 벡터의 레인(L0 ~ L7) 개수(여기서는 8개)의 정수배에 가장 가까운 크기를 갖는 방향을 기준으로 재구성되는 것이 바람직하다.
본 실시예에서는 벡터의 레인(L0 ~ L7) 개수가 8개이므로, 제1 및 제2 컨볼루션 커널(CK1, CK2)는 6의 크기를 갖는 깊이(D) 방향을 기준으로 재구성되었다. 또한 제3 컨볼루션 커널(CK3)은 깊이(D) 방향의 크기가 16으로 벡터의 8개의 레인(L0 ~ L7)의 2배수이므로, 깊이(D) 방향을 기준으로 재구성되었다.
도5 의 (a)를 도3 의 (a)와 비교하면, 도5 의 (a)와 같이 재구성된 6개의 제1 컨볼루션 커널(CK1)은 6(W) X 5(H) X 5(D)의 3차원 행렬 형태로 표현 될 수 있다. 따라서 도3 의 (a)에서 6개의 제1 컨볼루션 커널(CK1) 중 첫번째 제1 컨볼루션 커널의 제1 행의 가중치(1 ~ 5)는 도5 의 (a)에서 제1 행 제1 열에서 깊이(D) 방향(도4 에서는 N 방향)으로 배열된다.
그리고 벡터 레지스터(113)는 3차원 행렬 형태로 재구성된 제1 컨볼루션 커널(CK1)에서 행 방향 벡터 단위로 가중치를 로드한다. 제1 컨볼루션 커널(CK1)을 재구성함에 따라 벡터 레지스터(113)의 각 벡터(vec_0 ~ vec_24)에는 6개의 가중치가 대응하는 레인(L0 ~ L5)에 저장되고, 2개의 레인(L6, L7)만이 유휴 레인이 된다. 즉 벡터 레지스터(113)에서 유휴 레인의 수가 3개에서 2개로 감소된다.
또한 각 벡터(vec_0 ~ vec_24)에 저장되는 가중치의 개수가 증가됨에 따라, 재구성된 제1 컨볼루션 커널(CK1)을 저장하기 위한 벡터의 개수가 30개에서 25개로 줄어든다. 상기한 바와 같이, 벡터의 수는 CPU가 곱셈 연산을 수행해야 하는 횟수에 대응하므로, 벡터의 개수가 30개에서 25개로 줄어들게 되면, 연산부(111)의 곱셈 연산 또한 30회에서 25회로 줄일 수 있다. 즉 연산부(111)의 연산 효율성을 크게 향상 시킬 수 있다.
다만, 컨볼루션 신경망에서 각 컨볼루션 커널의 가중치는 입력 특징맵(또는 입력 영상)에서 대응하는 특징값과 곱셈 연산이 수행되어야 한다. 이에, 컨볼루션 커널(CK1 ~ CK3)이 재구성된 경우, 벡터 레지스터(113)는 입력 특징맵(또는 입력 영상)의 특징값 또한 재구성된 컨볼루션 커널에 대응하는 형태로 로드하여 저장할 수 있다. 또한 경우에 따라서는 SIMD의 연산 명령을 재구성할 수도 있다.
일예로 도3 의 (b)에서 제1 벡터(vec_0)에 저장된 가중치들은 우선 32 X 32 크기의 입력 영상(Input) 중 제1 행 제1 열(1, 1)부터 제1 행 제5 열(1, 5)까지의 5개의 입력값(또는 특징값)과 곱셈 연산된다. 그러나, 재구성된 제1 컨볼루션 커널(CK1)에서 제1 벡터(vec_0)에 저장된 가중치들은 입력 영상(Input)의 제1 행 제1 열(1, 1)의 특징값과 곱셈 연산되고, 제2 벡터(vec_1)에 저장된 가중치들은 입력 영상(Input)의 제1 행 제2 열(1, 2)의 특징값과 곱셈 연산된다. 즉 각각의 벡터(vec_0 ~ vec_24)의 가중치들은 입력 영상(Input)의 하나의 특징값과 곱셈 연산이 수행된다.
따라서 벡터 레지스터(113)는 각각의 벡터(vec_0 ~ vec_24)에 대응하는 하나의 특징값을 다른 벡터에 구분하여 저장할 수 있다. 그러나 이는 벡터 레지스터(113)의 효율성을 저하시킨다. 따라서 벡터 레지스터(113)는 재구성된 제1 컨볼루션 커널(CK1)에 대응하여 입력 영상(Input)의 특징값을 로드하여 저장할 수 있다.
일 예로, 벡터 레지스터(113)는 재구성된 제1 컨볼루션 커널(CK1)의 열 방향 가중치 개수에 대응하여, 입력 영상(Input)에서 열 방향으로 5개씩의 특징값을 로드하여 각 레인(L0 ~ L4)에 저장할 수 있다. 그리고 SIMD 유닛(SIMDU)은 25개의 벡터(vec_0 ~ vec_24)에 저장되는 가중치가 입력 영상(Input)에서 열 방향으로 로드된 5개씩의 특징값과 곱셈 연산이 수행되도록 명령이 저장될 수 있다.
SIMD 유닛(SIMDU)은 컨볼루션 연산의 특징에 따라, 벡터 레지스터(113)가 입력 영상(Input)에서 로드되는 특징값을 가변하도록 하고, 다시 로드된 특징값과 이미 로드된 벡터 레지스터(113)의 가중치의 곱셈 연산이 반복적으로 수행되도록 제어할 수 있다.
한편, 6(W) X 5(H) X 5(D)의 형태로 재구성된 제2 컨볼루션 커널(CK2)의 16개의 제2 가중치 행렬 각각은 재구성된 제1 컨볼루션 커널(CK1)과 동일한 형태를 갖는다. 즉 도5 의 (a)와 동일한 형태로 구성된다.
따라서, 벡터 레지스터(113)는 재구성된 제1 컨볼루션 커널(CK1)과 유사하게, 6(W) X 5(H) X 5(D)의 형태로 재구성된 16개의 제2 컨볼루션 커널(CK2) 각각에서 행 방향 벡터 단위로 가중치를 로드한다. 16개의 제2 컨볼루션 커널(CK2) 각각을 재구성함에 따라 벡터 레지스터(113)는 제2 컨볼루션 커널(CK2) 각각에 대해 25개의 벡터(vec_0 ~ vec_24)가 할당하여 로드하며, 25개의 벡터(vec_0 ~ vec_24)에 6개의 가중치가 대응하는 레인(L0 ~ L5)에 저장된다. 즉 제1 컨볼루션 커널(CK1)에서와 마찬가지로, 제2 컨볼루션 커널(CK2)에 대해서도 벡터 레지스터(113)에서 유휴 레인의 수가 3개에서 2개로 감소된다.
이때, 16개의 제2 컨볼루션 커널(CK2) 각각에 대해, 연산부(111)의 곱셈 연산의 수가 30회에서 25회로 줄어들게 되므로, 제2 컨볼루션 커널(CK2) 전체에 대해서는 총 80(=16 X 5)회의 연산 횟수가 줄어들게 된다.
또한 벡터 레지스터(113)는 재구성된 제2 컨볼루션 커널(CK2)에 대응하여 제1 서브 샘플링 레이어(S1)의 6개의 입력 특징맵의 특징값을 로드하여 저장할 수 있다. 벡터 레지스터(113)는 SIMD 유닛(SIMDU)의 제어에 따라, 6개의 입력 특징맵의 2차원 특징값 행렬을 재구성된 제1 컨볼루션 커널(CK1)과 유사하게 회전하여 3차원 형태로 재구성하여, 6개의 2차원 입력 특징맵 각각에서 동일한 위치의 6개의 특징값을 하나의 벡터의 6개의 레인(L0 ~ L5)에 로드할 수 있다. 즉 벡터 레지스터(113)은 6개의 2차원 입력 특징맵의 특징값을 로드할 수 있다.
연산부(111)는 벡터 레지스터(113)에 로드된 6개의 2차원 입력 특징맵의 특징값과 하나의 제2 컨볼루션 커널(CK2)에 대한 곱셈 연산을 수행하고, 곱셈 연산 결과를 합산하여 벡터 레지스터(113)에 저장할 수 있다. SIMD 유닛(SIMDU)은 벡터 레지스터(113)가 컨볼루션 연산 규칙에 따라 6개의 2차원 입력 특징맵에서 서로 다른 특징값을 순차적으로 로드할 수 있도록 하고, 로드된 특징값이 이미 로드된 제2 컨볼루션 커널(CK2)의 가중치와 연산부(111)에서 곱셈 연산되도록 제어할 수 있다. SIMD 유닛(SIMDU)은 연산부(111)의 프로세스 유닛(PU)의 개수에 따라 다수의 가중치와 특징값에 대한 곱셈 연산이 동시에 병렬로 수행되도록 제어할 수도 있다.
로드된 제2 컨볼루션 커널(CK2)에 대한 컨볼루션 연산이 종료되면 16개의 제2 컨볼루션 커널(CK2) 중 제2 컨볼루션 커널(CK2)에 대해 다시 컨볼루션 연산이 동일한 방식으로 수행되도록 제어할 수 있다.
도시하지 않았으나, SIMD 유닛(SIMDU)은 제3 컨볼루션 커널(CK3)에 대해서도 벡터 레지스터(113)가 재구성된 형태로 로드하도록 제어할 수 있다. 즉 재구성된 제3 컨볼루션 커널(CK3)에서 행 방향 벡터 단위로 가중치를 로드한다.
그러나 상기한 바와 같이 벡터 레지스터(113)의 레인의 개수가 8개인 경우, 벡터 레지스터(113)가 16(W) X 5(H) X 5(D)의 형태로 재구성된 제3 컨볼루션 커널(CK3)을 행 방향 벡터 단위로 가중치를 로드하는 경우, 각각의 행 방향 벡터 단위가 2개의 벡터에 분할되어 가중치가 로드될 수 있다.
즉 재구성된 제3 컨볼루션 커널(CK3)에서 16개의 가중치가 포함된 각 행 방향 벡터 단위는 벡터 레지스터(113)의 2개의 벡터 각각의 8개의 레인(L0 ~ L7)에 저장된다. 따라서 벡터 레지스터(113)는 8개의 레인을 모두 사용하게 된다.
이 경우, 하나의 제3 컨볼루션 커널(CK3)에 대해 80개(16 X 5)의 벡터를 요구하는 기존의 방식에 비해, 본 실시예에 따른 재구성된 제3 컨볼루션 커널(CK3)은 50개(= 5 X 5 X 2)의 벡터만을 요구한다. 제3 컨볼루션 레이어(C3)에서 제3 컨볼루션 커널(CK3)의 개수가 120개이므로, 전체적으로 벡터 개수를 3600개(= 120 X 30) 만큼 줄일 수 있다. 따라서 연산부(111)의 곱셈 연산의 횟수 또한 3600회 줄일 수 있다.
그리고 SIMD 유닛(SIMDU)은 재구성되어 벡터 레지스터(113)에 로드되는 제3 컨볼루션 커널(CK3)에 대응하여, 16개의 입력 특징맵의 2차원 특징값 행렬을 3차원 형태로 재구성하여, 16개의 2차원 입력 특징맵 각각에서 동일한 위치의 16개의 특징값이 2개의 벡터에 분할하여 로드되도록 벡터 레지스터(113)을 제어할 수 있다. 연산부(111)는 SIMD 유닛(SIMDU)의 제어에 따라 벡터 레지스터(113)에 로드된 가중치와 대응하는 특징값을 곱셈 연산 할 수 있다.
각각의 컨볼루션 커널(CK1 ~ CK3)에 대해 연산부(111)에서 연산된 결과는 벡터 레지스터(113) 또는 메모리부(120)에 저장될 수 있다. 추가적으로 SIMD 유닛(SIMDU)은 연산부(111)는 곱셈 연산의 결과를 기지정된 패턴에 따라 합산하여 출력 특징맵의 특징값을 생성하도록 제어하고, 특징값이 벡터 레지스터(113) 또는 메모리부(120)에 저장되도록 제어할 수 있다.
결과적으로 본 실시예에 따른 인공 신경망 모듈(100)에서는 벡터 레지스터(113)가 다수의 컨볼루션 커널(CK1 ~ CK3)의 가중치를 도4 에 도시된 바와 같이, 재구성된 형태로 로드하도록 하고, 재구성된 형태로 로드되는 컨볼루션 커널(CK1 ~ CK3)에 대응하는 패턴으로 입력 특징맵의 특징값을 로드하도록 한다. 그리고 연산부(111)가 로드된 가중치와 대응하는 특징값을 병렬로 곱셈 연산을 수행하도록 한다.
이때, 재구성된 형태로 벡터 레지스터(113)에 로드되는 가중치는 재구성되지 않은 형태에 비해, 벡터(vec_0 ~ vec_24)의 더 많은 개수의 레인에 저장되어, 가중치가 로드되는 전체 벡터의 개수를 줄인다. 따라서 연산부(111)가 곱셈 연산을 수행하는 횟수를 크게 줄일 수 있다. 즉 인공 신경망 모듈(100)의 연산 속도를 크게 향상 시킬 수 있다.
한편 LeNet-5에서는 16개(N)의 제2 컨볼루션 커널(CK2) 중 하나의 제2 컨볼루션 커널(CK2)만이 6개의 입력 특징맵 모두와 연산이 수행되는 반면, 나머지 15개의 제2 컨볼루션 커널(CK2)은 미리 지정된 컨볼루션 패턴에 따라 제1 서브 샘플링 레이어(S1)에서 서브 샘플링된 6개의 입력 특징맵 중 일부(3개 내지 5개)의 입력 특징맵과 연산이 수행된다. 따라서 16개(N)의 제2 컨볼루션 커널(CK2)은 모두 동일한 5(W) X 5(H) X 6(D) 크기의 3차원 가중치 행렬로 구성되지 않고, 5(W) X 5(H) X 3(D), 5(W) X 5(H) X 4(D), 5(W) X 5(H) X 5(D) 및 5(W) X 5(H) X 6(D)의 서로 다른 크기로 구성될 수 있다. 그러나 이 경우, SIMD 유닛(SIMDU)은 서로 다른 크기의 제2 컨볼루션 커널(CK2)에 대해 병렬로 다수의 프로세스 유닛(PU)이 병렬로 동시에 연산을 수행하도록 제어할 수 없다.
이에 본 실시예에 따른 인공 신경망 모듈(100)은 16개(N)의 제2 컨볼루션 커널(CK2)이 모두 5(W) X 5(H) X 6(D) 크기의 3차원 가중치 행렬로 구성되도록 더미 가중치를 추가한 후, 제2 컨볼루션 커널(CK2)을 6(W) X 5(H) X 5(D) 형태로 재구성할 수 있다. 여기서 더미 가중치는 더미값과 마찬가지로 컨볼루션 연산에 영향을 미치지 않는 값(예를 들면 0)으로 추가될 수 있다.
도6 은 본 발명의 일 실시예에 따른 인공 신공망 모듈의 스케쥴링 방법을 나타낸다.
도6 의 인공 신공망 모듈의 스케쥴링 방법을 설명하면, 우선 인공 신경망 모듈(100)은 메모리부(120)에 입력 특징맵 및 적어도 하나 컨볼루션 커널(CK1 ~ CK3)을 인가받아 저장한다(S10). 여기서 입력 특징맵은 외부에서 입력된 입력 영상(Input)의 입력값 행렬이거나 연산 처리부(110)에서 이전 컨볼루션 연산되고, 서브 샘플링되어 획득된 특징값 행렬일 수 있다. 그리고 컨볼루션 커널(CK1 ~ CK3)은 인공 신공망 모듈에서 이용되는 적어도 하나의 컨볼루션 커널(CK1 ~ CK3)이 모두 저장되거나, 적어도 하나의 컨볼루션 커널(CK1 ~ CK3) 중 현재 컨볼루션 연산이 수행되어야 하는 컨볼루션 레이어(C1 ~ C3)에 대응하는 컨볼루션 커널이 저장될 수 있다.
이때 메모리부(120)에 저장되는 입력 특징맵 및 적어도 하나의 컨볼루션 커널(CK1 ~ CK3)의 크기는 미리 결정되어 있으며, 연산부(111)의 SIMD 유닛(SIMDU)은 입력 특징맵 및 적어도 하나의 컨볼루션 커널(CK1 ~ CK3)의 크기에 대응하는 명령어가 사전에 저장된다.
입력 특징맵 및 적어도 하나의 컨볼루션 커널(CK1 ~ CK3)이 저장되면, 연산부(111)의 SIMD 유닛(SIMDU)은 현재 컨볼루션 연산을 수행되어야 하는 컨볼루션 커널(CK1 ~ CK3)이 3차원 가중치 행렬로 구성되는지 판별한다(S20).
만일 컨볼루션 커널이 3차원 가중치 행렬이 아닌 것으로 판별되면, 컨볼루션 커널이 2차원인 가중치 행렬로 구성된 것으로 판별하고, 다수의 2차원 컨볼루션 커널을 통합하여 하나의 3차원 커널 형태로 인식한다(S30).
그리고 3차원 가중치 행렬로 구성되는 컨볼루션 커널에서 각 축 방향(행 방향, 열 방향 및 깊이 방향)의 크기와 벡터 레지스터(113)의 벡터의 레인(L0 ~ L7)의 개수를 분석한다(S40). 분석 결과에 따라, SIMD 유닛(SIMDU)은 각 축 방향의 크기 중 벡터의 레인(L0 ~ L7)의 개수의 정수배에 가장 가까운 크기를 갖는 축이 지정된 기준 방향이 되도록 재구성된 형태로 벡터 레지스터(113)가 가중치를 로드하도록 제어한다(S50).
이때 벡터 레지스터(113)은 재구성된 컨볼루션 커널의 기준 방향의 크기가 각 벡터의 레인의 개수보다 크면, 재구성된 컨볼루션 커널의 기준 방향 가중치들을 다수의 벡터에 분할하여 로드할 수 있다.
본 실시예에서, 재구성된 형태로 로드한다는 것은 컨볼루션 커널의 가중치 행렬은 실제로 재구성되어 저장되지 않으며, 벡터 레지스터(113)는 SIMD 유닛(SIMDU)의 제어에 따라 메모리부(120)에 저장된 컨볼루션 커널의 가중치 행렬에서 재구성된 형태에 대응하는 패턴으로 가중치를 로드하여 저장하는 것을 의미한다.
한편, 재구성된 컨볼루션 커널의 기준 방향에 따라 가중치가 벡터 레지스터(113)에 로드되면, SIMD 유닛(SIMDU)은 재구성된 형태로 로드된 가중치에 대응하는 패턴으로 입력 특징맵의 특징값을 로드하도록 벡터 레지스터(113)를 제어한다(S60). 즉 벡터 레지스터(113)는 컨볼루션 커널의 가중치들이 재구성되기 이전, 컨볼루션 연산을 위해 곱셈 연산되어야 하는 입력 특징맵의 대응하는 특징값과 곱셈 연산될 수 있도록, 입력 특징맵의 특징값을 로드한다.
그리고 연산부(111)는 로드된 가중치를 대응하는 특징값과 기지정된 연산을 수행한다(S70). 여기서 기지정된 연산은 곱셈 연산일 수 있으며, 곱셈 연산의 결과를 합산하는 연산이 추가될 수 있다. 그리고 연산의 결과는 벡터 레지스터(113)에 임시 저장될 수 있으며, 메모리부(120)로 전달되어 저장될 수 있다. 이때 곱셈 연산의 결과 또한 입력 특징맵의 재구성된 형태에 대응하는 패턴으로 저장될 수 있다. 여기서 연산부(111)는 컨볼루션 연산 기법에 따라 가중치에 대응하는 특징값을 가변하면서 반복적으로 수행할 수 있다.
이후 연산부(111)는 곱셈 연산의 결과를 컨볼루션 연산에 의해 지정된 패턴에 따라 저장하여 출력 특징맵을 생성한다(S80). 생성된 출력 맵은 벡터 레지스터(113)나 메모리부(120)에 저장될 수 있다. 그리고 연산부(111)는 출력 특징맵을 서브 샘플링하여 입력 특징맵을 생성할 수 있다. 생성된 입력 특징맵은 벡터 레지스터(113)나 메모리부(120)에 저장된다.
결과적으로 본 실시예에 따른 인공 신공망 모듈의 스케쥴링 방법은 컨볼루션 커널이 재구성된 형태로 벡터 레지스터(113)에 로드되도록 하여, 컨볼루션 커널이 로드 되는 벡터의 개수를 줄임으로써 벡터 레지스터(113)의 가중치 저장 효율성을 높일 수 있도록 한다. 또한 연산부(113)가 다수의 프로세스 유닛(PU)을 포함하여 벡터 레지스터(113)의 벡터 단위로 병렬로 연산을 수행함에 따라, 연산부(113)가 반복 수행해야 하는 연산의 횟수를 크게 줄일 수 있도록 한다. 따라서 인공 신공망 모듈의 연산 성능을 크게 향상 시킬 수 있다.
본 발명은 도면에 도시된 실시예를 참고로 설명되었으나 이는 예시적인 것에 불과하며, 본 기술 분야의 통상의 지식을 가진 자라면 이로부터 다양한 변형 및 균등한 타 실시예가 가능하다는 점을 이해할 것이다.
따라서, 본 발명의 진정한 기술적 보호 범위는 첨부된 청구범위의 기술적 사상에 의해 정해져야 할 것이다.

Claims (12)

  1. 적어도 하나의 입력 특징맵에 대해 컨볼루션 연산이 수행하기 위해 기지정된 크기의 가중치 행렬로 구성되는 적어도 하나의 컨볼루션 커널이 저장된 인공 신경망 모듈에 있어서,
    상기 적어도 하나의 컨볼루션 커널의 각 축 방향 크기 중 기지정된 레인의 개수에 대응하는 크기의 축 방향에 따라 상기 적어도 하나의 컨볼루션 커널의 가중치를 로드하고, 상기 가중치가 로드되는 방향에 대응하여 상기 입력 특징맵의 특징값을 로드하는 벡터 레지스터; 및
    상기 벡터 레지스터에 로드된 다수의 가중치와 상기 다수의 가중치에 대응하는 다수의 특징값에 대해 기지정된 연산하는 수행하는 연산부; 를 포함하는 인공 신경망 모듈.
  2. 제1 항에 있어서, 상기 벡터 레지스터는
    기지정된 개수의 상기 레인으로 구성되는 다수의 벡터를 포함하고,
    상기 적어도 하나의 컨볼루션 커널의 각 축 방향 크기 중 상기 레인 개수의 정수배와 동일하거나 가장 가까운 크기의 축 방향을 선택하고, 선택된 축 방향에 따라 상기 가중치를 벡터의 각 레인에 로드하는 인공 신경망 모듈.
  3. 제2 항에 있어서, 상기 벡터 레지스터는
    상기 선택된 축 방향의 크기가 상기 레인의 개수보다 크면, 선택된 축 방향에 따른 상기 가중치를 다수의 벡터에 분할하여 로드하는 인공 신경망 모듈.
  4. 제1 항에 있어서, 상기 연산부는
    상기 벡터 레지스터의 벡터에 로드된 다수의 가중치 중 대응하는 가중치와 상기 벡터 레지스터의 벡터에 로드된 다수의 특징값 중 가중치에 대응하는 특징값에 대해 곱셈 연산을 각각 수행하는 다수의 프로세스 유닛; 을 포함하는 인공 신경망 모듈.
  5. 제4 항에 있어서, 상기 연산부는
    상기 다수의 프로세스 유닛 각각의 곱셈 연산의 결과를 합산하여 출력하는 인공 신경망 모듈.
  6. 제1 항에 있어서, 상기 벡터 레지스터는
    상기 컨볼루션 커널이 다수의 2차원 컨볼루션 커널이면, 하나의 3차원 컨볼루션 커널로 통합하고, 통합된 3차원 컨볼루션 커널의 각 축 방향 크기 중 상기 레인 개수의 정수배와 동일하거나 가장 가까운 크기의 축 방향을 선택하여, 선택된 축 방향에 따라 상기 가중치를 벡터의 각 레인에 로드하는 인공 신경망 모듈.
  7. 적어도 하나의 입력 특징맵에 대해 컨볼루션 연산이 수행하기 위해 기지정된 크기의 가중치 행렬로 구성되는 적어도 하나의 컨볼루션 커널이 저장된 인공 신경망 모듈의 스케쥴링 방법에 있어서,
    상기 적어도 하나의 컨볼루션 커널의 각 축 방향 크기 중 기지정된 레인의 개수에 대응하는 크기의 축 방향에 따라 상기 적어도 하나의 컨볼루션 커널의 가중치를 로드하는 단계;
    상기 가중치가 로드되는 방향에 대응하여 상기 입력 특징맵의 특징값을 벡터 레지스터에 로드하는 단계; 및
    상기 벡터 레지스터에 로드된 다수의 가중치와 상기 다수의 가중치에 대응하는 다수의 특징값에 대해 기지정된 연산을 수행하는 단계; 를 포함하는 인공 신경망 모듈의 스케쥴링 방법.
  8. 제7 항에 있어서, 상기 가중치를 로드하는 단계는
    상기 적어도 하나의 컨볼루션 커널의 각 축 방향 크기 중 상기 벡터 레지스터에 포함된 벡터를 구성하는 상기 레인 개수의 정수배와 동일하거나 가장 가까운 크기의 축 방향을 선택하는 단계; 및
    선택된 축 방향에 따라 상기 가중치를 벡터의 각 레인에 로드하는 단계; 를 포함하는 인공 신경망 모듈의 스케쥴링 방법.
  9. 제8 항에 있어서, 상기 각 레인에 로드하는 단계는
    상기 선택된 축 방향의 크기가 상기 레인의 개수보다 크면, 선택된 축 방향에 따른 상기 가중치를 다수의 벡터에 분할하여 로드하는 인공 신경망 모듈의 스케쥴링 방법.
  10. 제7 항에 있어서, 상기 연산을 수행하는 단계는
    다수의 프로세스 유닛을 이용하여, 상기 벡터 레지스터의 벡터에 로드된 다수의 가중치 중 대응하는 가중치와 상기 벡터 레지스터의 벡터에 로드된 다수의 특징값 중 가중치에 대응하는 특징값에 대해 곱셈 연산을 각각 수행하는 인공 신경망 모듈의 스케쥴링 방법.
  11. 제10 항에 있어서, 상기 연산을 수행하는 단계는
    각각의 곱셈 연산의 결과를 합산하여 출력하는 단계; 를 더 포함하는 인공 신경망 모듈의 스케쥴링 방법.
  12. 제7 항에 있어서, 상기 가중치를 로드하는 단계는
    상기 컨볼루션 커널이 다수의 2차원 컨볼루션 커널이면, 하나의 3차원 컨볼루션 커널로 통합하고, 통합된 3차원 컨볼루션 커널의 각 축 방향 크기 중 상기 레인 개수의 정수배와 동일하거나 가장 가까운 크기의 축 방향을 선택하는 단계; 및
    선택된 축 방향에 따라 상기 가중치를 벡터의 각 레인에 로드하는 단계; 를 포함하는 인공 신경망 모듈의 스케쥴링 방법.
KR1020180124166A 2018-10-18 2018-10-18 고효율 연산 처리를 위한 인공 신경망 모듈 및 이의 스케쥴링 방법 KR102164190B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020180124166A KR102164190B1 (ko) 2018-10-18 2018-10-18 고효율 연산 처리를 위한 인공 신경망 모듈 및 이의 스케쥴링 방법

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020180124166A KR102164190B1 (ko) 2018-10-18 2018-10-18 고효율 연산 처리를 위한 인공 신경망 모듈 및 이의 스케쥴링 방법

Publications (2)

Publication Number Publication Date
KR20200043617A true KR20200043617A (ko) 2020-04-28
KR102164190B1 KR102164190B1 (ko) 2020-10-12

Family

ID=70456289

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020180124166A KR102164190B1 (ko) 2018-10-18 2018-10-18 고효율 연산 처리를 위한 인공 신경망 모듈 및 이의 스케쥴링 방법

Country Status (1)

Country Link
KR (1) KR102164190B1 (ko)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112836803A (zh) * 2021-02-04 2021-05-25 珠海亿智电子科技有限公司 一种提高卷积运算效率的数据摆放方法
CN113537195A (zh) * 2021-07-21 2021-10-22 北京数美时代科技有限公司 一种图像文本识别方法、系统和电子设备
KR20220065188A (ko) * 2020-11-13 2022-05-20 네이버 주식회사 기계학습을 이용하여 이미지 압축 품질을 최적화하는 방법 및 시스템
CN114581280A (zh) * 2020-11-30 2022-06-03 北京君正集成电路股份有限公司 一种基于4bit普通卷积计算的优化方法

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20170099848A (ko) 2014-12-19 2017-09-01 인텔 코포레이션 컨볼루션 연산을 수행하기 위한 저장 디바이스 및 방법
KR20180109619A (ko) * 2017-03-28 2018-10-08 삼성전자주식회사 컨볼루션 신경망 처리 방법 및 장치

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20170099848A (ko) 2014-12-19 2017-09-01 인텔 코포레이션 컨볼루션 연산을 수행하기 위한 저장 디바이스 및 방법
KR20180109619A (ko) * 2017-03-28 2018-10-08 삼성전자주식회사 컨볼루션 신경망 처리 방법 및 장치

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
Lai, Liangzhen, Naveen Suda, and Vikas Chandra. "Cmsis-nn: Efficient neural network kernels for arm cortex-m cpus." arXiv:1801.06601 (2018.01.19. 공개)* *

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20220065188A (ko) * 2020-11-13 2022-05-20 네이버 주식회사 기계학습을 이용하여 이미지 압축 품질을 최적화하는 방법 및 시스템
CN114581280A (zh) * 2020-11-30 2022-06-03 北京君正集成电路股份有限公司 一种基于4bit普通卷积计算的优化方法
CN112836803A (zh) * 2021-02-04 2021-05-25 珠海亿智电子科技有限公司 一种提高卷积运算效率的数据摆放方法
CN113537195A (zh) * 2021-07-21 2021-10-22 北京数美时代科技有限公司 一种图像文本识别方法、系统和电子设备

Also Published As

Publication number Publication date
KR102164190B1 (ko) 2020-10-12

Similar Documents

Publication Publication Date Title
US10394929B2 (en) Adaptive execution engine for convolution computing systems
CN112840356B (zh) 运算加速器、处理方法及相关设备
KR102164190B1 (ko) 고효율 연산 처리를 위한 인공 신경망 모듈 및 이의 스케쥴링 방법
US20180260710A1 (en) Calculating device and method for a sparsely connected artificial neural network
US9886377B2 (en) Pipelined convolutional operations for processing clusters
WO2018103736A1 (en) Systems and methods for data management
CN109543816B (zh) 一种基于权重捏合的卷积神经网络计算方法和系统
KR102636710B1 (ko) 계층적 가중치 희소 컨볼루션 프로세싱을 위한 방법 및 시스템
US20190244080A1 (en) Neural Network Processor with On-Chip Convolution Kernel Storage
CN111898733B (zh) 一种深度可分离卷积神经网络加速器架构
KR102038390B1 (ko) 고효율 병렬 처리를 위한 인공 신경망 모듈 및 이의 스케쥴링 방법
CN112200300B (zh) 卷积神经网络运算方法及装置
WO2021080873A1 (en) Structured pruning for machine learning model
WO2022002157A1 (en) Method and system for balanced-weight sparse convolution processing
CN110796236B (zh) 多样本多通道卷积神经网络池化的向量化实现方法
US11775832B2 (en) Device and method for artificial neural network operation
KR20190062303A (ko) 폴드된 특징 데이터에 대한 컨볼루션 연산을 수행하기 위한 방법 및 장치
CN111325222A (zh) 图像归一化处理方法及装置、存储介质
KR20230081697A (ko) 팽창 컨볼루션 계산 가속화 방법 및 장치
US20230376733A1 (en) Convolutional neural network accelerator hardware
WO2022095984A1 (en) Method and system for convolution with workload-balanced activation sparsity
CN113077042B (zh) 卷积神经网络的数据重用与高效处理方法
KR102372869B1 (ko) 인공 신경망을 위한 행렬 연산기 및 행렬 연산 방법
CN114662647A (zh) 处理用于神经网络的层的数据
CN111831207B (zh) 一种数据处理方法、装置及其设备

Legal Events

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