ニューラルネットワークとは?基本原理と活性化関数、単純パーセプトロンについてまとめました。
ニューラルネットワークとは
脳内には、ニューロン(神経細胞)が無数にあります。ニューロン同士はシナプスで繋がっています。
入力される電気信号の電位がある閾値を超えると発火し、シナプスによって次のニューロンに電気信号を出力します。
この動作を各ニューロンへ繰り返ししていくことで、脳は電気信号(情報)を伝達します。
ニューラルネットワークでは、この「脳が電気信号(情報)を伝達する仕組み」を表現することを目指した数学モデルです。
モデル図
■ニューロン(左)、数学モデル(右)
ニューロンモデルでは、細胞体を「ノード」、軸索を「エッジ」、シナプスを「活性化関数」で表現します。
ニューロン | 数学モデル | 役割 |
---|---|---|
入力信号 | ![]() |
入力値 |
出力信号 | ![]() |
出力値 |
軸索 | エッジ | 入出力端子 |
樹状突起 | 結合荷重![]() |
シナプスそれぞれがもつ信号の伝達効率 |
細胞体 | ノード(活性化関数![]() |
①入力の重み付き和を計算 ②計算結果が閾値を超えたら「1」、そうでなければ「0」を出力 |
重み付き総和
入力の重み付き総和は以下の式で計算します。
(1)
活性化関数
活性化関数では、重み付き和がある閾値を超えていれば「1」、そうでなければ「0」を出力するように設計します。
これは、電気信号がある電位を超えた時に急激に発火するニューロンの特性を表現したものです。
活性化関数としてよく利用される関数は次の通りです。
関数名 | 関数 |
---|---|
ステップ関数 (ヘビサイド関数、階段関数) |
![]() |
シグモイド関数 | ![]() |
線形ランプ関数 | ![]() |
はある閾値です。
■左からステップ関数、シグモイド関数、ランプ関数
単純パーセプトロン
単純パーセプロトンとは、0番目の入力を1、重み
を閾値とした場合のニューロンモデルのことです。
活性化関数にステップ関数を用いて、パーセプロトンの出力
を表すと次のようになります。
(2)
(3)
(3)式はのときの入力
、 重み
と、閾値を和の形で表現しています。
単純パーセプトロンは、ニューラルネットワークの基本単位となる重要な物です。
重みと閾値を変化させることで、例えば「明日の天気予測」「顧客に最適な商品予測」などの様々なモデルを作成できます。
– | 補足 |
---|---|
![]() |
![]() ![]() ![]() ![]() |
![]() |
実際のニューロンでは、入力信号の電位がある閾値を超えたときに、発火して信号を出力します。バイアス![]() ![]() |
単純パーセプトロンの学習①勾配降下法
単純パーセプトロンでは、教師データを与えて勾配降下法(最急降下法)により、重みを決定します。
次のような誤差関数が最小となるように繰り返し計算を行います。
数式 | 説明 |
---|---|
誤差関数(損失関数) | ![]() |
![]() |
![]() ![]() ![]() ![]() |
重み | ![]() |
教師データ | ![]() |
教師データの 正解ラベル |
![]() ※正解ラベルtの値は、正解なら1, 誤りなら-1 |
重みの更新式
誤差関数が大きいほど出力値に誤りが多いことを表します。
よって、これが最小になるように重みを少しずつ動かして更新していきます。
更新の計算式は次のようになります。
(4)
パラメータ | 説明 |
---|---|
学習率:![]() |
ずらす量(1より小さな値を設定。小さすぎると計算回数が増大) |
![]() ![]() |
勾配値が正なら、負の方向に最小値があるので、そこへ動かすために![]() |
注意
この誤差関数を用いる場合、正解ラベルが
なので活性化関数(ステップ関数)も次のように定義します。
(5)
– | 説明 |
---|---|
1 | 初期パラメータ(学習率とエポック最大数)を設定します。 |
2 | 教師データ![]() ![]() |
3 | 重み![]() |
4 | 教師データ![]() |
5 | 出力yと正解ラベルtを比較し、一致しなければ最急降下法で重みを更新します。 |
6 | 手順3~5をエポック最大数分だけ繰り返します。 |
Pythonによる実装例
関連記事


コメント