2012-10-03 5 views
0

신경망은 일반적으로 방대한 양의 데이터와 병렬 컴퓨팅을 사용해야하는 필요성을 특징으로합니다. 함수형 언어가 신경망을 구축하는 데 더 적합합니까?신경망을 구축 할 때 기능 언어가 필수적입니까?

+0

이 질문은 Stackoverflow에 적합하지 않은 것으로 마감되었습니다. 나는 질문의 문구가 소리가 부적절하게 들리더라도 동의하지 않습니다. 일반화 된 질문은 : 일반적으로 기능적 또는 명령형 프로그래밍이 신경망에 더 적합하다고 생각하는 이유가 있는가? 모든 답변에는 내재 된 "세부 사항에 의존"한정자가 있지만 관련성이있는 일반적인 요소가 있습니다 (예 : 노드 및 링크의 수, 각 노드의 업데이트 빈도). 행렬 표현으로 네트워크를 이해하기가 더 쉽고 어렵게 만들 수 있습니까? – Mars

답변

3

아니요. 기능적 언어는 보통 불변성을 고수하면 (또는 어떤 종류의 통제되지 않은 부작용을 더 정확하게 방지 할 경우) 병렬화를 사소하게 만듭니다. 그렇지 않다면 비 기능적 언어로 병렬화하는 것이 쉽지 않습니다. 이 경우 두 가지 옵션이 있습니다

  • 사용의 부작용이 있지만, 지역화 된 방식으로, 그래서 병렬 스레드는 서로 어떤 사업이 없다 : 예를 들어, 당신은 많은 NN-s를 평가할 수 있습니다. 각각의 스레드는 자체 스레드 일 수 있습니다 (CPU 코어 수보다 많은 스레드를 가진 스레드 풀을 사용하는 것이 좋습니다).

  • 로컬 화되지 않은 부작용에 대해서는 동기화 나 다른 방법으로 제어해야합니다. 그 중 하나는 배우의 계산 모델입니다 (함수 언어 사용자에게는 매우 인기가 있지만 자바에서는 사용할 수 있습니다, http://akka.io/ 참조). 일반적으로 배우 내에서 부작용을 일으키지 만 배우의 상호 작용에는 엄격한 규칙이 있습니다. 이렇게하면 낮은 수준의 스레드 처리를 수행하지 않아도됩니다.

고려해야 할 또 다른 것은 그것이 순수하게 기능을하는 것도 매우 복잡 아니지만, 동시에 두 일을하는 것은 어려울 수 있습니다, 중간 정도 성능이 좋은 NN 구현이 너무 어렵지 않다이다 태스크. 그래서 당신이 기능적 언어에 익숙하지 않다면, 비 기능적 언어로, 또는 최소한 순수하지 않은 방법으로 병렬화 된 NN을 작성하는 것이 더 쉽다고 생각합니다.

+0

도움이되는 답변 인 Sandor입니다. 함수형 프로그래밍을 선호하지만 명령형 네트워크를 사용하면 내 응용 프로그램이 더 쉽고 효율적이라고 가정했습니다. 내 직관을 확인해 줬어. 내 종류의 응용 프로그램이야. (모든 에이전트에서 5000 노드 신경망을 가진 에이전트 기반 시뮬레이션입니다. 모든 반복마다 노드가 업데이트되므로 게으름을 이해하지 못하면 게으름이 도움이 될 것이라고 생각하지 않습니다. 병렬 처리를 원할 경우, 요원 수준에서 그렇게하는 것이 가장 편리 할 것입니다.) – Mars

관련 문제