Python でシンプルなニューラル ネットワークを作成する方法 (コード付き)

Python でシンプルなニューラル ネットワークを作成する方法 (コード付き)

[[251984]]

ニューラル ネットワークの仕組みを理解する最良の方法は、自分でニューラル ネットワークを作成することです。この記事では、その方法を説明します。

ニューラル ネットワーク (NN) は、人工ニューラル ネットワーク (ANN) とも呼ばれ、生物学的ニューラル ネットワークの概念に基づいた機械学習分野の学習アルゴリズムのサブセットです。

5 年以上の経験を持つドイツの機械学習の専門家、Andrey Bulezyuk 氏は、次のように主張しています。「ニューラル ネットワークは、幅広い分野や業界にわたって抽象的なオブジェクトを効率的にモデル化できるため、機械学習に革命をもたらしています。」

人工ニューラル ネットワークは基本的に次のコンポーネントで構成されます。

  • 入力層: データの受信と受け渡し
  • 隠しレイヤー
  • 出力層
  • レイヤー間の重み
  • 各隠れ層には活性化関数があります。このシンプルなニューラル ネットワーク Python チュートリアルでは、シグモイド活性化関数を使用します。

ニューラルネットワークには多くの種類があります。このプロジェクトでは、フィードフォワードまたはパーセプトロン ニューラル ネットワークを作成します。このタイプの ANN は、データを前方から後方へ直接渡します。

フィードフォワード ニューロンのトレーニングには、多くの場合、ネットワークに対応する入力と出力のセットを提供するバックプロパゲーションが必要です。入力データがニューロンに送信されると、処理されて出力が生成されます。

次の図は、単純なニューラル ネットワークの構造を示しています。

ニューラル ネットワークの仕組みを理解する最良の方法は、ライブラリを使用せずに、ニューラル ネットワークをゼロから構築する方法を学ぶことです。

この記事では、Python プログラミング言語を使用して単純なニューラル ネットワークを作成する方法を説明します。

質問

以下に問題を示す表を示します。

新しいデータセットを提供し、それを使用してニューラル ネットワークをトレーニングし、正しい出力値を予測できるようにします。

上記の表に示すように、出力値は常に入力セクションの最初の値と等しくなります。したがって、出力値は 1 になると予想されます。

Python コードを使用して同じ結果を得られるかどうか確認してみましょう (このプロジェクトを続ける前に、この記事の最後でこのプロジェクトのコードを確認できます)。

NeuralNetworkクラスを作成する

正確な予測ができるようにニューロンをトレーニングするために、Python で NeuralNetwork クラスを作成します。このクラスには他のヘルパー関数も含まれます。

この単純なニューラル ネットワークの例ではニューラル ネットワーク ライブラリを使用しませんが、計算を支援するために numpy ライブラリをインポートします。

numpy ライブラリは、次の 4 つの重要なメソッドを提供します。

  • exp—自然指数を生成するために使用
  • 配列—行列を生成するために使用
  • ドット—行列の乗算
  • random — 乱数を生成するために使用されます。有効な分布になるように乱数を生成することに注意してください。

1. シグモイド関数を適用する

ニューラル ネットワークの活性化関数として、シグモイド関数を使用して特徴的な「S」曲線を描画します。

この関数は、任意の値を 0 から 1 の間の値にマッピングすることができ、入力の重み付けと正規化に役立ちます。

この後、重みの調整パラメータを計算するために、シグモイド関数の導関数を作成します。

シグモイド関数の出力は、その導関数を生成するために使用できます。たとえば、出力変数が「x」の場合、その導関数は x*(1-x) になります。

2. モデルのトレーニング

これは、ニューラル ネットワークに正確な予測を行うように教える段階です。各入力には重みがあり、重みは正または負になります。つまり、正または負の重みが大きい入力は、結果の出力に大きな影響を与えます。最初に、各乱数に重みを割り当てることから始めたことを思い出してください。

