ニューラルネットワークの基本

小さなネットワークを実際に訓練して、しくみを見る

1 / 16

ニューラルネットワークは、例から規則を学ぶ。

これまでのプログラム

人が規則を書く

規則をそのままコードにする。 例:気温が30度以上なら「暑い」と表示する。

ニューラルネットワーク

例から規則を学ぶ

入力と正解の組(例)をたくさん見せる。 規則は数値として学ばれる。この数値を重みと呼ぶ。

画像の認識、翻訳、文章を作るAIも、この仕組みが土台です。

この資料では小さなネットワークを実際に訓練し、賢くなっていく様子を見ます。

2 / 16

1つのニューロンは、重み付きの足し算。

入力1が1.0、入力2が0.5。重み0.8と−0.4を掛けて足し、バイアス0.1を加えると0.7。活性化関数ReLUを通した出力は0.7。

入力に重みを掛けて足し、バイアスを加えます。重みは、その入力をどれだけ重く見るかを表す数です。

最後に活性化関数を通します。ReLUは、マイナスなら0、プラスならそのまま出します。

3 / 16

ニューロンを層に並べて、つなぐ。

入力層2個、隠れ層6個が2層、出力層1個のネットワーク。隣り合う層のニューロンは、すべて線でつながっている。

前の層の出力が、次の層の入力になります。線の1本1本が重みです。

この例は重み54個とバイアス13個、合わせて67個の数を訓練で調整します。文章を作るAIのGPT-3では、1750億個です。

4 / 16

活性化関数があるから、境界を曲げられる。

内側(青)と外側(橙)の点を、2つのネットワークで見分けた結果。活性化関数なしでは境界が1本の直線で、正解率51%。活性化関数ReLUありでは多角形の境界が内側を囲み、正解率100%。

例題は、点の位置(横・縦)から内側か外側かを見分けること。活性化関数がないと、何層重ねても計算は直線的なままです。

どちらも同じ形のネットワークを、同じデータで300エポック訓練した結果です。

5 / 16

予測と正解のずれを、損失で測る。

予測 0.9

正解(内側=1)に近い。 損失 0.11

予測 0.6

まだ迷っている。 損失 0.51

予測 0.2

外れている。 損失 1.61

出力は「内側らしさ」を0〜1で表します。正解が内側なら、1に近いほど良い予測です。

損失は、ずれを1つの数にしたものです。外れるほど大きく、訓練では全データの損失の平均を小さくしていきます。

計算方法

この資料では、ログ損失(交差エントロピー)を使っています。

6 / 16

勾配をたどって、損失の谷を下る。

損失の谷を、3つの学習率で8歩ずつ下る動き。学習率0.04では少しずつしか進まず、0.3では数歩で底に近づき、1.03では底を行き過ぎて損失が増えていく。

勾配は、重みを少し動かしたときに損失がどちらへどれだけ変わるかを表す傾きです。

傾きと逆向きへ、学習率×勾配だけ重みを動かします。これを繰り返すのが勾配降下法です。学習率が大きすぎると、底を行き過ぎます。

7 / 16

訓練の1回は、4つの手順。

内側の点(横−0.11、縦0.36)で、順伝播により予測0.60を出し、損失0.51を測る。逆伝播で出力側から勾配をさかのぼり、重みを更新すると、予測は0.75、損失は0.28になる。

逆伝播(誤差逆伝播法)は、出力側から入力側へ順にさかのぼり、すべての重みの勾配を求める方法です。

図は、内側の点1つで1回だけ更新した例です。予測は0.60から0.75へ正解に近づき、損失は0.51から0.28へ下がりました。

8 / 16

訓練の様子:境界が少しずつ形になる。

訓練の記録をエポック0から300まで再生する。左は重みの線の太さと色が変わる様子。中央は内側と外側を分ける境界が、でたらめな直線から内側を囲む多角形へ変わる様子。右は損失が0.66から0.03へ下がる様子。正解率は53%から100%になる。

最初の重みはランダムなので、境界はでたらめです(正解率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

単位損失 期間0〜1100エポック 出典この資料の実験(訓練30点・検証1000点)

訓練に使っていないデータ(検証データ)でも損失を測ります。訓練データの損失だけが下がり続けたら、過学習のサインです。

検証データの損失が上がり始めたら訓練を止める(早期終了)、データを増やす、などで防ぎます。

11 / 16

訓練は、重みを少しずつ直す繰り返し。

  1. 順伝播

    入力から予測を計算する。

  2. 損失

    予測と正解のずれを1つの数で測る。

  3. 逆伝播

    出力側からさかのぼり、各重みの勾配を求める。

  4. 更新

    学習率×勾配だけ、重みを動かす。

この4つを、バッチごと・エポックごとに繰り返します。

訓練が終わると重みは固定されます。新しい入力には、順伝播だけで答えを出します。

12 / 16

用語集|ネットワークの部品

ニューロン

入力に重みを掛けて足し、活性化関数を通して出力する計算の単位。

重み

入力をどれだけ重く見るかを表す数。訓練で調整する。

バイアス

重み付きの足し算に加える数。これも訓練で調整する。

活性化関数

計算に折れ曲がりを入れる関数。ReLUやシグモイドがある。

層

ニューロンの並び。入力層・隠れ層・出力層がある。

13 / 16

用語集|訓練のしくみ

損失

予測と正解のずれを表す数。小さいほど良い。

勾配

重みを動かしたときの、損失の変わり方(傾き)。

勾配降下法

勾配と逆向きへ少しずつ重みを動かし、損失を下げる方法。

誤差逆伝播法

出力側からさかのぼり、すべての重みの勾配を求める方法。

学習率

1回の更新で重みを動かす幅。

14 / 16

用語集|訓練の進め方

バッチ

1回の更新に使うデータのまとまり。

エポック

訓練データ全体を1周すること。

検証データ

訓練に使わず、新しいデータでの出来を確かめるためのデータ。

過学習

訓練データにだけ合いすぎて、新しいデータで外れること。

15 / 16

自分で動かして、確かめる。

もっと知りたいとき

16 / 16