機械学習(20)---ニューラルネットワークの詳しい解説


1. ニューラルネットワークの概要

1.1 ニューロンモデル

 1. ここでは最も広範な定義が採用されています。ニューラル ネットワークは、適応可能な単純なユニットで構成された広く並列に相互接続されたネットワークであり、その構成により、現実世界の物体に対する生物学的神経系の対話型応答をシミュレートできます。

 2. 定義における「単純ユニット」は、ニューロン モデルと呼ばれる、ニューラル ネットワークの最も基本的なコンポーネントです。現在でも使われているのが「MPニューロンモデル」です。

ここに画像の説明を挿入します

 3. このモデルでは、ニューロンは他の n 個のニューロンから入力信号を受信します。これらの入力信号は、重み付けされた接続を通じて送信されます。ニューロンが受信する合計入力値は、ニューロンのしきい値に等しくなります。比較が行われ、次の処理が行われます。ニューロンの出力を生成する「活性化関数」。

1.2 アクティベーション機能

 1. ニューラル ネットワークの活性化関数は、非線形特性を導入するためにニューロンの出力に適用される非線形関数です。アクティベーション関数の機能は、複雑なデータ パターンに適切に適応できるように入力信号を変換することです。

 2. 理想的な活性化関数は、入力値を出力値 "0" と "1" にマッピングするステップ関数です。明らかに、"1" はニューロンの興奮に対応し、"0" はニューロンの抑制に対応します。ただし、ステップ関数には不連続性や滑らかさなどの望ましくない特性があるため、活性化関数としてシグモイド関数がよく使用されます。大きな範囲で変動する可能性のある入力値を (0, 1) の出力値の範囲に押し込むため、「スカシ関数」(squashi function) と呼ばれることもあります。

ここに画像の説明を挿入します
 3. 隠れ層では線形活性化関数を使用しないでください。通常は隠れ層で ReLu 活性化関数を使用します。

ここに画像の説明を挿入します

2. パーセプトロン

2.1 概要

 1. パーセプトロンは 2 層のニューロンで構成されています。入力層は外部入力信号を受け取り、出力層に渡します。出力層は MP ニューロン (「しきい値ロジック ユニット」とも呼ばれます) です。

ここに画像の説明を挿入します
 2.(手書き)パーセプトロン学習法:

ここに画像の説明を挿入します

2.2 論理演算の実装

 1. パーセプトロンは、基本的な論理演算 (AND、OR、NOT) を実行できます。注: 正しいパラメータを選択する必要があります。
 下図のように AND を例にすると、x1 と x2 が同時に 1 の場合は出力結果は 1、どちらかまたは両方が 0 の場合は出力結果は 0 となり、論理が実現されます。 AND の演算。

ここに画像の説明を挿入します

 2. ただし、単層パーセプトロンは XOR 演算を実装できません。

2.3 多層パーセプトロン

 1. 多層パーセプトロンは複数の層のニューロンから構成されます. 出力層と入力層の間のニューロンの層は隠れ層と呼ばれます. 隠れ層と出力層の両方のニューロンが活性化されます. 機能ニューロンの機能.

ここに画像の説明を挿入します

 2. 多層パーセプトロンは複数の隠れ層を持つことができるため、XOR 演算を実装できます。

 3. 多層パーセプトロンは強力な表現機能を備えており、隠れ層に十分なニューロンが含まれている限り、多層パーセプトロンは任意の精度で任意の複雑さの連続関数を近似できます。多層パーセプトロンは複数の隠れ層を持つことができ、各隠れ層は異なる特徴を抽出し、隠れ層が深いほど (出力層に近いほど)、より高いレベルの特徴を抽出できます。

ここに画像の説明を挿入します
ここに画像の説明を挿入します

3. ニューラルネットワーク

3.1 動作原理

 1. 原理は要約すると次のようになります。各層は数値ベクトルを入力し、それに一連のロジスティック回帰単位を適用し、次に別の数値ベクトルを計算し (この層の出力は次の層の入力として機能します)、その後、次の値を渡します。最終出力層に到達するまで、ある層から別の層に移動します。その後の出力結果は予測される場合もあれば、予測されない場合もあります。

 2. 単純なニューラル ネットワーク モデルの動作原理の分析:

ここに画像の説明を挿入します

注記: a、w、b の右上隅にある角括弧内の数字は層を表し、右下隅の数字は層内のニューロンを表します。

 3. 単純なものから複雑なものまで、多層ニューラル ネットワークの動作原理は上記と同じです。4 層ネットワークを例に挙げてみましょう。

ここに画像の説明を挿入します

注記: 一般的に、多層ニューラル ネットワークについて話す場合、これには出力層と、入力層を除くすべての隠れ層が含まれます。

3.2 順伝播

 ニューラル ネットワークは、トレーニングと計算中に順伝播アルゴリズム (左から右へ) を使用します。

ここに画像の説明を挿入します

