2016-11-28 4 views
2

주제를 더 잘 이해하기 위해 MATLAB에서 신경망을 구현했습니다.Matlab GPU Backpropagation

내 GPU에서 코드를 실행하려고 했으므로 모든 매트릭스를 gpuArray()으로 초기화했지만 성능이 향상되지 않았습니다. 또한 GPU가 CPU보다 느린 경우가 있습니다. 나는 이미 arrayfun, pagefun과 같은 기능을 사용하는 방법을 배웠다. 역순으로 모든 레이어에 대해 델타 오류를 계산하는 for 루프가 있습니다. 그러나 계산에 이전 계산의 결과가 필요하며 함수 *fun()을 사용하여이를 수행하는 방법을 알지 못합니다.

내 CPU는 i5-3570이고 내 GPU는 GTX 660 Ti입니다. 이미 MATLAB에서 GPUBench을 테스트했지만 GPU는 CPU보다 x 배 빠르기 때문에 실수로 생각합니다.

TL; DR

어떻게 GPU 컴퓨팅이 MATLAB 코드를 향상시킬 수 있습니까?

delta_output = (predicted - NN.Y) .* NN.activationGradient(predicted); 
    delta_hidden(:, :, m) = (delta_output * NN.Theta_output) .* ... 
          NN.activationGradient(NN.a_hidden(:, :, m)); 
    for i = m-1:-1:1 
     delta_hidden(:, :, i) = (delta_hidden(:, 2:end, i+1) * ... 
           NN.Theta_hidden(:, :, i)) .* ... 
           NN.activationGradient(NN.a_hidden(:, :, i)); 
    end 

predicted, NN.y, NN.Theta_* 모든 gpuArray 있습니다. 나는 delta_*을 이미 gpuArray으로 초기화했으나 아무런 변화가 없다.

+1

GPU 컴퓨팅에 오신 것을 환영합니다. 우선 배워야 할 사항 : GPU에서는 모든 것이 더 빠릅니다. 데이터의 양, 문제 자체 등에 따라 다릅니다. 그 외에, MATLAB은 GPU에서 몇 가지 일을하지만 매우 불량한 GPU 프로그래밍 도구입니다. GPU에 데이터를 저장하는 속도가 느립니다. 코드 조각에있는 모든 항목이 GPU에서 실행되는지 확인하십시오. 그렇지 않으면 데이터를 앞뒤로 이동시키고 모든 것을 느리게 할 수 있습니다. 또한 해당 색인 생성 (예 :'NN.activationGradient (NN.a_hidden (:, :, i))')은 코드를 느려지 게 만듭니다. –

답변

0

신경망에 GPU를 사용하는 이점은 모든 레이어의 업데이트를 한꺼번에 계산하지 않아도된다는 것입니다. 즉, 본질적으로 직렬입니다. 한 번에 각 계층의 수천 개의 뉴런에서 가중치에 대한 업데이트를 계산할 수 있다는 점에서 비롯됩니다.

그래서 GPU를 유리하게 사용할 수있는 충분한 네트워크가없는 것 같습니다. 각 층의 무게 매트릭스의 크기는 얼마입니까? 1000 개 이상의 요소가 포함되어 있지 않으면 CPU가 수행하는 고도로 최적화 된 다중 코어 및 본질적으로 벡터화 된 계산보다 많은 이점을 얻지 못할 것입니다.

+0

네, 이것이 문제였습니다. :) – Dirk