相见恨晚的网站:

https://noobdream.com/Practice/index/

https://www.zhihu.com/column/c_1425969515960590336

16878314229984fdbbf9b628be9a45fe096fba16e261.jpg

AIlab面试题目准备

如何防止过拟合

为了得到一致假设而使假设变得过度复杂称为过拟合(overfitting),过拟合表现在训练好的模型在训练集上效果很好,但是在测试集上效果差

模型的泛化能力弱

解决方法:

  1. 数据集扩增(Data Augmentation)
    1. 在物体分类(object recognition)问题中,数据扩增已经成为一项特殊的有效的技术。物体在图像中的位置、姿态、尺度,整体图片敏感度等都不会影响分类结果,所以我们就可以通过图像平移、翻转、缩放、切割等手段将数据库成倍扩充。
    2. 语音识别(speech recognition)中,加入噪音也被看做是一种数据扩增方式。
  2. 改进模型
    1. 过拟合主要有两个原因造成的,数据太少和模型太复杂
    2. Early Stopping的做法就是运行优化方法直到若干次在验证集上的验证误差没有提升时候停止。
    3. 正则化(regularization)
      1. 损失函数分为经验风险损失函数和结构风险损失函数,结构风险损失函数就是经验损失函数+表示模型复杂度的正则化
    4. Dropout
      1. Dropout方法通过修改隐藏层神经元的个数来防止网络的过拟合,也就是通过修改深度网络本身。
      2. Dropout按照给定的概率P随机剔除一些神经元,只有没有被剔除也就是被保留下来的神经元的参数被更新。
      3. 每一批次数据,由于随机性剔除神经元,使得网络具有一定的稀疏性,从而能减轻了不同特征之间的协同效应。而且由于每次被剔除的神经元不同,所以整个网络神经元的参数也只是部分被更新,消除减弱了神经元间的联合适应性,增强了神经网络的泛化能力和鲁棒性。Dropout只在训练时使用,作为一个超参数,然而在测试集时,并不能使用。
    5. 深度学习中两种多任务学习模式:隐层参数的硬共享和软共享
      1. 硬共享机制是指在所有任务中共享隐藏层,同时保留几个特定任务的输出层来实现。硬共享机制降低了过拟合的风险。多个任务同时学习,模型就越能捕捉到多个任务的同一表示,从而导致模型在原始任务上的过拟合风险越小。
      2. 软共享机制是指每个任务有自己的模型,自己的参数。模型参数之间的距离是正则化的,以便保障参数相似性。

GAN的思想

对抗样本

对抗样本(adversarial example),它是指经过精心计算得到的用于误导分类器的样本。例如下图就是一个例子,左边是一个熊猫,但是添加了少量随机噪声变成右图后,分类器给出的预测类别却是长臂猿,但视觉上左右两幅图片并没有太大改变。

16878325449991687832544397.png

图像分类器本质上是高维空间的一个复杂的决策边界

训练完成后,分类器是无法泛化到所有数据上,除非我们的训练集包含了分类类别的所有数据,但实际上我们做不到。而做不到泛化到所有数据的分类器,其实就会过拟合训练集的数据,这也就是我们可以利用的一点。

在 L2 范数看来,对于熊猫和长臂猿的决策边界并没有那么远,添加了非常微弱的随机噪声的图片可能就远离了熊猫的决策边界内,到达长臂猿的预测范围内,因此欺骗了分类器。

GAN 的基本思想就是一个最小最大定理,当两个玩家(D 和 G)彼此竞争时(零和博弈),双方都假设对方采取最优的步骤而自己也以最优的策略应对(最小最大策略),那么结果就已经预先确定了,玩家无法改变它(纳什均衡)。

Batch normalization介绍一下? 它在训练和测试是有什么区别?

Conv=>BN=>ReLU=>dropout=>Conv

BN本质上是解决传播过程中的梯度消失问题

16878329940001687832993487.png

  • 这个可学习重构参数 γ、β,让我们的网络可以学习恢复出原始网络所要学习的特征分布。(因为如果没有 γ、β ,那相当于我这一层网络所学习到的特征分布被你搞坏了)
  • 这个 scale 和 shift ,它们的主要作用就是找到一个线性和非线性的平衡点,既能享受非线性较强的表达能力,有可以避免非线性饱和导致网络收敛变慢问题

