← トップページへ戻る

機械学習を学ぼう ニューラルネットワーク編

教師あり学習と 3 層ニューラルネットワークの基本を中心に、 パーセプトロンや誤差逆伝播法の考え方を画面イメージとともに紹介します。

アプリアイコン

機械学習とは?

機械学習とは、データから規則や傾向を学び、新しい入力に対して予測や分類を行う技術です。 本アプリでは、身近な例を使いながら、入力から出力までの流れを理解できるようにしています。

文字認識のように、入力データから結果を推定する仕組みをテーマに、 実際の画面を見ながら学べる構成です。機械学習はすでに自動運転や医療画像の解析など、 さまざまな分野で活用されています。

教師あり学習

本アプリでは教師あり学習を中心に扱います。画像データを数値化し、 その入力に対して正解となる教師データを用意して学習させます。

たとえば文字画像なら、入力データに対して「これは A」などの答えを与えます。 このような正解付きデータを繰り返し用意することで、学習に時間はかかりますが、 入力に対する出力の精度を高めていけます。

入力データの分析画面
入力データを作成して分析する画面
教師データ一覧画面
教師データを一覧で管理する画面

どうなれば学習できたことになる?

学習できたといえるのは、教師データに合うだけでなく、未知の入力に対しても 妥当な出力を返せるネットワークになったときです。文字認識なら、入力データは 各画素の濃さの集合となり、出力データは各文字である確率になります。

たとえば「A である可能性 92%、B である可能性 1%」のように、 複数候補の確率として表現されます。このようなネットワークを ニューラルネットワークと呼びます。

入力データの値の説明画像
入力データの画素から入力層の値を決定
ニューラルネットワークの構造図
矢印の数値を調整して学習済みの状態に近づけます

パーセプトロンについて

ニューラルネットワークは複数のパーセプトロンから構成されます。 パーセプトロンは複数の入力値に矢印の重みを掛け算し、足し算を行い、 さらにバイアスを加える基本単位です。

ネットワークの数式画面
1つのユニットがどのように計算するかを画面で確認できます
0.3 × -0.33 + 0.4 × 0.44 + 0.11 = 0.187

この値をそのまま使うのではなく、活性化関数であるシグモイド関数を通すことで、 0 から 1 の範囲の出力に変換します。

1 / (1 + exp(-0.187)) = 0.5466
入力データの値を説明するヘルプ画面
入力値と出力値の関係をヘルプ画面で確認

どうやって学習する?

答えを適切に出力するためには、矢印に適切な値を更新する必要があります。 学習開始時点ではランダムな値から始め、教師データと出力結果の差を見ながら、 繰り返し値を調整していきます。

本アプリでは、学習条件をまとめたケースを追加しながら、入力層・隠れ層・出力層の 設定も行えます。そのため、学習の準備段階から全体の流れを把握できます。

ケースの追加画面
ケースを追加してネットワーク構成を設定
ケース設定画面
入力層・隠れ層・出力層の数を調整可能

誤差逆伝播法(バックプロパゲーション)

学習を進めるには、教師データから出力との差を確認し、その誤差をもとに どの矢印の値をどれだけ修正するかを決める必要があります。 誤差逆伝播法はこの調整を効率よく行う方法です。

出力層で生じた誤差を手掛かりに、中間層、入力層へと順番に影響をたどり、 それぞれの重みを少しずつ更新します。こうして学習を繰り返すことで、 出力は徐々に教師データへ近づいていきます。

  1. 教師データとの差から誤差を求める
  2. 誤差をもとに重みの変化量を計算する
  3. 各矢印の値を更新して再学習する
誤差逆伝播法の途中計算 1
出力側での誤差計算例
誤差逆伝播法の途中計算 2
更新後の重みの反映例

ニューラルネットワークからディープラーニングへ

このアプリでは、隠れ層が 1 つの 3 層ニューラルネットワークを主に扱っています。 さらに多くの層を重ねると、より複雑な特徴を段階的に学習できるようになり、 画像認識や音声認識などでも活用されるディープラーニングへつながります。

層が深くなるほど計算量や過学習などの課題も増えますが、 活性化関数や Dropout、バッチ正規化などの技術によって実用性が高まっています。

ネットワーク表示画面
ネットワーク全体の状態を視覚的に確認できます
分析結果の画面
学習結果を確率として比較表示