損失関数を実装してみた

C# でゼロから Deep Learning を実装する挑戦の続き。 今回は第 4 章で紹介されている損失関数(2乗和誤差と交差エントロピー誤差)を実装してみた。

using MathNet.Numerics.LinearAlgebra;
using System;
using System.Linq;

namespace LossFunctionSample
{
    class Program
    {
        static void Main(string[] args)
        {
            var t = Vector<double>.Build.DenseOfArray(new double[]
            {
                0, 0, 1, 0, 0, 0, 0, 0, 0, 0
            });
            var y = Vector<double>.Build.DenseOfArray(new double[]
            {
                0.1, 0.05, 0.6, 0.0, 0.05, 0.1, 0.0, 0.1, 0.0, 0.0
            });
            Console.WriteLine("2乗和誤差");
            Console.WriteLine(MeanSquaredError(y, t));

            Console.WriteLine("交差エントロピー誤差");
            Console.WriteLine(CrossEntropyError(y, t));

            Console.ReadLine();
        }

        /// <summary>
        /// 2乗和誤差
        /// </summary>
        static double MeanSquaredError(Vector<double> y, Vector<double> t)
        {
            return 0.5 * (y - t).Sum(x => x * x);
        }

        /// <summary>
        /// 交差エントロピー誤差
        /// </summary>
        static double CrossEntropyError(Vector<double> y, Vector<double> t)
        {
            var delta = 1e-7;
            return -(y + delta).PointwiseLog().PointwiseMultiply(t).Sum();
        }
    }
}

実行結果は次の通り。 『ゼロから作る Deep Learning』に載っている Python のサンプルと同じ結果が出力できた。

まだ先は長いな。