神经网络疑问与解释

学习神经网络的时候遇到的问题

随机数种子

https://blog.csdn.net/lly_zy/article/details/93301908

np.random.seed(123)
nd4 = np.random.randn(2,3)
print(nd4)
每次根据同一个种子出来的数据都是一样的

神经网络

激活函数

ReLu激活函数:其实就是进行把负数变成0的操作,ReLu函数本质上就是max(0, x)。
Sigmoid激活函数:
Softmax激活函数:

池化函数

https://blog.csdn.net/u011630575/article/details/78064402
在神经网络中,池化函数(Pooling Function)一般在卷积函数的下一层。在经过卷积层提取特征之后,得到的特征图代表了 比 像素 更高级的特征,已经可以交给 分类器 进行训练分类了。但是我们 每一组卷积核 都生成 一副与原图像素相同大小的 卷积图,节点数一点没少。如果使用了 多个卷积核 还会使得通道数比之前多的多!我靠,这维度不一下子上去了嘛。所以卷积之后我们需要进行池化,也就是进行降维。
池化操作是利用一个矩阵窗口在张量上进行扫描,将每个矩阵中的通过取最大值或者平均值等来减少元素的个数(备注:最大值和平均值的方法可以使得特征提取拥有“平移不变性”,也就说图像有了几个像素的位移情况下,依然可以获得稳定的特征组合,平移不变形对于识别十分重要)。

也可以通过LSTM层进行池化

将图片数据向量化

# 导入数据,“_orig”代表这里是原始数据,我们还要进一步处理才能使用:
train_set_x_orig, train_set_y, test_set_x_orig, test_set_y, classes = load_dataset()
#由数据集获取一些基本参数,如训练样本数m,图片大小:
m_train = train_set_x_orig.shape[0]  #训练集大小209
m_test = test_set_x_orig.shape[0]    #测试集大小209
num_px = train_set_x_orig.shape[1]  #图片宽度64,大小是64×64
#将图片数据向量化(扁平化):
train_set_x_flatten = train_set_x_orig.reshape(train_set_x_orig.shape[0],-1).T
test_set_x_flatten = test_set_x_orig.reshape(test_set_x_orig.shape[0],-1).T
#对数据进行标准化:
#标准化的解答在https://www.jianshu.com/p/eb5f63eaae2b
train_set_x = train_set_x_flatten/255.
test_set_x = test_set_x_flatten/255.

解答:
当我们要把一个向量X(m,a,b,c)这个四维向量扁平化成X_flatten(m,a* b* c)的二维向量,可以写X_flatten=X.reshape(X.shape[0],-1)即可,其中“-1”代表把剩余维度压扁的模式。而代码中还有一个.T,代表转置,因为我们希望把训练样本压缩成(64* 64 *3,m)的形式。

shape的参数意义

shape=(3,3,3,4),这个4是指有4个filters;
解答:
第一维代表m,即样本数量,第二维第三维分别是图片的长和宽,第四维代表图片的RGB三个通道。
卷积层块的输出形状为(批量大小, 通道, 高, 宽):这个不是输入数据shape的

为什么两个卷积层的参数尺寸一定要类似

第一个卷积层输出通道数为6,第二个卷积层输出通道数则增加到16。这是因为第二个卷积层比第一个卷积层的输入的高和宽要小,所以增加输出通道使两个卷积层的参数尺寸类似。
来自https://www.sohu.com/a/402238982_100008678
解答:
难道是在扁平化的时候参数尺寸类似?

全连接层

当卷积层块的输出传入全连接层块时,全连接层块会将小批量中每个样本变平(flatten)。也就是说,全连接层的输入形状将变成二维,其中第一维是小批量中的样本,第二维是每个样本变平后的向量表示,且向量长度为通道、高和宽的乘积。
全连接层块含3个全连接层。它们的输出个数分别是120、84和10,其中10为输出的类别个数。??

在卷积层块中输入的高和宽在逐层减小。卷积层由于使用高和宽均为5的卷积核,从而将高和宽分别减小4,而池化层则将高和宽减半,但通道数则从1增加到16。全连接层则逐层减少输出个数,直到变成图像的类别数10。

解答:
需要通道数为10,难道是根据卷积核的通道数控制输出通道数

在卷积层块中,每个卷积层都使用5×5 5\times 55×5的窗口,并在输出上使用sigmoid激活函数。第一个卷积层输出通道数为6,第二个卷积层输出通道数则增加到16。这是因为第二个卷积层比第一个卷积层的输入的高和宽要小,所以增加输出通道使两个卷积层的参数尺寸类似。

经过maxpooling之后,输入图片的高宽就缩小了,所以就通过增加通道数把它给拉直了,保留更多特征

theta是什么?

在这里插入图片描述

σ是激活函数,i是第i个训练样本,z是,y帽是预测结果通过激活函数得到的最大不超过1
在这里插入图片描述

