機械学習、深層学習に関する優れた記事


機械学習と深層学習に関する優れた記事をいくつか記録します。

1、CNN

インターネット上の優れた記事へのリンクをいくつかまとめ、同時に私が個人的に最も重要だと思う記事を記録しました。

「30 分で畳み込みニューラル ネットワークを学ぶ」 : 最初にこの記事を読んでください。理解できない場合は、別途情報を確認するか、以下のエクスペリエンス内のリンクを使用できます。

1.1. 畳み込み層:

  1. ローカル接続(1x1 コンボリューション カーネルは特別な完全接続とみなすことができ、完全接続は特別なコンボリューションとみなすこともできます) +重み共有どちらの目的もパラメータの量を減らすことです。
  2. コンボリューション カーネルの概念(実際には、コンボリューション カーネルのサイズを計算する際の重み行列であり、異なるコンボリューション カーネルを使用した畳み込み後の効果は異なります) を深く理解する必要があります畳み込み層のサイズ特別な 1x1 ボリュームのプロダクト カーネルの計算原理を理解する時間になります (1x1 畳み込みは通常、出力の幅と高さを変更せずに、出力チャネル (チャネル) の数のみを変更します)
    具体的な参考資料 1. 「CNN における畳み込み層の計算例」 : 畳み込み層サイズの計算原理、標準的な畳み込み計算例、1 x 1 畳み込み計算例、全結合層計算例、TensorFlow の簡単な実装が非常に簡潔かつ明確に書かれています。 Medium の畳み込み層の。2. 「Convolution Kernelの基本原理」:公式アカウントの記事も非常に詳しいです。3. 「畳み込みニューラル ネットワークの 1x1 畳み込みカーネルを 1 つの記事で理解する」 : 「1x1 畳み込みカーネルは特別な完全接続とみなすことができる」と言われる理由は次のとおりです。

1.2. プーリング層:

1.機能? ネットワークの空間サイズを徐々に縮小して、ネットワーク内のパラメータの数を減らし、コンピューティング リソースの使用量を削減するという目的を達成すると同時に、過剰学習を効果的に制御します。
2.プーリング層が効果的なのはなぜですか? 画像の特徴は局所的に不変です。つまり、画像の特徴はダウンサンプリングによっても失われません。この特性により、画像を縮小してから畳み込むことができるため、畳み込み計算の時間を大幅に短縮できます。最も一般的に使用されるプーリング層のサイズは 2x2、スライディング ステップは 2、画像はダウンサンプリングされ、情報の 75% が破棄され、最大の情報が選択されて保持されます。これにより、一部のノイズを除去するという目的も達成されます。情報。

1.3. 完全に接続された層:

1.機能? 畳み込みとプーリングは局所的な特徴のみを抽出し、全結合層は局所的な特徴を融合します。
2.? 畳み込み層とプーリング層で抽出された特徴には目、鼻、口がありますが、この 3 つの特徴だけで猫であると判断できるでしょうか。明らかにそうではありません。目、鼻、口の 3 つの特徴を持つ動物が多すぎるため、最終的にこれが犬ではなく猫であると判断するには、これら 3 つの特徴の特徴融合を実行する必要があります。
3.コンボリューションとフル接続はアルゴリズム的に変換可能です通常、全結合計算を実行する場合、それは 1x1 の畳み込みカーネルを使用した畳み込み演算と同等になります。
参考:「全結合層とソフトマックス」

1.4、ソフトマックス:

