Transformer本身是一个典型的encoder-decoder模型,Encoder端和Decoder端均有6个Block,Encoder端的Block包括两个模块,多头self-attention模块以及一个前馈神经网络模块;Decoder端的Block包括三个模块,Masked多头self-attention模块,多头Encoder-Decoder attention交互模块,以及一个前馈神经网络模块;需要注意:Encoder端和Decoder端中的每个模块都有残差层和LayerNormalization层。
Self Attention与传统的Attention机制非常的不同:传统的Attention是基于source端和target端的隐变量(hidden state)计算Attention的,得到的结果是源端的每个词与目标端每个词之间的依赖关系。但Self Attention不同,它分别在source端和target端进行,仅与source input或者target input自身相关的Self Attention,捕捉source端或target端自身的词与词之间的依赖关系;然后再把source端的得到的self Attention加入到target端得到的Attention中,捕捉source端和target端词与词之间的依赖关系。因此,self Attention比传统的Attention mechanism效果要好,主要原因之一是,传统的Attention机制忽略了源端或目标端句子中词与词之间的依赖关系,相对比,self Attention可以不仅可以得到源端与目标端词与词之间的依赖关系,同时还可以有效获取源端或目标端自身词与词之间的依赖关系。
与使用单独的一个注意力不同,多头注意力机制可以独立学习得到h组不同的线性投影(linearprojections)来变换查询、键和值。然后,这h组变换后的查询、键和值将并行地进行注意力池化。最后,将这个注意力池化的输出拼接在一起,并且通过另一个可以学习的线性投影进行变换,以产生最终输出。这种设计被称为多头注意力。自注意力机制的缺陷就是:模型在对当前位置的信息进行编码时,会过度的将注意力集中于自身的位置,因此作者提出了通过多头注意力机制来解决这一问题。使用多头注意力机制能够给予注意力层的输出包含有不同子空间中的编码表示信息,从而增强模型的表达能力。
ResNet.又称残差神经网络,它通过引入shortcut结构来规避普通神经网络中出现的梯度消失和网络退化问题。ResNet的特点是:1.残差学习。2.shortcuts连接。3.加深网络不退化。
以下几种方法供参考:换用Relu、LeakyRelu、Elu等激活涵函数ReLu:让激活函数的导数为1LeakyReLu:包含了ReLu的几乎所有有点,同时解决了ReLu中O区间带来的影响ELU:和LeakyReLu一样,都是为了解决0区间问题,相对于来,elu计算更耗时一些BatchNormalization LayerNormalizationBN及LN本质上是解决传播过程中的梯度问题。用LSTM或GRU来代替RNN。加入ResNet网络。使用梯度裁剪(Gradient Clipping)。
方法:中心扩展法。遍历每一个字符串,分两种情况进行中心扩展,一种为奇数,一种为偶数,如果两边字母相同,就继续扩展;如果不相同就停止扩展,对所有满足要求的长度求出最大值,得到最终答案。
class Solution:
def expandAroundCenter(self,s,left,right):
while left >=0 and right len(s)and s[left]=s[right]:
left -= 1
right += 1
return left +1,right-1
def longestPalindrome(self,s:str)->str:
start,end 0,0
for i in range(len(s)):
left1,right1 self.expandAroundCenter(s,i,i)
left2,right2 self.expandAroundCenter(s,i,i+1)
if right1 - left1 > end - start:
start,end = left1,right1
if right2-left2 > end-start:
start,end = left2,right2
return s[start:end +1]
BN层的参数是C*2(C为通道数),BN的本质是利用优化改变方差大小和均值的位置,在CNN中,因为网络的特征是对应到一张特征图上的,所以BN是以特征图为单位而不是按照各个维度。
常见的优化器:SGD、BGD、MBGD、Momentum、NAG、Adagrad、Adadelta,RMSprop、Adam、AdamW优化器等。SGD是随机梯度下降法,是最基本的优化器。Adam是一种自适应学习率的方法。以SGD作为最初的算法,Momentum在其基础上加入了一阶动量(历史梯度的累计),AdaGrad和RMSProp在其基础上加入了二阶动量(历史梯度的平方累计),Adam就是结合了SGD的一阶动量和RMSProp的二阶动量算法。
BasicBlock架构主要使用了两个33的卷积;BottleneckBlock架构主要使用了三个卷积层,卷积核大小分别是11,33,11,两头小中间大,因此取名瓶颈块。
class Solution:
def mySqrt(self,x:int)->int:
left,right = 0,x
while left <= right:
mid = left +(right-left)//2
if mid * mid <=x and (mid +1)*(mid +1)>x:
return mid
elif mid * mid> x and (mid 1)*(mid +1)>x:
right = mid -1
else:
left = mid 1