z(i) = wT~x(i) + b
在这里插入图片描述
在这里插入图片描述

为什么会影响梯度下降呢

误差平方法很好用,但是会影响梯度下降,可能会有多个局部最优解,但是全局最优解可能会找不到。定义一个损失函数,让它尽可能的小,不需要在意log的底数是多少
在这里插入图片描述

为什么y=0的时候是负的

解答:
L函数最前面的符号是整体的负号
在这里插入图片描述
在这里插入图片描述
这个cost function成本函数是基于参数的总成本,寻找合适w和b的目的就是让J尽可能小

为什么是凸函数,这不是凹函数吗

在这里插入图片描述

解答:
国内外的凹凸函数相反?
因为是下凸?跟高数里定义不同

对全连接层的理解

达达第四课1.10
可能错误:展开的400x1垂直矩阵,就是一个权重矩阵W[3],W[3]转置后与120x1的矩阵相乘,120是这一层的神经元个数FC3,也就是权重w120个,是自己设定的,全连接层最后输出120个维度,因为有120个输出。
解答:
120x400的得到:120的列乘以400的行?
在这里插入图片描述

二、它全连接,等于3072x4704=14450688,所以要训练的参数很多,用这么多14450688的参数训练网络
它卷积层,每个过滤器都是5x5,一个过滤器有25个参数,再加上偏差参数,每个过滤器就有26个参数,所以参数共计156个,数量很少
在这里插入图片描述
在这里插入图片描述

conv1:208=(55+1)8=558+8
(+1的原因可能是每一个核有一个偏置bias,即使一样也要算上)
416=5516+16
48001=400*120+1
解答:
在这里插入图片描述
在这里插入图片描述

如果你执行神经网络的程序,用for循环来做这些看起来真的很低效。所以接下来我们要做的就是把这四个等式向量化。向量化的过程是将神经网络中的一层神经元参数纵向堆积起来,例如隐藏层中的纵向堆积起来变成一个(4, 3)的矩阵,用符号W[1]表示。另一个看待这个的方法是我们有四个逻辑回归单元,且每一个逻辑回归单元都有相对应的参数——向量w,把这四个向量堆积在一起,你会得出这4×3的矩阵。
我的理解:权重w们是权重参数,需要机器学习。x是3x1的输入xn矩阵,每一个输入的xn对于第一个神经元节点都有w权重,构成3x1的w [1] 1矩阵,w [2] 2及以下同理,将w [n] n转置后作为矩阵W[1]的行向量,此为向量化,形成W[1]矩阵,W[1]矩阵与x矩阵做点积处理,每一行w都会与每一个输入x做运算,全连接层的结果就是4x1的列矩阵。这个列矩阵需要几行就用几个神经元,最后输出的行数必须与所需要的标签数量一致。所以最上面的例子需要训练x_num*神经元_num这么多个参数,因为每一个输入x都需要有神经元_num个参数。

sigmoid和softmax函数区分

Sigmoid函数会分别处理各个原始输入值,结果是相互独立的,概率总和不一定为1,如图为0.37 + 0.77 + 0.48 + 0.91 = 2.53。如果模型的输出为非互斥,且可以同时选择多个类别,则采用Sigmoid函数。
在这里插入图片描述
在这里插入图片描述

Softmax函数的输出是相互关联的,其概率和始终为1,如图0.04 + 0.21 + 0.05 + 0.70 = 1.00。所以在softmax函数中,一个类别的概率增加,其他类别则一定减少。如果模型的输出为互斥,且只能选择一个类别,则采用Softmax函数。
在这里插入图片描述

卷积的三种模式:full, same, valid

https://www.cnblogs.com/sddai/p/10512784.html

最后输出控制数量

在这里插入图片描述

经典模型后-number的意思

number是此网络模型使用的卷积层和全连接层总数,池化层不算

达达老师推荐的经典网络论文阅读顺序

AlexNet -> VGG- > LeNet

为什么随着网络层级越深,模型效果却变差了呢?

神经网络在反向传播过程中要不断地传播梯度,而当网络层数加深时,梯度在传播过程中会逐渐消失(假如采用Sigmoid函数,对于幅度为1的信号,每向后传递一层,梯度就衰减为原来的0.25,层数越多,衰减越厉害),导致无法对前面网络层的权重进行有效的调整。

对残差网络的理解

在这里插入图片描述

除了上面提到的两层残差学习单元,还有三层的残差学习单元。
在这里插入图片描述