BN层是对于每个神经元做归一化处理,甚至只需要对某一个神经元进行归一化,而不是对一整层网络的神经元进行归一化。既然BN是对单个神经元的运算,那么在CNN中卷积层上要怎么搞?假如某一层卷积层有6个特征图,每个特征图的大小是100100,这样就相当于这一层网络有6100100个神经元,如果采用BN,就会有6100*100个参数γ、β,这样岂不是太恐怖了。因此卷积层上的BN使用,其实也是使用了类似权值共享的策略,把一整张特征图当做一个神经元进行处理。

卷积神经网络经过卷积后得到的是一系列的特征图,如果min-batch sizes为m,那么网络某一层输入数据可以表示为四维矩阵 (m,f,w,h),m为min-batch sizes,f为特征图个数,w、h分别为特征图的宽高。在CNN中我们可以把每个特征图看成是一个特征处理(一个神经元),因此在使用Batch Normalization,mini-batch size 的大小就是:m ∗ w ∗ h m * w * hm∗w∗h,于是对于每个特征图都只有一对可学习参数:γ、β。说白了吧,这就是相当于求取所有样本所对应的一个特征图的所有神经元的平均值、方差,然后对这个特征图神经元做归一化。

在使用BN前,减小学习率、小心的权重初始化的目的是:使其输出的数据分布不要发生太大的变化。

因为偏置参数 b 经过 BN 层后其实是没有用的,最后也会被均值归一化,当然BN层后面还有个 β 参数作为偏置项,所以 b 这个参数就可以不用了。

Vision Transformer?

对任意输入尺寸图片,怎么样将其转换为 token序列

当输入图片尺寸发生变化时,由于每个 patch 的尺寸固定,图片切分出的 patch 数就会发生变化。表现在上述特征图中,就是特征图的尺寸发生了变化。这样一来,我们原本位置编码图的尺寸就和图像特征图的尺寸对不上了,无法进行后续的计算。

找到了问题所在,解决的方法也就顺理成章了。位置编码代表的是 patch 所在位置的附加信息,那么如果和图像特征图的尺寸不匹配,只需要使用双三次插值法(Bicubic)对位置编码图进行插值缩放,缩放到与图像特征图一致的尺寸,就同样可以表现每个 patch 在图片中的位置信息。

目标检测中输入检测器之前要做什么操作? Attention的作用是什么

在目标检测中,输入检测器之前通常需要进行一系列的预处理操作。以下是常见的预处理步骤:

  1. 图像加载:将待检测的图像加载到内存中,以便进行后续处理。
  2. 图像归一化:对图像进行归一化操作,使其具有统一的尺度和范围。常见的方法是将像素值缩放到0到1之间或者使用标准化方法(例如减去均值并除以标准差)。
  3. 图像调整:对图像进行调整以适应检测器的输入要求。这可能包括调整图像的大小、剪裁或填充图像等操作。
  4. 数据增强:为了增加数据的多样性和模型的鲁棒性,可以应用一些数据增强技术,如随机旋转、翻转、缩放或裁剪等。

以上这些预处理步骤的目的是为了将输入图像转换为检测器所需的形式,以提高检测器的性能和准确性。

关于Attention的作用,它是一种机制,用于在深度学习模型中引入对不同部分的关注或重要性加权。在目标检测中,Attention机制可以用于引导模型更加关注与目标相关的区域或特征,从而提高检测的准确性和鲁棒性。

在目标检测任务中,Attention机制可以应用于多个方面,例如:

  1. 区域选择:通过对感兴趣区域(Region of Interest)进行Attention加权,使模型能够更关注与目标相关的区域,减少对背景区域的关注。
  2. 特征融合:在多个特征图之间应用Attention机制,以更好地结合不同尺度和层次的特征信息,从而提高模型的表达能力。
  3. 尺度适应:对于多尺度目标检测,可以使用Attention机制来调整模型对不同尺度目标的关注程度,使其能够适应不同大小的目标。

通过引入Attention机制,模型可以更加自适应地关注重要的目标信息,提高目标检测的性能和效果。

