ディープラーニングへのモチベーションとその歴史とインスピレーション

$$\gdef \sam #1 {\mathrm{softargmax}(#1)}$$ $$\gdef \vect #1 {\boldsymbol{#1}} $$ $$\gdef \matr #1 {\boldsymbol{#1}} $$ $$\gdef \E {\mathbb{E}} $$ $$\gdef \V {\mathbb{V}} $$ $$\gdef \R {\mathbb{R}} $$ $$\gdef \N {\mathbb{N}} $$ $$\gdef \relu #1 {\texttt{ReLU}(#1)} $$ $$\gdef \D {\,\mathrm{d}} $$ $$\gdef \deriv #1 #2 {\frac{\D #1}{\D #2}}$$ $$\gdef \pd #1 #2 {\frac{\partial #1}{\partial #2}}$$ $$\gdef \set #1 {\left\lbrace #1 \right\rbrace} $$ % My colours $$\gdef \aqua #1 {\textcolor{8dd3c7}{#1}} $$ $$\gdef \yellow #1 {\textcolor{ffffb3}{#1}} $$ $$\gdef \lavender #1 {\textcolor{bebada}{#1}} $$ $$\gdef \red #1 {\textcolor{fb8072}{#1}} $$ $$\gdef \blue #1 {\textcolor{80b1d3}{#1}} $$ $$\gdef \orange #1 {\textcolor{fdb462}{#1}} $$ $$\gdef \green #1 {\textcolor{b3de69}{#1}} $$ $$\gdef \pink #1 {\textcolor{fccde5}{#1}} $$ $$\gdef \vgrey #1 {\textcolor{d9d9d9}{#1}} $$ $$\gdef \violet #1 {\textcolor{bc80bd}{#1}} $$ $$\gdef \unka #1 {\textcolor{ccebc5}{#1}} $$ $$\gdef \unkb #1 {\textcolor{ffed6f}{#1}} $$ % Vectors $$\gdef \vx {\pink{\vect{x }}} $$ $$\gdef \vy {\blue{\vect{y }}} $$ $$\gdef \vb {\vect{b}} $$ $$\gdef \vz {\orange{\vect{z }}} $$ $$\gdef \vtheta {\vect{\theta }} $$ $$\gdef \vh {\green{\vect{h }}} $$ $$\gdef \vq {\aqua{\vect{q }}} $$ $$\gdef \vk {\yellow{\vect{k }}} $$ $$\gdef \vv {\green{\vect{v }}} $$ $$\gdef \vytilde {\violet{\tilde{\vect{y}}}} $$ $$\gdef \vyhat {\red{\hat{\vect{y}}}} $$ $$\gdef \vycheck {\blue{\check{\vect{y}}}} $$ $$\gdef \vzcheck {\blue{\check{\vect{z}}}} $$ $$\gdef \vztilde {\green{\tilde{\vect{z}}}} $$ $$\gdef \vmu {\green{\vect{\mu}}} $$ $$\gdef \vu {\orange{\vect{u}}} $$ % Matrices $$\gdef \mW {\matr{W}} $$ $$\gdef \mA {\matr{A}} $$ $$\gdef \mX {\pink{\matr{X}}} $$ $$\gdef \mY {\blue{\matr{Y}}} $$ $$\gdef \mQ {\aqua{\matr{Q }}} $$ $$\gdef \mK {\yellow{\matr{K }}} $$ $$\gdef \mV {\lavender{\matr{V }}} $$ $$\gdef \mH {\green{\matr{H }}} $$ % Coloured math $$\gdef \cx {\pink{x}} $$ $$\gdef \ctheta {\orange{\theta}} $$ $$\gdef \cz {\orange{z}} $$ $$\gdef \Enc {\lavender{\text{Enc}}} $$ $$\gdef \Dec {\aqua{\text{Dec}}}$$
🎙️ Yann LeCun

コースの予定

  • 教師あり学習、ニューラルネット、ディープラーニングの基礎
  • 誤差逆伝播法とアーキテクチャの要素
  • 畳み込みニューラルネットワークとその応用
  • 更に多くのディープラーニングのアーキテクチャについて
  • 正規化と最適化で知っておくと役立つポイントとディープラーニングがどのようにタスクを行うかについての理解
  • エネルギーベースモデル
  • 自己教師あり学習とそれ以上のこと

ディープラーニングのインスピレーションとその歴史

ディープラーニングは概念レベルでは脳の一部をきっかけとして誕生しましたが脳の詳細全てに関係する訳ではありません。同じようなこととして飛行機は鳥から着想を得ましたが飛行機と鳥が空を飛ぶ原理は根本的に違うということが挙げられます。

ディープラーニングの歴史は現在では人工頭脳学と呼ばれるかつて存在した分野にまで遡ります。1940年代にMcCullochとPittsが扱い始め、ニューロンはオンとオフの状態がある閾値をもつ要素であるという考えに至りました。ニューロンを繋ぎ合わせることでブール回路を作れば論理的推論を行うことができるのではないかと考えられました。基本的にはニューロンの二値性のため脳は論理的推論を行う機械であると言えます。ニューロンは入力情報の重み付き和を計算しニューロンそれ自身が持つ閾値と比較します。もし計算された和が閾値より高ければニューロンはオン状態になり、閾値以下ではオフ状態になりますが、これがニューラルネットワークがなぜうまく機能するのかを説明できる簡略化された見方です。