1.機能? 分類。
1.分類方法は分類はスコアではなく確率に基づいて行われます。
2.確率はどのようにして得られるのでしょうか? Softmax はスコアを確率に変換します。
3.どうやって得点するのですかニューラル ネットワークは、数十層の畳み込み演算を経て計算されます。
4. Softmax がベースとして e を選択するのはなぜですか? ギャップを拡大する
参考: 「全結合層とソフトマックス」
5. ソフトマックスは実際には活性化関数です。ソフトマックス関数は通常、複数のシグモイドの組み合わせとして記述されます。シグモイドは 0 から 1 までの値を返すことがわかっており、関数の値はデータ ポイントが特定のクラスに属する確率と考えることができます。したがって、シグモイドは二項分類問題で広く使用されており、ソフトマックス関数は多クラス分類問題で使用できます。活性化関数は線形関数と非線形関数に分かれており、非線形活性化関数の主な機能はネットワークの非線形モデリング機能を提供することです。活性化関数がなければネットワークは線形マップしか表現できませんが、このとき隠れ層が増えてもネットワーク全体は単層ニューラルネットワークと同等になります。活性化関数については、 「深層学習 - 活性化関数を使用する理由」
を参照してください。特に非線形活性化関数が使用される理由が非常にわかりやすく説明されています。「独占 | ディープラーニングの基礎 - アクティベーション関数とそれをいつ使用するか?」(コード付き) : ほとんどの活性化関数と、これほど多くの活性化関数が派生する理由について説明します。「ニューラル ネットワークにおける順伝播と逆伝播の可視化」 : 順伝播と逆伝播の可視化セクションがあります。


2.アクティベーション機能

参考として、上記の「ソフトマックス」を参照してください。


3、ドロップアウト

「深層学習における正則化の理解」 : 明確なフレームワークを使用して、正則化について率直かつ広範に説明します。以下の感想はこの記事から。
「深層学習における Dropout 層の役割」 : Dropout が過学習を防止できる理由と、そのプロセスを対応するコードとともに説明します。

1. これは実際には一種の正則化です。正則化は英語で正則化、直訳すると「正則化」、つまりモデルに「規則と制限」を加えることで、モデルは強力な一般化能力を持ち、過学習を防ぐことができます
2. ディープ ニューラル ネットワークでは、理論的には、層の数が十分に大きく、各層のニューロンの数が十分に大きい限り、ディープ ニューラル ネットワークはあらゆるデータ セットに完全に適合します。しかし、ディープ ニューラル ネットワーク モデルがトレーニング セット内のすべてのデータに本当に完全に適合する場合、必然的にテスト セットでの過剰適合が発生します。正則化の目的は過学習を回避することであるため、正則化の考え方は次のように要約できます。ニューラル ネットワーク内の一部のニューロンが特定の手段によってオフになり、それによってニューラル ネットワークの複雑さが軽減され、過学習が回避されます
3. 一般的な正則化方法には、L0 正則化、L1 正則化、L2 正則化 (最も一般的に使用される)、ドロップアウト正則化などがあります。
また、過学習を防ぐデータ増幅や早期停止なども正則化手法として分類されます 4.
ドロップアウトはハイパーパラメータであり、特定のネットワーク、特定のアプリケーションフィールドに基づいて試行する必要があります。


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

4.1 計算グラフ、プッシュバックプロパゲーション

1. 「ディープラーニング入門 - バックプロパゲーション (1) 導出」 : 最初の単純な + と * から、その後の Relu と Sigmoid の導出まで、バックプロパゲーションの導出方法を計算グラフの観点から説明します。
2. 『ディープラーニング入門』第5章 実戦:手書き数字認識 - 誤差逆伝播』:上記記事との違いは、コードの練習が追加されている点です。
3. 「フォワードプロパゲーション、バックプロパゲーション - わかりやすい」 : 1 と 2 を読むと、簡単に理解できます。完全な重みの更新では、最後のデータが引き続き使用されることに注意してください。たとえば、w1 を更新する場合、w5 の元のデータが使用されます重みを更新する式がなぜこれほど長いのかにも注目してください。勾配方向が最も速い上昇方向であり、最も速い下降方向である場合は「—」を使用するのが自然だからです同時に対応する手押しマップも貼り付けます。

ここに画像の説明を挿入

4. 「勾配降下法、逆伝播法、学習率 α、オプティマイザー、ニューラル ネットワークの一般的なプロセス コードの実践」 : この記事は強く推奨されており、以下に添付されています。

4.2. 勾配降下法と逆伝播法

1. バックプロパゲーションとは、各パラメータに対する損失関数の勾配を解く手法です。(勾配[偏導関数]を求めます)

