まったりAI勉強記

AI(人工知能)について、特にゆかりがあるわけでもない社会人が、まったりとAIについて勉強していく勉強日記です。

【ひとり読書会】ディープラーニングの数学(第13回)

どうも、カタミチです。

さて、今日も「最短コースでわかる ディープラーニングの数学」のひとり読書会、やっていきたいと思います。

今日は5章「指数関数・対数関数」の最後ですね。「シグモイド関数」「softmax関数」についてです。指数関数・対数関数の機械学習向けの内容のゴールはどうやらこれらの関数にあるようです。

さぁ、行ってみましょう!

 

5-5. シグモイド関数

f:id:feh_asama:20220320080123j:image

シグモイド関数…。機械学習の勉強をしているとたびたび登場してきますが、ようやくじっくりと向き合うときが来たようですね。さぁ、見てみましょう。まずはどんな関数か?というところから。

$$y=\frac{1}{1+exp(-x)}$$

はい、こいつですね。最初に出会った時は「げっ、何だこのめんどくさそうな式は…」と思ったもんですが、今見るとすごくシンプルな関数に見えますね。慣れというのは恐ろしい(ふむ)

さて、いきなりですが、ドヤり知識ポイントです。上の式、実は数学的には「標準シグモイド関数」と呼ばれるもので、単に「シグモイド関数」と言う場合には、\( y=\frac{1}{1+exp(-ax)} \)という感じで、\(a\)が入ってくるようですね。

もし同僚に「活性化関数にはシグモイド関数を使おうか」と言われたら「それって、標準シグモイド関数ってことでいい?(ドヤ)」と返しましょう。…漏れなく、ただのウザイやつと思われます(オイ)

まぁ、機械学習の世界では、シグモイド関数と言えば標準シグモイド関数のことを指すようなんですが、一応、違いがあるってことは押さえておきたいですね。ちなみにこの話、本書の注釈に書いてあった話なんですが、個人的には注釈やコラムに書いてあることが刺さることが多いので、しっかり読むようにしています、はい。

さて、そんな「シグモイド関数」ですが、名前の由来を調べてみました。

ここまでくれば分かりますよ、ええ。きっと「カールハインツ・シグモイド」みたいな数学者が作った関数…。そうなんだろう?(ドヤ)

 

…違いました。

 

名前の由来は「グラフの形がギリシャ文字のシグマっぽいよね、よし、シグマっぽいってことでシグモイドだ。」ってことらしいです。

…うん、そういうパターンもあるのね(動揺)

さて、そんなシグモイド関数ですが、なんでわざわざこんな関数が編み出されたかというと、色々便利な性質があるから、ってことみたいです。

まず、\(x\)をプラス方向にめっちゃ増やしていくと、\(exp(-x)\)が\(0\)に近づいていくので、\(y\)は\(1\)に近づいていくことになりますね。

逆に、\(x\)をマイナス方向にめっちゃ増やしていくと、\(exp(-x)\)は\( \infty\)に近づくので、\(y\)は\(0\)に近づきますね。

また、\(x\)に\(0\)を代入すると、\(exp(0)=1\)なので、\(y=\frac{1}{2}\)になります。

これらの性質から、シグモイド関数は確率値を表す関数として使うのに便利なようです。確率も\(0\)から\(1\)で表しますもんね。

で、もうひとつ重要な性質が示されていました。シグモイド関数\(y=\frac{1}{1+exp(-x)}\)を微分すると…

