第二周

1.线性回归问题

(1)定义:利用数理统计中回归分析,来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法。

问:为什么线性回归需要使用数理统计中的定义?
答:线性回归实际上将训练数据视存在冗余+互补部分,冗余部分是线性回归的原因,互补是线性回归有效的原因,y = ŷ+e,认为实际测量值有测量误差,与预测值存在偏差e。

(2) 线性回归的要素
线性回归是监督训练,训练数据集(training set/data)包含输入x与输出y(y指的是测量输出),其中x的维数可以称为特征数。
(3)机器学习的过程
在这里插入图片描述
可以认为,机器学习是通过数据训函数、模型的过程,而机器学习算法提供的是基础性的原理,数据提供具体参数。
(4) 损失函数与参数求解问题
在这里插入图片描述
应当注意的是线性回归使用的是解析解,而非迭代得到。

2.二分类问题

(1)意义:对于任意分类,可以拆分为多个二分类,例如x,y,z,可以通过先判断是否为x,若非x,则判断是y或者是z。
(2)与线性回归的区别:

1)线性回归追求直线尽可能多的穿越数据点、数据点尽可能靠近直线;二分类问题则是希望两种类型,分别置于直线的两侧,且尽可能离直线远。
2)线性回归输出的是在输入条件下的输出预测;分类则是对两个类型中其中一类的概率,区间为(0,1)

(3)Sigmoid函数
y = 1 1 + e − x y=\frac{1}{1+e^{-x}} y=1+ex1
优势:方便求导,其导数为:
y ′ = y ( 1 − y ) y' = y(1-y) y=y(1y)
对于神经网络中,只需要输入和输出,而无需其他参数即可得到参数偏导。
(4)参数求解方法

按照距离选择损失函数
在这里插入图片描述

最终可以得到推导公式为:
θ k + 1 = θ k + α ( y ( i ) − y ^ ( i ) ) y ^ ( i ) ( 1 − y ^ ( i ) ) ( x 1 x 2 1 ) \theta_{k+1} = \theta_{k} +\alpha (y^{(i)}-\hat{y}^{(i)})\hat{y}^{(i)}(1-\hat{y}^{(i)})\begin{pmatrix} x_1 \\ x_2 \\ 1 \end{pmatrix} θk+1=θk+α(y(i)y^(i))y^(i)(1y^(i)) x1x21
(4) Softmax函数
首先,要知道多分类的概率分布一般假设为如下:
公式:
p ( x = c ) = e θ c x ∑ i = 1 k e θ i x p(x=c) = \frac{e^{\theta_{c}x}}{\sum_{i=1}^{k} e^{\theta_{i}x}} p(x=c)=i=1keθixeθcx
其中,
θ = [ θ 1 T θ 2 T . . . θ k T ] \theta = \begin{bmatrix} \theta_1^T \\ \theta_2^T\\ ...\\ \theta_k^T \end{bmatrix} θ= θ1Tθ2T...θkT
由于k种类型的多分类需要多个超平面进行分割,因此至多需要k个超平面分割,可以怎么理解,对于 i , j i,j i,j两种类型,可以得到这样的特点:
θ i T x − θ j T x > 0 , i 更有可能 \theta_i^Tx-\theta_j^Tx>0,i更有可能 θiTxθjTx>0,i更有可能
这里,补充信息论的相关知识:
(1)一个随机事件 X X X X = x X=x X=x发生,我们获得的信息量应该与它的不确定性成正比。小概率事件发生带来更多信息,必然事件(概率=1)带来0信息。
I ( x ) = − l o g ( x ) I(x)=-log(x) I(x)=log(x)
自然对数单位为纳特,二进制对数为比特。
(2)熵
熵 H§ 是随机变量下真实分布p 下,每个符号平均携带的信息量(即最优编码的平均长度)
H ( p ) = 1 N ∑ i = 1 N − l o g ( p i ) H(p) = \frac{1}{N}\sum_{i=1}^N-log(p_i) H(p)=N1i=1Nlog(pi)
(3) 交叉熵
真实符号分布是 p p p,但编码器不知道 p p p,而是使用了另一个分布 q q q 来设计编码
H ( p , q ) = ∑ i = 1 N − p i l o g ( q i ) H(p,q)=\sum_{i=1}^N -p_ilog(q_i) H(p,q)=i=1Npilog(qi)
并且一个非常重要的特点是,q与q越接近,H(p,q)越小,可以这么说
以交叉熵为损失函数的目标最小值 ⇔ 预测分布与实际分布( o n e − h o t )最接近 以交叉熵为损失函数的目标最小值 \Leftrightarrow 预测分布与实际分布(one-hot)最接近 以交叉熵为损失函数的目标最小值预测分布与实际分布(onehot)最接近
由此我们可以根据交叉熵得到合适的损失函数:
J ( θ ) = − ∑ i = 1 N ∑ k = 1 n 1 ( y ( i ) = k ) l o g ( e θ ( k ) T x ( i ) ∑ j = 1 n e θ ( j ) T x ( i ) ) J(\theta) = -\sum_{i=1}^N\sum_{k=1}^n 1(y^{(i)}=k)log(\frac{e^{\theta^{(k)T}}x^{(i)}}{\sum_{j=1}^n e^{\theta^{(j)T}x^{(i)}}}) J(θ)=i=1Nk=1n1(y(i)=k)log(j=1neθ(j)Tx(i)eθ(k)Tx(i))
而根据 o n e − h o t one-hot onehot分布,可以简化得到:
J ( θ ) = − ∑ i = 1 N l o g ( p c ( i ) ) , c ( i ) 为第 i 个样本对应的种类 J(\theta) = -\sum_{i=1}^N log(p_{c^{(i)}}),c^{(i)}为第i个样本对应的种类 J(θ)=i=1Nlog(pc(i))c(i)为第i个样本对应的种类
并且使用单个样本可以对 θ ( k ) \theta^{(k)} θ(k)求偏导得到:
假设 s j = θ ( j ) T x s_j = \theta^{(j)T}x sj=θ(j)Tx
∂ J ∂ s j = − 1 + e s j ∑ i = 1 N e s i , j = y \frac{\partial J}{\partial s_j} = -1 + \frac{e^{s_j}}{\sum_{i=1}^N e^{s_i}},j=y sjJ=1+i=1Nesiesj,j=y
∂ J ∂ s j = e s j ∑ i = 1 n e s i , j ≠ y \frac{\partial J}{\partial s_j} = \frac{e^{s_j}}{\sum_{i=1}^n e^{s_i}},j\neq y sjJ=i=1nesiesj,j=y
可以综合得到:
∂ J ∂ s j = − 1 ( j = k ) + e s j ∑ i = 1 n e s i \frac{\partial J}{\partial s_j} = -1(j=k)+ \frac{e^{s_j}}{\sum_{i=1}^n e^{s_i}} sjJ=1(j=k)+i=1nesiesj
∂ J ∂ θ ( j ) = [ − 1 ( j = k ) + e s j ∑ i = 1 n e s i ] x \frac{\partial J}{\partial \theta^{(j)}} = [-1(j=k)+ \frac{e^{s_j}}{\sum_{i=1}^n e^{s_i}}]x θ(j)J=[1(j=k)+i=1nesiesj]x
当存在N个样本时,有:
∂ J ∂ θ ( j ) = ∑ i = 1 N [ − 1 ( j = k ) + e s j ∑ i = 1 n e s i ] x ( i ) \frac{\partial J}{\partial \theta^{(j)}} = \sum_{i=1}^N[-1(j=k)+ \frac{e^{s_j}}{\sum_{i=1}^n e^{s_i}}]x^{(i)} θ(j)J=i=1N[1(j=k)+i=1nesiesj]x(i)