1947年、Donald Hebbは脳内にあるニューロンが他のニューロン間の結びつきの強さを変えることで学習ができるという考えに至りました。この考え方はハイパーラーニングと呼ばれ、もし二つのニューロンが同時に活性化すれば結びつきが強くなり、そうでなければ結びつきを弱めるということを意味します。

1948年終盤には、センサーとアクチュエータを用いたシステムでフィードバックループと自己抑制を備えたシステムを構築することができるという考え方が人工頭脳学としてNorbert Wienerによって提唱されました。自動車のフィードバックの仕組みは全てここから来ています。

1857年にはFrank Rosenblattがとても単純なニューラルネットワークの重みを変化させるという学習アルゴリズムであるパーセプトロンというものを提唱しました。

総合的に見ると、ニューロンの仕組みを真似することで知能機械を生み出そうというコンセプトは1940年代に生まれ、1950年代に注目を集めたものの1960年代後半には完全に廃れたものとなりました。1960年代にこうなってしまった理由としては:

  • 誤差逆伝播法をうまく行うためには連続である活性化関数を使う必要がありましたが、研究者はニューロンが完全に二値を取るものとして扱っていました。その当時、連続的なニューロンを用いるという考え方には至らず、二値のみを取るニューロンは微分不可であり勾配を計算して学習を行えるとは考えませんでした。
  • 連続なニューロンを使う場合、重み付き和による作用を求めるにはニューロンの活性化値と重みの積を取る必要があると考えられていましたが、1980年以前は二つの数値(特に浮動小数点の値)同士の積をコンピューター上で求めるのは非常に低速であったこともあり連続の活性化関数はあまり現実的ではありませんでした。

1985年に誤差逆伝播法の誕生とともにディープラーニングが再び注目され始めたものの、1995年には過去のものとなり機械学習の分野ではニューラルネットの考え方には誰も見向きもしなくなりました。2010年代初頭には音声認識の分野でニューラルネットが利用され始めて良い結果を残し、その後商用目的で広く使われました。2013年にはニューラルネットがコンピュータビジョンの分野で幅広く使われ始め、2016年には自然言語処理の分野でも幅広く使われ始めました。ロボティクス、制御、その他の分野でも同様の変化が起こるでしょう。

教師あり学習

$90\%$のディープラーニングの利用例が教師あり学習を用いています。教師あり学習とは、入力と対応する出力の組み合わせをたくさん使って入力情報から正しい出力を出すようにコンピューター上のシステムに学習させることです。もし出力が正解なら何もせず、もし不正解なら正しい出力を出せるようにシステムのパラメーターを変更します。ここで重要なのはどの方向にどれだけパラメーターを変化させるかを求めることであり、勾配計算と誤差逆伝播法を使うこととなります。

教師あり学習はパーセプトロンとアダラインから派生しています。アダラインはパーセプトロンと同じですが重み付きの入力を使います。入力がある閾値より大きければオン状態になり、そうでなければオフ状態になります。パーセプトロンは二層のニューラルネットであり、一層目は固定されていますが二層目は訓練可能です。ほとんどの場合、一層目はランダムに決められ連想層と呼ばれます。

パターン認識の歴史と勾配降下法への導入

前述の内容はディープラーニングが普及する前にパターン認識の分野で取り入れられていた基本的なコンセプトです。特徴量抽出器と学習可能分類器を使うことがパターン認識においては一般的でした。例えば顔認識を行いたい時に目を検出することなど、入力されたデータの関連性のある有用な特徴を抽出します。そして得られた特徴量ベクトルを用いて学習可能な分類器で重み付き和を計算し閾値と比較します。パーセプトロンや一層だけのニューラルネットワークが用いるべき学習可能な分類器の候補となります。ただこの場合、人の手によって特徴量抽出を行う必要があり問題となります。つまりパターン認識とコンピュータビジョンにおいては、ある問題に対して使えそうな特徴抽出器の検討に注意が行きがちで、学習可能な分類器の設計はあまり重要視されないということです。

ディープラーニングが出現し成熟した頃には、その二段階プロセスが数々の部品が繋ぎ合わさったものへと変貌していました。それらの部品それぞれが調整可能なパラメータと非線形性を持っており、重なり合って複数の階層を構成します。これが「ディープラーニング」と呼ばれる所以です。ここで線形ではなく非線形性を与えるのはもし2つの層が両方とも線形性を持つならそれらは一つの線形の層で表すことができるためです。

訓練可能なパラメータと非線形性を持つ複数層を持つアーキテクチャで最も単純なものとしては、画像や音がベクトル表現として入力され、訓練可能な重みとの積となり、そしてその積の要素一つずつに対してReLUのような非線形関数を適用するものです。このプロセスを繰り返すことにより基本的なニューラルネットワークとなります。これがニューラルネットワークと呼ばれているのは、このアーキテクチャが入力の要素の重み付き和を、行列の列に対応させながら計算するからです。

