总结的一些深度学习小知识点

单层感知机

下面图就可以看出,这其实就是单层输入和单层输出的神经网络,只能拟合一个直线
在这里插入图片描述
类似这个样子:
在这里插入图片描述

多层感知机(MLP)

其实就是中间加了一个隐藏层,这样子就类似全连接层了,下面举例是单隐藏层的结构
在这里插入图片描述
在隐藏层都会使用激活函数,如sigmoid,tanh,ReLu,其中relu使用的频率最高,因为他不仅计算快速(sigmoid和tanh都需要计算指数函数,这是比较耗时间的),而且他在无穷远点的时候梯度都不会消失。
为什么要使用激活函数呢? 举例如下,如果不加激活函数,以单隐藏层举例,h向量就是隐藏层的输出,o就是输出层的向量输出,我们将h带入o的公式中,可以发现x前面的系数是一个标量,所以结果还是单隐藏层那样只会是一条直线,拟合不了XOR问题:
层数塌陷 :这个概念就随之而来,如果某层隐藏层不使用激活函数,那么就会失去效果。

在这里插入图片描述
隐藏层中的元素个数也比较有讲究,下图中第一层有5个,第二层有3个,第三次有2个,这么设计尊学着第一层先比输入元素个数大几个,随着层数的加深逐次递减数量,最后一层的时候接近输出的个数(也就是类别)。这么设计起到了一个逐层压缩数据的效果,如果突然一下子压缩大量数据会造成数据丢失等等问题。
在这里插入图片描述

深度学习中的数值稳定性问题(每层之间权重的大小引起的)

我们以深度为d的MLP举例,他的损失函数是L,假设第t层的权重是Wt,那么L对Wt求导,遵循链式法则如下:可以看出中间有d-t次的矩阵乘法。

在这里插入图片描述
我们要研究上面d-t次的矩阵运算结果,那就先研究其中一个,例如研究ht对ht-1求偏导,也就是d-t次矩阵运算的第一个数值,结果可以直接写出来,diag代表是一个对角矩阵,那么进行d-t次运算就是下面这个连乘。
在这里插入图片描述
我们考虑激活函数选取ReLu的情况下:
在这里插入图片描述
我们重新考虑一下这个连乘式子,ReLU函数的导数是非0即1的,所以对角矩阵中元素不是0就是1,这是根据输入层的数值来决定的,这么连乘下来,其实就是一个对角矩阵,里面元素有一部分是各层权重的累乘和,另一部分是0,那么加入各层权重过大,并且层数很深,逐渐从顶到下梯度是逐渐变大,最终导致梯度爆炸,如果各层权重过小,并且层数很深,那么梯度会逐渐变小,最终都会导致梯度消失,下图这样的结果:
在这里插入图片描述
sigmoid函数同理,下面给出他的导数图像,可以看出sigmoid函数不仅存在各层权重的数值问题,还存在每层输出的数值问题,如果每层输出过大,就会导致sigmoid的导数趋近于0,最后连乘的结果也会接近0,导致梯度消失,这也是为什么对于深层神经网络,不太建议选sigmoid函数作为激活函数的原因:
在这里插入图片描述
总结一下数值问题的影响
在这里插入图片描述

避免数值稳定性带来的问题

由于每层的权重和输出都会带来数值稳定性,并且权重影响梯度,所以我们额可以固定每层输出和梯度的分布来使得数值更加稳定。
在这里插入图片描述

批量归一化,batch norm

我们上面说可以固定输出的分布和梯度的分布,下面batch norm就遵循这个思想,将每层的输出的每一个特征(feature)在这个小批量中的均值固定为β,方差为γ的分布中,β和γ也是超参数,自己设定。某个批量的均值就是某一样本所有数据累和除以批量。方差同理
在这里插入图片描述
非常有意思的点,就是全连接层作用在特征(feature)维,卷积层作用在通道维。这个理解如下:
在这里插入图片描述

对于全连接和卷积的batch norm讨论:

