人工智能

选择、填空、简答、计算

机器学习

分类

按数据标注情况分类:

  • 监督学习:数据有标签,直接反馈,预测结果。

  • 无监督学习:数据无标签,无反馈,寻找数据规律。

  • 强化学习:有良好定义,或给出回报值|惩罚值,让智能体在不同的状态下选择行为方式。

按问题分类:

  • 回归问题:函数输出标量(连续)
  • 分类问题:给定类别选择,输出一个正确选项(离散)

监督学习

model:y=b+wxiy=b+wx_i,b——bias,w——weight,xix_i——feature

训练集:第ii个标注数据记为(xi,yi)(x_{i},y_{i})。定义一个映射函数,ffxix_{i}的函数记为f(xi)f(x_{i})

损失函数

损失函数 Loss 计算xix_{i}真值yi)y_{i)}与预测值f(xi)f(x_{i})之间的差值函数。

在训练过程中优化映射函数,使得在训练数据集上得到“损失”之和最小

mini=1nLoss(f(xi),yi)min\sum_{i=1}^{n}Loss(f(x_{i}),y_{i})

经验风险与期望风险

  • 经验风险:训练集中数据产生的损失。越小说明学习模型对训练数据拟合程度越好。min1ni=1nLoss(yi,f(xi))min\frac{1}{n}\sum_{i=1}^{n}Loss(y_i,f(x_i))
  • 期望风险:当训练集中存在无穷多数据时产生的损失。越小,学习所得模型越好。x×yLoss(y,f(x))P(x,y)dxdy\int_{x\times y}Loss(y,f(x))P(x,y)dxdy

大数定律,样本容量趋于无穷,经验风险趋于期望风险。所以实践中用经验风险估计期望风险。

过学习与欠学习

训练集上的表现 测试集上的表现 结论
不好 不好 欠拟合
不好 过拟合
适度拟合

缓解过拟合:

  • 增加训练数据量。
  • 使用正则化。
  • 简化模型。
  • 限制模型复杂度。

欠学习:

  • 不能过度约束。

判别模型与生成模型

判别方法

判别方法直接学习判别函数 f(x)或者条件概率分布 P(Y|X)作为预测的模型,即判别模型。

关心的是对给定输入 𝑥 ,应该预测什么样的输出 𝑦 。

生成方法

生成方法由数据学习输入和输出联合概率分布 𝑃(𝑥,𝑦) ,然后求出后验概率分布 𝑃(𝑦|𝑥) 作为预测的模型,即生成模型。这里以朴素贝叶斯为例,我们要求的目标可以通过:

𝑃(𝑥,𝑦)=𝑃(𝑥𝑦)𝑃(𝑦)𝑃(𝑥,𝑦)=𝑃(𝑥|𝑦)𝑃(𝑦)

求出输入输出的联合概率分布,然后通过贝叶斯公式:

𝑃(𝑦𝑥)=𝑃(𝑥𝑦)𝑃(𝑦)𝑃(𝑥)𝑃(𝑦|𝑥)=\frac{𝑃(𝑥|𝑦)𝑃(𝑦)}{𝑃(𝑥)}

求出后验概率分布。

可以根据山羊的特征首先学习出一个山羊模型,然后根据绵羊的特征学习出一个绵羊模型。然后从这只羊中提取特征,放到山羊模型中看概率是多少,再放到绵羊模型中看概率是多少,哪个大就是哪个。

线性回归与线性分类

线性回归

回归分析:分析不同变量之间存在关系的研究。

一元线性回归

训练数据:D={(x1,y1),(x2,y2),...,(xn,yn)}D=\{(x_1,y_1),(x_2,y_2),...,(x_n,y_n)\}

学习模型:f(xi)=wxi+bf(x_i)=wx_i+b

损失函数:L(b,w)=i=1nloss(xi,yi)=i=18(yi(wxi+b))2L(b,w)=\sum^{n}_{i=1}loss(x_i,y_i)=\sum^{8}_{i=1}(y_i-(wx_i+b))^{2}

优化方法:

最小二乘法。对L(w,b)L(w,b)参数 w,b 分别求导,令其导数值为 0,在求取 w 和 b 的取值。

对 b 求偏导:

b=ywXb=\overline{y}-w\overline{X}

对 w 求偏导:

带入得出结果。

多元线性回归

数据特征维度 n:自变量个数,模型参数量为 n+1

也就是f(xi)=a0+aTxif(x_i)=a_0+a^Tx_i

线性分类-对数几率回归

sigmoid 函数-两类分类

y=11+ez=11+e(wTx+b)y=\frac{1}{1+e^{-z}}=\frac{1}{1+e^{-(w^{T}x+b)}}​

  • 概率形式输出:sigmoid 函数单调递增,值域为(0,1),输出可作为概率值。
  • 数据特征加权累加:这里 z 是输入数据 x 和回归函数的参数 w 内积结果(可视为 x 各维度进行加权叠加)
  • 非线性变化:在 0 附近变化幅度大。

属于正例:y=p(y=1x)=11+e(wTx+b)y=p(y=1|x)=\frac{1}{1+e^{-(w^{T}x+b)}}

属于负例:p(y=0x)=1f(x)=e(wTx+b)1+e(wTx+b)p(y=0|x)=1-f(x)=\frac{e^{-(w^{T}x+b)}}{1+e^{-(w^{T}x+b)}}