3.神经元模型

(1)模型的数学描述
在这里插入图片描述
单个神经元模型可以简单写为:
z = w T x z = w^Tx z=wTx
p = z − θ p = z - \theta p=zθ
y = f ( p ) y = f(p) y=f(p)
其中, x x x为n维输入, w w w为系数参数, θ \theta θ为神经元阈值, f f f为非线性作用函数,引入神经元非线性拟合能力。
(2)常见的作用函数

对称型 S i g m o i d Sigmoid Sigmoid函数

y = 1 1 + e − β x y = \frac{1}{1+e^{-\beta x}} y=1+eβx1
特点:
y ′ = β y ( 1 − y ) y' = \beta y(1-y) y=βy(1y)

非对称型 S i g m o i d Sigmoid Sigmoid函数

y = 1 − e − β x 1 + e − β x y = \frac{1-e^{-\beta x}}{1+e^{-\beta x}} y=1+eβx1eβx
y ′ = β ( 1 − y 2 ) y' = \beta (1-y^2) y=β(1y2)

对称型阶跃函数

f ( x ) = { 1 x > 0 − 1 x < 0 f(x) = \begin{cases} 1 & x>0 \\ -1 & x<0 \end{cases} f(x)={11x>0x<0
(3)Hebb规则——重点

连接值的调整量与输入输出成正比(并不是必定成立,大部分成立)

4. 多层感知机模型

(1)多层感知机解决的问题:
单层感知机、二分类方法无法解决异或这个非线性可分问题:
在这里插入图片描述
y = x 1 ⊕ x 2 y = x_1 \oplus x_2 y=x1x2
三层感知机可以解决异或问题,结构图如下:
在这里插入图片描述
对于这类简单的感知机可以通过简单的配凑方法试出可行的参数,但是,对于更复杂的感知机需要定理验证可行性,BP方法迭代得到参数。

(2)多层感知机定理(原理支撑)
多层感知器网络,有如下定理:
定理1 若隐层节点(单元)可任意设置,用三层阈值节点的
网络,可以实现任意的二值逻辑函数。
定理2 若隐层节点(单元)可任意设置,用三层S型非线性特
性节点的网络,可以一致逼近紧集上的连续函数或按 范数逼近紧
集上的平方可积函数。
(3)BP迭代法
首先,迭代算法需要考虑选择使用的作用函数(非线性),不妨假设其使用 s i g m o i d sigmoid sigmoid函数,并做出如下规定:

(1)感知机一共有 l l l层,第 0 0 0层输入,第 l l l层输出(很奇怪不是吗,毕竟之前感知机还把输入层计入,不过问题不大)
(2) w i j [ k ] w_{ij}^{[k]} wij[k]表示第k-1层到第k层之间,k-1层的第j个节点到k层第i个节点的系数
(3)BP算法依赖最终的误差反向传播,并考虑到 p y t o r c h pytorch pytorch出于维度考虑禁止对向量求向量的偏导,我们一般认为最终输出为一个标量,当然,即使不止一个输出,也可以线性叠加误差,我们令损失函数为:
J = 1 2 ( y − y ^ ) 2 J=\frac{1}{2}(y-\hat y)^2 J=21(yy^)2
e = y − y ^ e = y - \hat y e=yy^
a = f ( z ) a = f(z) a=f(z)
z = w T x − θ z = w^Tx-\theta z=wTxθ
(可以通过拓展向量转换,因此不专门考虑 θ \theta θ)

由此,不妨假设感知机有两层(不包含输入层),第二层的系数求导时,有:
∂ J ∂ w i j [ 2 ] = ∂ J ∂ e ∂ e ∂ a i [ 2 ] ∂ a i [ 2 ] ∂ z i [ 2 ] ∂ z i [ 2 ] ∂ w i j [ 2 ] = ( e ) ( − 1 ) ( a i [ 2 ] ( 1 − a i [ 2 ] ) ) ( a j [ 1 ] ) \frac{\partial J}{\partial w^{[2]}_{ij}} = \frac{\partial J}{\partial e}\frac{\partial e}{\partial a^{[2]}_i} \frac{\partial a^{[2]}_i}{\partial z^{[2]}_i} \frac{\partial z^{[2]}_i}{\partial w^{[2]}_{ij}} = (e)(-1)(a^{[2]}_i(1-a^{[2]}_i))(a^{[1]}_j) wij[2]J=eJai[2]ezi[2]ai[2]wij[2]zi[2]=(e)(1)(ai[2](1ai[2]))(aj[1])
应当指出的是,对于单链的误差,实际上而言,只对三层以及小于三层的感知机有效,对于大于三层感知机的从第一层参数开始,就有不止一条路径到达参数所在路径,不过链式法则不会变。
(4) 计算机中BP算法的实现
计算机实际上并不会计算偏导,因此在计算机中的BP算法(以 p y t o r c h pytorch pytorch为例),通过记录每次的张量运算实现误差传播,具体实现原理如下:

(1)对于一个神经网络而言,输入张量是固定的,而且往往以一维或者二维向量的形式输入,不妨记为 x x x;
(2)输入向量 x x x向前传播过程中,以第一层的计算为例,得到的张量有 a 1 [ 1 ] , a 2 [ 1 ] , . . . , a n [ 1 ] a^{[1]}_1,a^{[1]}_2,...,a^{[1]}_n a1[1],a2[1],...,an[1]等张量,并作为新的输入输入到下一层,可以得到:
a 1 [ 1 ] = w 1 T x a^{[1]}_1 = w_1^{T}x a1[1]=w1Tx
对于 w 1 w_1 w1求偏导得到的就是 x x x,对 x x x求偏导,得到的就是 w 1 w_1 w1,此时就会记录这个 x x x作为之后梯度传递到该节点时,对 w 1 w_1 w1求偏导的根据,可以说,与神经网络模型不同的是,计算机中的网络更像是以每个计算为节点,记录该计算代表的倍数,并将传到该节点的梯度按系数分配给更前面的节点。

5.卷积神经网络

(1)卷积是什么?
一般认为卷积是一个数学上的运算,但就理解上而言,我更倾向于一个滤波器,例如:均值滤波器、高斯滤波器等都是以矩阵形式存在,可以说,神经网络中的卷积核就是由数据训练的特化滤波器,这正好符合机器学习以数据学习、利用数据的核心理念。
我们也不难发现,对于不同尺寸的卷积核,能实现不同的功能,例如一个复杂的图案,单靠一个简单的卷积核无法表示,我一般是这么认为神经网络的解决方法:

1)利用上采用的方式简化特征,使其尺寸较大的特征得以提取;
2)使用更加大尺寸的,比如5×5的卷积核提取特征

