도 1은 본 개시의 실시예에 따른 전자 시스템을 나타내는 블록도이다. 도 2는 뉴럴 네트워크 구조의 일 예를 나타내고, 도 3은 본 개시의 실시예에 따른 입력 피처 리스트를 나타낸다.
본 개시의 실시예에 따른 전자 시스템(100)은 뉴럴 네트워크를 기초로 입력 데이터를 실시간으로 분석하여 유효한 정보를 추출하고, 추출된 정보를 기초로 상황 판단을 하거나 또는 전자 시스템(100)이 탑재되는 전자 장치의 구성들을 제어할 수 있다. 예컨대 전자 시스템(100)은 드론(drone), 첨단 운전자 보조 시스템(Advanced Drivers Assistance System; ADAS) 등과 같은 로봇 장치, 스마트 TV, 스마트 폰, 의료 장치, 모바일 장치, 영상 표시 장치, 계측 장치, IoT(Internet of Things) 장치 등에 적용될 수 있으며, 이 외에도 다양한 종류의 전자 장치 중 하나에 탑재될 수 있다.
도 1을 참조하면, 전자 시스템(100)은 CPU(Central Processing Unit)(110), RAM(Random Access memory)(120), 뉴럴 네트워크 장치(130), 메모리(140), 센서 모듈(150) 및 통신 모듈(160)을 포함할 수 있다. 전자 시스템(100)은 입출력 모듈, 보안 모듈, 전력 제어 장치 등을 더 포함할 수 있다. 실시예에 있어서, 전자 시스템(100)의 구성들(CPU(110), RAM(120), 뉴럴 네트워크 장치(130), 메모리(140), 센서 모듈(150) 및 통신 모듈(160)) 중 일부는 하나의 반도체 칩에 탑재될 수 있다.
CPU(110)는 전자 시스템(100)의 전반적인 동작을 제어한다. CPU(110)는 하나의 프로세서 코어(Single Core)를 포함하거나, 복수의 프로세서 코어들(Multi-Core)을 포함할 수 있다. CPU(110)는 메모리(140)에 저장된 프로그램들 및/또는 데이터를 처리 또는 실행할 수 있다. 일 실시예에 있어서, CPU(110)는 메모리(140)에 저장된 프로그램들을 실행함으로써, 뉴럴 네트워크 장치(130)의 기능을 제어할 수 있다.
RAM(120)은 프로그램들, 데이터, 또는 명령들(instructions)을 일시적으로 저장할 수 있다. 예컨대 메모리(140)에 저장된 프로그램들 및/또는 데이터는 CPU(110)의 제어 또는 부팅 코드에 따라 RAM(120)에 일시적으로 저장될 수 있다. RAM(120)은 DRAM(Dynamic RAM) 또는 SRAM(Static RAM) 등의 메모리로 구현될 수 있다.
뉴럴 네트워크 장치(130)는 수신되는 입력 데이터를 기초로 뉴럴 네트워크 의 연산을 수행하고, 수행 결과를 기초로 정보 신호를 생성할 수 있다. 뉴럴 네트워크는 Convolutional Neural Networks(CNN), Recurrent Neural Networks(RNN), Deep Belief Networks, Restricted Boltzman Machines 등을 포함할 수 있으나 이에 제한되지 않는다.
정보 신호는 음성 인식 신호, 사물 인식 신호, 영상 인식 신호, 생체 정보 인식 신호 등과 같은 다양한 종류의 인식 신호 중 하나를 포함할 수 있다. 예를 들어, 뉴럴 네트워크 장치(130)는 비디오 스트림에 포함되는 프레임 데이터를 입력 데이터로서 수신하고, 프레임 데이터로부터 프레임 데이터가 나타내는 이미지에 포함된 사물에 대한 인식 신호를 생성할 수 있다. 그러나, 이에 제한되는 것은 아니며, 전자 시스템(100)이 탑재된 전자 장치의 종류 또는 기능에 따라 뉴럴 네트워크 장치(130)는 다양한 종류의 입력 데이터를 수신할 수 있고, 입력 데이터에 따른 인식 신호를 생성할 수 있다. 도 2를 참조하여 뉴럴 네트워크 구조의 일 예를 간략하게 설명하기로 한다.
도 2는 뉴럴 네트워크 구조의 일 예로서, 컨볼루션 뉴럴 네트워크의 구조를 나타낸다. 도 2를 참조하면, 뉴럴 네트워크(10)는 복수의 레이어(11, 12, 13)를 포함할 수 있다. 예시적으로, 제1 레이어(11)는 컨볼루션(convolution) 레이어이고, 제2 레이어(12)는 풀링(pooling) 레이어이고, 제3 레이어(13)는 출력 레이어일 수 있다. 출력 레이어는 풀리 커넥티드(fully connected) 레이어일 수 있다. 뉴럴 네트워크(10)는 활성 레이어를 더 포함할 수 있으며, 도 2에 도시된 레이어들 외에 또 다른 컨볼루션 레이어, 풀링 레이어, 또는 풀리 커넥티드 레이어를 더 포함할 수 있다.
복수의 레이어(11, 12, 13) 각각은 입력 데이터 또는 이전 레이어에서 생성된 피처 맵을 입력 피처 맵으로서 수신하고, 입력 피처 맵을 연산하여 출력 피처 맵 또는 인식 신호(REC)를 생성할 수 있다. 이때, 피처 맵은 입력 데이터의 다양한 특징이 표현된 데이터를 의미한다. 피처 맵들(FM1, FM2, FM3)은 2차원 매트릭스 또는 3차원 매트릭스 형태를 가질 수 있다. 이러한 다차원 매트릭스 형태를 가지는 피처 맵들(FM1, FM2, FM3)은 피처 텐서(tensor)로 지칭될 수 있다. 피처 맵들(FM1, FM2, FM3)은 너비(W)(또는 칼럼이라고 함), 높이(H)(또는 로우라고 함) 및 깊이(D)를 가지며, 이는 좌표상의 x축, y축 및 z축에 각각 대응할 수 있다. 이때, 깊이(D)는 채널 수로 지칭될 수 있다.
한편, 본 개시에서, 피처 맵의 x-y 평면 상의 위치는 공간적 위치(spatial location)로 지칭되고, 피처 맵의 z 축 상의 위치가 채널이라고 지칭될 수 있다. 또한, 피처 맵의 x-y 평면 상의 사이즈는 공간적 크기(spatial size)로 지칭될 수 있다.
제1 레이어(11)는 제1 피처 맵(FM1)을 웨이트 맵(WM)과 컨볼루션하여 제2 피처 맵(FM2)을 생성할 수 있다. 웨이트 맵(WM)은 제1 피처 맵(FM1)을 필터링할 수 있으며, 필터 또는 커널로 지칭될 수 있다. 웨이트 맵(WM)의 깊이, 즉 채널 개수는 제1 피처 맵(FM1)의 깊이, 즉 채널 개수와 동일하며, 웨이트 맵(WM)과 제1 피처 맵(FM1)의 동일한 채널끼리 컨볼루션될 수 있다. 웨이트 맵(WM)이 제1 입력 피처 맵(FM1)을 슬라이딩 윈도로 하여 횡단하는 방식으로 시프트된다. 시프트되는 양은 "스트라이드(stride) 길이" 또는 "스트라이드"로 지칭될 수 있다. 각 시프트동안, 웨이트 맵(112)에 포함되는 웨이트 각각이 제1 피처 맵(FM1)과 중첩된 영역에서의 모든 피처값과 곱해지고 더해질 수 있다. 제1 피처 맵(FM1)과 웨이트 맵(112)이 컨볼루션 됨에 따라, 제2 피처 맵(FM2)의 하나의 채널이 생성될 수 있다. 도 2에는 하나의 웨이트 맵(WM)이 표시되었으나, 실질적으로는 복수개의 웨이트 맵이 제1 피처 맵(FM1)과 컨볼루션 되어, 제2 피처 맵(FM2)의 복수개의 채널이 생성될 수 있다. 다시 말해, 제2 피처 맵(FM2)의 채널의 수는 웨이트 맵의 개수에 대응할 수 있다.
제2 레이어(12)는 풀링을 수행함으로써 제3 피처 맵(FM3)을 생성할 수 있다. 풀링은 샘플링 또는 다운-샘풀링으로 지칭될 수 있다. 2 차원의 풀링 윈도우(PW)가 제2 피처 맵(FM2) 상에서 쉬프트되고, 풀링 윈도우(PW)와 중첩되는 영역의 피처값들 중 최대값 (또는 피처값들의 평균값)이 선택될 수 있다. 이에 따라, 제2 피처 맵(FM2)으로부터 제3 피처 맵(FM3)이 생성될 수 있다. 제3 피처 맵(FM3)의 채널과 제2 피처 맵(FM2)의 채널 개수는 동일하다.
실시예에 있어서, 풀링 윈도우(PW)가 풀링 윈도우(PW)의 사이즈 단위로 제2 피처 맵(FM2) 상에서 쉬프트될 수 있다. 풀링 윈도우(PW)가 쉬프트되는 양, 다시 말해 스트라이드가 풀링 윈도우(PW)의 길이와 동일할 수 있으며, 이에 따라 제3 피처 맵(FM2)의 공간적 크기(spatial size)는 제2 피처 맵(FM2)의 공간적 크기보다 작을 수 있다. 그러나, 이에 제한되는 것은 아니며, 제3 피처 맵(FM2)의 공간적 크기(spatial size)는 제2 피처 맵(FM2)의 공간적 크기와 같거나 클 수 있다. 제3 피처 맵(FM2)의 공간적 크기(spatial size)는 풀링 윈도우(PW) 사이즈, 스트라이드 길이, 제로 패딩 수행 여부 등에 따라 결정될 수 있다.
제3 레이어(13)는 제3 피처 맵(FM3)의 피처들을 조합하여 입력 데이터의 클래스(class)(CL)를 분류할 수 있다. 또한, 클래스에 상응하는 인식 신호(REC)를 생성할 수 있다. 일 실시예에 있어서, 입력 데이터는 비디오 스트림(video stream)에 포함되는 프레임 데이터에 상응할 수 있다. 이 경우, 제3 레이어(13)는 제2 레이어(12)로부터 제공되는 제3 피처 맵(FM3)을 기초로 프레임 데이터가 나타내는 이미지에 포함되는 사물들에 대응하는 클래스를 추출함으로써, 사물을 인식하고, 인식된 사물에 상응하는 인식 신호(REC)를 생성할 수 있다.
뉴럴 네트워크에서, 하위 레벨의 레이어들, 예컨대 컨볼루션 레이어들은 입력 데이터 또는 입력 피처 맵으로부터 하위 레벨의 피처들(예컨대, 얼굴 이미지의 에지(edge) 또는 그레디언트)을 추출하고 상위 레벨의 레이어들, 예컨대 풀리 커넥티드(fully connected) 레이어는 입력 피처 맵으로부터 상위 레벨의 피처들, 즉 클래스(예컨대, 얼굴 이미지의 눈, 코 등)를 추출하거나 검출할 수 있다.
계속하여 도 1을 참조하면, 본 실시예에 따른 뉴럴 네트워크 장치(130)는 인덱스 기반의 뉴럴 네트워크 연산을 수행할 수 있다. 이때 인덱스는 피처 또는 웨이트의 공간적 위치를 나타낸다. 인덱스는 2차원 매트릭스의 로우(row) 및 칼럼(column)에 각각 대응하는 제1 인덱스 및 제2 인덱스를 포함할 수 있다.
뉴럴 네트워크 장치(130)는 도 2를 참조하여 전술한 뉴럴 네트워크의 복수의 레이어 중 적어도 하나의 레이어에 대응하는 연산을 수행함에 있어서, 인덱스 기반으로 연산을 수행할 수 있다. 뉴럴 네트워크 장치(130)는 매트릭스 형태의 입력 피처 맵(이하 입력 피처 매트릭스라고 함)을 기초로 각각의 입력 피처들에 대응하는 인덱스 및 데이터를 포함하는 입력 피처 리스트를 생성하고, 인덱스에 기초하여 연산을 수행할 수 있다.
도 3에 도시된 바와 같이, 뉴럴 네트워크 장치(130)는 입력 피처 매트릭스로부터 입력 피처 리스트를 생성할 수 있다. 입력 피처 리스트는 입력 피처의 공간상 위치에 대응하는 제1 인덱스(RA) 및 제2 인덱스(CA)를 포함할 수 있다. 실시예에 있어서, 인덱스는 어드레스로 지칭될 수 있으며, 제1 인덱스(RA) 및 제2 인덱스(CA)는 각각 로우 어드레스 및 칼럼 어드레스로 지칭될 수 있다. 또한 입력 피처 리스트는 각 인덱스에 대응하는 데이터(DATA), 즉 입력 피처값을 포함할 수 있다.
인덱스 기반의 뉴럴 네트워크 연산은 인덱스 연산을 포함할 수 있다. 인덱스 연산은 입력 피처 리스트의 각 입력 피처 인덱스를 다른 파라미터의 인덱스와 연산하는 것을 의미한다. 인덱스 연산은 인덱스 리맵핑으로 지칭될 수 있다. 인덱스 연산이 수행됨으로써, 데이터 연산, 즉 입력 피처값에 대한 연산이 단순해지거나 또는 생략될 수 있다.
실시예에 있어서, 입력 피처 리스트는 도 3에 도시된 바와 같이, 비제로값(non-zero value)을 갖는 입력 피처들 (f1,1), (f1,4) 및 (f4,3)에 대응하는 인덱스 및 데이터를 포함할 수 있다. 뉴럴 네트워크 장치(130)는 비제로값을 갖는 입력 피처들에 대하여 인덱스 기반의 연산을 수행할 수 있다.
한편, 컨볼루션 연산에 사용되는 웨이트 맵 또한 웨이트 리스트로 변환되어 뉴럴 네트워크 장치(130)에 제공될 수 있다. 웨이트 리스트는 비제로값을 갖는 웨이트들에 대응하는 인덱스 및 데이터를 포함할 수 있다. 이하, 용어의 혼동을 피하기 위하여, 입력 피처 리스트의 인덱스 및 데이터는 입력 피처 인덱스 및 입력 피처값으로 지칭하고, 웨이트 피처 리스트의 인덱스 및 데이터는 웨이트 인덱스 및 웨이트값으로 지칭하기로 한다.
뉴럴 네트워크 장치(130)는 입력 피처 리스트의 인덱스 및 웨이트 리스트의 인덱스를 기초로 비제로값을 갖는 입력 피처들 및 웨이트들에 대한 컨볼루션 연산을 수행할 수 있다.
뉴럴 네트워크의 연산 과정에서, 제로값은 연산 결과에 영향을 미치지 않는다. 따라서, 뉴럴 네트워크 장치(130)는 비제로값을 갖는 입력 피처들을 기초로 입력 피처 리스트를 생성하고, 입력 피처 리스트의 인덱스를 기초로 연산을 수행함으로써, 비제로값을 갖는 입력 피처들에 대해서만 연산을 수행할 수 있다. 이에 따라 제로값을 갖는 입력 피처들에 대한 연산이 생략될 수 있다.
그러나, 본 개시의 기술적 사상은 이에 제한되는 것은 아니다. 실시예에 있어서, 입력 피처 리스트는 제로값을 갖는 입력 피처들에 대응하는 인덱스 및 데이터를 더 포함할 수 있다. 뉴럴 네트워크 장치(130)는 비제로값 및 제로값을 갖는 입력 피처들을 기초로 입력 피처 리스트를 생성하고, 인덱스를 기초로 연산을 수행할 수도 있다.
계속하여 도 1을 참조하면, 메모리(140)는 데이터를 저장하기 위한 저장 장소로서, OS(Operating System), 각종 프로그램들, 및 각종 데이터를 저장할 수 있다. 실시예에 있어서, 메모리(140)는 뉴럴 네트워크 장치(130)의 연산 수행 과정에서 생성되는 중간 결과들, 예컨대 출력 피처 맵을 출력 피처 리스트 또는 출력 피처 매트릭스 형태로 저장할 수 있다. 실시예에 있어서, 메모리(140)에는 압축된 출력 피처 맵이 저장될 수 있다. 또한, 메모리(140)는 뉴럴 네트워크 장치(130)에서 이용되는 각종 파라미터들, 예컨대 웨이트 맵 또는 웨이트 리스트를 저장할 수 있다.
메모리(140)는 DRAM일 수 있으나, 이에 한정되는 것은 아니다. 메모리(140)는 휘발성 메모리(volatile memory) 또는 불휘발성 메모리(nonvolatile memory) 중 적어도 하나를 포함할 수 있다. 불휘발성 메모리는 ROM (Read Only Memory), PROM (Programmable ROM), EPROM (Electrically Programmable ROM), EEPROM (Electrically Erasable and Programmable ROM), 플래시 메모리, PRAM (Phase-change RAM), MRAM (Magnetic RAM), RRAM (Resistive RAM), FRAM (Ferroelectric RAM) 등을 포함한다. 휘발성 메모리는 DRAM (Dynamic RAM), SRAM (Static RAM), SDRAM (Synchronous DRAM), PRAM (Phase-change RAM), MRAM (Magnetic RAM), RRAM (Resistive RAM), FeRAM (Ferroelectric RAM) 등을 포함한다. 실시예에 있어서, 메모리(14)는 HDD(Hard Disk Drive), SSD(Solid State Drive), CF(compact flash), SD(secure digital), Micro-SD(micro secure digital), Mini-SD(mini secure digital), xD(extreme digital) 또는 Memory Stick 중 적어도 하나를 포함할 수 있다.
센서 모듈(150)은 전자 시스템(100)이 탑재되는 전자 장치 주변의 정보를 수집할 수 있다. 센서 모듈(150)은 전자 장치의 외부로부터 신호(예컨대 영상 신호, 음성 신호, 자기 신호, 생체 신호, 터치 신호 등)를 센싱 또는 수신하고, 센싱 또는 수신된 신호를 데이터로 변환할 수 있다. 이를 위해, 센서 모듈(150)은 센싱 장치, 예컨대 마이크, 촬상 장치, 이미지 센서, 라이더(LIDAR; light detection and ranging) 센서, 초음파 센서, 적외선 센서, 바이오 센서, 및 터치 센서 등 다양한 종류의 센싱 장치 중 적어도 하나를 포함할 수 있다.
 센서 모듈(150)은 변환된 데이터를 뉴럴 네트워크 장치(130)에 입력 데이터로서 제공할 수 있다. 예를 들어, 센서 모듈(150)은 이미지 센서를 포함할 수 있으며, 전자 장치의 외부 환경을 촬영하여 비디오 스트림을 생성하고, 비디오 스트림의 연속하는 데이터 프레임을 뉴럴 네트워크 장치(130)에 입력 데이터로서 순서대로 제공할 수 있다. 그러나 이에 제한되는 것은 아니며 센서 모듈(150)은 다양한 종류의 데이터를 뉴럴 네트워크 장치(130)에 제공할 수 있다.
