Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在大多数情况下,反向传播不会使我的网络学习简单的任务_Javascript_Typescript_Machine Learning_Backpropagation - Fatal编程技术网

Javascript 在大多数情况下,反向传播不会使我的网络学习简单的任务

Javascript 在大多数情况下,反向传播不会使我的网络学习简单的任务,javascript,typescript,machine-learning,backpropagation,Javascript,Typescript,Machine Learning,Backpropagation,我想了解更多关于机器学习的内部工作原理,所以我用Typescript写了一些东西来记下要点。然而,它不学习。我创建了一个小脚本来克隆项目及其可视化: 但是,以下是相关代码: activate(激活:编号,内存:内存,连接:连接=null){ if(连接!==null) this.activationValues[connection.innovation]=激活; //如果此正向传递中没有激活,则此处传递的激活为初始输入 如果(this.activations==0){ this.netInpu

我想了解更多关于机器学习的内部工作原理,所以我用Typescript写了一些东西来记下要点。然而,它不学习。我创建了一个小脚本来克隆项目及其可视化:

但是,以下是相关代码:

activate(激活:编号,内存:内存,连接:连接=null){
if(连接!==null)
this.activationValues[connection.innovation]=激活;
//如果此正向传递中没有激活,则此处传递的激活为初始输入
如果(this.activations==0){
this.netInput=激活;
}否则{
//否则,将激活添加到输入
this.netInput+=激活;
}
//如果所有传入节点连接都已激发
如果(++this.activations>=this.connectionsBackward.length){
//重置激活计数器
此参数为0.activations=0;
//计算激活值(挤压输入+偏置)
//输入节点除外
常量输出=this.getActivation();
//打开所有输出连接
_.each(this.connectionsForward,(connection:connection)=>{
如果(!memory.allowed(connection.innovation))返回;
连接到激活(输出*连接重量、内存、连接);
记忆。激活(连接。创新);
})
}
}
/*
∂Eₜₒₜₐₗ / ∂Wᵢⱼ  = ( ∂Eₜₒₜₐₗ / ∂出来ⱼ ) * ( ∂出来ⱼ / ∂网ⱼ ) * (  ∂网ⱼ / ∂Wᵢⱼ )
∂Eₜₒₜₐₗ / ∂出来ⱼ = - (目标出局)ⱼ)
∂出来ⱼ / ∂网ⱼ = 出来ⱼ (一)出局ⱼ) (激活函数的导数,此处为:sigmoid)
∂网ⱼ / ∂Wᵢⱼ  = 出来ᵢ
Δw=-η*∂Eₜₒₜₐₗ / ∂Wᵢⱼ = -η * ∂ⱼ * 出来ᵢ
*/
传播输出(理想,学习率){
//计算偏导数
const partialderivativeerrorrout=-(理想-this.getActivation());
const partialDerivativeOutNetinput=this.getActivation(true);
//对于所有传入连接
_.each(this.connectionsBackward,(连接:连接)=>{
const partialDerivativeNetinputWeight=connection.from.getActivation();
//计算连接重量误差的偏导数
常量导数ErrorWeight=部分导数ErrorRout*部分导数OutNetInput*部分导数InputWeight;
//为连接指定重量调整
connection.adjustment=connection.delta=-learningRate*derivativeErrorWeight;
//向后传播错误
if(connection.from.type==NODE_type.input)返回;
连接.from.propagateHidden(PartialDelivativeErrorRout,learningRate);
});
}
/*
∂Eₜₒₜₐₗ / ∂Wᵢⱼ  = ( ∂Eₜₒₜₐₗ / ∂出来ⱼ ) * ( ∂出来ⱼ / ∂网ⱼ ) * (  ∂网ⱼ / ∂Wᵢⱼ )
∂Eₜₒₜₐₗ / ∂出来ⱼ = Σ [ (∂Eₖ₁ / 阴郁的ⱼ) + (∂Eₖ₂ / 阴郁的ⱼ) + ... (∂Eₖₙ / / 阴郁的ⱼ) ]
-> ∂Eₖ / ∂出来ⱼ   = ∂Eₖ * / ∂网ₖ
-> ∂网ₖ / ∂出来ⱼ = Wᵢⱼ
∂出来ⱼ / ∂网ⱼ = 出来ⱼ (一)出局ⱼ)
∂网ⱼ / ∂Wᵢⱼ  = 来自此连接的输入
Δw=-η*∂Eₜₒₜₐₗ / ∂Wᵢⱼ
*/
传播隐藏(PartialDelivativeErrorRoutConnected,learningRate){
//将所有传入的错误导数相加
this.partialderivativeerrorroutConnectedSum+=partialderivativeerrorroutConnected;
//如果所有传入连接都已反向传播
if(++this.propagations==this.connectionsForward.length){
这就是传播=0;
//计算偏导数
const partialDerivativeOutNetinput=this.getActivation(true);
const partialDerivativeNetinputBias=1;
//计算偏差误差的偏导数
const-derivativeErrorBias=this.partialderivativeErrorRoutedSum*partialDerivativeOutNetinput*partialderivativeEntInputBias;
//将偏差调整指定给节点
this.adjustment=-learningRate*派生误差偏差;
//对于所有传入连接
_.each(this.connectionsBackward,(连接:连接)=>{
const partialDerivativeNetinputWeight=this.activationValues[connection.innovation];
//计算连接重量误差的偏导数
const derivativeErrorWeight=this.partialderivativeErrorRoutedSum*partialDerivativeOutNetinput*partialderivativeEntInputWeight;
//为连接指定重量调整
connection.adjustment=connection.delta=-learningRate*derivativeErrorWeight;
//向后传播错误
if(connection.from.type==NODE_type.input)返回;
connection.from.propagateHidden(this.partialderivativeErrorRoutedConnectedSum,learningRate);
});
}
}
调整(存储器){
//实际调整偏差和连接权重(递归)
this.bias+=this.adjustment;
此项调整=0;
_.each(this.getConnectionsBackward(),(连接:connection)=>{
如果(!memory.allowed(connection.innovation))返回;
connection.weight+=connection.adjustment;
连接调整=0;
记忆。激活(连接。创新);
连接。从。调整(内存)
});
}
getActivation(导数=false){
if(this.type==NODE_type.input){
返回此.netInput;
}
返回this.squash(this.netInput+this.bias,导数);
}
例如,如果我希望它镜像输入/输出,那么经过几千次迭代后,我在每个节点上都会得到相同的输出:

和相同:

与XOR相同:

如果有人能帮我,我将不胜感激

你好,米肯