カニゲーム攻略日記ブログ

beatmaniaIIDXやハースストーンなどのゲーム攻略日記。主にまったり勢。2016年にIIDX皆伝になった

シグモイド関数とネイピア数 メモ

bmsにsigmoidという曲があるので
シグモイド関数をやるぞ

contents

シグモイド関数

シグモイド関数」は、難しそうな名前の関数だけど、その働きはとっても面白いよ。すごく大きな数やすごく小さな数を入れても、返ってくる答えは0から1の間になるんだ。

たとえば、想像してみてね。君が友達と遊ぶかどうかを決めるとき、その友達が何人くるかによって遊びたい気分が変わるとするね。でも、友達が1人も来なければ全然遊びたくないし(これが0)、友達が5人来たら最高に楽しくて遊びたい(これが1)。でも、友達が100人も来たら逆にうるさすぎて遊びたくない気分になっちゃうよね。だから、友達が5人以上来ても遊びたい気分は1から増えない。これを考えると、その「遊びたい気分」はシグモイド関数と似てるよね。

だからシグモイド関数は、入力の大きさに関係なく「0から1」の範囲で答えを出す特別な関数なんだよ。これは、コンピュータが「はい/いいえ」や「遊ぶ/遊ばない」のような選択をするのに役立つよ。

視覚的には、シグモイド関数は"S"の形に見える曲線だよ。小さい数値を入れると0に近い値が、大きな数値を入れると1に近い値が出るんだ。ちょうど中間の値を入れると、0.5(つまり半分)に近い値が出るよ。

この関数は、コンピューターサイエンスや人工知能の分野でよく使われるんだ。それはシグモイド関数が、「どれだけ確かか」や「どれだけ可能性が高いか」を0から1の間の数値で表現できるからだよ。

source code

Pythonシグモイド関数を書くためには、通常は数学的な計算を扱うためのライブラリであるNumPyを使います。

以下にシンプルなシグモイド関数の実装を示します:

import numpy as np

def sigmoid(x):
    return 1 / (1 + np.exp(-x))

ここでnp.exp(-x)はeの-x乗を計算する関数です。eは自然対数の底で、約2.71828という値を持つ特別な数です。

この関数を使って、例えば、-10から10までの範囲の数値に対するシグモイド関数の値を計算してみると:

x = np.linspace(-10, 10, 100)
y = sigmoid(x)

import matplotlib.pyplot as plt
plt.plot(x, y)
plt.show()

このコードを実行すると、xが-10から10までの範囲で、yが0から1の範囲で変化する、S字形の曲線がプロットされます。これがシグモイド関数の特性を表しています。

なんなんだこれは

分かりました、それではシグモイド関数の用途やその利点について少し説明しますね。

シグモイド関数は、人工知能(特にニューラルネットワークや深層学習)でよく使われます。その主な用途は、どんな数値でも0から1の間に収めることができる点にあります。この性質は特に、確率を表現するときや、二値の出力(例えば、「はい」または「いいえ」のような)を生成するときに有用です。

また、シグモイド関数はその形状から「活性化関数」として使われます。ニューラルネットワークでは、入力信号の合計がどの程度の強さであるかによってニューロン(人工的な「脳の細胞」)が「発火」するかどうかを決めるために、活性化関数が使われます。シグモイド関数はその「発火」を滑らかにすることができ、それによってネットワークはより複雑なパターンを学ぶことができます。

しかし、現代の深層学習では、シグモイド関数よりもReLU(Rectified Linear Unit)と呼ばれる関数がよく使われるようになりました。ReLUは計算がシンプルで、学習が速く、また深いネットワークでうまく機能するという利点があります。

シグモイド関数はその滑らかさと範囲が限定されている特性から、特定のタスク(例えば、確率の出力や二値分類)で使われることがあります。

簡単に説明

シグモイド関数、難しそうな名前だけど、実はすごく簡単なものだよ!

まず、僕たちが知っている数字って無限大に広がっているよね。-100、0、100、1000など、どれだけでも大きくなったり小さくなったりする。

