パーセプトロン
「今から100年ほど前の1958年にひとつの論文が発表されました。『The Perceptron: A Probabilistic Model for Information Storage and Organization in the Brain(パーセプトロン:脳における情報蓄積と組織化のための確率モデル』です。筆者はフランク・ローゼンブラットといいます」
「知ってるわ、ニューヨーク州の偉人の一人ですもの」エレナが言った。
「ニューヨーク州ではローゼンブラットを故郷の偉人と教えているのですか」アレックスが少し驚く。
「ええ、私の母の時代にはワシントンとかルーズベルトを偉人として教えていたらしいけれど、私の初等教育の時代にはローゼンブラットも加わっていたわ。AIが世界を大きく変え始めていたから」
「そうですか。私の育ったケベックでは、彼は専門家以外には知られていませんでした」
「この論文でローゼンブラットは、入力に重みを掛けて足し合わせ、閾値によって出力を決めるパーセプトロンを説明しています。学習では、正解と出力の違いに応じて重みを更新します」
「つまり、現代的に言うならば、Affine変換と、正解との差(Loss)のフィードバックで学習できることを示しています。これは入力層と出力層の2層で実現しています」
「さらに彼は多層のパーセプトロンについても考えていました」
「それが非線形とどのように関係してくるの」
「非線形関数が入ってこないと多層に出来ないからです」
「どういうことかしら」
「線形変換を3回繰り返しても、それは1回の線形変換と同等だからです」
「いま、このような線形変換を考えましょう」
y =f(x) = a*x + b
「この線形変換を3回くりかえします」
y = ff(x) = a(a*x + b) + b = a^2x + a*b + b
y = fff(x) = a{ a(a*x +b) + b} + b
= a^3*x + {a^2*b + a*b + b}
「ですから、a' = a^3, b' = a^2*b + a*b + b とすれば、1回の線形変換になってしまいます」
y = fff(x) = a'*x + b'
「これは、堂々巡りになりそうね」
「そのとおりです」
「彼は非線形について意識していたのだろうか」マルコが言った。
「当時と今は違います。気付いていたかどうかは、彼の論文からだけではわかりません。彼は『脳にはニューロンがある。ニューロンは発火するかしないかで動作する。だからモデルにも発火の閾値を入れよう』と考えていたんだと思います。つまり threshold と思っていたんだと思います」
「彼の関数はこのような形をしています」
y = step(a*x + b)
「この step があることで、ウェイトパラメターが学習機能を持つことには気付いていなかったでしょう。非線形が注目され始めるのは彼より後の時代になるからです」
「では、非線形関数がどのような形をしているのか、見てみましょう。これまで出てきたものとしては LSTM の tanh と、シグモイドなどでした。それぞれ、このような形をしています。
「どうです」
「曲線ね」
「そうです。曲線です」
「でも、だから」
「そうですね、こうしましょうか、正面を向いた私の似顔絵があるとします。顔の輪郭は直径10センチくらいとしましょうか」
「半径5センチね」
「その似顔絵を、横方向は何も変えず、縦方向だけシグモイド関数をかけたところを想像してください」
「そうねぇ、上下方向が1センチにつぶれた顔になりそうね。横幅は同じだけど、上下方向は、真ん中あたりは、そのままかもしれないけど、端の方に行くほど歪んでいきそう」
.
「そのとおりです、歪むのです。それが非線形層の役割です」
「入力された実数列をいろいろと歪ませてやると、線形分離できる場合があります」
「線形分離って」
「たとえば、y=x の直線状に〇と●が置かれているとします」
「〇は (-2, -2) と (2, 2) の場所に、●は (-1, -1) と (1, 1) の場所にあるとします。
2
〇
1
●
-1
●
-2
〇
「この4点を一つの直線で同じもの同士に分けてください」
「これって、できないわよね」
「もしできれば、分類器になります。つまりあるものと、別の物を区別するという知識が得られます。たとえば生物と無生物のようなものです」
「GPTの中にも分類器に似た処理があるのね」
「いままで説明した中で、表面には出てきませんでしたが、中では分類器に相当する機能があります。それが内部状態で表された特徴を区別しています」
「これは、このままではできないわね」エレナが降参する。
「そうです、できません。しかし非線形関数で歪ませれば、できるようになります」
「そうなの」
「この例では簡単です。 y = x^2 つまり y成分だけを二乗するだけです。この関数も非線形関数です。するとこうなります」
4 4
〇 ○
1 1
● ●
「なので、このように、間に直線を引くことができます」
4 4
〇 ○
----------------------
1 1
● ●
「なるほど、簡単ね」
「直線で区別できるようになれば、分類器を使って両者を分類できます。といってもある直線のどちら側にあるかを判定するだけの簡単なしくみです」
「そうやって、生物か、無生物か、主語か述語か、犬か猫か、分けているというわけね」
「そのとおりです。そして、人間がデータを見ていちいち線形分離できる関数を探すわけにはいかないので、tanh とか『シグモイド』あるいは GPT の中であれば ReLU や GELU を使い、self-Attention とFFNを合わせたものを、何層も重ねています」
「線形変換と非線形変換を何層も組み合わせることで、複雑な内部表現へと変換していきます」
「その結果、最初の空間では分離できなかったデータを、幾つかの変換を重ねることにより分離できるようになるのです。このような操作を『折り畳む folding』と表現することがあります」
.