2. 勾配降下法は、逆伝播法により計算された勾配(偏導関数)に従って、損失関数が最小になるように各重み W を更新する方法です。(重さWを良くする)

4.3. 学習率 α と勾配降下法の間にはどのような関係がありますか?

学習率 α は、勾配降下法の重み更新式の一部です。

勾配降下法の重み更新式:ここに画像の説明を挿入
重み更新式を使用して重み W を更新します。ここで、α は学習率です。

備考: 私は次のように考えています: 学習率 == ステップサイズ

4.4. オプティマイザと勾配降下法の関係は何ですか?

勾配降下法はオプティマイザの一種で、学習率も含む損失関数を最小化する手法です。

機械学習や深層学習で使用される最適化アルゴリズムには、一般的な勾配降下法に加えて、Adam、Adagrad、RMSProp などのいくつかのオプティマイザーもあります。

4.5、pytorchはニューラルネットワークの訓練プロセスを実現します

上記の内容を理解すると、ニューラル ネットワーク全体のトレーニングと実装のプロセスが 5 つのステップに分かれていることがわかります。

順伝播で予測値を取得します --> 予測値と実際の値の間の損失を見つけます --> オプティマイザの勾配をクリアします (オプションの操作) --> 逆伝播を使用してすべてのパラメータの勾配 (導関数) を見つけます - -> オプティマイザ更新重み W

# Gradient Descent
for epoch in range(50):
   # Forward pass: Compute predicted y by passing x to the model
   y_pred = model(x)
 
   # Compute and print loss
   loss = criterion(y_pred, y)
   print('epoch: ', epoch,' loss: ', loss.item())
 
   # Zero gradients, perform a backward pass, and update the weights.
   optimizer.zero_grad()
 
   # perform a backward pass (backpropagation)
   loss.backward()
 
   # Update the parameters
   optimizer.step()

备注: ここでの optimizer.zero_grad() は、大量のメモリを必要とする勾配クリア操作です。「勾配累積」操作が使用される場合: メモリ サイズが十分でない場合、複数のバッチの勾配が大きなサイズとして重ね合わされます。これは、大きなバッチサイズで得られる勾配に相当しますが、効果は当然悪くなります。これは、バッチサイズを増やしてメモリを削減するための小さなトリックであると言えます。


5.パラメータの初期化

  • はじめに: ニューラル ネットワークのトレーニング プロセスにおけるパラメーター学習は、勾配降下法に基づいて最適化されます。勾配降下法では、トレーニングの開始時に各パラメーターに初期値を割り当てる必要があります。この初期値の選択は非常に重要であり、一般に、データとパラメーターの平均値が 0 であり、入力データと出力データの分散が一貫していることが望まれます。実際のアプリケーションでは、ガウス分布または一様分布に従うパラメータがより効果的な初期化方法です。適切な重みの初期化は、モデルのパフォーマンスと収束速度に有益であり、勾配の消失と勾配の爆発を解決するのに非常に役立ちます。
  • パラメータ初期化の分類:
    • オールゼロの初期化: すべての層のすべてのニューロンは同じことを学習し、対称性を破る方法はありません。すべての重みを 0 に初期化するのはなぜ間違っているのでしょうか? すべてのパラメータが 0 の場合、すべてのニューロンの出力は同じになり、同じ層内のすべてのニューロンはバックプロパゲーション中に同じように動作します (同じ勾配、同じ重み更新) ため、これは明らかに受け入れられない結果です。
      ランダム初期化: ネットワーク出力データ分布の分散は、入力ニューロンの数に応じて変化します。この方法には欠点があり、ランダム分布が適切に選択されないと、ネットワークの最適化が困難になります (勾配が小さくなり、パラメーターの更新が困難になります)。
    • Xavier の初期化: 出力データ分布に対する活性化関数の影響は考慮されません。その考え方は、入力と出力をできるだけ同じ分布に従わせ、後続の層の活性化関数の出力値が 0 になる傾向があるようにすることです。 He 初期化: 出力データ分布に対する ReLU の影響を考慮すると、入力出力データの
      分散は一致します。He 初期化の考え方は次のとおりです。ReLU ネットワークでは、各層のニューロンの半分が活性化され、残りの半分は 0 であると想定されているため、分散を一定に保つには、上で 2 で割るだけで済みます。ザビエルの基礎。ReLUでの使用を推奨します。
    • BN を使用したランダム初期化: BN は、初期値スケールに対するネットワークの依存性を軽減し、より小さい標準偏差で初期化できます。BN は、不正な初期化の影響を弱めるための、賢くて大雑把な方法です。私たちが望んでいるのは、逆伝播中に勾配を計算して重みを更新できるように、非線形アクティベーションの前に出力値がより適切な分布 (ガウス分布など) を持つ必要があることです。BN は、出力値にガウス正規化と線形変化を強制します。
    • 事前トレーニングの初期化: 事前トレーニングされたモデルのパラメーターを、新しいタスク (微調整) のモデルのパラメーターとして初期化します。
  • 概要:
    ReLU (BN なし) 活性化関数を使用する場合、He 初期化メソッドを使用してパラメーターをガウス分布または一様分布の対象となる小さな乱数に初期化するのが最善です。
    BN を使用すると、パラメータの初期値のスケールに対するネットワークの依存性が軽減され、このとき小さな標準偏差 (0.01 など) を初期化に使用できます。
    事前トレーニングされたモデルのパラメーターを新しいタスク パラメーターの初期化として使用することも、モデル パラメーターの初期化の簡単で効果的な方法です。