통신 모듈(160)은 외부 장치와 통신할 수 있는 다양한 유선 또는 무선 인터페이스를 구비할 수 있다. 예컨대 통신 모듈(160)은 유선 근거리통신망(Local Area Network; LAN), Wi-fi(Wireless Fidelity)와 같은 무선 근거리 통신망 (Wireless Local Area Network; WLAN), 블루투스(Bluetooth)와 같은 무선 개인 통신망(Wireless Personal Area Network; WPAN), 무선 USB (Wireless Universal Serial Bus), Zigbee, NFC (Near Field Communication), RFID (Radio-frequency identification), PLC(Power Line communication), 또는 3G (3rd Generation), 4G (4th Generation), LTE (Long Term Evolution) 등 이동 통신망(mobile cellular network)에 접속 가능한 통신 인터페이스 등을 포함할 수 있다.
실시 예에 있어서, 통신 모듈(160)은 외부 서버로부터 웨이트 맵 또는 웨이트 리스트를 수신할 수 있다. 외부 서버는 방대한 양의 학습 데이터를 기초로 트레이닝을 수행하고, 트레이닝된 웨이트를 포함하는 웨이트 맵 또는 웨이트 리스트를 전자 시스템(100)에 제공할 수 있다. 수신된 웨이트 맵 또는 웨이트 리스트는 메모리(1400)에 저장될 수 있다.
전술한 바와 같이, 본 개시의 실시예에 따른 뉴럴 네트워크 장치(130)는 인덱스 기반의 뉴럴 네트워크 연산을 수행함으로써, 효율적으로 뉴럴 네트워크 연산을 수행할 수 있다. 특히, 피처 맵 또는 웨이트 맵에서 비제로값이 희박하게 분포하는 스파스 뉴럴 네트워크에서, 비제로값을 갖는 입력 피처에 대응하는 입력 피처리스트를 생성하고, 이를 기초로 비제로값을 갖는 입력 피처에 대해서 연산을 수행함으로써, 연산량을 감소시킬 수 있다. 연산량이 감소됨에 따라 뉴럴 네트워크 장치(130)의 효율이 향상되고, 뉴럴 네트워크 장치(130) 및 전자 시스템(100)의 소비전력이 감소될 수 있다. 이하, 인덱스 기반의 뉴럴 네트워크 연산 방법의 다양한 실시예를 상세하게 설명하기로 한다.
도 4는 본 개시의 실시예에 따른 인덱스 기반의 뉴럴 네트워크 연산 방법을 나타내는 흐름도이다. 도 4의 연산 방법은 도 1의 뉴럴 네트워크 장치(130)에서 수행될 수 있으며, 전술한 도 2의 뉴럴 네트워크의 레이어들의 연산 과정에 적용될 수 있다.
도 4를 참조하면, 뉴럴 네트워크 장치(130)는 입력 피처 리스트를 생성할 수 있다(S110). 예컨대 뉴럴 네트워크 장치(130)는 매트릭스 형태의 입력 피처 맵으로부터 입력 피처 리스트를 생성할 수 있다. 입력 피처 리스트는 도 3을 참조하여 설명한 바와 같이, 입력들 각각에 대응하는 입력 피처 인덱스 및 입력 피처값을 포함할 수 있다.
뉴럴 네트워크 장치(130)는 입력 피처 리스트의 입력 피처 인덱스를 기초로 인덱스 연산을 수행하고, 인덱스 연산 결과를 기초로 출력 피처 인덱스를 생성할 수 있다(S120).
뉴럴 네트워크 장치(130)는 입력 피처 리스트의 입력 피처값을 기초로 데이터 연산을 수행하고, 데이터 연산 결과를 기초로 출력 피처 인덱스에 대응하는 출력 피처값을 생성할 수 있다. 이때, S120 단계에서 생성된 출력 피처 인덱스가 출력 피처 맵에 매핑되지 않는 경우, 뉴럴 네트워크 장치(130)는 데이터 연산을 생략할 수 있다.
뉴럴 네트워크 장치(130)는 출력 피처 인덱스 및 출력 피처값을 기초로 출력 피처 리스트를 생성할 수 있다(S140). 뉴럴 네트워크 장치(130)가 입력 피처 리스트의 모든 입력 피처들에 대하여 S120 단계 및 S130 단계를 수행함으로써, 출력 피처 리스트를 생성할 수 있다. 뉴럴 네트워크 장치(130)는 메모리에 출력 피처 리스트를 저장할 수 있다. 메모리는 뉴럴 네트워크 장치(130)의 내부에 구비되는 메모리 또는 뉴럴 네트워크 장치(130)의 외부에 구비되는 메모리, 예컨대 도 1의 메모리(140)일 수 있다. 실시예에 있어서, 뉴럴 네트워크 장치(130)는 출력 피처 리스트를 압축하고, 압축된 출력 피처 리스트를 메모리에 저장할 수 있다.
뉴럴 네트워크 장치(130)는 입력 피처 인덱스 및 입력 피처값 각각에 대하여 연산을 수행하고, 이 과정에서, 출력 결과에 영향을 주지 않는 출력 인덱스를 필터링함으로써, 연산량을 감소시킬 수 있다. 또한, 인덱스 연산을 기반으로, 뉴럴 네트워크의 다양한 연산 또는 동작을 용이하게 처리할 수 있다.
도 5는 본 개시의 실시예에 따른 인덱스 기반의 컨볼루션 연산 방법을 나타내는 흐름도이다. 도 5의 연산 방법은 도 1의 뉴럴 네트워크 장치(130)에서 수행될 수 있다.
도 5를 참조하면, 뉴럴 네트워크 장치(130)는 입력 피처 맵, 즉 입력 피처 매트릭스로부터 입력 피처 리스트를 생성할 수 있다(S210). 입력 피처 리스트는 입력 피처 매트릭스의 입력 피처들 각각에 대응하는 입력 피처 인덱스 및 입력 피처를 포함할 수 있다. 입력 피처 인덱스는 매트릭스의 로우 및 컬럼에 대응하는 제1 인덱스 및 제2 인덱스를 포함할 수 있다. 실시예에 있어서, 뉴럴 네트워크 장치(130)는 입력 피처 매트릭스의 적어도 하나의 비제로값을 갖는 입력 피처들에 대응하는 입력 피처 리스트를 생성할 수 있다.
이후, 뉴럴 네트워크 장치(130)는 입력 피처 리스트 및 기 저장된 웨이트 리스트를 기초로 인덱스 기반의 컨볼루션 연산을 수행할 수 있다.
뉴럴 네트워크 장치(130)는 입력 피처 인덱스 및 웨이트 인덱스를 기초로 출력 피처 인덱스를 생성할 수 있다(S220). 뉴럴 네트워크 장치(130)는 입력 피처 인덱스 및 웨이트 인덱스를 연산하여 출력 피처 인덱스를 생성할 수 있다.
실시예에 있어서, 뉴럴 네트워크 장치(130)는 비제로값을 갖는 입력 피처 및 웨이트에 대응하는 입력 피처 인덱스 및 웨이트 인덱스를 연산하여 출력 피처 인덱스를 생성할 수 있다.
실시예에 있어서, 뉴럴 네트워크 장치(130)는 입력 피처 인덱스와 웨이트 인덱스를 합산하여 출력 피처 인덱스를 생성할 수 있다. 예컨대, 뉴럴 네트워크 장치(130)는 입력 피처 인덱스의 제1 인덱스와 웨이트 인덱스의 제1 인덱스를 합산하고, 입력 피처 인덱스의 제2 인덱스와 웨이트 인덱스의 제2 인덱스를 합산할 수 있다.
뉴럴 네트워크 장치(130)는 입력 피처값 및 웨이트값을 기초로 출력 피처 인덱스에 대응하는 출력 피처값을 생성할 수 있다(S230). 뉴럴 네트워크 장치(130)는 입력 피처값 및 웨이트값을 기초로 데이터 연산을 수행함으로써 출력 피처값을 생성할 수 있다. 뉴럴 네트워크 장치(130)는 입력 피처값 및 웨이트값을 곱하고, 곱셈값을 기초로 출력 피처값을 생성할 수 있다. 실시예에 있어서, 뉴럴 네트워크 장치(130)는 출력 피처 인덱스에 대응하는 복수의 곱셈값을 합산하여 출력 피처값으로서 생성할 수 있다. 실시예에 있어서, 입력 피처값 및 웨이트값은 비제로일 수 있으며, 이에 따라 출력 피처값 또한 비제로일 수 있다.
뉴럴 네트워크 장치(130)는 S220 단계에서, 입력 피처 인덱스 및 웨이트 리스트의 웨이트 인덱스를 기초로 인덱스 연산을 수행하고, S230 단계에서 입력 피처값 및 웨이트값을 기초로 데이터 연산을 수행함으로써, 인덱스 기반의 컨볼루션 연산을 수행할 수 있다.
한편, 실시예에 있어서, 인덱스 기반의 컨볼루션 연산 방법은 뉴럴 네트워크 장치(130)가 웨이트 매트릭스로부터 웨이트 리스트를 생성하는 단계를 더 포함할 수 있다. 예컨대, 뉴럴 네트워크 장치(130)는 외부, 예컨대 뉴럴 네트워크 장치(130)의 외부 또는 뉴럴 네트워크 장치(130)가 탑재된 전자 장치의 외부 서버로부터 웨이트 매트릭스를 수신하고, 웨이트 매트릭스로부터 웨이트 리스트를 생성할 수 있다. 웨이트 리스트는 웨이트 매트릭스의 웨이트들 각각에 대응하는 웨이트 인덱스 및 웨이트값을 포함할 수 있다. 실시예에 있어서, 뉴럴 네트워크 장치(130)는 웨이트 매트릭스의 적어도 하나의 비제로값을 갖는 웨이트에 대응하는 웨이트 리스트를 생성할 수 있다. 뉴럴 네트워크 장치(130)는 웨이트 리스트를 저장하고, 웨이트 리스트의 웨이트 인덱스 및 웨이트값을 S220 단계 및 S230 단계에서 이용할 수 있다. 그러나 이에 제한되는 것은 아니며, 뉴럴 네트워크 장치(130)는 뉴럴 네트워크 장치(130)는 외부, 예컨대 뉴럴 네트워크 장치(130)의 외부 또는 뉴럴 네트워크 장치(130)가 탑재된 전자 장치의 외부 서버로부터 웨이트 리스트를 수신하고, 웨이트 리스트를 저장한 후, 이를 이용할 수도 있다.
도 6은 컨볼루션 연산을 나타내는 도면이고, 도 7은 도 6의 컨볼루션 연산 과정에서 유효한 연산 결과를 나타내는 스냅샷들을 나타내는 도면이다.
구체적으로 도 6은 비제로값이 희박하게 분포하는 입력 피처 매트릭스 및 웨이트 매트릭스를 기초로 컨볼루션 연산이 수행되는 것을 나타내는 도면이다. 또한, 도 7은 일반적인 뉴럴 네트워크에서 사용되는 횡단(traverse) 기반의 컨볼루션 연산 과정에서, 유효한 연산 결과를 나타내는 스냅샷들을 나타내는 도면이다.
도 6을 참조하면, 비제로 입력 피처들 (f1,1), (f1,4) 및 (f4,3) 을 포함하는 입력 피처 매트릭스(IFMX) 및 비제로 웨이트들 (W0,1) 및 (W2,2) 를 포함하는 웨이트 매트릭스(WMX)의 컨볼루션 연산(*)의 결과는 제1 내지 제6 위치(①, ②, ③, ④, ⑤, ⑥) 각각에 대응하는 출력 피처들을 포함하는 출력 피처 매트릭스(OFMX)로서 나타낼 수 있다.
전술한 바와 같이, 컨볼루션 연산에 있어서, 제로값을 갖는 입력 피처 및 웨이트는 연산 결과에 영향을 미치지 않는다. 횡단 기반의 컨볼루션 연산 과정에서, 다량의 스냅샷이 생성될 수 있으나, 연산 결과에 영향을 주는 것은 도 7에 도시된 6개의 스냅샷 (a)~(f)이다. 도 7의 (a)~(f)에 도시된 바와 같이, 출력 피처들은 비제로 입력 피처들 (f1,1), (f1,4) 및 (f4,3) 이 각각 비제로 웨이트들 (W0,1) 및 (W2,2) 과 컨볼루션된 결과에 대응할 수 있다.
도 8a 내지 도 8c는 본 개시의 실시예에 따른 인덱스 기반의 컨볼루션 연산을 설명하는 도면이다. 도 8a 내지 도 8c는 비제로 입력 피처 및 웨이트에 대하여 인덱스 기반의 컨볼루션 연산이 수행되는 것을 나타낸다.
도 8a는 입력 리스트 생성을 나타낸다. 도 8a를 참조하면 뉴럴 네트워크 장치(130)는 입력 피처 매트릭스의 비제로 입력, 예컨대 입력 피처들 (f1,1), (f1,4) 및 (f4,3)에 대하여 도시된 바와 같이 입력 피처 리스트를 생성할 수 있다. 입력 피처 리스트는 각 입력 피처에 대한 입력 피처 인덱스(RA, CA) 및 입력 피처값(DATA)을 포함할 수 있다.
도 8b는 웨이트 리스트(WL) 생성을 나타낸다. 웨이트 리스트(WL)의 생성은 입력 피처 리스트의 생성과 유사하다. 다만, 컨볼루션 연산을 위하여 웨이트 리스트의 웨이트 인덱스에 대한 조정 단계가 추가로 수행될 수 있다. 실시예에 있어서, 도 8b에 도시된 웨이트 리스트(WL) 생성은 뉴럴 네트워크 장치(도 1의 130)에 웨이트를 제공하는 서버에서 수행되거나 또는 서버에서 제공된 웨이트 매트릭스를 기초로 뉴럴 네트워크 장치(도 1의 130)에 구비되는 전처리 회로에서 수행될 수 있다. 설명의 편의를 위하여 도 8b의 웨이트리스트는 뉴럴 네트워크 장치(130)에서 생성하는 것을 가정하기로 한다.
뉴럴 네트워크 장치(130)는 웨이트 매트릭스(WMX)의 비제로 웨이트, 예컨대 웨이트 (W0,1) 및 (W2,2)에 대하여 초기 웨이트 리스트(IWL)를 생성할 수 있다. 초기 웨이트 리스트(IWL)의 웨이트 인덱스는 웨이트 (W0,1) 및 (W2,2)의 공간적 위치, 예컨대 어드레스를 나타낸다.
이후, 뉴럴 네트워크 장치(130)는 초기 웨이트 리스트(IWL)의 웨이트 인덱스를 웨이트 매트릭스(WMX) 상의 중심을 나타내는 웨이트 바이어스 인덱스, 예컨대 (RA, CA)=(1, 1)를 기초로 미러링함으로써, 미러링된 웨이트 리스트(MWL)를 생성할 수 있다.
뉴럴 네트워크 장치(130)는 미러링된 웨이트 리스트(MWL)로부터 웨이트 바이어스 인덱스, 예컨대 (RA, CA)=(1, 1)를 감산함으로써, 미러링된 웨이트 인덱스를 바이어싱할 수 있다. 이에 따라, (1, 0), (-1, -1)이 웨이트 (W0,1) 및 (W2,2) 각각에 대한 웨이트 인덱스로서 생성되고, 또한 컨볼루션 연산에 이용되는 웨이트 리스트(WL)가 생성될 수 있으며.
도 8c는 인덱스 기반의 입력 피처 및 웨이트의 연산을 나타낸다. 도 8c를 참조하면, 뉴럴 네트워크 장치(130)는 입력 피처 인덱스와 웨이트 인덱스를 합산하고, 입력 피처값과 웨이트값을 곱할 수 있다.
예컨대, 입력 피처들 (f1,1), (f1,4) 및 (f4,3)의 각각의 입력 피처 인덱스 (1,1), (1, 4) 및 (4,3)이 웨이트 (W0,1)의 웨이트 인덱스(1, 0)과 합산되어, 출력 피처 인덱스 (2, 1), (2, 4) 및 (5,3)이 생성될 수 있다. 이때, 입력 피처 인덱스의 제1 인덱스(RA)는 웨이트 인덱스의 제1 인덱스(RA)와 합산되고, 입력 피처 인덱스의 제2 인덱스(CA)는 웨이트 인덱스의 제2 인덱스(CA)와 합산될 수 있다.
입력 피처들 (f1,1), (f1,4) 및 (f4,3)의 각각의 입력 피처값이 웨이트 (W0,1)의 웨이트값과 곱해짐으로써, 웨이트 (W0,1)에 대한 제1 출력 피처 리스트(OFL1)가 생성될 수 있다. 또한, 입력 피처들 (f1,1), (f1,4) 및 (f4,3)의 각각의 입력 피처 인덱스 (1,1), (1, 4) 및 (4,3)이 웨이트 (W2,2)의 웨이트 인덱스 (-1, -1)과 합산되고, 입력 피처들 (f1,1), (f1,4) 및 (f4,3)의 각각의 입력 피처값이 웨이트 (W2,2)의 웨이트값과 곱해짐으로써, 웨이트 (W2,1)에 대한 제2 출력 피처 리스트(OFL2)가 생성될 수 있다.
제1 및 제2 출력 피처 리스트들(OFL1, OFL2)에서 중복되는 출력 피처 인덱스가 없으므로 추가적인 연산 없이, 제1 출력 피처 리스트(OFL1) 및 제2 출력 피처 리스트(OFL2)의 각 출력 피처를 매트릭스 상에 맵핑시킬수 있다. 도 8c의 출력 피처 매트릭스는 도 6에 도시된 출력 피처 매트릭스와 동일함을 알 수 있다.
횡단 기반의 컨볼루선 연산에서는, 횡단(traverse)으로 인하여 연산이 본질적으로 중복성(redundancy)을 포함하며, 이로 인하여 제로값을 갖는 입력 피처 및 웨이트에 대한 연산, 즉 출력 피처에 영향을 미치지 않는 의미 없는 연산을 생략(skip)하기가 용이하지 않다. 그러나, 도 8c에 도시된 바와 같이, 본 개시의 실시예에 따른 인덱스 기반의 컨볼루션 연산에 따르면, 뉴럴 네트워크 장치(130)가 비제로 입력 및 비제로 웨이트를 기초로 인덱스 기반의 연산을 수행함으로써, 의미 없는 연산이 제거될 수 있다. 따라서 컨볼루션 연산에 있어서 연산량이 감소될 수 있다.
도 9a 및 도 9b는 본 개시의 실시예에 따른 인덱스 기반의 컨볼루션 연산을 설명하는 도면이다. 도 9a는 입력 피처 인덱스의 생성을 나타내고, 도 9b 는 도 9a의 입력 피처 인덱스 및 도 8b의 웨이트 인덱스를 기초로 인덱스 기반의 컨볼루션 연산을 수행하는 것을 나타낸다.
도 9a를 참조하면, 뉴럴 네트워크 장치(130)는 입력 피처 매트릭스(IFMX)의 비제로 입력, 예컨대 입력 피처들(f1,1), (f1,4), (f3,2), 및 (f4,3)에 대하여 도시된 바와 같이 입력 피처 리스트(IFL)를 생성할 수 있다. 입력 피처 리스트(IFL)는 각 입력 피처에 대한 입력 피처 인덱스(RA, CA) 및 입력 피처값(DATA)을 포함할 수 있다. 도 8a와 비교하면, 입력 피처 매트릭스(IFMX)에 입력 피처(f3,2)가 추가되었으며, 이에 따라, 입력 피처 리스트(IFL)에 입력 피처(f3,2)에 대응하는 입력 피처 인덱스 (3, 2) 및 입력 피처값 f3,2가 추가되었다.
도 9a의 입력 피처 리스트(IFL) 및 8b의 웨이트 리스트(WL)를 기초로 인덱스 기반의 컨볼루션 연산이 수행되면, 도 9b에 도시된 바와 같이, 웨이트 (W0,1)에 대한 제1 출력 피처 리스트(OFL1) 및 웨이트 (W2,2)에 대한 제2 출력 피처 리스트(OFL2)가 생성될 수 있다. 이때, 제1 출력 피처 리스트(OFL1) 및 제2 출력 피처 리스트(OFL2)에서 출력 피처 인덱스 (2, 1)가 중복된다. 출력 피처 인덱스 (2, 1)에 대한 복수의 출력 피처값, f1,1 X W0,1 및 f3,2 X W2,2가 합산되고 합산 결과가 출력 피처 인덱스 (2, 1)에 대한 출력 피처값으로서 생성될 수 있다.
본 개시의 인덱스 기반의 컨볼루션 연산 방법에 따르면, 뉴럴 네트워크 장치(130)는 인덱스 연산을 통하여 출력 피처 인덱스를 생성하고, 데이터 연산을 통하여 출력 피처값을 생성하되, 출력 피처 인덱스가 중복되는 경우, 다시 말해 동일한 출력 피처 인덱스에 대한 데이터 연산 결과, 즉 곱셈값이 복수개 존재하는 경우, 복수개의 곱셈값을 합산함으로써, 출력 피처 인덱스에 대응하는 출력 피처값을 생성할 수 있다.
도 8a 내지 도 9b를 참조하여 전술한 바와 같이, 뉴럴 네트워크 장치(130)는 비제로값을 갖는 입력 피처 및 웨이트에 대하여 인덱스를 기반으로 컨볼루션 연산을 수행할 수 있다. 이에 따라 컨볼루션 연산에서 요구되는 연산량이 감소될 수 있다. 따라서 뉴럴 네트워크 장치(130)의 연산 속도가 향상되고 소비 전력이 감소될 수 있다.
도 10은 본 개시의 실시예에 따른 인덱스 기반의 제로 패딩 방법을 나타내는 흐름도이다.
도 10을 참조하면, 뉴럴 네트워크 장치(130)는 입력 피처 리스트를 생성할 수 있다(S310). 예컨대, 뉴럴 네트워크 장치(130)는 매트릭스 형태의 입력 피처 맵으로부터, 비제로값을 갖는 입력 피처들에 대한 인덱스 및 데이터를 포함하는 입력 피처 리스트를 생성할 수 있다.
뉴럴 네트워크 장치(130)는 입력 피처 리스트의 각 인덱스에 바이어스 인덱스를 합산할 수 있다(S320). 이로써, 뉴럴 네트워크 장치(130)는 제로 패딩을 수행할 수 있다. 이에 대하여 도 11a 내지 도 11b를 참조하여 상세하게 설명하기로 한다.
도 11a는 뉴럴 네트워크에서 입력 피처 맵에 제로 패딩이 적용되는 예를 나타내고, 도 11b는 본 개시의 실시예에 따른 인덱스 기반의 제로 패딩 방법을 설명하는 도면이다. 본 개시의 도면에서 각 픽셀 내의 상부에 위치하는 숫자는 입력 피처의 인덱스를 나타내고, 하부에 위치하는 숫자는 입력 피처값을 나타낸다.
뉴럴 네트워크에서, 제로 패딩은 입력 피처 맵(IFM)에 대해 모든 외부 방향으로, 다시 말해 로우 및 칼럼 방향 각각으로 제로값을 추가하는 것을 의미한다. 입력 피처 맵(IFM)에 제로 패딩이 적용되어 제로 패딩된 입력 피처 맵(IFM_Z)이 생성될수 있다. 도 11a에 도시된 바와 같이, 입력 피처 맵(IFM)의 모든 외부 방향으로, 제로값이 하나씩 추가되는 경우, 입력 피처들의 위치, 즉 인덱스는 1씩 증가할 수 있다. 예컨대, 입력 피처(D0,0)에 대한 인덱스가 (0,0)에서 (1,1)로 바뀔 수 있다. 이와 같이, 입력 피처 맵(IFM)의 모든 외부 방향으로, 각각 n개의(n는 1 이상의 정수) 제로값이 추가되는 경우, 입력 피처들의 인덱스는 n씩 증가할 수 있다. 각 방향으로 추가되는 제로값의 개수 n (이하, 제로값의 길이라고 함이라고 함)은 제로 패딩이 적용된 입력 피처를 기초로 수행되는 연산의 종류 및 그 특징에 따라 달라질 수 있다.
횡단 기반의 컨볼루션 연산 수행 시, 매트릭스 형태의 입력 피처 맵에 제로 패딩이 적용됨으로써, 입력 피처 맵과 동일한 사이즈의 출력 피처 맵이 생성될 수 있다. 횡단 기반의 컨볼루션 연산을 수행하는 뉴럴 네트워크 장치는 제로 패딩을 지원하기 위하여, 입력 피처 맵(IFM)에 여분의 제로값을 추가하는 제어 로직을 구비하여야 한다.
도 11b는 본 개시의 실시예에 따른 인덱스 기반의 제로 패딩 방법을 설명하는 도면이다. 구체적으로, 도 11b는 비제로값을 갖는 입력 피처들에 대한 입력 피처 맵(IFMa) 및 입력 피처 맵(IFMa)에 인덱스 기반의 제로 패딩이 적용되어 생성되는 제로값이 제외된 제로 패딩된 입력 피처 맵(IFM_Za)을 나타낸다. 도 11b에서 입력 피처 맵들(IFMa 및 IFM_Za)은 입력 피처 리스트를 의미하며, 설명의 편의를 위하여 매트릭스 형태로 나타내기로 한다.
인덱스 기반의 뉴럴 네트워크 연산에서는 제로값을 갖는 입력 피처에 대한 연산은 스킵할 수 있다. 뉴럴 네트워크 장치(130)는 제로 패딩 적용 시, 비제로값을 갖는 입력 피처들을 포함하는 입력 피처 맵(IFMa), 즉 입력 피처 리스트를 생성하고, 입력 피처 맵(IFMa)에 대하여 인덱스 기반의 제로 패딩 방법을 적용하여 제로값이 제외된 제로 패딩된 입력 피처 맵(IFM_Za), 즉 제로 패딩된 입력 피처 리스트를 생성할 수 있다.
인덱스 기반의 뉴럴 네트워크 연산을 수행하는 뉴럴 네트워크 장치(130)는 리스트 형태의 입력 피처 맵(IFMa), 즉 입력 피처 리스트의 각 인덱스들을 바이어스 인덱스 (z, z)를 기초로 리맵핑 함으로써, 제로 패딩된 입력 피처 맵(IFM_Za)을 생성할 수 있다. 예컨대, 뉴럴 네트워크 장치(130)는 입력 피처 맵(IFMa)의 입력 피처의 인덱스에 바이어스 인덱스(z, z)를 더함으로써, 인덱스들을 리맵핑할 수 있다. 이때, 바이어스 인덱스(z, z)는 제로값의 길이에 따라 결정될 수 있다. 예컨대, 도 11a에 도시된 바와 같이, 입력 피처 맵(IFM)의 모든 외부 방향으로 제로값이 하나씩 추가되는 경우, 즉 제로값의 길이가 1이면, 바이어스 인덱스 (z, z)는 (1, 1)로 설정될 수 있다. 제로값의 길이가 2이면, 바이어스 인덱스 (z, z)는 (2, 2)로 설정될 수 있다. 제로값의 길이가 n이면(n은 1 이상의 정수), 바이어스 인덱스 (z, z)는 (n, n)으로 설정될 수 있다. 이와 같이, 제로값의 길이에 기초하여 바이어스 인덱스 (z, z)가 설정될수 있다.
일 예로서, 도 11b는 입력 피처 맵(IFMa)의 모든 외부 방향으로 제로값이 하나씩 추가되는 경우의 제로값이 제외된 제로 패딩된 입력 피처 맵(IFM_Za)을 나타낸다. 뉴럴 네트워크 장치(130)는 입력 피처 맵(IFMa)의 인덱스들에 바이어스 인덱스 (1, 1)을 더함으로써, 입력 피처들의 인덱스들을 리맵핑할 수 있다. 예컨대, 입력 피처 맵(IFMa)의 입력 피처(D0,0)에 대한 인덱스 (0,0)에 바이어스 인덱스 (1, 1)이 더해져, 입력 피처(D0,0) 의 인덱스가 (0,0)에서, (1,1)로 리맵핑될 수 있다. 입력 피처(D2,3)에 대한 인덱스 (2,3)에 바이어스 인덱스(1, 1)이 더해져, 입력 피처(D2,3) 의 인덱스가 (2,3)에서, (3,4)로 리맵핑될 수 있다. 뉴럴 네트워크 장치(130)는, 입력 피처 맵(IFMa)의 입력 피처들((D0,0) 내지 D5,5))의 인덱스에 바이어스 인덱스 (1, 1)를 더함으로써, 제로 패딩된 입력 피처 맵(IFM_Za)을 생성할 수 있다.
이와 같이, 인덱스 기반의 뉴럴 네트워크 연산을 수행하는 뉴럴 네트워크 장치(130)는 리스트 형태의 입력 피처 맵(IFMa) 의 각 인덱스를 제로값의 길이에 따라 설정되는 바이어스 인덱스(z, z)를 기초로 리맵핑 함으로써, 제로 패딩을 위한 별도의 제어 로직을 구비하지 않고도 용이하게 제로 패딩된 입력 피처 맵(IFM_Za)을 생성할 수 있다.
도 12는 본 개시의 실시예에 따른 인덱스 기반의 컨볼루션 연산에서의 스트라이드 적용 방법을 나타내는 흐름도이다. 스트라이드는 컨볼루션 연산 과정에서 수행되며, 도 5의 S220 단계 및 S230 단계에서 수행될 수 있다.
도 12를 참조하면, 뉴럴 네트워크 장치(130)는 입력 피처 인덱스 및 웨이트 인덱스를 합산하고(S410), 합산 결과, 즉 합산된 인덱스를 스트라이드 길이로 나눌수 있다(S420).
뉴럴 네트워크 장치(130)는 나눈 결과가 나머지를 포함하는지 판단하고(S430), 나머지를 포함하면, 입력 피처 인덱스 및 웨이트값의 연산을 생략할 수 있다(S440). 나눈 결과가 나머지를 포함하는 경우, 합산된 인덱스는 출력 피처 맵에 매핑되지 못하므로, 인덱스에 대한 데이터 연산 결과 또한 출력 피처 맵에 영향을 주지 못한다. 따라서, 뉴럴 네트워크 장치(130)는 입력 피처 인덱스 및 웨이트값의 연산을 생략할 수 있다.
나눈 결과가 나머지를 포함하지 않으면, 뉴럴 네트워크 장치(130)는 나눈 값(dividing value)을 출력 피처 인덱스로서 선택하고(S450), 입력 피처값 및 웨이트값을 연산(예컨대 곱셈 및 덧세 연산)할 수 있다(S460). 연산값은 출력 피처 인덱스에 대한 출력값으로서 제공될 수 있다.
예를 들어, 제1 입력 피처 및 제1 웨이트에 대한 입력 피처 인덱스 및 웨이트 인덱스 합산 결과를 스트라이드 길이로 나눈 결과가 나머지를 포함하지 않는 경우 나눈값이 출력 피처 인덱스로서 선택되며, 제1 입력 피처 및 제1 웨이트에 대응하는 입력 피처값 및 웨이트값의 연산 결과가 출력 피처 인덱스에 대한 출력값으로서 제공될 수 있다. 만약 제2 입력 피처 및 제2 웨이트에 대한 입력 피처 인덱스 및 웨이트 인덱스의 합산 결과를 스트라이드 길이로 나눈 결과가 나머지를 포함하는 경우, 제2 입력 피처 및 제2 웨이트에 대한 입력 피처 인덱스 및 웨이트 인덱스의 연산 결과가 출력 피처 인덱스로서 선택되지 않는다. 따라서, 제2 입력 피처 및 제2 웨이트에 대응하는 입력 피처값 및 웨이트값의 연산은 생략될 수 있다.
이와 같이, 인덱스 기반의 컨볼루션 연산에서, 인덱스의 연산을 통해 간단하게 스트라이드가 적용될 수 있으며, 연산량이 감소될 수 있다.
도 13a 및 도 13b는 컨볼루션 수행 시 스트라이드 적용되어 생성된 출력 피처 매트릭스를 나타낸다.
도 13a는 매트릭스 상에서 하나의 픽셀 단위로 스트라이드가 적용된 예를 나타내고, 도 13b는 세 개의 픽셀 단위로 스트라이드가 적용된 예를 나타낸다. 스트라이드 길이가 증가할수록 출력 피처 매트릭스의 사이즈가 감소될 수 있다. 도 13a의 출력 피처 매트릭스(OFMX_S1)와 도 13b의 출력 피처 매트릭스(OFMX_S3)를 비교하면, 도 13a의 출력 피처 매트릭스(OFMX_S1)에서 그레이 표시된 출력 피처들이 도 13b의 출력 피처 매트릭스(OFMX_S3)를 구성하며, 단지 출력 피처들의 인덱스가 변경되었음을 알 수 있다.
전술한 바와 같이, 본 개시의 실시예에 따른 인덱스 기반의 컨볼루션 연산에서는, 뉴럴 네트워크 장치(130)가 입력 피처 인덱스와 웨이트 인덱스를 합산하고, 합산된 인덱스를 스트라이드 길이로 나누고, 나눈 결과가 나머지를 포함하지 않는 경우, 등분값을 출력 피처 인덱스로서 선택할 수 있다.
예컨대 도 13a에서는 스트라이드 길이가 1이므로, 출력 피처 매트릭스(OFMX_S1)의 출력 피처들의 인덱스는 입력 피처 인덱스와 웨이트 인덱스의 합산에 따라 합산된 인덱스를 나타낸다.
예컨대 도 13b에서는 합산된 인덱스가 스트라이드 길이 3으로 나누어진 결과가 나머지를 포함하지 않는 경우, 나눈 값은 출력 피처 매트릭스(OFMX_S3)의 출력 피처 인덱스로서 생성될 수 있다.
뉴럴 네트워크 장치(130)는 출력 피처 인덱스에 대응하는 입력 피처값 및 웨이트값을 연산함으로써, 출력 피처값을 생성할 수 있다. 뉴럴 네트워크 장치(130)는 출력 피처 인덱스에 대응하지 않는 입력 피처값 및 웨이트값은 연산하지 않을 수 있다.
도 14는 본 개시의 실시예에 따른 인덱스 기반의 풀링 방법을 나타내는 흐름도이다.
 도 14를 참조하면, 뉴럴 네트워크 장치(130)는 샘플링 단위를 기초로 입력 피처 인덱스를 리맵핑할 수 있다(S510). 풀링 윈도우에 포함되는 입력 피처들에 동일한 인덱스가 리맵핑될 수 있다. 리맵핑된 인덱스는 출력 피처 맵의 출력 피처 인덱스로저 제공될 수 있다.
