지뢰밭에서의 시장예절 또는 예의범절 - 페이지 16

 
paralocus писал(а) >>

뉴트론, 잠시 시간을 내겠습니다. 모든 것을 다시 생각하고 적어도 하나의 뉴런에 대한 코드로 변환해야 합니다. 일반적으로 다른 날, 그리고 우리는 계속할 것입니다.

정말 감사합니다!

확인.

 
Neutron >> :

확인.

안녕하세요 뉴트론입니다. 여기, 내가 뭔가를 만들었습니다.

ORO 알고리즘의 경우 다음과 같은 작은 그리드를 블라인드 처리했습니다.



실제로 다음은 그리드 자체의 코드입니다(Neyro_test.mqh 헤더 파일).

extern int neyrons = 3;
extern int in = 5;

double Data[3][5] = {0.0,0.0,0.0,0.0,1.0,
0.0,0.0,0.0,0.0,1.0,
0.0,0.0,0.0,0.0,1.0 };

double W[4][5] = {-0.786, 0.359,-0.186, 0.891, 0.238,
0.711,-0.923, 0.088, 0.417,-0.112,
-0.867,-0.229, 0.321, 0.921,-0.941,
0.995,-0.712, 0.012,-0.625, 0.0 };

//----------------------------
double OUT(int bar = 1)
{
int i;
double res = 0.0;

GetInd(bar);
res = W[3,0]*RSI_1() + W[3,1]*RSI_2() + W[3,2]*RSI_3() + W[3,3];

return(res);
}

double RSI_1()
{
int i;
double res = 0.0;

for(i = 0; i < 5; i++)
res += W[0,i] * Data[0,i];

return(th(res));
}

double RSI_2()
{
int i;
double res = 0.0;

for(i = 0; i < 5; i++)
res += W[1,i] * Data[0,i];

return(th(res));
}

double RSI_3()
{
int i;
double res = 0.0;

for(i = 0; i < 5; i++)
res += W[2,i] * Data[0,i];

return(th(res));
}

//----------

void OPO(double de)
{
int i;
for(i = 0; i < 4; i++)
W[3,i] += de;
}

//---------------------------------------------------------------------

void GetInd(int i)
{
int dt = 7,per = 14, prc = 0;
double ue_in = 0.02,kf = 3.0;

Data[0,0] = th((iRSI(NULL,0,per,prc,i)*ue_in - 1.0)*kf);
Data[0,1] = th((iRSI(NULL,0,per,prc,i+dt)*ue_in - 1.0)*kf);
Data[0,2] = th((iRSI(NULL,0,per,prc,i+dt*2)*ue_in - 1.0)*kf);
Data[0,3] = th((iRSI(NULL,0,per,prc,i+dt*3)*ue_in - 1.0)*kf);
}
//-------------------------------------------

double th(double x)
{
double sh,ch;
sh = MathExp(x) - MathExp(-x);
ch = MathExp(x) + MathExp(-x);
return(sh/ch);
}



다음은 빈 Expert Advisor에서 배우려고 시도한 방법입니다.

extern int cikl = 10;
static int prevtime = 0;


#include <Neyro_test.mqh>
//-----------------------------------
int init()
{
return(0);
}

int deinit()
{
return(0);
}
//-------------------------------------
int start()
{
static double test, control;

if(Time[0] == prevtime)
return(0);
prevtime = Time[0];

int pr = 14, pc = 0, i;
double in = 0.02, k = 3.0;


for(i = cikl; i > 2; i--)
{
test = OUT(i);
control = th((iRSI(NULL,0,pr,pc,i-1)*in - 1.0)*k);
OPO(test - control);
}

Comment("\r\n ВЕСА ВЫХОДНОГО НЕЙРОНА : ",W[3,0],", ",W[3,1],", ",W[3,2],", ",W[3,3]);
return(0);

}



일반적으로 이 그리드는 "행상"됩니다. 가중 계수는 이미 10단계(막대) 후에 음란하게 증가합니다. 오랫동안 코드에서 오류를 찾았습니다. 코드가 제대로 작동하는 것으로 나타났습니다.

저것들. 그리드 출력에서 얻은 오류를 출력 레이어의 모든 가중치 계수에 단순히 추가하면 이러한 계수가 너무 빨리 커지는 경향이 있습니다.

오버스케일 미터가 실패... -:) 지금까지는 출력 레이어의 가중치에만 오류를 확장하려고 했습니다.

질문 1: 내가 무엇을 잘못했나요?

질문 2:

여기에서 그리드의 출력에서 성공적인 구매/판매의 확률 또는 대나무를 피우는 추천을 받고 싶습니다. 그리고 이 그리드는 n+1개의 막대에서 RSI 값을 예측하는 방법을 배우고 있습니다...

그와 함께 무엇을 할 수 있습니까?

 

ORO 함수에서 가중치가 잘못 수정됨

적어도 여기 에서 이론을 읽으십시오

 
maxfade >> :

ODP 함수에서 가중치가 잘못 수정됨

적어도 여기 에서 이론을 읽으십시오

감사합니다만 이해가 안되네요

 

