"New Neural"은 MetaTrader 5 플랫폼용 신경망 엔진의 오픈 소스 프로젝트입니다. - 페이지 56

 
우크라이나 :

예, 그것이 바로 제가 알고 싶었던 것입니다.

mql5

이제 위협은 데이터를 특수 프로세서 어레이에 복사해야 하는지 또는 어레이를 일반 기능의 매개변수로 전송하는 것이 지원되는지 여부를 가장 걱정하고 있습니다. 이 질문은 전체 프로젝트를 근본적으로 바꿀 수 있습니다.

ZZY OpenCL API만 제공할 계획에 답할 수 있습니까? 아니면 자체 래퍼로 포장할 계획입니까?

1) GPU 메모리를 의미한다면 예, 사용자 정의 배열을 복사하기 위한 특수 기능이 있습니다.
2) 래퍼가 있으며 HW GPU만 지원됩니다(OpenCL 1.1 지원 포함).
여러 GPU(있는 경우)는 터미널 설정을 통해서만 선택할 수 있습니다.
OpenCL은 동기식으로 사용됩니다.
 
우크라이나 :

예, 그것이 바로 제가 알고 싶었던 것입니다.

mql5

이제 위협은 데이터를 특수 프로세서 어레이에 복사해야 하는지 또는 어레이를 일반 기능의 매개변수로 전송하는 것이 지원되는지 여부를 가장 걱정하고 있습니다. 이 질문은 전체 프로젝트를 근본적으로 바꿀 수 있습니다.

ZZY OpenCL API만 제공할 계획에 답할 수 있습니까? 아니면 자체 래퍼로 포장할 계획입니까?

판단 기준:

mql5 :
사실, 타사 DLL을 포함할 필요 없이 OpenCL.dll 라이브러리의 기능을 직접 사용할 수 있습니다.

OpenCL.dll 함수를 네이티브 MQL5 함수인 것처럼 사용할 수 있으며 컴파일러 자체에서 호출 리디렉션을 수행합니다.

이를 기반으로 OpenCL.dll의 기능이 이미 배치될 수 있다고 결론지을 수 있습니다(더미 호출).

Renatmql5 , "환경"을 올바르게 이해했습니까?

 
:

판단 기준:

OpenCL.dll 함수를 네이티브 MQL5 함수 인 것처럼 사용할 수 있으며 컴파일러 자체에서 호출 리디렉션을 수행합니다.

이를 기반으로 OpenCL.dll의 기능이 이미 배치될 수 있다고 결론지을 수 있습니다(더미 호출).

Renatmql5 , "환경"을 올바르게 이해했습니까?

개발 중인 OpenCL과 함께 작업합니다. OpenCL.dll을 직접 사용하는 것과는 차이가 있습니다.
 

지금까지 프로젝트 계획은 다음과 같습니다.


객체는 직사각형이고 메소드는 타원입니다.
 

처리 방법은 4가지 범주로 나뉩니다.

метод параллельных расчётов
метод последовательных расчётов
метод расчётов активатора
метод расчётов операторов задержки

이 4가지 메소드는 모든 계층에 걸친 전체 처리를 설명하며, 메소드는 기본 클래스에서 상속되고 뉴런 유형에 따라 필요에 따라 오버로드되는 메소드 객체를 통해 처리에 임포트 됩니다.
 
우크라이나 :

Nikolai, 당신은 그런 캐치프레이즈를 알고 있습니다 - 조기 최적화 - 이것이 모든 악의 근원입니다.

지금은 OpenCL을 잊어버리십시오. OpenCL이 없으면 가치 있는 글을 작성할 수 있습니다. 특히 아직 정기적인 기회가 없기 때문에 항상 이동할 시간이 있습니다.

 
더엑스퍼트 :

Nikolai, 당신은 그런 캐치프레이즈를 알고 있습니다 - 조기 최적화 - 이것이 모든 악의 근원입니다.

지금은 OpenCL을 잊어버리십시오. OpenCL이 없으면 가치 있는 글을 작성할 수 있습니다. 특히 아직 정기적인 기회가 없기 때문에 항상 이동할 시간이 있습니다.

네, 그 문구가 눈에 띄고 저번에도 거의 동의했지만, 분석을 해보니 그렇게 되지 않는다는 걸 알게 되었고 GPU용으로 리메이크해야 할 때 정말 특정 요구 사항이 있습니다.

GPU 없이 계획하는 경우 공통 조상에서 클래스를 상속하여 뉴런 내부의 작업과 계산 데이터를 필요한 메모리 셀에 할당하는 작업을 모두 담당하는 Neuron 개체를 만드는 것이 논리적입니다. 원하는 유형의 뉴런 등

그러나 그것에 대해 조금 생각한 후 나는 그러한 접근 방식이 GPU 계산을 완전히 생략할 것이라는 것을 즉시 깨달았습니다. 태어나지 않은 아이들은 이미 크롤링할 운명이었습니다.