(2)为什么卷积神经网络不采用全连接?
因为全连接网络的参数非常多,一个我之前忽略的是,实际上之前的多层感知机实际上就是全连接网络,而卷积神经网络只在部分层选择使用全连接网络。
(3)池化层的作用
池化层的作用就是将特征简化,应当注意的是:

池化层能通过简单的最大池化简化特征的底层逻辑是,卷积层将图像的特征数值化,例如梯度卷积核的值越大,代表这个地方的颜色变化越快,此时的特征就越明显。

(4)卷积神经网络的BP过程
参考之前多层感知机的计算机中梯度传递过程即可,特别注意的是,与之前的系数不同的是,卷积核的每个元素,都会收到一层的,所有输出元素的影响,因为一层中使用的一个卷积核是统一的(这是由图像特征的位置无关性决定的,一个S型号不会因为从左边移到到右边就失效)

第三周

1.经典网络

经典网络主要分为原理与代码实现角度两个方面分析。

(1)LeNet-5网络

基础信息:

  • 主要功能:识别手写数字
  • 输入维数:32×32
  • 输出维数:10
  • 层数:7层(不包含输入层)
  • 结构演示: LeNet-5演示网址
  • 结构:I->C1->A->S2->C3->A->S4->C5->A->F6->O
    注:LeNet-5原文激活函数使用的是Sigmoid,现代使用ReLu
简写 含义 由来
I 输入层 Input
C 卷积层 Convolution
S 池化层(下采样层) Subsampling
A 激活层 Activation
F 全连接层 Full-connected
O 输出层 Output

在这里插入图片描述