출력 레이어의 오류는 e=OUT*(1-OUT)*(TEST-OUT) 공식을 사용하여 계산해야 합니다(이것은 로지스틱 전달 함수에 대한 것이며 쌍곡선 탄젠트의 경우 공식은 약간 다르지만 또한 그다지 복잡하지 않습니다)

뉴런의 가중치는 w+=nju*e*OUT 공식에 따라 수정되어야 합니다. 여기서 nju는 학습 단계입니다.

단계가 너무 큰 경우 - 네트워크가 불안정하고 가중치 값이 무한히 증가합니다(귀하의 경우와 같이 다른 모든 승수 없이 (TEST-OUT)을 사용함)

너무 작으면 네트워크가 학습하는 데 너무 오래 걸리고 로컬 최소값에 빠질 수 있습니다.

 
maxfade >> :

출력 레이어의 오류는 e=OUT*(1-OUT)*(TEST-OUT) 공식을 사용하여 계산해야 합니다(이것은 로지스틱 전달 함수에 대한 것이며 쌍곡선 탄젠트의 경우 공식은 약간 다르지만 또한 그다지 복잡하지 않습니다)

뉴런의 가중치는 w+=nju*e*OUT 공식에 따라 수정되어야 합니다. 여기서 nju는 학습 단계입니다.

단계가 너무 큰 경우 - 네트워크가 불안정하고 가중치 값이 무한히 증가합니다(귀하의 경우와 같이 다른 모든 승수 없이 (TEST-OUT)을 사용함)

너무 작으면 네트워크가 학습하는 데 너무 오래 걸리고 로컬 최소값에 빠질 수 있습니다.


감사합니다, 지금 시도하겠습니다

 
maxfade >> :

단계가 너무 큰 경우 - 네트워크가 불안정하고 가중치 값이 무한히 증가합니다(귀하의 경우와 같이 다른 모든 승수 없이 (TEST-OUT)을 사용함)

너무 작으면 네트워크가 학습하는 데 너무 오래 걸리고 로컬 최소값에 빠질 수 있습니다.


나를 약간 혼란스럽게 하는 것은 수정의 결과로 비늘의 "상대적 위치"가 변경되지 않은 채로 유지된다는 것입니다. 수정의 결과로 모든 입력 가중치가 같은 양만큼 변경되기 때문이다. 이때 초기 중량비는 임의로 설정하였다. 꼭 그래야 하는 걸까요?

 

헤이 패럴로커스 .

자, 순서대로. 길이가 n -sample인 훈련 벡터가 있고 네트워크의 모든 가중치를 수정하기 위해 오류 벡터를 형성해야 합니다. 벡터의 길이는 상수 레벨의 가중치를 세는 w 의 수와 동일할 것이 분명합니다. 오류 벡터는 첫 번째(두 번째, 세 번째 등) 훈련 에포크의 끝에서만 형성됩니다. 그 형성 방법은 다음과 같다.

1. 첫 번째 훈련 단계(각 epoch에 n 개가 있음)에서 각 가중치에 대해 개별 오류를 형성하고 가중치를 수정하지 않습니다. 그런 다음 두 번째 단계에서 유사한 수정을 구성하여 이전 수정에 추가하는 식으로 계속합니다. n 번. 각 가중치에 대한 총 수정값(각 항의 부호 고려)을 얻습니다. 이제 중요한 점입니다. 이 최종 수정은 사용할 수 없습니다. 가중치는 간격으로 이동합니다! 보정 벡터의 표준으로 나눌 필요가 있습니다. 이를 위해서는 각 가중치에 대해 하나의 훈련 에포크 내에서 각 보정의 제곱합을 별도로 계산해야 합니다. 다음 에포크( 그 안의 n- 주기)를 마치자마자 각 가중치에 대한 제곱합의 제곱근을 개별적으로 추출하고 각 수정을 이 비율로 개인적으로 나눕니다. 우리는 각 무게를 조정합니다.

2. 훈련 목표(부호 또는 진폭)에 따라 10에서 1000까지의 훈련 에포크가 있을 것입니다. 우리는 모든 것을 같은 방식으로 합니다. 중요한 점 : 신기원에서 신기원으로 이동할 때 가중치 보정 진폭의 단조로운 감소를 엄격하게 모니터링해야합니다. 이것은 그리드가 오류 기능의 가능성에서 더 깊고 더 깊은 최소값을 찾기에 너무 게으르지 않도록 하기 위해 필요합니다. 간단하게 구현되어 있습니다. Epoch 종료 시 가중치 보정 전에 보정기에 1-j/N 값을 곱해야 합니다. 여기서 N 은 학습 Epoch 수, j 는 현재 Epoch 번호입니다.

3. 훈련 과정에서 NETWORK의 일부 가중치가 포화되는 불가피한 영향을 방지하기 위해 다음 가중치 수정 직후 모든 가중치에 쌍곡탄젠트를 적용해야 합니다. 이 절차는 명확하지 않지만 매우 효과적입니다. 사용된 FA의 부드러움과 단조로움으로 인해 모든 가중치는 항상 +/-1 범위에 유지되며 영향 자체는 소녀에게 "히스테리"를 일으키지 않습니다.

