현재 인공지능과 딥 러닝이 사회적인 이슈로 떠오르고 있는 추세이며, 다양한 분야에 이 기술들을 응용하고 있다. 인공지능 분야의 여러 알고리즘들 중에서 각광받는 방법 중 하나는 Convolutional Neural Network이다. Convolutional Neural Network는 일반적인 Neural Network 방법에 Convolution 연산을 하여 Feature를 추출하는 Convolution Layer를 추가한 형태이다. Convolutional Neural Network를 적은 양의 데이터에서 이용하거나, Layer의 구조가 복잡하지 않은 경우에는 학습시간이 길지 않아 속도에 크게 신경 쓰지 않아도 되지만, 학습 데이터의 크기가 크고, Layer의 구조가 복잡할수록 학습 시간이 상당히 오래 걸린다. 이로 인해 GPU를 이용하여 병렬처리를 하는 방법을 많이 사용하는데, 본 논문에서는 CUDA를 이용한 Convolutional Neural Network를 구현하였으며, CPU를 이용한 방법보다 학습 속도가 빨라지고 큰 데이터를 학습 시키는데 더욱 효율적으로 진행하도록 한다.
현재 인공지능과 딥 러닝이 사회적인 이슈로 떠오르고 있는 추세이며, 다양한 분야에 이 기술들을 응용하고 있다. 인공지능 분야의 여러 알고리즘들 중에서 각광받는 방법 중 하나는 Convolutional Neural Network이다. Convolutional Neural Network는 일반적인 Neural Network 방법에 Convolution 연산을 하여 Feature를 추출하는 Convolution Layer를 추가한 형태이다. Convolutional Neural Network를 적은 양의 데이터에서 이용하거나, Layer의 구조가 복잡하지 않은 경우에는 학습시간이 길지 않아 속도에 크게 신경 쓰지 않아도 되지만, 학습 데이터의 크기가 크고, Layer의 구조가 복잡할수록 학습 시간이 상당히 오래 걸린다. 이로 인해 GPU를 이용하여 병렬처리를 하는 방법을 많이 사용하는데, 본 논문에서는 CUDA를 이용한 Convolutional Neural Network를 구현하였으며, CPU를 이용한 방법보다 학습 속도가 빨라지고 큰 데이터를 학습 시키는데 더욱 효율적으로 진행하도록 한다.
Currently Artificial Inteligence and Deep Learning are social issues, and These technologies are applied to various fields. A good method among the various algorithms in Artificial Inteligence is Convolutional Neural Network. Convolutional Neural Network is a form that adds convolution layers that e...
Currently Artificial Inteligence and Deep Learning are social issues, and These technologies are applied to various fields. A good method among the various algorithms in Artificial Inteligence is Convolutional Neural Network. Convolutional Neural Network is a form that adds convolution layers that extracts features by convolution operation on a general neural network method. If you use Convolutional Neural Network as small amount of data, or if the structure of layers is not complicated, you don't have to pay attention to speed. But the learning time is long as the size of the learning data is large and the structure of layers is complicated. So, GPU-based parallel processing is a lot. In this paper, we developed Convolutional Neural Network using CUDA and Learning speed is faster and more efficient than the method using the CPU.
Currently Artificial Inteligence and Deep Learning are social issues, and These technologies are applied to various fields. A good method among the various algorithms in Artificial Inteligence is Convolutional Neural Network. Convolutional Neural Network is a form that adds convolution layers that extracts features by convolution operation on a general neural network method. If you use Convolutional Neural Network as small amount of data, or if the structure of layers is not complicated, you don't have to pay attention to speed. But the learning time is long as the size of the learning data is large and the structure of layers is complicated. So, GPU-based parallel processing is a lot. In this paper, we developed Convolutional Neural Network using CUDA and Learning speed is faster and more efficient than the method using the CPU.
* AI 자동 식별 결과로 적합하지 않은 문장이 있을 수 있으니, 이용에 유의하시기 바랍니다.
문제 정의
본 논문에서는 CUDA를 이용하여 Convolutional Neural Network의 구현을 진행했다. 일반적인 Convolutional Neural Network에서 사용되는 Layer 들의 CUDA 프로그래밍을 진행하였으며, 세부적으로 Convolution Layer, Pooling Layer, Fully-Connected Layer(Feedforward Layer)의 Forward Propagation과 Backpropagation을 구현하였다.
[3] 초기 GPU의 기능은 매우 제한적이었고, 단지 그래픽스 파이프라인의 특정 부분을 가속시키기 위해서만 사용되었다. 이 후 프로그램 가능한 보다 유연한 형태의 GPU로 넘어오면서 3D 그래픽 분야를 위해서만 사용되던 GPU에 대한 새로운 접근이 시도되었는데, 이는 GPU가 행렬과 벡터, float 형 연산에 높은 계산 성능을 보이는 것에서 기인한 것으로, 그래픽 연산 뿐 아니라 일반 컴퓨팅 영역에서도 GPU를 활용하고자 하는 체제를 말한다. GPGPU는 병렬 처리에 적합한 연산에서 뛰어난 연산 속도를 낼 수 있다는 이접이 있어서 상당히 좋지만, GPU 병렬 프로세싱을 위한 프로그래밍 작성을 해야 하며, GPGPU 프로그래밍 작성을 위해 다양한 방법들이 존재하며, 본 논문에서는 GPGPU 프로그래밍 방법 중 하나인 CUDA를 이용한다.
제안 방법
다음 Convolution Layer의 Forward Propagation은 총 6개의 반복문(현재 Layer의 Feature Map 개수, 현재 Layer의 Feature Map의 Width, Height, 이전 Layer의 Map 개수, Convolution Kernel의 Width, Height)이 사용되며, CUDA에서는 6개의 반복문 모두를 Thread와 Block으로 설정할 수 없기 때문에, 병렬화 하는 부분은 현재 Layer의 Feature Map 개수와 Width, Height 총 3가지를 사용하고, Map의 개수는 Block, Map의 Width와 Height는 각각 Thread x, y로 설정하며, 내부에 존재하는 3개의 반복문은 Thread 별로 동일하게 동작하도록 한다. 이 후 Activation Function을 적용하는데, Convolution Layer에서는 Hyperbolic Tangent만을 구현했다.
이 후 Activation Function을 적용하는데, Convolution Layer에서는 Hyperbolic Tangent만을 구현했다. 마지막으로 Max-pooling Layer의 Forward Propagation은 현재 Layer의 Feature Map의 개수, Width, Height, Pooling할 Mask의 Width, Height의 총 5개의 반복문이 사용되며, 위의 Convolution Layer와 동일하게 Feature Map의 개수는 Block, Map의 Width와 Height는 각각 Thread x, y로 설정하며, Max값을 추출할 마스크의 반복문은 각 Thread마다 반복하도록 한다. 이 후 Backpropagation을 위해 Max-pooling 이전 Layer의 Max값을 저장해둔다.
본 논문에서는 CUDA(Compute Unified Device Architecture)를 이용한 CNN의 구현을 진행하였으며, 실험 및 속도 비교는 기존에 존재하는 Deep Learning Framework / Program 과의 비교를 진행하였다.
본 논문에서는 위에서 설명한 방법으로 구현한 CNN과 기존에 존재하는 Deep Learning Framework와 프로그램들과의 속도 비교를 진행하였으며, Batch를 사용하지 않고, SGD(Stochastic Gradient Descent)방식을 사용하여 매 Input 영상마다 Weight Update를 진행하는 방식으로 테스트를 진행하였다. 초기 Learning rate는 0.
이를 CUDA로 변경했을 때, 현재 Layer의 Neuron 개수가 CUDA Block의 개수가 되고, (이전 Layer의 Neuron 개수 + 1)개는 Thread의 개수가 된다. 위에서 설명한 연산에 Activation Function에 맞는 연산을 적용시켜 현재 Layer의 Neuron 값으로 확정하며, 본 논문에서는 Hyperbolic Tangent와 Softmax 두 가지를 구현했다.
본 논문에서는 CUDA를 이용하여 Convolutional Neural Network의 구현을 진행했다. 일반적인 Convolutional Neural Network에서 사용되는 Layer 들의 CUDA 프로그래밍을 진행하였으며, 세부적으로 Convolution Layer, Pooling Layer, Fully-Connected Layer(Feedforward Layer)의 Forward Propagation과 Backpropagation을 구현하였다.
993씩 Learning rate를 줄이는 방식을 사용하였다. 입력 영상은 CPU 버전의 Elastic Distortion을 이용하여 Image Processing을 진행했으며, Caffe는 입력 영상에 대한 Image Processing의 단계에 기본적으로 Elastic Distortion이 없기 때문에 Image Processing을 하지 않는 것으로 구현한 CNN과의 비교를 진행하였다. 테스트의 실험 환경은 Intel Xeon CPU E3-1225 V5 (3.
대상 데이터
입력 영상은 CPU 버전의 Elastic Distortion을 이용하여 Image Processing을 진행했으며, Caffe는 입력 영상에 대한 Image Processing의 단계에 기본적으로 Elastic Distortion이 없기 때문에 Image Processing을 하지 않는 것으로 구현한 CNN과의 비교를 진행하였다. 테스트의 실험 환경은 Intel Xeon CPU E3-1225 V5 (3.30GHz, 4-Core), 16GB RAM, GPU는 NVIDIA Geforce GTX 750ti의 시스템과 Windows 10 64bit, Microsoft Visual Studio 2013을 이용하였으며, 실험은 MNIST Dataset[7]을 1 Epoch (60000장) 학습시키는데 걸리는 시간을 측정했다. 테스트에 사용된 Network의 구조는 다음과 같다.
이론/모형
이 후 프로그램 가능한 보다 유연한 형태의 GPU로 넘어오면서 3D 그래픽 분야를 위해서만 사용되던 GPU에 대한 새로운 접근이 시도되었는데, 이는 GPU가 행렬과 벡터, float 형 연산에 높은 계산 성능을 보이는 것에서 기인한 것으로, 그래픽 연산 뿐 아니라 일반 컴퓨팅 영역에서도 GPU를 활용하고자 하는 체제를 말한다. GPGPU는 병렬 처리에 적합한 연산에서 뛰어난 연산 속도를 낼 수 있다는 이접이 있어서 상당히 좋지만, GPU 병렬 프로세싱을 위한 프로그래밍 작성을 해야 하며, GPGPU 프로그래밍 작성을 위해 다양한 방법들이 존재하며, 본 논문에서는 GPGPU 프로그래밍 방법 중 하나인 CUDA를 이용한다.
성능/효과
1 Epoch을 진행하고, Training Set에 대한 정확도는 거의 비슷한 결과가 나타났으며, 위 실험 결과에 따르면 본 논문에서 구현한 방법은 다른 프로그램들과 비슷하거나 빠른 속도를 보여주었다. 조금 더 속도를 올리기 위해서는 현재 반복문 안쪽에서 인덱스 접근 오류를 방지하기 위해 Atomic 연산을 진행하는데, Shared Memory를 이용하여 CUDA 커널 함수를 최적화 하는 방법이 있을 수 있고, Atomic 연산을 하지 않고 접근할 수 있다면 더욱 속도 향상에 도움이 될 수 있을 것이다.
GPGPU는 일반적으로 컴퓨터 그래픽스를 위한 계산만 맡았던 GPU(Graphic Processing Unit)를 일반 범용 목적의 병렬 계산 프로세서로 응용하면서 나타났다.[3] 초기 GPU의 기능은 매우 제한적이었고, 단지 그래픽스 파이프라인의 특정 부분을 가속시키기 위해서만 사용되었다. 이 후 프로그램 가능한 보다 유연한 형태의 GPU로 넘어오면서 3D 그래픽 분야를 위해서만 사용되던 GPU에 대한 새로운 접근이 시도되었는데, 이는 GPU가 행렬과 벡터, float 형 연산에 높은 계산 성능을 보이는 것에서 기인한 것으로, 그래픽 연산 뿐 아니라 일반 컴퓨팅 영역에서도 GPU를 활용하고자 하는 체제를 말한다.
후속연구
조금 더 속도를 올리기 위해서는 현재 반복문 안쪽에서 인덱스 접근 오류를 방지하기 위해 Atomic 연산을 진행하는데, Shared Memory를 이용하여 CUDA 커널 함수를 최적화 하는 방법이 있을 수 있고, Atomic 연산을 하지 않고 접근할 수 있다면 더욱 속도 향상에 도움이 될 수 있을 것이다. 또한 더 좋은 하드웨어를 사용하거나, 배치를 이용하고, CUDA에서 상당히 연산이 빠른 행렬 곱을 이용한다면 더 좋은 성능을 보일 수 있을 것으로 보인다. 차후 개선할 문제는 위에서 설명한 속도적인 측면과 여러 가지 Activation Function 등의 범용적인 구현이 필요하다.
1 Epoch을 진행하고, Training Set에 대한 정확도는 거의 비슷한 결과가 나타났으며, 위 실험 결과에 따르면 본 논문에서 구현한 방법은 다른 프로그램들과 비슷하거나 빠른 속도를 보여주었다. 조금 더 속도를 올리기 위해서는 현재 반복문 안쪽에서 인덱스 접근 오류를 방지하기 위해 Atomic 연산을 진행하는데, Shared Memory를 이용하여 CUDA 커널 함수를 최적화 하는 방법이 있을 수 있고, Atomic 연산을 하지 않고 접근할 수 있다면 더욱 속도 향상에 도움이 될 수 있을 것이다. 또한 더 좋은 하드웨어를 사용하거나, 배치를 이용하고, CUDA에서 상당히 연산이 빠른 행렬 곱을 이용한다면 더 좋은 성능을 보일 수 있을 것으로 보인다.
또한 더 좋은 하드웨어를 사용하거나, 배치를 이용하고, CUDA에서 상당히 연산이 빠른 행렬 곱을 이용한다면 더 좋은 성능을 보일 수 있을 것으로 보인다. 차후 개선할 문제는 위에서 설명한 속도적인 측면과 여러 가지 Activation Function 등의 범용적인 구현이 필요하다.
질의응답
핵심어
질문
논문에서 추출한 답변
Convolution Layer는 어떤 것을 추출하는 층인가?
Convolution Layer는 입력한 데이터에 Convolution을 적용하여 Convolution Feature를 추출하는 층이다. 이는 유의미한 자질을 추출하는 층이라고 할 수 있다.
CNN이란?
딥 러닝의 다양한 방법들 중 영상처리 분야에서 많이 사용되는 방법 중 하나는 Convolutional Neural Network(CNN)[1,2]이다. CNN은 일반적인 Multi-Layer Neural Network에 Convolution Feature를 추출하는 Convolution Layer를 추가한 형태이다.
CNN의 특징은?
CNN은 CPU의 성능이 향상되면서 상당히 각광을 받았는데, 많은 양의 데이터를 학습시키거나 Layer의 구조가 복잡한 경우에는 학습시간이 상당히 오래 걸린다. 이로 인해 CNN의 연산을 GPGPU(General Purpose Graphic Processing)를 이용하여 학습하는 방법들이 나타났고, 학습시간을 상당히 줄일 수 있었다.
※ AI-Helper는 부적절한 답변을 할 수 있습니다.