教師あり学習の話に戻ると、実際の出力内容と出力されるべき内容とで距離・ペナルティ・ダイバージェンスを計算して比較し、損失となる目的関数の最適化を行います。そして、このコスト関数を訓練データ全体で平均し最小化したいと考えます。言い換えれば、この平均値が最小となるようなパラメーターの値を求めたいということです。

そのパラメータを求めるためには勾配計算を行います。例えば、霧の出た夜中に平滑な山で道に迷ってしまい、谷にある村に向かおうとしているとしましょう。その場で周囲を見てどの方向に進むのが下り勾配が最も急になるかを見つけその方向に一歩進みます。その方向は(負の)勾配(グラーディエント)となります。もし谷が下に凸であることを仮定すればこの方法で谷底に辿りつくことができ、一つの方法として考えられます。

更に効率的な方法としては確率的勾配降下法(Stochastic Gradient Descent - SGD)が挙げられます。訓練データ全体での損失の平均値の最小化を行いたいのですから、サンプルの一部を選んで誤差を計算し勾配降下法を用い、またサンプル別の部分を用いて新しい誤差を計算し勾配を取得します。このとき基本的には新しい勾配はその前のもととは異なる値を取ります。SGDを用いる主な理由としては、訓練データが非常に大きいときにでも素早く収束に至りやすいことが経験的に知られていることと、様々なデータセットに対して同様の結果が得られるかを表す汎化性能が良くなりやすいことの二つがあります。

誤差逆伝播法による勾配の計算方法

誤差逆伝播法による勾配の計算は連鎖則の実用的な応用であり、入力に関しての勾配を求める誤差逆伝播の式は以下のようになります:

\[\begin{aligned} \frac{\partial C}{\partial \boldsymbol{x}_{i - 1}} &= \frac{\partial C}{\partial \boldsymbol{x}_i}\frac{\partial \boldsymbol{x}_i}{\partial \boldsymbol{x}_{i - 1}} \\ \frac{\partial C}{\partial \boldsymbol{x}_{i - 1}} &= \frac{\partial C}{\partial \boldsymbol{x}_i}\frac{\partial f_i(\boldsymbol{x}_{i - 1}, \boldsymbol{w}_i)}{\partial \boldsymbol{x}_{i - 1}} \end{aligned}\]

重みに関しての勾配を求める誤差逆伝播の式は以下のようになります:

\[\begin{aligned} \frac{\partial C}{\partial \boldsymbol{w}_{i}} &= \frac{\partial C}{\partial \boldsymbol{x}_i}\frac{\partial \boldsymbol{x}_i}{\partial \boldsymbol{w}_{i}} \\ \frac{\partial C}{\partial \boldsymbol{w}_{i}} &= \frac{\partial C}{\partial \boldsymbol{x}_i}\frac{\partial f_i(\boldsymbol{x}_{i - 1}, \boldsymbol{w}_i)}{\partial \boldsymbol{w}_{i}} \end{aligned}\]

ここで注意したいのは入力がスカラー値ではなくベクトル値であり、より一般には多次元の入力値となることです。誤差逆伝播法により、正しい出力と実際の出力の差分についてネットワーク上にあるいかなる値に関する微分も計算することができ、この差分が目的関数ともなります。誤差逆伝播法はネットワーク上の複数の層に用いることができるため重要です。

入力をどのように変換するかも大切です。例えば、256\(\times\)256の画像では200,000個の値を持つ行列が必要となるでしょう。このような行列はニューラルネットの層が扱うには大きすぎて実用的ではありません。そのため行列の構造について仮説を組み立てることが重要になってきます。

視覚野の階層的表現

福島による実験によって脳がどのようにして眼からの情報を解釈するかへの理解が得られました。端的に言えば、網膜の前にあるニューロンにより入力情報が圧縮されて(これはコントラスト正規化として知られています)更に信号が眼から脳へと伝わることが分かりました。その後伝わった視覚情報が階層的に処理され、特定のカテゴリーに対応するあるニューロンが活性化することで情報の分類が成されます。このようにして視覚野は階層的にパターン認識をしています。

視覚野の特定の部位、特に一次視覚野 (V1)に電極を差し込むことで行う実験により、視野の極々一部に出現した模様に対して特定のニューロンが反応を示し、さらにその近くにある違う模様に対しては最初のニューロンの近くのニューロンが反応することが分かりました。さらに、視野の同じ部分に反応するニューロンは様々な種類のエッジに対して規則的に反応する(例えば辺が垂直か水平か)ことも分かりました。また、視覚プロセスが本質的にはフィードフォーワードの過程であるという考え方があるということを知っておくのも重要です。こうして循環的な接続無しで高速に認識を行うことができるのです。


📝 Yunya Wang, SunJoo Park, Mark Estudillo, Justin Mae
Shohei Ogawa
27 Jan 2020