视觉注意力一般分为三种,即通道域、空间域和混合域(前两者都使用)。

通道域
通道域注意力的代表作是SENet,其实现思想和过程都非常简单,仅仅加入了一个即插即用的SE模块分支用于建模不同channel之间的相关性就大幅度地提升了模型性能(最后一届ImageNet图像识别的冠军,超过去年冠军25%)。

LSTM

LSTM从被设计之初就被用于解决一般递归神经网络中普遍存在的长期依赖问题,使用LSTM可以有效的传递和表达长时间序列中的信息并且不会导致长时间前的有用信息被忽略(遗忘)。与此同时,LSTM还可以解决RNN中的梯度消失/爆炸问题。

16880886061211688088605699.png

LSTM四个函数层

遗忘门

16880885581921688088558013.png

记忆门

16880887300541688088728146.png

输出门

Transformer

16878592399891687859238260.png

16878592669931687859265194.png

Multi-Head Attention 是由多个 Self-Attention 组合形成的,下图是论文中 Multi-Head Attention 的结构图。

16878593379951687859337852.png
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
def attention(query, key, value, mask=None, dropout=None): 
# query, key, value的形状类似于(30, 8, 10, 64), (30, 8, 11, 64),
#(30, 8, 11, 64),例如30是batch.size,即当前batch中有多少一个序列;
# 8=head.num,注意力头的个数;
# 10=目标序列中词的个数,64是每个词对应的向量表示;
# 11=源语言序列传过来的memory中,当前序列的词的个数,
# 64是每个词对应的向量表示。
# 类似于,这里假定query来自target language sequence;
# key和value都来自source language sequence.
"Compute 'Scaled Dot Product Attention'"
d_k = query.size(-1) # 64=d_k
scores = torch.matmul(query, key.transpose(-2, -1)) /
math.sqrt(d_k) # 先是(30,8,10,64)和(30, 8, 64, 11)相乘,
#(注意是最后两个维度相乘)得到(30,8,10,11),
#代表10个目标语言序列中每个词和11个源语言序列的分别的“亲密度”。
#然后除以sqrt(d_k)=8,防止过大的亲密度。
#这里的scores的shape是(30, 8, 10, 11)
if mask is not None:
scores = scores.masked_fill(mask == 0, -1e9)
#使用mask,对已经计算好的scores,按照mask矩阵,填-1e9,
#然后在下一步计算softmax的时候,被设置成-1e9的数对应的值~0,被忽视
p_attn = F.softmax(scores, dim = -1)
#对scores的最后一个维度执行softmax,得到的还是一个tensor,
#(30, 8, 10, 11)
if dropout is not None:
p_attn = dropout(p_attn) #执行一次dropout
return torch.matmul(p_attn, value), p_attn
#返回的第一项,是(30,8,10, 11)乘以(最后两个维度相乘)
#value=(30,8,11,64),得到的tensor是(30,8,10,64),
#和query的最初的形状一样。另外,返回p_attn,形状为(30,8,10,11).
#注意,这里返回p_attn主要是用来可视化显示多头注意力机制。



class MultiHeadedAttention(nn.Module):
def __init__(self, h, d_model, dropout=0.1):
# h=8, d_model=512
"Take in model size and number of heads."
super(MultiHeadedAttention, self).__init__()
assert d_model % h == 0 # We assume d_v always equals d_k 512%8=0
self.d_k = d_model // h # d_k=512//8=64
self.h = h #8
self.linears = clones(nn.Linear(d_model, d_model), 4)
#定义四个Linear networks, 每个的大小是(512, 512)的,
#每个Linear network里面有两类可训练参数,Weights,
#其大小为512*512,以及biases,其大小为512=d_model。

self.attn = None
self.dropout = nn.Dropout(p=dropout)
def forward(self, query, key, value, mask=None):
# 注意,输入query的形状类似于(30, 10, 512),
# key.size() ~ (30, 11, 512),
#以及value.size() ~ (30, 11, 512)