그러나 "병렬 계산 방법"은 입력에 가중치 in*wg를 곱하는 매우 구체적인 작업을 의미하고 순차 계산 방법은 sum+=a[i] 등을 의미하는 위의 내 게시물에서 혼동을 일으켰다고 생각합니다.

GPU와의 더 나은 향후 호환성을 위해 뉴런에서 작업을 파생하고 레이어 개체에서 하나의 패스로 결합할 것을 제안합니다. 그러면 뉴런은 어디로 가야 하는지에 대한 정보만 제공합니다.

 

강의 1은 여기 https://www.mql5.com/ru/forum/4956/page23

강의 2는 여기 https://www.mql5.com/ru/forum/4956/page34

강의 3은 여기 https://www.mql5.com/ru/forum/4956/page36

강의 4는 여기 https://www.mql5.com/ru/forum/4956/page46

강의 5(마지막). 희소 코딩

이 주제가 가장 흥미롭습니다. 이 강의는 차차 작성하겠습니다. 따라서 이 게시물을 수시로 확인하는 것을 잊지 마십시오.

일반적으로 우리의 임무는 마지막 N개의 막대에 있는 가격 견적(벡터 x )을 기저 함수(행렬 A 의 행)로의 선형 분해로 표현하는 것입니다.

여기서 s 는 신경망(예: SVM)의 다음 계층에 대한 입력으로 찾아 사용하려는 선형 변환의 계수입니다. 대부분의 경우 A 의 기본 함수는 우리에게 알려져 있습니다. 우리는 그들을 미리 선택합니다. 그것들은 다양한 주파수의 사인과 코사인(푸리에 변환을 얻음), 가보 함수, 감마톤, 웨이블릿, 커브렛, 다항식 또는 기타 함수일 수 있습니다. 이러한 함수를 미리 알고 있는 경우 희소 코딩은 이러한 계수의 많은 수가 0과 같은 방식으로 계수 s 의 벡터를 찾는 것으로 축소됩니다(희소 벡터). 여기서 아이디어는 대부분의 정보 신호가 신호 샘플의 수보다 적은 기본 함수로 설명되는 구조를 갖는다는 것입니다. 신호의 희박한 설명에 포함된 이러한 기본 기능은 신호를 분류하는 데 사용할 수 있는 필수 기능입니다.

