ニューラルネットワークの基本
小さなネットワークを実際に訓練して、しくみを見る
1 / 16ニューラルネットワークは、例から規則を学ぶ。
画像の認識、翻訳、文章を作るAIも、この仕組みが土台です。
この資料では小さなネットワークを実際に訓練し、賢くなっていく様子を見ます。
2 / 161つのニューロンは、重み付きの足し算。
入力に重みを掛けて足し、バイアスを加えます。重みは、その入力をどれだけ重く見るかを表す数です。
最後に活性化関数を通します。ReLUは、マイナスなら0、プラスならそのまま出します。
3 / 16ニューロンを層に並べて、つなぐ。
前の層の出力が、次の層の入力になります。線の1本1本が重みです。
この例は重み54個とバイアス13個、合わせて67個の数を訓練で調整します。文章を作るAIのGPT-3では、1750億個です。
4 / 16活性化関数があるから、境界を曲げられる。
例題は、点の位置(横・縦)から内側か外側かを見分けること。活性化関数がないと、何層重ねても計算は直線的なままです。
どちらも同じ形のネットワークを、同じデータで300エポック訓練した結果です。
5 / 16予測と正解のずれを、損失で測る。
正解(内側=1)に近い。 損失 0.11
まだ迷っている。 損失 0.51
外れている。 損失 1.61
出力は「内側らしさ」を0〜1で表します。正解が内側なら、1に近いほど良い予測です。
損失は、ずれを1つの数にしたものです。外れるほど大きく、訓練では全データの損失の平均を小さくしていきます。
計算方法
この資料では、ログ損失(交差エントロピー)を使っています。
勾配をたどって、損失の谷を下る。
勾配は、重みを少し動かしたときに損失がどちらへどれだけ変わるかを表す傾きです。
傾きと逆向きへ、学習率×勾配だけ重みを動かします。これを繰り返すのが勾配降下法です。学習率が大きすぎると、底を行き過ぎます。
7 / 16訓練の1回は、4つの手順。
逆伝播(誤差逆伝播法)は、出力側から入力側へ順にさかのぼり、すべての重みの勾配を求める方法です。
図は、内側の点1つで1回だけ更新した例です。予測は0.60から0.75へ正解に近づき、損失は0.51から0.28へ下がりました。
8 / 16訓練の様子:境界が少しずつ形になる。
最初の重みはランダムなので、境界はでたらめです(正解率53%)。更新を重ねると損失が0.66から0.03へ下がり、300エポックで正解率は100%になりました。
グラフとアニメーションは、この資料のために実際に訓練した記録から描いています。
9 / 16バッチ・エポック・学習率
1回の更新に使うデータのまとまり。 この例は24点。
全データを1周すること。 240点÷24点で、1エポックに10回更新。
1回の更新で重みを動かす幅。 この例は0.03。
この例では300エポック、合わせて3000回の更新で訓練しました。
どれも訓練の前に人が決める値です。データやネットワークに合わせて調整します。
10 / 16過学習:訓練データにだけ合いすぎる。
訓練データの損失は下がり続けるのに、新しいデータでは外れていく
この図をテキストで読む
検証データの損失は200エポックを境に上がる(折れ線グラフ) 訓練データの損失は下がり続けるのに、新しいデータでは外れていく 【訓練データ】 - 0: 0.76 - 100: 0.4 - 200: 0.32 - 300: 0.27 - 400: 0.23 - 500: 0.2 - 600: 0.17 - 700: 0.15 - 800: 0.13 - 900: 0.11 - 1000: 0.09 - 1100: 0.08 【検証データ】 - 0: 0.77 - 100: 0.58 - 200: 0.55 - 300: 0.56 - 400: 0.62 - 500: 0.68 - 600: 0.77 - 700: 0.85 - 800: 0.94 - 900: 1.03 - 1000: 1.11 - 1100: 1.18
訓練に使っていないデータ(検証データ)でも損失を測ります。訓練データの損失だけが下がり続けたら、過学習のサインです。
検証データの損失が上がり始めたら訓練を止める(早期終了)、データを増やす、などで防ぎます。
11 / 16訓練は、重みを少しずつ直す繰り返し。
-
順伝播
入力から予測を計算する。
-
損失
予測と正解のずれを1つの数で測る。
-
逆伝播
出力側からさかのぼり、各重みの勾配を求める。
-
更新
学習率×勾配だけ、重みを動かす。
この4つを、バッチごと・エポックごとに繰り返します。
訓練が終わると重みは固定されます。新しい入力には、順伝播だけで答えを出します。
12 / 16用語集|ネットワークの部品
入力に重みを掛けて足し、活性化関数を通して出力する計算の単位。
入力をどれだけ重く見るかを表す数。訓練で調整する。
重み付きの足し算に加える数。これも訓練で調整する。
計算に折れ曲がりを入れる関数。ReLUやシグモイドがある。
ニューロンの並び。入力層・隠れ層・出力層がある。
用語集|訓練のしくみ
予測と正解のずれを表す数。小さいほど良い。
重みを動かしたときの、損失の変わり方(傾き)。
勾配と逆向きへ少しずつ重みを動かし、損失を下げる方法。
出力側からさかのぼり、すべての重みの勾配を求める方法。
1回の更新で重みを動かす幅。
用語集|訓練の進め方
1回の更新に使うデータのまとまり。
訓練データ全体を1周すること。
訓練に使わず、新しいデータでの出来を確かめるためのデータ。
訓練データにだけ合いすぎて、新しいデータで外れること。
自分で動かして、確かめる。
もっと知りたいとき
-
TensorFlow Playground
ブラウザ上で層や学習率を変えて、訓練を試せます。
-
Google 機械学習集中講座:ニューラルネットワーク
活性化関数や誤差逆伝播法を、日本語で学べます。
-
3Blue1Brown:ニューラルネットワークとは
仕組みを動く図で説明する動画です(英語)。