if mask is not None: # Same mask applied to all h heads.
mask = mask.unsqueeze(1) # mask下回细细分解。
nbatches = query.size(0) #e.g., nbatches=30
# 1) Do all the linear projections in batch from
#d_model => h x d_k
query, key, value = [l(x).view(nbatches, -1, self.h, self.d_k)
.transpose(1, 2) for l, x in
zip(self.linears, (query, key, value))]
# 这里是前三个Linear Networks的具体应用,
#例如query=(30,10, 512) -> Linear network -> (30, 10, 512)
#-> view -> (30,10, 8, 64) -> transpose(1,2) -> (30, 8, 10, 64)
#,其他的key和value也是类似地,
#从(30, 11, 512) -> (30, 8, 11, 64)。
# 2) Apply attention on all the projected vectors in batch.
x, self.attn = attention(query, key, value, mask=mask,
dropout=self.dropout)
#调用上面定义好的attention函数,输出的x形状为(30, 8, 10, 64);
#attn的形状为(30, 8, 10=target.seq.len, 11=src.seq.len)
# 3) "Concat" using a view and apply a final linear.
x = x.transpose(1, 2).contiguous().
view(nbatches, -1, self.h * self.d_k)
# x ~ (30, 8, 10, 64) -> transpose(1,2) ->
#(30, 10, 8, 64) -> contiguous() and view ->
#(30, 10, 8*64) = (30, 10, 512)
return self.linears[-1](x)
#执行第四个Linear network,把(30, 10, 512)经过一次linear network,
#得到(30, 10, 512).

数据结构

抽象数据类型的三个组成部分分别为:

数据对象、数据关系和基本操作

四类基本结构

1.集合

集合中的数据元素除了属于同一个类型外,没有其他关系

2.线性结构

线性结构中元素之间存在一对一关系.

3.树形结构

树形结构中元素之间存在一对多关系

4.图状结构(网状结构)

网状结构中元素之间存在多对多关系

数据的存储结构可用四种基本的存储方法表示,它们分别是顺序、链式、索引、散列。

数据结构和数据类型两个概念之间有区别吗?

答:简单地说,数据结构定义了一组按某些关系结合在一起的数组元素。数据类型不仅定义了一组带结构的数据元素,而且还在其上定义了一组操作。

简述线性结构与非线性结构的不同点。

答:线性结构反映结点间的逻辑关系是一对一的,非线性结构反映结点间的逻辑关系是多对多的。

拓扑排序 时间复杂度 :O (n+m) 因每个结点只需加入队列一次,而每个结点加入队列前需要进行入度数量次的操作,因此时间复杂度为 O (n+m)。

计算机网络

16881113940181688111392545.png

16881114690891688111468586.png

链接:https://www.nowcoder.com/questionTerminal/9c9ccfd543c74dbb9f46cb14a27dd273
来源:牛客网

物理层:实现网络互连的主要设备有中继器和HUB(集线器)。中继器的主要功能是对接收到的信号进行再生整形放大以扩大网络的传输距离;集线器在此基础上将所有的节点集中在以它为中心的节点中,可组成星型拓扑结构。

数据链路层:实现网络互联的主要设备有二层交换机和网桥。交换机是一种基于MAC识别,能完成封装转发数据包功能的网络设备。它可以“学习”MAC地址,并把其存放在内部地址表中,当一个数据帧的目的地址在MAC地址表中有映射时,它被转发到连接目的节点的端口而不是所有端口。 交换机将局域网分为多个冲突域,每个冲突域都是有独立的宽带,因此大大提高了局域网的带宽。网桥是数据链路层互联的设备,在网络互联中可起到数据接收、地址过滤与数据转发的作用,可用来实现多个不同网络系统之间的数据交换。

网络层:实现网络互连的主要设备有三层交换机和路由器。路由器用于连接多个逻辑上分开的网络,具有判断网络地址和选择IP路径的功能,它能在多网络互联环境中,建立灵活的连接,可用完全不同的数据分组和介质访问方法连接各种子网。

传输层(包括传输层)以上:实现网络互连的设备有网关。网关在网络层以上实现网络互连,用于两个高层协议不同的网络互连。与网桥只是简单地传达信息不同,网关对收到的信息要重新打包,以适应目的系统的需求。

以下属于物理层的设备是()

A. 中继器 B. 以太网交换机

C. 桥 D. 网关