如果输入数据 x 属于正例的概率大于其属于负例的概率,即 p(y=1|x)> 0.5,则输入数据 x 可被判断属于正例。

损失函数:

L(θ)=(i=1nyilog(fθ(xi))+(1yi)log(1fθ(xi)))L(\theta)=-(\sum^n_{i=1}y_ilog(f_{\theta}(x_i))+(1-y_i)log(1-f_{\theta}(x_i)))

优化方法:对损失函数中的所有参数θ\theta求偏导,

θi+1=θiηαL(θ)αθi=θiηi=1n(yifθ(xi)xi)\theta_{i+1}=\theta_{i}-\eta\frac{\alpha L(\theta)}{\alpha\theta_i}\\=\theta_{i}-\eta\sum^n_{i=1}(y_i-f_\theta(x_i)x_i)

所有参数更新一遍:see all batches once=1 epoch

batch size*epoch=更新次数

softmax-多类分类

线性判别分析

Fisher 线性判别分析

类内方差小,类间间隔大

需要完全将这两类分开,如果直接投影到横纵坐标,这两类合适有重叠。所以需要有投影曲线。

mim_i为第 i 类样本的均值向量。

  • 最小化类内方差:最小化各个类别的协方差矩阵

  • 最大化类间距离:m1=wTm_1=w^Tm1,m2=wTm_2=w^Tm2m1m22||m_1-m_2||^2

得到最大化目标:J(w)=m1m22s1+s2J(w)=\frac{||m_1-m_2||^2}{s_1+s_2}

SVM 支持向量机

硬间隔

结构风险最小化解决过学习问题。

支持向量机:寻找最佳超平面,使得每个类别中距离超平面最近的样本点到超平面的最小距离最大。

超平面:wTx+b=0w^Tx+b=0,w 为超平面的法向量,与超平面的方向有关;b 为 bias 项,标量,决定超平面到原点之间的距离。

由于法向量可任意放缩使得平面不唯一,添加约束rminwTxi+b=1r_{min|w^Tx_i+b|}=1即例超平面最近的正负样本带入超平面方程后绝对值为 1.

满足等号成立的样本称为支持向量

minw,bw22=minw,b12wTwmin_{w,b}\frac{||w||^2}{2}=min_{w,b}\frac{1}{2}w^Tw

软间隔

允许部分错分给定的训练样本。

条件:每个类别中距离超平面最近样本到超平面的最小距离最大,不满足约束条件的样本数目尽可能少。

hinge 损失函数

minw,b12wTw+c×i=1nmax(0,1yi(wTxi+b))min_{w,b}\frac{1}{2}w^Tw+c\times\sum^{n}_{i=1}max(0,1-y_i(w^Tx_i+b))

显然,正确分类的yi(wTxi+b)>=1y_i(w^Tx_i+b)>=1,所以值记录分类错误的损失。

决策树

输入特征:每个非叶子结点。输出类别:叶子结点。

树形结构中每个非叶子节点表示对分类目标在某个属性上的⼀个判断,每个 分⽀代表基于该属性做出的⼀个判断,最后树形结构中每个叶子节点代表⼀种分类结果。

不断选择属性值对样本集进行划分,直至每个子样本为同一个类别

经验信息熵(衡量样本集合“纯度”的指标):

H(Y)=k=1KP(Y=yk)log2P(Y=yk)H(Y)=-\sum^K_{k=1}P(Y=y_k)log_2P(Y=y_k)

条件熵:

H(Ya)=v=1VP(a=av)k=1KP(Y=yka=av)log2P(Y=yka=av)H(Y|a)=-\sum^{V}_{v=1}P(a=a^v)\sum^{K}_{k=1}P(Y=y_k|a=a^v)log_2P(Y=y_k|a=a^v)

信息增益(划分后熵的变化):

IG(D,a)=H(Y)H(Ya)IG(D,a)=H(Y)-H(Y|a)

属性固有值:

IV(a)=v=1VP(a=av)log2P(a=av)IV(a)=-\sum^{V}_{v=1}P(a=a^v)log_2P(a=a^v)

信息增益率:

Gainratio(D,a)=H(Y)H(Ya)IV(a)Gain_ratio(D,a)=\frac{H(Y)-H(Y|a)}{IV(a)}

例子:

H(Y)=56log25616log216=0.65H(Y)=-\frac{5}{6}log_2{\frac{5}{6}}-\frac{1}{6}log_2{\frac{1}{6}}=0.65

H(Ya1)=46(1log21+0log20)26(12log212+12log212)=0.33H(Y|a_1)=-\frac{4}{6}(1log_21+0log_20)-\frac{2}{6}(\frac{1}{2}\log_2\frac{1}{2}+\frac{1}{2}\log_2\frac{1}{2})=0.33

H(Ya2)=36(1log21+0log20)36(23log223+13log213)=0.46H(Y|a_2)=-\frac{3}{6}(1log_21+0log_20)-\frac{3}{6}(\frac{2}{3}\log_2\frac{2}{3}+\frac{1}{3}\log_2\frac{1}{3})=0.46

IG(D,a1)=H(Y)H(Ya1)=0.650.33=0.32IG(D,a_1)=H(Y)-H(Y|a_1)=0.65-0.33=0.32

IG(D,a2)=H(Y)H(Ya2)=0.650.46=0.19IG(D,a_2)=H(Y)-H(Y|a_2)=0.65-0.46=0.19

