何?ニューラルネットワークは新しい知識も生み出せるのでしょうか?

何?ニューラルネットワークは新しい知識も生み出せるのでしょうか?

作業を実行するための明示的なアルゴリズムを知らなくても、特定のタスク用にニューラル ネットワーク (NN) を設計し、トレーニングできるという事実に、多くの人が驚嘆しています。たとえば、有名な手書き数字認識のチュートリアルはわかりやすいですが、その背後にあるロジックはニューラル ネットワーク内に隠されており、階層構造、重み、および活性化関数を通じてのみ垣間見ることができます。

[[269379]]

画像ソース: Unsplash

この論文では、ニューラル ネットワークの透明性原理を通じて、ニューラル ネットワークの「ブラック ボックス知識」を明らかにします。この目的のために、ブール XOR 関数を備えたニューラル ネットワークを検証します。まず、既知の代数関係を明確に含む既知の XOR プロパティ プロセスを使用して、ボトムアップ ニューラル ネットワークが構築されます。 2 番目のステップでは、TensorFlow Keras を使用して、シンプルなグラフィカル プログラミング ツールから XOR ロジック演算までニューラル ネットワークをトレーニングします。

*** 2 つの方法を比較します。 Keras ニューラル ネットワークをブール コンポーネントに分解すると、論理設定が最初のステップで構築されたニューラル ネットワークと異なることがわかります。トレーニングされたニューラル ネットワークは、異なるブール関数を使用して XOR 演算の代替表現を発見しました。

この代替 XOR 式は数学では知られていないわけではありませんが、少なくとも新しいものです。これは、ニューラル ネットワークが新しい知識を生み出せることを示唆している可能性があります。しかし、それを抽出するには、ニューラル ネットワークの設定とパラメーターを明示的なルールに変換できなければなりません。

XOR ニューラル ネットワーク (XOR NN) のボトムアップ構築

XOR演算はマッピングによって定義されるブール関数であり、

  1. 排他的論理和 (0,0) = 排他的論理和 (1,1) = 0
  2. 排他的論理和 (1,0) = 排他的論理和 (0,1) = 1

XOR演算用の既知のニューラルネットワークまたはGoogle ID列を構築する

  1. XOR (x,y) = AND ( NAND (x,y) 、 OR (x,y) )

これは、演算子 AND、NAND (AND ではない)、および OR がよく知られており、これらはすべて、2 つの入力ノードと 1 つの出力ノード、バイアス、およびシグモイド活性化関数を持つ単純なニューラル ネットワークで表現できるため役立ちます。

ブール関数演算子のニューラル ネットワーク

これを基に、NAND、AND、OR NN を接続することで XOR ニューラル ネットワークを構築できます。したがって、XOR は 3 層のニューラル ネットワークになります。

XOR演算によるニューラルネットワーク

可能な入力構成を入力し、出力を調べます (この記事で使用されている Excel ワークシート)。実効値は、(0,0)と(1,1)の場合はそれぞれ0.0072、(0,1)と(1,0)の場合は0.9924です。

他のニューラル ネットワークは、XOR 演算の次の表現を使用して構築できます。

  1. XOR (x,y) = OR ( AND ( NOT(x) , y ) , AND ( x , NOT(y) ) )
  2. XOR (x,y) = NAND ( NAND ( x 、 NAND ( x,y) ) 、 NAND ( y 、 NAND ( x,y) ) )

ただし、これらの ID 列により、ネットワークはより複雑になります。

さらに、XOR 演算は線形に分離可能ではないため (活性化関数は厳密に単調であるため)、2 層ニューラル ネットワークを構築することはできません。

しかし、XOR 演算を実行するニューラル ネットワークを構築する他の方法があるかもしれません。次のセクションでは、ニューラル ネットワークをトレーニングして別のソリューションを探します。

TensorFlow Keras を使用した XOR ニューラル ネットワークの構築

Keras は強力で使いやすいニューラル ネットワーク ライブラリです。前のセクションでは、3 層の 2-2-1 モデルを構築し、以前に構築したニューラル ネットワークと比較しました。

エラーバックプロパゲーションは、ニューラル ネットワークを構築するための標準的なアプローチである、学習率 1 と平均二乗誤差損失関数を持つ勾配降下法オプティマイザーを使用して実行されました。