6. CNNモデル定義コードとトレーニングコードのkerasとpytorchの比較

6.1. 比較

難しい:

  • TensorFlow、CNTK、Theano、または MXNet (または TensorFlow の tf.contrib) で実行できる高レベル API。2015 年 3 月の最初のリリース以来、その使いやすさと構文の単純さが好評を博し、迅速な開発が容易になりました。Google の支援を受けています。私のような初心者にはもっと適しています
  • 他の人のコードを見ると、モデルをプログラミングするとき、通常はシーケンシャル形式または関数形式が使用されます。私は通常、この 2 つのタイプをより頻繁に使用します。モデルは比較的単純で、複数の入力と出力を必要としないため、シーケンシャル形式を使用します。モデルに複数の出力が含まれている場合は、関数型プログラミング フォームが必要です
  • トレーニングはfit()でのみ実行できます。

パイトーチ:

  • 2016 年 10 月にリリースされた、配列式の直接処理に重点を置いた低レベル API です。昨年、これは大きな関心を集め、学術研究だけでなく、最適化されたカスタム表現を必要とする深層学習アプリケーションにも最適なソリューションになりました。Facebookによってサポートされています。
  • ニューラル ネットワークの構造を実装するクラスを定義します。インターネット上で見られるソース コードの多くはこの形式です。もちろん、keras もこのタイプのプログラミングをサポートしており、torch も逐次プログラミングをサポートしていますが、初心者にはお勧めできません。
  • トレーニングの各バッチの開始時に、勾配、順伝播、逆伝播を初期化し、損失を計算して重みを更新し、アピール ループを実行します。

2 つの長所と短所の詳細な紹介と比較については、「Keras と PyTorch と比較して初心者に適した深層学習フレームワークはどれですか?」を参照してください。

6.2. モデル定義コード

予約済みの知識: 完全に接続された層は keras では Dense 層と呼ばれ、Linear 層は pytorch に転送されます

単純な CNN を定義する例を次に示します。

# Keras
model = Sequential()
model.add(Conv2D(32, (3, 3), activation='relu', input_shape=(32, 32, 3))) # 第一层卷积+激活
model.add(MaxPool2D()) # 第二层池化
model.add(Conv2D(16, (3, 3), activation='relu')) # 第三层卷积+激活
model.add(MaxPool2D()) # 第四层池化
model.add(Flatten()) # Flatten层用来将输入“压平”,即把多维的输入一维化,常用在从卷积层到全连接层的过渡
model.add(Dense(10, activation='softmax')) # Dense层,即全连接层,同时有个softmax
# Pytorch