残差网络借鉴了高速网络(Highway Network)的跨层链接思想,但对其进行改进(残差项原本是带权值的,但ResNet用恒等映射代替之)。
假定某段神经网络的输入是x,期望输出是H(x),即H(x)是期望的复杂潜在映射,如果是要学习这样的模型,则训练难度会比较大;
回想前面的假设,如果已经学习到较饱和的准确率(或者当发现下层的误差变大时),那么接下来的学习目标就转变为恒等映射的学习,也就是使输入x近似于输出H(x),以保持在后面的层次中不会造成精度下降。
在上图的残差网络结构图中,通过“shortcut connections(捷径连接)”的方式,直接把输入x传到输出作为初始结果,输出结果为H(x)=F(x)+x,当F(x)=0时,那么H(x)=x,也就是上面所提到的恒等映射。于是,ResNet相当于将学习目标改变了,不再是学习一个完整的输出,而是目标值H(X)和x的差值,也就是所谓的残差F(x) := H(x)-x,因此,后面的训练目标就是要将残差结果逼近于0,使到随着网络加深,准确率不下降。
这种残差跳跃式的结构,打破了传统的神经网络n-1层的输出只能给n层作为输入的惯例,使某一层的输出可以直接跨过几层作为后面某一层的输入,其意义在于为叠加多层网络而使得整个学习模型的错误率不降反升的难题提供了新的方向。
至此,神经网络的层数可以超越之前的约束,达到几十层、上百层甚至千层,为高级语义特征提取和分类提供了可行性。

  • 实线的Connection部分,表示通道相同,如上图的第一个粉色矩形和第三个粉色矩形,都是3x3x64的特征图,由于通道相同,所以采用计算方式为H(x)=F(x)+x
  • 虚线的的Connection部分,表示通道不同,如上图的第一个绿色矩形和第三个绿色矩形,分别是3x3x64和3x3x128的特征图,通道不同,采用的计算方式为H(x)=F(x)+Wx,其中W是卷积操作,用来调整x维度的。

交叉熵损失函数是什么

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

为什么最大池化层会形成这么多元组

在这里插入图片描述
在这里插入图片描述

LSTM与GRU的不同

https://blog.csdn.net/lreaderl/article/details/78022724
LSTM是RNN的变体,GRU是LSTM的变体
使用LSTM的原因之一是解决RNN Deep Network的Gradient错误累积太多,以至于Gradient归零或者成为无穷大,所以无法继续进行优化的问题。GRU的构造更简单:比LSTM少一个gate,这样就少几个矩阵乘法。在训练数据很大的情况下GRU能节省很多时间。

自动编码器AE (Auto Encoder)是什么

https://www.jianshu.com/p/2384da2a3475?from=timeline
思想:
一般的MLP(多层感知机)是一个有监督学习的过程,除了给定输入数据X之外,还要给定label Y,然后把X feed 到神经网络,并最小化神经网络的输出与label Y之间的差值,通过这种方法来训练神经网络的参数。
AE的区别是这是个非监督学习的过程,也就是说不需要label Y, 自编码是这样干的,它令每个样本的标签为y=x,也就是每个样本的数据x的标签也是x。自编码就相当于自己生成标签,而且标签是样本数据本身。训练时的优化目标是让输出值跟输入值尽可能接近,最好完全一样。
我们可以这样理解:输入数据代表了一些信息,起初以一定维度的数据来表示,然后经过中间隐藏层编码后,维度被压缩(降低)了,但是最后还是还原成了一个与原始信息非常接近的数据。
举个例子,这个过程,就好像把文件先压缩,再解压缩,或者把文件加密再解密,数据的中间的形式(维度)发生了变化,但数据的信息量不变。 这就是核心思想,类似PCA。
所以根据以上思想,只要训练一个简单的,单隐藏层的神经网络,就可以用无监督的方式实现数据降维。这就是最基本的AE。
在这里插入图片描述

Stacked AutoEncoder(SAE)堆栈自编码器

https://www.jianshu.com/p/2384da2a3475?from=timeline
https://blog.csdn.net/qq_41319343/article/details/83997862
SAE是具有分层结构的神经网络,由多个AE层逐层连接组成。

“栈化”过程的基本实现思想如下:训练好上述的AE结构后,舍去解码过程,此时我们可以理解为code具有一定的降维、提取特征的能力。将此时的code作为输入,输入到新的AE结构中进行训练,如下图所示
在这里插入图片描述

在这个过程中,特别注意一下,我们把前面的整体输出(h1-h4)当成这第二层的输入了,那么构建第二个autoencoder时,添加的临时输出层就不再是原始的(x1-x6)了,而是第一部分的输出,即(h1-h4)。这一点是避免训练方式的误解的关键所在。
如此重复,使每次的“栈化”过程都能够学习到近似最优,最后得到code,可以认为,这个code更能够提取出有效的特征,因为它是多种效果的“叠加”,相应的,如果是进行分类操作,直接将code接入到分类器中,就可以得到分类结果,下图所示的是将code接入到softmax中:
在这里插入图片描述

故,上述整个过程可以如下所示(途中省略了每次训练的解码过程):
在这里插入图片描述

详例(包含两个隐含层的栈式自编码网络)及实战代码参考:
https://blog.csdn.net/QFire/article/details/90441216