以下は Python コード スニペットです。

  1. # XOR演算用のNNを生成する
  2. # 入力層: < NODES >ノード、各ビットに 1 つ ( 0 = false 、 + 1 = true )
  3. # 出力層: 結果用のノード 1 つ ( 0 = false 、+ 1 = true )
  4. # シグモイド活性化関数、勾配降下法オプティマイザー、平均二乗誤差損失関数を使用する
  5. # 最終更新日: 2019年5月28日
  6.   
  7. テンソルフローをtfとしてインポートする
  8. numpyをnpとしてインポートする
  9. matplotlib.pyplot を plt としてインポートします。
  10.   
  11. # モデルを定義する
  12. ノード= 2  
  13. モデル= tf .keras.Sequential()
  14. model.add(tf.keras.layers.Dense(ノード、 input_dim = 2 アクティベーション= tf .nn.sigmoid))
  15. モデルを追加します(tf.keras.layers.Dense(1, activation = tf.nn.sigmoid ))
  16. model.compile(オプティマイザー= tf .train.GradientDescentOptimizer(1),損失= tf .keras.losses.mean_squared_error,メトリック= ['binary_accuracy'])
  17. モデル.要約()
  18.   
  19. # トレーニングデータとテストデータを生成する
  20. エポック= 10000  
  21. データ入力= np .array([[0,0],[0,1],[1,0],[1,1]])
  22. data_out = np.array ([0,1,1,0])
  23.   
  24. # 列車モデル
  25. history = model .fit(data_in, data_out, epochs epochs =epochs, verbose = 0 )
  26.   
  27. # トレーニング履歴の分析
  28. history.history.keys() のキーの場合:
  29. plt.scatter(範囲(エポック), history.history[キー], s = 1 )
  30. plt.ylabel(キー)
  31. plt.xlabel('エポック')
  32. plt.show()
  33.   
  34. # モデルで予測する
  35. 結果= model.predict (data_in)
  36.   
  37. # 結果を印刷
  38. def printarray(arr):
  39. np.array2string(arr).replace('\n','') を返します。
  40.   
  41. 印刷()
  42. print('input', printarray(data_in))
  43. print('出力(計算)', printarray(data_out))
  44. print('出力 (予測) ', printarray(結果))
  45. print('出力 (予測ノルム)', printarray(np.round(結果)))
  46.   
  47. # モデルの重みを取得
  48. 印刷()
  49. 印刷(model.get_weights())

XOR 演算の利点は、教えることができる構成が 4 つしかないため、パラメーター空間全体をトレーニングできることです。ただし、モデルを駆動して損失ゼロと 100% の精度を達成するには、データセットをニューラル ネットワークに渡す何らかのプロセスが必要です。つまり、出力はゼロに近づき、それぞれ (0,1)、(1,0)、(0,0)、(1,1) になります。

XOR ニューラル ネットワークの損失とエポックの比較

XORニューラルネットワークの精度とエポックの比較

しかし、トレーニング期間が停滞し、接続できなくなる可能性もあります。すると、精度は 75% または 50% で止まります。つまり、1 つまたは 2 つのバイナリ タプルのマッピングが正しくありません。この場合、適切なソリューションが得られるまでニューラル ネットワークを再構築する必要があります。

分析と結論

ここで、Keras ニューラル ネットワークが構築されたものと同様の構造を持っていることを確認します。重みを返すことによって (コード スニペットの最後を参照)、重みとバイアス値を取得します。

Pythonスクリプトの出力

これらのパラメータを使用して、ニューラル ネットワークを再構築します (この場合も Excel を使用)。 3 つの演算子で構成されます。

Keras でトレーニングされた XOR ニューラル ネットワーク

可能なすべての構成を入力することで、H1、H2、および O 演算子に関連付けられたブール関数を識別できます。

Keras XOR ニューラル ネットワークのブール関数

興味深いことに、Keras ニューラル ネットワークは構築されたものと同じロジックを持っていると思っていましたが、別のソリューションが作成されました。ニューラル ネットワークが見つけた式である演算子 NAND、OR、AND の代わりに、OR、AND、(比較的知られていない) INH を使用します。

  1. XOR (x,y) = INH ( OR (x,y)、 AND (x,y) )

これは、ニューラル ネットワークが以前にはなかった知識を獲得できることを示しています。もちろん、「新しい知識」は相対的なものであり、既知の程度によって異なります。つまり、XOR 演算のすべての表現を知っていれば、Keras ニューラル ネットワークには追加の価値はありません。

さらに、より複雑なニューラル ネットワークの場合、重みを明示的なアルゴリズムまたは数式に変換するのは簡単ではありません。しかし、おそらくこの種の専門知識こそが、将来の AI 専門家が備えていなければならないものなのでしょう。

<<:  求人検索サイトIndeedの統計:AI採用は減速、求職者の関心は低下

>>:  JavaScript チュートリアル: Web アプリケーションに顔検出機能を追加する

ブログ    
ブログ    
ブログ    

推薦する

AI、ブロックチェーン、IoT、5Gの未来は統合だ

企業は業務を最適化し、現在の誇大宣伝サイクルを活用するために AI の導入に躍起になっています。報告...

...

企業はどのように AI を活用してビジネスの成長を促進できるのでしょうか?

人工知能 (AI) の導入によって得られる潜在的な利益を考えると、企業は傍観者でいるわけにはいきませ...

C# アルゴリズムの選択ソートの簡単な分析

C# 選択ソート アルゴリズムとは何ですか?これはどのように達成されるのでしょうか?この紹介が C#...

オタクなおじさんが独学でAIを学んでマスターレベルを作成し、Twitterで人気になった

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...

テスラのAIディレクター、カルパシー氏は、すべてのMLモデルをTransformerで定義することでAI統合のトレンドについてツイートした。

本日、テスラAIのディレクターであり、オートパイロットビジョンチームのリーダーであるアンドレイ・カル...

...

AIとビッグデータのつながり

ビッグデータと人工知能は、今日最も新しく、最も有用なテクノロジーの 2 つです。人工知能は10年以上...

...

...

製造および産業環境監視アプリケーション向けの AI 搭載マシンビジョン

従来の産業および製造現場では、作業者の安全の監視、オペレーターの効率性の向上、品質検査の改善はすべて...

...

...

オーストラリアの裁判所が判決:人工知能システムDABUSが特許発明者として認められる!

[[416531]]この記事はLeiphone.comから転載したものです。転載する場合は、Lei...

...