import torch
import numpy
 
from torchvision import transforms #处理图像
from torchvision import datasets #处理数据集
from torch.utils.data import DataLoader #加载数据集
 
import torch.nn.functional as F #导入激活函数
import matplotlib.pyplot as plt

class Net(nn.Module):
	def __init__(self):
		super(Net, self).__init__()
		self.conv1 = nn.Conv2d(3, 32, 3) # 卷积
		self.conv2 = nn.Conv2d(32, 16, 3) # 卷积
		self.pool = nn.MaxPool2d(2, 2) # 池化
		self.fc1 = nn.Linear(16 * 6 * 6, 10)  # Linear层,即全连接层
	def forward(self, x):
		x = self.pool(F.relu(self.conv1(x))) # 第一层的卷积+激活+池化
		x = self.pool(F.relu(self.conv2(x))) # 第二次的卷积+激活+池化
		x = x.view(-1, 16 * 6 * 6) # 将数据平展成一维
		x = F.log_softmax(self.fc1(x), dim=-1) # 全连接+softmax
		return x
		
model = Net()

備考: 上記の pytorch コードはまあまあ定義されており、6.4 の推奨記事は理解できません。

6.3. トレーニングコードの比較

Keras を使用したモデルのトレーニングは非常に簡単です! 単純な .fit() だけで、すぐに実行に移ることができます。

history = model.fit_generator(
generator=train_generator,
epochs=10,
validation_data=validation_generator)

Pytorch でモデルをトレーニングするには、次の手順が必要です。

  • トレーニングの各バッチの開始時に勾配を初期化する
  • 順伝播
  • 誤差逆伝播法
  • 損失を計算し、重みを更新します
# 在数据集上循环多次、梯度下降
for epoch in range(2):
	for i, data in enumerate(trainloader, 0):
		# 获取输入; data是列表[inputs, labels]
		inputs, labels = data
		# (1) 初始化梯度,清零
		optimizer.zero_grad()
		'''
		# Compute and print loss
	    loss = criterion(y_pred, y)
	    print('epoch: ', epoch,' loss: ', loss.item())
	    '''
		# (2) 前向传播
		outputs = net(inputs)
		loss = criterion(outputs, labels)
		# (3) 反向传播
		loss.backward()
		# (4) 计算损失并更新权重
		optimizer.step()

トレーニングするだけでもかなりのステップが必要です!

6.4、フルセット: モデル定義、トレーニング、テスト

1. pytorch: 「CNN が手書き数字認識を実現」 : コード ロジックは非常に明確に定義されています。

2. pytorch: "Building a Simple Convolutional Neural Network with the MNIST Dataset" : 上記のコードとの小さな違いに注意してください。

3. keras: "[深層学習] mnist データセットを使用して単純な畳み込みニューラル ネットワークをインスタンス化する" : これは keras で実装されており、コード ロジックは非常に優れています。

4. tensorfolw: 「Minst データセットでの CNN 畳み込みニューラル ネットワークの定義とトレーニング、コード + 原理 + モデルの変更」 : 初心者にはお勧めできません。


7. 機械学習における一般的な評価指標のまとめ

参考:「機械学習における一般的な評価指標のまとめ」

評価メトリクスはさまざまな機械学習タスクに基づいて構築されており、分類、回帰、教師なしの 3 つの主要カテゴリに分類されます。

学習時に遭遇する分類タスクの評価指標には、Accuracy、TPR、FPR、Recall、Precision、F-score、MAP、ROC Curve、AUCなどが含まれます。回帰タスクの指標には、MSE、MAEなどが含まれます。

ここに画像の説明を挿入

8、RNN

「RNN(サイクリックニューラルネットワーク)の基礎がこの1記事でわかる」
「RNN、DNN、LSTM」

RNN:

1. 時系列問題をより適切に扱うことができる;
2. 完全な接続との違い、実際には追加のレイヤーが渡される;
3. 実現されるのは短期記憶である (RNN モデルは長期を実装する必要があるため)隠れ状態の計算は、過去の n 回の計算にリンクされており、計算量が指数関数的に増加し、モデルのトレーニング時間が大幅に増加します。ニューラル ネットワークのパラメーターが更新されると、勾配が増加します。勾配が消えるとき 重みが更新できないときは、学習できないことと同じであり、これによりニューラル ネットワークは長いシーケンスの情報をうまく学習できなくなります。ネットワークには短期記憶しかありません) 4. 勾配が消えて
爆発するのはなぜですか。『RNN 勾配消失と勾配爆発』:ディープネットワークと活性化関数の2つの視点から解説されており、オススメです!
5. CNN の勾配消失は RNN の勾配消失とは異なり、RNN は勾配消失を起こしやすいです。RNN の重みは共有されますが、CNN の重みは層ごとに異なる可能性があるため、バックプロパゲーションの場合、乗算が発生しても CNN がオフセットされる可能性があります。

9、LSTM

サイクリック ニューラル ネットワークの隠れ状態 h には、一種の記憶とみなすことができる履歴情報が保存されます。単純な RNN モデルでは h は刻々と変化し書き換えられるため、一種の短期記憶とみなすことができます。LSTMでは、メモリユニットcは、特定の瞬間に特定のキー情報をキャプチャすることができ、このキー情報を特定の時間間隔で保存する機能を備えています。記憶ユニット c に保存された情報のライフサイクルは、短期記憶よりも長いですが、長期記憶よりははるかに短いため、LSTM は長期短期記憶 (Long Short-Term Memory) と呼ばれます。

4つの段階:

1. 忘却ゲート: 情報を破棄することを決定する
2. 入力ゲート: 更新された情報を決定する
3. 過去と現在の記憶を統合する
4. 出力ゲート

RNN のさまざまな構造:

1.1対1
2.n対n
3.1対n
4.n対1
5.エンコーダ-デコーダ(n対m)

「1枚の絵で本当にわかるLSTMとBiLSTM」 : 多くの情報を読んだ後、この記事の絵が最も明確に描かれていると言えます。必見です。
ここに画像の説明を挿入

「ディープラーニングノート9 リカレントニューラルネットワーク(RNN、LSTM)」
「長期記憶ネットワークと短期記憶ネットワーク(LSTM)を理解するための1記事」

RNN、LSTM、GRU のアニメーションの比較については、「LSTM と GRU の超鮮明な図解、リカレント ニューラル ネットワークを 1 つの記事で理解する!」を読む必要があります。

10. 標準化と正規化

「標準化と正規化」
ここに画像の説明を挿入

11、変圧器、注意

「変圧器の詳細モデル」

《https://blog.csdn.net/weixin_42118657/article/details/120164994》

ただし、事前知識は次のとおりである必要があります。
1. RNN

2、seq2seq 、エンコーダ/デコーダ

提案します:


  • エンコーダ-デコーダの提案 - 2014 (Bengio チーム): Cho et al.、統計的機械翻訳のための RNN エンコーダ-デコーダを使用したフレーズ表現の学習
  • Seq2Seq の提案 - 2014 (Google): Sutskever et al.、ニューラル ネットワークによるシーケンスからシーケンスへの学習
  • エンコーダ-デコーダにおける注意の適用 - 2014 (Bengio チーム): Bahdanau et al.、調整と
    翻訳を共同学習することによるニューラル機械翻訳

Encoder-Decoder と Seq2Seq の違い:

  • Seq2seq はアプリケーション レベルの概念、つまりシーケンスからシーケンスへの概念であり、アプリケーション シナリオに重点を置いています。
  • エンコーダ/デコーダはネットワーク アーキテクチャ レベルの概念であり、特にエンコーダ モジュールとデコード モジュールの両方を持つ構造を指します。
  • エンコーダ・デコーダモデルは、seq2seq問題に適用されるモデルです。現在、Seq2Seq
  • 使用される特定のメソッドは、基本的にエンコーダー デコーダー モデルのカテゴリに属します。
  • エンコーダはエンコーダとも呼ばれます。その役割は「現実世界の問題を数学の問題に変換する」ことです。
  • Decoderはデコーダーとも呼ばれ、その役割は「数学的な問題を解決し、現実世界の解に変換する」ことです。