结构拆分:

  1. C1层:5×5卷积核
    输入维数:32×32
    输出维数:6×28×28——六个不同卷积核,且卷积过程中不填充边缘,因此宽度变为:
    32 − ( 5 − 1 ) = 28 32-(5-1)=28 3251=28
    当前层数可训练参数:
    ( 5 × 5 + 1 ) = 26 (5×5+1)=26 (5×5+1=26
    注:计算中 1 1 1来自每次卷积的阈值,当然考虑到激活函数的不同,实际上叫做偏置更合适一些
    pytorch中的设置方法:
conv1 = nn.Conv2d(in_channels = 1, out_channels = 6, kernal_size = 5,stride = 1, padding = 0)
  • in_channels:输入通道数
  • out_channels:输出通道数
  • kernal_size:卷积核尺寸
  • stride:步长
  • padding:是否填充

一个非常容易弄错的事:二维卷积与三维卷积
首先,我们一般认为图片是一个二维数据,由此我们不禁考虑多通道的图片与三维卷积有什么关系,难道三维卷积就是多通道的二维卷积吗?答案是否定的,我们不妨以输入RGB图,3×3的二维卷积核为例,看到卷积过程:

  1. 三张输入通道,平面卷积核(正方形)分别卷积得到三张图
  2. 图叠加求和
  3. 得到一张特征图,一个卷积核对应输出的一个通道

再看到三维卷积的卷积过程:

  1. 立方体卷积核在单一通道内移动,得到一个三维数据
  2. 数值叠加
  3. 得到一张特征图(三维),同样对应一个输出通道

并且,实际上虽然有的图片构成的张量可以用二维表示,但实际上应该用4维张量表示更合适(也有计算机本身加快训练的要求)
[ b a t c h , c h a n n e l s , h e i g h t , w i d t h ] [batch,channels,height,width] [batch,channels,height,width]
而对于拥有三维信息,比如带深度的数据而言,计算机中实际视为5维张量:
[ b a t c h , c h a n n e l s , d e p t h , h e i g h t , w i d t h ] [batch,channels,depth,height,width] [batch,channels,depth,height,width]
并且这样的顺序实际代表着张量从最高层到最底层的结构,正如四维张量最底层实际上就是一个行向量,因此最后一个参数是行向量长度——宽度

  1. S2池化层
    输入维数:6×28×28
    输出维数:6×14×14
    可训练参数:无
    本质:特征经卷积数值化后的直接选择
    特点:维数通常为2×2,且步长stride=2
    3.C3卷积层
    输入维数:6×14×14
    输出维数:16×10×10
    卷积核尺寸:5
    可训练参数数:(5×5+1)×10 = 260
    …多余相同分析省略
  2. S4池化层
    输入维数:16×10×10
    输出维数:16×5×5
    可训练参数:无
  3. C5卷积层
    虽然说是卷积层,但实际上它也是全连接层,我们按照之前卷积核的方式计算参数量时,可以得到:
    ( k e r n a l − s i z e × k e r n a l − s i z e × i n p u t − c h a n n e l s + 1 ) × o u t p u t − c h a n n e l s = ( 5 × 5 × 16 + 1 ) × 120 = 48120 (kernal_-size×kernal_-size×input_-channels+1)×output_-channels =(5×5×16+1)×120=48120 (kernalsize×kernalsize×inputchannels+1)×outputchannels=(5×5×16+1)×120=48120
    而按照全连接层的计算可训练参数量为:
    ( i n p u t − s i z e + 1 ) × o u t p u t − s i z e = ( 400 + 1 ) × 120 = 48120 (input_-size+1)×output_-size=(400+1)×120 = 48120 (inputsize+1)×outputsize=(400+1)×120=48120
    注意:卷积核不同通道不同,但阈值公用!
    很明显,两者的可训练参数量完全相同,且总连接数相同
  4. F6全连接层
    输入维数:120
    输出维数:84
    可训练参数:(120+1)× 84
    注意:总连接数=若为全连接层时可训练参数,且包括阈值!

(2)AlexNet网络

在这里插入图片描述

这里总结一下卷积前后的尺寸规律:
卷积后尺寸 = ( 原尺寸 − 卷积核尺寸 + 2 × 填充尺寸 ) / 步长 + 1 卷积后尺寸=(原尺寸-卷积核尺寸+2×填充尺寸)/步长+1 卷积后尺寸=(原尺寸卷积核尺寸+2×填充尺寸)/步长+1
AlexNet网络结构:
C1->S2->C3->S4->C5->C6->C7->S8->F9->F10->O
注:三个全连接层包括输出层

  • 特别的卷积层:C3、C5、C6、C7
    采用3×3卷积核+padding=1,在保证特征图尺度的情况下,加深特征图深度
  • 特别的池化层:采用最大池化,3×3尺寸,步长为2——特征更丰富,不容易丢失信息,抗过拟合更强
  • 其他改进:
    (1)采用ReLu激活函数
    (2)采用丢弃法,使得全连接层的神经元随机失效,应当注意的是,丢弃法不能用在测试的时候。
    (3)权重衰减机制,简单来说就是训练过程中,梯度迭代前乘以一个小于1的正数,使得在没有梯度驱动的情况下,参数应当趋于0。

AlexNet中一个核心的处理是对数据的泛化、丰富方法:
1)随机裁剪 Random crops(平移变换)

原图先 resize 到 256×256,再随机位置裁剪出 224×224,模拟物体位置平移,扩充样本,防止过拟合

2)水平翻转 Flip horizontally(反射变换)

随机对图像左右镜像翻转,猫狗、人脸这类左右对称物体,样本直接翻倍

3)色彩抖动 Color jittering(光照 / 色彩变换)

  • 对训练集所有 RGB 像素做 PCA,得到颜色主成分
  • 给 RGB 通道叠加随机高斯噪声 × 主成分,模拟光照、色差变化

###(3) VCG-16网络

