EPOCH ・ 巻末解説

Arc 2「覚醒」

マンガ「EPOCH — 時代の前夜」Arc 2(ディープラーニング革命 1991-2017)の統合解説。

Scene 1: 冬を越えた者たち — 事前学習が開いた扉

所要時間: 約14分(読み物12分 + 確認問題2分)

前章のふりかえり

Arc 1 で、私たちはニューラルネットの基本を一通り手に入れた。

パーセプトロン → 多層ニューラルネット → 誤差逆伝播法。 そして過学習との戦い、正則化、評価指標。

道具は揃っている。理屈のうえでは、層を深く重ねるほど複雑な概念を表現できるはずだった。

ところが 2000 年代前半、その「はず」は現実になっていなかった。 3 層を超えて深くすると、むしろ精度が落ちる。 ニューラルネットは学会の片隅に追いやられ、資金も人も離れていった。

第二次 AI ブームのあとに来た、長い冬である。

この章は、その冬がどう明けたかの話だ。

復習:ニューラルネットは、どう学ぶのか

Arc 1 を読んでいない読者のために、ここで道具をひととおり組み立て直しておく。 本章の「深くすると学習できない」という話は、この手続きのどこが壊れるかの話だからだ。

その前に — 「学ぶ」には三つの型がある

何を手がかりにするかで、機械学習は大きく三つに分かれる。

手がかり 何をする この本での例
教師あり学習 正解ラベル 入力から正解を当てる 画像分類・翻訳・音声認識
教師なし学習 無し(データの形だけ) 似たもの同士を寄せる・構造を見つける この章の事前学習
強化学習 遅れて届く報酬 試して、良かった行動を強める Scene 7 の AlphaGo

Arc 2 で扱うものの多くは教師あり学習だ。 だがこの章の突破口になったのは、正解を使わない学習のほうだった。

1 個の計算点 — パーセプトロン

入力に重みを掛けて足し、閾値を超えたら 1 を出す。これが計算点 1 個の全部だ。

nn_perceptron.svg

Arc 1 では「合計が閾値 $\theta$ を超えたら」と書いた。ここでは $b = -\theta$ と置き直して、 バイアス $b$ を「つねに 1 を入れる入力」への重みとして式に畳み込んである。 同じことを言っているが、こう書くと式が 1 本にまとまり、以後バイアスも「重み」の一種として まとめて扱える。

ただしこの 1 個では、入力空間を直線 1 本でしか分けられない。 XOR(排他的論理和)のように直線で分けられない配置は、どう重みを動かしても解けない。 これが Arc 1 で AI を最初の冬へ送った壁だった。

層を重ねる — 多層パーセプトロン

計算点を並べて層にし、層を重ねる。第 $m$ 層の $j$ 番目から $i$ 番目へ向かう重みを $w^{(m)}_{ij}$ と書く。

nn_mlp.svg

層を重ねれば複雑な構造をいくらでも作れる——ように見えるが、ここに落とし穴がある。 1 次式を何段合成しても 1 次式にしかならない。何層積んでも、引けるのは直線 1 本だけだ。

活性化関数 — 直線の呪縛を解く

そこで、各層の出力に非線形な関数をはさむ。 つまり各層は「前の層の値に重みを掛けて足す」→「その和を活性化関数に通す」の 2 段で、 出てきた値がその層の値になる。これを層の数だけ繰り返して、入力から出力へ届く。

nn_activation.svg
関数 出力域 微分の最大値
シグモイド $1/(1+e^{-x})$ 0〜1 0.25
tanh $\tanh x$ −1〜1 1.0
ReLU $\max(0, x)$ 0〜∞ 1.0(x>0)

非線形をはさんだ瞬間、曲がった境界が引けるようになり、XOR も解ける。 2000 年代の主流はシグモイドだった。その「微分の最大値 0.25」が、この章の主題になる。

誤差逆伝播法 — 出口のズレを、入口へ返す

出力 $y$ と 正解 $\hat{y}$ の差を測り、それを小さくするように重みを動かす。

nn_loss.svg

測り方(損失関数)は二乗誤差なら $L=\frac{1}{2}\sum_k (y_k-\hat{y}_k)^2$。

重み 1 個を動かしたとき $L$ がどう動くかは、連鎖律で分解できる。

$$\frac{\partial L}{\partial w}=\frac{\partial L}{\partial y}\cdot\frac{\partial y}{\partial w}$$

あとは坂を下る方向へ、学習率 $\eta$ の歩幅で動かすだけだ。

   w ← w − η ∂L/∂w        これを出口側の層から入口側へ、順に繰り返す

出口で測った 1 個の誤差が、つなぎ目の重みに応じて分かれながら手前の層へ戻っていく。 線形な層なら、手前の層に届く量は「そのつなぎ目の重み × 出口でのズレ」になる。

nn_backprop.svg

マンガ Scene 1 で黎明が「ズレを逆向きにたどる」と言っていたのが、この計算だ。 あの場面でニューラルネットの上を右から左へ戻っていった矢印は、一本ずつがこの掛け算にあたる。 次章の勾配消失は、この掛け算に活性化関数の微分がもう 1 つ掛かることで起きる。

