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

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

作業を実行するための明示的なアルゴリズムを知らなくても、特定のタスク用にニューラル ネットワーク (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 アプリケーションに顔検出機能を追加する

ブログ    

推薦する

機械学習にはどのような数学的基礎が必要ですか?

[[184240]]ここ数か月間、データサイエンスの世界にチャレンジして、機械学習の技術を使って統...

女性の労働はAIに置き換えられやすいのか?

最近の多くの研究では、主に人工知能や自動化における技術の進歩が、男性よりも女性の雇用に大きな影響を与...

2025年までに音声認識市場は267億9000万ドルに達する

3月29日、市場調査会社Meticulous Market Researchが発表した最新のレポート...

アリババが自社開発のAIクラスターの詳細を発表:64基のGPU、数百万のカテゴリーのトレーニングを4倍高速化

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

...

基本的なプログラミングアルゴリズムを簡単にマスターする(パート2)

[[121970]]この記事を書く前に、プログラマーの基本的な知識についてお話ししたいと思います。...

...

BATのアルゴリズムエンジニアにまた拒否された

[[186071]]今日、私は BAT のアルゴリズム エンジニアに再び拒否されました。はい、お読み...

...

...

AWS でディープラーニングを使用するための 10 個の Linux コマンド

[[202723]] AWS 上で大規模なディープラーニング処理を実行することは、学習と開発を行うた...

AIの将来にとって人間の関与が重要な理由

人工知能技術の進歩は、自動化と革新の新しい時代の到来を告げるものとなるでしょう。しかし、機械知能の進...

ディープラーニング入門 - TensorFlow を使ってモデルをトレーニングする方法を教えます

[[206688]]導入Tensorflow はバージョン 1.0 へのアップデート後に多くの新機能...

テンセント AI ラボが初の自動モデル圧縮フレームワークのソースを公開: ディープラーニングをポケットに

テンセントAIラボ機械学習センターは本日、世界初の自動ディープラーニングモデル圧縮フレームワーク「P...