Transformer

参考博客:
https://jalammar.github.io/illustrated-transformer/
https://blog.csdn.net/qq_37521610/article/details/110388126
https://blog.csdn.net/lgy54321/article/details/96756450

什么是查询向量、键向量和值向量?

计算自注意力的第一步就是从每个编码器的输入向量(每个单词的词向量)中生成三个向量。也就是说对于每个单词,我们创造一个查询向量、一个键向量和一个值向量。这三个向量是通过词嵌入与三个权重矩阵后相乘创建的。
在这里插入图片描述

计算自注意力的第二步是计算得分。假设我们在为这个例子中的第一个词“Thinking”计算自注意力向量,我们需要拿输入句子中的每个单词对“Thinking”打分。这些分数决定了在编码单词“Thinking”的过程中有多重视句子的其它部分。
这些分数是通过打分单词(所有输入句子的单词)的键向量与“Thinking”的查询向量相点积来计算的。所以如果我们是处理位置最靠前的词的自注意力的话,第一个分数是q1和k1的点积,第二个分数是q1和k2的点积。
在这里插入图片描述

第三步和第四步是将分数除以8(8是论文中使用的键向量的维数64的平方根,这会让梯度更稳定。这里也可以使用其它值,8只是默认值),然后通过softmax传递结果。softmax的作用是使所有单词的分数归一化,得到的分数都是正值且和为1。
在这里插入图片描述

这个softmax分数决定了每个单词对编码当下位置(“Thinking”)的贡献。显然,已经在这个位置上的单词将获得最高的softmax分数,但有时关注另一个与当前单词相关的单词也会有帮助。
第五步是将每个值向量乘以softmax分数(这是为了准备之后将它们求和)。这里的直觉是希望关注语义上相关的单词,并弱化不相关的单词(例如,让它们乘以0.001这样的小数)。

第六步是对加权值向量求和(译注:自注意力的另一种解释就是在编码某个单词时,就是将所有单词的表示(值向量)进行加权求和,而权重是通过该词的表示(键向量)与被编码词表示(查询向量)的点积并通过softmax得到。),然后即得到自注意力层在该位置的输出(在我们的例子中是对于第一个单词)。
在这里插入图片描述

这样自注意力的计算就完成了。得到的向量就可以传给前馈神经网络。然而实际中,这些计算是以矩阵形式完成的,以便算得更快。

“多头”注意力(“multi-headed” attention)

对于“多头”注意机制,我们有多个查询/键/值权重矩阵集(Transformer使用八个注意力头,因此我们对于每个编码器/解码器有八个矩阵集合)。这些集合中的每一个都是随机初始化的,在训练之后,每个集合都被用来将输入词嵌入(或来自较低编码器/解码器的向量)投影到不同的表示子空间中。
在这里插入图片描述

在“多头”注意机制下,我们为每个头保持独立的查询/键/值权重矩阵,从而产生不同的查询/键/值矩阵。和之前一样,我们拿X乘以WQ/WK/WV矩阵来产生查询/键/值矩阵。

如果我们做与上述相同的自注意力计算,只需八次不同的权重矩阵运算,我们就会得到八个不同的Z矩阵。
在这里插入图片描述

这给我们带来了一点挑战。前馈层不需要8个矩阵,它只需要一个矩阵(由每一个单词的表示向量组成)。所以我们需要一种方法把这八个矩阵压缩成一个矩阵。那该怎么做?其实可以直接把这些矩阵拼接在一起,然后用一个附加的权重矩阵WO与它们相乘。
在这里插入图片描述

这几乎就是多头自注意力的全部。这确实有好多矩阵,我们试着把它们集中在一个图片中,这样可以一眼看清。

既然我们已经摸到了注意力机制的这么多“头”,那么让我们重温之前的例子,看看我们在例句中编码“it”一词时,不同的注意力“头”集中在哪里:

当我们编码“it”一词时,一个注意力头集中在“animal”上,而另一个则集中在“tired”上,从某种意义上说,模型对“it”一词的表达在某种程度上是“animal”和“tired”的代表。

然而,如果我们把所有的attention都加到图示里,事情就更难解释了:
在这里插入图片描述

位置编码或位置嵌入

Transformer为每个输入的词嵌入添加了一个向量。这些向量遵循模型学习到的特定模式,这有助于确定每个单词的位置,或序列中不同单词之间的距离。这里的直觉是,将位置向量添加到词嵌入中使得它们在接下来的运算中,能够更好地表达的词与词之间的距离。
在这里插入图片描述

为了让模型理解单词的顺序,我们添加了位置编码向量,这些向量的值遵循特定的模式。

如果我们假设词嵌入的维数为4,则实际的位置编码如下:
在这里插入图片描述

用于生成位置编码的代码get_timing_signal_1d()。

残差模块

编码器、解码器:
在这里插入图片描述

2 层编码-解码结构的transformer:
在这里插入图片描述