では、境界を動かして XOR の壁にぶつかり、活性化関数を ON/OFF して直線が曲がる瞬間を見て、 逆伝播の 1 ステップを数字で追える。

深くすると、なぜ学習できなくなるのか

層を深くするほど、誤差は入力側へ届く前に消えてしまう——勾配消失(Scene 1 第7ページ)
層を深くするほど、誤差は入力側へ届く前に消えてしまう——勾配消失(Scene 1 第7ページ)

誤差逆伝播法は、出口で測った誤差を入口へ向かって逆向きに伝え、 途中の重みを少しずつ直していく手続きだった。

問題は、その「逆向きに伝える」ときに何が起きるかにある。

  誤差を1層戻すたびに、活性化関数の微分が掛け算される。

  シグモイド関数の微分は、最大でも 0.25。

  5層戻ると   0.25^5 ≒ 0.001
  10層戻ると  0.25^10 ≒ 0.00000095

  → 入口側の層には、ほとんど何も届かない。

これが勾配消失問題(vanishing gradient problem)だ。

深い層の入口側は、学習が始まってもほぼ初期値のまま動かない。 つまり「深いネットワークを作った」のではなく、 「浅いネットワークの手前に、ランダムなゴミが積んである」状態になる。

しかも当時は、そのランダムな初期値から始めるしかなかった。 出発点が悪ければ、勾配降下法は近くの悪い谷(局所解)に落ちて出てこられない。

なぜ「初期値」が問題なのか

ここで、当時の主流だった手法と比べてみるとわかりやすい。

サポートベクターマシン (SVM) 深いニューラルネット
理論 最適解が保証される(凸最適化) 局所解に落ちる。保証なし
データ量 少なくてもよく効く 大量に要る
特徴量 人間が設計する 自動で学習する(はずだった)
当時の評価 手堅い本命 動かない挑戦者

SVM は「解が一意に決まる」という強さを持っていた。 対する深層ニューラルネットは、動く保証がない。 研究者が SVM を選ぶのは、当時としてはまったく合理的な判断だった。

だから問題はこう立てられる。

ランダムでない、「まともな初期値」を先に手に入れられないか?

先に考えてみる(答えられなくてOK)

Q: 正解ラベルを使わずに、ネットワークの重みを「意味のある値」に 近づけることはできるだろうか? 手がかりは、入力データそのものしかない。

→ 考えたら次へ。

層ごとに、教師なしで積み上げる

前の層の値から重みの初期値を事前学習で求め、深い層でも学習できるようにする(Scene 1 第8ページ)
前の層の値から重みの初期値を事前学習で求め、深い層でも学習できるようにする(Scene 1 第8ページ)

2006 年、トロント大学のジェフリー・ヒントンらが出した答えが 事前学習(pre-training)だ。

発想はこうだ。一気に全体を学習させるのをやめる。

  従来:  [入力]→[層1]→[層2]→[層3]→[出力]  を丸ごと逆伝播
         → 誤差が層1まで届かない

  事前学習:
    ① まず [入力]→[層1] だけを、正解ラベル無しで学習
    ② 次に [層1の出力]→[層2] だけを、同じく学習
    ③ 同様に [層2の出力]→[層3]
    ④ 最後に全体を、正解ラベル付きで微調整 (ファインチューニング)

各層を 1 枚ずつ、その層に流れてくるデータだけを頼りに学習する。 逆伝播が長い距離を旅する必要がないので、勾配は消えない。

何を目標に「教師なしで」学習するのか

正解ラベルが無いのに、何を目指して重みを動かすのか。 答えは「入力を、自分で復元できるようになれ」である。

オートエンコーダ(自己符号化器)がその代表だ。

  入力 x  →→ [符号化] →→  h  →→ [復号化] →→  x'
  (784次元)              (100次元)           (784次元)

  目標: x' が x に一致すること。正解ラベルは要らない。

  100次元しか通れない細い通路を通して元に戻せるなら、
  その 100 次元 h は「x の本質を圧縮したもの」になっているはずだ。

この h が、次の層への入力になる。 層を重ねたものを積層オートエンコーダ(stacked autoencoder)と呼ぶ。

ヒントンらがこのとき使ったもう一つの部品が 制限付きボルツマンマシン(RBM: Restricted Boltzmann Machine)である。 可視層と隠れ層の 2 層だけからなり、同じ層の中では結合しない(=制限付き)。 これを積み上げたネットワークが深層信念ネットワーク(DBN: Deep Belief Network)だ。

       [隠れ層]  ○ ○ ○ ○        同じ層の中は結合しない
                 │╳│╳│╳│        (=「制限付き」の意味)
       [可視層]  ○ ○ ○ ○ ○

RBM もオートエンコーダも、やっていることの核は同じ—— 正解ラベル無しで、入力データの構造そのものを写し取ることだ。

そして「ファインチューニング」

