技術共有

人工知能アルゴリズムエンジニア(中級)コース8-PyTorchニューラルネットワーク ニューラルネットワークの基礎とコード詳細解説

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

皆さんこんにちは、Wei Xue AIです。今日は、人工知能アルゴリズムエンジニア(中級)コース8-PyTorchニューラルネットワークのニューラルネットワークの基礎とコードの詳細な説明を紹介します。ニューラルネットワークは、人間の脳の神経細胞の接続を模倣したコンピューティングモデルであり、画像認識や自然言語処理などの分野で広く使用されています。この記事では、ニューラル ネットワークの概念、構造、サンプル、トレーニング、評価と、完全な実行可能なコードを紹介します。

ニューラル ネットワークの基礎とコードの詳細な説明

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

ニューラル ネットワークは、多数のノード (またはニューロン) と、これらのノードを接続するエッジで構成されます。各ノードはニューロンを表し、各エッジはニューロン間の接続を表します。ニューラル ネットワークの主な機能は、入力データの加重加算と非線形変換を通じてデータから有用な情報を抽出することです。

2. ニューラルネットワークの構造

ニューラル ネットワークは通常、入力層、隠れ層、出力層に分かれています。入力層は外部データを受け取り、隠れ層がデータを処理し、出力層が最終結果を出力します。各層のノードは次の層のノードに接続されており、各接続には対応する重みがあります。

2.1 ニューラルネットワークの計算式

ニューラル ネットワークの出力は、次の式で計算できます。
a ( l ) = f ( z ( l ) ) a^{(l)} = f(z^{(l)})1つの(l)=((l))
z ( l ) = w ( l ) a ( l − 1 ) + b ( l ) z^{(l)} = w^{(l)}a^{(l-1)} + b^{(l)}(l)=(l)1つの(l1)+b(l)
で、 a ( l ) a^{(l)}1つの(l) 最初のものを示します lll レイヤーの出力、 z ( l ) z^{(l)}(l) 最初のものを示します lll レイヤーの加重加算結果、 w ( l ) w^{(l)}(l) そして b ( l ) b^{(l)}b(l) それぞれを表します lll レイヤーの重みとバイアス、 f ( ⋅ ) f(cdot)() は活性化関数を表します。
ここに画像の説明を挿入します

2.2 実行可能なコード

単純なニューラル ネットワーク構造の例を次に示します。

import numpy as np
def sigmoid(x):
    return 1 / (1 + np.exp(-x))
def feedforward(X, weights, biases):
    a = X
    for w, b in zip(weights, biases):
        z = np.dot(a, w) + b
        a = sigmoid(z)
    return a
# 定义输入数据
X = np.array([[1, 2], [3, 4]])
# 定义权重和偏置
weights = [np.array([[0.1, 0.2], [0.3, 0.4]]), np.array([[0.5], [0.6]])]
biases = [np.array([0.1, 0.2]), np.array([0.3])]
# 计算输出
output = feedforward(X, weights, biases)
print(output)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

3. ニューラルネットワークのサンプル

ニューラル ネットワークのサンプルには、入力データと対応するラベルが含まれています。トレーニング プロセス中、ニューラル ネットワークは重みとバイアスを継続的に調整して、出力をラベルにできるだけ近づけます。

3.1 損失関数

ニューラル ネットワークのトレーニングの目標は、損失関数を最小化することです。一般的に使用される損失関数には、平均二乗誤差 (MSE) とクロスエントロピー損失が含まれます。平均二乗誤差の式は次のとおりです。
J ( w , b ) = 1 2 m ∑ i = 1 m ( y ( i ) − a ( i ) ) 2 J(w, b) = frac{1}{2m}sum_{i=1}^{m}(y^{(i)} - a^{(i)})^2J(,b)=2メートル1=1メートル(ええ()1つの())2
で、 んんメートル サンプル数を表し、 y ( i ) y^{( i )} のええ() そして a ( i ) a^{(i)}1つの() それぞれを表します ii サンプルのラベルと予測値。

3.2 実行可能なコード

サンプル生成と損失計算の簡単な例を次に示します。

import numpy as np
def mse_loss(y_true, y_pred):
    return np.mean((y_true - y_pred) ** 2)
# 定义标签
y_true = np.array([[1], [0]])
# 计算损失
loss = mse_loss(y_true, output)
print(loss)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