所以选择a1a_1

IV(a1)=46log24626log226IV(a_1)=-\frac{4}{6}log_2{\frac{4}{6}}-\frac{2}{6}log_2{\frac{2}{6}}

⚠️为了避免对取值数目较少的属性有所偏好,算法通常先找出信息增益较高的属性,再从中选择增益率最高的。

集成学习 Ada Boost

核心思想:对于一个复杂的分类任务,将其分解为若干个子任务,然后将若干个子任务综合构建到一起,最终完成该复杂分类任务。

  • 初始化训练样本的权值分布,每个样本都具有相同权重。
  • 训练弱分类器,样本正确,再下一个训练集中,他的权值被降低,反之提高。用更新过的样本集训练下一个分类器。
  • 将所有弱分类组合成强分类器。加大分类误差率小的弱分类器权重。

训练过程:

  • 初始化权重:最初W1i=1NW_{1i}=\frac{1}{N}

  • 优先选择最小错误率的弱分类器

    错误率(如果Gm(xi)yiG_m(x_i)\neq y_iI(.)=1I(.)=1):

    errm=i=1NwmiI(Gm(xi)yi)err_m=\sum^{N}_{i=1}w_{mi}I(G_m(x_i)\neq y_i)

    也就是所有错的权重加和

    弱分类器权重

    am=12ln1errmerrma_m=\frac{1}{2}\ln{\frac{1-err_m}{err_m}}

    更新训练样本数据分布权重

    wm+1,i=Wm,iZmeamyiGm(xi)={Wm,iZmexp(am),Gm(xi)=yiWm,iZmexp(am),Gm(xi)yiw_{m+1,i}=\frac{W_{m,i}}{Z_m}e^{-a_my_iG_m(x_i)}=\left\{ \begin{aligned} \frac{W_{m,i}}{Z_m}exp(-a_m), G_m(x_i)=y_i \\ \frac{W_{m,i}}{Z_m}exp(a_m), G_m(x_i)\neq y_i \\ \end{aligned} \right.

    Zm=i=1Nwmiexp(amyi,Gm(xi))Z_m=\sum^{N}_{i=1}w_{mi}exp(-a_my_i,G_m(x_i))

    实质就是乘 exp(+&-)弱分类器权重后,再进行归一化使其加和为 1

  • 组合得到强分类器:

    H(x)=sign(am1A+am2B+am3C)H(x)=sign(a_{m1}A+a_{m2}B+a_{m3}C)

深度学习

梯度下降

gradient descent(梯度下降):

求 Loss 函数斜率,为正则向左,为负则向右,直到找到为 0。

w1w0ηαLαwIw=w0,ηw^1\leftarrow w^0-\eta\frac{\alpha L}{\alpha w}I_{w=w^0},\eta为学习率

  • 单变量:目标函数J(θ)=θ2J(\theta)=\theta^2,则为微分为2w2w,起点为θ0=1\theta^0=1。则θ1=θ00.4×2=0.2\theta^1=\theta^0-0.4\times2=0.2θ2=θ10.4×0.4=0.04\theta^2=\theta^1-0.4\times0.4=0.04,以此类推。
  • 多变量:目标函数J(θ)=θ12+θ22J(\theta)=\theta_1^2+\theta_2^2,则微分为J(θ)=<2θ1,2θ2>\triangle J(\theta)=<2\theta_1,2\theta_2>θ0=(1,3)\theta^0=(1,3),则θ1=(1,3)0.1×(2,6)=(0.8,2.4)\theta^1=(1,3)-0.1\times(2,6)=(0.8,2.4),以此类推。

θ\theta 代表所有参数,如果是在线性回归中,所有的w,bw,b 在每次更新中都要进行上述操作。

前馈神经网络

引入

这条蓝色的线可以拟合任何折线|曲线:

简单的一元线性回归到多元线性回归:

即矩阵运算:

引入多层,注意这里的 w 和 b 每层是不一样的

内容

只包括输入层、隐藏层和输出层。

输入数据与第一个隐藏层所有的神经元相互连接

每层神经元只和相邻层神经元相联。两个相邻层之间的神经元完全成对连接,但层内的神经元不相互连接。全连接

神经元:线性加权求和,>0 输出 1,<0 输出-1,解决二分类。

激活函数:使用非线性函数,对多个非线性函数进行组合,实现对输入信息的非线性转换。

  • sigmoid:在使用反向传播算法更新参数过程易出现导数过于接近 0 的情况,即梯度小时,并且随着网络深度增加会更加严重。

  • tanhf(x)=1e2x1+e2xf(x)=\frac{1-e^{-2x}}{1+e^{-2x}},在定义域单调递增,值域为(-1,1)。tanh 函数在原点梯度更大,使用更容易收敛。同样有梯度小时问题。

  • ReLU

    f(x)={0,x<0x,x0f(x)=\left\{ \begin{aligned} 0,x<0 \\ x,x\geq0 \\ \end{aligned} \right.

    大于等于 0 导数为常数,克服梯度消失问题,小于 0 总是 0,参与分类等任务的神经元稀疏,克服过拟合。

  • softmaxyi=exij=1Kexjy_i=\frac{e^{x_i}}{\sum^{K}_{j=1}e^{x_j}},同样值域(-1,1)

损失函数

  • 均方误差MSE=1ni=1n(yiy^i)2MSE=\frac{1}{n}\sum^n_{i=1}(y_i-\hat y_i)^2

  • 交叉熵H(p,q)=i=1n(p(xi)logq(xi))H(p,q)=-\sum_{i=1}^n(p(x_i)\log q(x_i))p(xi)p(x_i)为真实分布的概率,q(xi)q(x_i)为机器预测的概率分布。为了实现不同类别的模型比较——统一的比较方式熵(不确定到确定的难度)。

    求熵:

    p 和 q 是两个概率模型!!!

    是猫*机器判断是猫的概率+不是猫*机器判断不是猫的概率

卷积神经网络 CNN

善于图像识别

解释版本 1

输入:三维张量(维数大于 2 的矩阵)——图片的长,宽,和 rgb 三个颜色通道

矩阵中每个数值:颜色的强度

每个 neural 无需覆盖整个图像,看 pattern(特征:嘴…)

每个 neural 关注一个感受野 自定义的!!(receptive field 之间可重叠,感受野大小不同,通道数不同,非正方形):

捕捉到图像中的局部特征而不受其位置的影响

卷积核:有一组固定的权重(可以理解为要找的目标值)。

通过卷积核与图像(感受野:输入图像中该点及其领域区域点的取值)进行逐元素相乘然后相加。

  • 步长:每次滑动的位置步长
  • 卷积核大小 :changjian 3×33\times3
  • 填充值 padding:在外围边缘补充若干圈 0,方便从初始位置以步长为单位可以刚好滑到末尾位置,通俗地讲就是为了总长能被步长整除。

典型设置

  • 每个感受野对应多个 neural

  • 共享参数:不同感受野的神经元共享参数(filter,滤波器),即 weight 一模一样。

解释版本 2

有多个 filter(其中的数值为待学习的未知参数),不断滑动生成 64 层的 feature map 特征图(可以看成一个新的图片),第二层的 filter 则为3×3×643\times3\times64。filter 的高度就是影响的 channel。

Q:如果想捕捉图像中较大感受野的 pattern,比如鸟嘴, 3x3 大小的卷积核是否足够?为什么?

A:不会。第二层时3×33\times3实质对应着原始图像是5×55\times5(如果步长为 1),所以会捕捉到。

池化

降采样——一组选一个最大|最小|平均把图像变小。

convolution——pooling 交替运行

CNN 中的卷积操作不满足尺度和旋转不变性(需要数据增广)

序列数据模型

向量集输入

多个向量输入,变长序列

单词 eg:

  • One-hot Encoding:开一个全世界所有词汇数大小的向量,index=0 处为 1 表示 apple
  • Word Embedding(有语义):

语音(定长描述为一个向量),图数据(每个结点描述为一个向量),分子

输出

  • 一对一输出(文字处理,语音识别,图):每个向量对应一个 label

  • 多对一输出(判断评价):多个向量对应一个输出

  • 多对多输出:机器自己决定

一对一输出:

Q:每个向量放入全连接?——同样的东西输出相同?——上下文信息?

A:将相邻的上下文作为一个 window 放入全连接

想要考虑整个 sequence(不定长?)windows 开非常大,参数很多且容易 overfit。\downarrow self-attention 解决

深度学习应用

优化问题:加深网络无法得到更小的训练损失。

自注意力机制

使用场景

输入一整个 sequence,考虑整个句子后然后得到同样多个向量,然后丢进全连接(full connect),出来后再 attention+FC 一次

self-attention 处理整个句子上下文

原理

Q 表示查询向量,K 表示关键向量,V 表示数值向量。

  • 从 input 中找出跟a1a_1相关的向量,考虑整个句子,α\alpha 作为关联度?

    求关联度:

    • dot-product:两个向量分别乘不同的矩阵然后再点乘
    • additive:两个向量分别乘不同的矩阵,串起来然后 tanh

  • 根据 attention score 抽取重要信息,将aia^iwvw^v然后,让其与a1,1a_{1,1}'相乘然后结果相加(bib_i 的求解是同时进行的)

矩阵角度:

拼起来一次性求解

以上所有的单词都是同等地位的,缺失了位置信息

位置编码

  • 公共设计为每个位置设置一个位置向量eie_i

  • 从数据中学习的

CNN vs self-attention:

CNN:感受野

self-attention:上下文为整张图像

应用

seq2seq:输入输出均为序列,输出序列的长度由模型来确定

语音识别,翻译,语音翻译,语音合成,聊天机器人

怎么做:\downarrow

Transformer

Encoder

输入一排向量,输出一排向量。实际上 RNN,CNN 都可以实现,Transformer 中用的是 self-attention。

这里的 block 不能等同于 layer,而是相当于好几层 layer 做的事情。self-attention——FC。

实际 Transformer 中使用的 encoder:

进行 self-attention 时,将输出的 a 再用 residual 加上原来 input 的 b,在进行 layer norm 标准化;FC 中同时也要加上 FC 输入的向量,然后 norm。

Decoder

Autoregressive (AT)

encoder 的输出向量输入到 decoder 中,同时输入 start 的特殊 token 代表输出开始,第一个输出的向量经过了 softmax,是一个包含全中文字符的向量表(概率最高的就是输出的字)。

然后将第一个输出的向量作为额外输入到 decoder 中。

Transformer 的 Decoder:

Masked-self-attention 在输出时隐藏在其之后的向量,输出一个一个产生。

何时停下来?

在中文表中增加一个 END 的段,如果这个概率最高就结束了。

Non-autoregressive (NAT)

如何知道输出长度?

  • 额外一个预测器预测输出的长度
  • 输出一个足够长的序列,取 END token 前的部分

优点:并行,可控生成长度,生成稳定

缺点:通常比 AT 差

Encoder-Decoder

Training

事先输入 ground truth,获得每个字的读音。

在输入时给正确答案 ground truth。

Bert

Encoder 的架构与 Transformer 相同。

Mask Input

看左右两边的 sequence,掩盖要预测的,使用 mask(special token)或者 random token 实现。使用的 Transformer 没有任何限制(可以读取之后的向量):

Next Sentence Prediction

读入两个句子,用 sep 连接,然后只读取 CLS 输出的向量,判断这两个句子是不是连接的。

通过 pre-train 生成做“填空题”的 Bert 模型,通过微调,实际可以完成与其无关的下游任务 downstream tasks

微调 Fine-tune

Case1 输入句子输出类别

只关注 CLS 输出的向量,经过 softmax(图上省略)输出类别。

用已经经过 pre-train 的 Bert(**不是随机初始化的!!**是已经会做填空题的)加上一些 Sentence+判断类别的标注资料微调。

Case2 输入句子输出句子(词性标注)

Case3 输入多个句子输出一个类别

NLI 判断:从前提是否可以得出假设,是否矛盾。

Case4 回答问题(答案为给出的文章片段)

输入文章和问题,输出两个正整数,根据索引从文章中截取

只需训练两个向量,即起始位置和结束位置:

工作原理

不同语境下的同一个字 bert 出的向量不一样,根据语境

GPT

省去 find to 的过程。小样本学习,单样本学习,零样本学习

使用者输入即直接给模型输入:

无监督学习

k 均值聚类

n 个无标注信息的数据聚类到 k 个集合。

n 个 m 维数据

两个 m 维数据的欧氏距离:

d(xi,xj)=(xi1xj1)2+(xi2xj2)2+...+(ximxjm)2d(x_i,x_j)=\sqrt{(x_{i1}-x_{j1})^2+(x_{i2}-x_{j2})^2+...+(x_{im}-x_{jm})^2}

越小越相似。

  • 初始化:选择 k 个分散的数据作为聚类质心
  • 对数据进行聚类:计算欧式距离,放入距离最近的聚类质心的集合中
  • 更新聚类质心:根据集合中所有点取平均,如果变化很小或没有改变则结束

在这里插入图片描述

不足:

  • 需要实现确定聚类数目
  • 需要初始化聚类质心,且其对结果有较大影响
  • 迭代执行,开销大

主成分分析

特征降维方法:数据应向方差最大的方向进行投影,使得数据所蕴含的信息没有丢失。

红优于绿

主要思想:将 n 维特征数据映射到i维空间中,去除原始数据之间的冗余性。

协方差:

cov(X,Y)=1ni=1n(xiE(X))(yiE(Y))cov(X,Y)=\frac{1}{n}\sum^n_{i=1}(x_i-E(X))(y_i-E(Y))

衡量两个变量之间的相关度

算法过程:

  • 数据预处理 xi=xiμσx_i=\frac{x_i-\mu}{\sigma}μ\mu 为平均值, σ\sigma 为标准差。
  • 计算样本的协方差矩阵 1n1XTX\frac{1}{n-1}X^TX
  • 求得协方差矩阵的特征向量和特征根
  • 取前 I 个最大特征根所对应的特征向量组成映射矩阵

img

生成式人工智能

同一输入可以有不同的输出

自编码器

尽可能重建。输入的图片降维转为向量后再转回高维图片

用于下游任务

化繁为简:如何从2×22\times2生成3×33\times3 的图片向量?

如果只有两种,那么只需要 0,1 两种状态即可表示。

可能图片出来的样式只能几种,通过压缩来实现

生成模型

  • 无条件生成:通过简单的分布获得高维向量的复杂分布
  • 带条件生成:上面的情况增加条件

变分自编码器

VAE 变分自动编码_vae 李宏毅-CSDN 博客

去噪自编码器:输入加入噪点的,输出没有噪点的——联系 Bert 中的 mask 就是一种 embedding

变分自编码器:

如果一张半月一张满月,期待生成 3/4 月的图,但使用自编码器是失真图,所以我们引入噪声,掩盖失真的空白编码点。把噪音无限拉长,使得对于每一个样本,它的编码会覆盖整个编码空间,不过我们得保证,在原编码附近编码的概率最高,离原编码点越远,编码概率越低。图像的编码就由原先离散的编码点变成了一条连续的编码分布曲线

核心思想:将图像编码由离散变为连续

  • mim_i:直接产生原有的编码
  • σ\sigma :控制噪音干扰程度的编码,为随机噪音码分配权重。exp 确认权重是正值 (要对他做限制,有最小值)
  • cic_i:加入噪点的图像编码

为了保证图片质量高,肯定希望噪音对自身生成图片的影响小,所以分配权重小,σ\sigma 无限区域负无穷。就有限制编码器走这样极端路径的作用,这也从直观上就能看出来,exp()-(1+)在=0 处取得最小值,于是()就会避免被赋值为负无穷大。

高斯混合模型

任何一个数据的分布,都可以看做若干高斯分布的叠加。

直接用每一组高斯分布的参数作为一个编码值实现编码

则原始的分布 P(X)为:(P(x|m)为结合的几率)

nP(m)P(xm)\sum_{n}P(m)P(x|m)

这种编码方式对应的是之前提到的离散的、有大量失真区域的编码方式,需要改进成为连续有效的编码,z~N(0,1),如下面所示:

P(x)=zP(z)P(xz)dzP(x)=\int_{z}P(z)P(x|z)dz

由于 P(z)P(z) 是一致的,P(xz)P(x|z) 未知,而xzN(μ(z),σ(z))x|z\sim N(\mu(z),\sigma(z)) ,要求解的是 μ\muσ\sigma 两个函数的表达式。但是过于复杂,所以引入两个神经网络。

  • Decoder:求解 μ\muσ\sigma 两个函数
  • Encoder:求解 q(zx)q(z|x) ,q 可以代表任何分布

我们希望 P(x)越大越好,这等价于求解 maximumL=xlogP(x)maximum L=\sum_xlogP(x)

VAE 本质没有学习生成真实图像,VAE 可能只是对训练数据的记忆和模仿,难以产生全新的图像

扩散模型

概念

通过不断的 denoise 将噪音去除,index 倒序。雕塑

Denoise

反复使用同一个 denoise,还要输入 noise 的严重程度,即 index。

根据图片和 index 产生一个全是噪音的向量,然后两者相减:

训练 Noise Predicter

Q:真实噪音的 ground truth 如何产生?

A:前向&扩散过程,每次加入噪声。再逆向推理这样的输出和 step x 应该是怎样的输入(噪声)

考虑文字 text-to-image

将文字额外输入 Denoise 中的 Noise-Predicter

训练怎么改?——额外添加文字输入

数学原理

训练过程

实际的训练过程是根据α\alpha的大小直接决定混入的噪音大小,一次性混入噪音!!!t 是加噪的 index

atx0+1atϵθ(xt,t)\sqrt{\overline{a_t}}x_0+\sqrt{1-\overline{a_t}}\epsilon_{\theta}(x_t,t)

产生图

减去噪声后,还要再生成一次噪声加入到图片中。

极大似然估计法

稳定扩散模型

框架:文本编码器 encoder——生成式模型生成中间压缩产物——解码器生成大图

三个 model 单独训练

文本解码器

diffusion model(扩散模型)的大小对模型好坏反而影响不大,主要是编码器中的所使用的模型。

图像生成模型评价指标
FID

将图片丢进 CNN 然后将输入和输出的图像比对,计算点之间的距离,越小越好。

CLIP

不同编码器得出的向量越相似,CLIP 值越高

生成式模型

denoise

训练过程

如果是隐变量,noise 不再像扩散模型一样加在图片上,而是加在中间产物上

运用模型

不断去噪声

解码器

不需要影像文字成对的资料。

中间产物:小图

成对的小图大图做训练

中间产物:隐变量

自编码器

生成对抗网络

输入固定的 x,但是会随机生成 z,生成的结果不同的 y。——让机器有创造力,产生不同的回答!

生成器与判别器

不断地“对抗”,生成器越来越精细,判别器越来越严格

算法

  • 初始化生成器和判别器

  • 固定生成器的值,更新判别器(学习目标是让真实图像输出高分,生成图像输出低分;实质就是分为两类)

  • 固定判别器,更新生成器(判别器生成的数值越大越好)

  • 迭代训练

理论分析

PGP_G 为生成器生成出来的集合,PdataP_{data} 为真实的集合,将他们的之间的距离定义为 Loss 函数。

无需知道内容,直接进行采样

判别器:尽可能区分训练出来的和真实的

D=argminGmaxDV(G,D)D^*=argmin_{G}max_{D}V(G,D)

强化学习

即告诉机器结果是好是坏。

chatgpt:自监督学习+强化学习

  • 智能体 agent
  • 环境 environment
  • 状态 state:不是机器人当前的状态,而是环境所给的状态,即智能体所看到的(eg:看到了一杯水)
  • 动作 action:智能体影响环境
  • 奖励 reward:环境根据机器人所做的 action 给出评价

智能体为了不断改进 action 以 maximize 奖励。

AlphaGo:环境——对手,状态——当前局面,动作——下一步落子位置,奖励——赢|输|什么都没发生

supervised:对应局面获得应该下在哪里

reinforcement:在 experiment 学习

两个 agent 对话,然后用判别器判别和真人说的像不像

难点:

  • reward delay:开火之前的移动也很重要,但没有任何 reward
  • 智能体的动作同样影响看到的情景

课上讲无模型强化学习

基于策略的强化学习

要训练的是通过 state 应该有什么样的 action。

基于价值的强化学习

价值函数:表示智能体在时刻 t 处于状态 s 时,按照策略 π 采取行动时所获得回报的期望。衡量了某个状态的好坏程度,反映了智能体从当前状态出发后还能获得多少好处。

贝尔曼方程:

Vπ(st)=γVπ(st+1)+R(st,a,st+1)V_{\pi}(s_t)=\gamma V_{\pi}(s_{t+1})+R(s_t,a,s_{t+1})

γ\gamma 折扣因子,Vπ(st+1)V_{\pi}(s_{t+1}) 下一状态的价值,R(st,a,st+1)R(s_t,a,s_{t+1}) 到达下一状态的奖励值,其中 aa 为策略。

利用贝尔曼方程联立求解:

动作—价值函数:只能题在时刻 t 处于状态 s 时,选择了动作 a 后,在 t 时刻后根据策略 π 采取行动所获得回报的期望。

qπ(s,a)qπ(s,a)+a[R+γmaxaqπ(s,a)qπ(s,a)]q_\pi(s,a)\leftarrow q_\pi(s,a)+a[R+\gamma max_{a'}q_\pi(s',a')-q_\pi(s,a)]

只给了价值函数:

qπ(s,a)=sSPr(ss,a)[R(s,a,s)+γVπ(s)]q_\pi(s,a)=\sum_{s'\in S}Pr(s'|s,a)[R(s,a,s')+\gamma V_\pi(s')]

策略优化定理

π(s)=argmaxaqπ(s,a)(sS)\pi'(s)=argmax_aq_\pi(s,a)(对于任意s\in S)

Q-learning

用一张表存储在各个状态下执行各种动作能够带来的价值qπ(s,a)q_\pi(s,a)

训练过程:

  • 初始化 qπq_\pi 函数

  • 循环

    • 初始化 s 为初始状态
    • 循环
      • a=argmaxaqπ(s,a)a=argmax_aq_\pi(s,a')
      • 执行动作 a,观察奖励 R 和下一个状态 s’
      • 更新 qπ(s,a)qπ(s,a)+a[R+γmaxaqπ(s,a)qπ(s,a)]q_\pi(s,a)\leftarrow q_\pi(s,a)+a[R+\gamma max_{a'}q_\pi(s',a')-q_\pi(s,a)]
      • sss\leftarrow s'
    • 直到 s 是终止状态
  • 直到 qnq_n 收敛

Final

选择、填空、简答、计算

大题

SVM 支持向量机

思想:寻找最大分类间隔的超平面。

支持向量:离超平面最近的正负样本,只有支持向量才会对分类边界产生作用。

决策树

步骤

以信息增益(选大)|信息增益率(选大)|基尼指数为评判标准(选小)

  1. 求因变量的经验信息熵(衡量样本集合“纯度”的指标):

    H(Y)=k=1KP(Y=yk)log2P(Y=yk)H(Y)=-\sum^K_{k=1}P(Y=y_k)log_2P(Y=y_k)

  2. 求各个随机变量的条件熵(每个随机变量有多少种值就有几项):

    H(Ya)=v=1VP(a=av)k=1KP(Y=yka=av)log2P(Y=yka=av)H(Y|a)=-\sum^{V}_{v=1}P(a=a^v)\sum^{K}_{k=1}P(Y=y_k|a=a^v)log_2P(Y=y_k|a=a^v)

  3. 求信息增益,哪个大选择哪个划分:

    IG(D,a)=H(Y)H(Ya)IG(D,a)=H(Y)-H(Y|a)

  4. 求各个随机变量的固有值(类似于求因变量的信息熵):

    IV(a)=v=1VP(a=av)log2P(a=av)IV(a)=-\sum^{V}_{v=1}P(a=a^v)log_2P(a=a^v)

    进而求信息增益率:

    Gainratio(D,a)=H(Y)H(Ya)IV(a)=IG(a)IV(a)Gain_ratio(D,a)=\frac{H(Y)-H(Y|a)}{IV(a)}=\frac{IG(a)}{IV(a)}

  5. 基尼值(有几种类型减几次,随机抽取两个样本,其类别标记不一致的概率。如果每个都不一样,则为 0):

    Gini(D)=k=1Kkkpkpk=1k=1Kpk2Gini(D)=\sum^K_{k=1}\sum_{k'\neq k}p_kp_{k'}=1-\sum^K_{k=1}p_k^2

    属性 a 的基尼系数(在 a=某种属性下因变量所占的比例和其他(即使可以分成三类,另外两类也看做同一类处理):

    Gini_index(D,a)=v=1VP(a=av)Gini(a=av)Gini\_index(D,a)=\sum^V_{v=1}P(a=a^v)Gini(a=a^v)

  6. 选基尼指数小的作为分类标准。

继续循环,注意第一次分类,分成两类后,每类的数据集大小改变,在第一次分类等于是或等于否的条件下!!!

剪枝

  • 预剪枝:提前终止某些分支的声场
  • 后剪枝:生成一颗完全数,再回头剪枝

减掉以后准确率提升

Ada Boost

  1. 初始化训练样本的权值分布,每个样本具有相同权重,为 1N\frac{1}{N}

  2. 优先选择最小错误率的弱分类器

    错误率(如果Gm(xi)yiG_m(x_i)\neq y_iI(.)=1I(.)=1):

    errm=i=1NwmiI(Gm(xi)yi)err_m=\sum^{N}_{i=1}w_{mi}I(G_m(x_i)\neq y_i)

    也就是所有错的样本权重加和

    弱分类器权重

    am=12ln1errmerrma_m=\frac{1}{2}\ln{\frac{1-err_m}{err_m}}

    更新训练样本数据分布权重

    Wm+1,i=wm,izmeamyiGm(xi)W_{m+1,i}=\frac{w_{m,i}}{z_m}e^{-a_my_iG_m(x_i)}

    其中,ZmZ_m 是归一化因子

    Zm=i=1Nwm,ieamyiGm(xi)Z_m=\sum^N_{i=1}w_{m,i}e^{-a_my_iG_m(x_i)}

    实质就是分对Zm=exp(am)Z_m=exp(-a_m),分错为exp(am)exp(a_m),然后将每一个权重乘对应分没分对加和得到ZmZ_m,最后再求Wm+1,iW_{m+1,i}

  3. 组合得到强分类器:

    H(x)=sign(am1A+am2B+am3C)H(x)=sign(a_{m1}A+a_{m2}B+a_{m3}C)

强化学习

价值函数:表示智能体在时刻 t 处于状态 s 时,按照策略 π 采取行动时所获得回报的期望。衡量了某个状态的好坏程度,反映了智能体从当前状态出发后还能获得多少好处。

贝尔曼方程:

Vπ(st)=γVπ(st+1)+R(st,a,st+1)V_{\pi}(s_t)=\gamma V_{\pi}(s_{t+1})+R(s_t,a,s_{t+1})

γ\gamma 折扣因子,Vπ(st+1)V_{\pi}(s_{t+1}) 下一状态的价值,R(st,a,st+1)R(s_t,a,s_{t+1}) 到达下一状态的奖励值,其中 aa 为策略。

动作—价值函数:只能题在时刻 t 处于状态 s 时,选择了动作 a 后,在 t 时刻后根据策略 π 采取行动所获得回报的期望。maxaqπ(s,a)max_{a'}q_\pi(s',a') 为移动到的位置的价值的最大值。

qπ(s,a)qπ(s,a)+a[R+γmaxaqπ(s,a)qπ(s,a)]q_\pi(s,a)\leftarrow q_\pi(s,a)+a[R+\gamma max_{a'}q_\pi(s',a')-q_\pi(s,a)]

只给了价值函数:

qπ(s,a)=sSPr(ss,a)[R(s,a,s)+γVπ(s)]q_\pi(s,a)=\sum_{s'\in S}Pr(s'|s,a)[R(s,a,s')+\gamma V_\pi(s')]

策略优化定理:优化后选择回报更大的策略。

π(s)=argmaxaqπ(s,a)(sS)\pi'(s)=argmax_aq_\pi(s,a)(对于任意s\in S)

Q-learning

用一张表存储在各个状态下执行各种动作能够带来的价值qπ(s,a)q_\pi(s,a)

训练过程:

  • 初始化 qπq_\pi 函数
  • 循环
    • 初始化 s 为初始状态
    • 循环
      • a=argmaxaqπ(s,a)a=argmax_aq_\pi(s,a')
      • 执行动作 a,观察奖励 R 和下一个状态 s’
      • 更新 qπ(s,a)qπ(s,a)+a[R+γmaxaqπ(s,a)qπ(s,a)]q_\pi(s,a)\leftarrow q_\pi(s,a)+a[R+\gamma max_{a'}q_\pi(s',a')-q_\pi(s,a)]
      • sss\leftarrow s'
    • 直到 s 是终止状态
  • 直到 qnq_n 收敛

简答

(1)该标准化项与参数 w 无关,所以对 w 求导永远为 0,对 w 的优化求解没有作用。

(2)L2 标准化通过惩罚过大的参数 w 来避免过拟合,λ\lambda 小于 0 意味着该损失函数倾向于更大的 w,从而激励过拟合,失去了标准化的作用。

深度学习与机器学习的区别?

  • 数据:深度学习适合处理大数据,机器学习算法更适用于小数据
  • 硬件:深度学习需要大量计算资源,比如 GPU,机器学习对计算资源的需求相对较低
  • 特征构建:深度学习从数据中学习特征,机器学习很多特征都需要手工构造
  • 解决问题方式:深度学习通常利用“端到端”的方式构建模型,机器学习通常将问题分为几个步骤,每个步骤逐一解决,然后将结果组合。

在前馈神经网络中,所有的参数能否被初始化为 0?如果不能,能否全部初始化为其他相同的值?原因是什么?

不能,也不能同时初始化为其他相同的值。如果被初始化相同的值后,在误差反向传播过程中,同一层的神经元所接受到的误差都相同,更新后这些参数的值仍然相同。不管经过多少轮迭代,同一层的神经元参数保持相同,因此无法学习到不同特征的重要程度,失去了学习特征的能力。

VAE 推导

说明在 K—均值聚类算法执行过程中,其目标函数i=1kxGixci2\sum^k_{i=1}\sum_{x\in G_i}||x-c_i||^2 是严格递减的,并解释为什么 K—均值聚类算法可以确保在有限步内收敛。

在每一次迭代中,目标函数都在逐步减小,数据点被分配到最近的簇中心后,簇中心会根据簇中的数据点重新计算,以最小化目标函数,使得目标函数的值不断减小。数据点和簇中心的数量是有限的,所以可以在有限步内收敛到最优解。

请回答以下关于自编码器相关问题。

(1)最小化重构误差的思想可以引申到(深度)自编码器。当采用一层线性编码器和一层线性解码 器的自编码器结构,并用梯度下降法通过最小化重构误差目标函数对编解码器参数进行优化 时,其结果跟佐佃佁得到的结果是否相同?为什么?

(2)变分自动编码器与传统自动编码器相比具有什么特点?请解释变分自动编码器如何实现潜在空 间的连续性和可解释性。

(1)不同。从目标函数思考。PCA 需要正交约束,自编码器通常不需要。

(2)自编码器通常用于特征降维和还原,而变分自编码器面向生成任务,隐空间实现了从数值编码到数据分布的变化。

文章作者: bubble
文章链接: http://example.com/2024/07/24/人工智能/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 bubble's blog