3.1 ニューラルネットワーク
単純な計算の積み重ね
この回で分かること
- ニューロン 1個の計算(重み付きの和 → 活性化関数)ができる
- 層を重ねると、1本の直線では分けられないものも分けられるようになる理由を説明できる
- パラメータの数と、ニューラルネットワークの強み・弱み(中身が読みにくい、大量のデータが要る)を説明できる
直感で理解する
2.4 のロジスティック回帰は、入力に重みを掛けて足し、シグモイド関数で0〜1に収めるものでした。実はこれが、ニューラルネットワークの部品である ニューロン 1個の計算そのものです。ニューラルネットワークとは、この単純な部品をたくさん並べ、何層にも重ねたものにすぎません。
では、なぜ重ねる必要があるのでしょう。「歩行者が、自車の進路の幅(中心から左右1.5mずつ)の中にいるか」を、歩行者の横の位置 x から判定する場合を考えます。危険なのは真ん中で、左右どちらに外れても安全です。ニューロン1個が引ける境界は1本だけなので、「−1.5より右」か「1.5より左」のどちらか一方しか表せません。
そこで、ニューロンを2個並べます。1個目は「左端より右にいるか」、2個目は「右端より左にいるか」を判定し、最後のニューロンが「両方ともはい」のときだけ「危険」と答えるようにします。これで、真ん中だけが危険という形を表せます。
本物のニューラルネットワークは、この部品を何百万個も使います。画像を扱うモデルなら、最初の層が色の変わり目のような単純な特徴を拾い、層が進むにつれて形・部品・物体全体と、より複雑なものを表すようになります(3.3 CNNと画像認識)。層をたくさん重ねたものを ディープラーニング(深層学習)と呼びます。
数式で確かめる
① 1個のニューロン
入力 x に重み w を掛けて足し(0.2 の内積)、バイアス b を足したものが z です。それを 活性化関数 f に通した a が、ニューロンの出力になります。f にシグモイド関数を使えば、2.4 のロジスティック回帰と同じです。
② 活性化関数
シグモイド関数(2.4)のほかに、深いネットワークでは次の ReLU がよく使われます。計算が軽く、深い層まで学習が進みやすいためです。
z がマイナスなら0、プラスならそのまま出す、というだけの関数です。活性化関数が要るのは、直線(1次式)を何回重ねても直線にしかならないからです。たとえば \(y = w_2(w_1 x + b_1) + b_2\) は、整理すると \((w_2 w_1)x + (w_2 b_1 + b_2)\) という1本の直線です。途中で「曲げる」関数をはさむことで、層を重ねる意味が生まれます。
③ 層を重ねる
ニューロンを並べたものを 層 と呼び、入力と出力の間の層を 隠れ層 と呼びます。層の計算は、行列 W(数を縦横に並べた表、記号表)を使ってまとめて書けます。
図の例では、σ をシグモイド関数として、
です。歩行者が真ん中(x = 0)にいれば、\(h_1 = h_2 = \sigma(6) \approx 1.00\) で、\(\hat{y} = \sigma(10 + 10 - 15) = \sigma(5) \approx 0.99\)(危険)。x = 3 m なら、\(h_1 \approx 1\)、\(h_2 = \sigma(-6) \approx 0\) で、\(\hat{y} \approx \sigma(-5) \approx 0.01\)(安全)。ちょうど端の x = 1.5 m では \(\hat{y} = 0.5\) です。
この例では、分かりやすいように重みを人が決めました。実際には、これらの重みは 2.3 の勾配降下法でデータから学びます。そのとき必要になる、たくさんの重みの傾きをまとめて計算する方法が、次の 3.2 誤差逆伝播法です。
④ パラメータの数
入力が n 個、ニューロンが m 個の層(すべての入力とニューロンがつながった 全結合層)には、重みが n × m 個、バイアスが m 個あります。32 × 32 画素のカラー画像(入力 32 × 32 × 3 = 3,072個)をニューロン100個の層に入れるだけで、パラメータは 3,072 × 100 + 100 = 307,300個。実際の画像認識のモデルは、数百万〜数十億のパラメータを持ちます。
理論上は、隠れ層のニューロンを十分に増やせば、どんな形の関数でもいくらでも近く表せることが知られています(万能近似定理)。ただし、表せることと、限られたデータからうまく学べることは別の問題です(2.6)。
自動運転との接点
- 認識の中心にある:カメラやLiDARからの物体の検出、道路や車線の見分け、周りの車の動きの予測などに、深いニューラルネットワークが使われています。→ 3.3 CNNと画像認識、3.4 物体検出とセグメンテーション
- 中身が読みにくい:2.2 や 2.4 のモデルは重みの意味を人が読めましたが、数百万の重みを持つネットワークでは、なぜその答えになったのかを重みから読み取るのは困難です。そのため安全の説明は、データと試験による確認や、判断の根拠を探る技術に頼ることになります。→ 3.9 説明可能性(XAI)、5.9 AIコンポーネントの安全
- 境界が複雑=思わぬ所で答えが変わる:複雑な境界を表せることは強みですが、入力のわずかな変化で境界をまたぎ、答えが大きく変わることもあります。→ 3.8 頑健性と敵対的サンプル
- 学習した範囲の外は保証がない:図の山の形は、学習したデータのある所でしか確かめられていません。見たことのない入力に対する出力は、どんな値にもなりえます。→ 2.8
- 決められた時間で計算を終える:車の中の計算機で、センサのデータが来るたびに決められた時間内に答えを出す必要があります。モデルを大きくすれば性能が上がるとは限らず、計算時間との釣り合いも設計します。→ 4.2 システムの全体像
まとめ
- ニューロンは「重み付きの和 + バイアス」を活性化関数に通すだけの部品。これを並べて層にし、何層も重ねたものがニューラルネットワーク
- 活性化関数(シグモイド・ReLU)で途中を「曲げる」ので、層を重ねると1本の直線では表せない複雑な境界を表せる
- パラメータは数百万〜数十億にもなり、表現力が高い反面、中身が読みにくく、大量のデータと慎重な確認が必要になる
確認クイズ
Q1. 入力 (x₁, x₂) = (2, 1)、重み (w₁, w₂) = (0.5, −1)、バイアス b = 0.5 のニューロンがあります。活性化関数が ReLU のとき、出力は?
z = 0.5 × 2 + (−1) × 1 + 0.5 = 0.5 で、ReLU(0.5) = 0.5 です。
Q2. z = −2 のとき、ReLU とシグモイド関数の出力はそれぞれいくつ?
ReLU は max(0, −2) = 0、シグモイド関数は \(1/(1 + e^{2}) \approx 0.12\) です。
Q3. 活性化関数を使わずに、層を10個重ねたネットワークを作りました。これは何と同じ?
1つの線形のモデル(2.2 の重み付きの和)と同じです。1次式を何回重ねても1次式なので、層を重ねた意味がなくなります。
Q4. 入力が100個、ニューロンが50個の全結合層のパラメータは何個?
重みが 100 × 50 = 5,000個、バイアスが50個で、合計5,050個です。
もっと知りたい人へ
- 次の回:3.2 誤差逆伝播法
- 関連:0.2 数式の読み方(内積・行列)、2.3 勾配降下法、2.4 ロジスティック回帰、2.6 過学習と正則化
- 用語集:ニューラルネットワーク、ニューロン・活性化関数、ReLU、ディープラーニング・隠れ層
- 解説動画:YouTube(約5分)(静止画のスライドと音声で要点を説明。英語版の記事には英語の動画があります)