核心优化:残差块的引入——解决梯度消失问题
为什么梯度会消失?
因为在计算机计算过程中,梯度从损失函数反向传播,从收敛性的角度上说,当参数收敛时, 损失函数对每个参数求偏导得到的结果都应当是0,那么,既然如此,越是往前传播,实际梯度的无穷小量阶就越进行9,因此,在其神经网络层数变多后,前置的网络容易出现梯度几乎无法接收到合理的、可供处理的数据集的梯度反向传播。
在这里插入图片描述
如图,这是一个经典的全连接层的,带有残差的一个基本单元,对于这种求导很难解释,但是一个非常简单的推导过程是:
对于 a [ l + 2 ] a^{[l+2]} a[l+2]作为输出时,此时需要的是后方传递到 a [ l + 2 a^{[l+2} a[l+2梯度:
∂ a [ l + 2 ] ∂ a [ l ] = 1 + ( ∂ f ∂ a [ l ] − 1 ) \frac{\partial a^{[l+2]}}{\partial a^{[l]}} = 1 +(\frac{\partial f}{\partial a^{[l]}}-1) a[l]a[l+2]=1+(a[l]f1)
这里假设的是原本拟合的函数是 f ( x ) f(x) f(x),那么在传递误差的过程中,即使传递到 a [ l + 2 ] a^{[l+2]} a[l+2]的梯度趋于0,那么在残差块内部的梯度依然不为0,并且可以认为其梯度加权就求和后的结果趋于-1。

2.深度学习的视觉应用

(1)常见数据集:

数据集名称 内容 尺寸 大小
MNIST 0〜9手写数字图片和数字标签 28x28 60000/10000
Fashion-MNIST 10种类别服饰 28x28 60000/10000
CIFAR-10 10种彩色类型东西 32x32 60000/10000
PASCAL VOC 20类物品 非固定尺寸 训练 + 验证共 11540 张
MS COCO数据集 超80 类物品 非固定尺寸、目标个数 超过33 万张图片
ImageNet数据集 总类别数:21841 - 总图像数据:14,197,122
ImageNet-21K Pretraining 类别数:21,000 - 1400万张图片+标签
谷歌JFT-300M 谷歌内部数据集 - -

(2)评价指标

含义 预测 实际 判断是否正确
TP 被正确地划分为正例的个数 正例 正例 正确
FP 被错误地划分为正例的个数 正例 反例 错误
FN 被错误地划分为负例的个数 反例 正例 错误
TN 被正确地划分为负例的个数 反例 反例 正确

P (精确率) = T P T P + F P ——被选择的(正例)的有效性 P(精确率)= \frac{TP}{TP+FP}——被选择的(正例)的有效性 P(精确率)=TP+FPTP——被选择的(正例)的有效性
R (找回率) = T P T P + F N ——正例全被找出来的可能性、正例寻找的全面性 R(找回率)= \frac{TP}{TP+FN}——正例全被找出来的可能性、正例寻找的全面性 R(找回率)=TP+FNTP——正例全被找出来的可能性、正例寻找的全面性
A c c u r a c y ( 精度 ) = T P + T N T P + F P + F N + T N ——所有类型判断的有效性 Accuracy(精度) = \frac{TP+TN}{TP+FP+FN+TN}——所有类型判断的有效性 Accuracy(精度)=TP+FP+FN+TNTP+TN——所有类型判断的有效性

置信度与准确率
可以通过改变阈值,阈值的变化会导致Precision与Recall值发生变化。
怎么理解?
以飞机识别为例,图片分类识别的结果输出中,包括飞机这一类别的置信度,范围(0,1),而在非绝对正确的神经网络的识别结果中可能出现错误的类别置信度相对于某些正例的类别置信度度高,此时,对于置信度的阈值就会遇到一个问题,是选择降低阈值,放低置信度的正例进来,于此同时,反例也跟着进来;提高阈值,干脆放弃这个置信度较低的样本。第一种可能性会提高召回率,降低精度,而第二种则是提供精度,降低召回率
常见的PR曲线示意图在这里插入图片描述
AP计算
A P = ∑ k = 1 N P ( k ) Δ r ( k ) AP = \sum_{k=1}^{N} P(k)\Delta r(k) AP=k=1NP(k)Δr(k)
其中𝑁代表测试集中所有图片的个数,𝑃(𝑘)表示在能识别出𝑘个图片的时候Precision的值,而 Δ𝑟(𝑘)则表示识别图片个数从𝑘−1变化到𝑘时(通过调整阈值)Recall值的变化情况。
注:识别出k个图片是指,通过调整阈值的方式,使得置信度前k个图片中的目标可信、正例,由此产生的可能性通过阈值区域划分确定。

(3)YOLO:You Only Look Once

  • 核心特征:将目标检测从分类转换为回归问题
  • 类别:One-Stage类
    在这里插入图片描述
    One-Stage类不需要Region Proposal阶段,可以通过一个Stage直接产生物体的类别概率和位置坐标值在这里插入图片描述
    Two-Stage类:将检测问题划分为两个阶段,第一个阶段首先产生候选区域(Region Proposals),包含目标大概的位置信息,然后第二个阶段对候选区域进行分类和位置精修
YOLO v1结构

核心转变:将目标识别问题从原本的one-hot的分类得到所属类型转变为(x,y,w,h,c)的参数回归问题。

既然是回归问题,那么显然就会有一个损失函数,帮助我们优化参数:

  • 训练输入:yolo的单个训练样本为1张图像+m条(x,y,w,h)的标签
  • 置信度在损失函数中的体现:以惩罚的方式,惩罚没有目标却被识别为目标存在的情况
  • 目标是否存在的判断方式:原图像划分为7×7小格子中,每个格子单独进行判断,并且对于一个目标的(x,y,w,h)参数必须由中心的格子决定,并且可以超过格子的范围。

在这里插入图片描述

损失函数

loss = 0
for img in img_all:
   for i in range(4):
      for j in range(4):
         loss_ij = lamda_1*(c_pred-c_label)**2 + c_label*(x_pred-x_label)**2 +\
                     c_label*(y_pred-y_label)**2 + c_label*(w_pred-w_label)**2 + \
                     c_label*(h_pred-h_label)**2
         loss += loss_ij
loss.backward()
YOLO v2结构

改进点:从原本的(x,y,w,h)预测改为偏移量预测
理由:直接预测位置会导致神经网络在一开始训练时不稳定,使用偏移量会使得训练过程更加稳定,性能指标提升了5%左右。(非常简单粗暴的理由)

第四、五周

1.Transformer模型

(1)为什么要叫Transformer?

  • 来源:Transformer 是 2017 年《Attention Is All You Need》提出、完全基于自注意力(Self-Attention)机制的深度学习特征提取架构,抛弃 RNN/LSTM 时序循环结构,是当前大模型(GPT、BERT、LLaMA、ViT)的基础骨架。
  • 含义:Transformer = Transform+er,transform的含义是翻译、转换的意思,er,代表模型,意为实现翻译功能的模型,由此引申得到的是实现不同特征空间转换模型,例如图片和文字的特征、含义属于不同的特征空间,可以通过Transformer模型理念统一到同一空间。
  • BLUE双语替代评价测评指标

N元语法匹配 P n P_n Pn
P n = ∑ i = 1 k 生成句与参考句中 n 元词组匹配数 k P_n = \frac{\sum_{i=1}^{k} 生成句与参考句中n元词组匹配数}{k} Pn=ki=1k生成句与参考句中n元词组匹配数
其中, k k k表示生成句中n元词组的个数。
短句惩罚因子BP
B P = { 1 , 生成长度 ≥ 平均参考程度 e 1 − L r e f L g e n 生成程度<参考程度 BP = \begin{cases} 1,&生成长度≥平均参考程度\\ e^{1-\frac{L_{ref}}{L_{gen}}} & 生成程度<参考程度 \end{cases} BP={1,e1LgenLref生成长度平均参考程度生成程度<参考程度
其中 L r e f L_{ref} Lref为参考程度, L g e n L_{gen} Lgen为生成长度
BLEU-4公式
B L E U = B P × e x p ( ∑ n = 1 4 ω n l o g P n ) BLEU = BP × exp(\sum_{n=1}^{4} \omega_n logP_n) BLEU=BP×exp(n=14ωnlogPn)
其中,4表示的是计入考虑的n元词组的最大长度
20%~40%是人工智能相对优秀水平,而>50%就是人工翻译水平

(2)Transformer架构

Transformer模型包含4个主要部分:输入部分,输出部分,编码器部分,解码器部分

a.输入部分

在这里插入图片描述
输入部分: { 源文本 : 嵌入层 + 位置编码器 目标文本 : 嵌入层 + 位置编码器 输入部分:\begin{cases} 源文本:&嵌入层+位置编码器\\ 目标文本:&嵌入层+位置编码器 \end{cases} 输入部分:{源文本:目标文本:嵌入层+位置编码器嵌入层+位置编码器
输入部分的处理过程:

文本

token划分

按token查询词表,嵌入向量

位置编码

token:词元,语言的最小处理单元。
个人认为该概念的一个核心作用就是统一不同语言,无论是中文、英文或者是其他语言,在计算机翻译中均按照token划分,应当注意的是token并不局限于一个英文单词或者是中文词,比如,英文单词unable就可以拆分为un、able两个token,同样也可以将is unable to视为一个token,中文亦是如此,可以拆分偏旁,比如言字旁有说话等含义,根据先后关系学习出单个字的含义,也可以将词划分token,比如“命中注定”等。

应当明确的一点是,文本在进入嵌入层之前,就应该进行token划分,这是嵌入的基础,所查询的向量表的映射关系也是token-向量表。

文本对齐问题:
理论上,翻译输入的长度是不固定的,但实际上,出于矩阵运算的需要,会填充0向量,使得长度对齐,并且,由于位置编码的特殊性,填0不同于其他的padding方式,这里填0是在前方,而不是后方在这里插入图片描述
嵌入问题,可以认为过程如下:
单个 t o k e n —— > o n e − h o t 向量—— > 投影为 x i n 单个token——>one-hot向量——>投影为x_{in} 单个token——>onehot向量——>投影为xin
关于投影问题数学表达为:
x = P e x = Pe x=Pe
现在的核心问题是如何训练得到这个 P P P,而且应当注意的是,这个映射应当实现的是:频繁搭配的词在向量空间中相对靠近,这能够实现在Muti-Head Attention范式中,向量空间中相互靠近时,得到更大的注意力。
在这里插入图片描述
上面这张图是one-hot向量先投影为 x x x,再反向转换为one-hot向量的过程,但是,这实际上并不符合训练要求,因为它并没有实现在空间中相近的向量应当是频繁相互搭配的功能。
在这里插入图片描述
这张图是实际使用的训练网络,可以分为两大模块:
{ C B O W : 按照周围的词猜中心词 S k i p − g r a m : 按照中心词猜测周围的词 \begin{cases} CBOW:&按照周围的词猜中心词\\ Skip-gram:& 按照中心词猜测周围的词 \end{cases} {CBOW:Skipgram按照周围的词猜中心词按照中心词猜测周围的词
这个网络会天然的使得周围词与中心词之间相互靠近,并且这个网络实际上并不是一次性输入整个句子,而是利用滑框,每次输入n个token(这里是5个),
CBOW具体的计算过程为:
h i d d e n = 1 4 ( W 1 ∗ e ( t − 2 ) + W 1 ∗ e ( t − 1 ) + W 1 ∗ e ( t + 1 ) + W 1 ∗ e ( t + 2 ) ) hidden = \frac{1}{4}(W_1*e(t-2)+W_1*e(t-1)+W_1*e(t+1)+W_1*e(t+2)) hidden=41(W1e(t2)+W1e(t1)+W1e(t+1)+W1e(t+2))
O u t p u t = S o f t m a x ( h i d d e n ) Output = Softmax(hidden) Output=Softmax(hidden)
应当注意的是,skip-gram中实际上并不是输出四个向量的概率,而是输出一个概率表,然后根据交叉熵,算出四个标签的损失,计算如下:
z = o u t p u t ∗ W 2 z = output*W_2 z=outputW2
L o s s = − ∑ l o g ( y w t − 2 ) + l o g ( y w t − 1 ) + l o g ( y w t + 1 ) + l o g ( y w t + 2 ) Loss = -\sum log(y_{w_{t-2}}) + log(y_{w_{t-1}}) + log(y_{w_{t+1}}) + log(y_{w_{t+2}}) Loss=log(ywt2)+log(ywt1)+log(ywt+1)+log(ywt+2)
当概率均匀分布于四个token时,会使得损失函数最小!

位置编码是在token投影到特征向量空间后,在此基础上加入位置特征的过程:

位置编码
x = x i n + x p o s x = x_{in}+x_{pos} x=xin+xpos
x p o s = { s i n ( p o s 1000 k / d ) , k = 2 i c o s ( p o s 1000 ( k − 1 ) / d ) , k = 2 i + 1 x_{pos} = \begin{cases} sin(\frac{pos}{1000^{k/d}}) & ,k=2i \\ cos(\frac{pos}{1000^{(k-1)/d}}) & ,k=2i+1 \end{cases} xpos={sin(1000k/dpos)cos(1000(k1)/dpos),k=2i,k=2i+1
其中, i i i为分组索引, k k k为向量分量索引, p o s pos pos为token所在位置索引

输出部分

在这里插入图片描述
输出部分包括:Liner——线性全连接层与Softmax层。
首先要明确的是其输出的到底是什么:

我们以输入n个token的输入句为例,它输出的是m个概率表,每条概率的理想情况应当是这样的:
[ 0 , 0 , … , 1 , 0 , … , 0 ] [0,0,…,1,0,…,0] [0,0,,1,0,,0]
而后续处理部分会按照这个概率表查出最高概率的,对应键值的token,而这个token是在目标语句词典中的。
这里很奇怪对不对,为什么是输出m个概率表呢?
理由非常简单,因为在推理过程中,transformer模型会把推理得到的结果经过反嵌入后再次输入到参考句输入接口中,直到输出结果不在改变!
而在训练过程中,使用的掩码多头注意力机制-Masked Muti-Head Attention,模拟的就是推理中逐步生成概率表的这一过程!

也就是说,实际上,Linear+Softmax结构实际上是在对每个输出的特征向量(对应一个token)做概率分析。

编码器与解码器部分

在这里插入图片描述
首先,可以看到这个图片左边有N×符号,代表的就是编码器是由这个结构多次叠加而成的,叠加后的结果如下:

向量 x x x输入——>Muti-Head Attention ——> 残差层——>Norm层——>Muti-Head Attention ——>……——>Norm层——>编码器输出

这里特意提到如何叠加问题,主要是考虑解码器的结构,如下图:
在这里插入图片描述
这里难免让人困惑,左侧的编码器输出,不妨设为 E E E难道也要重复输入吗?
答案是肯定的,第二子层中,接受编码器输出 E E E的过程就是反复进行的,当然,输入的是同一个值,无需考虑迭代等问题,体现的是参考输入与源输入编码后向量反复对比的过程
接下来我们来看到编码器与解码器中的结构讲解:

在此之前,我们需要了解注意力机制,下面是注意力机制的范式,所有注意力机制都是基于此的改编、改进:
O u t = S o f t m a x ( Q K T d k ) V Out = Softmax(\frac{QK^T}{\sqrt{d_k}})V Out=Softmax(dk QKT)V
其中, s o f t m a x ( x , i ) = e x i ∑ j e x j softmax(x,i)=\frac{e^{x_i}}{\sum_j e^{x_j}} softmax(x,i)=jexjexi,目标是实现概率的归一化。
Q:Query,表示当前正在查询的token对应的向量,在查询空间中。
K:Key,表示与当前正在查询向量进行比对的向量,与Q点击,代表两个token之间关系的远近,并且也在查询空间中。
V:Value,与Key对应,一个Key,对应一个Value,并且特别需要注意的是,V与Q、K并不在一个空间中,尽管它们维数相同!
d k d_k dk:Q,K,V的维数,应当注意的是,三者维度必定相同,且满足:
d m o d e l = d k ∗ h d_{model} = d_k * h dmodel=dkh
h h h:表示特征头的个数,一个特征头提取的是一种逻辑概念,头越多,代表其表征不同特征语句的能力越强,当然,过犹不及是显然的,在原文中,使用8个特征头。
而FFN层,类似于神经网络中的激活函数,目的在于引入非线性,使得模型表义能力更强,其公式如下:
F F N ( x ) = m a x ( 0 , W 1 x + b 1 ) W 2 + b 2 FFN(x) = max(0,W_1x+b_1)W_2+b_2 FFN(x)=max(0,W1x+b1)W2+b2
其网络结构为:
x —— > h i d d e n —— > 输出 x——>hidden——>输出 x——>hidden——>输出

2.视觉大模型

自Transformer之后的发展如图:
在这里插入图片描述
语言大模型:简单来说,就是以生成语言替代原本翻译的一一对应,其余发展历史、常见模型不再赘述。

(1)VIT模型

含义:

VIT——Vision Transformer,视觉Transformer。

架构:
在这里插入图片描述
如图所示,VIT可以分为三个主要部分:Embedding层,Transformer Encoder层,MLP Head层。
在讲解结构之前,首先要确定的是VIT的理念:将图片分割为小块图片,并且映射为特征向量,然后根据特征向量的关系去理解图片中的内容,最终输出理解结果(概率表)。这种理念实际上非常有趣,这实际代表着,所有信息都能用特征向量表示,并且在空间内通过位置关系去分辨相关性,最终理解数据。

Embedding层:嵌入层,实现与Transformer中将文字查表、映射为向量的功能,与此不同的是,图像本就是一个个数字的形式存在在电脑中,因此,Embedding层实质上就是一个Linear全连接层。
数据处理过程:

不重复切割

原始图像224×224×3

196个16×16×3 Patch

196个向量

在pos=0位置插入CLS向量

位置编码

输出

既然是训练得到的参数,参考Transformer中的Word2Vec,不免提问:VIT中的Embedding中的参数又是如何得到的呢?
答:靠「图像分类 / 检测损失」,全网络 BP 链式求导,同步更新 Embedding 层权重,全程联合训练,没有单独预训练 Embedding(原生 VIT)
注意:CLS的作用是,吸收其他特征向量的特征,并最终作为概率输出,这里的概率就是这个图像所属不同类别的概率、
Transfomer Encoder层:不再重复,只有一点要提,MLP类似于之前的FFN层,数学公式为:
M L P ( x ) = D r o p o u t ( G E L U ( D r o p o u t ( x W 1 + b 1 ) ) ∗ W 2 + b 2 ) MLP(x) = Dropout(GELU(Dropout(xW_1+b_1))*W_2+b_2) MLP(x)=Dropout(GELU(Dropout(xW1+b1))W2+b2)
其中,Dropout函数是正则化手段,训练时随机把部分特征 / 神经元输出置 0,防止过拟合,推理时全部启用,不会随机置0;
而GELU函数:
G E L U ( x ) = x ∗ Φ ( x ) GELU(x) = x*\Phi(x) GELU(x)=xΦ(x)
Φ ( x ) = 1 2 π ∫ − ∞ x e − t 2 / 2 d t \Phi(x)=\frac{1}{\sqrt{2\pi}}\int_{-\infty}^{x}e^{-t^2/2}dt Φ(x)=2π 1xet2/2dt
是VIT中专用的一个激活函数。
MLP Head层
位置:全部 Encoder 堆叠完成之后,只取第 0 位 CLS Token 作为唯一输入
数学表达式
设最后一层输出的分类特征: z c l s ∈ R D \boldsymbol z_{cls} \in \mathbb R^{D} zclsRD
O u t p u t = H e a d ( z d s ) = S o f t m a x ( W o u t ∗ L N ( z c l s ) + b o u t ) Output = Head(z_{ds}) = Softmax(W_{out}*LN(z_{cls})+b_{out}) Output=Head(zds)=Softmax(WoutLN(zcls)+bout)
W o u t : C × D W_{out}:C×D Wout:C×D C C C是分类种类数量,LN公式如下:
在这里插入图片描述
注:原生 VIT 的 Head 大多只用单层 FC(极简 MLP),部分改进版用两层 FC: D → 1 2 D → C D→ \frac{1}{2}D →C D21DC(FC = Fully Connected Layer,全连接层,就是最普通的 “线性层”)

(2)CLIP模型与DINO模型

在这里插入图片描述
CLIP与DINO无非是VIT的两种分支,我们通过对比的方式查看其区别:
CLIP(Contrastive Language-Image Pre-training,OpenAI 2021)

  1. 架构:双塔双编码器
    Image Encoder:ViT-B/ViT-L 或 ResNet(你之前学的 ViT 架构,输出[CLS]+Patch tokens)
    Text Encoder:小型 Transformer 文本编码器
    两个编码器各自 FC 投影到同一个 512 维共享向量空间,L2 归一化,用余弦相似度匹配图文。
  2. 训练数据 & 损失:图文对比学习 InfoNCE
    训练集:4 亿互联网图像 - 文本配对数据(一张图配一句描述),必须文本标签
    训练逻辑:一个 batch N 张图 + N 句对应文本,构成 N×N 相似度矩阵
    正样本:原图 + 原配文本 → 拉近余弦距离
    负样本:图 + 批次内所有其他文本 → 拉远距离
    损失:双向 InfoNCE 交叉熵损失,同时优化图像、文本两个编码器
  3. 特征特点
    优先学习全局语义([CLS]最强):为了匹配整图和整句文本,模型重点凝练整张图片类别语义,Patch 局部特征偏弱
    天然零样本能力:不用微调,输入分类提示词a photo of cat,文本编码和图片编码算相似度即可分类
    弱稠密特征:Patch 对物体边缘、纹理、空间细节建模不足,冻结主干做分割效果差
  4. 落地场景
    图文检索、零样本分类、AIGC 文生图(SD 的 Text Encoder)、VLM 多模态大模型图像骨干、CLIP-Score 图文匹配打分

二、DINO(Self-DIstillation with NO Labels,Meta FAIR 2021;DINOv2 2023 升级)

  1. 架构:单 ViT + 师生双分支(Student/Teacher),完全不需要文本、不需要标注
    Student(学生网络):标准 ViT,SGD 实时梯度更新参数
    Teacher(教师网络):和学生同结构,EMA 指数滑动平均更新 θ t = λ θ t + ( 1 − λ ) θ s \theta_t = \lambda \theta_t+(1-\lambda)\theta_s θt=λθt+(1λ)θs,无反向传播,提供稳定监督目标
    输入策略:Multi-Crop 多视图裁剪
    Global View(全局大图:原图 > 50% 区域,2 张)送入 Teacher
    Local View(局部小图:原图 < 50% 区域,6 张)送入 Student
  2. 训练逻辑:无标签自蒸馏(核心!不用负样本)
    同一张原图裁切出不同大小、不同位置的增强视图
    Teacher 编码全局视图 → 输出[CLS]向量做软标签(经过 sharpen 锐化)
    Student 编码多个局部视图 → 预测 Teacher 输出分布,交叉熵损失对齐两个分布
    搭配Centering 中心化防止模型坍塌(全部输出同一个向量),解决无监督坍缩问题
  3. 特征特点(和 CLIP 最大分水岭)
    Patch 稠密特征极强:多局部视图约束迫使每个 Patch 学习局部纹理、边缘、空间位置,像素级细节建模优秀,注意力天然聚焦物体轮廓
    全局[CLS]也有语义,但不靠文本监督,无原生零样本分类,没法直接用文字做推理
    冻结主干线性探测 / 直接 kNN 分类效果顶尖;分割、检测、深度估计稠密任务 SOTA
  4. 落地场景
    语义分割、目标检测、医学图像、卫星图像、图像相似度检索(图对图)、DINO-Score 图片细节保真打分、视觉微调骨干

(后续为无意义内容,后续删除)

W a W^a Wa W k W^k Wk W v W^v Wv
1.零样本学习(ZSL)
例子:
斑马=马的外形+条纹+xx
2.CLIP算法
CLIP算法——>利用自然语言包含的监督信号训练视觉模型
优势:无需标注,方便拓展数据集;学习的是多模态特征
于2021年,由OpenAI团队提出
(1)模型特点

  • 将图像与文字都映射到同一个向量空间中
  • 使用对比学习的方式进行预训练
  • 无监督学习——预训练,自己训练的时候是有大量样本的

(2)流程

  • 预训练
  • 2
  • 3

(3)结构
首先,该模型的输入是文字-图像对,目标就是匹配文字与图像,可以认为文字是与图像相关的描述,一个合格的模型应当使得相关的文字与图像在空间中的位置靠近(靠近与否根据内积决定),此时,文字进入文字特征提取器,而图像进入独立的图像特征提取器,经过统一化,会得到在同一空间中,分别描述文字与图像特征的向量,并根据两个余弦相似度可以得到一个N×N矩阵,目标函数取的是对角线相对于其他位置的大小,对角线上元素越大,其他位置元素越小,代表两个向量在空间中的位置越近,目标函数是最大化图像-文字对的余弦矩阵对角元素,最小化其他元素。
双塔结构
(4)模型推理过程
设置提示句

Few shot与Zero shot对比(shot是什么?)
3.DINO算法
(1)结构

  • 数据增强
  • student和teacher网络
  • 3
  • 4

(2)数据增强
对训练数据进行各种变换,生成新的样本——经过2个随机全局裁剪+10个不同视图图像
(3)Student网络和teacher网络
EMA是一种加权移动平均
4.GPT异常检测概述

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