ARP协议 Address Resolution Protocol 地址解析协议

在局域网中,网络中实际传输的是“帧”,帧里面是有目标主机的MAC地址的。在以太网中,一个主机要和另一个主机进行直接通信,必须

要知道目标主机的MAC地址。但这个目标MAC地址是如何获得的呢?它就是通过地址解析协议获得的。所谓“地址解析”就是主机在发送帧

之前将目标主机的IP地址转换成目标主机的MAC地址的过程。ARP协议的基本功能就是通过目标主机的IP地址,查询目标主机的MAC地址,以保证通信的顺利进行。协议又称做服务,ARP协议也即ARP服务,提供把IP地址转换成MAC地址的服务!

ARP 协议的作用是 ()

A、将端口号映射到IP 地址

B、连接IP 层和TCP 层

C、广播IP 地址

D、将IP 地址映射到第二层地址

A、将端口号映射到IP地址:这通常是通过网络地址转换(Network Address Translation,NAT)来实现的。NAT是一种在网络设备(例如路由器)上执行的技术,它允许多个主机共享单个公共IP地址。当数据包从私有网络中的主机发送到公共网络时,源IP地址和端口号会被修改为路由器的公共IP地址和一个新的端口号。这样,通过映射端口号,可以将传入的数据包正确路由到相应的主机。

B、连接IP层和TCP层:IP(Internet Protocol)层是在网络通信中负责将数据包从源主机传输到目标主机的层。而TCP(Transmission Control Protocol)层是运行在IP层之上的一种传输层协议,负责提供可靠的、面向连接的数据传输。IP层和TCP层之间的连接通常是通过套接字(socket)接口实现的。套接字提供了一组API,使应用程序能够创建TCP连接、发送数据和接收数据。

C、广播IP地址:IP地址广播是将数据包发送到网络中的所有主机的一种机制。在IPv4网络中,广播地址通常被定义为目标IP地址的网络部分全为1、主机部分全为0的地址。例如,如果一个网络的IP地址是192.168.0.0/24,那么该网络的广播地址就是192.168.0.255。发送到广播地址的数据包将被路由器转发到该网络中的所有主机。

D、将IP地址映射到第二层地址:第二层地址通常是指MAC(Media Access Control)地址,它是用于在局域网中唯一标识网络接口的地址。IP地址到MAC地址的映射是通过ARP(Address Resolution Protocol)来实现的。当主机需要发送数据包到目标IP地址时,它首先会查询本地的ARP缓存表,如果找不到对应的MAC地址,就会发送一个ARP请求广播,询问局域网上的其他主机谁拥有目标IP地址对应的MAC地址。目标主机收到ARP请求后,会回复一个包含自己MAC地址的ARP响应,从而建立起IP地址到MAC地址的映射关系。

第一层:物理层(PhysicalLayer),规定通信设备的机械的、电气的、功能的和规程的特性,用以建立、维护和拆除物理链路连接。具体地讲,机械特性规定了网络连接时所需接插件的规格尺寸、引脚数量和排列情况等;电气特性规定了在物理连接上传输bit流时线路上信号电平的大小、阻抗匹配、传输速率距离限制等;功能特性是指对各个信号先分配确切的信号含义,即定义了DTE和DCE之间各个线路的功能;规程特性定义了利用信号线进行bit流传输的一组操作规程,是指在物理连接的建立、维护、交换信息时,DTE和DCE双方在各电路上的动作系列。
在这一层,数据的单位称为比特(bit)。
属于物理层定义的典型规范代表包括:EIA/TIA RS-232、EIA/TIA RS-449、V.35、RJ-45等。
第二层:数据链路层(DataLinkLayer):在物理层提供比特流服务的基础上,建立相邻结点之间的数据链路,通过差错控制提供数据帧(Frame)在信道上无差错的传输,并进行各电路上的动作系列。在这一层,数据的单位称为(frame)。数据链路层协议的代表包括:SDLC、HDLC、PPP、STP、帧中继等。
第三层是网络层(Network layer)
在计算机网络中进行通信的两个计算机之间可能会经过很多个数据链路,也可能还要经过很多通信子网。网络层的任务就是选择合适的网间路由和交换结点,确保数据及时传送。网络层将数据链路层提供的帧组成数据包,包中封装有网络层包头,其中含有逻辑地址信息- -源站点和目的站点地址的网络地址。在这一层,数据的单位称为数据包(packet)。网络层协议的代表包括:IP、IPX、RIP、OSPF等。
第四层是处理信息的传输层(Transport layer)。第4层的数据单元也称作数据包(packets)。但是,当你谈论TCP等具体的协议时又有特殊的叫法,TCP的数据单元称为段(segments)而UDP协议的数据单元称为“数据报(datagrams)”。这个层负责获取全部信息,因此,它必须跟踪数据单元碎片、乱序到达的数据包和其它在传输过程中可能发生的危险。第4层为上层提供端到端(最终用户到最终用户)的透明的、可靠的数据传输服务。所谓透明的传输是指在通信过程中传输层对上层屏蔽了通信传输系统的具体细节。传输层协议的代表包括:TCP、UDP、SPX等。
在会话层及以上的高层次中,数据传送的单位不再另外命名,统称为报文。OSI将层与层之间交换的数据的单位称为服务数据单元SDU。

