문제

대학 프로젝트의 경우 신용 카드 거래가 사기인지 아닌지를 분류 할 수있는 신경망을 만들고 있습니다. 나는 역전술로 훈련하고 있습니다. 나는 이것을 Java로 쓰고 있습니다. 컴퓨터가 쿼드 코어 i7이기 때문에 멀티 스레딩을 적용하고 싶습니다. 훈련 시간을 보내고 대부분의 코어 유휴 상태를 보는 것이 버그를냅니다.

그러나 역학에 멀티 스레딩을 어떻게 적용합니까? Backprop은 네트워크를 통해 오류를 뒤로 조정하여 작동합니다. 한 층은 다른 레이어가 계속되기 전에 수행되어야합니다. 멀티 코어 배경을 수행하기 위해 프로그램을 수정할 수있는 방법이 있습니까?

도움이 되었습니까?

해결책

우선 역전을 사용하지 않습니다. 다른 많은 옵션이 있습니다. rprop (탄력성 전파)을 시도하는 것이 좋습니다. 역설 알고리즘에 대한 큰 수정은 아닙니다. 학습 속도 나 운동량을 지정할 필요가 없습니다. 마치 신경망의 모든 연결에 대한 개인, 가변 학습 속도가 거의있는 것처럼 거의.

역전에 멀티 스레딩을 적용하는 것. 방금이 주제에 관한 기사를 썼습니다.

http://www.heatonresearch.com/encog/mprop/compare.html

기본적으로 여러 스레드를 생성하고 각 스레드가 거의 동일한 양을 갖도록 교육 데이터를 나눕니다. 각 스레드의 그라디언트를 계산하고 있으며 감소 단계에서 합산됩니다. 가중치에 구배가 적용되는 방법은 사용 된 전파 훈련 알고리즘에 따라 다르지만 무게 업데이트는 중요한 섹션에서 수행됩니다.

가중치보다 훈련 샘플이 상당히 더 많은 경우 코드는 중요 단면 무게 업데이트보다 다중 스레드 그라디언트 계산에서 훨씬 더 많은 시간을 소비합니다.

위의 링크에서 성능 결과를 제공합니다. 정말 속도가 빨라집니다!

다른 팁

Java와 함께 더 많은 CPU 코어를 사용하려면 코드를 변경하지 않고도 JVM에 대한 더 많은 옵션을 시도 할 수 있습니다.

  • -섬기는 사람
  • -D64
  • -xx : -useparallelgc

그리고 다른 옵션 http://java.sun.com/javase/technologies/hotspot/vmoptions.jsp

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top