ActivatorとSoftMax

【 ActivatorとSoftMax 】

これまで、一つの層しか含まない単純なニューラル・ネットワークのニューロンの状態 x は、入力 X, 重み W, バイアス b という三つのパラメータを使って、簡単な式で表すことができることを見てきました。 

同時に、生物のニューロンをシミレートした、コンピュータ上の状態 x のニューロンは、 x <= 0 の時には、何も反応しないが、x > 0 の時には「発火」して、信号 1を他のニューロンに出力するということも見てきました。

Activator φ は、ある条件のもとで、ニューロンを活性化して、ニューロンの状態xをニューロンの出力φ(x)に変え、その出力を行う関数です。

基本的なActivator φは、x > 0 の時、φ(x) = 1 を出力し、それ以外の場合には φ(x) = 0 を出力します。( 0 を出力するというのは、ニューロンが活性化されずに何もしないことだと考えて構いません。)

ただ、この基本形以外のさまざまなタイプのActivatorがあります。それについては、セッションの前半で紹介しています。

今回のセッションの後半では、もう一つの重要なActivatorである、SoftMaxを紹介します。

前半で見たActivatorは、一つのニューロンについて、その状態をそのニューロンの一つの出力に変えるものだったのですが、softmaxは少し違っています。それは、複数のニューロンの状態にまたがって作用するActivatorで、しかも、複数のニューロンごとに出力を行います。

SoftMaxは、引数にN個の要素(ニューロンの状態です)からなるベクトルを取り、N個の要素からなるベクトルを出力します。その出力はN個の要素からなる「確率分布」です。

面倒くさそうですが、例えば、7次元のベクトル a = [1.0, 2.0, 3.0, 4.0, 1.0, 2.0, 3.0]から、そのSoftMax を計算するPythonコードは、次のように簡単なものです。

 >>> import numpy as np
 >>> a = [1.0, 2.0, 3.0, 4.0, 1.0, 2.0, 3.0]
 >>> np.exp(a) / np.sum(np.exp(a))
 array([0.02364054, 0.06426166, 0.1746813, 0.474833, 0.02364054,  0.06426166, 0.1746813])

ただ、プログラムは簡単に記述できるのですが、計算量は小さいものではありません。先のコードの、np.exp(a)は、ベクトルa の全ての要素a_i について e^{a_i}を計算することですから。

softmax は、大規模言語モデルで、語や文の分散表現 embedding を計算する時にも利用されています。その場合、500次元とか 1,000次元のベクトルが利用されます。その計算量は膨大なものです。

もう一つ。

全く分野が異なるのですが、softmax関数は、ボルツマンやギブスが開拓した統計力学の大スターである「分割関数 Partition function 」と同じものです。二つの不思議な関連については、別の機会にお話しできればと思います。

-------------------------------------------------------

ビデオ「 ActivatorとSoftMax 」を公開しました

https://youtu.be/LivhQuhhKlo?list=PLQIrJ0f9gMcN8dalyOH9sjVK6CQkd7NJw

資料 pdf「 ActivatorとSoftMax 」
https://drive.google.com/file/d/1ND9KFzA3Q7ra5ZRSFhrxZnd0Pzj3QD3N/view?usp=sharing

blog: 「ActivatorとSoftMax 
https://maruyama097.blogspot.com/2023/08/activatorsoftmax.html

「ニューラルネットワークの基礎」まとめページ
https://www.marulabo.net/docs/neural-network/

「ニューラルネットワークの基礎」ビデオ再生リスト
https://www.youtube.com/playlist?list=PLQIrJ0f9gMcN8dalyOH9sjVK6CQkd7NJw

コメント

このブログの人気の投稿

マルレク・ネット「エントロピーと情報理論」公開しました。

初めにことばありき

人間は、善と悪との重ね合わせというモデルの失敗について