操作系统

绝对装入方式
官方解释:在编译时,如果知道程序驻留在内存的什么位置,那么编译程序将产生绝对地址的目标代码。装入模块装入内存后,程序中的逻辑地址与实际内存地址完全相同,不需对程序的数据和地址进行修改。程序种所使用的绝对地址,可在汇编或编译时给出,也可由程序员赋予,通常在程序中采用符号地址,然后再汇编或编译时,再将这些符号地址转换为绝对地址
补充:一般适用于单道批处理系统
个人理解:在编译时,程序由高级语言需要向低级语言转变,首先要由高级语言转换为汇编语言,然后再将汇编语言转换为机器语言装入内存,再装入内存的时候如果采用绝对装入方式定位的话,有两种情况,第一种是,程序的逻辑地址等于物理地址,在装入的时候直接在存储区域的用户区装入(内存分为两部分:系统区+用户区),第二种情况是逻辑地址是程序员用符号语言(通常采用符号语言)赋予的,在汇编时再将这些符号地址转换为绝对地址,个人理解有误,望大佬看见指正

可重定位装入方式
可充定位方式又称为静态定位装入方式,是因为程序在转换为汇编语言装入内存的时候会表名这个程序语句所占的物理内存是多少,在装入内存的时候就会根据用户区的起始地址+程序语句所占内存的大小,此时的地址为程序语句的实际物理地址,这样的装入方式称为可重定位装入方式,可以实现并发,但是一旦装入就无法再改变在内存中的物理位置

动态运行时装入方式
在把装入模块装入内存后,不立即将相对地址转换为绝对地址,而是设置一个重定位寄存器,寄存器中存储的是,下一个执行程序应该加上的内存编号,进而转换为绝对地址,这样就可以进行多个程序的顺序装入,然后在运行时再将逻辑地址转换为绝对地址,使得内存的利用效率更高
————————————————
版权声明:本文为CSDN博主「zyl~~~」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_43919396/article/details/105604790

AI

所以梯度消失出现的原因经常是因为网络层次过深,以及激活函数选择不当,比如sigmoid函数。

梯度消失的表现:

模型无法从训练数据中获得更新,损失几乎保持不变。

梯度爆炸
梯度爆炸出现的原因:
同梯度消失的原因一样,求解损失函数对参数的偏导数时,在梯度的连续乘法中总是遇上很大的绝对值,部分参数的梯度因为乘了很多较大的数而变得非常大,导致模型无法收敛。
所以梯度爆炸出现的原因也是网络层次过深,或者权值初始化值太大。

