/// <summary> /// Computes the logarithm of the model evidence corrections required in batched training. /// </summary> /// <returns>The logarithm of the model evidence corrections.</returns> /// <remarks> /// When the training data is split into several batches, it is necessary to eliminate evidence contributions /// which would otherwise be double counted. In essence, evidence corrections remove the superfluous contributions /// of factors which are shared across data batches, such as priors and constraints. To compute the evidence /// contributions of the factors shared across batches, one can compute the evidence on an empty batch. /// </remarks> protected virtual double ComputeLogEvidenceCorrection() { // Correct the below empty batch correction and add the missing evidence contribution // for the Replicate operator on the weights for all batches double logModelEvidenceCorrection = InferenceAlgorithmUtilities.ComputeLogEvidenceCorrectionReplicateAllBatches(this.BatchWeightOutputMessages); // Compute the evidence contribution of all factors shared across batches and remove it for all but one batch. logModelEvidenceCorrection -= (this.BatchCount - 1) * this.ComputeLogEvidenceContributionEmptyBatch(); return(logModelEvidenceCorrection); }
/// <summary> /// Computes the logarithm of the model evidence corrections required in batched training. /// </summary> /// <returns>The logarithm of the model evidence corrections.</returns> /// <remarks> /// When the training data is split into several batches, it is necessary to eliminate evidence contributions /// which would otherwise be double counted. In essence, evidence corrections remove the superfluous contributions /// of factors which are shared across data batches, such as priors and constraints. To compute the evidence /// contributions of the factors shared across batches, one can compute the evidence on an empty batch. /// </remarks> protected override double ComputeLogEvidenceCorrection() { // Correct the below base correction and add the missing evidence contribution // for the Replicate operator on the weight precision rates for all batches double logModelEvidenceCorrection = InferenceAlgorithmUtilities.ComputeLogEvidenceCorrectionReplicateAllBatches(this.batchWeightPrecisionRateOutputMessages); // Compute base evidence correction logModelEvidenceCorrection += base.ComputeLogEvidenceCorrection(); return(logModelEvidenceCorrection); }