数値微分を実装してみた

C# でゼロから Deep Learning を実装する挑戦の続き。 今回は第 4 章の数値微分を実装してみた。

using System;

namespace NumericalDifferentiationSample
{
    class Program
    {
        static void Main(string[] args)
        {
            // 微分
            Func<double, double> function1 =
                x => 0.01 * Math.Pow(x, 2) + 0.1 * x;
            Console.WriteLine("y = 0.01x^2 + 0.1x");
            Console.WriteLine($"x = 5,  y = {NumericalDiff(function1, 5)}");
            Console.WriteLine($"x = 10, y = {NumericalDiff(function1, 10)}");
            Console.WriteLine();

            // 偏微分
            Func<double, double, double> function2 =
                (x0, x1) => Math.Pow(x0, 2) + Math.Pow(x1, 2);
            Console.WriteLine("f(x0, x1) = x0^2 + x1^2");
            Console.WriteLine("x0 = 3.0, x1 = 4.0 のとき");

            Func<double, double> functionTemp1
                = (x0) => function2(x0, 4);
            Console.WriteLine($"x0 に対する偏微分 : {NumericalDiff(functionTemp1, 3)}");

            Func<double, double> functionTemp2
                = (x1) => function2(3, x1);
            Console.WriteLine($"x1 に対する偏微分 : {NumericalDiff(functionTemp2, 4)}");

            Console.ReadLine();
        }

        static double NumericalDiff(Func<double, double> f, double x)
        {
            var h = 1e-4;   // 0.0001
            return (f(x + h) - f(x - h)) / (2 * h);
        }
    }
}

実行結果は次の通り。 偏微分の結果に誤差が出てしまっている。

余談だけど、『ゼロからつくる Deep Learning』に書いてある微分の説明は非常に分かりやすいと思った。 自分が学生の頃使った教科書も、これぐらい分かりやすく書いてあればな。

博多拉坦麺まるたん

昼休みに、天神南駅から出て直ぐのところにある『博多拉坦麺まるたん』に行ってみた。

坦々麺ではなく拉坦麺。ラーメンと坦々麺をミックスしたものなんだろうか。真相を解明すべく、拉坦麺とご飯、餃子のセットを注文してみた。

拉坦麺は野菜でとったスープに胡麻ペーストが合わさったヘルシーな原料だというのに、男でも満足できる濃厚さだった。辛さも丁度いい。

餃子は非常にジューシーで美味くて、大盛りにしてもらったご飯をこいつだけで平らげてしまった。

拉坦麺と餃子、共に期待以上の味だった。拉坦麺は単品で 500 円、セットで 780 円、しかも無料でご飯を大盛りに出来てコスパは高い。

『最速でおしゃれに見せる方法』を読んだ

本書はおしゃれについて、センスなんてよく分からないものを持ち出して思考停止することなく、理論化を試みた意欲作。

おしゃれに見せる方法とは、つまるところ、「ドレスとカジュアルのバランス」をとること。確かに、雑誌やテレビでよく見る、ジャケットにジーンズを合わせたコーディネートなんかは、まさにそうだ。そのドレスとカジュアルの割合は 7:3 がベストらしい。

ただ、掲載されているコーディネート例の大半は、自分みたいな 30 過ぎのおっさんがそのまま真似すると大怪我しそうではある。

自分もユニクロ無印良品H&MZARA といったファストファッションの服で、おしゃれに見せることは出来ると思っているし、研究している。この本の理論というか、考え方は今後の服選びに活かしていけそう。まさに教科書だな。

損失関数を実装してみた

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 のサンプルと同じ結果が出力できた。

まだ先は長いな。

『スティーブズ (1)〜(6)』を読んだ

Kindle で『スティーブズ』を 1 巻から 6 巻までまとめ買いして読んだ。

このマンガはスティーブ・ジョブズスティーブ・ウォズニアック、2人のスティーブが主人公。だからスティーブズ。ライバルとして、ビル・ゲイツも出てくる。このゲイツ君が良いキャラをしていて、1番のお気に入りだな。

ジョブズは破天荒ながらも愛すべきキャラに仕上がっていて、キャラクターデザイン、特に内面のデザインが見事だなぁと思った。あと、現実歪曲空間。まるで超能力バトルのようで、こういった表現が出来るのがマンガの強みだな。

肝心の物語は、ジョブズを中心に進む。Apple I の開発からマッキントッシュを発表するまでが描かれていた。何度も危機的状況に追い込まれながらも乗り越えていく様はドラマチックで、小説や映画が多数生まれるのも頷ける。事実をもとにしたフィクションとはなってるけど。また、パーソナルコンピューターの歴史をある程度知ることができて勉強にもなった。

ゲイツ君が Windows で無双する話や、ジョブズが復帰して iPhoneiPad を世に出す話までは描かれなかったのが残念なので、ぜひとも続編を描いて欲しいと切に願う。

[まとめ買い] スティーブズ(ビッグコミックス)

[まとめ買い] スティーブズ(ビッグコミックス)

入船食堂

会社帰りにちょっと足を延ばして、住吉にある『入船食堂』に行ってみた。この店は福岡でも珍しい、家系ラーメンを出している店だそうな。

ラーメン中盛りを頼んでみた。 家系ラーメンは初めて食べる気がする。

醤油豚骨の濃厚なスープに鶏油のアクセントが加わって、初めて経験する味で美味かった。豚骨よりも家系のほうが好みかもしれない。それに中盛りで、普段食べるラーメンの2杯分くらいボリュームがあった。これで 600 円は安い。気に入った。

関連ランキング:ラーメン | 渡辺通駅博多駅

黒一

昼休みに、天神一丁目にある『黒一』に行ってみた。ここは焼肉の店なのだが、聞いたところによると、ランチが凄いらしい。

『重ねステーキ丼』と、肉の量が2倍の『特大重ねステーキ丼』で迷ったが、さすがに2倍はやり過ぎと思ったので、『重ねステーキ丼』を注文。

ステーキソースは醤油ベースなのか、味付けは控えめで、その分肉の味を味わえた。甘めの味噌ソースをお好みでかけることもできた。個人的にはかけないほうが好み。

あと、このステーキ丼は驚いたことに、ご飯の中にも肉が敷き詰められていた。だから『重ね』なのか。予想以上のボリュームで完食できるか最初不安だったが、さすが焼肉店というか、肉が柔らかくて軽く平らげてしまった。もう胃袋はパンパン。1週間分の肉を食べた気分だ。