因为卷积层和全连接层的输入不同,卷积层输入是特征图,全连接层输入是一维向量,所以需要分别单独讨论,下面以全连接层为例,输入的特征数量为3,Batch size也为3,经过Torch的处理后,输入就变为shape是(batch size, feature num)也就是(3,3)。在这个小batch中做norm就是对每一列进行归一化,例如feature第一列(1,4,7)这三个feature进行Norm算出均值,然后减去这个均值就完成Norm的操作。相当于在这个batch中将特定的feature进行了归一化处理。所以我们得到的这个均值的shape是(1,n),表示有n组batch的均值,每个batch有一个元素,这里n显然是3。因为feature num = 3。
在这里插入图片描述
下面以卷积层为例,加入输入的特征图的HXW是3X3,并且是3通道,而且batch size = 3,经过torch的处理后,他的shape是(batch size,chanel,H,W),我们考虑一个3通道的特征图也就是橙色这些,在进行1x1卷积的时候,画白色五角星的那个像素位置向后延申3个通道,得到一个三维向量来进行全连接层的操作,所以卷积中特征图的每个像素位置都可以认为是一个输入到全连接层的n维样本,这个样本有N个feature。这么进行求均值之后,均值的维度就是(1,n,1,1),其中n取3,因为输入通道数是3。
在这里插入图片描述
下面放上代码实现:其中求方差的时候很有意思,因为求均值就是累和再除数量,求方差也类似,所以同样可以使用mean函数。
在这里插入图片描述
总结batch norm的优点:
batch norm可以允许设定比较大的学习率,所以加入它之后可以加速收敛,但是模型精度不会为此变好。
在这里插入图片描述

注意力机制的简单介绍

例如下面有3个value,对应3个key,假如橙色的qurey输入,他和第一个key相似较高,则对应的value权重高,第二个value次之,第三个value权重是最小的,然后累和得到output。不同的注意力函数可以分为不同的注意力。
在这里插入图片描述
下面介绍在transformer中使用的注意力,公式如下:
在这里插入图片描述
在transformer中,输入qurey的维度为dk,key的维度也是dk,value的维度是dv,简单来说就是针对一个qurey对每个key进行相似度判断(在transformer中通过内积来实现相似度判断,因为垂直内积为0,平行内积最大),得到对应的权重,这个权重需要乘以根号dk,然后用权重乘以对应的value再进行累和,因为qurey一个一个跟key进行相乘非常耗时间,这是可以并行的一个操作,通过矩阵运算,下面进行举例。
假如我们query数量是2,dk为2,key的数量是3,dk是2,value个数同样是3,dv是3,可以先将Q和K写成矩阵形式。
其中Q和K和V矩阵中的1或1’代表这个向量的第一和第二个元素,后面的QxKt每个元素表示两个向量乘积之后的结果。
在这里插入图片描述
首先算Q和K的相似度,得到一个nxm的矩阵,这个矩阵可以理解为每个query对应key的权重也就是第n个query对应第m个key的权重,左上角第一个元素是query1和key1向量相乘的结果也就是query1对应key1的权重,第二个元素是query1和key2向量相乘的结果,也就是query1对应key2的权重,其他同理,然后除以根号dk在经过softmax,这是对行进行softmax,将每行变成总和为1的概率。
在这里插入图片描述
然后output的每一行就是输入对应的结果。
下面考虑带masck的注意力:
在这里插入图片描述
对于我们的qt,在解码器的时候应该给他看kt-1以前的,不能给他看kt或者之后的,这样我们可以对QxKt这个矩阵做操作,让qt和kt以及之后的k进行内积的数值变为负无穷,这样的话在softmax就会得到0。

多头注意力机制

实际上Q,K,V都是来自于输入,是一样的向量
在这里插入图片描述
举个例子:
其中N是token个数,d_model是token维度,这里以512为例,B就是batch_size,h就是head个数,这里选8,1.a到1.b其实就是来将原本N个512维的向量分成N*h个64维的向量,假设输入两个512维度的token,相当于一个512维度的token被拆分成8个64维的向量,然后分别对拆分后的8个head做自注意力得到8个输出,再将8个64维度的输出拼接回一个512维,这样就得到了两个512维的向量,然后在进行一次线性变换输入还是俩512维度向量,这就是多头自注意力机制的输出。可以认为一共进行了head次自注意力机制计算,注意一点就是在进行自注意力机制的时候每个head中是不同的token分身,然后在拼接每个头的结果的时候,找的是相同token在每个head中的输出结果。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值