この例のニューラル ネットワークのトレーニング プロセスは次のとおりです。

ステップ 1: トレーニング データセットから入力を抽出し、トレーニング データセットの重みに応じて調整し、ニューラル ネットワークの出力を計算する方法を通じてフィルタリングします。

ステップ 2: バックプロパゲーション エラー率を計算します。この場合、それはニューロンの予測出力とトレーニング データセットの予想出力の差です。

ステップ 3: 誤差加重微分式を使用して、得られた誤差範囲に基づいて、いくつかの小さな重み調整が行われました。

ステップ 4: このプロセスを 15,000 回繰り返します。各反復では、トレーニング セット全体が同時に処理されます。

マトリックスを水平位置から垂直位置に変換するには、「.T」関数を使用します。したがって、数値は次のように保存されます。

最終的に、ニューロンの重みは提供されたトレーニング データに基づいて最適化されます。その後、ニューロンに以前の状態と同じ新しい状態を考慮するように要求すると、正確な予測を行うことができます。これがバックプロパゲーションの仕組みです。

パッケージ化して実行

***、NeuralNetwork クラスが正常に初期化されたら、コードを実行できます。

Python プロジェクトでニューラル ネットワークを作成する方法の完全なコードは次のとおりです。

  1. numpyをnpとしてインポートする 
  2. クラスNeuralNetwork():  
  3. __init__(self)を定義します。  
  4. # 乱数生成のためのシード 
  5. np.ランダムシード(1)  
  6. #重みを、値が-1から1で平均が0の3行1列の行列に変換します 
  7. 自己シナプス重み= 2 * np.random.random((3, 1)) - 1  
  8. シグモイドの定義(自己、x):  
  9. #シグモイド関数の適用 
  10. 1 / (1 + np.exp(-x)) を返します。  
  11. sigmoid_derivative(self, x)を定義します。  
  12. #シグモイド関数の導関数を計算する 
  13. x * (1 - x) を返す 
  14. def train(self, トレーニング入力, トレーニング出力, トレーニング反復):  
  15. #重みを継続的に調整しながら正確な予測を行うようにモデルをトレーニングする 
  16. 範囲内の反復(training_iterations):  
  17. #ニューロンを介してトレーニングデータを吸い上げる 
  18. 出力= self.think (training_inputs)  
  19. #バックプロパゲーションのエラー率を計算する 
  20. エラー=トレーニング出力- 出力 
  21. #体重調整を行う 
  22. 調整= np .dot(training_inputs.T, error * self.sigmoid_derivative(出力))  
  23. self.synaptic_weights += 調整 
  24. def think(self, inputs):  
  25. #入力をニューロン経由で渡して出力を得る 
  26. #値を浮動小数点数に変換する 
  27. 入力inputs = inputs.astype(float)  
  28. 出力= self .sigmoid(np.dot(入力, self .synaptic_weights))  
  29. 出力を返す 
  30. __name__ == "__main__" の場合:  
  31. #ニューロンクラスの初期化 
  32. neural_network =ニューラルネットワーク()  
  33. print("ランダムに生成された最初の重み: ")  
  34. 印刷(ニューラルネットワーク.シナプスの重み)  
  35. #4つの例からなるトレーニングデータ - 3つの入力値と1つの出力 
  36. トレーニング入力= np.array([[0,0,1],  
  37. [1,1,1],  
  38. [1,0,1],  
  39. [0,1,1]])  
  40. トレーニング出力= np .array([[0,1,1,0]]).T  
  41. #トレーニング実施中 
  42. ニューラルネットワーク.train(トレーニング入力、トレーニング出力、15000)     
  43. print("トレーニング後の終了重み: ")  
  44. 印刷(ニューラルネットワーク.シナプスの重み)     
  45. user_input_one = str (input("ユーザー入力1: "))  
  46. user_input_two = str (input("ユーザー入力2: "))  
  47. user_input_three = str (input("ユーザー入力3: "))   
  48. print("新しい状況を検討中: ", user_input_one, user_input_two, user_input_three)  
  49. print("新しい出力データ: ")  
  50. 印刷(neural_network.think(np.array([user_input_one, user_input_two, user_input_three])))  
  51. print("わあ、やったね!")

