一提到深度神经网络,大家脑海中第一个浮现的无疑是卷积神经网络(ConvolutionalNeuralNetwork,CNN),并且通过前几节的学习,我相信盆友们已经可以很熟练地掌握一些CNN的应用啦然而,CNN只是深度学习神经网络中的一小部分,深度神经网络家族还有许多其他成员。今天,我就把压箱底的宝贝拿出来啦,向大家介绍一下庞大的深度神经网络家族,让盆友们对人工智能和深度学习有更全面深入的认识
深度神经网络(DeepNeuralNetwork,DNN)是一种由多个神经元层组成的计算模型。每个神经元接收来自上一层的输入,并通过激活函数处理后输出给下一层。它的核心思想是通过训练来学习输入与输出之间的映射关系。训练过程中,网络根据输入进行前向传播计算,并与真实输出进行比较计算损失函数;然后通过反向传播算法来调整网络中的权重和偏置,以减小损失函数,从而优化网络性能。(这几个名词是不是很熟悉腻前几节都介绍过啦,看来深度学习的尽头是卷积狗头保命)
前馈神经网络(FeedforwardNeuralNetwork)也被称为多层感知机,是一种最常见和基本的人工神经网络模型。它由多个神经元层组成,这些层按顺序连接,并且信号只在一个方向上前进,从输入层到输出层,没有循环反馈。
以下是前馈神经网络的一般结构和工作原理:
前馈神经网络训练过程:初始化权重、前向传播、计算损失、反向传播、更新权重和重复迭代。
以下是一个简单的使用TensorFlow实现前馈神经网络的代码,有利于理解:
importtensorflowastf#定义前馈神经网络defffn_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'))returnmodel#定义输入和输出的维度input_size=100output_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关于卷积神经网络的原理介绍及一些应用,前几节已经讲解很多啦,没看过的来看看叭
RNN的隐藏状态更新公式如下:
以下是一个简单的使用TensorFlow实现RNN的代码:
importtensorflowastf#定义RNN模型,其中包含一个SimpleRNN层和一个输出层defrnn_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'))returnmodel#定义输入和输出的维度input_size=100output_size=10time_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.3.1长短期记忆网络LSTM长短期记忆网络(LongShort-TermMemory,LSTM)是一种特殊类型的循环神经网络,专门用于处理序列数据,具有记忆能力。相比传统的RNN模型,LSTM能够更好地解决梯度消失和梯度爆炸问题,有效地捕捉序列数据中的长距离依赖关系。
LSTM的简单代码和上面的差不多,只不过是定义模型有了些改变:
#定义LSTM模型,其中包含一个LSTM层和一个输出层deflstm_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'))returnmodel2.4生成对抗网络GAN生成对抗网络(GAN)是一种由两个神经网络组成的框架,旨在生成逼真的合成数据。
GAN的训练过程可以概括为以下步骤:
真实的GAN模型需要更复杂的架构、更多的样本数据、更多的训练技巧才能获得高质量的合成样本。同时,还有很多其他更高级的GAN变体和改进方法可以探索和尝试,下图是GAN家族的演变。
深度强化学习网络(DeepReinforcementLearningNetwork,DRLN)是将深度学习和强化学习相结合的方法,其原理基于强化学习的框架。在强化学习中,智能体通过与环境的交互来学习最优策略,以最大化累积奖励;而深度学习网络则用于逼近值函数或策略函数,将状态映射为动作。
DRLN的原理基于强化学习的框架,其中主要包括环境、智能体、状态、动作和奖励等要素。智能体根据当前状态(State)选择相应的动作(Action),并根据环境的反馈获得相应的奖励(Reward)。通过不断与环境交互,智能体逐步学习出最优的策略,使累积奖励最大化。它引入了深度神经网络作为智能体的决策模型,用于将状态映射到动作空间。
典型的DRLN模型是深度Q网络(DeepQ-Network,DQN)。DQN论文提出了一种使用深度神经网络进行Q值函数逼近的方法。通过将当前状态作为输入,神经网络输出每个动作的Q值,智能体根据Q值选择动作。DQN采用经验回放(ExperienceReplay)来存储和随机选择过去的经验样本,以减小样本之间的关联性,并且使用固定Q目标(FixedQ-Targets)来提高训练的稳定性。
关于DRLN,因为涉及到强化学习,属实是超出了我的学习范围(只有大佬才配学高难度滴强化学习),所以只能介绍这么些啦
Transformer是一种基于自注意力机制(self-attention)的深度学习模型,核心思想是完全基于注意力机制来建模序列间的依赖关系,而不依赖于传统的循环神经网络(RNN)或卷积神经网络(CNN)。它使用自注意力机制来实现并行计算,使得模型能够更好地捕捉文本中不同位置的上下文信息。
自注意力机制允许模型在计算每个位置的表示时,考虑到输入序列中其他位置的语义关系。通过对输入序列中所有位置的软注意力权重进行加权求和,Transformer能够更好地捕捉上下文信息,并有效地建模长距离依赖关系。
Transformer模型由编码器和解码器组成:
通过编码器和解码器的协同工作,Transformer模型能够准确捕捉输入序列的上下文信息,并生成高质量的输出序列。
这几年Transformer可太火了,用处太多,下面简单介绍几个它的变体:
自动编码器(Autoencoder,AE)是一种无监督学习的神经网络模型,通过将输入数据压缩成低维度的表示并尝试将其重构回原始输入,从而实现数据的特征提取和降维。
AE由两部分组成:编码器(Encoder)和解码器(Decoder)。编码器将输入数据映射到潜在空间(也称为编码或隐藏层),而解码器则将潜在表示映射回原始数据空间。整个模型的目标是最小化重构误差,使得重构的输出尽可能接近原始输入。
训练过程可以分为两个阶段:
AE的训练过程可以使用反向传播算法进行优化,通过最小化重构误差来更新网络的参数。一般情况下,常用的重构误差函数是均方差(MeanSquaredError,MSE)。
深度残差网络(DeepResidualNetwork,DRN)是一种深度学习架构,通过引入残差连接来解决深层网络训练过程中的梯度消失和模型退化问题,使得可以更容易地训练和优化非常深的神经网络。
原理:传统的深层神经网络在训练过程中可能遇到梯度消失和模型退化的问题。当网络变得很深时,反向传播算法在更新参数时梯度会逐渐减小,导致难以有效地训练网络。为了解决这个问题,DRN引入了残差连接(ResidualConnection)。残差连接可以看作是一种跨层的直接连接,通过将前一层的特征与后续层的特征相加,使得网络可以更容易地学习残差(即前后层特征之间的差异)。这样,对于深度网络中较浅的层,即使网络的学习函数近似于恒等映射,也可以通过残差连接传递正确的梯度信息,避免梯度消失问题。具体而言,DRN的基本单元是残差块(ResidualBlock),它由两个或三个卷积层组成。残差块的输入通过跳过一个或多个卷积层,直接与块内最后一个卷积层的输出相加,然后经过激活函数得到最终的输出。
胶囊网络(CapsuleNetwork,CapsNet)是由GeoffreyHinton等人于2017年提出的一种神经网络架构。与传统的卷积神经网络不同,胶囊网络引入了胶囊层(CapsuleLayer)来代替传统网络中的卷积层和全连接层。胶囊层利用胶囊(Capsule)来表达特征向量,并且能够编码实体的姿态信息。胶囊网络的设计目标是解决传统卷积神经网络在处理视觉问题时对空间层次化信息建模不足的问题。
胶囊网络的核心原理是利用胶囊来表示实体的各种属性,例如位置、方向、大小等,并通过动态路由(DynamicRouting)机制来学习不同胶囊之间的权重关系。每个胶囊都输出一个向量,该向量包含了实体的属性信息,而不是单纯的激活值。
在胶囊网络中,第一个胶囊层被称为主胶囊层(PrimaryCapsuleLayer),它类似于传统卷积层,用于提取低级特征。然后,主胶囊层的输出会通过动态路由算法,分配给下一层的胶囊,这样高级特征可以通过胶囊表示。动态路由算法根据两个胶囊之间的一致性来调整它们之间的权重,使得具有相似属性的胶囊可以更好地进行通信和合作。
胶囊网络的最后一层为分类胶囊层(CapsuleLayer),每个分类胶囊对应一个类别,并输出一个向量表示实体属于该类别的概率。通过计算分类胶囊的长度(向量的范数),可以确定实体是否属于某个类别。
损失函数:胶囊网络通常使用多样本边缘损失函数(MarginLoss)作为训练的目标函数。多样本边缘损失函数主要通过比较目标类别的胶囊向量与其他类别的胶囊向量之间的距离来进行优化。这样可以使得目标类别的胶囊向量在空间上与其他类别的胶囊向量相隔较远,增强分类的鲁棒性。
深度信念网络(DeepBeliefNetwork,DBN)是一种由多个堆叠的受限玻尔兹曼机(RestrictedBoltzmannMachine,RBM)组成的深度神经网络,它是一种生成式模型,通过无监督学习的方式对数据进行建模和特征学习。
受限玻尔兹曼机(RBM):
DBN的训练包括两个主要步骤:逐层预训练和全局微调。
微调阶段:在预训练完成后,整个DBN进行端到端的监督训练。使用反向传播算法来更新所有层之间的连接权重,并通过最大似然估计来拟合训练数据的标签。
#DBN模型定义classDBN(nn.Module):def__init__(self,input_size,hidden_sizes):super(DBN,self).__init__()self.rbm_layers=nn.ModuleList()#创建多个RBM层foriinrange(len(hidden_sizes)):visible_size=input_sizeifi==0elsehidden_sizes[i-1]rbm_layer=RBM(visible_size,hidden_sizes[i])self.rbm_layers.append(rbm_layer)defforward(self,x):#逐层传递输入数据forrbminself.rbm_layers:x=rbm(x)returnx#RBM模型定义classRBM(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))defforward(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)#计算可见层激活概率returnv_prob上述代码是一个简单的DBN实现,从中可以看出包括了DBN模型确实包含了多个RBM模型