本文为稀土技能社区首发签约文章,30天内制止转载,30天后未获授权制止转载,侵权必究!

beginning

  一说到深度神经网络,咱们脑海中第一个显现的无疑是卷积神经网络(Convolutional Neural Network,CNN),而且经过前几节的学习,我信任盆友们现已能够很熟练地把握一些CNN的运用啦但是,CNN仅仅深度学习神经网络中的一小部分,深度神经网络宗族还有许多其他成员。今日,我就把压箱底的宝物拿出来啦,向咱们介绍一下巨大的深度神经网络宗族,让盆友们对人工智能和深度学习有更全面深入的知道

1.深度神经网络简介

  深度神经网络(Deep Neural Network,DNN)是一种由多个神经元层组成的核算模型。每个神经元接纳来自上一层的输入,并经过激活函数处理后输出给下一层。它的中心思维是经过练习来学习输入与输出之间的映射联系。练习进程中,网络依据输入进行前向传达核算,并与实在输出进行比较核算丢失函数;然后经过反向传达算法来调整网络中的权重和偏置,以减小丢失函数,然后优化网络功能。(这几个名词是不是很熟悉腻前几节都介绍过啦,看来深度学习的尽头是卷积狗头保命

一文读懂十二大深度神经网络

让咱们来生动形象地了解一下DNN\color{blue}{让咱们来生动形象地了解一下DNN}:你是一个英勇的探险家,踏上了深度神经网络的冒险之旅。冒险队由许多小伙伴组成,每个小伙伴都是一个奇特的火花。他们住在一个神秘的迷宫中,你要协助他们解开谜题。第一层火花接受来自国际的各种信息,如图片、文字或声响,并彼此交流,然后传递给下一层的火花。随着你们深入迷宫,火花们变得越来越聪明和敏锐。他们经过调整形状和色彩捕捉不同类型的信息。有的长于辨认形状,有的拿手辨别色彩,有的对声响敏感。他们彼此协作,将才智传递给下一层。在迷宫深处发现许多瑰宝,这些瑰宝是对火花们才智和尽力的奖赏。有时,他们能辨认图片中的物体,猜想躲藏在声响背后的情感,还能创造音乐。你扮演导师人物,观察并给予有益反应。经过练习和调整,火花变得更聪明。终究,成功解开迷宫谜题,展现令人惊叹的才智和才干。他们能够翻译言语、猜测天气,甚至创造艺术作品。总的来说,DNN是一个充溢无限或许的国际。


2.十二种深度神经网络模型

2.1前馈神经网络FNN

  • 论文:www.nature.com/articles/32…

  前馈神经网络(Feedforward Neural Network)也被称为多层感知机,是一种最常见和根本的人工神经网络模型。它由多个神经元层组成,这些层按顺序衔接,而且信号只在一个方向上前进,从输入层到输出层,没有循环反应。

以下是前馈神经网络的一般结构和作业原理

  1. 输入层(Input Layer):接纳外部输入数据的神经元层。每个输入特征都与输入层中的一个神经元相对应。
  2. 躲藏层(Hidden Layer):位于输入层和输出层之间的神经元层。能够有一个或多个躲藏层。每个躲藏层中的神经元经过权重和激活函数来处理输入信息,并将成果传递给下一层。
  3. 输出层(Output Layer):生成终究猜测或输出成果的神经元层。输出层的神经元数量一般与问题的要求相关。
  4. 权重(Weights):衔接神经元之间的链接,用于传递信号。每个链接都有一个相关的权重,决议了信号在神经元之间传递时的重要性。
  5. 激活函数(Activation Function):运用于每个神经元的数学函数。它将加权输入转化为神经元的输出值,引进非线性性质,添加网络的表达才干。

前馈神经网络练习进程:初始化权重、前向传达、核算丢失、反向传达、更新权重和重复迭代。

以下是一个简略的运用TensorFlow完成前馈神经网络的代码,有利于了解:

import tensorflow as tf
# 界说前馈神经网络
def ffn_model():
    # 创立模型
    model = tf.keras.models.Sequential()
    # 添加躲藏层
    model.add(tf.keras.layers.Dense(64, activation='relu', input_shape=(input_size,)))
    # 添加输出层
    model.add(tf.keras.layers.Dense(output_size, activation='softmax'))
    return model
# 界说输入和输出的维度
input_size = 100
output_size = 10
# 创立模型
model = ffn_model()
# 编译模型
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
# 练习模型
model.fit(train_data, train_labels, epochs=10, batch_size=32)
# 运用模型进行猜测
predictions = model.predict(test_data)

2.2卷积神经网络CNN

关于卷积神经网络的原理介绍及一些运用,前几节现已解说许多啦,没看过的来看看叭➡

  • 深度学习入门——卷积神经网络CNN根本原理+实战
  • 手把手教你建立神经网络分类——根底篇
  • 一文读懂14种低照度图画增强算法——原理+比照效果
  • 十种图画去雾算法——原理+比照效果图

2.3循环神经网络RNN

  • 论文:onlinelibrary.wiley.com/doi/pdf/10.…
  • 实战代码:github.com/aymericdami…

  循环神经网络(Recurrent Neural Network,RNN)也叫递归神经网络,是一种具有循环衔接的人工神经网络模型,专门用于处理序列数据,具有回忆才干。比较于前馈神经网络,RNN不仅接纳当时输入的信息,还会接纳之前时刻步的输出信息。

  RNN的中心思维是引进躲藏状况(hidden state)来传递信息。在每个时刻步,RNN会接纳当时输入和前一个时刻步的躲藏状况,并发生当时时刻步的输出和新的躲藏状况。这种循环结构使得RNN能够捕捉到序列数据的上下文信息,并在处理长序列时具有较好的体现。

  RNN的躲藏状况更新公式如下:

ht=f(Wxt+Uht−1+b){h_t} = f(W{x_t} + U{h_{t – 1}} + b)

  其间,ht表明当时时刻步t的躲藏状况,xt表明当时时刻步t的输入,U和W是可学习的权重矩阵,b是偏置向量,f()是激活函数。

一文读懂十二大深度神经网络

  RNN的练习一般运用反向传达算法和梯度下降优化办法,其间关键是经过时刻反向传达(Backpropagation Through Time,BPTT)算法来核算梯度,并运用梯度下降法来更新权重和偏置。

以下是一个简略的运用TensorFlow完成RNN的代码:

import tensorflow as tf
# 界说RNN模型,其间包含一个SimpleRNN层和一个输出层
def rnn_model():
    model = tf.keras.models.Sequential()
    model.add(tf.keras.layers.SimpleRNN(64, activation='relu', input_shape=(time_steps, input_size)))
    model.add(tf.keras.layers.Dense(output_size, activation='softmax'))
    return model
# 界说输入和输出的维度
input_size = 100
output_size = 10
time_steps = 10
# 创立模型
model = rnn_model()
# 编译模型
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
# 练习模型
model.fit(train_data, train_labels, epochs=10, batch_size=32)
# 运用模型进行猜测
predictions = model.predict(test_data)

2.4长短期回忆网络LSTM

  • 论文:ieeexplore.ieee.org/abstract/do…
  • 实战代码:github.com/bentrevett/…

  长短期回忆网络(Long Short-Term Memory,LSTM)是一种特殊类型的循环神经网络,专门用于处理序列数据,具有回忆才干。比较传统的RNN模型,LSTM能够更好地处理梯度消失和梯度爆破问题,有效地捕捉序列数据中的长间隔依靠联系

  首要原理:引进了回忆单元(memory cell)和三个门控机制(输入门、忘记门、输出门),经过这些机制来操控信息的活动和回忆的更新。回忆单元负责存储和更新回忆信息,三个门控机制则操控当时输入、前一时刻步的躲藏状况以及回忆单元之间的交互。

  详细来说,LSTM的回忆单元由一个细胞状况(cell state)和一个躲藏状况(hidden state)组成。细胞状况在每个时刻步都会被更新,而躲藏状况则会依据当时输入和前一个时刻步的躲藏状况来发生。三个门控机制都是经过运用sigmoid激活函数和逐元素乘法操作来操控信息的活动。

  • 输入门(Input Gate):操控新输入信息对细胞状况的影响程度
  • 忘记门(Forget Gate):操控前一时刻步的细胞状况对当时细胞状况的影响程度
  • 输出门(Output Gate):操控当时细胞状况对躲藏状况的影响程度

一文读懂十二大深度神经网络

LSTM的简略代码和上面的差不多,只不过是界说模型有了些改动:

# 界说LSTM模型,其间包含一个LSTM层和一个输出层
def lstm_model():
    model = tf.keras.models.Sequential()
    model.add(tf.keras.layers.LSTM(64, activation='tanh', input_shape=(time_steps, input_size)))
    model.add(tf.keras.layers.Dense(output_size, activation='softmax'))
    return model

2.5深度信念网络DBN

  • 论文:www.cse.iitk.ac.in/users/cs365…
  • 实战代码:github.com/albertbup/d…

  深度信念网络(Deep Belief Network,DBN)是一种由多个堆叠的受限玻尔兹曼机(Restricted Boltzmann Machine,RBM)组成的深度神经网络,它是一种生成式模型,经过无监督学习的方法对数据进行建模和特征学习。

受限玻尔兹曼机(RBM):

  • RBM是一种依据能量的概率模型,由可见层和躲藏层节点组成。它经过学习数据的联合分布来提取特征,并具有双向的可见-躲藏衔接
  • RBM中的节点是二值的(0或1),而且节点之间的衔接权重是可调参数。
  • RBM运用Gibbs采样算法来进行推断和练习。在练习进程中,经过最大似然估量和比照散度算法来更新衔接权重。

一文读懂十二大深度神经网络

DBN的练习包含两个首要过程:逐层预练习和全局微调

预练习阶段:关于每一层,RBM会被练习来对观测数据建模,并将上一层的躲藏层作为下一层的可见层输入。这一进程是无监督的,而且每个RBM只重视单层之间的信息传递;

微调阶段:在预练习完成后,整个DBN进行端到端的监督练习。运用反向传达算法来更新所有层之间的衔接权重,并经过最大似然估量来拟合练习数据的标签。

# DBN模型界说
class DBN(nn.Module):
    def __init__(self, input_size, hidden_sizes):
        super(DBN, self).__init__()
        self.rbm_layers = nn.ModuleList()
        # 创立多个RBM层
        for i in range(len(hidden_sizes)):
            visible_size = input_size if i == 0 else hidden_sizes[i-1]
            rbm_layer = RBM(visible_size, hidden_sizes[i])
            self.rbm_layers.append(rbm_layer)
    def forward(self, x):
        # 逐层传递输入数据
        for rbm in self.rbm_layers:
            x = rbm(x)
        return x
# RBM模型界说
class RBM(nn.Module):
    def __init__(self, visible_size, hidden_size):
        super(RBM, self).__init__()
        self.W = nn.Parameter(torch.randn(visible_size, hidden_size))
        self.v_bias = nn.Parameter(torch.randn(visible_size))
        self.h_bias = nn.Parameter(torch.randn(hidden_size))
    def forward(self, x):
        h_prob = torch.sigmoid(torch.matmul(x, self.W) + self.h_bias) #核算躲藏层激活概率
        h = torch.bernoulli(h_prob)  # 依据概率生成二值化的躲藏层输出
        v_prob = torch.sigmoid(torch.matmul(h, self.W.t()) + self.v_bias)  # 核算可见层激活概率
        return v_prob

上述代码是一个简略的DBN完成,从中能够看出包含了DBN模型确实包含了多个RBM模型。

2.6生成对抗网络GAN

  • 论文:arxiv.org/pdf/1406.26…
  • 实战代码:github.com/yuanxiaosc/…

  生成对抗网络(GAN)是一种由两个神经网络组成的结构,旨在生成传神的组成数据。

  • GAN 的中心思维是经过练习一个生成器网络(Generator)和一个判别器网络(Discriminator)来进行对抗学习。生成器企图生成传神的组成数据样本,而判别器则企图区分实在样本和生成样本。

  • 关于生成器网络,它接纳一个随机噪声向量作为输入,并输出一个与实在样本类似的组成样本。生成器的方针是欺骗判别器,使得判别器无法精确区分生成的样本和实在的样本。

  • 关于判别器网络,它接纳实在样本或生成器生成的样本作为输入,并输出一个表明样本实在性的概率值。判别器的方针是尽或许精确地区分实在样本和生成的样本。

GAN 的练习进程能够概括为以下过程:

  1. 生成器生成组成样本;
  2. 判别器对实在样本和生成的样本进行分类,并核算丢失;
  3. 生成器依据判别器的反应调整生成战略,并核算丢失;
  4. 重复过程 1-3,直到生成器和判别器达到一个动态平衡。

  实在的 GAN 模型需求更杂乱的架构、更多的样本数据、更多的练习技巧才干取得高质量的组成样本。一起,还有许多其他更高级的 GAN 变体和改善办法能够探究和尝试,下图是GAN宗族的演化。

一文读懂十二大深度神经网络

2.7主动编码器AE

  • 论文:www.nature.com/articles/32…

  主动编码器(Autoencoder,AE)是一种无监督学习的神经网络模型,经过将输入数据紧缩成低维度的表明并尝试将其重构回原始输入,然后完成数据的特征提取和降维。

  AE由两部分组成:编码器(Encoder)和解码器(Decoder)。编码器将输入数据映射到潜在空间(也称为编码或躲藏层),而解码器则将潜在表明映射回原始数据空间。整个模型的方针是最小化重构差错,使得重构的输出尽或许接近原始输入。

一文读懂十二大深度神经网络

练习进程能够分为两个阶段:

  1. 编码阶段:输入数据经过编码器进行紧缩,得到低维的潜在表明
  2. 解码阶段:将潜在表明经过解码器进行重构,得到与原始输入类似的输出

  AE的练习进程能够运用反向传达算法进行优化,经过最小化重构差错来更新网络的参数。一般情况下,常用的重构差错函数是均方差(Mean Squared Error,MSE)。

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
# 主动编码器模型界说
def build_autoencoder(input_dim, latent_dim):
    # 编码器部分
    encoder_inputs = keras.Input(shape=(input_dim,))
    encoded = layers.Dense(64, activation='relu')(encoder_inputs)
    encoded = layers.Dense(latent_dim, activation='relu')(encoded)
    # 解码器部分
    decoder_inputs = layers.Dense(latent_dim, activation='relu')(encoded)
    decoded = layers.Dense(64, activation='relu')(decoder_inputs)
    decoded = layers.Dense(input_dim, activation='sigmoid')(decoded)
    # 界说主动编码器模型
    autoencoder = keras.Model(encoder_inputs, decoded)
    return autoencoder
# 加载并预处理数据集
(x_train, _), (x_test, _) = keras.datasets.mnist.load_data()
x_train = x_train.reshape(-1, 784).astype('float32') / 255.0
x_test = x_test.reshape(-1, 784).astype('float32') / 255.0
# 构建主动编码器模型
input_dim = 784
latent_dim = 64
autoencoder = build_autoencoder(input_dim, latent_dim)
# 编译模型并练习
autoencoder.compile(optimizer='adam', loss='mse')
autoencoder.fit(x_train, x_train, epochs=10, batch_size=128, validation_data=(x_test, x_test))
# 运用练习好的主动编码器进行重构
encoded_imgs = autoencoder.encoder.predict(x_test)
decoded_imgs = autoencoder.decoder.predict(encoded_imgs)

  上述代码是一个简略AE的完成示例。在代码中,界说了一个具有一个躲藏层的编码器和一个解码器的主动编码器模型。咱们以 MNIST 数据集为例,将输入图画紧缩为 64 维的潜在表明,并尝试将其重构回原始图画。经过编译模型并运用均方差丢失函数进行练习,咱们能够得到练习好的主动编码器模型。然后,能够运用练习好的主动编码器对新样本进行重构,然后完成数据的降维和重建。

2.8深度残差网络DRN

  • 论文:arxiv.org/abs/1512.03…
  • 实战代码:github.com/fyu/drn

  深度残差网络(Deep Residual Network,DRN)是一种深度学习架构,经过引进残差衔接来处理深层网络练习进程中的梯度消失和模型退化问题,使得能够更简单地练习和优化十分深的神经网络。

  原理:传统的深层神经网络在练习进程中或许遇到梯度消失和模型退化的问题。当网络变得很深时,反向传达算法在更新参数时梯度会逐渐减小,导致难以有效地练习网络。为了处理这个问题,DRN引进了残差衔接(Residual Connection)。残差衔接能够看作是一种跨层的直接衔接,经过将前一层的特征与后续层的特征相加,使得网络能够更简单地学习残差(即前后层特征之间的差异)。这样,关于深度网络中较浅的层,即便网络的学习函数近似于恒等映射,也能够经过残差衔接传递正确的梯度信息,避免梯度消失问题。详细而言,DRN的根本单元是残差块(Residual Block),它由两个或三个卷积层组成。残差块的输入经过跳过一个或多个卷积层,直接与块内最终一个卷积层的输出相加,然后经过激活函数得到终究的输出。

一文读懂十二大深度神经网络

import torch
import torch.nn as nn
class ResidualBlock(nn.Module):
    def __init__(self, in_channels, out_channels, stride=1):
        super(ResidualBlock, self).__init__()
        self.conv1 = nn.Conv2d(in_channels, out_channels, kernel_size=3, stride=stride, padding=1)
        self.bn1 = nn.BatchNorm2d(out_channels)
        self.relu = nn.ReLU(inplace=True)
        self.conv2 = nn.Conv2d(out_channels, out_channels, kernel_size=3, stride=1, padding=1)
        self.bn2 = nn.BatchNorm2d(out_channels)
        if stride != 1 or in_channels != out_channels:
            self.skip_conv = nn.Conv2d(in_channels, out_channels, kernel_size=1, stride=stride)
        else:
            self.skip_conv = None
    def forward(self, x):
        identity = x
        out = self.conv1(x)
        out = self.bn1(out)
        out = self.relu(out)
        out = self.conv2(out)
        out = self.bn2(out)
        if self.skip_conv is not None:
            identity = self.skip_conv(identity)
        out += identity
        out = self.relu(out)
        return out
class DRN(nn.Module):
    def __init__(self, num_classes):
        super(DRN, self).__init__()
        self.conv1 = nn.Conv2d(3, 64, kernel_size=7, stride=2, padding=3)
        self.bn1 = nn.BatchNorm2d(64)
        self.relu = nn.ReLU(inplace=True)
        self.maxpool = nn.MaxPool2d(kernel_size=3, stride=2, padding=1)
        self.layer1 = self._make_layer(64, 64, 2)
        self.layer2 = self._make_layer(64, 128, 2, stride=2)
        self.layer3 = self._make_layer(128, 256, 2, stride=2)
        self.avgpool = nn.AdaptiveAvgPool2d((1, 1))
        self.fc = nn.Linear(256, num_classes)
    def _make_layer(self, in_channels, out_channels, num_blocks, stride=1):
        layers = []
        layers.append(ResidualBlock(in_channels, out_channels, stride))
        for _ in range(1, num_blocks):
            layers.append(ResidualBlock(out_channels, out_channels))
        return nn.Sequential(*layers)
    def forward(self, x):
        out = self.conv1(x)
        out = self.bn1(out)
        out = self.relu(out)
        out = self.maxpool(out)
        out = self.layer1(out)
        out = self.layer2(out)
        out = self.layer3(out)
        out = self.avgpool(out)
        out = torch.flatten(out, 1)
        out = self.fc(out)
        return out
# 运用示例
model = DRN(num_classes=10)
input = torch.randn(1, 3, 224, 224)
output = model(input)

  上述代码是运用PyTorch结构完成DRN的示例。其间,ResidualBlock类界说了残差块的结构,而DRN类界说了整个DRN网络的结构。经过堆叠不同层数和输出通道数的残差块,能够构建具有可变深度的DRN网络。

2.9胶囊网络CapsNet

  • 论文:arxiv.org/pdf/1710.09…
  • 实战代码:github.com/gram-ai/cap…

  胶囊网络(Capsule Network,CapsNet)是由Geoffrey Hinton等人于2017年提出的一种神经网络架构。与传统的卷积神经网络不同,胶囊网络引进了胶囊层(Capsule Layer)来替代传统网络中的卷积层和全衔接层。胶囊层使用胶囊(Capsule)来表达特征向量,而且能够编码实体的姿态信息。胶囊网络的规划方针是处理传统卷积神经网络在处理视觉问题时对空间层次化信息建模不足的问题。

  胶囊网络的中心原理是使用胶囊来表明实体的各种特点,例如方位、方向、巨细等,并经过动态路由(Dynamic Routing)机制来学习不同胶囊之间的权重联系。每个胶囊都输出一个向量,该向量包含了实体的特点信息,而不是单纯的激活值。

  在胶囊网络中,第一个胶囊层被称为主胶囊层(Primary Capsule Layer),它类似于传统卷积层,用于提取初级特征。然后,主胶囊层的输出会经过动态路由算法,分配给下一层的胶囊,这样高级特征能够经过胶囊表明。动态路由算法依据两个胶囊之间的一致性来调整它们之间的权重,使得具有类似特点的胶囊能够更好地进行通信和合作。

  胶囊网络的最终一层为分类胶囊层(Capsule Layer),每个分类胶囊对应一个类别,并输出一个向量表明实体归于该类其他概率。经过核算分类胶囊的长度(向量的范数),能够确定实体是否归于某个类别。

一文读懂十二大深度神经网络

  丢失函数:胶囊网络一般运用多样本边际丢失函数(Margin Loss)作为练习的方针函数。多样本边际丢失函数首要经过比较方针类其他胶囊向量与其他类其他胶囊向量之间的间隔来进行优化。这样能够使得方针类其他胶囊向量在空间上与其他类其他胶囊向量相隔较远,增强分类的鲁棒性。

2.10Transformer

  • 论文:arxiv.org/pdf/1706.03…
  • 实战代码:github.com/jadore80112…

  Transformer是一种依据自注意力机制(self-attention)的深度学习模型,中心思维是完全依据注意力机制来建模序列间的依靠联系,而不依靠于传统的循环神经网络(RNN)或卷积神经网络(CNN)。它运用自注意力机制来完成并行核算,使得模型能够更好地捕捉文本中不同方位的上下文信息。

  自注意力机制答应模型在核算每个方位的表明时,考虑到输入序列中其他方位的语义联系。经过对输入序列中所有方位的软注意力权重进行加权求和,Transformer能够更好地捕捉上下文信息,并有效地建模长间隔依靠联系。

  Transformer模型由编码器和解码器组成:

  • 编码器(Encoder):编码器将输入序列进行特征提取和编码,生成一系列表明输入序列的上下文向量。编码器由多个相同的层堆叠而成,每层包含以下两个子层:
    1. 多头自注意力机制(Multi-head Self-Attention):该机制答应模型在核算每个方位的表明时,一起考虑到输入序列中其他方位的信息。它经过将输入序列映射为查询、键和值,核算注意力权重并对值进行加权求和,生成每个方位的表明;
    2. 前馈神经网络(Feed Forward Network):该网络在每个方位上进行独立的全衔接层操作,用于进一步处理自注意力机制的输出。它经过两层线性改换和一个激活函数,对每个方位的表明进行非线性改换;
  • 解码器(Decoder):解码器依据编码器生成的上下文向量,以及已生成的部分输出序列,猜测下一个输出。解码器也由多个相同的层堆叠而成,每层包含以下三个子层:
    1. 多头自注意力机制:与编码器中的自注意力机制类似,但在核算注意力权重时,解码器还会考虑输入序列的其他方位;
    2. 多头注意力机制(Multi-head Attention):该机制经过对编码器的输出进行注意力核算,将解码器的表明与编码器的上下文信息对齐,然后更好地捕捉输入序列的相关信息;
    3. 前馈神经网络:与编码器中的前馈神经网络相同;

  经过编码器和解码器的协同作业,Transformer模型能够精确捕捉输入序列的上下文信息,并生成高质量的输出序列。

一文读懂十二大深度神经网络

这几年Transformer可太火了,用处太多,下面简略介绍几个它的变体

  1. BERT(Bidirectional Encoder Representations from Transformers):BERT是一种双向Transformer编码器的预练习言语模型。它经过在大规模无标注文本上进行预练习,学习到丰厚的言语表明。其在各种NLP使命中取得了显著的功能进步,并成为自然言语处理领域的重要里程碑。
  2. GPT(Generative Pre-trained Transformer):GPT是一种依据Transformer的自回归言语模型。它经过在大规模文本上进行预练习,学习到言语的概率分布,并能生成连贯且合理的文本。GPT在文本生成、机器翻译等使命中体现出色。
  3. XLNet:XLNet是一种自回归的、用于言语建模的Transformer模型。与传统的自回归模型不同,XLNet考虑了所有或许的因果联系,经过对所有摆放的输入序列进行建模,克服了传统自回归模型中的限制,并在多项NLP使命上取得了最先进的成果。
  4. T5(Text-To-Text Transfer Transformer):T5是一种通用的预练习Transformer模型,它将多个自然言语处理使命(如文本分类、命名实体辨认、问答等)统一成文本到文本的转化问题进行建模。它经过大规模无监督预练习和有监督微调,在多个使命上取得了很好的功能。
  5. ViT(Vision Transformer):ViT是一种将Transformer运用于核算机视觉领域的模型。它将图画分割成一组小的图画块,并经过Transformer编码器来提取特征,然后进行分类或其他视觉使命。ViT在图画分类等使命中达到或超过了传统卷积神经网络的功能。

2.11注意力网络AN

  • 论文:arxiv.org/pdf/1409.04…
  • 实战代码:github.com/The-AI-Summ…

  注意力网络(Attention Network,AN)是一种神经网络结构,AN的首要方针是经过核算输入序列中每个元素的权重,使模型能够专注于与当时使命相关的部分。AN的中心思维是注意力机制(Attention Mechanism),它答应模型能够依据上下文的需求,动态地为不同的输入元素分配不同的权重。这种注意力权重的核算方法能够依据输入元素之间的相关性、重要性或其他使命特定的条件来确定。

  以下是Attention Network的根本原理和过程

  1. 输入表明:AN的输入一般是一个序列,能够是文本中的单词序列,图画中的像素序列等。每个输入元素都有对应的表明向量,能够经过嵌入层、卷积神经网络等办法进行编码;
  2. 注意力权重核算:AN经过一系列的运算来核算每个输入元素的注意力权重。常用的核算办法包含点积注意力、缩放点积注意力、双线性注意力等。这些核算方法能够考虑元素之间的类似性、相关性、相关性等信息;
  3. 上下文向量核算:依据注意力权重和输入元素的表明向量,能够核算得到一个上下文向量。上下文向量是对输入序列中与当时使命相关的部分进行加权求和或拼接得到的。它捕捉了与使命有关的信息,并为后续的处理和猜测提供了有效的特征;
  4. 输出生成:依据上下文向量,能够进行不同的操作,如分类、回归、生成等,详细取决于使命的需求和模型的规划。

  注意力网络的优势在于它能够处理长序列和杂乱信息,避免了信息衰减或过于重视某些部分的问题。经过动态调整注意力权重,AN能够主动地挑选与使命相关的元素,而且在不同使命和场景下体现出杰出的功能和泛化才干。

  Attention Network的变种和扩展

  • 自注意力(Self-Attention):自注意力机制是一种注意力机制的变种,它答应模型将输入元素之间的彼此作用编码为每个元素的注意力权重。自注意力机制在Transformer模型中得到了广泛的运用;
  • 多头注意力(Multi-Head Attention):多头注意力机制运用多组注意力权重核算并行地对输入进行表明,能够进步模型的表达才干和泛化才干。

2.12深度强化学习网络DRLN

  • 论文:arxiv.org/pdf/1312.56…

  深度强化学习网络(Deep Reinforcement Learning Network,DRLN)是将深度学习和强化学习相结合的办法,其原理依据强化学习的结构。在强化学习中,智能体经过与环境的交互来学习最优战略,以最大化累积奖赏;而深度学习网络则用于迫临值函数或战略函数,将状况映射为动作。

  DRLN的原理依据强化学习的结构,其间首要包含环境、智能体、状况、动作和奖赏等要素。智能体依据当时状况(State)挑选相应的动作(Action),并依据环境的反应取得相应的奖赏(Reward)。经过不断与环境交互,智能体逐渐学习出最优的战略,使累积奖赏最大化。它引进了深度神经网络作为智能体的决议计划模型,用于将状况映射到动作空间。

  典型的DRLN模型是深度Q网络(Deep Q-Network,DQN)。DQN论文提出了一种运用深度神经网络进行Q值函数迫临的办法。经过将当时状况作为输入,神经网络输出每个动作的Q值,智能体依据Q值挑选动作。DQN选用经验回放(Experience Replay)来存储和随机挑选曩昔的经验样本,以减小样本之间的相关性,而且运用固定Q方针(Fixed Q-Targets)来进步练习的稳定性。

  关于DRLN,因为涉及到强化学习,属实是超出了我的学习范围(只有大佬才配学高难度滴强化学习),所以只能介绍这么些啦

3.深度神经网络模型图

  除了这十二种DNN外,还有许多深度神经网络没介绍到,例如Hopfield Network(HN)、Deep Convolutional Inverse Graphics Network(DCIGN)等等,关于这个巨大的神经网络动物园,如果你还想了解更多,能够在这里再学一手:The Neural Network Zoo

  下面给出了DNN的咱们族及模型图:

一文读懂十二大深度神经网络

一文读懂十二大深度神经网络

一文读懂十二大深度神经网络

ending

  好啦,今日关于深度神经网络就介绍到这儿啦。很开心能把学到的知识以文章的形式分享给咱们。如果你也觉得我的分享对你有所协助,please一键三连嗷!!!下期见

一文读懂十二大深度神经网络