注意力矩阵是什么

在这里插入图片描述

矩阵第一行加黑的部分,就是某个句子中的第一个词,与句子中其他的词的相似程度,也就是相关性,这个是用
V这个矩阵每一行指的是当前这个字的数学表达,用注意力矩阵给它加权,就是要这一句所有字的信息融入当前这个字里。

LayerNorm

在这里插入图片描述

这几个公式,记住,这几个公式是求均值,方差,标准差的,为了得到归一化的数值,归一化之后的数值更加稳定,对结果更好。(归一化就是所有可能的概率加起来等于1)
α和β是可训练的参数,用来弥补归一化的过程中损失掉的信息,α一般初始化为全1,β一般初始化为全0,他俩的维度和x的维度是一样的,注意那个符号不是点积,是元素相乘。
这样所有操作都完成之后,就可以形成每个元素的独立同分布,加速收敛。

解码器

编码器通过处理输入序列开启工作。顶端编码器的输出之后会变转化为一个包含向量K(键向量)和V(值向量)的注意力向量集 。这些向量将被每个解码器用于自身的“编码-解码注意力层”,而这些层可以帮助解码器关注输入序列哪些位置合适。
在完成编码阶段后,则开始解码阶段。解码阶段的每个步骤都会输出一个输出序列(在这个例子里,是英语翻译的句子)的元素
接下来的步骤重复了这个过程,直到到达一个特殊的终止符号,它表示transformer的解码器已经完成了它的输出。每个步骤的输出在下一个时间步被提供给底端解码器,并且就像编码器之前做的那样,这些解码器会输出它们的解码结果 。另外,就像我们对编码器的输入所做的那样,我们会嵌入并添加位置编码给那些解码器,来表示每个单词的位置。
而那些解码器中的自注意力层表现的模式与编码器不同:在解码器中,自注意力层只被允许处理输出序列中更靠前的那些位置。在softmax步骤前,它会把后面的位置给隐去(把它们设为-inf)。
这个“编码-解码注意力层”工作方式基本就像多头自注意力层一样,只不过它是通过在它下面的层来创造查询矩阵,并且从编码器的输出中取得键/值矩阵。
在这里插入图片描述
在这里插入图片描述

Seq2Seq 模型/ Encoder-Decoder 模型

https://www.jianshu.com/p/80436483b13b
Seq2Seq 是一种重要的 RNN 模型,也称为 Encoder-Decoder 模型,可以理解为一种 N×M 的模型。模型包含两个部分:Encoder 用于编码序列的信息,将任意长度的序列信息编码到一个向量 c 里。而 Decoder 是解码器,解码器得到上下文信息向量 c 之后可以将信息解码,并输出为序列。

Seq2seq结构

Seq2Seq 模型结构有很多种,下面是几种比较常见的:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Attention注意力机制

在 Seq2Seq 模型,Encoder 总是将源句子的所有信息编码到一个固定长度的上下文向量 c 中,然后在 Decoder 解码的过程中向量 c 都是不变的。这存在着不少缺陷:

对于比较长的句子,很难用一个定长的向量 c 完全表示其意义。
RNN 存在长序列梯度消失的问题,只使用最后一个神经元得到的向量 c 效果不理想。
与人类的注意力方式不同,即人类在阅读文章的时候,会把注意力放在当前的句子上。
Attention 即注意力机制,是一种将模型的注意力放在当前翻译单词上的一种机制。例如翻译 “I have a cat”,翻译到 “我” 时,要将注意力放在源句子的 “I” 上,翻译到 “猫” 时要将注意力放在源句子的 “cat” 上。

使用了 Attention 后,Decoder 的输入就不是固定的上下文向量 c 了,而是会根据当前翻译的信息,计算当前的 c。
在这里插入图片描述

Attention 需要保留 Encoder 每一个神经元的隐藏层向量 h,然后 Decoder 的第 t 个神经元要根据上一个神经元的隐藏层向量 h’t-1 计算出当前状态与 Encoder 每一个神经元的相关性 et。et 是一个 N 维的向量 (Encoder 神经元个数为 N),若 et 的第 i 维越大,则说明当前节点与 Encoder 第 i 个神经元的相关性越大。

为什么要进行预训练

预训练通过自监督学习从大规模数据中获得与具体任务无关的预训练模型。体现某一个词在一个特定上下文中的语义表征。第二个步骤是微调,针对具体的任务修正网络。训练数据可以是文本、文本-图像对、文本-视频对。预训练模型的训练方法可使用自监督学习技术(如自回归的语言模型和自编码技术)。可训练单语言、多语言和多模态的模型。此类模型可经过微调之后,用于支持分类、序列标记、结构预测和序列生成等各项技术,并构建文摘、机器翻译、图片检索、视频注释等应用。