4. ニューラルネットワークのトレーニング

ニューラル ネットワークのトレーニング プロセスには、順伝播と逆伝播が含まれます。順伝播はニューラル ネットワークの出力を計算し、逆伝播は重みとバイアスに対する損失関数の勾配を計算し、重みとバイアスを更新します。

4.1 バックプロパゲーション

バックプロパゲーション アルゴリズムは、連鎖規則を介して勾配を計算します。まず最初に lll レイヤーの重み w ( l ) w^{(l)}(l)、その勾配は次のように表現できます。
∂ J ∂ w ( l ) = a ( l − 1 ) ⋅ ( f ′ ( z ( l ) ) ⋅ δ ( l ) ) frac{部分 J}{部分 w^{(l)}} = a^{(l-1)} cdot (f'(z^{(l)}) cdot delta^{(l)})(l)J=1つの(l1)(((l))δ(l))
で、 δ ( l ) デルタ^{(l)}δ(l) 最初のものを示します lll レイヤーエラー、 f ′ ( ⋅ ) f'(cdot)() 活性化関数の導関数を表します。

4.2 ニューラルネットワークトレーニング用のコード

簡単なニューラル ネットワーク トレーニングの例を次に示します。

import numpy as np
def sigmoid_derivative(x):
    return sigmoid(x) * (1 - sigmoid(x))
def backpropagation(X, y_true, weights, biases):
    gradients_w = [np.zeros(w.shape) for w in weights]
    gradients_b = [np.zeros(b.shape) for b in biases]
    # 前向传播
    a = X
    activations = [a]
    zs = []
    for w, b in zip(weights, biases):
        z = np.dot(a, w) + b
        zs.append(z)
        a = sigmoid(z)
        activations.append(a)
    # 计算输出层误差
    delta = activations[-1] - y_true
    gradients_b[-1] = delta
    gradients_w[-1] = np.dot(activations[-2].T, delta)
    # 反向传播
    for l in range(2, len(weights) + 1):
        z = zs[-l]
        sp = sigmoid_derivative(z)
        delta = np.dot(delta, weights[-l + 1].T) * sp
        gradients_b[-l] = delta
        gradients_w[-l] = np.dot(activations[-l - 1].T, delta)
    return gradients_w, gradients_b
# 定义学习率
learning_rate = 0.1
# 进行一次梯度下降
gradients_w, gradients_b = backpropagation(X, y_true, weights, biases)
# 更新权重和偏置
for w, grad_w in zip(weights, gradients_w):
    w -= learning_rate * grad_w
for b, grad_b in zip(biases, gradients_b):
    b -= learning_rate * grad_b
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36

5. ニューラルネットワークの評価

ニューラル ネットワークの評価は通常、テスト セットの精度または損失関数の値を計算することによって行われます。精度とは、サンプルの総数に対するモデルによって正しく予測されたサンプルの数の比率を指します。

5.1 精度

精度の計算式は次のとおりです。
精度 = 正しい予測の数 予測の総数 text{精度} = frac{text{正しい予測の数}}{text{予測の総数}}正確さ=予測の総数正しい予測の数

5.2 コードの実装

簡単なニューラル ネットワーク評価の例を次に示します。

def predict(X, weights, biases):
    a = X
    for w, b in zip(weights, biases):
        z = np.dot(a, w) + b
        a = sigmoid(z)
    return np.round(a)
# 定义测试数据
X_test = np.array([[2, 3], [4, 5]])
# 进行预测
predictions = predict(X_test, weights, biases)
print(predictions)
# 计算准确率
y_test = np.array([[1], [0]])
accuracy = np.mean(predictions == y_test)
print("Accuracy:", accuracy)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

要約する

この記事では、順伝播、逆伝播、勾配降下、評価プロセスを含む単純なニューラル ネットワークを実装しました。このネットワークは単純ですが、ニューラル ネットワークの基本原理と実装方法を示しています。実際のアプリケーションでは、ニューラル ネットワークの構造はより複雑になり、より多くの層とノード、さらに高度な最適化アルゴリズムと正則化技術が必要になります。さらに、最新の深層学習フレームワーク (TensorFlow や PyTorch など) は、より効率的な実装と自動微分機能を提供し、ニューラル ネットワークの構築とトレーニングをより便利にしています。