事前学習で得られた重みは、まだ答えを出せない。 これは良い初期値にすぎない。

最後に出力層を付け、正解ラベルを使って全体を誤差逆伝播で微調整する。 これがファインチューニング(fine-tuning)である。

  事前学習     : 教師なし。データの構造を写す。→ 良い初期値
  ファインチューニング : 教師あり。目的のタスクに合わせる。→ 完成

ランダムな出発点ではなく、データの構造をすでに反映した出発点から始める。 これだけで、深いネットワークが奥まで学習できるようになった。

冬が明けた——そして、事前学習は役目を終える

2006年、ヒントンが深層信念網を示す——AIの「冬」が明け、「学習の時代」が来た(Scene 1 第9ページ)
2006年、ヒントンが深層信念網を示す——AIの「冬」が明け、「学習の時代」が来た(Scene 1 第9ページ)

2006 年、ヒントンらは事前学習を用いた深いネットワークで、 手書き数字認識をはじめとする課題で当時の最高水準を更新した。 「深い構造は学習できない」という前提が崩れた瞬間である。

この前後から、深い層を持つニューラルネットの手法群は ディープラーニング(深層学習)と呼ばれるようになる。

ひとこと注: 「ディープラーニング」という語そのものは 2006 年の発明ではなく、 それ以前から別の文脈で使われていた。2006 年が転換点なのは、 深い構造が実際に学習できると示されたからだ。

ここで、正直に書いておくべきことがある。

事前学習は、現在ではほとんど使われていない。

  2006年: 事前学習でなければ深いネットは学習できなかった
     ↓
  2010年代: ReLU、より良い重み初期化 (Xavier / He)、
            バッチ正規化、そして大量のデータと GPU
     ↓
  現在: ランダム初期値から直接学習できる。事前学習の出番は消えた

では 2006 年の仕事は無駄だったのか。まったく逆だ。

事前学習は「深いネットワークには意味がある」ことを証明した。 その証明があったから、人と金が戻り、ReLU も GPU も ImageNet も追いかけてきた。 橋を架けたあとで、その橋が使われなくなることはある。 だが、渡った者がいなければ向こう岸には誰も行けなかった。

理解度チェック
Q1
事前学習が解決しようとした問題は?
  • a過学習
  • b勾配消失により、深い層の入口側が学習できない問題
  • c計算機の速度不足
  • dラベル付きデータの不足
答えを見る
正解 — b
誤差を逆向きに伝えると活性化関数の微分が繰り返し掛かり、 入口側の層にはほとんど届かない。事前学習は逆伝播の距離を短く保つことでこれを回避した。
Q2
オートエンコーダの学習で「正解」として使われるものは?
  • a人間が付けたクラスラベル
  • b入力データそのもの(自分自身を復元する)
  • cランダムに生成した目標値
  • d他のネットワークの出力
答えを見る
正解 — b
入力を圧縮してから復元し、元の入力との差を小さくする。 正解ラベルが要らないので「教師なし学習」に分類される。
Q3接続問題
Arc 1 で学んだ誤差逆伝播法は、事前学習の手順のどこで使われますか?
  • a事前学習の各層で使われ、ファインチューニングでは使わない
  • b主にファインチューニング(教師ありの微調整)で使われる
  • cまったく使われない
  • d出力層の設計にだけ使われる
答えを見る
正解 — b
事前学習は各層を局所的に(教師なしで)学習する段階。 そこで得た重みを初期値として、最後に全体を教師ありで微調整するのが ファインチューニングであり、ここで誤差逆伝播法を使う。

ここまでの Concept Map:

Arc 1 (復習)
パーセプトロン → 多層NN → 誤差逆伝播
過学習 / 正則化 / 評価指標
Arc 2 (進行中)
深層学習の幕開け (2006)
勾配消失シグモイドの微分 ≦0.25 が層ごとに掛かる
事前学習層ごとに教師なしで良い初期値を作る
オートエンコーダ / 積層オートエンコーダ
制限付きボルツマンマシン → 深層信念ネットワーク
ファインチューニング教師ありで全体を微調整
現在は ReLU・良い初期化・大量データに置き換えられた
= 学んだ | ▸ = 次章 | □ = これから

次章への問い

深いネットワークは学習できるようになった。 だが「学習できる」ことと「役に立つ」ことは違う。

機械が最初に実用の水準へ届いた分野——それは画像だった。

しかし Arc 1 の全結合ニューラルネットは、画像を「ただの数字の並び」としてしか 受け取れない。重みの数が爆発するうえに、猫が写る位置がずれただけで別物に見えてしまう

人間の視覚はそんな数え方をしていない。 では、どういう仕組みなら「どこにあっても猫は猫」と分かるのか?

→ 次章: 「機械が見た — CNN と畳み込みの魔法」

第 1 章「冬を越えた者たち — 事前学習が開いた扉」 読了
続きは製品版で読む →

試読はここまでです。第 2 章から先は、マンガ本編 8 話・巻末解説 8 章・インタラクティブ図解を収めた製品版でお読みいただけます。

製品版について →