でも、例えばゲームの得点を計算するとき、得点がマイナスになったり、100点を超えたりすると困るよね。だから、「0点から100点まで」にするんだ。

シグモイド関数もそんな役割を果たすんだ。この関数を使うと、どんなに大きな数値でも0から1の間に収めることができるんだよ。だから、「はい」か「いいえ」を決めるときや、確率(0%から100%までの範囲)を計算するときに便利なんだ。

これがシグモイド関数の一番の優れた点なんだよ。どんな大きな数値も、0から1の間に入れることができるんだ。だから、例えば、「この写真は犬かな?」と人工知能に聞くとき、人工知能は「うーん、これは0.9(90%)の確率で犬だと思うよ」と答えることができるんだよ。

1 / (1 + np.exp(-x))

もちろんだよ!この関数はシグモイド関数と呼ばれているもので、ちょっと難しい数学の計算をしているんだけど、その結果はとてもシンプルだよ。

まず、ここで大切なのは、この関数がどんな値を受け取っても、その結果は必ず0から1の間になるということだよ。

たとえば、お友達と遊びたいとき、ママに「お願い!」って100回も200回もお願いしたら、ママも「うーん、まあいいか」と思うかもしれないね。でも、その「うーん、まあいいか」を0から1の数値で表すとしよう。すると、お願いしないと0、お願いしたらその回数に応じて0より大きい数値が出てくる。でもその数値はどんなにお願いしても1を超えることはないよ。

この「お願いの強さ」を数値化するようなことを、シグモイド関数はしているんだ。つまり、どんなに大きな数値が入っても、出てくる数値は0から1の間に収まる。そして、数値が大きくなるほど1に近づき、小さくなるほど0に近づくんだ。

この関数の中に出てくる「np.exp(-x)」は、ちょっと難しいけど、「eの-x乗」を計算しているんだ。eは特別な数で、約2.71828という値を持つ。そして、このeを何乗するか(ここでは-x乗)によって、得られる数値が変わるんだよ。

でも、大切なのは「どんなに大きな数値xが入っても、結果は0から1の間に収まる」ってことだけ覚えておけばOKだよ!

ネイピア数

ネイピア数は、ひと言で言うと「自然の法則に出てくるとても特別な数」です。その特別な数の値は、約2.71828です。ネイピア数は、物理学や生物学、そして統計学やコンピューターサイエンスまで、色々な分野で使われます。

数学の世界では、たくさんの特別な数があります。例えば、円周率πは円の周囲の長さと直径との比率を表す特別な数ですね。同様に、ネイピア数も特別な数の一つです。

お金の話を使って説明してみますね。

例えば、あなたが銀行に100円を預けたとします。そして、その銀行が1年に1回、預けたお金の10%の利息を払ってくれるとしましょう。すると、1年後には、あなたは預けた100円に10%の利息が加わって110円を手にすることができますね。

でも、この銀行がもっと頻繁に利息を払ってくれるとどうなるでしょう。例えば、半年に一度10%の利息を払ってくれるとします。すると、最初の半年で100円が10%増えて110円になり、次の半年で110円がさらに10%増えて121円になります。つまり、1年で11円の利息を得ることができます。

この利息をもっともっと細かくしていくと、例えば、1日ごと、1時間ごと、1分ごと、1秒ごとに利息をもらったとしたらどうでしょう。この時、1年後に得られるお金の合計は、最初の預金の約2.71828倍、つまりネイピア数倍になります。それがネイピア数の特別さです。

このように、ネイピア数は「どんどん細かく利息をもらうと、最終的に預金がどれだけ増えるか」を表しています。それが、ネイピア数が「自然の法則に出てくる特別な数」である理由です。

ただし、実際の銀行がこれほど細かく利息を払ってくれることはないので、これはあくまで数学の世界の話ですよ。

ネイピア数の参考サイト

以下が分かりやすかった

https://www.nli-research.co.jp/report/detail/id=58572?site=nli