コードを実行した後の出力:

このようにして、単純なニューラル ネットワークを作成することに成功しました。

ニューロンは最初にランダムな重みを割り当て、次にトレーニング例を使用して自分自身をトレーニングします。

その後、新しい状態[1,0,0]が出現すると、0.9999584と評価されます。

正解は 1 にしたかったことを覚えていますか?

この値は非常に近く、シグモイド関数の出力値は 0 から 1 の間になります。

もちろん、この例では、単純なタスクを実行するために単一のニューラル ネットワークのみを使用します。何千もの人工ニューラルネットワークを接続すると何が起こるでしょうか?人間の思考方法を完全に模倣することはできるでしょうか?

<<:  Baidu AIは素晴らしいキャンパスライフに新たなタッチを加え、新学期をより技術的に

>>:  自動運転、ニューメディア、農業、エネルギー、医療、工業などの垂直産業における 5G の重要な役割をシンプルかつ深く理解するにはどうすればよいでしょうか。

ブログ    
ブログ    
ブログ    
ブログ    

推薦する

3日でAppleの無料リストのトップに立った「ZAO」、このままでは死んでしまう

8月30日夜、「ZAO」と呼ばれるAI顔変更ソフトウェアがソーシャルメディアを席巻した。ユーザーは正...

研究はHPCを活用したAIの急速な成長を予測

Hyperion Research はハンブルクで毎年恒例の ISC HPC (ハイパフォーマンス ...

OpenAIの最初の投資家コスラ氏:AIスタートアップのほとんどは過大評価されている

2019年10月25日、人工知能の新興企業OpenAIが非営利団体から「営利企業」へと転換した際、シ...

...

清華大学がサッカーAIを開発:初めて10人の選手を同時にコントロールして試合を完了し、勝率は94.4%

[[434349]]この記事はAI新メディアQuantum Bit(公開アカウントID:QbitA...

メタ啓示: AIはメタバースの重要な変数である

最近、メタバースに新たな水が流れ込んできました。 Metaが開催した研究室でのディスカッションにおい...

ネイチャー誌が量子コンピューティングの大きな進歩を発表:史上初の量子集積回路が実現

6月23日、オーストラリアの量子コンピューティング企業SQC(Silicon Quantum Com...

GoogleはOpenAIの競合企業Anthropicに最大20億ドルを投資することに同意したと報じられている

事情に詳しい関係者によると、10月28日、Googleはこれまでの投資に加え、OpenAIの競合企業...

ビッグニュース!アリババの音声認識モデルのコア技術により、未来を「聞く」ことができる

[[255840]] Ali Sister の紹介: 音声認識技術は人工知能技術の重要な部分として、...

...

自動運転の安全性の問題をどう解決するのか?まずは名前を変えてみましょう。

現在、新世代情報技術の急速な発展に伴い、自動運転をはじめとした新興産業がますます台頭しています。世界...

人工知能は私たちの言語を理解するのでしょうか?思っていたよりも強力だ

2016年3月の「人間対機械」は、機械に対する認識を一新した。世界一の囲碁名人イ・セドルが、人工知能...

COVID-19ヘルスケア市場はこれまでと異なる

[[355787]]画像ソース: https://pixabay.com/images/id-537...

史上最も高いガンダムロボットが横浜港で公開される。高さ18メートルで歩行も可能

2月7日、横浜港で今年10月から1年間にわたり、歩行ガンダムロボットの大規模競技会が開催されることが...

ハギングフェイスCEOが2024年のAI業界の6つの大きな変化を予測!

2024年にAI業界はどのように進化するのでしょうか? OpenAIのグレッグ・ブロックマン会長は...