为什么我们要做预训练模型?首先,预训练模型是一种迁移学习的应用,利用几乎无限的文本,学习输入句子的每一个成员的上下文相关的表示,它隐式地学习到了通用的语法语义知识。第二,它可以将从开放领域学到的知识迁移到下游任务,以改善低资源任务,对低资源语言处理也非常有利。第三,预训练模型在几乎所有 NLP 任务中都取得了目前最佳的成果。最后,这个预训练模型+微调机制具备很好的可扩展性,在支持一个新任务时,只需要利用该任务的标注数据进行微调即可,一般工程师就可以实现。

预训练模型的三个关键技术

Transformer

给定一句话或是一个段落作为输入,首先将输入序列中各个词转换为其对应的词向量,同时加上每一个词的位置向量,体现词在序列的位置。然后将这些词向量输入到多层 Transformer 网络中,通过自注意力(self-attention)机制来学习词与词之间的关系,编码其上下文信息,再通过一个前馈网络经过非线性变化,输出综合了上下文特征的各个词的向量表示。每一层 Transformer 网络主要由 Multi-head self-attention 层(多头自注意力机制)和前馈网络层两个子层构成。Multi-head self-attention 会并行地执行多个不同参数的 self-attention,并将各个 self-attention 的结果拼接作为后续网络的输入,self-attention 机制会在后面中做详细介绍。此后,我们得到了蕴含当前上下文信息的各个词的表示,然后网络会将其输入到前馈网络层以计算非线性层次的特征。

自监督学习

在预训练的模型中,AR(自回归)LM 和 AE(自动编码器)是最常用的自监督学习方法,其中,自回归 LM 旨在利用前面的词序列预测下个词的出现概率(语言模型)。自动编码器旨在对损坏的输入句子,比如遮掩了句子某个词、或者打乱了词序等,重建原始数据。通过这些自监督学习手段来学习单词的上下文相关表示。

微调

在做具体任务时,微调旨在利用其标注样本对预训练网络的参数进行调整。以我们使用基于 BERT(一种流行的预训练模型)为例来判断两个句子是否语义相同。输入是两个句子,经过 BERT 得到每个句子的对应编码表示,我们可以简单地用预训练模型的第一个隐节点预测分类标记判断两个句子是同义句子的概率,同时需要额外加一个线性层和 softmax 计算得到分类标签的分布。预测损失可以反传给 BERT 再对网络进行微调。当然也可以针对具体任务设计一个新网络,把预训练的结果作为其输入。

nlp中的预训练语言模型总结(单向模型、BERT系列模型、XLNet)

https://zhuanlan.zhihu.com/p/76912493

K 层交叉验证K-fold cross-validation

  1. 把整个数据集随机分成 K“层”
  2. 用其中 K-1 层训练模型,然后用第K层验证。
  3. 记录从每个预测结果获得的误差。
  4. 重复这个过程,直到每“层”数据都作过验证集。
  5. 记录下的 k 个误差的平均值,被称为交叉验证误差(cross-validation error)。可以被用做衡量模型表现的标准。

如何确定合适的k值?

K 值越小,偏误越大,所以越不推荐。另一方面,K 值太大,所得结果会变化多端。K 值小,则会变得像“验证集法”;K 值大,则会变得像“留一法”(LOOCV)。所以通常建议的值是 k=10 。

如何衡量模型的偏误/变化程度?

K 层交叉检验之后,我们得到 K 个不同的模型误差估算值(e1, e2 ……ek)。理想的情况是,这些误差值相加得 0 。要计算模型的偏误,我们把所有这些误差值相加。平均值越低,模型越优秀。
模型表现变化程度的计算与之类似。取所有误差值的标准差,标准差越小说明模型随训练数据的变化越小。

贝叶斯网络

把某个研究系统中涉及的随机变量,根据是否条件独立绘制在一个有向无环图中,就形成了贝叶斯网络。
https://blog.csdn.net/weixin_38438451/article/details/82849802
贝叶斯网络(Bayesian network),又称信念网络(Belief Network),或有向无环图模型(directed acyclic graphical model),是一种概率图模型,于1985年由Judea Pearl首先提出。它是一种模拟人类推理过程中因果关系的不确定性处理模型,其网络拓朴结构是一个有向无环图(DAG)。其中每个节点代表一个随机变量,而弧则表示两个随机变量之间的联系,表示指向结点影响被指向结点。不过仅有这个图的话,只能定性给出随机变量间的关系,如果要定量,还需要一些数据,这些数据就是每个节点对其直接前驱节点的条件概率,而没有前驱节点的节点则使用先验概率表示。
在这里插入图片描述

贝叶斯网络的有向无环图中的节点表示随机变量{X1,X2,…,Xn},它们可以是可观察到的变量,或隐变量、未知参数等。认为有因果关系(或非条件独立)的变量或命题则用箭头来连接。若两个节点间以一个单箭头连接在一起,表示其中一个节点是“因(parents)”,另一个是“果(children)”,两节点就会产生一个条件概率值。例如,假设节点E直接影响到节点H,即E→H,则用从E指向H的箭头建立结点E到结点H的有向弧(E,H),权值(即连接强度)用条件概率P(H|E)来表示,如下图所示:
在这里插入图片描述