초기 정보의 희소 선형 변환을 찾는 작업을 압축 감지(http://ru.wikipedia.org/wiki/Compressive_sensing)라고 합니다. 일반적으로 작업은 다음과 같이 공식화됩니다.

As = x에 따라 s의 L0 노름 최소화

여기서 L0 규범은 벡터 s 의 0이 아닌 값의 수와 같습니다. 이 문제를 해결하기 위한 가장 일반적인 방법은 L0 노름을 L1 노름으로 바꾸는 것인데, 이는 기초 추구 방법( https://en.wikipedia.org/wiki/Basis_pursuit )의 기초를 형성합니다.

As = x에 따라 s의 L1 노름 최소화

여기서 L1 노름은 |s_1|+|s_2|+...+|s_L|로 계산됩니다. 이 문제는 선형 최적화로 줄어듭니다.

희소 벡터 s 를 찾는 또 다른 일반적인 방법은 일치 추적입니다( https://en.wikipedia.org/wiki/Matching_pursuit ). 이 방법의 핵심은 다른 기저 함수와 비교하여 가장 큰 계수 s_i를 갖는 입력 벡터 x 에 맞는 방식으로 주어진 행렬 A 에서 첫 번째 기저 함수 a _i를 찾는 것입니다. 입력 벡터 에서 _i*s_i를 뺀 후 결과 나머지에 다음 기저 함수를 추가하는 식입니다. 주어진 오류에 도달할 때까지. 일치 추적 방법의 예는 다음 지표로, 나머지가 가장 작은 입력 견적에 사인곡선을 하나씩 맞추는 것입니다. https://www.mql5.com/ru/code/130 .

기본 함수 A (사전)를 미리 알지 못하는 경우 사전 학습이라는 방법을 사용하여 입력 데이터 x 에서 기본 함수를 찾아야 합니다. 이것은 희소 코딩 방법의 가장 복잡한(그리고 나에게 가장 흥미로운) 부분입니다. 이전 강의에서 예를 들어 이러한 함수를 입력 인용문의 주요 벡터로 만드는 오지 규칙을 사용하여 이러한 함수를 찾는 방법을 보여주었습니다. 불행히도, 이러한 종류의 기본 함수는 입력 데이터의 희소 기술로 이어지지 않습니다(즉, 벡터 s 는 희소하지 않음).

희소 선형 변환으로 이어지는 기존 사전 학습 방법은 다음과 같이 나뉩니다.

  • 확률론적
  • 무리
  • 온라인

기저 함수를 찾는 확률적 방법 은 최대 가능성을 최대화하기 위해 축소됩니다.

A에 대해 P(x|A)를 최대화합니다.

일반적으로 근사 오류에는 가우스 분포가 있다고 가정하므로 다음과 같은 최적화 문제를 해결할 수 있습니다.

(하나) ,

이는 두 단계로 해결됩니다: (1-희소 코딩 단계) 고정 기저 함수 A , 괄호 안의 표현은 벡터 s에 대해 최소화되며, (2-사전 업데이트 단계) 발견된 벡터 s 는 고정되고 표현 괄호 안은 기울기 하강법을 사용하여 기저 함수 A 에 대해 최소화됩니다.

(2)

여기서 위 첨자의 (n+1) 및 (n)은 반복 횟수를 나타냅니다. 이 두 단계(희소 코딩 단계 및 사전 학습 단계)는 로컬 최소값에 도달할 때까지 반복됩니다. 기저 함수를 찾는 이 확률적 방법은 예를 들어 다음과 같이 사용됩니다.

Olshausen, 학사, & Field, DJ (1996). 자연 이미지에 대한 희소 코드를 학습하여 단순 세포 수용 필드 속성의 출현. 네이처, 381(6583), 607-609.

Lewicki, MS, & Sejnowski, TJ (1999). 과완전 표현을 학습합니다. 신경 계산., 12(2), 337-365.

최적의 방향(MOD) 방법은 동일한 두 가지 최적화 단계(희소 코딩 단계 및 사전 학습 단계)를 사용하지만 두 번째 최적화 단계(사전 업데이트 단계)에서 기본 함수는 괄호(1 ) A 에 대해 0으로 :

,

우리가 얻는 곳

(삼) ,

여기서 s +는 의사 역행렬입니다. 이것은 경사하강법(2)보다 더 정확한 기저 행렬 계산입니다. MOD 방법은 여기에 더 자세히 설명되어 있습니다.

K. Engan, SO Aase 및 JH Hakon-Husoy. 프레임 디자인을 위한 최적의 방향 방법. 음향, 음성 및 신호 처리에 관한 IEEE 국제 회의, vol. 5, pp. 2443-2446, 1999.

의사 역행렬을 계산하는 것은 힘든 일입니다. k-SVD 방법은 계산을 피합니다. 지금까지는 이 방법을 스스로 알아내지 못했습니다. 여기에서 읽을 수 있습니다.

M. Aharon, M. Elad, A. Bruckstein. K-SVD: 희소 표현을 위한 과완전 사전 설계 알고리즘. IEEE 트랜스. 신호 처리 , 54(11), 2006년 11월.

사전을 찾는 클러스터 및 온라인 방법도 찾지 못했습니다. 관심 있는 분들을 다음 리뷰로 안내합니다.

R. Rubinstein, A. M. Bruckstein 및 M. Elad, "희소 표현 모델링을 위한 사전", Proc. IEEE, 98(6), pp. 1045-1057, 2010년 6월 .

다음은 이 주제에 대한 몇 가지 흥미로운 동영상입니다.

http://videolectures.net/mlss09us_candes_ocsssrl1m/

http://videolectures.net/mlss09us_sapiro_ldias/

http://videolectures.net/nips09_bach_smm/

http://videolectures.net/icml09_mairal_odlsc/

모든 동안. 가능한 한 이 포럼 방문자의 관심과 함께 향후 게시물에서 이 주제를 확장할 것입니다.

 
더엑스퍼트 :

Nikolai, 당신은 그런 캐치프레이즈를 알고 있습니다 - 조기 최적화 - 이것이 모든 악의 근원입니다.

이것은 개발자들 사이에서 가혹행위를 은폐하기 위해 자주 사용되는 문구로, 사용할 때마다 손을 댈 수 있습니다.

이 문구는 수명이 길고 발사 속도와 고부하에 직접 초점을 맞춘 고품질 소프트웨어를 개발할 때 근본적으로 해롭고 절대적으로 잘못된 것입니다.

나는 수년간의 프로젝트 관리 실무에서 이것을 여러 번 확인했습니다.

 
레나트 :

이것은 개발자들 사이에서 가혹행위를 은폐하기 위해 자주 사용되는 문구로, 사용할 때마다 손을 댈 수 있습니다.

저것들. 성능 향상을 제공한다는 사실 때문에 어떤 인터페이스를 미리 알고 있는지 지옥과 함께 나타날 때 지옥이 알고 있는 몇 가지 기능을 고려해야 합니다.

나는 수년간의 프로젝트 관리 실무에서 이것을 여러 번 확인했습니다.

수년간의 경험을 적용할 수 있습니까? 동시에 오만한 말투보다는 롤모델과 전문성을 보여주자.