뉴럴 네트워크 장치(130)는 동일한 리맵핑 인덱스를 가지는 입력 피처들에 대하여 풀링 연산을 수행할 수 있다(S520). 다시 말해, 풀링 윈도우에 포함되는 입력 피처들에 대하여 풀링 연산이 수행될 수 있다. 예컨대, 입력 피처들에 대하여 맥스 풀링 또는 평균 풀링이 적용될 수 있다.
뉴럴 네트워크 장치(130)는 풀링 연산 값을 출력 피처 인덱스에 대응하는 출력 피처값으로서 제공할 수 있다(S530). 도 15를 참조하여, 인덱스 기반의 풀링 방법에 대하여 보다 상세하게 설명하기로 한다.
도 15는 본 개시의 실시예에 따른 인덱스 기반의 풀링 동작을 설명하는 도면이다.
도 15에 도시되는 풀링 동작은 도 1의 뉴럴 네트워크 장치(130)에서 수행될 수 있다. 설명의 편의를 위하여 리스트 형태의 피처 맵들을 매트릭스 형태로 나타내기로 한다.
도 2를 참조하여 설명한 바와 같이, 풀링 레이어에서, 입력 피처 맵의 크기를 줄일 수 있다. 이에 따라 뉴럴 네트워크의 매개 변수와 연산량이 감소될 수 있다.  도 15에 도시된 바와 같이, 10 X 10의 입력 피처 맵 (a)에 대하여 2 X 2의 풀링 윈도우(WD)가 적용될 수 있다. 이에 따라 2 X 2 샘플링 단위로 풀링 동작이 수행됨으로써, 5 X 5의 출력 피처 맵 (c)이 생성될 수 있다. 도 15에서는 2 X 2 샘플링이 도시되었으나, 샘플링 단위는 다양하게 변경될 수 있다.
본 개시의 실시예에 따른 뉴럴 네트워크 장치(130)는 인덱스를 기초로 풀링 을 수행할 수 있다. 뉴럴 네트워크 장치(130)는 입력 피처 인덱스를 미리 설정된 샘플링 길이로 나누고, 나눈 결과 중 나머지(residue)를 제외한 나눈값을 입력에 대한 리맵핑 인덱스로서 선택할 수 있다. 따라서, 인덱스가 리맵핑된 입력 피처 맵(b)에 도시된 바와 같이, 입력 피처들에 대하여 인덱스가 리맵핑될 수 있으며, 샘플링 단위에 따라 복수의 입력 피처들이 동일한 리맵핑 인덱스를 가질 수 있다. 리맵핑된 인덱스는 출력 피처 매트릭스에서 출력 피처값이 저장될 공간적 위치, 즉 출력 피처 인덱스를 나타낼 수 있다. 입력 피처값이 대응하는 출력 피처 인덱스에 따른 위치에 저장되기 전, 입력 피처값들에 대하여 풀링 동작의 종류에 따른 연산이 수행될 수 있다.
예를 들어, 입력 피처 매트릭스에 대하여 맥스 풀링이 적용되는 경우, 2 X 2 샘플링 단위에 포함되는 입력 피처값들, 다시 말해 동일한 출력 피처 인덱스에 대응하는 입력 피처값들 중 최대값이 출력 피처 인덱스에 대한 출력 피처값으로서 제공될 수 있다.
다른 예로서, 입력 피처 매트릭스에 대하여 평균 풀링(average pooling)이 적용되는 경우, 동일한 출력 피처 인덱스에 대응하는 입력 피처값들이 합산되고, 합산값이 복수의 입력 피처값의 개수에 기초하여 나누어진 후, 그 결과 값이 출력 피처 인덱스에 대한 출력 피처값으로 제공될 수 있다.  그러나, 본 개시의 실시예는 이에 한정되지 않으며, 다양한 종류의 풀링 동작이 적용될 수 있다.
동일한 출력 피처 인덱스에 대응하는 입력 피처값들에 대한 풀링 연산 결과가 출력 피처값으로서 제공됨으로써, 풀링된 출력 피처 맵(c)이 생성될 수 있다.
이상, 도 4 내지 도 15를 참조하여 본 개시의 실시예에 따른 인덱스 기반의 뉴럴 네트워크 연산 방법의 다양한 예를 설명하였다. 그러나 본 개시의 기술적 사상은 이에 제한되는 것은 아니며, 다른 종류의 뉴럴 네트워크에 적용되는 다양한 종류의 연산들이 인덱스 기반으로 수행될 수 있다.
도 16은 본 개시의 실시예에 따른 뉴럴 네트워크 장치를 나타내는 블록도이다.
 뉴럴 네트워크 장치(200)는 도 1의 뉴럴 네트워크 장치(130)의 일 구현예이다. 따라서, 뉴럴 네트워크 장치(130)에 대하여 설명한 내용은 본 실시예에 따른 뉴럴 네트워크 장치(200)에 적용될 수 있다.