简言之,把某个研究系统中涉及的随机变量,根据是否条件独立绘制在一个有向图中,就形成了贝叶斯网络。其主要用来描述随机变量之间的条件依赖,用圈表示随机变量(random variables),用箭头表示条件依赖(conditional dependencies)。此外,对于任意的随机变量,其联合概率可由各自的局部条件概率分布相乘而得出:
在这里插入图片描述

结构形式

  1. head-to-head
    在这里插入图片描述

依上图,所以有:P(a,b,c) = P(a)P(b)P(c|a,b)成立,即在c未知的条件下,a、b被阻断(blocked),是独立的,称之为head-to-head条件独立。
2.tail-to-tail
在这里插入图片描述

考虑c未知和 c已知这两种情况:
 在c未知的时候,有:P(a,b,c)=P©P(a|c)P(b|c),此时,没法得出P(a,b) = P(a)P(b),即c未知时,a、b不独立。
 在c已知的时候,有:P(a,b|c)=P(a,b,c)/P©,然后将P(a,b,c)=P©P(a|c)P(b|c)带入式子中,得到:P(a,b|c)=P(a,b,c)/P© = P©P(a|c)P(b|c) / P© = P(a|c)*P(b|c),即c已知时,a、b独立。
3.head-to-tail
在这里插入图片描述

在xi给定的条件下,xi+1的分布和x1,x2…xi-1条件独立。意味着啥呢?意味着:xi+1的分布状态只和xi有关,和其他变量条件独立。通俗点说,当前状态只跟上一状态有关,跟上上或上上之前的状态无关。这种顺次演变的随机过程,就叫做马尔科夫链(Markov chain)。

马尔可夫链

在这里插入图片描述

这些被Rule连接起来的states仿佛一个chain,就是Markov Chain。
马尔可夫链的关键是,我在第n+1刻的状态只跟第n刻的状态有关,与第n-1,n-2,n-3,…等时刻的状态是没有任何关系的。在随机游走的例子里面,我下一刻走到什么地方只跟这一刻有关,跟你是怎么来到这里的是没有关系的。

朴素贝叶斯

朴素贝叶斯可以看做是贝叶斯网络的特殊情况:即该网络中无边,各个节点都是独立的。
朴素贝叶斯(Naive Bayesian)是经典的机器学习算法之一,也是为数不多的基于概率论的分类算法。朴素贝叶斯原理简单,也很容易实现,多用于文本分类,比如垃圾邮件过滤。
朴素贝叶斯朴素在哪里呢? —— 两个假设:

  • 一个特征出现的概率与其他特征(条件)独立;
  • 每个特征同等重要。

贝叶斯公式如下:
在这里插入图片描述

全概率公式&贝叶斯公式

https://zhuanlan.zhihu.com/p/38567891
在这里插入图片描述

先验概率、似然估计和边际似然估计?

https://blog.csdn.net/m0_38052384/article/details/93368629
先验概率是指根据以往经验和分析得到的概率,如全概率公式,它往往作为"由因求果"问题中的"因"出现.
先验概率:就是因变量(二分法)在数据集中的比例。这是在你没有任何进一步的信息的时候,是对分类能做出的最接近的猜测。
后验概率是指依据得到"结果"信息所计算出的最有可能是那种事件发生,如贝叶斯公式中的,是"执果寻因"问题中的"因".
在这里插入图片描述

似然估计:似然估计是在其他一些变量的给定的情况下,一个观测值被分类为1的概率。例如,“FREE”这个词在以前的垃圾邮件使用的概率就是似然估计。
边际似然估计:边际似然估计就是,“FREE”这个词在任何消息中使用的概率。

在这里插入图片描述

XGBoost

算法思想:

  1. 不断地添加树,不断地进行特征分裂来生长一棵树,每次添加一个树,其实是学习一个新函数f(x),去拟合上次预测的残差。
  2. 当我们训练完成得到k棵树,我们要预测一个样本的分数,其实就是根据这个样本的特征,在每棵树中会落到对应的一个叶子节点,每个叶子节点就对应一个分数
  3. 最后只需要将每棵树对应的分数加起来就是该样本的预测值。
    显然,我们的目标是要使得树群的预测值yi’尽量接近真实值yi,而且有尽量大的泛化能力。类似之前GBDT的套路,XGBoost也是需要将多棵树的得分累加得到最终的预测得分(每一次迭代,都在现有树的基础上,增加一棵树去拟合前面树的预测结果与真实值之间的残差)。

闭式解