梯度爆炸的表现:
(1)模型型不稳定,更新过程中的损失出现显著变化。
(2)训练过程中,模型损失变成 NaN。
梯度消失爆炸的解决方法:
重新设置网络结构,减少网络层数,调整学习率(消失增大,爆炸减小)。
预训练加微调
此方法来自Hinton在2006年发表的一篇论文,Hinton为了解决梯度的问题,提出采取无监督逐层训练方法,其基本思想是每次训练一层隐节点,训练时将上一层隐节点的输出作为输入,而本层隐节点的输出作为下一层隐节点的输入,此过程就是逐层“预训练”(pre-training);在预训练完成后,再对整个网络进行“微调”(fine-tunning)。Hinton在训练深度信念网络(Deep Belief Networks中,使用了这个方法,在各层预训练完成后,再利用BP算法对整个网络进行训练。此思想相当于是先寻找局部最优,然后整合起来寻找全局最优,此方法有一定的好处,但是目前应用的不是很多了。
激活函数采用relu,leaky relu,elu等。
batch normalization
更换参数初始化方法(对于CNN,一般用xavier或者msra的初始化方法)
调整深度神经网络的结构
使用残差模块,DESNET模块或LSTM等结构(避免梯度消失)
l1、l2正则化(避免梯度爆炸)
减小学习率、减小batch size(避免梯度爆炸)
梯度裁剪(避免梯度爆炸)
对于RNN,加入gradient clipping,每当梯度达到一定的阈值,就把他们设置回一个小一些的数字;

loss突然变nan的原因?
可能原因:
1、training sample中出现了脏数据,或输入数据未进行归一化
2、学习速率过大,梯度值过大,产生梯度爆炸;
3、在某些涉及指数计算,可能最后算得值为INF(无穷)(比如不做其他处理的softmax中分子分母需要计算exp(x),值过大,最后可能为INF/INF,得到NaN,此时你要确认你使用的softmax中在计算exp(x)做了相关处理(比如减去最大值等等));
4、不当的损失函数(尤其是自定义的损失函数时);
5、在卷积层的卷积步伐大于卷积核大小的时候。

数学

16881119470901688111946559.png

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

秩的本质是矩阵中的这几个向量所确定的空间的维数

Ax=b

一、第一类视角
Ax=b

如果b存在于A的列张成的空间中,则有解,否则无解;
如果b存在于A的列张成的空间中,且A的列均是线性无关的(列满秩),那么存在唯一解;
如果b存在于A的列张成的空间中,但A的列是线性相关的(非列满秩),那么存在多解;
二、第二类视角
Ax=b

A如果行满秩,说明A的秩等于行满秩的秩,也就是A的列数只能大于等于行数(多解或者唯一解)
A的列数等于A的行数,那么A的列是线性无关的,可以张成整个空间,对于任意的b存在解且唯一;
A的列数大于A的行数,那么A的列是线性相关的,虽然可以张成整个空间,对于任意的b存在多解;
A如果列满秩,那么A的列是线性无关的,说明A的秩等于列满秩的秩,也就是A的行数只能大于等于列数(无解或者唯一解)
A的行数等于A的列数,退化成满秩问题,对于任意的b存在解且唯一;
A的行数大于A的列数,情况分为2种(不存在多解的情况):
如果b不存在于A的列张成的空间中,则无解;
如果b存在于A的列张成的空间中,则有唯一解;
A既不是行满秩也不是列满秩(无解或者多解)
如果b不存在于A的列张成的空间中,则无解;
如果b存在于A的列张成的空间中,则有解,且是多解;(这里不考虑其他部分均0,可以退化成低维度满秩的情况,即不考虑[1 0; 0 0])

16881129201001688112919639.png

古典概型、几何概型
古典概型——有限等可能(有限个可能事件,且每个事件都是等可能概率事件)
几何概型——无限等可能

16882067634421688206763222.png

16882071659631688207164986.png

16882072868961688207285039.png

什么是先验概率?

事情未发生,只根据以往数据统计,分析事情发生的可能性,即先验概率。

指根据以往经验和分析。在实验或采样前就可以得到的概率。

先验概率是指根据以往经验和分析得到的概率,如全概率公式,它往往作为"由因求果"问题中的"因"出现。

后验概率

事情已发生,已有结果,求引起这事发生的因素的可能性,由果求因,即后验概率。

指某件事已经发生,想要计算这件事发生的原因是由某个因素引起的概率。

后验概率是指依据得到"结果"信息所计算出的最有可能是那种事件发生,如贝叶斯公式中的,是"执果寻因"问题中的"因"。

与先验概率的关系
后验概率的计算,是以先验概率为前提条件的。如果只知道事情结果,而不知道先验概率(没有以往数据统计),是无法计算后验概率的。

后验概率的计算需要应用到贝叶斯公式。

随机变量的均值(不同于样本均值),大数定律指出如果样本足够的话,样本均值会无限接近数学期望。

数学期望(mean)(或均值,亦简称期望)是试验中每次可能结果的概率乘以其结果的总和,是最基本的数学特征之一。它反映随机变量平均取值的大小。

方差是在概率论和统计方差衡量随机变量或一组数据时离散程度的度量。概率论中方差用来度量随机变量和其数学期望(即均值)之间的偏离程度。统计中的方差(样本方差)是每个样本值与全体样本值的平均数之差的平方值的平均数。在许多实际问题中,研究方差即偏离程度有着重要意义。

image-20230701193641760

16882114239621688211423619.png

相关系数或协方差为 0 的时候能否说明两个分布无关?为什么?
只能说明不线性相关,不能说明无关。因为在数学期望存在的情况下,独立必不相关,不相关未必独立。

16882115288911688211527169.png

不相关就是两者没有线性关系,但是不排除其它关系存在;独立就是互不相干没有关联

大数定律
随机变量的均值依概率收敛于自己的期望。

大数定律通俗一点来讲,就是样本数量很大的时候,样本均值和数学期望充分接近,也就是说当我们大量重复某一相同的实验的时候,其最后的实验结果可能会稳定在某一数值附近。就像抛硬币一样,当我们不断地抛,抛个上千次,甚至上万次,我们会发现,正面或者反面向上的次数都会接近一半,也就是这上万次的样本均值会越来越接近 50% 这个真实均值,随机事件的频率近似于它的概率。

16882115999731688211599429.png

大数定理将属于数理统计的平均值和属于概率论的期望联系在了一起。

中心极限定理
大量(n→∞)、独立、同分布的随机变量之和,近似服从于一维正态分布。

n 个独立同分布的随机变量,当 n 充分大时,其均值服从正态分布。(大量独立同分布的随机变量之和近似服从一维正态分布。)

中心极限定理是说当样本数量无穷大的时候,样本均值的分布呈现正态分布。

实验次数越多,样本均值的分布越趋向于正态分布。

中心极限定理指的是给定一个任意分布的总体。每次从这些总体中随机抽取 n 个抽样,一共抽 m 次。 然后把这 m 组抽样分别求出平均值。这些平均值的分布接近正态分布。

最大似然估计(极大似然估计)是什么?
极大似然估计就是一种参数估计方法。

最大似然估计的目的是:利用已知的样本结果,反推最有可能(最大概率)导致这样结果的参数值。

原理:极大似然估计是建立在极大似然原理的基础上的一个统计方法,是概率论在统计学中的应用。极大似然估计提供了一种给定观察数据来评估模型参数的方法,即:“模型已定,参数未知”。通过若干次试验,观察其结果,利用试验结果得到某个参数值能够使样本出现的概率为最大,则称为极大似然估计。

方程的解只是一个估计值,只有在样本数趋于无限多的时候,它才会接近于真实值

1
2
3
4
5
6
7
8
[1]   写出似然函数;
[2] 对似然函数取对数,并整理;
[3] 求导数;
[4] 解似然方程。

[1] 比其他估计方法更加简单;
[2] 收敛性:无偏或者渐近无偏,当样本数目增加时,收敛性质会更好;
[3] 如果假设的类条件概率模型正确,则通常能获得较好的结果。但如果假设模型出现偏差,将导致非常差的估计结果。

16882131129631688213111956.png

什么是集合?
由离散个体构成的整体的称为集合,称这些个体为集合的元素。

集合元素的性质:无序性、相异性、确定性、任意性

  • 等价关系:设 R 为非空集合 A 上的一个关系,如果 R 是自反的对称的传递的,则称 R 为 A 上的等价关系
  • 等价类:设 R 是集合 A 上的等价关系,与 A 中的一个元素 a 有关系的所有元素的集合叫做 a 的等价类

什么是哈密顿图?

能走出一条通过每个结点仅一次的回路。

平凡图是哈密顿图(平凡图:仅有一个结点的图)。

什么是欧拉图?

能走出一条通过每条边仅一次的回路。