「Encoder-Decoder、Seq2Seq、Attentionとは何ですか?」" : たくさんまとめましたが、最も重要なことは、写真が非常に優れているということです。WeChat の記事「アニメーション図の注意メカニズム、一目で理解できるようにする」があります。

「ディープ ラーニング 3: SeqtoSeq」 :本質的に、アテンション メカニズムは重みを計算するプロセスです。

3. アテンションメカニズム

「1 つの記事で理解するアテンションのメカニズム」 : 非常に詳細なチュートリアル、必見です。

「詳細なアテンションの仕組み」ソフトアテンション(ソフトアテンション)の仕組みとは、情報を選択する際に、N個の情報から1つだけを選択するのではなく、N個の入力情報(雨や露も含む)の加重平均を計算し、入力する仕組みです。計算するニューラルネットワーク。対照的に、ハード アテンションは、情報をランダムに選択する、または最も高い確率で情報を選択するなど、入力シーケンス内の特定の位置にある情報を選択することを指します。ただし、ニューラル ネットワークの問題に対処するには、一般にソフト アテンション メカニズムが使用されます。

ソフトアテンション Encoder-Decoder モデル、より具体的には英語-中国語機械翻訳モデルでは、入力シーケンスと出力シーケンスの内容、さらには長さが異なり、エンコーダーとデコーダーの間でアテンション メカニズムが発生します。入力文と生成文の間で発生するとも言えます。セルフアテンションモデルにおけるセルフアテンションメカニズムは、入力シーケンス内、または出力シーケンス内で発生し、構文上の特徴(句構造)など、同じ文内の遠く離れた単語間のつながりを抽出できます。

12. 残留物

12.1. 用語の説明

残留接続、残留接続、スキップ接続、ショートカット接続。これらの単語の意味は基本的に同じであり、ID カードの名前とニックネームのように同じ意味で使用されることが多く、厳密に区別する必要はないため、以下では残留接続を使用して説明します。

「スキップ接続 - ディープニューラルネットワークのパフォーマンスを向上させるシャープなツール」
1. スキップ接続とは何ですか?
スキップ接続は、ディープ ニューラル ネットワークの異なる層間のノードを接続する方法です。従来のニューラル ネットワークでは、信号は入力層から出力層に送信され、各隠れ層の出力は次の層に送信される前にアクティベーション関数によって処理される必要がありますが、スキップ接続は信号を同時に送信します。現在のレイヤーを、より深いレベルの次のレイヤーに戻します。つまり、中間レイヤーを「スキップ」します。そして、このクロスレイヤー接続により、情報伝達が高速化され、勾配の消失が回避され、より多くの情報が保持されます。

2. スキップ接続の利点
ディープ ニューラル ネットワークの場合、スキップ接続の利点は次のとおりです。

  • 1. 勾配消失の問題の解決
    ニューラルネットワーク層の数が増加するにつれて、勾配消失の問題はさらに深刻になり、深いノードを効果的に更新することが困難になり、トレーニングプロセスさえ完全に停滞します。スキップ接続はより多くの情報を保持できるため、層間接続を通じて異なる層間で勾配を伝播させることができ、勾配消失の問題を効果的に解決できます。

  • 2. モデル学習の高速化
    スキップ接続により、中間層を経由せずに直接次の深い層に信号を伝達できるため、ニューラルネットワークの伝送経路を短縮し、情報の伝達速度を高速化することができます。ニューラルネットワーク全体のトレーニング速度。

  • 3. モデルの汎化能力の向上
    一部のディープニューラルネットワークの学習においては、学習セットとテストセットの違いにより、過学習という現象が発生します。スキップ接続を追加すると、より多くの情報を保持できるため、モデルの汎化能力が強化され、過学習のリスクが軽減されます。

3. スキップ接続の使い方は?
以下はスキップ接続の使用例です。

import tensorflow as tf

