ml2

pjishu

1、elu

ELU函数是针对ReLU函数的一个改进型,相比于ReLU函数,在输入为负数的情况下,是有一定的输出的

 2、Transformer结构(假定是seq2seq)

 

 

 

过程:(从输入开始)

输入的每个单词分别转成词向量

位置编码POSITIONAL ENCODING:为了考虑到词在句子中的位置(代码里面还考虑所属编码)

根据单词位置,得到对应的位置向量pe,然后相加

 

PE矩阵计算公式:

pos是单词在句子的位置,2i 是词向量里面元素的索引,dmodel是词向量维度

比如the在句子的第1个位置,词向量是(0.1,0.2,0.3),则the的pos是1,计算pe=>(    sin(1/1000^(0/3))     ,cos(1/1000^(1/3)) , sin(1/1000^(2/3))     )

然后进入到第一个encoder的self-attention 

self-attention:举例,得到the的结果向量,这个向量更不仅关注the,还关注其他单词,但是更能体现the

考虑单个head的单个词x1 - > z1的过程:

每个词都有自己的q,k,v,用q1和这一排所有单词的k做点乘(衡量和),再分别除以根号下dk,dk是k向量的维度,默认64,然后经过softmax层,作为各个单词的权重,最后和主体v做加权求和

 

 

考虑这一排所有单词,用矩阵的等价写法:

 

 等价于:

 

 Z的每行对应输入的一个单词,从上往下
这里的Q、K、V是这么来的:X乘以用于训练的矩阵,Q、K、V的 第 i 行对应第 i 个单词

 

现在是多个head:

词向量做切割,一个head负责一部分,这样能并行计算,一般是12个head,每个head有自己的QKV矩阵,X每行是一个单词的词向量(含有位置编码),一个单词在每个head里面各有1组q,k,v,该单词算出12个部分的z之后,拼起来就代表该单词了,然后通过一层神经网络做个降维:

 

add & normalalize:采用残差网络思想,通过将前一层的信息无差的传递到下一层,过滤掉学得不好的神经元

 x1+z1,然后通过layer norm,即内部归一化,维度没有发送变化,用矩阵考虑所有单词:layer norm(X+Z)

 feed forward neural network:主要为了降维

有两层,第一层的激活函数是ReLU,第二层是一个线性激活函数,可以表示为:

 

进入下一个encoder:多个encoder堆叠起来,前一层输出给后一层输入,就像神经网络的多层一样

右边:

 

 

 

 

3、GRU

 

4、梯度下降

梯度下降法简单来说就是一种寻找目标函数最小化的方法。由于梯度方向就是损失函数值上升最快的方向,所以参数=自变量更新时要取梯度相反的方向,所以要有负号,学习率=步长决定了参数变化的跨度,每次参数的更新都向着局部最小值靠近。

举例:
目标函数 :J(θ) = θ12 + θ22
通过观察就能发现最小值其实就是 (0,0)点
初始的起点为: θ0 = (1, 3)
初始的学习率为:α = 0.1
函数的梯度为:
▽:J(θ) =< 2θ1 ,2θ2>

 

 

 

 注意正规方程是解析法,即令代价函数偏导为0求出的:

 

 正规方程需要X’X可逆,如果自特征之间可能存在自相关性,此时需要引入岭回归方法,即在X’X的基础上加上一个较小的lambda扰动 ,从而使得可逆。

梯度下降和正规方程的对比:

 

 

梯度下降算法有:
全梯度下降算法(Full gradient descent)
随机梯度下降算法(Stochastic gradient descent)
随机平均梯度下降算法(Stochastic average gradient descent)
小批量梯度下降算法(Mini-batch gradient descent)

其差别在于样本的使用方式不同。

全梯度下降算法(FG)
计算训练集所有样本误差,对其求和再取平均值作为损失函数。所以批梯度下降法的速度会很慢,同时无法处理超出内存容量限制的数据集。在运行的过程中,不能增加新的样本。容易陷入局部最优

随机梯度下降算法(SGD)
每次迭代用1个样本,因此每次损失函数都不同(以参数为自变量),简单高效,但如果有噪声,可能陷入局部最优

小批量梯度下降算法(mini-bantch)
每次取一个batch训练,batch_size,通常设置为2的幂次方,更有利于GPU加速处理。若batch_size=1,则变成了SGD;若batch_size=n,则变成了FG。每个batch对应一个损失函数

随机平均梯度下降算法(SAG)
内存中维护一个平均梯度,每次迭代时,随机选择一个样本求梯度后更新平均梯度,然后用平均梯度更新参数。这样每一轮梯度更新都与之前的梯度有关,每一轮仅需计算一个样本的梯度,计算成本小,收敛速度快得多

 

算法对比:
(1)FG方法由于它每轮更新都要使用全体数据集,故花费的时间成本最多,内存存储最大。

(2)SAG在训练初期表现不佳,优化速度较慢。这是因为我们常将初始梯度设为0,0可能是不对的,而SAG每轮梯度更新都结合了上一轮梯度值。

(3)SGD能在训练初期快速摆脱初始梯度值,快速将平均损失函数降到很低。但容易受到噪音干扰

(4)mini-batch的表现也正好居于SGD和FG二者之间,每次更新参数会考虑一个batch的梯度。目前mini-batch使用最多,因为它避开了FG运算效率低成本大和SGD收敛效果不稳定的缺点。

梯度下降优化算法包括:动量法,Nesterov,Adagrad,Adadelta,RMSProp,Adam

 

详细:https://blog.csdn.net/qq_35456045/article/details/104508217

5、反卷积

上采样有3种常见的方法:双线性插值(bilinear),反卷积(Transposed Convolution),反池化(Unpooling),我们这里只讨论反卷积。

输入输出尺寸关系:

 

 

 

 

 

 实现1:

假设有4x4大小的输入D,有3x3大小的卷积核C

 

 卷积后:

 

 开始反卷积:

先由卷积核得到4个列向量,然后向量堆起来

 

 

 

 把2x2的输入矩阵转换为1x4的向量E,再乘上面的稀疏矩阵得到16维度向量,重排以后就得到了4x4的输出

实现2:

先通过补0来扩大输入图像的尺寸,再进行正向卷积

分类:

技术点:

相关文章:

  • 2021-06-16
  • 2022-01-07
  • 2022-01-03
  • 2021-07-25
  • 2022-01-04
  • 2022-01-27
  • 2021-12-19
猜你喜欢
  • 2021-12-31
  • 2022-02-17
  • 2022-01-07
  • 2021-12-11
  • 2021-12-05
  • 2022-02-07
  • 2021-06-07
相关资源
相似解决方案