深度学习复盘与论文复现G 项目维护
文章目录
- 1、Deep Learning Review
- 1.1 Dense layer
- 1.2 Self-Attention Mechanism
- 1.3 seq2seq introduce
- 1.4 RNN LSTM and GRU
- 1.5 Candidate Hidden State
- 1.6 Beam Search
- 2、 Bert knowledge
- 2.1 BERT core features
- 2.2 BERT pre-training task
- 2.3 BERT architecture
- 3、 Optimization algorithms
- 3.1 Basic introduction
- 3.2 Momentum method
- 3.3 Saddle point
- 3.4 Hessian Matrix
- 3.5 The gradient disappears
- 3.6 Convexity
- 3.8 Gradient descent
- 3.9 Minibatch gradient descent
- 3.10 Adam algorithms
- 4、Laboratory project maintenance development
- 4.1 Project Code Analyse
- 4.2 Project Code Run
- 4.3 The domain name certificate is invalid
- 4.4 Mini Program release issues
1、Deep Learning Review
1.1 Dense layer
- 在深度学习,特别是在处理序列数据的循环神经网络(RNN)中,Dense 层(或称为全连接层、密集连接层)扮演着将RNN的输出转换为最终所需输出形式的重要角色。尽管RNN(如LSTM或GRU)单元本身已经能够处理序列数据并捕捉其中的时间依赖性,但通常这些单元的输出并不直接对应于我们想要预测或分类的最终结果。因此,我们会在RNN之后添加一个或多个Dense层来进行这种转换。
1.2 Self-Attention Mechanism
自注意力机制
- 作用:自注意力机制是Transformer的核心,它允许模型在处理序列中的每个元素时,都能够关注到序列中的其他所有元素。
- 计算过程:
通过查询(Query)、键(Key)和值(Value)
三个向量来计算注意力权重,进而对值向量进行加权求和,得到每个元素的最终表示。 - 多头注意力机制: 多头注意力机制是对自注意力机制的扩展,它将输入序列分成多个头(Head),每个头独立地计算自注意力,然后将多个头的输出拼接起来,再通过一个线性变换得到最终的输出。优势:多头注意力机制允许模型在不同的表示子空间中捕捉信息,从而增强模型的表达能力。
1.3 seq2seq introduce
-
一种用于处理序列数据的深度学习模型,其核心思想是将一个输入序列转换成一个输出序列。这种模型因其灵活性和有效性,已被广泛应用于自然语言处理(NLP)、语音识别、图像描述生成、对话系统、文本摘要等众多领域
-
Seq2Seq模型由两个主要部分组成:编码器(Encoder)和解码器(Decoder)。编码器负责读取并理解输入序列,将其转换成一个称为上下文向量的固定长度表示;解码器则根据这个上下文向量生成目标序列。整个过程无需人工设计复杂的语言规则或中间表示,而是让神经网络自行学习如何进行有效的序列转换。
Seq2Seq模型依赖于单一上下文向量来传递输入序列的信息,但在许多实际应用中,尤其是处理长序列或需要精细信息捕捉的任务时,会引入Attention机制以增强模型性能。Attention允许解码器在生成每个输出元素时,动态地关注输入序列的不同位置,并根据这些位置的重要性分配权重。这样,解码器不仅可以利用全局上下文,还能直接获取输入序列中与当前生成任务最相关的部分
具体的运用如下:
- 机器翻译:将源语言句子翻译成目标语言句子。
- 文本摘要:将长篇文章压缩为简短的摘要。
- 对话系统:根据用户输入生成合适的回应。
- 语音识别转文字:将连续的语音信号转化为文字序列。
- 图像描述生成:为给定图像生成相应的自然语言描述。
1.4 RNN LSTM and GRU
GRU概述:
基本结构:
- RNN由输入层、隐藏层和输出层组成,但与传统的神经网络不同,RNN的隐藏层节点之间是相互连接的,这种结构使得RNN能够处理任意长度的序列数据。
- 在RNN中,每个时间步的隐藏状态不仅取决于当前时间步的输入,还取决于上一个时间步的隐藏状态,从而实现了对序列数据的历史信息的记忆。
- 能关注的机制(更新门):
Zt
顾名思义,是否需要根据我的输入,更新隐藏状态 - 能遗忘的机制(重置门):
Rt
更新候选项时,是否要考虑前一隐藏状态。
存在的问题:
尽管RNN能够处理序列数据,但在处理长序列时容易出现梯度消失或梯度爆炸的问题,导致模型难以捕捉到长距离依赖关系。
LSTM概述:
-
LSTM和GRU都是循环神经网络(RNN)的变种,它们主要用于处理序列数据,特别是那些需要捕捉长期依赖关系的数据。
-
LSTM是一种特殊的RNN,它通过引入记忆单元和三个门(输入门、遗忘门、输出门)来解决传统RNN在处理长序列时容易出现的梯度消失或梯度爆炸问题。LSTM能够有效地捕捉和利用长时间跨度的依赖关系。
结构:
- 记忆单元(Cell State):LSTM的核心部分,通过门的操作控制信息在不同时间步长中的流动。
- 输入门(Input Gate):决定哪些新的信息将被存储到记忆单元中。
- 遗忘门(Forget Gate):决定哪些以前的记忆单元状态将被遗忘。
- 输出门(Output Gate):控制从记忆单元中读取的信息,决定下一时间步的隐藏状态。
Neural Network中的concatenate一般就是用来将特征联合,多个卷积特征提取框架提取的特征融合或者是讲输出层的信息进行融合,这个联合其实就是维度的一个联合
优点:
- 能够更好地处理长序列和长期依赖关系。
- 通过记忆单元和门机制,有效地保存和使用长时间跨度的依赖关系。
缺点:
- 结构相对复杂,参数量较大,训练速度可能较慢。
GRU概述:
GRU是另一种RNN的变种,旨在解决长期依赖和梯度消失问题。与LSTM相比,GRU具有更简单的结构,但仍然能够有效地捕捉序列数据中的长期依赖关系。
结构:
- 更新门(Update Gate):控制前一时刻的隐藏状态如何流入当前时刻的隐藏状态。
- 重置门(Reset Gate):确定前一时刻的隐藏状态如何影响当前时刻的候选隐藏状态。
优点:
- 结构相对简单,参数量较少,训练速度更快。
- 在一些任务上,如自然语言处理和时间序列分析,表现与LSTM相当甚至更好。
缺点:
- 由于结构简化,可能在处理非常长的序列时,其性能略逊于LSTM。
LSTM与GRU的比较
LSTM | GRU | |
---|---|---|
结构复杂度 | 较高,包含三个门和一个记忆单元 | 较低,仅包含两个门 |
参数量 | 较多 | 较少 |
训练速度 | 可能较慢 | 较快 |
长期依赖处理 | 优秀,特别适用于长序列 | 良好,适用于多数序列任务 |
适用场景 | 需要捕捉长时间跨度的依赖关系的任务 | 大多数序列数据处理任务,特别是参数敏感或训练时间受限的情况 |
1.5 Candidate Hidden State
- 候选隐状态 是门控循环单元中的一个重要概念。在GRU中,候选隐状态主要用于描述当前时刻的输入状态和更新门的状态,它相当于“记忆了当前时刻的状态”。
-
定义:候选隐状态是GRU在每个时间步计算得到的一个中间状态,它结合了当前输入和前一个时间步的隐藏状态(经过重置门调整后的),并通过非线性激活函数(如tanh)进行变换。
-
计算方式:候选隐状态的计算公式通常表示为:
H ~ t = tanh ( X t W x h + ( R t ⊙ H t − 1 ) W h h + b h ) \tilde{H}_t = \tanh(X_tW_{xh} + (R_t \odot H_{t-1})W_{hh} + b_h) H~t=tanh(XtWxh+(Rt⊙Ht−1)Whh+bh)
其中,(X_t) 是当前时间步的输入,(H_{t-1}) 是前一个时间步的隐藏状态,(R_t) 是重置门的输出,(W_{xh}) 和 (W_{hh}) 是权重矩阵,(b_h) 是偏置项,(\odot) 表示按元素乘积(Hadamard积),(\tanh) 是非线性激活函数。
-
作用:候选隐状态在GRU中起到了关键作用,它结合了当前输入和前一个时间步的隐藏状态(经过重置门调整后的),为后续的隐藏状态更新提供了基础。
-
意义:通过引入候选隐状态,GRU能够更灵活地处理输入序列中的信息,既能够关注当前时刻的输入,又能够保留过去的重要信息。这使得GRU在处理长期依赖问题时具有更好的性能。
-
与更新门的关系:更新门决定了新的信息有多少被加入到隐藏状态中,而候选隐状态则提供了这些新信息的来源。当更新门接近1时,隐藏状态会更多地依赖于候选隐状态;当更新门接近0时,隐藏状态则更多地保留前一个时间步的信息。
-
与重置门的关系:重置门控制了历史输入的影响,当重置门接近0时,历史输入的影响将被最小化,此时候选隐状态将更多地依赖于当前输入;当重置门接近1时,历史输入将对候选隐状态产生较大影响。
为什么叫候选隐状态?
在RNN中,这个所谓的候选隐状态就是当前步的隐状态( R t R_{t} Rt无限接近1时)。但是由于引入了更新门,我们需要考虑是直接沿用上一步的隐藏状态,还是像RNN一样使用当前步计算的隐状态。所以这个结合了当前输入计算的隐状态,不能立马变成当前的 H t H_{t} Ht,而是需要用更新门和前一隐状态 H t − 1 H_{t-1} Ht−1做一个加权,所以它是一个候选项。
1.6 Beam Search
束搜索是一种启发式图遍历和图搜索算法,用于在搜索空间中找到最优解或近似最优解,特别是在那些解决方案可能由多个步骤或决策组成的情况下。
基本原理
- 束搜索通过维护一个固定大小的候选集(称为“束”或“波束”)来工作,这个候选集包含了当前搜索状态下最有可能的解的一部分。在每一步搜索中,算法会考虑所有可能的扩展(或称为“动作”或“决策”),并评估每个扩展后的候选解的质量(通常是通过某种评分函数来评估的,比如对数概率)。然后,它保留评分最高的N个候选解(N是束的大小),并丢弃其余的。这个过程会重复进行,直到达到某个停止条件(比如生成了一个完整的序列,或者达到了预定的步数限制)。
举个例子:
- max( f(x)) 是求 f(x)的最大值
- argmax( f(x) ) 是求f(x) 最大值下的 x
f(x) x属于{1,2,3}
f(x=1) = 20
f(x=2) = 25
f(x=3) =22
- max( f(x)) = 25
- argmax( f(x) ) = 2
y t ′ = argmax y ∈ Y P ( y ∣ y 1 , … , y t ′ − 1 , c ) y_{t'} = \operatorname*{argmax}_{y \in \mathcal{Y}} P(y \mid y_1, \ldots, y_{t'-1}, \mathbf{c}) yt′=y∈YargmaxP(y∣y1,…,yt′−1,c)
- 性能与精度的平衡:与贪心搜索相比,束搜索可以探索更多的候选解,因此有可能找到更优的解。与穷举搜索相比,它只保留最有可能的候选解,因此计算效率更高。
- 灵活性:束的大小(N)是一个可以调整的参数,可以根据计算资源和所需精度进行权衡。
2、 Bert knowledge
- Bert(Bidirectional Encoder Representations from Transformers)。它基于Transformer结构,并且是一种深度双向的预训练语言模型。Bert的出现极大地推动了自然语言处理(NLP)领域的发展,尤其是在各种NLP任务中取得了显著的性能提升。
2.1 BERT core features
-
双向性:与之前的预训练模型不同,Bert在预训练时考虑了上下文信息的双向性。这意味着在预测某个词时,模型会同时考虑这个词前后的信息,从而能够更准确地理解该词在句子中的含义。
-
Transformer结构:Bert基于Transformer结构,这是一个完全基于注意力机制的模型,能够并行处理序列中的每个元素,从而大大提高了模型的训练速度和效果。
-
预训练与微调:Bert采用了两阶段的训练过程。首先,在大规模文本数据上进行预训练,学习通用的语言表示。然后,针对特定的NLP任务进行微调,使模型能够适应该任务。这种方式使得Bert能够灵活地应用于各种NLP任务中。
2.2 BERT pre-training task
Bert的预训练主要包括两个任务:
-
Masked Language Model (MLM):在预训练时,随机遮盖掉输入句子中的一部分词(通常是15%),然后要求模型预测这些被遮盖的词。这个任务迫使模型从上下文中学习词汇的语义表示。
-
Next Sentence Prediction (NSP):为了理解句子间的关系,Bert还引入了一个句子级别的预训练任务。具体来说,给定两个句子,模型需要判断第二个句子是否是第一个句子的下一个句子。这个任务有助于模型学习句子间的逻辑关系。
2.3 BERT architecture
-
只有编码器的Transformer
-
两个版本:
- Base :
#blocks=12,hidden size=768,#heads=12,#parameters=110M
- Large :
#blocks=24,hidden size=1024,#heads=16,#paramerter=340M
- Base :
-
在大规模数据上训练 >3B 词
-
双向Transformer:
- 与传统的从左到右或从右到左的模型不同,BERT使用了双向的Transformer模型。这意味着在编码时,每个单词的表示都融合了它左边和右边单词的信息。这使得BERT能够更好地理解语境,提高模型对语言的理解能力。
-
预训练任务:
- Masked Language Model (MLM):BERT在预训练阶段会随机掩盖输入文本中的一部分单词(通常是15%),然后要求模型预测这些被掩盖的单词。这种方式迫使模型在预测时不仅依赖于前面的词,还要依赖于后面的词,从而学习到语言的双向性。
- Next Sentence Prediction (NSP):BERT的另一个预训练任务是判断两个句子是否是在原文中连续出现的。这个任务让BERT能够学习到句子级别的表示,对需要理解句子间关系的任务非常有帮助。
-
Transformer编码器:
- BERT使用多层Transformer编码器堆叠而成,
每个编码器层包括自注意力(self-attention)机制和前馈网络(feed-forward network),以及层归一化(layer normalization)和残差连接(residual connection)
。 - 自注意力机制允许模型在处理序列时,能够同时考虑序列中所有其他单词的信息,从而捕捉到词与词之间的依赖关系。
- BERT使用多层Transformer编码器堆叠而成,
-
输入表示:
- BERT的输入表示能够处理单句和句对,通过特殊的标记(如[CLS]用于分类任务,[SEP]用于分隔两个句子)和位置嵌入(positional embeddings)来表示。
- BERT针对微调设计
- 基于Transformer的编码器做了如下修改
- 模型更大,训练数据更多
- 输入句子对,片段嵌入,可学习的位置编码
- 训练时使用两个任务:
- 带掩码的语言模型
- 下一个句子预测
3、 Optimization algorithms
3.1 Basic introduction
- 对于深度学习问题,通常会先定义损失函数,在有了
损失函数
之后,就可以使用优化算法来尝试最小化损失 - 在优化中,损失函数通常被称为优化问题的目标函数
- 大多数优化算法都关注的是最小化,如果需要最大化目标,只需要在目标函数前加负号就可以了
- 在深度学习中,f(x) 是损失函数(给定一个输入,
预测和真实标号之间的差距
);x 是所有的超参数,不管矩阵还是张量 ,最终都会转换成一个向量。 - 限制集合 C 在优化中比较常见,在具体的优化中有很多的假设,但是在深度学习中,尽量使得 C 不受限制,不受限制的话相对来讲优化起来会快一点
3.2 Momentum method
- 关于动量法相关链接如下:
跳转
-
在小批量随机梯度下降的时候,梯度还是会有比较大的抖动,特别是当整个目标函数比较复杂的时候
-
真实数据的损失函数是不平滑的,在一个不那么平滑的平面上做优化的时候,梯度的变化趋势就有点类似于随机运动,噪音可能会带来一些不必要的抖动
-
冲量法中,它维护了一个惯性,使得梯度变化的方向不要变化太快,方向还是要改变的,这是变化起来比较平滑
-
Adam优化算法基本上就是将Momentum和RMSprop结合在一起
对比随机梯度下降(上)和冲量法(下)
由上可知:
- 随机梯度下降上下振动的幅度比较大
- 冲量法是几个相互冲突的方向在慢慢相互抵消,使得梯度的变化尽量朝着正确的方向
总结:
1、冲量法用过去梯度的平均值来替换梯度,大大加快了收敛速度
2、对于无噪声梯度下降和嘈杂随机梯度下降,冲量法都是可取的
3、冲量法可以防止在随机梯度下降的优化过程停滞的问题
4、由于对过去的数据进行了指数降权,有效梯度为 1/(1-β)
3.3 Saddle point
- 鞍点 : 除局部最小值之外,鞍点是梯度消失的另外一个原因。
1、定义:鞍点指的是函数的所有梯度都消失但既不是全局最小值也不是局部最小值的任何位置
2、假设函数的输入是 k 维向量,它的输出是标量,因此其 Hessian 矩阵(也称黑塞矩阵)将有 k 个特征值
函数的解可能是局部最小值、局部最大值或函数梯度为零位置处的鞍点:
- 当函数在零梯度位置处的 Hessian 矩阵的
特征值全部为正值时,该函数存在局部最小值
- 当函数在零梯度位置处的 Hessian 矩阵的特征值
全部为负值时,该函数存在局部最大值
- 当函数在零梯度位置处的 Hessian 矩阵的特征值为正值和负值时,该函数存在鞍点(对于高维度问题,至少部分特征值为负的可能性相当高,因此鞍点比局部最小值更有可能出现)
3、凸函数是 Hessian 函数的特征值永远不为负值的函数
3.4 Hessian Matrix
- 黑塞矩阵 ,又译作海森矩阵、海瑟矩阵等,是一个多元函数的二阶偏导数构成的方阵,它描述了函数的局部曲率。以下是对黑塞矩阵的详细解析:
定义与背景
- 定义:对于一个实值多元函数,如果其二阶偏导数都存在,则这些二阶偏导数构成的方阵即为该函数的黑塞矩阵。
性质与特点
- 对称性:如果函数在区域内二阶连续可导,那么其黑塞矩阵在该区域内为对称矩阵。这是因为二阶偏导数的求导顺序没有区别,即混合偏导数与求导顺序无关。
- 极值判定:
在优化问题中
,黑塞矩阵常用于判定多元函数的极值。具体来说,如果黑塞矩阵在临界点处是正定矩阵,则该函数在该点取得局部极小值;如果是负定矩阵,则取得局部极大值;如果是不定矩阵,则不是极值点,需要进一步判断。
- 优化问题:黑塞矩阵常用于牛顿法解决优化问题,包括求方程的根和函数的最优化。在牛顿法中,黑塞矩阵提供了函数在局部区域的曲率信息,有助于更准确地确定搜索方向。
3.5 The gradient disappears
-
在某一个时刻开始,函数 f(x) 的梯度接近零,这会导致优化会停止很长一段时间
-
比如 f(x) = tanh(x) 从 x = 4 开始,f(x) 的梯度接近 0
-
引入 ReLU 激活函数能够很好地缓解这个问题
-
对于深度学习,其实没有必要找到最优解,局部最优解或者其近似解仍然非常有用
总结:
1、最小化训练误差并不能保证能够找到最佳的参数集来最小化泛化误差2、优化问题可能有许多局部最小值
3、实际问题中可能会出现多个鞍点,因为问题通常不是凸的(即实际问题中复杂多变)
4、梯度消失可能会导致优化停滞,重参数化通常会有所帮助,
对参数进行良好的初始化也可能是有益的
3.6 Convexity
- 1、凸性在优化算法的设计中起到至关重要的作用,主要是由于在这种情况下对算法进行分析和测试要容易
如果算法在凸性条件设定下的效果很差,则通常很难在其他条件下看到好的结果
- 2、即使深度学习中的优化问题通常是非凸的,它们经常也在局部极小值附近表现出一些凸性
凸集是凸性的基础
1、如果对于任何 a , b ∈ X ,连接 a 和 b 的线段也位于 X 中,则向量空间中的一个集合 X 是凸(convex)的
- 上图中左边一列表示的是凸集,右边一列不是凸集
在一个区域中找任意两个点连成一条线,这条线上所有的点都在这个区域当中
关于凸和非凸
-
1、机器学习绝大部分都不是凸优化
-
2、目前为止只有两个是凸的:①线性回归:
②softmax 回归:softmax 也是线性的
-
3、剩下的都是非凸的
-
4、所有的模型都是非凸的
凸函数的表达能力是非常有限的
-
对于深度学习来讲,实用性是排在第一位的,理论是靠后的,如果是研究理论的话,需要从统计的角度来看待问题,从统计的角度来讲会考虑很多的凸优化问题
-
从深度学习来讲,是从计算机的角度考虑效果,而不是过于考虑理论,所导致基本上做的都是非凸的
-
0优化的很多理论基本上是凸优化,最近也有研究非凸的,但是整体来讲大块是针对凸函数的优化,对于非凸的模型很难说有特别大的指导意义
小结
1、凸集的交点是凸的,并集不是
2、一个二次可微函数是凸函数,当且仅当其 Hessian (二阶导数据矩阵)是半正定的
3.8 Gradient descent
- 梯度下降很少直接用于深度学习
- 由于学习率过大,优化问题可能会发散,这种现象早已在梯度下降中出现
-
梯度下降是一种
优化算法
,用于寻找函数的局部最小值。在机器学习和深度学习中,梯度下降算法被广泛应用于模型的参数优化过程中,特别是在训练神经网络时。其基本原理是通过迭代地更新参数来最小化一个损失函数(或成本函数),这个损失函数衡量了模型预测值与实际值之间的差异。 -
梯度下降算法的核心在于利用目标函数(即损失函数)关于参数的梯度(即偏导数)来更新参数。梯度的方向指出了函数值增长最快的方向,因此,梯度的反方向就是函数值减少最快的方向。在梯度下降中,我们沿着梯度的反方向更新参数,以期望达到损失函数的最小值。
参数更新公式
对于参数 θ \theta θ,其更新公式通常表示为:
θ : = θ − α ∇ θ J ( θ ) \theta := \theta - \alpha \nabla_\theta J(\theta) θ:=θ−α∇θJ(θ)
其中:
- θ \theta θ 是需要优化的参数(或参数向量)。
- α \alpha α 是学习率(learning rate),一个超参数,决定了参数更新的步长大小。
- ∇ θ J ( θ ) \nabla_\theta J(\theta) ∇θJ(θ) 是损失函数 J ( θ ) J(\theta) J(θ) 关于参数 θ \theta θ 的梯度。
- : = := := 表示赋值操作。
梯度下降的类型
-
批量梯度下降(Batch Gradient Descent, BGD):在每次迭代中,使用整个训练集来计算梯度并更新参数。这种方法计算量大,但能保证收敛到全局最小值(如果损失函数是凸函数的话)。
-
随机梯度下降(Stochastic Gradient Descent, SGD):在每次迭代中,随机选择一个样本来计算梯度并更新参数。这种方法计算速度快,但可能由于随机性导致收敛过程波动较大,且不一定能收敛到全局最小值。
-
小批量梯度下降(Mini-batch Gradient Descent):结合了BGD和SGD的优点,每次迭代中使用一小部分样本来计算梯度并更新参数。这种方法既减少了计算量,又通过批量处理增加了稳定性。
对比梯度下降(上)和随机梯度下降(下)
由上可知:
- 随机梯度下降整个过程不像梯度下降那么平滑,特别是在最后阶段比较曲折,但是整个大的方向和梯度下降是一致的(均值没有发生变化)
- 因为每一次计算只需要计算一个样本的梯度,所以虽然可能会走一点弯路,但是整体来看还是比较划算的
总结:
1、对于凸问题,对于广泛的学习率选择,随机梯度下降将收敛到最优解。但是对于深度学习而言,情况通常并非如此。但是对凸问题的分析能够深入了解如何进行优化,即逐步降低学习率,尽管不是太快
2、如果学习率太小或太大都会出现问题,实际上,通常只有经过多次实验之后才能找到合适的学习率
3、当训练数据集中有更多样本时,计算梯度下降的每次迭代的代价更高,因此在这些情况下,首选随机梯度下降
4、随机梯度下降的最优性保证在非凸情况下一般不可用,因为需要检查的局部最小值的数量可能是指数级的
3.9 Minibatch gradient descent
定义与原理: 小批量随机梯度下降是在每次迭代中,从训练数据集中随机选取一小部分(即一个小批量)样本来计算梯度并更新模型参数。这种做法既减少了计算量,又提高了训练的稳定性。
在实际应用中,真正使用的是小批量随机梯度下降
-
It:随机采样一个样本的子集
-
b:批量大小
-
在计算梯度的时候,对 It 中采样的 b 个样本都求梯度,然后除以 b 求平均值,以此来近似整个目标函数的梯度
-
之所以用小批量随机梯度下降,不是统计的原因,而是计算的原因,因为随机梯度下降对单样本计算梯度,这样的话很难完全利用硬件资源(CPU 和 GPU 都是多线程的,假设只是对单样本进行梯度计算的话,计算量可能不足以能够占满整个硬件资源)
-
所以假设可以用多个样本计算的话,每个样本的计算是可以并行的,能够提高计算的并行度,所以在实际使用中通常使用的是小批量随机梯度下降
缺点
- 对参数敏感:小批量随机梯度下降的效果受到小批量大小(batch size)和学习率等参数的影响,需要仔细调整这些参数以获得最佳的训练效果。
- 可能陷入局部最优解:虽然小批量随机梯度下降可以提高训练的稳定性,但在某些情况下,它仍然可能陷入局部最优解而非全局最优解。
3.10 Adam algorithms
之前写的相关文章链接
- Adam算法是随机梯度下降算法的扩展,它结合了动量(Momentum)和RMSProp两种优化算法的思想。具体来说,Adam算法通过计算梯度的一阶矩估计(即均值)和二阶矩估计(即未中心化的方差)来为不同的参数设计独立的自适应性学习率。这种自适应学习率调整策略使得Adam算法在处理大规模数据集和高维参数空间时表现出色。
总结:
1、深度学习模型大多是非凸的
所以关于凸优化的很多理论无法使用
2、小批量随机梯度下降是最常用的优化算法3、冲量对梯度做平滑
冲量法是一个简单的稳定优化的算法
4、Adam 对梯度做平滑,且对梯度各个维度值做重新调整
-
通过实践发现,Adam 不一定比冲量法准确率高或者是收敛快,但是整体来讲 Adam 是比较稳定的,Adam 对学习率不那么敏感,使得调参相对来讲会更加容易一点,对于新的模型,如果没有很好的调参,可以直接使用 Adam
-
对于t比较小的时候,由于 v 0 = 0 v_0=0 v0=0,所以会导致一开始值比较小,做了一个修正。
-
为什么除以 s ^ t + ϵ \sqrt{\widehat{s}_t}+\epsilon s t+ϵ?
-
在nlp里面常用,起到正则化的作用,控制每个维度的值在合适的大小。
4、Laboratory project maintenance development
4.1 Project Code Analyse
- 了解得知,实验室线上部署的项目出现了问题,故简单记录维护过程。
- 由报错代码得知,就是域名证书过期了
4.2 Project Code Run
- 所以现在先去除校验合法域名,看下是否正常运行。
- 下面进行运行测试
4.3 The domain name certificate is invalid
- 在微信开发者工具中运行
showRequestInfo()
- 打开腾讯云
在这里插入图片描述
- 进行SSL 证书的申请
- 注意生成的证书不会立即生效
4.4 Mini Program release issues
- 还是需要申请企业小程序