3.3 Tensorflow の実践的なデモンストレーション

3.3.1 表示するためにデータセットをインポートする

 MNIST データセットは、60,000 枚のトレーニング画像と 10,000 枚のテスト画像、および画像内に存在する数値を表すラベルで構成されています。各画像は 28×28 グレースケール ピクセルで表され、ここで API を直接呼び出すことができます。

import tensorflow as tf
import matplotlib.pyplot as plt

mnist = tf.keras.datasets.mnist
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()

# 查看整体情况
print("train_images shape: ", train_images.shape)
print("train_labels shape: ", train_labels.shape)
print("test_images shape: ", test_images.shape)
print("test_labels shape: ", test_labels.shape)

# 展示前9个图像
fig = plt.figure(figsize=(10, 10))

nrows = 3
ncols = 3
for i in range(9):
    fig.add_subplot(nrows, ncols, i + 1) #行数、列数、索引
    plt.imshow(train_images[i])
    plt.title("Digit: {}".format(train_labels[i]))
    plt.axis(False)
plt.show()

ここに画像の説明を挿入します

3.3.2 データの前処理

 数字が含まれているため、モデルが数字を数値として扱うことができなくなります。私たちの目的は、サイズの異なる数値ではなく、数字を識別することであるため、一意のラベルを付けます。

train_images = train_images / 255
test_images = test_images / 255

print("First Label before conversion:")
print(train_labels[0]) #5

# 转换成One-hot标签
train_labels = tf.keras.utils.to_categorical(train_labels)
test_labels = tf.keras.utils.to_categorical(test_labels)

print("First Label after conversion:")
print(train_labels[0]) #[0. 0. 0. 0. 0. 1. 0. 0. 0. 0.]

3.3.3 モデルの構築

 1.レイヤーを平らにする: 入力画像は 2D 配列です。平坦化レイヤーは、行ごとにアンスタッキングすることにより、2D 配列 (28 x 28 ピクセル) を 1D 配列 (ピクセル) に変換します。この層はデータの形状を変更するだけで、パラメータ/重み (28*28=784) は学習しません。隠れ層: 私たちの唯一の隠れ層は、完全に接続されたノード (またはニューロン) の密な層で構成され、それぞれが活性化関数を持ちます512relu出力層: ニューラル ネットワークの出力層は 10 個の出力ニューロンを備えた高密度層で構成され、各ニューロンは 10 個の確率を出力します。各確率は 0 ~ 9 で、画像が対応する数値である確率を表します。出力層には、入力アクティベーションを確率に変換するアクティベーション関数が割り当てられますsoftmax

 2.損失関数: これは、実際のラベルとモデルによって予測されたラベルの間の誤差を見つける方法をモデルに指示します。このメトリクスは、トレーニング中のモデルの精度を測定します。モデルでこの関数値を最小化する必要があります。モデルには損失関数を使用します。最適化: これは、データと損失関数の値を調べてモデルの重み/パラメーターを更新する方法をモデルに指示します。モデルにはオプティマイザ adam を使用します。索引(オプション): トレーニングとテストのステップを監視するためのメトリクスのリストが含まれています。モデルによって正確に分類された精度または画像の数を使用します。

### 设置图层
model = tf.keras.Sequential([
  # 展平层
  tf.keras.layers.Flatten(),
  # 隐藏层
  tf.keras.layers.Dense(units=512, activation='relu'),
  # 输出层
  tf.keras.layers.Dense(units=10, activation='softmax')
])

### 编译模型
model.compile(
  loss = 'categorical_crossentropy',
  optimizer = 'adam',
  metrics = ['accuracy']
)

3.3.4 評価モデル

 1. 損失を視覚化する:

ここに画像の説明を挿入します

 2. 視覚化の精度:

ここに画像の説明を挿入します

4. バックプロパゲーション

 1. ここでは、導入のために層ごとに 1 つのユニットを持つ多層パーセプトロンを使用します。下図のW、BのKは省略値を表します。

ここに画像の説明を挿入します

 2. バックプロパゲーション計算では、パラメータごとに実際に勾配降下法を実行します。勾配降下法を見つける鍵は、各パラメーターの損失関数の偏導関数を見つけることです。

ここに画像の説明を挿入します

 3. 導出プロセス:

ここに画像の説明を挿入します
 4.バックプロパゲーションの概要: 最後の層から開始して、各パラメータの偏導関数を計算し、各層で得られた偏導関数の値 (誤差) を前の層に逆伝播することで、前の層でのパラメータの偏導関数の計算を容易にします。層。

5. 質問例

5.1 質問 1

ここに画像の説明を挿入します
ここに画像の説明を挿入します

5.2 質問 2

ここに画像の説明を挿入します
ここに画像の説明を挿入します

5.3 質問 3

ここに画像の説明を挿入します
ここに画像の説明を挿入します

おすすめ

転載: blog.csdn.net/m0_62881487/article/details/132986753