ニューラルネットで数字を読む · NeuroLab
ニューラルネットワークによる手書き数字の認識:手書きパッドに数字を書くと、信号が 3D のニューラルネットワークを層ごとに照らして答えを出します。1 個のニューロンの重みを自分で描き、ランダムな重みからブラウザーの中でその場で学習させ、畳み込みカーネルが画像を走査する様子を見て、回転・平行移動・ノイズで AI がどう間違えるかを確かめます。
章の内容
画像は数の集まり
右の手書きパッドに数字を書いてみましょう。数字は 28 × 28 の小さなマスに縮められ、1 マスが 1 つの画素(ピクセル)です。明るさは 0(黒)から 1(白)までの数で表します。ブロックが高く明るいほど、その画素の数は大きくなります。
つまりコンピューターにとって、この画像は 784 個の数にすぎません。この先の「認識」はすべて、この 784 個の数の足し算・引き算・掛け算・割り算です。
書いた数字には先に前処理をします。筆跡を枠で囲み、20 × 20 に収まるよう縮め、「重心」が中央に来るように置きます。学習に使う MNIST データセット(実際の手書き数字 7 万枚)も同じように整えてあるので、大きさや位置が違っても大丈夫です。
1 個のニューロン
ニューロンがすることは 1 つだけです。784 個の画素それぞれに重みを掛けてすべて足し、バイアス b を加えて z を求め、それを活性化関数に通して出力 a にします。
床のブロックは高さが画素、色が重みです。青は正の重み(ここに筆跡があると加点)、オレンジは負の重み(ここに筆跡があると減点)。大きな球につながる線が明るいほど、その画素の寄与が大きいことを表します。
右のブラシを選び、床のブロックの上をドラッグして「重みを描いて」みましょう。「1」だけに反応するニューロンを設計してみてください。中央の縦線を青に、両側をオレンジに塗り、「1 を試す」「0 を試す」で確かめます。
多層ネットワーク
たくさんのニューロンを層に並べます。第 1 層の 32 個はそれぞれ画像全体を見て、第 2 層の 16 個は第 1 層の結果を見ます。最後の 10 個の出力ニューロンが 0〜9 を表します。出力は softmax で確率になり、いちばん高いものが認識結果です。
数字を書いて、信号が左から右へ層ごとに流れていく様子を見てみましょう。線は寄与の大きいものだけを描いています。青い線は「賛成」、オレンジの線は「反対」です。
第 1 層のブロックをどれかクリックすると、その 784 個の重みを並べた画像が頭上に浮かびます。これが、そのニューロンが探している筆跡の形です。この重みは人が設計したものではなく、ネットワークが 6 万枚の手書き数字を見て自分で学んだものです。
その場で学習
今回はネットワークの重みがすべて乱数で、何もできません。「学習を始める」を押すと、答え付きの手書き数字 3000 枚を 1 枚ずつ見ていきます。まず予想し、損失で予想がどれだけ外れたかを測り、損失が小さくなる方向へすべての重みを少しずつ動かします。これが勾配降下法です。
第 1 層の上に浮かぶ 32 枚の重みの画像を見てください。最初は砂嵐のようなノイズですが、学習が進むにつれて少しずつ筆跡の形が現れます。右のグラフでは、損失が下がり正解率が上がっていきます。
1 歩でどれだけ動くかは学習率で決まります。小さすぎると学習が遅く、大きすぎると谷底の両側を行ったり来たりし、かえって悪くなることもあります。学習が終わったら一時停止して、手書きパッドで試してみましょう。
畳み込みネットワーク
多層ネットワークの各ニューロンは画像全体を見ているので、数字の位置が少しずれるだけで分からなくなります。畳み込みネットワークは発想を変えました。5 × 5 の小さな窓(カーネル)を画像の上で 1 マスずつずらし、あらゆる場所で「探している筆跡がここにあるか」を調べ、その結果を並べて特徴マップにします。
第 1 層には 6 個のカーネルがあり、横・縦・斜めといった単純な筆跡を探します。プーリングは 2 × 2 ごとに最大値だけを残すので、マップは小さくなりますが特徴は残ります。第 2 層の 12 個のカーネルは単純な筆跡を組み合わせて角や曲線を見つけ、最後にどの数字かを判断します。
「走査アニメーション」を見てから、好きな特徴マップをクリックしてカーネルを見てみましょう。多層ネットワークよりパラメーターがずっと少ないのに、正解率はむしろ高いのです。
AI も間違える
数字を回転させたり、隅に寄せたり、ノイズを加えたりして、右の確信度が少しずつ崩れていく様子を見てみましょう。学習中にこういう画像を見たことがないので、すぐに間違えます。多層ネットワークは特に位置に弱く、畳み込みネットワークはもう少し安定していますが、間違えないわけではありません。
「間違えた数字を見る」を押すと、テストデータの中で本当に間違えた例をめくれます。人でも迷うものもあります。次に手書きパッドに笑顔や文字を描いてみましょう。0〜9 しか知らず「わからない」という選択肢がないので、それでも自信満々に数字を答えます。
つまり AI の判断は学習データがどれだけ偏りなくそろっているかに左右されます。大事なことは、やはり人が確かめる必要があります。
ほかの実験
- VoltLab 電気実験台
- 等高線 3D 教室
- 大気大循環の粒子教室
- 地球の運動の授業
- 潮汐のしくみ · TideLab
- 海陸の変遷
- 水循環 3D ジオラマ · WaterCycle
- 細胞 · 三次元構造
- 顕微鏡実験台 · MicroLab
- メンデルのエンドウ交雑実験 · PeaLab
- 細胞のエネルギー通貨 · ATPLab
- DNA の構造 · DNALab
- 体液性免疫 · ImmuneLab
- 植物の一生 · PlantLab
- 元素周期表 · PeriodicLab
- 実験室での気体の製法 · GasLab
- 化学分析実験台 · AnalytLab
- 反応機構 · 分子アニメーション
- 分子の形状 · VSEPR
- 原子軌道 · 電子雲
- 化学反応 · ミクロの世界
- 空間図形 · GeoSpace
- 二次曲線 · ConicLab
- 関数のグラフ · FuncLab
- 定規とコンパスによる作図 · ConstructLab
- 三平方の定理 · PythagoLab
- 数学のふしぎ · WonderLab
- 運動と力 · MotionLab
- 単純機械 · MachineLab
- 液体の圧力と浮力 · FloatLab
- 神舟の打ち上げと帰還 · RocketLab
- 熱力学 · ThermoLab
- 熱の伝わり方と状態変化 · HeatLab
- 光学実験台 · OpticsLab
- 振動と波 · WaveLab
- 電場と磁場 · FieldLab
- 著名な戦いの作戦沙盤 · WarTable
- 疆域の変遷 · HistoryAtlas