backpropagation

ConvolutionalLayer.backpropagation()

誤差逆伝播

ソース

backpropagation() {
    var lap = new Lap(this.backwardTime);

    if (this.nextLayer) {
        // 最後のレイヤーでない場合

        this.deltaY = this.nextLayer.deltaX;
    }

    this.cpuDeltaZ();
    lap.Time();

    this.cpuDeltaBias();
    lap.Time();

    this.gpuDeltaWeight();

    if(miniBatchIdx == 0 || Math_random() < 0.01){

        var delta_w = new Float32Array(this.deltaWeight.dt);
        this.cpuDeltaWeight();

        var diff = this.deltaWeight.diff(delta_w);
        if(0.00001 < diff){
            console.log("CNN delta-W diff:%f", diff);
        }
    }

    lap.Time();

    if(! (this.prevLayer instanceof InputLayer)){
        // 直前が入力層でない場合

        this.gpuDeltaX();

        if(miniBatchIdx == 0 || Math_random() < 0.01){

            var delta_x1 = new Float32Array(this.deltaX.dt);

            this.cpuDeltaX();

            var delta_x2 = this.cpuDeltaX2();
            var diff1 = this.deltaX.diff(delta_x1);
            var diff2 = this.deltaX.diff(delta_x2);
            if(0.00001 < diff1 || 0.00001 < diff2){
                console.log("CNN delta-X diff:%f %f", diff1, diff2);
            }
        }
    }
    lap.Time();
}