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

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

Info

Publication number
KR102038390B1
KR102038390B1 KR1020180076692A KR20180076692A KR102038390B1 KR 102038390 B1 KR102038390 B1 KR 102038390B1 KR 1020180076692 A KR1020180076692 A KR 1020180076692A KR 20180076692 A KR20180076692 A KR 20180076692A KR 102038390 B1 KR102038390 B1 KR 102038390B1
Authority
KR
South Korea
Prior art keywords
neural network
artificial neural
weight matrix
size
convolution
Prior art date
Application number
KR1020180076692A
Other languages
English (en)
Inventor
정기석
박상수
Original Assignee
한양대학교 산학협력단
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 한양대학교 산학협력단 filed Critical 한양대학교 산학협력단
Priority to KR1020180076692A priority Critical patent/KR102038390B1/ko
Application granted granted Critical
Publication of KR102038390B1 publication Critical patent/KR102038390B1/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)
  • General Engineering & Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Artificial Intelligence (AREA)
  • General Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • Computing Systems (AREA)
  • Computational Linguistics (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Software Systems (AREA)
  • Neurology (AREA)
  • Complex Calculations (AREA)
  • Image Analysis (AREA)

Abstract

본 발명의 실시예에 따른 인공 신경망 모듈 및 이의 스케쥴링 방법은 컨볼루션다수의 레이어의 다수의 컨볼루션 커널에 포함된 가중치 행렬의 크기가 서로 상이하여 불규칙적 특성을 포함하는 인공 신경망에 더미연산을 수행하기 위한 더미값을 추가하여 인공 신경망이 규칙적인 연산을 수행하도록 함으로써, 인공 신경망이 데이터 단위의 병렬연산에 특화된 하드웨어 가속기가 고효율 병렬 처리를 수행할 수 있도록 한다.

Description

고효율 병렬 처리를 위한 인공 신경망 모듈 및 이의 스케쥴링 방법{ARTIFICIAL NEURAL NETWORK MODULE AND SCHEDULING METHOD THEREOF FOR HIGHLY EFFECTIVE PARALLEL PROCESSING}
본 발명은 인공 신경망 모듈 및 이의 스케쥴링 방법에 관한 것으로, 특히 고효율 병렬 처리를 위한 인공 신경망 모듈 및 이의 스케쥴링 방법에 관한 것이다.
최근 인간의 두뇌가 패턴을 인식하는 방법을 모사하여 두뇌와 비슷한 방식으로 여러 정보를 처리하도록 구성되는 인공 신경망(artificial neural network)이 다양한 분야에 적용되어 사용되고 있다.
특히 인공 신경망 중 하나인 컨볼루션 신경망(Convolution Neural Network)은 최근 영상, 음성인식, 자연어 처리 등 다양한 분야에 적용되어 사용되고 있다. 컨볼루션 신경망은 컨볼루션 연산을 이용하여 분류하고자 하는 이미지의 특징을 추출하고, 추출된 특징값을 분류하여 높은 정확도의 분류 성능을 얻을 수 있다.
다만 컨볼루션 신경망은 높은 분류 성능을 얻기 위해, 일반적으로 컨볼루션 연산을 수행하는 다수의 컨볼루션 커널을 구비하는 컨볼루션 레이어를 다수로 포함하므로 대규모의 작업량을 요구한다.
그리고 부동 소수점 형태의 데이터 단위로 다수의 곱셈 연산이 필요한 컨볼루션 연산을 수행하는 컨볼루션 레이어의 연산은 병렬처리에 적합하다. 따라서 복잡한 연산을 일괄 처리할 수 있도록 명령어가 구성되는 CPU(Central Processing Unit)보다, 병렬연산에 특화된 Graphic Processing Unit(GPU)와 같은 하드웨어 가속기를 활용할 경우 높은 성능 향상을 얻을 수 있다. 이에 CPU가 아닌 GPU가 범용 연산을 수행할 수 있도록 하는 General Purpose GPU (GPGPU) 기법을 이용하여, 컨볼루션 신경망의 병렬 연산을 가속화하기 위한 연구가 활발하게 진행되고 있다.
특히 CPU와 GPU가 단일 칩에 통합된 APU(Accelerated Processing Unit) 플랫폼에서는 CPU와 GPU가 메모리 공간을 공유하므로, CPU와 GPU가 외부적으로 결합된 기존의 플랫폼 보다 데이터 전송 오버 헤드가 매우 적어 GPGPU의 효과가 더욱 향상될 수 있다.
그러나 컨볼루션 신경망의 컨볼루션 레이어에는 높은 수준의 분류 정확도, 즉 특징 추출 성능을 획득 위해, 입력 특징 맵과 컨볼루션 커널 사이의 연결에 불규칙적 특성을 포함한다. 이러한 불규칙적 특성은 GPU가 워크 그룹에 동일한 수의 스레드(thread)를 할당하여 컨볼루션 커널을 병렬로 실행하는 것을 어렵게 한다. 즉 GPU의 성능을 최대한으로 사용하는 것이 어렵다. 또한 불규칙한 특성을 처리하기 위해서는 다수의 조건 연산을 필요로 하므로, GPU에 발산 분기(Divergence Branch)를 초래한다는 문제가 있다.
한국 공개 특허 제10-2018-0022288호 (2018.03.06 공개)
본 발명의 목적은 불규칙적 특성을 포함하는 인공 신경망이 규칙적인 연산을 수행하도록 함으로써, 데이터 단위의 병렬연산에 특화된 하드웨어 가속기에서 고효율 병렬 처리될 수 있는 인공 신경망 모듈 및 이의 스케쥴링 방법을 제공하는데 있다.
본 발명의 다른 목적은 하드웨어 가속기의 성능을 최대로 활용하여 고속으로 연산을 수행할 수 있으며, 전력 소모를 줄일 수 있는 인공 신경망 모듈 및 이의 스케쥴링 방법을 제공하는데 있다.
상기 목적을 달성하기 위한 본 발명의 일 실시예에 따른 인공 신경망 모듈은 각각 가중치 행렬을 포함하고, 입력 특징 맵과 상기 가중치 행렬을 컨볼루션 연산하여 출력 특징 맵을 획득하는 다수의 컨볼루션 커널; 및 상기 다수의 컨볼루션 커널의 상기 가중치 행렬의 크기를 판별하고, 판별된 가중치 행렬의 크기가 서로 상이하면, 기지정된 더미값을 추가하여 상기 다수의 컨볼루션 커널의 가중치 행렬의 크기를 동일하게 조절하는 더미값 추가부; 를 포함한다.
상기 더미값 추가부는 상기 다수의 컨볼루션 커널에 포함된 가중치 행렬 중 최대 크기의 가중치 행렬의 크기에 따라 상기 가중치 행렬에 추가되는 더미값의 개수를 결정할 수 있다.
상기 더미값 추가부는 가로, 세로 및 깊이를 갖는 3차원 행렬로 구현된 상기 가중치 행렬의 깊이에 상기 더미값을 추가하여 깊이를 증가시킬 수 있으며, 더미값이 추가된 가중치 행렬은 상기 입력 특징 맵에 포함된 특징 맵의 개수에 대응하는 깊이를 가질 수 있다.
여기서 더미값은 0으로 설정될 수 있다.
상기 다수의 컨볼루션 커널은 서로 병렬로 상기 컨볼루션 연산 처리를 수행할 수 있다.
상기 목적을 달성하기 위한 본 발명의 다른 실시예에 따른 인공 신경망 모듈의 스케쥴링 방법은 각각 가중치 행렬을 포함하고, 입력 특징 맵과 상기 가중치 행렬을 컨볼루션 연산하여 출력 특징 맵을 획득하는 다수의 컨볼루션 커널의 가중치 행렬의 크기를 판별하는 단계; 판별된 가중치 행렬의 크기가 서로 상이하면, 기지정된 더미값을 추가하여 상기 다수의 컨볼루션 커널의 가중치 행렬의 크기를 동일하게 조절하는 단계; 및 상기 다수의 컨볼루션 커널이 병렬로 연산 처리를 수행하도록 스케쥴링하는 단계; 를 포함한다.
상기 동일하게 조절하는 단계는 상기 다수의 컨볼루션 커널에 포함된 가중치 행렬 중 최대 크기을 판별하는 단계; 최대 크기의 가중치 행렬의 크기에 따라 상기 가중치 행렬에 추가되는 더미값의 개수를 결정하는 단계; 및 결정된 개수의 더미 값을 상기 가중치 행렬에 추가하는 단계; 를 포함할 수 있다.
따라서, 본 발명의 인공 신경망 모듈 및 이의 스케쥴링 방법은 컨볼루션다수의 레이어의 다수의 컨볼루션 커널에 포함된 가중치 행렬의 크기가 서로 상이하여 불규칙적 특성을 포함하는 인공 신경망에 더미연산을 수행하기 위한 더미값을 추가하여 인공 신경망이 규칙적인 연산을 수행하도록 함으로써, 인공 신경망이 데이터 단위의 병렬연산에 특화된 하드웨어 가속기가 고효율 병렬 처리를 수행할 수 있도록 한다. 그러므로 하드웨어 가속기의 성능을 최대로 활용할 수 있도록 하여 고속으로 연산을 수행할 수 있어, 인공 신경망의 딥러닝 및 실제 동작 시간을 크게 줄일 수 있다. 이에 전력 소모도 줄일 수 있다.
도1 은 인공 신경망의 일예에 대한 개괄적 구조를 나타낸다.
도2 는 도1 의 제2 컨볼루션 레이어의 컨볼루션 커널에 의한 입력 특징 맵과 출력 특징 맵의 연결을 개념적으로 나타낸 도면이다.
도3 은 본 발명의 일 실시예에 따른 컨볼루션 레이어의 프로세스를 개략적으로 나타낸다.
도4 는 본 발명의 일 실시예에 따른 인공 신경망 모듈을 구동하기 위한 실행 모델을 나타낸다.
도5 는 본 발명의 일 실시예에 따른 제2 컨볼루션 레이어의 컨볼루션 커널에 의한 입력 특징 맵과 출력 특징 맵의 연결을 나타낸 도면이다.
도6 은 본 발명의 일 실시예에 따른 인공 신공망 모듈의 스케쥴링 방법을 나타낸다.
도7 및 도8 은 본 발명의 실시예에 따른 더미 연산을 이용한 인공 신경망 모듈의 실행 시간 및 소비 전력을 나타낸 그래프이다.
본 발명과 본 발명의 동작상의 이점 및 본 발명의 실시에 의하여 달성되는 목적을 충분히 이해하기 위해서는 본 발명의 바람직한 실시예를 예시하는 첨부 도면 및 첨부 도면에 기재된 내용을 참조하여야만 한다.
이하, 첨부한 도면을 참조하여 본 발명의 바람직한 실시예를 설명함으로써, 본 발명을 상세히 설명한다. 그러나, 본 발명은 여러 가지 상이한 형태로 구현될 수 있으며, 설명하는 실시예에 한정되는 것이 아니다. 그리고, 본 발명을 명확하게 설명하기 위하여 설명과 관계없는 부분은 생략되며, 도면의 동일한 참조부호는 동일한 부재임을 나타낸다.
명세서 전체에서, 어떤 부분이 어떤 구성요소를 "포함"한다고 할 때, 이는 특별히 반대되는 기재가 없는 한 다른 구성요소를 제외하는 것이 아니라, 다른 구성요소를 더 포함할 수 있는 것을 의미한다. 또한, 명세서에 기재된 "...부", "...기", "모듈", "블록" 등의 용어는 적어도 하나의 기능이나 동작을 처리하는 단위를 의미하며, 이는 하드웨어나 소프트웨어 또는 하드웨어 및 소프트웨어의 결합으로 구현될 수 있다.
도1 은 인공 신경망의 일예에 대한 개괄적 구조를 나타내고, 도2 는 도1 의 제2 컨볼루션 레이어의 컨볼루션 커널에 의한 입력 특징 맵과 출력 특징 맵의 연결을 개념적으로 나타낸 도면이다.
도1 은 인공 신경망(artificial neural network)의 일예로서, 컨볼루션 신경망(Convolution Neural Network: CNN)을 도시하였다. 특히 컨볼루션 신경망에서도 광학적 문자 인식(Optical character reader)에 사용되는 인공 신경망으로, 우편물의 우편 번호 인식, 및 숫자 인식을 위해 개발된 대표적인 컨볼루션 신경망인 LeNET-5의 개괄적 구조를 나타낸다.
LeNET-5는 32 X 32 크기의 입력 영상(Input)를 인가받아, 컨볼루션 연산 및 서브 샘플링 연산을 반복적으로 수행하며 특징 맵(feature 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개의 5 X 5 크기의 컨볼루션 커널(Convolution Kernel)(또는 마스크, 윈도우라고도 함)을 이용하여 입력 영상(Input)에 대해 컨볼루션 연산하여 28 X 28 크기의 6개의 특징 맵을 생성한다.
각각의 컨볼루션 커널은 입력 영상(Input)과 컨볼루션 연산이 수행되는 가중치 행렬을 포함한다. 입력 영상(Input)이 2차원 행렬로 표현될 수 있으므로, 입력 영상(Input)과 컨볼루션 연산되는 가중치 행렬 또한 2차원 행렬로 구성될 수 있다. 일예로 6개의 컨볼루션 커널 각각의 가중치 행렬은 5 X 5의 크기를 가질 수 있다.
그리고 제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개의 5 X 5 크기의 컨볼루션 커널을 이용하여 컨볼루션 연산하여 10 X 10 크기의 16개의 특징 맵을 생성하여, 출력 특징 맵을 출력한다.
이때 제2 컨볼루션 레이어(C2)의 컨볼루션 커널은 표1 과 같이, 입력 특징 맵의 6개의 특징 맵 중 일부 또는 전체 특징 맵과 선택적으로 컨볼루션 연산하여 출력 특징 맵을 획득하도록 구성된다.
Figure 112018065086121-pat00001
표1 은 제2 컨볼루션 레이어(C2)의 입력 특징 맵과 출력 특징 맵 사이의 연결 관계를 나타낸다. 표1 에서 입력 특징 인덱스(I[0 ~ 5])는 제1 서브 샘플링 레이어(S1)에서 서브 샘플링된 입력 특징 맵의 6개의 특징 맵의 인덱스를 나타내고, 출력 특징 인덱스(I[0 ~ 15])는 제2 컨볼루션 레이어(C2)의 16개의 컨볼루션 커널에 의해 획득되는 출력 특징 맵의 16개의 특징 맵의 인덱스를 나타낸다. 그리고 출력 특징 인덱스(I[0 ~ 15])는 제2 컨볼루션 레이어(C2)의 16개의 컨볼루션 커널의 인덱스(CK[0 ~ 15])에 대응한다.
표1 에 나타난 바와 같이, 제2 컨볼루션 레이어(C2)의 16개의 컨볼루션 커널은 불규칙적으로 입력 특징 맵의 특징 맵을 선택하고, 선택된 특징 맵을 저장된 가중치 행렬과 컨볼루션하여 16개의 특징 맵을 획득한다. 이는 의도적으로 입력 특징 맵과 출력 특징 맵 사이의 대칭성(symmetry)을 파괴하여, 제1 컨볼루션 레이어(C1)로부터 획득되는 입력 특징 맵의 로우 레벨 특징(low-level feature)을 서로 다른 조합으로 혼합되도록 하기 위함이다. 즉 입력 특징 맵의 로우 레벨 특징이 출력 특징 맵의 16개의 특징 맵에 글로벌 특징(global feature)으로 나타날 수 있도록 하기 위함이다.
그리고 16개의 컨볼루션 커널 각각이 포함하는 가중치 행렬의 깊이는 입력 특징 맵에서 선택하는 특징 맵의 개수에 대응된다. 즉 제1 내지 제6 가중치 커널(CK[0 ~ 5])에 포함되는 가중치 행렬은 깊이가 3인 3차원 행렬로 구성되고, 제7 내지 제15 컨볼루션 커널(CK[6 ~ 14])에 포함되는 가중치 행렬은 깊이가 4인 3차원 행렬로 구성되며, 제16 컨볼루션 커널(CK[15])에 포함되는 가중치 행렬은 깊이가 6인 3차원 행렬로 구성된다.
도2 를 참조하여, 표1 의 제2 컨볼루션 레이어(C2)의 16개의 컨볼루션 커널의 동작을 설명한다. 도2 에서 입력 특징 맵은 제1 서브 샘플링 레이어(S1)에서 출력되는 6개의 특징 맵 전체 또는 일부를 나타내고, 컨볼루션 커널(Conv.kernel)은 제2 컨볼루션 레이어(C2)의 16개의 컨볼루션 커널(CK[0 ~ 15]) 중 하나를 나타낸다. 여기서 입력 특징 맵의 특징 맵 개수와 컨볼루션 커널의 크기가 N으로 표시된 것은, 상기한 바와 같이 각 컨볼루션 커널이 선택하는 특징 맵의 개수와 포함하는 가중치 행렬의 깊이가 가변되기 때문이다.
도2 및 표1 을 참조하여, 제2 컨볼루션 레이어(C2)의 컨볼루션 커널이 입력 특징 맵과 출력 특징 맵의 연결하는 불규칙적 특성, 즉 컨볼루션 커널의 가중치 행렬의 가변 깊이를 상세하게 설명하면, 제2 컨볼루션 레이어(C2)에서 16개의 컨볼루션 커널(CK[0 ~ 15]) 중 6개의 컨볼루션 커널(CK[0 ~ 5])은 6개의 입력 특징 맵(I[0 ~ 5]) 중 3개의 입력 특징 맵을 저장된 가중치 행렬과 컨볼루션 연산하여 6개의 특징 맵(O[0 ~ 5])을 생성한다.
이에 제1 내지 제6 컨볼루션 커널(CK[0 ~ 5])의 가중치 행렬은 깊이가 3으로 구성되어 5 X 5 X 3의 크기를 가질 수 있으며, 입력 특징 맵의 6개의 특징 맵 중 서로 다르게 미리 지정된 특징 맵과 컨볼루션 연산이 수행된다. 일예로, 제1 컨볼루션 커널(CK[0])의 가중치 행렬은 입력 특징 맵의 제1 내지 제3 특징 맵(I[0 ~ 2])와 컨볼루션 연산이 수행되어, 출력 특징 맵의 제1 특징 맵(O[0])을 출력하고, 제5 컨볼루션 커널(CK[4])는 제1, 제5 및 제6 특징 맵(I[0, 4, 5])과 컨볼루션 연산이 수행되어 출력 특징 맵의 제5 특징 맵(O[4])을 출력한다.
그에 반해, 제7 내지 제15 컨볼루션 커널(CK[6 ~ 14])의 가중치 행렬은 깊이가 4인 5 X 5 X 4의 크기를 가질 수 있으며, 입력 특징 맵의 6개의 특징 맵(I[0 ~ 5]) 중 서로 다른 4개의 특징 맵과 컨볼루션 연산되어 출력 특징 맵의 9개의 특징 맵(O[6 ~ 14])을 생성한다.
또한 제16 컨볼루션 커널(CK[15]) 의 가중치 행렬은 깊이가 6인 5 X 5 X 6의 크기를 가지고, 입력 특징 맵의 6개의 특징 맵(I[0 ~ 5]) 모두와 컨볼루션 연산되어 제16 특징 맵(O[15])을 생성한다.
즉 제2 컨볼루션 레이어(C2)의 컨볼루션 커널(CK[0 ~ 15])은 깊이가 3, 4 및 6으로 서로 다른 가중치 행렬을 포함하여, 불규칙적으로 입력 특징 맵의 선택된 특징 맵과 컨볼루션 연산이 수행됨으로써, 출력 특징 맵의 16개의 특징 맵(O[0 ~ 15])을 생성한다.
한편, 제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개의 컨볼루션 커널로 컨볼루션 연산하여 1 X 1 크기의 120개의 특징 맵을 생성한다.
여기서 제3 컨볼루션 레이어(C3)의 120개의 컨볼루션 커널 각각은 5 X 5 X 16 크기의 가중치 행렬을 포함하여, 제2 서브 샘플링 레이어(S2)로부터 입력되는 5 X 5 크기의 16개의 특징 맵 모두와 컨볼루션 연산을 수행으로써, 16개의 특징 맵 모두를 120개의 모든 출력 특징 맵과 연결한다. 제3 컨볼루션 레이어(C3)가 모든 입력 특징 맵을 모든 출력 특징 맵에 연결하므로, 제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 사이의 숫자 중 하나의 숫자를 인식하여 출력할 수 있다.
상기에서는 LeNET-5를 예로 들어, 5 X 5 크기의 컨볼루션 연산 및 평균값 풀링을 수행하는 것으로 설명하였으나, 상기한 바와 같이 본 발명은 다른 컨볼루션 신경망이나 인공 신경망에 적용될 수 있으며, 이 경우 커널(Kernel)에 포함되는 가중치 행렬의 크기와 풀링 방식은 변경될 수 있다.
도3 은 본 발명의 일 실시예에 따른 컨볼루션 레이어의 프로세스를 개략적으로 나타낸다.
도3 을 참조하여, 3개의 컨볼루션 레이어(C1, C2, C3) 각각에서 수행되는 컨볼루션 연산을 설명하면, 우선 기설정된 크기를 갖는 컨볼루션 커널의 가중치 행렬이 입력 특징 맵을 이동하면서, 컨볼루션 연산한다. 이때 가중치 행렬의 각 원소는 지정된 가중치를 가지며, 각 원소의 가중치는 상이하게 설정되거나 동일하게 설정될 수 있으며, 인공 신경망의 학습 과정 동안 오차 역전파에 의해 가변될 수 있다.
도3 에서는 설명의 편의를 위하여, 2 X 2 크기의 컨볼루션 커널을 도시하였고, 입력은 4 X 4 크기의 특징 맵인 것으로 도시하였다. 그러나 도1 에서 설명한 바와 같이, LeNET-5의 경우, 제1 컨볼루션 레이어(C1)는 5 X 5 크기의 2차원 가중치 행렬을 갖는 컨볼루션 커널이용하여 컨볼루션 연산을 수행하는 반면, 제2 컨볼루션 레이어(C2)는 깊이가 3, 4 또는 6로 불규칙적인 5 X 5 X 3, 5 X 5 X 4, 5 X 5 X 6 크기의 3차원 가중치 행렬을 갖는 컨볼루션 커널이용하여 컨볼루션 연산을 수행한다. 그리고 제3 컨볼루션 레이어(C3)는 깊이가 16으로 5 X 5 X 16 크기의 3차원 가중치 행렬을 갖는 컨볼루션 커널이용하여 컨볼루션 연산을 수행한다.
컨볼루션 연산은 도3 에 도시된 바와 같이, 컨볼루션 커널을 이동하면서, 컨볼루션 커널의 각 원소별 가중치 값과, 입력된 특징 맵에서 컨볼루션 커널의 각 원소의 위치에 대응하는 값을 곱한 후, 합산하여 수행될 수 있다. 이후 컨볼루션 연산의 결과인 컨볼루션 값에 대해 바이어스 값(Bias)을 합산한다. 바이어스 값(Bias) 또한 학습 과정 동안 가변되는 값이다.
즉 컨볼루션 커널의 원소별 가중치와 바이어스 값은 학습 과정 동안 오차 역전파에 의해 가변되고, 학습이 완료되면 완료 시점의 가중치와 바이어스 값으로 고정된다. 그리고 학습 이후, 실제 인식되어야 할 영상에 대해서는 고정된 가중치와 바이어스 값(Bias)을 이용하여 영상의 특징을 인식한다.
한편, 바이어스 값(Bias)을 합산한 이후, sigmoid, tanh 및 ReLu와 같은 활성화 함수(activation fuction)로 필터링하여, 입력 특징 맵의 특징이 추출된 출력 특징 맵을 출력한다.
도3 에 도시된 바와 같이, 컨볼루션 레이어(C1, C2, C3) 각각에서 수행하는 연산 자체는 크게 복잡하지 않다. 그러나 인공 신경망을 학습시키기 위해서는, 즉 딥 러닝시키기 위해서는 다수의 입력 영상에 대해 컨볼루션 연산을 수행하고 오차를 역전파하여, 오차가 미리 지정된 수준 이하가 될 때까지 반복적으로 컨볼루션 연산을 수행해야 한다. 이는 매우 방대한 양의 연산을 요구한다.
이에 복잡하지 않은 다수의 행렬 곱셈 연산을 요구하는 컨볼루션 연산을 병렬로 처리하는데 특화된 GPU와 같은 하드웨어 가속기를 활용하는 GPGPU 기법을 이용하는 경우, 학습 속도를 크게 높일 수 있다.
그러나 표1 에 나타난 바와 같이, LeNET-5의 제2 컨볼루션 레이어(C2)는 로우 레벨 특징을 글로벌 특징으로 전환하기 위해, 16개의 컨볼루션 커널의 가중치 행렬의 깊이가 서로 동일하지 않고, 3, 4 또는 6으로 서로 상이하게 설정된다. 즉 상이한 개수의 입력 특징 맵을 출력 특징 맵에 연결하는 불규칙적 특성을 포함한다.
이러한 서로 다른 깊이를 갖는 가중치 행렬을 포함하는 다수의 컨볼루션 커널은 서로 다른 연산 횟수를 요구하므로, 병렬로 처리하는데 적합하지 않다. 통상적으로 병렬 처리의 경우, 동일한 개수의 스레드(thread)를 그룹화하여 병렬로 분산되어 할당됨으로써, 최적의 성능을 발휘하게 된다. 만일 제2 컨볼루션 레이어(C2)의 다수의 컨볼루션 커널과 같이, 병렬 처리되어야 하는 다수의 스레드 그룹에 포함되는 스레드의 개수가 서로 상이하면, 병렬 분산 연산 수행하는 것을 어렵게 한다. 또한 불규칙 특성을 처리하기 위해 다수의 조건 연산을 필요로 하여, 이는 GPU와 같은 하드웨어 가속기에 발산 분기 문제를 초래한다.
최악의 경우, 제2 컨볼루션 레이어(C2)의 16개의 컨볼루션 커널(CK[0 ~ 15])에 대해 병렬 분산 처리를 하는 경우, 제1 내지 제6 컨볼루션 커널(CK[0 ~ 5])과 제7 내지 제15 컨볼루션 커널(CK[6 ~ 14]) 및 제16 컨볼루션 커널(CK[15])에 대해 각각 연산처리를 구별하여 수행함으로써, 3번의 병렬 연산 처리를 필요로 할 수 있으며, 조건 연산에 대한 처리를 추가로 요구할 수도 있다.
도4 는 본 발명의 일 실시예에 따른 인공 신경망 모듈을 구동하기 위한 실행 모델을 나타낸다.
상기한 바와 같이, 본 발명은 고속, 고효율로 인공 신경망 모듈의 학습 및 실행 시킬 수 있도록 병렬 연산 처리를 수행하도록 하며, 이에 병렬 연산 처리를 수행할 수 있는 다양한 프레임 워크를 사용할 수 있으나, 본 실시예에서는 일예로 공개된 표준 프레임 워크인 OpenCL(Open Computing Language)을 사용하는 것으로 가정하여 설명한다.
OpenCL은 CPU와 GPU 또는 FPGA(Field Programmable Gate Array) 등의 이기종 컴퓨팅 플랫폼을 위한 범용 표준 컴퓨팅 프레임 워크로서 병렬 컴퓨팅 프레임 워크이다. OpenCL에는 커널 코드를 작성하기 위한 프로그래밍 언어, 응용 프로그래밍 인터페이스(application programming interface: API) 및 소프트웨어 개발을 지원하는 라이브러리 등이 포함되어 있다. 그리고 OpenCL 은 플랫폼 계층, 실행 모델 및 메모리 모델과 같은 계층 구조로 정의된다.
도4 를 참조하면, OpenCL 플랫폼은 하나의 호스트(Host)와 연장 장치(Compute Device: CD)라고 불리는 하나 이상의 가속기로 구성된다. 일반적으로 연산 장치(CD)는 CPU와 GPU 또는 FPGA 중 적어도 하나를 포함하여 구현될 수 있다.
그리고 연산 장치(CD)는 다수의 연산 유닛(Compute Unit: CU)을 포함하고, 다수의 연산 유닛(CU) 각각은 다시 하나 이상의 프로세스 소자(Processing Element: PE)를 포함한다. OpenCL의 커널은 OpenCL C / C ++ 함수의 코드 형태로 작성되어 각 프로세스 소자(PE)에서 병렬로 실행될 수 있다.
도4 에서는 일예로 연산 장치(CD)가 GPU로 구현되는 것으로 가정하였다. 일반적으로 CPU는 복잡한 다중 명령어를 이용한 제어 집약적 어플리케이션에 적합하도록 설계되는 반면, GPU는 스레드 그룹(thread group) 간의 효율적인 컨텍스트 전환을 지원하는 매우 많은 개수의 프로세스 소자(PE)를 이용하여 데이터 집약적인 계산이 가능하도록 설계된다. 즉 병렬 연산에 적합하다.
도4 에 도시된 실행 모델은 OpenCL의 커널이 프로세스 소자(PE)에서 실행되는 방식을 정의한다. OpenCL 커널은 NDRange이라 불리는 미리 정의된 N 차원의 인덱스 공간에서 병렬로 실행된다. NDRange에서 독립된 다수의 워크 아이템(Work-item)은 워크 그룹(Work Group)로 그룹화되고, 그룹화된 워크 그룹 단위로 연산 유닛(CU)에 할당된다. 그리고 연산 유닛(CU)에 할당된 워크 그룹 내의 각각의 워크 아이템은 연산 유닛(CU)내의 프로세스 유닛(PE)에 할당된다.
이에 연산 장치(CD)는 다수의 연산 유닛(CU)이 다수의 워크 그룹에 대해 병렬로 연산 처리할 수 있도록 할 뿐만 아니라, 각 연산 유닛(CU)내의 다수의 프로세스 유닛(PE)이 다수의 워크 아이템을 병렬로 처리 할 수 있도록 한다. 또한 호스트(Host)와 적어도 하나의 연산 장치(CD)가 각각 병렬로 워크 그룹에 대한 연산을 병렬로 처리할 수 있도록 한다.
여기서 워크 아이템 각각이 스레드로 볼 수 있으며, 다수의 스레드가 그룹화된 스레드 그룹은 워크 그룹으로 볼 수 있다.
그러나 도4 에 도시된 바와 같이, 다수의 연산 유닛(CU)의 다수의 프로세스 유닛(PE) 각각이 다수의 워크 그룹의 다수의 워크 아이템, 즉 다수의 스레드 중 대응하는 스레드를 처리하도록 구성되는 경우에, 도2 에 도시된 바와 같이, 컨볼루션 커널(Conv.Kernel)의 가중치 행렬이 서로 다른 깊이를 갖고 있으면, 다수의 컨볼루션 커널에 대한 멀티 스레딩을 이용한 병렬화가 용이하지 않다.
표1 을 참조하면, 제2 컨볼루션 레이어(C2)에서 제1 내지 제6 컨볼루션 커널(CK[0 ~ 5])의 가중치 행렬은 깊이가 3인 5 X 5 X 3의 크기를 가지므로, 5 X 5 X 3의 연산을 필요로 한다. 그러나 제7 내지 제15 컨볼루션 커널(CK[6 ~ 14])의 가중치 행렬은 깊이가 4인 5 X 5 X 4의 크기를 가지므로, 5 X 5 X 4의 연산을 필요로 하며, 제16 컨볼루션 커널(CK[15])은 5 X 5 X 6의 연산을 필요로 한다.
즉, 제2 컨볼루션 레이어(C2)의 16개의 컨볼루션 커널(CK[0 ~ 15])이 서로 다른 연산 횟수를 필요로 한다. 따라서, 동일한 수의 스레드를 할당하여 16개의 컨볼루션 커널(CK[0 ~ 15])을 병렬로 실행하는 것을 어렵게 한다.
컨볼루션 커널에 포함된 가중치 행렬의 크기는 컨볼루션 커널의 크기로 볼 수 있으며, 또한 컨볼루션 커널이 수행하는 연산 횟수에 대응한다. 이하에서는 설명의 편의를 위해, 컨볼루션 커널의 가중치 행렬의 크기 또는 깊이를 간략하게 컨볼루션 커널의 크기 및 깊이로 표현한다.
도5 는 본 발명의 일 실시예에 따른 제2 컨볼루션 레이어의 컨볼루션 커널에 의한 입력 특징 맵과 출력 특징 맵의 연결을 나타낸 도면이다.
도2 와 비교하면, 도5 에 따른 제2 컨볼루션 레이어(C2)는 더미값 추가부(DAU)를 더 포함한다. 더미값 추가부(DAU)는 도2 의 컨볼루션 커널 기존의 컨볼루션 깊이에 해당하는 오리지널 부분(Original part)에 추가 컨볼루션 커널의 깊이에 해당하는 확장 부분(Extra part)에 더미값(Dummy Value)을 추가하기 위해 구비된다.
도2 와 비교하여, 도5 의 컨볼루션 커널의 구조 및 동작을 설명하면, 도5 에 도시된 컨볼루션 커널(CK[0 ~ 15])은 가변되는 N(N = 3, 4, 6) 깊이를 갖는 도2 의 컨볼루션 커널(CK[0 ~ 15])과 달리 확장 부분(Extra part)에 더미값(Dummy Value)이 추가됨에 의해 6으로 고정된 깊이를 갖는다.
도5 에 따른 컨볼루션 커널을 도2 의 컨볼루션 커널(CK[0 ~ 15])에 대비하면, 제16 컨볼루션 커널(CK[15])은 도2 에서와 동일하지만, 제1 내지 제6 컨볼루션 커널(CK[0 ~ 5])은 깊이가 3에서 6으로 증가되고, 제7 내지 제15 컨볼루션 커널(CK[6 ~ 14])은 깊이가 4에서 6으로 증가된 것이다.
Figure 112018065086121-pat00002
표2 는 도5 에 도시된 본 발명의 실시예에 따른 제2 컨볼루션 레이어(C2)의 입력 특징 맵과 출력 특징 맵 사이의 연결 관계를 나타낸다.
표2 에서 X는 도5 에서 기존의 입력 특징 맵과 출력 특징 맵의 연결 관계를 나타내는 컨볼루션 커널의 오리지널 부분(Original part)에 의해 컨볼루션 연산이 수행되는 부분으로, 표1 과 동일하다. 그리고 컨볼루션 커널의 가중치 행렬에서 X에 대응하는 영역에는 도2 에서와 마찬가지로 각 원소에 가중치가 설정된다.
반면, 표2 에서 D는 더미값 추가부(DAU)에 의해 컨볼루션 커널의 확장 부분(Extra part)에 추가되는 더미값을 의미한다. 여기서 더미값은 출력 특징 맵이 더미값에 의해 변화되지 않도록 하는 값으로 설정된다. 일예로 모든 더미값은 0으로 설정될 수 있다.
더미값 추가부(DAU)에 의해 확장 부분(Extra part)에 더미값이 추가된 컨볼루션 커널은 더미 연산을 더 수행하게 되며, 이로 인해 다른 컨볼루션 커널과 동일한 횟수로 연산을 수행하게 된다. 즉 더미값을 추가하여 더미 연산을 수행하도록 함으로써, 컨볼루션 컨널 사이의 연산 횟수가 동일해 지도록 한다.
도2 의 제2 컨볼루션 레이어(C2)에 의한 연산량은 제1 내지 제6 컨볼루션 커널(CK[0 ~ 5])에서 (5 X 5 X 3) X 6이고, 제7 내지 제15 컨볼루션 커널(CK[6 ~ 14])에서 (5 X 5 X 4) X 9이며, 제16 컨볼루션 커널(CK[15])에서 (5 X 5 X 6) X 1으로, ((5 X 5 X 3) X 6 + (5 X 5 X 4) X 9 + (5 X 5 X 6) X 1) 인 것으로 볼 수 있다.
반면, 도5 의 컨볼루션 커널에 의한 연산량은 (5 X 5 X 6) X 16으로 볼 수 있다. 즉 추가된 더미값에 의해 더미 연산이 더 수행됨으로써, 제2 컨볼루션 레이어(C2)의 전체 연산량은 크게 증가되는 것으로 볼 있다. 그러나 16개의 컨볼루션 커널이 모두 동일한 연산량을 갖게 되므로, 모든 컨볼루션 커널의 동작을 병렬 분산 처리할 수 있다. 또한 불규칙한 특성을 처리하기 위한 오버 헤드와 조건 연산의 수가 크게 줄어 든다. 따라서 발산 분기를 감소시켜 하드웨어 가속기의 성능을 최대로 이용할 수 있도록 한다.
표3 은 도2 의 컨볼루션 커널과 도5 의 더미 연산을 포함한 컨볼루션 커널을 이용하는 LeNET-5의 연산량 비교를 나타낸다.
Figure 112018065086121-pat00003
표3 을 참조하면, 도2 의 컨볼루션 커널을 이용하는 제2 컨볼루션 레이어(C2)에 대비하여 도5 의 컨볼루션 커널을 이용하는 제2 컨볼루션 레이어(C2)의 연산량은 1.55배로 증가하며, 파라미터의 개수는 1.59배로 나타남을 알 수 있다.
이는 입력 영상의 개수가 증가될수록 더미 연산이 추가된 제2 컨볼루션 레이어(C2)의 연산량이 더욱 증가함을 알 수 있다.
이는 10,000회의 입력 영상이 입력될 때, 더미 연산이 추가된 제2 컨볼루션 레이어(C2)는 더미 연산이 추가되지 않은 제2 컨볼루션 레이어(C2)에 비해 1,000,000,000회 더 많은 연산을 수행함을 의미한다.
그러나, 더미 연산이 추가된 제2 컨볼루션 레이어(C2)는 동일한 수의 스레드(워크 아이템)을 갖는 워크 그룹을 각 연산 유닛(CU)에 할당할 수 있으며, 이로 인해, 하드웨어 가속기의 성능을 최대로 활용할 수 있다. 표4 는 도2 의 컨볼루션 커널과 도5 의 더미값이 추가된 컨볼루션 커널을 이용하는 LeNET-5의 제2 컨볼루션 레이어(C2)의 성능 비교를 나타낸다.
표4 는 AMD APU를 이용하여 측정한 결과로서, 각각 64개의 스레드(워크 아이템)을 포함하는 워크 그룹을 연산 유닛(CU)에 할당하여 측정을 수행한 결과이다.
Figure 112018065086121-pat00004
표4 에 나타난 바와 같이, 비록 더미값이 추가된 제2 컨볼루션 레이어(C2)는 더미 연산에 의한 연산량이 증가함에도 불구하고, 병렬 연산 처리의 효율성을 극대화함으로써, 더미값이 추가되지 않은 제2 컨볼루션 레이어(C2)에 비해, 동일한 시간에 약 3.84배 많은 작업을 수행할 수 있음을 알 수 있다.
도6 은 본 발명의 일 실시예에 따른 인공 신공망 모듈의 스케쥴링 방법을 나타낸다.
도1 내지 도5 를 참조하여, 도6 의 인공 신공망 모듈의 스케쥴링 방법을 설명하면, 우선 인공 신경망 모듈에 포함된 적어도 하나의 컨볼루션 레이어 각각에 구비되는 다수의 컨볼루션 커널 각각의 크기를 판별한다(S110). 도2 에 도시된 바와 같이, 연산 레이어 내의 다수의 연산 커널은 서로 다른 깊이를 갖는 가중치 행렬을 포함하여 서로 다른 크기로 구현될 수 있으며, 이에 다수의 연산 커널이 수행하는 연산 횟수는 서로 상이하게 설정될 수 있다.
본 실시예는 병렬 처리의 효율성을 극대화하기 위해, 다수의 컨볼루션 커널이 수행해야 하는 연산 횟수를 동일하게 설정하는 것을 목적으로 하며, 이를 위해 컨볼루션 커널의 크기(가중치 행렬의 크기)를 우선 판별한다.
적어도 하나의 컨볼루션 레이어에서 다수의 컨볼루션 커널 각각에 지정된 연산 횟수가 판별되면, 판별된 다수의 컨볼루션 커널 사이의 연산 횟수가 동일한지 판별한다(S120).
여기서 컨볼루션 커널은 동일한 컨볼루션 레이어 내의 컨볼루션 커널을 의미하며, 서로 다른 컨볼루션 레이어의 컨볼루션 커널 사이의 연산 횟수는 서로 상이하여도 무방하다.
한편, 다수의 컨볼루션 커널의 크기가 동일하지 않은 것으로 판별되면, 다수의 컨볼루션 커널 중 최대 크기의 컨볼루션 커널의 크기를 판별한다(130).
그리고 다수의 컨볼루션 커널이 판별된 최대 크기의 컨볼루션 커널과 동일한 크기를 갖도록 컨볼루션 커널에 더미값을 추가한다(S140). 여기서 더미값의 추가는 컨볼루션 커널에 기설정된 가로, 세로 및 깊이를 갖고 포함된 가중치 행렬에 깊이 방향으로 더미값을 추가하여 수행될 수 있다.
이때 더미값이 추가된 컨볼루션 커널의 깊이는 입력 특징 맵의 특징 맵 개수에 대응하도록 구성될 수 있다.
한편, 더미값이 추가되면, 적어도 하나의 컨볼루션 레이어 각각에서 다수의 컨볼루션 커널이 수행해야하는 연산 횟수가 모두 동일해진다. 따라서 각 컨볼루션 레이어에서 다수의 컨볼루션 커널이 병렬로 연산을 수행할 수 있도록 병렬화하여 스케쥴링 한다(S150).
컨볼루션 레이어의 컨볼루션 커널이 병렬화되어 스케쥴링 되면, 인공 신경망을 구동하여, 인공 신경망을 학습시키거나, 학습된 인공 신경망을 이용하여 입력 영상 또는 입력 데이터로부터 특징을 추출하고 분류한다(S160).
도7 및 도8 은 본 발명의 실시예에 따른 인공 신경망 모듈의 실행 시간 및 소비 전력을 나타낸 그래프이다.
도7 및 도8은 AMD APU A10에서 테스트된 결과로서, 16GB DDR3 메모리를 사용하였다. 동일한 반도체 다이에서 CPU와 GPU가 연결된 APU는 PCI Express (PCIe) 버스를 통해 CPU와 GPU가 외부로 연결된 플랫폼보다 좋은 성능을 얻는 것이 가능하다.
실행 시간을 비교하기 위해, 도2 와 같이, 더미값이 추가되지 않은 인공 신경망과 도5 와 같이, 더미값이 추가된 인공 신경망에서 각각 3 종류의 병렬화 방법을 적용하였다.
먼저 더미값이 추가되지 않은 인공 신경망에 대해 C/C++ 코드(NONE)와 OpenMP를 이용하여 병렬화한 코드(OMP), 그리고 OpenCL을 이용하여 병렬화한 코드(OCL)를 구현하였다. 한편 더미값이 추가된 인공 신경망에 대해 C/C++ 코드(NONED), OpenMP를 이용하여 병렬화한 코드(OMPD) 및 동일한 워크 그룹의 크기를 사용하는 OpenCL 코드(OCLD)를 구현하였다.
도7 및 도8 을 참조하면, 더미값이 추가되지 않은 인공 신경망에서의 OCL 대비 NONE의 실행시간/전력소모는 25.72/21.89배 향상된 반면, 더미값이 추가된 인공 신경망에서의 OCLD 대비 NONED 실행시간/전력소모는 37.26/26.4배 향상되었음을 알 수 있다.
즉 더미값이 추가되지 않은 인공 신경망에 비해 더미값이 추가된 인공 신경망이 더미값에 의한 더미 연산을 더 수행함에도 전체적인 성능이 더 향상되었음을 알 수 있다.
본 발명에 따른 방법은 컴퓨터에서 실행 시키기 위한 매체에 저장된 컴퓨터 프로그램으로 구현될 수 있다. 여기서 컴퓨터 판독가능 매체는 컴퓨터에 의해 액세스 될 수 있는 임의의 가용 매체일 수 있고, 또한 컴퓨터 저장 매체를 모두 포함할 수 있다. 컴퓨터 저장 매체는 컴퓨터 판독가능 명령어, 데이터 구조, 프로그램 모듈 또는 기타 데이터와 같은 정보의 저장을 위한 임의의 방법 또는 기술로 구현된 휘발성 및 비휘발성, 분리형 및 비분리형 매체를 모두 포함하며, ROM(판독 전용 메모리), RAM(랜덤 액세스 메모리), CD(컴팩트 디스크)-ROM, DVD(디지털 비디오 디스크)-ROM, 자기 테이프, 플로피 디스크, 광데이터 저장장치 등을 포함할 수 있다.
본 발명은 도면에 도시된 실시예를 참고로 설명되었으나 이는 예시적인 것에 불과하며, 본 기술 분야의 통상의 지식을 가진 자라면 이로부터 다양한 변형 및 균등한 타 실시예가 가능하다는 점을 이해할 것이다.
따라서, 본 발명의 진정한 기술적 보호 범위는 첨부된 청구범위의 기술적 사상에 의해 정해져야 할 것이다.

Claims (11)

  1. 각각 가중치 행렬을 포함하고, 입력 특징 맵과 상기 가중치 행렬을 컨볼루션 연산하여 출력 특징 맵을 획득하는 다수의 컨볼루션 커널; 및
    상기 다수의 컨볼루션 커널의 상기 가중치 행렬의 크기를 판별하고, 판별된 가중치 행렬의 크기가 서로 상이하면, 기지정된 더미값을 추가하여 상기 다수의 컨볼루션 커널의 가중치 행렬의 크기를 동일하게 조절하는 더미값 추가부; 를 포함하는 인공 신경망 모듈.
  2. 제1 항에 있어서, 상기 더미값 추가부는
    상기 다수의 컨볼루션 커널에 포함된 가중치 행렬 중 최대 크기의 가중치 행렬의 크기에 따라 상기 가중치 행렬에 추가되는 더미값의 개수를 결정하는 인공 신경망 모듈.
  3. 제2 항에 있어서, 상기 더미값 추가부는
    가로, 세로 및 깊이를 갖는 3차원 행렬로 구현된 상기 가중치 행렬의 깊이에 상기 더미값을 추가하여 깊이를 증가시키는 인공 신경망 모듈.
  4. 제3 항에 있어서, 상기 가중치 행렬은
    상기 더미값이 추가되어 상기 입력 특징 맵에 포함된 특징 맵의 개수에 대응하는 깊이를 갖는 인공 신경망 모듈.
  5. 제3 항에 있어서, 상기 더미값은
    0의 값으로 설정되는 인공 신경망 모듈.
  6. 제3 항에 있어서, 상기 다수의 컨볼루션 커널은
    서로 병렬로 상기 컨볼루션 연산 처리를 수행하는 인공 신경망 모듈.
  7. 제1 항에 있어서, 상기 인공 신경망은
    상기 출력 특징 맵을 기지정된 방식으로 서브 샘플링하여 상기 출력 특징 맵의 크기를 줄이는 서브 샘플링 레이어를 더 포함하는 인공 신경망 모듈.
  8. 각각 가중치 행렬을 포함하고, 입력 특징 맵과 상기 가중치 행렬을 컨볼루션 연산하여 출력 특징 맵을 획득하는 다수의 컨볼루션 커널의 가중치 행렬의 크기를 판별하는 단계;
    판별된 가중치 행렬의 크기가 서로 상이하면, 기지정된 더미값을 추가하여 상기 다수의 컨볼루션 커널의 가중치 행렬의 크기를 동일하게 조절하는 단계; 및
    상기 다수의 컨볼루션 커널이 병렬로 연산 처리를 수행하도록 스케쥴링하는 단계; 를 포함하는 인공 신경망 모듈의 스케쥴링 방법.
  9. 제8 항에 있어서, 상기 동일하게 조절하는 단계는
    상기 다수의 컨볼루션 커널에 포함된 가중치 행렬 중 최대 크기을 판별하는 단계;
    최대 크기의 가중치 행렬의 크기에 따라 상기 가중치 행렬에 추가되는 더미값의 개수를 결정하는 단계; 및
    결정된 개수의 더미 값을 상기 가중치 행렬에 추가하는 단계; 를 포함하는 인공 신경망 모듈의 스케쥴링 방법.
  10. 제9 항에 있어서, 상기 가중치 행렬에 추가하는 단계는
    가로, 세로 및 깊이를 갖는 3차원 행렬로 구현된 상기 가중치 행렬의 깊이에 결정된 개수의 상기 더미값을 추가하여 깊이를 증가시키는 인공 신경망 모듈의 스케쥴링 방법.
  11. 제10 항에 있어서, 상기 더미값은
    0의 값으로 설정되는 인공 신경망 모듈의 스케쥴링 방법.
KR1020180076692A 2018-07-02 2018-07-02 고효율 병렬 처리를 위한 인공 신경망 모듈 및 이의 스케쥴링 방법 KR102038390B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020180076692A KR102038390B1 (ko) 2018-07-02 2018-07-02 고효율 병렬 처리를 위한 인공 신경망 모듈 및 이의 스케쥴링 방법

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020180076692A KR102038390B1 (ko) 2018-07-02 2018-07-02 고효율 병렬 처리를 위한 인공 신경망 모듈 및 이의 스케쥴링 방법

Publications (1)

Publication Number Publication Date
KR102038390B1 true KR102038390B1 (ko) 2019-10-31

Family

ID=68421122

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020180076692A KR102038390B1 (ko) 2018-07-02 2018-07-02 고효율 병렬 처리를 위한 인공 신경망 모듈 및 이의 스케쥴링 방법

Country Status (1)

Country Link
KR (1) KR102038390B1 (ko)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111008616A (zh) * 2019-12-25 2020-04-14 南京猫头鹰智能科技有限公司 一种基于卷积神经网络和深度核网络的视频行为识别方法
CN111610963A (zh) * 2020-06-24 2020-09-01 上海西井信息科技有限公司 芯片结构及其乘加计算引擎
CN112101284A (zh) * 2020-09-25 2020-12-18 北京百度网讯科技有限公司 图像识别方法、图像识别模型的训练方法、装置及系统
CN112465110A (zh) * 2020-11-16 2021-03-09 中国电子科技集团公司第五十二研究所 一种卷积神经网络计算优化的硬件加速装置
CN112766474A (zh) * 2019-11-04 2021-05-07 北京地平线机器人技术研发有限公司 用于实现卷积运算的方法、装置、介质以及电子设备
KR102299084B1 (ko) * 2020-08-24 2021-09-07 오픈엣지테크놀로지 주식회사 하드웨어 가속기의 출력 데이터를 메모리에 저장하는 방법, 하드웨어 가속기의 입력 데이터를 메모리로부터 읽는 방법, 및 이를 위한 하드웨어 가속기

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2018005332A (ja) * 2016-06-28 2018-01-11 富士通株式会社 情報処理装置、画像処理方法および画像処理プログラム
KR20180022288A (ko) 2016-08-24 2018-03-06 한국과학기술원 부분구조 학습기법과 영상데이터를 이용한 신경망 학습 방법 및 장치

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2018005332A (ja) * 2016-06-28 2018-01-11 富士通株式会社 情報処理装置、画像処理方法および画像処理プログラム
KR20180022288A (ko) 2016-08-24 2018-03-06 한국과학기술원 부분구조 학습기법과 영상데이터를 이용한 신경망 학습 방법 및 장치

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
Anirud Pande 외 1명. Matrix Convolution using Parallel Programming. 2013.7. *
Yaohung M. Tsai 외 3명. Performance-Portable Autotuning of OpenCL Kernels for Convolutional Layers of Deep Neural Networks. 2016년 *

Cited By (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112766474A (zh) * 2019-11-04 2021-05-07 北京地平线机器人技术研发有限公司 用于实现卷积运算的方法、装置、介质以及电子设备
CN112766474B (zh) * 2019-11-04 2024-03-22 北京地平线机器人技术研发有限公司 用于实现卷积运算的方法、装置、介质以及电子设备
CN111008616A (zh) * 2019-12-25 2020-04-14 南京猫头鹰智能科技有限公司 一种基于卷积神经网络和深度核网络的视频行为识别方法
CN111008616B (zh) * 2019-12-25 2023-09-12 南京猫头鹰智能科技有限公司 一种基于卷积神经网络和深度核网络的视频行为识别方法
CN111610963A (zh) * 2020-06-24 2020-09-01 上海西井信息科技有限公司 芯片结构及其乘加计算引擎
CN111610963B (zh) * 2020-06-24 2021-08-17 上海西井信息科技有限公司 芯片结构及其乘加计算引擎
KR102299084B1 (ko) * 2020-08-24 2021-09-07 오픈엣지테크놀로지 주식회사 하드웨어 가속기의 출력 데이터를 메모리에 저장하는 방법, 하드웨어 가속기의 입력 데이터를 메모리로부터 읽는 방법, 및 이를 위한 하드웨어 가속기
WO2022045449A1 (ko) * 2020-08-24 2022-03-03 오픈엣지테크놀로지 주식회사 하드웨어 가속기의 출력 데이터를 메모리에 저장하는 방법, 하드웨어 가속기의 입력 데이터를 메모리로부터 읽는 방법, 및 이를 위한 하드웨어 가속기
CN112101284A (zh) * 2020-09-25 2020-12-18 北京百度网讯科技有限公司 图像识别方法、图像识别模型的训练方法、装置及系统
CN112465110A (zh) * 2020-11-16 2021-03-09 中国电子科技集团公司第五十二研究所 一种卷积神经网络计算优化的硬件加速装置
CN112465110B (zh) * 2020-11-16 2022-09-13 中国电子科技集团公司第五十二研究所 一种卷积神经网络计算优化的硬件加速装置

Similar Documents

Publication Publication Date Title
KR102038390B1 (ko) 고효율 병렬 처리를 위한 인공 신경망 모듈 및 이의 스케쥴링 방법
US20230153620A1 (en) Dynamic processing element array expansion
EP4036724A1 (en) Method for splitting neural network model by using multi-core processor, and related product
US11741350B2 (en) Efficient utilization of processing element array
US20220383068A1 (en) Systems and methods for improved neural network execution
US10902318B2 (en) Methods and systems for improved transforms in convolutional neural networks
KR102224510B1 (ko) 데이터 관리를 위한 시스템들 및 방법들
US11144823B1 (en) Method and system for hierarchical weight-sparse convolution processing
US9886377B2 (en) Pipelined convolutional operations for processing clusters
US10762425B2 (en) Learning affinity via a spatial propagation neural network
CN114503125A (zh) 结构化剪枝方法、系统和计算机可读介质
US11144291B1 (en) Loop-oriented neural network compilation
US20210406686A1 (en) Method and system for balanced-weight sparse convolution processing
JP6961640B2 (ja) データ処理のシステムおよび方法
US11567778B2 (en) Neural network operation reordering for parallel execution
US12079734B1 (en) Compilation time reduction for memory and compute bound neural networks
KR102164190B1 (ko) 고효율 연산 처리를 위한 인공 신경망 모듈 및 이의 스케쥴링 방법
US20210304010A1 (en) Neural network training under memory restraint
US11636569B1 (en) Matrix transpose hardware acceleration
CN118043821A (zh) 混合稀疏压缩
KR102372869B1 (ko) 인공 신경망을 위한 행렬 연산기 및 행렬 연산 방법
CN110765413B (zh) 矩阵求和结构及神经网络计算平台
US11809849B1 (en) Global modulo allocation in neural network compilation
US12125124B1 (en) Matrix transpose hardware acceleration
US12106102B1 (en) Vector clocks for highly concurrent execution engines

Legal Events

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