뉴럴 네트워크 장치(200)는 컨트롤러(220), 뉴럴 네트워크 프로세서(210) 및 시스템 메모리(230)를 포함할 수 있다. 이 외에도 뉴럴 네트워크 장치(200)는 외부 메모리에 데이터를 저장하기 위하여 DMA(Direct Memory Access) 컨트롤러를 더 구비할 수 있다. 뉴럴 네트워크 장치(200)의 구성 요소들(210, 220, 230)은 시스템 버스를 통해 통신할 수 있다. 실시예에 있어서, 뉴럴 네트워크 장치(200)는 하나의 반도체 칩으로 구현될 수 있으며, 예컨대 시스템 온 칩(SoC) 으로서 구현될 수 있다. 그러나 이에 제한되는 것은 아니며, 뉴럴 네트워크 장치(200)는 복수의 반도체 칩으로 구현될 수 있다.
컨트롤러(220)는 CPU(central processing unit), 마이크로 프로세서 등으로 구현될 수 있으며, 뉴럴 네트워크 장치(200)의 전반적인 동작을 제어할 수 있다. 컨트롤러(220)는 뉴럴 네트워크 프로세서(210) 및 시스템 메모리(230)의 동작을 제어할 수 있다. 예컨대, 컨트롤러(220)는 뉴럴 네트워크 프로세서(210)가 뉴럴 네트워크의 레이어들을 정상적으로 실행할 수 있도록 파라미터들을 세팅하고 관리할 수 있다.
실시예에 있어서, 컨트롤러(220)는 수신되는 웨이트 매트릭스로부터 웨이트 리스트를 생성하고, 웨이트 리스트를 뉴럴 네트워크 프로세서(210)에 제공할 수 있다. 그러나, 이에 한정되는 것은 아니며, 웨이트 매트릭스로부터 웨이트 리스트를 생성하는 별도의 전처리 회로가 뉴럴 네트워크 장치(200) 또는 뉴럴 네트워크 프로세서(210)에 구비될 수 있다.
뉴럴 네트워크 프로세서(210)는 복수의 프로세싱 회로(221)를 포함할 수 있다. 복수의 프로세싱 회로(221)는 병렬적으로 동시에 동작되도록 구현될 수 있다. 나아가, 복수의 프로세싱 회로(221) 각각은 독립적으로 동작할 수 있다. 예를 들어, 각각의 프로세싱 회로(221)는 각각이 인스트럭션들을 실행할 수 있는 코어 회로로서 구현될 수 있다. 프로세싱 회로(221)는 도 4 내지 도 15를 참조하여 설명한 본 개시의 실시예에 따른 인덱스 기반의 연산을 수행할 수 있다.
뉴럴 네트워크 프로세서(210)는 하드웨어 회로들로 구현될 수 있다. 예를 들어, 뉴럴 네트워크 프로세서(210)는 집적 회로(Integrated Circuit)로 구현될 수 있다. 뉴럴 네트워크 프로세서(210)는, CPU(Central Processing Unit), 멀티-코어 CPU, 어레이 프로세서(array processor), 벡터 프로세서(vector processor), DSP(Digital Signal Processor), FPGA(Field-Programmable Gate Array), PLA(Programmable Logic Array), ASIC(Application Specific Integrated Circuit), 프로그램 가능한 논리 회로(programmable logic circuitry), VPU(Video Processing Unit) 및 GPU(Graphics Processing Unit) 등 중 적어도 하나를 포함할 수 있으나 이에 제한되지 않는다.
뉴럴 네트워크 프로세서(210)는 내부 메모리(212)를 포함할 수 있다. 내부 메모리(212)는 뉴럴 네트워크 프로세서(210)의 캐시 메모리일 수 있다. 내부 메모리(212)는 SRAM(Static random access Memory)일 수 있다. 그러나, 이에 제한되는 것은 아니며, 내부 메모리(212)는 뉴럴 네트워크 프로세서(210)의 단순 버퍼, 캐시 메모리, 또는 뉴럴 네트워크 프로세서(210)의 다른 종류의 메모리로 구현될 수 있다. 내부 메모리(212)는 복수의 프로세싱 회로(211)에서 수행되는 연산 동작에 따라 생성되는 데이터, 예컨대 출력 피처 인덱스, 출력 피처값, 또는 연산 과정에서 생성되는 다양한 종류의 데이터 등을 저장할 수 있다.
시스템 메모리(230)는 RAM(Random Access Memory), 예컨대 DRAM(Dynamic RAM), SRAM 등으로 구현될 수 있다. 시스템 메모리(230)는 뉴럴 네트워크 프로세서(210)와 메모리 컨트롤러를 통해 연결될 수 있다. 시스템 메모리(230)는 각종 프로그램들 및 데이터를 저장할 수 있다. 실시예에 있어서 시스템 메모리(230)는 외부 장치, 예컨대, 서버 또는 외부 메모리 등으로부터 제공되는 웨이트 맵들을 저장할 수 있다.
실시예에 있어서, 시스템 메모리(230)는 뉴럴 네트워크 프로세서(210)가 실행할 다음 레이어에 대응하는 웨이트 맵들을 버퍼링할 수 있다. 프로세싱 회로(211)에서 웨이트 맵을 이용하여 연산을 수행하는 경우, 사용되는 웨이트 맵은 외부 메모리(예컨대 도 1의 140)로부터 출력되어 뉴럴 네트워크 프로세서(210)의 내부 메모리(212) 또는 프로세싱 회로(211) 내부에 구비되는 전용 메모리에 저장될 수 있다. 실시예에 있어서, 웨이트 맵들은 매트릭스 형태, 즉 웨이트 매트릭스 또는 인덱스 기반의 리스트 형태, 즉 웨이트 리스트로 저장될 수 있다. 시스템 메모리(230)는 외부 메모리(140)로부터 출력된 웨이트 맵들이 내부 메모리(212) 또는 프로세싱 회로(211) 내부에 구비되는 전용 메모리에 제공되기 전에 웨이트 맵들을 임시로 저장할 수 있다.
실시예에 있어서, 시스템 메모리(230)는 뉴럴 네트워크 프로세서(210)로부터 출력되는 출력 피처 맵을 임시 저장할 수도 있다.
도 17은 본 개시의 실시예에 따른 뉴럴 네트워크 프로세서를 나타내는 블록도이다. 도 17은 도 16의 뉴럴 네트워크 프로세서(210)를 보다 구체적으로 나타낸다.
도 17을 참조하면, 뉴럴 네트워크 프로세서(210)는 적어도 하나의 프로세싱 회로(211), 리스트 작성기(213), 내부 메모리(212)를 포함할 수 있다. 뉴럴 네트워크 프로세서(210)는 압축기(214) 및 선택기(215)를 더 포함할 수 있다. 프로세싱 회로(211)는 인덱스 리맵퍼(21), 제1 데이터 연산 회로(22), 제2 데이터 연산 회로(23) 및 전용 메모리(24)를 포함할 수 있다.
리스트 작성기(213)는 입력 피처로부터 입력 피처 리스트를 생성할 수 있다. 실시예에 있어서, 리스트 작성기(213)는 비제로값을 갖는 입력을 구분하고, 비제로값을 갖는 입력들에 대응하는 입력 피처 리스트를 생성할 수 있다.
실시예에 있어서, 리스트 작성기(213)는 수신된 입력 피처가 압축된 입력 피처 매트릭스인 경우, 압축을 해제하고 압축 해제된 입력 피처 매트릭스를 기초로 입력 피처 리스트를 생성할 수 있다. 실시예에 있어서, 수신된 입력 피처가 압축된 입력 피처 리스트를 포함하는 경우, 리스트 작성기(213)는 압축을 해제함으로써, 입력 피처 리스트를 생성할 수 있다.
선택기(215)는 선택적으로 리스트 작성기(213)로부터 출력되는 입력 피처 리스트 또는 내부 메모리(212)로부터 수신되는 입력 피처 리스트를 프로세싱 회로(211)에 제공할 수 있다. 예컨대, 제1 동작 모드에서, 선택기(215)는 리스트 작성기(213)로부터 출력되는 입력 피처 리스트를 프로세싱 회로(211)에 제공할 수 있다. 제1 동작 모드는 선현 연산모들일 수 있다. 예컨대 제1 동작 모드는 컨볼루션 모드일 수 있다. 제2 동작 모드에서, 선택기(215)는 내부 메모리(212)로부터 수신되는 입력 피처 리스트를 프로세싱 회로(211)에 제공할 수 있다. 제2 동작 모드는 풀링 모드 또는 활성 함수가 적용되는 비선형 연산 모드일 수 있다. 예컨대 제2 동작 모드에서 풀링 동작 또는 제1 동작 모드에서 출력되는 출력 피처값들에 대하여 활성 함수가 적용될 수 있다.
인덱스 리맵퍼(21)는 인덱스 연산을 수행하고, 출력 피처 인덱스를 생성할 수 있다. 인덱스 리맵퍼(21)는 도 4 내지 도 15를 참조하여 설명한 인덱스 연산 동작을 수행할 수 있다. 실시예에 있어서, 인덱스 리맵퍼(21)는 산술 연산 회로를 포함할 수 있다.
인덱스 리맵퍼(21)는 선택기(215)로부터 입력 피처 리스트를 수신하고, 전용 메모리(24)로부터 웨이트 리스트를 수신할 수 있다. 인덱스 리맵퍼(21)는 입력 피처 인덱스 및 웨이트 인덱스를 합산할 수 있다. 인덱스 리맵퍼(21)는 또한, 미리 설정된 정수, 예컨대 스트라이드 길이, 또는 풀링 동작 시의 샘플링 단위 등으로 합산된 인덱스를 나눌 수 있다.
인덱스 리맵퍼(21)는 생성된 인덱스 중 유의미한 인덱스에 대응하는 데이터 연산이 수행될 수 있도록 생성된 인덱스를 필터링할 수 있다. 예컨대 인덱스 리맵퍼(21)는 출력 피처 리스트에 포함되는 출력 피처 인덱스에 대응하는 데이터 연산이 제1 데이터 연산 회로(22) 및/또는 제2 데이터 연산 회로(23)에서 수행될 수 있도록, 생성된 인덱스를 출력 피처 인덱스와 나머지 인덱스로 구분할 수 있다. 인덱스 리맵퍼(21)는 나머지 인덱스에 대응하는 연산이 수행되지 않도록 제1 데이터 연산 회로(22) 및/또는 제2 데이터 연산 회로(23)를 제어할 수 있다.
인덱스 리맵퍼(21)는 또한, 전용 메모리(24)에 저장된 데이터의 독출을 요청할 수 있다. 예컨대, 인덱스 리맵퍼(21)는 전용 메모리(24)에 웨이트 리스트의 독출을 요청할 수 있다. 다른 예로서, 인덱스 리맵퍼(21)는 전용 메모리(24)에 입력 피처값, 예컨대, 출력 피처 리스트의 출력 피처값에 대응하는 파라미터들의 출력을 요청할 수 있다.
전용 메모리(24)는 프로세싱 회로(211)에서 연산 수행 시 사용되는 다양한 데이터를 저장할 수 있다. 예컨대 전용 메모리(24)는 웨이트 리스트를 저장할 수 있다. 또한 전용 메모리(24)는 입력 피처값들에 대응하는 파라미터들을 포함하는 룩-업 테이블을 저장할 수 있다. 전용 메모리(24)는 인덱스 리맵퍼(21)의 요청에 응답하여, 웨이트 리스트를 인덱스 리맵퍼(21) 및 제1 데이터 연산 회로(22)에 제공하거나, 또는 파라미터들을 제1 데이터 연산 회로(22) 및 제2 데이터 연산 회로(23)에 제공할 수 있다.
제1 데이터 연산 회로(22) 및 제2 데이터 연산 회로(23)는 데이터 연산 동작을 수행할 수 있다. 제1 데이터 연산 회로(22) 및 제2 데이터 연산 회로(23)는 데이터 연산 회로를 구성할 수 있다. 예컨대, 제1 데이터 연산 회로(22) 및 제2 데이터 연산 회로(23)는 도 4 내지 도 15를 참조하여 설명한 데이터 연산 동작을 수행할 수 있다.
제1 데이터 연산 회로(22)는 곱셈 연산을 수행할 수 있다. 예컨대, 제1 데이터 연산 회로(22)는 곱셈기를 포함할 수 있다. 실시예에 있어서, 프로세싱 회로(211)가 컨볼루션 연산을 수행할 때, 제1 데이터 연산 회로(22)는 입력 피처 리스트의 입력 피처값과 웨이트 리스트의 웨이트값을 곱할 수 있다. 곱셈 결과는 제2 데이터 연산 회로(23)로 제공될 수 있다. 제1 데이터 연산 회로(22)는 곱셈기의 어레이로 구현될 수 있다.
제2 데이터 연산 회로(23)는 합산 연산을 수행할 수 있으며, 나아가 나눗셈 연산을 수행할 수 있다. 이 외에도 제2 데이터 연산 회로(23)는 다양한 종류의 연산을 수행할 수 있다. 제2 데이터 연산 회로(23)는 합산기 또는 산술 연산 회로로 구현될 수 있다. 제2 데이터 연산 회로(23)는 연산 회로의 어레이로 구현될 수 있으며, 예컨대 제2 데이터 연산 회로(23)는 합산기의 어레이로 구현될 수 있다.
내부 메모리(212)는 프로세싱 회로(211)로부터 출력되는 데이터를 저장할 수 있다. 예컨대 내부 메모리(212)는 제2 데이터 연산 회로(23)로부터 출력되는 출력 피처 인덱스 및 대응하는 출력 피처값을 저장할 수 있다. 다시 말해 내부 메모리(212)는 출력 피처 리스트를 저장할 수 있다. 또한 내부 메모리(212)는 프로세싱 회로(211)의 연산 과정에서 출력되는 중간 결과들을 저장할 수 있다. 중간 결과들은 제2 데이터 연산 회로(23)로 제공되어, 제2 데이터 연산 회로(23)의 연산 과정에서 이용될 수 있다.
내부 메모리(212)에 저장된 데이터는 선택기(215)를 통해 프로세싱 회로(211)에 다시 제공될 수 있다. 다시 말해, 프로세싱 회로(211)의 연산 수행에 따른 출력 데이터가 다음 연산시 사용될 수 있다. 예를 들어, 프로세싱 회로(211)의 컨볼루션 연산 수행에 따라 생성되는 출력 피처 리스트는 프로세싱 회로(211)에 입력 피처 리스트로서 제공되고, 프로세싱 회로(211)는 제공된 입력 피처 리스트에 대하여 풀링 동작을 수행할 수 있다.
한편, 출력 피처 리스트는 제2 데이터 연산 회로(23)로부터 외부, 예컨대 전자 시스템의 메모리(도 1의 140)로 출력되거나, 또는 내부 메모리(212)에 저장되었다가, 이후 외부로 출력될 수 있다. 출력 피처 리스트는 압축기(214)를 통해 출력될 수 있다. 압축기(214)는 출력 피처 리스트를 압축하고, 압축된 출력 피처 리스트를 출력할 수 있다.
이하 도 18 및 도 19를 참조하여 동작 모드에 따른 프로세서의 동작을 설명하기로 한다.
도 18는 본 개시의 실시예에 따른 뉴럴 네트워크 프로세서가 제1 동작 모드로 동작하는 것을 설명하는 도면이다. 예컨대 제1 동작 모드는 컨볼루션 연산 모드일 수 있다.
도 18을 참조하면, 리스트 작성기(213)는 입력 피처 맵(IFM)을 수신하고, 입력 피처 리스트를 생성할 수 있다. 리스트 작성기(213)는 입력 피처 리스트를 프로세싱 회로(211)에 제공할 수 있다.
인덱스 리맵퍼(21) 및 제1 데이터 연산 회로(22)는 전용 메모리(24)에 저장된 웨이트 리스트로부터 웨이트 인덱스 및 웨이트 인덱스에 대응하는 웨이트값을 수신할 수 있다. 인덱스 리맵퍼(21)는 웨이트 인덱스를 수신하고, 제1 데이터 연산 회로(22)는 웨이트값을 수신할 수 있다.
인덱스 리맵퍼(21)는 입력 피처 인덱스 및 웨이트 인덱스를 기초로 인덱스 연산을 수행하고, 제2 데이터 연산 회로(22)는 입력 피처값 및 웨이트값을 기초로 데이터 연산을 수행할 수 있다. 인덱스 리맵퍼(21)는 입력 피처 인덱스와 웨이트 인덱스를 합산할 수 있다. 인덱스 리맵퍼(21)는 더해진 값을 나눌 수 있다.
인덱스 리맵퍼(21)는 또한 생성된 출력 피처 인덱스가 유의미한 출력 피처 인덱스에 해당하는지 판단하고, 유의미한 출력 피처 인덱스가 아니라고 판단되면, 상기 출력 피처 인덱스에 대응하는 입력 피처값 및 웨이트값의 연산이 수행되지 않도록, 제1 데이터 연산 회로(22)를 제어할 수 있다. 이에 따라 제1 데이터 연산 회로(22)는 유의미한 출력 피처 인덱스에 대응하는 입력 피처 인덱스 및 웨이트 인덱스에 대해서만 연산을 수행할 수 있다.
제2 데이터 연산 회로(23)는 제1 데이터 연산 회로(22)로부터 출력되는 연산값들 중 같은 출력 피처 인덱스에 대응하는 연산값들을 합산할 수 있다. 이에 따라 제1 데이터 연산 회로(22) 및 제2 데이터 연산 회로(23)에서 컨볼루션 연산에 포함되는 곱셈 연산 및 덧셈 연산이 수행될 수 있다.
제2 데이터 연산 회로(23)는 컨볼루션 연산에 의하여 생성되는 출력 피처 리스트를 내부 메모리(212)에 저장하거나, 또는 압축기(214)를 통해 외부로 출력할 수 있다.
도 19는 본 개시의 실시예에 따른 뉴럴 네트워크 프로세서가 제2 동작 모드로 동작하는 것을 설명하는 도면이다. 예컨대, 제2 동작 모드는 제1 동작 모드 이후 수행될 수 있으며, 제2 동작모드에서는 제1 동작 모드에서 생성된 출력 피처 리스트의 출력 피처값들에 대하여 활성 함수가 적용될 수 있다.
도 19를 참조하면, 내부 메모리(212)에는 제1 동작 모드에서 수행된 연산 결과가 저장될 수 있다. 예컨대 내부 메모리(212)에는 입력 피처 리스트에 대하여 인덱스를 기초로 컨볼루션 연산이 수행된 결과, 즉 출력 피처 리스트가 저장될 수 있다.
인덱스 리맵퍼(21)는 내부 메모리(212)로부터 출력 피처 리스트의 출력 피처값 즉 입력 피처값을 수신할 수 있다. 전용 메모리(24)에는 입력 피처값들에 대응하는 파라미터들을 포함하는 룩-업 테이블이 저장될 수 있다. 뉴럴 네트워크에서 Sign 함수, Sigmoid 함수, Expornential 함수 등이 사용될 수 있으며, 이러한 활성 함수는 비선형성을 갖는다. 룩-업 테이블은 비선형을 갖는 활성 함수를 구분적 선형 함수로서 계산하기 위한 파라미터들을 포함할 수 있다. 입력 피처값 v에 대한 활성 함수의 출력 f는 수학식 1과 같이 입력 피처값 v에 구분적 선형 함수가 적용된 결과로서 나타낼 수 있다.
여기서, c(v) 는 입력 피처값 v에 대응하는 계수이며, b(v)는 입력 피처값 v에 대응하는 바이어스값이다. 룩-업 테이블은 다양한 입력 피처값들에 대응하는 상기 파리미터들을 포함할 수 있다.
인덱스 리맵퍼(21)는 전용 메모리(24)에 입력 피처값 v에 대한 파라미터들을 요청할 수 있다. 이에 따라 입력 피처값 v에 대응하는 파라미터들, 즉 c(v) 및 b(v)가 전용 메모리(24)에 저장된 룩-업 테이블로부터 출력될 수 있다.
c(v)는 제1 데이터 연산 회로(22)에 제공되고 b(v)는 제2 데이터 연산 회로(23)에 제공될 수 있다. 제1 데이터 연산 회로(22)는 입력 피처값 v 및 c(v)를 기초로 곱셈 연산을 수행하고, 제2 데이터 연산 회로(23)는 제1 데이터 연산 회로(22)로부터 수신된 연산값 및 b(v)를 기초로 덧셈 연산을 수행할 수 있다. 따라서, 입력 피처값 v에 대한 활성 함수의 출력 f가 생성될 수 있다. 복수의 입력 피처값들에 대한 활성 함수의 출력 피처값들은 외부로 출력될 수 있다. 실시예에 있어서, 활성 함수의 출력값들은 압축기(214)에서 압축되어 출력될 수 있다.
도 20은 뉴럴 네트워크에서 컨볼루션 연산 수행 시 데이터 흐름을 나타내는 도면이다.
도 20을 참조하면, 입력 피처 맵(IFM) 및 출력 피처 맵(OFM)은 3차원 매트릭스 형태를 가질 수 있다. 입력 피처 맵(IFM)에 3차원 매트릭스 형태의 복수의 커널(KN0~KN4)이 적용되어 컨볼루션 연산이 수행될 수 있으며, 이에 따라 출력 피처 맵(OFM)이 생성될 수 있다.
복수의 커널(KN0~KN4)은 입력 피처 맵(IFM)으로부터 서로 다른 특징을 획득하기 위한 서로 다른 종류의 필터일 수 있다. 복수의 커널(KN0~KN4) 각각에 포함되는 채널(CH)의 개수는 입력 피처 맵(IFM)의 채널의 개수와 동일하다.
복수의 커널(KN0~KN4) 각각이 입력 피처 맵(IFM)의 x-y 평면 상에서 이동하면서 컨벌루션 연산이 수행될 수 있다. 이에 따라 입력 피처 맵(IFM)과 커널의 동일한 채널별로 컨벌루션 연산이 수행될 수 있다. 예컨대 복수의 커널(KN0~KN4)의 채널 CHk가 각각 입력 피처 맵(IFM)의 채널 CHk에 적용되어 컨벌루션 연산이 수행될 수 있다. 입력 피처 맵(IFM)에 하나의 커널이 적용되어 컨벌루션 연산이 수행될 때, 채널별로 독립적으로 컨벌루션 연산이 수행될 수 있다. 컨벌루션 연산에 따른 출력 피처값들 중 공간적 위치, 예컨대 x-y 평면 상의 위치가 동일하며, 채널이 상이한 출력 피처값들이 합산될 수 있다. 따라서, 입력 피처 맵(IFM)에 하나의 커널이 적용되어 컨벌루션 연산이 수행된 결과는 출력 피처 맵(OFM)의 하나의 채널에 대응할 수 있다.
복수의 커널(KN0~KN4)을 기초로 컨볼루션 연산이 수행됨에 따라 복수의 채널이 생성될 수 있다. 도시된 바와 같이, 5개의 커널(KN0~KN4)을 기초로 컨볼루션 연산이 수행될 경우, 출력 피처 맵(OFM)은 5개의 채널을 포함할 수 있다.
복수의 커널(KN0~KN4) 각각에 따른 컨볼루션 연산은 동시에 병렬적으로 수행될 수 있다. 복수의 커널(KN0~KN4) 각각에 따른 컨볼루션 연산은 서로 다른 프로세싱 회로에서 병렬적으로 수행될 수 있다. 그러나 이러한 병렬 연산은 뉴럴 네트워크의 하드웨어 구성에 따라 가변적일 수 있다.
도 21 및 22는 본 개시의 실시예에 따른 인덱스 기반의 뉴럴 네트워크에서 컨볼루션 연산 수행 시의 데이터 처리 과정의 일 예를 나타내는 도면이다. 도 21은 입력 피처 맵 및 웨이트 피처 맵에 비제로값이 희박한, 스파이스 뉴럴 네트워크에서 효율적으로 인덱스 기반의 컨볼루션 연산을 수행할 수 있는 뉴럴 네트워크의 데이터 처리 과정을 나타낸다.
도 20을 참조하여 설명한 바와 같이 복수의 커널(KN0~KN4) 각각을 기초로 하는 컨볼루션 연산은 서로 다른 프로세싱 회로에서 동시에 병렬적으로 수행될 수 있다. 그러나, 본 개시의 실시예에 따른 인덱스 기반의 뉴럴 네트워크, 특히 스파스 뉴럴 네트워크에서는 비제로값을 갖는 입력 피처에 대해서 연산이 수행되고, 제로값을 갖는 입력 피처에 대한 연산이 스킵될 수 있도록, 입력 피처 맵(IFM)의 각 채널을 기초로 하는 컨볼루션 연산이 서로 다른 프로세싱 회로에서 동시에 병렬적으로 수행될 수 있다. 입력 피처 맵(IFM)의 복수의 채널에서, 비제로값을 갖는 입력 피처들의 공간적 위치는 서로 다르므로, 입력 피처 맵(IFM)의 각 채널별로 서로 다른 프로세싱 회로에서 연산이 수행됨으로써, 제로값에 대한 연산의 스킵이 용이해질 수 있다.
이와 같이, 입력 피처 맵(IFM)의 각 채널별로 서로 다른 프로세싱 회로에서 병렬적으로 컨볼루션 연산이 수행될 수 있도록, 인덱스 기반의 뉴럴 네트워크는 각 커널을 채널별로 분리하고, 동일한 채널들을 하나의 채널 그룹으로 재그룹화할 수 있다.
도 21을 참조하면, 도 20의 제1 내지 제5 커널(KN0~KN4)의 각 채널들이 동일한 채널별로 재그룹화될 수 있다. 예컨대, 제1 내지 제5 커널(도 20의 KN0~KN4)의 제1 채널들이 제1 채널 그룹(CH0)으로 재그룹화되고, 제2 채널들이 제2 채널 그룹(CH1)으로 재그룹화될 수 있다. 이와 같이 제1 내지 제5 커널(KN0~KN4)의 복수의 채널들이 채널 그룹으로 재그룹화될 수 있다. 커널의 채널 수는 입력 피처 맵의 채널 수(n)와 동일한 바, 이러한 재그룹화에 의하여 n개의 채널 그룹들(CH0~CHn-1)이 생성될 수 있다. 채널 그룹 각각은 코어(core)로 지칭될 수 있다.
입력 피처 맵(IFM)의 각 채널에 대하여 채널 그룹들(CH0~CHn-1) 중 대응하는 채널 그룹이 적용되어 컨볼루션 연산이 수행될 수 있다. 예컨대, 입력 피처 맵(IFM)의 제2 채널이 제2 채널 그룹(CH1)과 컨볼루션 연산될 수 있다. 채널 그룹들(CH0~CHn-1) 각각은 제1 내지 제5 커널(KN0~KN4)의 채널을 포함하므로, 채널 그룹들(CH0~CHn-1) 중 하나의 채널 그룹에 기초한 컨볼루션 연산 결과는 출력 피처 맵(OFM)의 제1 내지 제5 채널 전부에 영향을 미칠 수 있다. n개의 채널 그룹들의 컨볼루션 연산 결과 중 동일한 커널로부터 생성되고, 출력 피처 맵(OFM) 상의 동일한 공간적 위치에 대응하는 연산값들이 합산됨으로써, 출력 피처 맵(OFM)이 완성될 수 있다.
도 22를 참조하면, 서로 다른 채널에 위치하며, 동일한 공간적 위치, 즉 동일한 인덱스를 가지는 입력 피처들(IFB)은 서로 다른 채널 그룹과 컨볼루션될 수 있다. 본 개시의 실시예에 따른 인덱스 기반의 뉴럴 네트워크에서는 비제로값만을 연산하므로, 제로값을 갖는 입력 피처에 대한 연산은 수행되지 않는다. 따라서, 제로값을 갖는 제1 입력 피처(F0)가 포함되는 제1 채널, 제6 입력 피처(F5)가 포함되는 제6 채널 및 제9 입력 피처(F8)가 포함되는 제9 채널에 대응하는 프로세싱 회로들의 동작이 차단될 수 있다. 그러나, 실질적으로는 인덱스 기반의 뉴럴 네트워크 장치(200)는 비제로값을 갖는 입력 피처들에 대응하는 인덱스를 기초로 동작하고, 각 프로세싱 회로들에는 비제로값을 갖는 입력 피처들이 제공되므로, 각 프로세싱 회로들은 입력 피처 맵(IFM)의 각 채널에서 비제로값을 갖는 입력 피처들에 대한 연산이 완료될 때까지 동작할 수 있다.
도 23은 본 개시의 실시예에 따른 뉴럴 네트워크 프로세서의 일 구현예를 나타낸다. 도 23의 뉴럴 네트워크 프로세서(210a)는 도 21 및 도 22를 참조하여 설명한 스파스 뉴럴 네트워크 연산에 적합한 하드웨어 구조를 가지며, 입력 피처 맵(IFM)의 각 채널별로 병렬적으로 연산처리를 수행할 수 있다.
도 23을 참조하면, 뉴럴 네트워크 프로세서(210a)는 선택기(215a), 복수의 프로세싱 회로(211a_0~211a_k) 및 글로벌 합산기(216)를 포함할 수 있다. 뉴럴 네트워크 프로세서(210a)는 리스트 작성기 및 압축기를 더 포함할 수 있다.
뉴럴 네트워크 프로세서(210a)는 입력 피처 맵(IFM)의 각 채널별로 입력 피처 리스트를 생성할 수 있다. 선택기(215a)는 입력 피처 리스트의 각 채널별로, 각 채널에 포함되는 입력 피처들의 입력 피처 리스트를 대응하는 프로세싱 회로(211a_0~211a_k)에 제공할 수 있다. 예컨대, 선택기(215a)는 제1 채널에 포함되는 입력 피처들의 입력 피처 리스트를 제1 프로세싱 회로(211a_0)에 제공하고, 제k 채널에 포함되는 입력 피처들의 입력 피처 리스트를 제k 프로세싱 회로(211a_k)에 제공할 수 있다.
복수의 프로세싱 회로(211a_0~211a_k) 각각은 입력 피처 맵의 각 채널에 대응할 수 있다. 다시 말해, 복수의 프로세싱 회로(211a_0~211a_k) 각각은 도 21 및 22의 각 채널 그룹, 즉 코어에 대응할 수 있다. 복수의 프로세싱 회로(211a_0~211a_k)의 구조는 도 17의 프로세싱 회로(211)와 유사하다. 다만, 복수의 입력 피처에 대하여 병렬적으로 연산을 수행할 수 있도록 복수의 프로세싱 회로(211a_0~211a_k) 각각은 프로세싱 회로(211)의 구성들을 복수개 포함할 수 있다.
예를 들어, 제1 프로세싱 회로(211a_0)는 복수의 인덱스 리맵퍼(21a), 복수의 제1 데이터 연산 회로(22a), 복수의 제2 데이터 연산 회로 (23a) 및 전용 메모리(24a)를 포함할 수 있다.
복수의 인덱스 리맵퍼(21a) 각각은 산술 연산 회로를 포함할 수 있다. 복수의 제1 데이터 연산 회로(22a)는 곱셈기 어레이일 수 있다.  복수의 제2 데이터 연산 회로들(23a)은 덧셈기 어레이일 수 있다. 그러나, 이에 제한되는 것은 아니며 복수의 제2 데이터 연산 회로(23a) 또한 각각 산술 연산 회로를 포함할 수 있다.
전용 메모리(24a)는 웨이트 리스트(WL) 또는 룩-업 테이블(LUT)을 저장할 수 있다. 실시예에 있어서, 뉴럴 네트워크 프로세서(210a)가 컨볼루션 연산을 수행할 때, 전용 메모리(24a)는 웨이트 리스트로부터 웨이트에 대응하는 웨이트 인덱스를 인덱스 리맵퍼(21a)에 출력하고, 웨이트에 대응하는 웨이트값을 제1 데이터 연산 회로(22a)로 출력할 수 있다. 실시예에 있어서, 웨이트 리스트(WL)는 각 웨이트에 대응하는 웨이트 인덱스, 웨이트값 및 커널 인덱스를 포함할 수 있다. 커널 인덱스는 웨이트가 포함되는 커널에 대한 정보를 나타낸다.
실시예에 있어서, 뉴럴 네트워크 프로세서(210a)가 비선형 연산을 수행할 때, 전용 메모리(24a)는 입력 피처에 대응하는 파라미터들을 제1 데이터 연산 회로(22a) 및 제2 데이터 연산 회로(23a)에 제공함으로써, 구분적 선형 함수를 지원할 수 있다.
제1 프로세싱 회로(211a_0)의 동작은 도 17 내지 도 19를 참조하여 설명한 프로세싱 회로(211)의 동작과 유사하다. 다만, 복수의 인덱스 리맵퍼(21a)가 병렬적으로 인덱스 연산을 수행하고, 복수의 제1 데이터 연산 회로(22a) 및 복수의 제2 데이터 연산 회로(23a)가 병렬적으로 데이터 연산을 수행할 수 있다.
다른 프로세싱 회로들(211a_1~211a_k) 또한 제1 프로세싱 회로(211a_0)와 동일한 구성 요소를 포함하며 실질적으로 동일하게 동작할 수 있다.
한편, 복수의 프로세싱 회로들(211a_0~211a_k) 각각으로부터 출력되는 연산값들 중 일부는 출력 피처 맵의 동일한 위치에 대응할 수 있다. 따라서, 글로벌 합산기(216)는 서로 다른 프로세싱 회로들로부터 출력되었으나, 출력 피처 맵의 동일한 위치에 대응하는 연산값들을 합산할 수 있다.
이때, 스파스 뉴럴 네트워크 특성상, 프로세싱 회로들(211a_0~211a_k)로부터 출력되는 연산값들이 매핑되는 출력 피처 맵 상의 위치는 랜덤하게 분포할 수 있으며, 프로세싱 회로들(211a_0~211a_k)로부터 동시에 출력되는 연산값들이 매핑되는 위치가 출력 피처 맵 상에서 동일할 수 있다. 글로벌 합산기(216)가 프로세싱 회로들(211a_0~211a_k)로부터 출력되는 연산 값들을 실시간으로 합산하는 경우, 글로벌 합산기(216)의 로드가 지나치게 증가될 수 있다.
따라서, 프로세싱 회로들(211a_0~211a_k) 각각에 구비되는 복수의 제2 데이터 연산 회로(23a)가 복수의 제1 데이터 연산 회로(22a)로부터 출력되는 연산값들을 대응하는 출력 피처 맵의 공간적 위치 및 채널에 따라 합산하여 출력 피처 맵의 공간적 위치 및 채널별로 합산값을 생성하고, 복수의 프로세싱 회로들(211a_0~211a_k)이 동기되어 합산값들을 출력할 수 있다. 복수의 제1 데이터 연산 회로(22a)로부터 출력되는 연산값들을 대응하는 출력 피처 맵의 공간적 위치 및 채널에 따라 합산하기 위하여 복수의 제2 데이터 연산 회로(23a) 각각은 SRAM 뱅크를 구비할 수 있다.
복수의 프로세싱 회로들(211a_0~211a_k)로부터 출력되는 합산값들은 대응하는 출력 피처 맵 상의 위치에 따라 벡터 데이터로서 출력될 수 있으며, 글로벌 합산기(126)는 벡터 데이터를 합산할 수 있다.
도 24는 본 개시의 실시예에 따른 인덱스 기반의 뉴럴 네트워크에서 컨볼루션 연산 수행 시의 데이터 처리 과정의 일 예를 나타내는 도면이다. 도 24는 입력 피처 맵 및 웨이트 피처 맵에 비제로값이 밀집한 댄스(dense) 뉴럴 네트워크에서 효율적으로 인덱스 기반의 컨볼루션 연산을 수행할 수 있는 뉴럴 네트워크의 데이터 처리 과정을 나타낸다.
댄스 뉴럴 네트워크에서는 제로값을 갖는 입력 피처 또는 웨이트가 드물기 때문에 연산 과정에서 제로값의 연산을 생략하는 것보다 연산 과정을 단순화 함으로써, 효율적으로 연산을 수행할 수 있다.
도 24를 참조하면, 입력 피처 맵(IFM)과 복수의 커널(KN0~KN4)들 각각이 컨볼루션 될 수 있다. 복수의 커널(KN0~KN4)들 각각을 기초로한 컨볼루션 연산은 서로 다른 프로세싱 회로에서 병렬적으로 수행될 수 있다.
도 20을 참조하여 전술한 바와 같이, 입력 피처 맵(IFM)과 복수의 커널(KN0~KN4) 중 하나의 커널과의 컨벌루션 연산이 수행될 때, 입력 피처 맵(IFM) 과 커널의 동일한 채널끼리 컨볼루션 연산이 수행되며, 이에 따라 생성되는 연산값들 중 출력 피첩 맵(OFM) 상에서 동일한 공간적 위치를 나타내는 출력 피처 인덱스에 대응하는 연산값들은 모두 합산될 수 있다. 입력 피처 맵(IFM)과 하나의 커널의 컨벌루션 연산은 출력 피처 맵(OFM)의 하나의 채널을 형성할 수 있다.
동일한 공간적 위치를 나타내는 입력 피처 인덱스에 대응하는 입력 피처들 은 입력 피처 벡터로 표현될 수 있다. 또한 동일한 공간적 위치를 나타내는 웨이트 인덱스에 대응하는 웨이트들은 웨이트 벡터로 표현될 수 있다. 따라서, 입력 피처 리스트는 입력 피처 인덱스 및 입력 피처 인덱스에 대응하는 입력 피처 벡터를 포함할 수 있다. 웨이트 리스트는 웨이트 인덱스 및 웨이트 인덱스에 대응하는 웨이트 벡터를 포함할 수 있다. 예컨대, 도 24에 도시된 복수의 커널(KN0~KN4)들 각각은 9개의 인덱스를 가질 수 있으며, 웨이트 리스트는 9개의 인덱스 및 9개의 인덱스 각각에 대응하는 웨이트 벡터를 포함할 수 있다.
복수의 입력 피처 인덱스 및 웨이트 인덱스가 합산되어 출력 피처 인덱스가 생성되고, 피처 벡터 및 웨이트 벡터는 내적(dot product) 연산되어, 상기 출력 피처 인덱스에 대응하는 연산값으로서 출력될 수 있다. 동일한 출력 피처 인덱스에 대하여 복수의 연산값이 존재할 수 있으며, 상기 복수의 연산값이 합산되어 출력 피처 인덱스에 대응하는 출력 피처값이 생성될 수 있다.
도 25는 본 개시의 실시예에 따른 뉴럴 네트워크 프로세서의 일 구현예를 나타낸다. 도 25의 뉴럴 네트워크 프로세서(210b)는 도 24를 참조하여 설명한 댄스 뉴럴 네트워크 연산에 적합한 하드웨어 구조를 가지며, 커널별로 병렬적으로 연산 처리를 수행할 수 있다.
도 25를 참조하면, 뉴럴 네트워크 프로세서(210b)는 복수의 프로세싱 회로(211b_0~211b_k)를 포함할 수 있다. 뉴럴 네트워크 프로세서(210b)는 프로세싱 회로(211b_0~211b_k)들이 공유하는 내장 메모리 또는 프로세싱 회로(211b_0~211b_k) 각각을 지원하는 복수의 내장 메모리를 더 포함할 수 있다. 네트워크 프로세서(210b)는 리스트 작성기 및 압축기를 더 포함할 수 있다.
복수의 프로세싱 회로(211b_0~211b_k) 각각은 서로 다른 커널에 대응할 수 있다. 복수의 프로세싱 회로(211b_0~211b_k)의 구조는 도 17의 프로세싱 회로(211)와 유사하다. 다만, 복수의 프로세싱 회로(211b_0~211b_k) 각각은 벡터 내적 연산을 수행하는바, 하나의 어드레스 리맵퍼(21b), 복수의 제1 데이터 연산 회로(22b) 및 복수의 제2 데이터 연산 회로(23b)를 포함할 수 있다. 복수의 프로세싱 회로(211b_0~211b_k) 각각은 웨이트 리스트를 저장하는 전용 메모리(24b)를 포함할 수 있다. 웨이트 리스트는 웨이트 인덱스 및 웨이트 인덱스에 대응하는 웨이트 벡터를 포함할 수 있다.
어드레스 리맵퍼(21b)는 산술 연산 회로를 포함할 수 있다. 복수의 제1 데이터 연산 회로(22b)는 곱셈기 어레이일 수 있으며, 복수의 제2 데이터 연산 회로(23b)는 덧셈기 어레이일 수 있다. 어드레스 리맵퍼(21b)는 수신되는 입력 피처 인덱스 및 전용 메모리(24b)로부터 제공되는 웨이트 인덱스를 연산하고, 복수의 제1 데이터 연산 회로(22b) 및 복수의 제2 데이터 연산 회로(23b)는 입력 피처값과 웨이트값을 곱하고, 곱한 값을 합산함으로써, 입력 피처 인덱스에 대응하는 입력 피처 벡터 및 웨이트 인덱스에 대응하는 웨이트 벡터를 내적 연산할 수 있다.
이상에서와 같이 도면과 명세서에서 예시적인 실시예들이 개시되었다. 본 명세서에서 특정한 용어를 사용하여 실시예들을 설명되었으나, 이는 단지 본 개시의 기술적 사상을 설명하기 위한 목적에서 사용된 것이지 의미 한정이나 특허청구범위에 기재된 본 개시의 범위를 제한하기 위하여 사용된 것은 아니다. 그러므로 본 기술분야의 통상의 지식을 가진 자라면 이로부터 다양한 변형 및 균등한 타 실시예가 가능하다는 점을 이해할 것이다. 따라서, 본 개시의 진정한 기술적 보호범위는 첨부된 특허청구범위의 기술적 사상에 의해 정해져야 할 것이다.