Pythonでグラフを描いてニューラルネットワークを理解する

Pythonでグラフを描いてニューラルネットワークを理解する

Python 中国語コミュニティ (ID: python-china)

人工ニューラル ネットワーク (ANN) は、人間の監視を必要とする多くの日常的なタスクにうまく適用されてきましたが、その複雑さのために、その仕組みやトレーニング方法を理解することは困難です。

このブログでは、ニューラル ネットワークとは何か、どのように機能するか、外れ値の検出や金融時系列の予測などの問題にどのように適用するかについて詳しく説明しました。

この記事では、シンプルなフィードフォワード ニューラル ネットワークがトレーニング中に一連の入力をさまざまな空間にマッピングして、より簡単に理解できるようにする方法を視覚的に示します。

データ

仕組みを示すために、まず「おもちゃ」のデータセットを作成しました。 2 つのクラス (0 と 1) に均一に分散された 400 個のサンプルが含まれ、各サンプルには 2 つの次元 (X0 と X1) があります。

注: すべてのデータは、平均 [-1, 0, 1]、標準偏差 [0.5, 0.5, 0.5] の 3 つのランダム正規分布から取得されています。

ネットワークアーキテクチャ

次のステップは、ANN の構造を次のように定義することです。

隠し層は最小の次元 (2 ニューロン) を持ち、ネットワークが各サンプルの位置を 2D 散布図にマッピングしていることを示します。

前の図には示されていませんが、各レイヤーには出力を変更するアクティベーション関数があります。

•入力層には、入力値を複製するための線形活性化関数があります。

• 隠れ層には ReLU または tanh 活性化関数があります。

•出力層には、入力値を[0, 1]の範囲に「縮小」するシグモイド活性化関数があります。

電車

ネットワークのアーキテクチャに加えて、ニューラル ネットワークのもう 1 つの重要な側面はトレーニング プロセスです。 ANN をトレーニングする方法は多数ありますが、最も一般的なのはバックプロパゲーション プロセスです。

バックプロパゲーション プロセスでは、まずすべてのトレーニング例 (またはバッチ) がネットワークに送られ、次にオプティマイザーが損失関数に基づいてネットワークの重みを更新する方法を計算し、学習率に基づいて重みを更新します。

損失が収束するか、一定数のエポックが経過するか、ユーザーがトレーニングを停止すると、トレーニング プロセスは停止します。エポックとは、すべてのデータがネットワークに送信され、順方向計算 + 逆伝播プロセスが完了することを意味します。

私たちのケーススタディでは、隠れ層の 2 つの異なる活性化関数 (ReLU と Tanh) と 3 つの異なる学習率 (0.1、0.01、0.001) を使用してアーキテクチャをトレーニングしました。

入力サンプルの周囲には、その場所のサンプルに対してモデルによって提供される予測確率を示す点の「グリッド」があります。これにより、モデルはトレーニング中により明確な境界を生成できるようになります。

  1. # 進化を抱くフィギュア 
  2. f,= plt .subplots(1, 3, figsize =(18, 6), gridspec_kw ={'height_ratios':[.9]})  
  3. f.subplots_adjust(= 0 .82)  
  4. # 進化を記録するカメラ 
  5. カメラ=カメラ(f)  
  6. # エポック数 
  7. エポック= 20    
  8. # エポックタイムを繰り返す 
  9. i が範囲(エポック)内である場合:  
  10. # モデルを評価する (acc, loss)  
  11. 評価=モデル.evaluate(x_train, y_train, verbose = 0 )  
  12. # 中間モデルを生成する 
  13. model_hid_1 =モデル(model.input、model.get_layer("hidden_​​1").output)  
  14. model_act_1 =モデル(model.input、model.get_layer("activation_1").output)
  15.   # データを生成する 
  16. df_hid_1 = pd .DataFrame(model_hid_1.predict(x_train)、=['X0'、'X1'])  
  17. df_hid_1['y'] = y_train  
  18. df_act_1 = pd .DataFrame(model_act_1.predict(x_train)、=['X0'、'X1'])  
  19. df_act_1['y'] = y_train  
  20. # メッシュグリッドを生成(200 個の値)  
  21. x = np .linspace(x_train[:,0].min(), x_train[:,0].max(), 200)  
  22. y = np .linspace(x_train[:,1].min(), x_train[:,1].max(), 200)  
  23. xv, yv = np.meshgrid (x, y)  
  24. # メッシュグリッドの強度を生成する 
  25. df_mg_train = pd .DataFrame(np.stack((xv.flatten(), yv.flatten()), axis = 1 ), columns = ['X0', 'X1'])  
  26. df_mg_train['y'] = model.predict(df_mg_train.values)  
  27. df_mg_hid_1 = pd .DataFrame(model_hid_1.predict(df_mg_train.values[:,:-1]),=['X0', 'X1'])  
  28. df_mg_hid_1['y'] = model.predict(df_mg_train.values[:,:-1])  
  29. df_mg_act_1 = pd .DataFrame(model_act_1.predict(df_mg_train.values[:,:-1]),=['X0', 'X1'])  
  30. df_mg_act_1['y'] = model.predict(df_mg_train.values[:,:-1])  
  31. # データセットを表示
  32.   ax = sns .scatterplot( x = 'X0' y = 'X1' data = df_mg_train hue = 'y' x_jitter = True y_jitter = True legend = None ax = axes [0]、 palet = sns .diverging_palette(220, 20, as_cmap = True )、 alpha = 0 .15)
  33.   ax = sns .scatterplot( x = 'X0' y = 'X1' data = df_train hue = 'y' legend = None ax = axes [0]、 palet = sns .diverging_palette(220, 20, n = 2 ))
  34.   ax.set_title('入力レイヤー')  
  35. ax = sns .scatterplot( x = 'X0' y = 'X1' data = df_mg_hid_1 hue = 'y' x_jitter = True y_jitter = True legend = None ax = axes [1]、 palet = sns .diverging_palette(220, 20, as_cmap = True )、 alpha = 0 .15)
  36. ax = sns .scatterplot( x = 'X0' y = 'X1' data = df_hid_1 hue = 'y' legend = None ax = axes [1]、 palet = sns .diverging_palette(220, 20, n = 2 ))
  37. ax.set_title('非表示レイヤー')  
  38. # 現在のエポックとメトリックを表示します 
  39. ax.text( x = 0.5 y = 1.15 s = 'Epoch {}'. format(i+1)、 fontsize = 16 weight = 'bold' ha = 'center' va = 'bottom' transform = ax.transAxes )  
  40. ax.text( x = 0.5 y = 1.08 s = '精度 {:.3f} - 損失 {:.3f}'。 format(evaluation[1]、evaluation[0])、 fontsize = 13 ha = 'center' va = 'bottom' transform = ax.transAxes )  
  41. ax = sns .scatterplot( x = 'X0' y = 'X1' data = df_mg_act_1 hue = 'y' x_jitter = True y_jitter = True legend = None ax = axes [2]、 palet = sns .diverging_palette(220, 20, as_cmap = True )、 alpha = 0 .15)
  42.   ax = sns .scatterplot( x = 'X0' y = 'X1' data = df_act_1 hue = 'y' legend = None ax = axes [2]、 palet = sns .diverging_palette(220, 20, n = 2 ))
  43. ax.set_title('アクティベーション')  
  44. # プロットを表示 
  45. plt.show()  
  46. # GIFを生成するための呼び出し 
  47. カメラ.スナップ()  
  48. # 損失< = 0.263 の場合は実行を停止します (必要ない場合は 200 回のループを回避します)  
  49. 評価[0] < = 0.263の場合:  
  50. 壊す 
  51. # モデルを1エポックトレーニングする 
  52. model.fit(x_train, y_train,エポック= 1 詳細= 0 )

