まず、ニューラルネットワークは何ですか?相互接続(ニューロン)成分の数千億によるヒト脳細胞のシナプス。シナプスの着信十分な興奮は、神経細胞の興奮を引き起こす可能性があります。このプロセスは、「思考」と呼ばれています。
私たちは、このプロセスをシミュレートするために、コンピュータ上でニューラルネットワークを書くことができます。生体分子レベルでのみアナログルール、人間の脳をシミュレートするために、より高いレベルを必要としません。我々は、マトリックス(二次元データテーブル)この数学的ツールを使用し、簡単にするため、3つのだけの入力と1つの出力ニューロンをシミュレートします。
私たちは、次のような問題を解決するために、ニューロンを訓練します。前者の例としては、4つのトレーニングセットと呼ばれています。あなたは、出力は常に一番左の列の入力値に等しくなることがあります。だから、「?「1にする必要があります。
トレーニング方法
しかし、どのように私たちの神経細胞を作るためには、正しい答え?与えられた各入力重量は、正または負の数であってもよいです。出力ニューロンを決定する大きな正(または負)の重量入力を有します。重量当たりの重量は、第1の乱数の初期値を設定し、トレーニングプロセスを開始します:
- その出力ニューロンは、特定の式により算出される調整量を用いて、訓練入力のサンプルを取ります。
- エラー、ニューロンにおける予想される出力とトレーニングサンプル間の、すなわち差を計算します。
- 誤差は多少の重みを調整しています。
- このプロセスは、10万回も繰り返されます。
最終重量はトレーニングセットに合わせて最適なソリューションとなります。ニューロンは、この法律の新しいケースを考えると、それは良い予測を与えます。
このプロセスはBPです。
出力ニューロン式
あなたは、どのような式ニューロン出力がある計算に考えるかもしれませんか?まず、重み付けされた入力およびニューロン、すなわちを計算し、
その後、標準化、0と1の間で結果を確認します。この数学関数を使用して--Sigmoid機能を実行します。
シグモイド関数は、パターン「S」字曲線です。
第二、出力ニューロンの計算のための最終的な式に最初の式を代入します。
重い重量調整式
私たちは常に訓練中に重みを調整します。しかし、どのようにそれを調整するには?あなたは、「エラー加重デリバティブ」の式を使用することができます。
なぜ、この式を使うのか?まず第一に、私たちは、比例サイズ変更やエラーを作りたいです。入力が0であれば第二に、入力(0又は1)により、重みは調整されないであろう。最後に、勾配はシグモイド曲線(図4)を乗じました。
シグモイド曲線の傾きが導出することによって得ることができます。
最初の式に第2式を代入し、重みが最終的な式の重みを与えるように調整します。
Pythonコードの構造
我々は、ニューラルネットワークライブラリを使用しませんでしたが、4つの方法でnumpyのPythonの数学ライブラリをインポートしますが。彼らは以下のとおりです。
- 自然指数をexp--
- array--行列を作成します
- dot--マトリックス乗算
- random--乱数を生成します
行列の転置(行変数列)のための「.T」が方法。だから、このストアデジタルコンピュータ:
ソースコードの行ごとに、私はすべてを説明するコメントを追加します。各反復で、我々はまた、すべてのトレーニングデータを扱うことに注意してください。そう変数は、マトリックス(二次元データテーブル)です。次のサンプルコードは、Pythonのと完全に書かれています。
エピローグ
実行した後、あなたがこのような結果が表示されます。
我々はそれをやりました!私たちは、単純なニューラルネットワークを構築するためのPythonを使用します!
まず、自分の体重のランダムなニューラルネットワークを与え、その後、自分自身を訓練するためにトレーニングセットを使用します。次に、それが新しい場合を考える[1、0、0]と0.99993704予測されます。正解は1です。非常に近いです!