活性化関数 (ディープラーニング StepⅡ)

ディープラーニングの勉強ととして、パーセプトロンからニューラルネットワークへと進みます。ニューラルネットワークて使用する活性化関数のシグモイド関数とReLU 関数と、その比較としてのステップ関数をグラフ化して確認します。

1. ステップ関数

先ずは、比較としてのステップ関数をグラフ化する。

関数と図にするXの範囲です。

式 II-1 )                          

                      〔*この式の表記プログラムは、グラフの中に組み込んであります〕

(前回から、少し Deep Leaning 的になったので、今回を stepII として、式や図に同じ記号を付します。)

式II-a)の表示プログラムは、Texの「2段(分数)」表記\genfrac と、「以上」記号\leqq を使っています。 

  r'$y= \genfrac{\{}{}{0}{}{ 0\hspace{1}x \leqq \hspace{0.2}0}{ 1\hspace{1}x> 0}$'

 r': rで初めて’’で挟む。Texでの特殊記法は、\で始まるコマンドで表示されるが、文字列中での\記号は無視される。rを文字列の前に付けることで、\記号が削除(無視)されることなく、Texに引き渡すことが出来る。

 $: $で挟むとTexの表記と解釈されので、r’$・・・・・$’となる。 Tex表記を中断するなら$で終わって、再開を$出始めればいいので、 r’$ ・・(Tex表記)・・ $・・(非Tex表記)・・ $ ・・(Tex表記)・・  $’となる。結果の表示では$は無視される。 $$で挟まれたTex表記中は空白は無視される。(これがややこしくしている。)

 $$間の表記で空白を付けたい場合は、1〕 空白の記法\hspace{N} (サイズNの空白)を入れる。 2〕空白記号 ~ (上波線)を入れる。 3〕$で非Tex表記に戻して空白を入れる。  の三通りがあるようだ。

 ステップ関数のプログラム:II-1)   

1)numpy(as np) と matplotlib.pyplot (as plt)をインポートしておきます。

2)ステップ関数を関数名 step_func としてdef文で定義します。 引数はin_xです。

  教本(*1)ではステップ関数の引数を x にして、主プログラムでもグラフ用に同じ x を使っていますが、関数内で使う変数は、関数に渡す引数とは独立して設定されます。主プログラムと関数との独立性を分かり易くするために、関数内をin_xにしました。 関数の中での引数のxがどんなものかは、def文では定義していませんが、後に記載する主プログラムでxをNumpyの配列であるとしたことで、in_x もNumpyの配列として取り扱われます。(Pythonの特徴だと思います。少し驚きます。)

3) step_func 関数の戻しは、Numpy 配列で、in_xを>0(0より大きいか小さいか)条件でブーリアン判定します。戻しはデータのタイプをnumpyのint設定とすることで、1(True)、0(False)で戻します。

4)主プログラムでは、 xを Numpy の配列として、arange コマンドで-5から5の範囲で0.1刻みで作る。

5)yを定義した関数のstep_func でxに対応した配列として計算させる。

6)x、yをプロットして、ステップ関数を描きます。色は黒

7)数式を描くために、 数式用のフォントセット 'cm'(ComputerModean)をイタリック 'it'に設定。

8)Texの分数表記\genfrac を使って、中括弧{で 2段表記(分数の中線なし)で、ステップ関数を表記

9)グラフの範囲も\leqq(≦)記号を使って表記。

10)グラフのタイトルはplt..title、 X軸、Y軸の表記をplt.xlabel, plt.ylabelで表記。

11)グラフの表示範囲を plt.xlim,plt.ylim で設定して、 plt.showで表示する。

cm’挿入の為に、 プロットグラフのy範囲を設定、x範囲はPythonに任せてプロットしました。

7)グラフのタイトル、 関数も図内に描いて、showで表示します。

プログラム II-1 )

結果 II-1 )


2. シグモイド関数

次にシグモイド関数です。 式と、Texでの表記のプログラムは以下となります。

式II-2 )                 

 これを、先のステップ関数の代わりにプログラムに組み込み修正します。

1)def定義する関数名をsigumoidにして、 関数をシグモイド関数に変える。

2)グラフ中の関数表記をsigmoidに入れ替える。  同じ2段表記の\genfrac を使うが、パラメータの1番目{右括弧}を空に、3番目{線幅}を1にして描写する。

3)タイトルをSigmoid Functionに修正。

その他はそのままでいい。

プログラム II-2)

結果 II-2)


3. ステップ関数とシグモイド関数の比較 

ステップ関数とシグモイド関数をグラフで比較します。

1)Sigmoid 関数のグラフ-プログラムを元に、ステップ関数を重ねます。 2)シグモイド関数とステップ関数の定義を両方を作ります(コピーしただけ)。 3)Xの配列をそのままにして、yをy_sig と y_step にしてy_sig を黒の実線、y_step を青の破線に指定します。 4)シグモイド関数とステップ関数、グラフ範囲を適当な位置に描きます。 5)plt.hlines を使って、黒の実線と、青の破線をそれぞれの関数の左側に書きました。 6)あとはタイトルを直すだけです。

プログラム II-3)

結果 II-3)


4. ReLU関数

非線形関数としてReLU関数(Rectified Linear Unit )です。 式とTex表記プログラムは以下となります。

式II-4 )

これを、先のステップ関数の代わりにプログラムに組み込んで修正します。

1)定義する関数名をReLUにして、関数式をReLU関数に変える。 2)グラフ中の関数表記をReLU関数にして、 3)タイトルをReLU Functionに修正。 4)グラフの縦軸 y の表示範囲を-1から6に広げました。

プログラム II-4)

結果 II-4 )


公開動画: 

 Pythonデープラーニングを初歩から_Video8(活性化関数のグラフ表示)


初心者がPythonでプログラミング入門。初歩からデープラーニングを体験的に学習する記録

プログラム初心者でも解るように説明をしながら、これからの時代に必要なPython(パイソン)を使って、プログラミング入門から初めてAIデープラーニングを体験的に学習するサイトです。主の教科書に「ゼロから作るDeep Learning 」(オライリージャパン)を使って、多くの情報サイトを使います。自主学習の記録として留めておきたいこと、これから学習する人が知りたいだろうことをブログ式にまとめています

0コメント

  • 1000 / 1000