ReLU アクティベーション

Tanh アクティベーション

注: バイナリ分類問題を扱っているため、使用される損失関数はバイナリクロスエントロピーであり、オプティマイザーは Adam と呼ばれるオリジナルの確率的勾配降下法 (SGD) の修正版です。エポックが 200 に達するか、損失が 0.263 未満になると、モデルのトレーニングは停止します。

<<:  アルゴリズム要件実装の難航の記録: 軽量な人間姿勢推定モデル開発への道

>>:  AIを活用したリアルタイムの脅威インテリジェンスでサイバー脅威に対抗する方法

ブログ    
ブログ    
ブログ    

推薦する

2023年までにスマートホームとモノのインターネットは完全に相互運用可能になると予想されている。

「AI+IoT」技術の応用の実現により、消費者のスマートデバイスに対する需要が高まり、スマートスピ...

CTOは「大きな衝撃を受けた」:GPT-4Vの自動運転テストを5回連続で実施

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

機械学習の導入を容易にする 6 つのツール

「機械学習」という言葉には魔法のような雰囲気があります。機械学習は一般に一般の人々に受け入れられてい...

本物と見間違えるほどリアルなAI変顔技術は本当に完璧なのか?

囲碁界の無敵の「アルファ碁」から、どこにでもある「顔認識」まで、機械学習は人々の生活に驚異的な変化を...

機械学習は金融自動化においてどのような役割を果たすのでしょうか?

金融やその他の分野における自動化は避けられません。しかし、金融サービスの自動化は、高いレベルの注意、...

保険会社、パンデミックによりAI自動化を導入

Star Health と ICICI Lombard は、医療保険契約者に対する請求の事前承認プロ...

AIのボトルネックの突破口は物理的な人工知能にある

人間の生活様式はここ数十年で大きく変化し、リモートおよび自動化されたプロセスの必要性が浮き彫りになり...

アルゴリズムを視覚化するオープンソース プロジェクトをお勧めします。

誰もが知っているように、アルゴリズムを学ぶことは、コンピューターサイエンスの中で最も退屈でわかりにく...

ジェネレーティブ AI がデータ センターの要件をどのように変えるか

データ センターとは何ですか。どのように使用しますか。具体的には、データ センターにはどのような種類...

...

人工知能はどれくらい怖いのでしょうか?ホーキング博士はなぜ人々に慎重になってほしいのでしょうか?本当に40%の雇用が失われるのでしょうか?

ビル・ゲイツ氏はまた、現在私たちに安心感を与えている人工知能が、最終的には現実世界に脅威を与える可能...

自動運転の浮き沈み:バブルが消えた後

[51CTO.comよりオリジナル記事] 静かな2019年を経て、自動運転業界は新年を迎え、徐々に活...

6144個のTPU、5400億個のパラメータ、バグ修正、ジョーク解釈など、GoogleはPathwaysを使用して大規模なモデルをトレーニングしました

Google の次世代アーキテクチャ Pathways は、大規模なモデルのトレーニングに使用されて...

GitHub のスター数が 16.9k に急上昇、MetaGPT はインターネット全体で人気に!

著者 | 王 睿平今日、大規模言語モデル技術が継続的に成熟するにつれ、専門家はそれを活用してインテリ...

2021年のAI展望

人工知能は進歩し続け、企業の運営方法や私たち自身の日常の経験を変えています。実際、AI はほぼすべて...