闭式解closed form solution)也叫解析解(analytical solution),就是一些严格的公式,给出任意的自变量就可以求出其因变量,也就是问题的解, 他人可以利用这些公式计算各自的问题。所谓的解析解是一种包含分式、三角函数、指数、对数甚至无限级数等基本函数的解的形式。 用来求得解析解的方法称为解析法〈analytic techniques〉,解析法即是常见的微积分技巧,例如分离变量法等。 解析解为一封闭形式〈closed-form〉的函数,因此对任一独立变量,我们皆可将其带入解析函数求得正确的相应变量。

统计学中的“边界”(marginal)

比如说你有很多变量,ABC,我们就以两个A,B为例。A是头疼的概率,B是感冒的概率。那么我们所说的P(A=1,B=1)就是A,B这两个随机变量都发生的联合概率,也就是又头疼又感冒。那么marginal的意思就是,我不管A和B之间是否有相关性,也不管他们是不是同时发现,我就是要知道P(A),也就是我是不是头疼了。
它和条件概率的意思是相反的:条件概率是说,given我感冒了,我头疼的概率是什么;marginal是说,我不管我感冒不感冒,我其他什么因素都不考虑,我头疼的概率是多少。
机器学习中比如在collaborate filtering中,对于没有的数据,就可以把他们marginalize,其实就是不考虑了。在公式中,比如有也是AB两个随机变量,我们对AB的joint PDF积分,就得到了joint CDF;那我们只对B积分,就得到A的marginal PDF。
至于为什么叫marginal,我也想了很久,给自己乱解释一下,什么维度降低,什么看问题的角度边缘,什么信息把压缩在边缘了。最后wiki告诉我,“These concepts are “marginal” because they can be found by summing values in a table along rows or columns, and writing the sum in the margins of the table.→“marginal”的概念是因为它们可以通过对表中的行或列求和,并将求和写在表的边距中找到。”,我看到这个解释呆了。

Word2Vec的PyTorch实现(乞丐版)

https://www.jianshu.com/p/abf5b507c895

序列标注中的BIO标注

https://www.pianshen.com/article/9276984298/
BIO标注:将每个元素标注为“B-X”、“I-X”或者“O”。其中,“B-X”表示此元素所在的片段属于X类型并且此元素在此片段的开头,“I-X”表示此元素所在的片段属于X类型并且此元素在此片段的中间位置,“O”表示不属于任何类型。
在这里插入图片描述

BiLSTM模型中CRF层的运行原理

https://www.jianshu.com/p/97cb3b6db573
在这里插入图片描述
在这里插入图片描述
CRF层能从训练数据中获得约束性的规则
CRF层可以为最后预测的标签添加一些约束来保证预测的标签是合法的。在训练数据训练过程中,这些约束可以通过CRF层自动学习到。
这些约束可以是:
I:句子中第一个词总是以标签“B-“ 或 “O”开始,而不是“I-”
II:标签“B-label1 I-label2 I-label3 I-…”,label1, label2, label3应该属于同一类实体。例如,“B-Person I-Person” 是合法的序列, 但是“B-Person I-Organization” 是非法标签序列.
III:标签序列“O I-label” is 非法的.实体标签的首个标签应该是 “B-“ ,而非 “I-“, 换句话说,有效的标签序列应该是“O B-label”。
有了这些约束,标签序列预测中非法序列出现的概率将会大大降低。

支持向量机SVM

https://www.zhihu.com/question/21094489
在这里插入图片描述

SVM:
在这里插入图片描述

Conv1D和Conv2D的区别

https://zhuanlan.zhihu.com/p/84888798

https://zhuanlan.zhihu.com/p/156825903

在这里插入图片描述
在这里插入图片描述
输入数据的形状对比
Conv1D (batch, steps, channels),steps表示1篇文本中含有的单词数量,channels表示1个单词的维度。
Conv2D (batch, rows, cols, channels),rows表示1篇文本中含有的单词数量,cols表示1个单词的维度,channels为1表示只有1个颜色通道,原因是对于文本来说只有1个颜色通道。

卷积核的对比
Conv1D kernel_size=2,虽然是2个单词的宽度,但在运算时是用(2,8)的卷积核的。
Conv2D kernel_size=(2, 8),(2, 8)的卷积核。

输出数据的形状对比
Conv1D (batch, new_steps, filters), 1个卷积核对文本卷积后输出列向量的行数(当然由于卷积核只可以向下移动,因此得到的是1个列向量),有多少个卷积核filters就有多少个列向量。
Conv2D (batch, new_rows, new_cols, filters), new_rows, new_cols表示1个卷积核对文本卷积后输出矩阵的行数和列数(当然由于卷积核可以向右和向下移动,因此得到的是1个矩阵),有多少个卷积核filters就有多少个矩阵。

为什么使用小的卷积核?

当使用小的卷积核,可以保持较小的参数量,从而使用更深的网络和更多的卷积核。例如3个33的卷积核效果好于1个77卷积核。

结尾

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值