def conv_block(input_tensor, filters, strides=(2, 2), activation='relu'):
    x = tf.keras.layers.Conv2D(filters, (3, 3), strides=strides, padding='same')(input_tensor)
    x = tf.keras.layers.BatchNormalization()(x)
    x = tf.keras.layers.Activation(activation)(x)

    x = tf.keras.layers.Conv2D(filters, (3, 3), padding='same')(x)
    x = tf.keras.layers.BatchNormalization()(x)

    skip = tf.keras.layers.Conv2D(filters, (1, 1), strides=strides, padding='same')(input_tensor)
    skip = tf.keras.layers.BatchNormalization()(skip)

    x = tf.keras.layers.Add()([x, skip])
    x = tf.keras.layers.Activation(activation)(x)
    return x

inputs = tf.keras.layers.Input(shape=(32, 32, 3))
x = conv_block(inputs, 32)
x = conv_block(x, 64)
x = conv_block(x, 128)
x = conv_block(x, 256)
x = tf.keras.layers.GlobalAveragePooling2D()(x)
outputs = tf.keras.layers.Dense(10, activation='softmax')(x)

model = tf.keras.models.Model(inputs, outputs)
model.summary()

4. スキップ接続の亜種
スキップ接続にはいくつかの亜種があり、主に以下の 2 種類があります。

  • 1. 残留接続
    残留接続は、He らによって ResNet で最初に提案されたスキップ接続の特別な形式です。この手法は、ディープ ニューラル ネットワークのトレーニングにおける劣化の問題 (トレーニングが深くなるほど正解率が低下する) を解決するもので、残差接続を使用して深いネットワークを構築します。Residual Connection は、残差を前方または後方に出力することによって情報のクロスレイヤー転送を実現します (つまり、現在の特徴マップから前の特徴マップを差し引いたもの)。これにより、より多くの情報が維持され、ネットワークの精度が向上します。

  • 2. Dense Connection
    Dense Connection は DenseNet で提案されている接続方式で、各層が後続のすべての層に接続されます。高密度接続は、前層と後層に完全な接続を強制的に確立します。これにより、前の層のすべてのフィーチャが保持され、現在の層の出力に追加されます。これにより、フィーチャ内の情報がより適切に維持され、データの損失が回避されます。機能を追加し、モデルの精度を向上させます。

V. まとめ
最新の深層学習の分野における重要な技術革新として、スキップ接続はニューラル ネットワークが機能をより良く学習し、パフォーマンスを向上させるのに役立ちます。Skip Connection とそのバリアントを合理的に使用することで、より高い精度、より速いトレーニング速度、より強力な汎化能力を得ることができ、さまざまな分野でディープ ニューラル ネットワークを応用するためのより強固な基盤を提供します。

12.2. 残留接続のネットワーク構造はなぜ学習しやすいのでしょうか?

参考リンク「残留接続のネットワーク構造はなぜ学びやすいのか?」:その理由を「説明性」の観点から解説した、一番わかりやすいバージョン、超オススメです!
ここに画像の説明を挿入
残りの接続を追加した後:
ここに画像の説明を挿入

12.3 原則

残差接続 残差接続。ニューラル ネットワークの特定の層が入力 x に対して F 演算を実行して F(x) になると仮定します。通常のニューラル ネットワークの出力は F(x) で、残差接続を追加した後の出力は次のようになります。 x +F(x)

ここに画像の説明を挿入

それでは、残留構造の利点は何でしょうか? それは明らかです。層ネットワークが x の偏導関数を計算するときに項目が追加されるため、追加の定数項目が存在するため、バックプロパゲーションのプロセスで勾配の乗算によって勾配が消失することはありません。さらに、トレーニングの深さが増し、モデルの汎化能力が向上します。
詳細は「bn層、スキップ/残留接続」を参照してください。

13. オートエンコーダー

オートエンコーダーは、元の入力を復元しようとするシステムとして理解できます。

「[機械学習] オートエンコーダー - オートエンコーダー」

14. GAN生成対立ネットワーク

「生成対立ネットワークの原理と実現方法」

おすすめ

転載: blog.csdn.net/qq_40967086/article/details/130976767