\(y'=\frac{exp(-x)}{(1+exp(-x))^2}\)になるってことです!

…ちょっと式変形しすぎました(汗)。

途中式まで戻して書き換えると…

\(y'=\frac{exp(-x)}{(1+exp(-x))^2}= \frac{1}{1+exp(-x)}-\frac{1}{(1+exp(-x))^2} \)

となります。ここで、元々の関数は\(y=\frac{1}{1+exp(-x)}\)なので…

\(=y-y^2=y(1-y)\)

と書くことができますね!

…え?なんで突然\(y\)に戻したん?って話ですが、ここで重要なのは\(x\)が完全に消滅してるってことですよね。微分前の関数の出力結果\(y\)の値だけ使って微分が計算できるってことになります。

ということで、勝手に例題。

勝手に例題:シグモイド関数\(y=\frac{1}{1+exp(-x)}\)の\(x=0\)の地点での微分を求めよ。

まず、\(x=0\)のときの\(y\)を求めてみると…

\(y=\frac{1}{1+1}=\frac{1}{2}\)ですね。

で、シグモイド関数の微分の式は、\(y'=y(1-y)\)なので…

\(y'=\frac{1}{2}(1-\frac{1}{2})=\frac{1}{4}\)

はい、これが答えですかねー。簡単ですね!

 

5-6. softmax関数

f:id:feh_asama:20220320080129j:image

さて、次はsoftmax関数ですね。

この名前の由来はさすがに人名じゃないでしょう。「アルフレッド・ソフトマックス」みたいな人が居るとは思えません。…いや、まぁいるかも知れませんが。きっと、「柔らかく最大な関数」ってことですね!(意味不明)

…少し調べてみたんですが、「グラフが滑らかな(=ソフトな)曲線となり、1つの出力値が最大となるため」というのが意味の由来っぽいです。私の想像も、当たらずとも遠からず…といった感じでしたね(ふむ)

そんなsoftmax関数。どうやら入力がベクトル(複数の値)となり、出力も同じ次数のベクトルになる関数のようです。N個の入力にN個の出力って関数は初登場ですね。関数を箱と例えるなら、だいぶデカい箱って感じですかねー。ちなみに、ベクトル値関数なんて言ったりもするみたいです。性質としては、どうやらシグモイド関数と似通っており、シグモイド関数の親戚みたいな感じ…というより、シグモイド関数はsoftmax関数の中の特定のケース(N=2のケース)のようですね。

さてsoftmax関数がどんな関数なのか見てみましょう。こんな関数です…

どん!

$$ \left\{ \begin{array}{c} y_1=\frac{exp(x_1)}{g(x_1,x_2,x_3)} \\ y_2=\frac{exp(x_2)}{g(x_1,x_2,x_3)} \\ y_3=\frac{exp(x_3)}{g(x_1,x_2,x_3)} \end{array} \right. \tag{1}$$

$$  g(x_1,x_2,x_3)=exp(x_1)+exp(x_2)+exp(x_3) \tag{2}$$

こいつはN=3、つまり3変数の場合の式で、式(1)と式(2)はセットですね。なんか仰々しいですが、よく見るとそんなに複雑じゃないですね。例えば\(y_1\)は、入力値全体の中での\(x_1\)の割合みたいな感じですね。まぁ、expに取り込まれているので単純な\(x_1\)の割合ではないですが、雰囲気的には割合です。当然、Nが増えていくと\(x\)と\(y\)の変数が増えていきますが、上の式(1)(2)へどう増やすかはまぁ分かりますね。

さて次にsoftmax関数の微分です。出力\(y\)がN個あるので、それぞれに微分が存在しますね。ここでは、任意の\(y\)である\(y_j\)についての微分を考えるみたいです。また同様に、\(x\)もN個ありますが、どうやらここでは偏微分の式を求めるようです。

うーん、なんで偏微分の式を求める必要があるのか分かりません(汗)が、きっとこのあとの「実践編」の章で必要になるんでしょう。今は「理論編」、ひたすら道具を揃える時期ですからね。きっとこの道具があって良かった!ってときがくるんだと思いますので、その時を楽しみにしておきましょう。

さて、\(x\)の偏微分ですが、さっき言ったように、こちらもN個あるので任意の\(x_i\)についての偏微分を考えることになります。しかしとりあえず、具体的な\(y_1\)を\(x_1\)で偏微分することを考えてみるようです。例によって見事な式変換を経て、得られた式は…

\(\frac{\partial y_1}{\partial x_1}=y_1(1-y_1)\)

これです。見た目的にシグモイド関数のやつと完全に一致しています。\(y_1\)の微分が\(y_1\)自身のみで表現されています。これは分かりやすくてありがたい。

しかし\(y_1\)には、親友の\(x_1\)以外にも、\(x_2\)や\(x_3\)といった、他の変数も持っていますので、例えば\(x_2\)で偏微分したとすると…

\( \frac{\partial y_1}{\partial x_2}=-y_2y_1 \)

こうなります。\(y_1\)の微分を\(y_1\)だけでは表現できていませんが、\(x_2\)とは親友で、かつ\(y_1\)の弟である\(y_2\)も含めると\(y\)ファミリーだけで表現できるようですね。

で、ここまで来たらいつものパターンですね。この式は、一般的な\(y_j,x_i\)についても言えて…

$$ \frac{\partial y_j}{\partial x_i}= \left\{ \begin{array}{c}  y_i(1-y_i) & (i=j) \\  -y_iy_j & (i \neq j) \end{array} \right. $$

これが、softmax関数の偏微分に関する式ってことになりますね!非常に覚えやすいシンプルな式になりましたね。まぁ、簡単になるように昔の人が考え抜いてできた関数だってことなんだってことなんでしょうね。ありがとう、アルフレッド・ソフトマックスさん!(架空の人物)

さて、softmax関数についても、勝手に例題を…とも思ったんですが、なんだか長くなりそうなのでやめときますかね(汗)

最後に「シグモイド関数はsoftmax関数のN=2の場合のことだ」って話について、簡単に説明がありました。N=2のとき、softmax関数は…

\(y_1=\frac{exp(x_1)}{exp(x_1)+exp(x_2)}\)

ですね。両辺を\(exp(x_1)\)で割ると…

\(=\frac{1}{1+exp(-(x_1-x_2))}\)

ってことで、\(y_1=y,x_1-x_2=x\)と置けば、完全にシグモイド関数ですね。

ただ、個人的に理解できていないのが、\(x_1,x_2\)という2つの変数を\(x\)でまとめてしまっている点です。N=2のsoftmax関数より入力変数がひとつ落ちた分、表現の幅が狭くなってる気がするんですよねー。一方で、\(y_2\)についての言及もないので、出力側も変数がひとつ落ちてるってことになります。入力・出力ともに変数を1つ落としてるから大丈夫だぜ!ってことなんですかねー。まぁ、このあたりは概念的な話かもしれず、実際に利用シーンを見れば理解できるところなのかなー、とも思いました。

 

ということで

はい、これで「指数関数・対数関数」の章も無事クリアですね。少し手強い部分もありましたが、機械学習の活性化関数で使われる「シグモイド関数」や「softmax関数」の理解も深まり、非常に有意義でした。

次はいよいよ「理論編」の最後の将…じゃなくて最後の章ですね(誤字)

待ってろよ「確率・統計」!

ではまた。