모든 동안. 소화하고 질문하십시오.

RSI에서 구매/판매로 이동하는 방법에 대한 질문은 이것이 오히려 당신을 위한 질문입니다. 결국, 당신 자신이 이 이동을 생각해 냈습니다. 예를 들어, 내가 예측하는 것은 입력으로 입력한 것입니다(그리고 정확히 매수/매도를 예측합니다). 따라서 모순이 없습니다. 그리고 당신은 임의의 아파트에 있는 벽지의 색상으로 이 아파트의 주방 창 앞 차의 색상을 예측하려고 하고 있습니다...

 

게시물이 긁혔기 때문에 구현의 세부 사항을 기억하고 부정확성이 발생했습니다.

코드를 보니 새로운 예측으로 전환할 때 가중치에 FA의 영향을 한 번 적용한 것으로 나타났습니다. 모든 에포크는 아니지만 필요한 경우 새 데이터가 도착하면 네트워크를 다시 훈련시킵니다.

그리고 더. 가중치 보정은 뉴런의 출력에서 FA의 도함수 및 신호가 시작된 뉴런의 출력(부호를 고려한 진폭)에 대한 오류의 곱입니다.

다음은 비선형 출력을 가진 하나의 퍼셉트론의 경우입니다(예:).

여기서 에포크는 인덱스 L 로 번호가 매겨집니다. 저는 특별히 MathCad를 통해 보여줍니다. 더 명확합니다. In - 입력 수, x - 입력 벡터. 나머지는 명확한 것 같습니다.

 
Neutron >> :

RSI에서 구매/판매로 이동하는 방법에 대한 질문은 이것이 오히려 당신을 위한 질문입니다. 결국 당신 자신이 이 이동을 생각해 냈습니다. 예를 들어, 내가 예측하는 것은 입력으로 입력한 것입니다(그리고 정확히 매수/매도를 예측합니다). 따라서 모순이 없습니다. 그리고 당신은 임의의 아파트에 있는 벽지의 색상으로 이 아파트의 주방 창 앞 차의 색상을 예측하려고 합니다...

헤이 뉴트론.

적어주신 내용으로 이제 이해가 갑니다. 수학이 삐걱거리는 소리와 함께 내 머리 속을 파고드는 것뿐입니다. 프로그래밍이 조금 더 쉽습니다. 그리고 월페이퍼에 관해서는 - 당신이 절대적으로 옳습니다 - 그러나 나는 여전히 모든 동일한 월페이퍼를 제외하고는 입력 그리드에 무엇을 채워야할지 모르지만 다른 공장에서 가져온 것입니다 (결과는 동일 할 것이라고 생각합니다). 여기 포럼에서 나는 이 기사 를 읽었고 신경망에 대한 나의 관심은 그것으로 시작되었습니다. 그리고 그 기사에서 알다시피 한 불행한 퍼셉트론의 입력에 포럼의 똑똑한 사람들이 칠면조 AO (또는 AC - 나는 항상 그들을 혼동합니다)를 밀고 볼 것을 갖기 위해 그것을 나눕니다. 해당 칠면조( dt/dl )의 그래픽을 따라 이 퍼셉트론의 입력을 게시하여 "클러스터"에 넣습니다. 이 모든 것을 "NEURAL NETWORK" 또는 "TRADING WITH NON-TRADITIONAL O ... (아니요, 뭔가 잘못된 위치에 넣었습니다) DRAIN AUTOMATION"이라고 합니다. 큰 돈을 가진 친구들이 노를 젓고 있습니다... 테스터에서.

글쎄요 ... 그것은 서정적 인 탈선이었습니다.

그래서, 그 기사와 그 기사와 같은 기사가 몇 개 더 나온 후(이 기사의 링크를 따라), 저는 모든 면에서 퍼셉트론을 실험하기 시작했습니다. 일반적으로 모든 것이 그 노래와 같습니다.

"Vanka는 벤치에 앉아 양 고추 냉이로 3 개의 코펙을 망치로 두드리고 있습니다.

그는 3 루블을 만들고 싶어합니다 - 아무것도 나오지 않습니다!

그러나 거래에 사용할 목적으로 비 그리드에 대한 나의 관심은 저에게 남아 있었고 시간이 지남에 따라 성장했습니다. 아직까지 RSI 클러스터링보다 더 좋은 것이 생각나지 않는다는 사실은 와인의 삼촌이 아니라 '양날의 검'이다. 저것들. 그리드를 입력으로 밀어넣는 내용과 방법을 알기 위해서는 이러한 그리드가 어떻게 배열되어 있는지 알아야 할 뿐만 아니라 수행할 수 있어야 합니다. 최소한 복잡한 형태는 아니지만 실생활에서 안정적인 작업을 하기에 충분합니다. 그게 내가 당신에게로 향한 이유입니다.


PS 내가 "너"로 바꾼 것은 아무것도 없습니까? 그래서 어떻게 든 영혼이 있습니다.