Skip to content

深度学习和其他神经网络

这个博客介绍的很详细

网址

https://www.zybuluo.com/hanbingtao/note/433855

扩散模型的

bi站教程,入门级 https://www.bilibili.com/video/BV1b541197HX/?spm_id_from=333.788.recommend_more_video.15&vd_source=6b2b1aa5a1407b74630d30ff81b19609https://github.com/yangqy1110/Diffusion-Models 这个介绍的非常详细,甚至效果非常好 https://aistudio.baidu.com/aistudio/projectdetail/4867936 这个分栏目讲了 https://openai.wiki/stable-diffusion.html

扩散模型

这里先给个jupyter文件的下载链接

CNN

  • AlexNet-一个CNN结构。
  • VGG-加层数,用3个3x3卷积核来代替7x7卷积核。
  • ResNet,“二阶”结构,训练内容改为残差,这样可以防止网络变差。


ResNet

Unet

Encoder:卷积+下采样(重复若干次),Decoder:反卷积+上采样(重复若干次)

数据预处理

图像的处理集中在像素,位置采用二维CNN来编码,相当于用窗来编码,缺点是感受野受限,一种理论认为感受野决定了它的智能程度, 依靠叠层来增加感受野不一定有效

语言的处理在于对语素进行编码,还有语言位置编码,也就是token和tokenizer

CLIP & CLAP

CLIP的英文全称是Contrastive Language-Image Pre-training,即一种基于对比文本-图像对的预训练方法或者模型。 CLAP是对Audio进行处理的类似方法

其他表示含义

Add & Norm 层:ADD表示残差层,NORM表示归一化

注意力机制

深度学习中的注意力机制通常可分为三类:软注意(全局注意)、硬注意(局部注意)和自注意(内注意)

  • Soft/Global Attention(软注意机制):对每个输入项的分配的权重为0-1之间,也就是某些部分关注的多一点,某些部分关注的少一点,因为对大部分信息都有考虑,但考虑程度不一样,所以相对来说计算量比较大。
  • Hard/Local Attention(硬注意机制):对每个输入项分配的权重非0即1,和软注意不同,硬注意机制只考虑那部分需要关注,哪部分不关注,也就是直接舍弃掉一些不相关项。优势在于可以减少一定的时间和计算成本,但有可能丢失掉一些本应该注意的信息。
  • Self/Intra Attention(自注意力机制):对每个输入项分配的权重取决于输入项之间的相互作用,即通过输入项内部的"表决"来决定应该关注哪些输入项。和前两种相比,在处理很长的输入时,具有并行计算的优势。

自注意力机制虽然考虑了所有的输入向量,但没有考虑到向量的位置信息。在实际的文字处理问题中,可能在不同位置词语具有不同的性质,比如动词往往较低频率出现在句首。


self-attention

  1. Query 一个随机分布
  2. Key 固定向量 是不是 onehot 位置也需要 onehot 编码
  3. Value 期望

利用 q ,k 计算 attention 的值 α ,再把所有的 α 经过 softmax 得到a^,最后对所有的 v 进行加权求和,权重是a^,得到 a1 对应的 self-attention 输出的 b1

q,k 的 attention 值可以采用点积、向量角度,MLP来计算

用一个例子来解释,Q 是特征信号,K 是位置编码(小波),归一化后,点积(正相关)原始信号 V

用 NLP 来解释,Q是查询向量。K是逐渐生成的句子,通常Bert中输入输出是512,qkv向量固定维度为64。V是上下文的Value,通过不停decoder(self-attension feed-forward)就可以一个key一个key生成长句子


decoding

数学角度

这些网络都是线性、齐次(有通解)、一次的。

感知器

神经元也叫做感知器,任何线性分类线性回归问题都可以用感知器来解决。感知器无法实现异或。激活函数用于实现非线性。这里的x0默认为1,w0作为偏置。


神经网络示意图

我个人的想法是若干个感知机配一对,分别训练,这样可以实现非线性效果,因为相当于将非线性区域划分了若干个线性区域。
一个常用的激活函数是sigmoid(x)=11+ex,即x=lnyln(1y),它的导数很好计算

(1)y=sigmoid(x)(2)y=y(1y)

基础神经网络

首先选择激活函数:

y=sigmoid(wTx)

我们假设每个训练样本为(x,t),其中向量x是训练样本的特征,而t是对应于节点i样本的目标值。
定义Error函数:

Ed12ioutputs(tiyi)2

于是

Edwji=Ednetjnetjwji=Ednetjiwjixjiwji=Ednetjxji

又因为

Ednetj=Edyjyjnetj=(tjyj)yj(1yj)δi=Edneti

输出层:

(3)δi=yi(1yi)(tiyi)

隐藏层:

(4)δi=yi(1yi)koutputsδkwki(5)δ(l)=y(l)(1y(l))WTδ(l+1)

计算完δ(l)

(6)WW+ηδxT

卷积神经网络CNN

首先选择激活函数(用的多)f(x)=max(0,x),有三点特点:1、梯度能够保持的很好,可以训练更深的网络,2、可以做到稀疏,3、算的快

循环神经网络RNN(Recurrent Neural Network)

语言模型是对下一个词出现的概率进行建模。那么,怎样让神经网络输出概率呢?方法就是用softmax层作为神经网络的输出层。

g(zi)=ezikezk

循环神经网络的训练算法:时序反向传播算法BPTT(Propagation Through Time)
一般来说,当神经网络的输出层是softmax层时,对应的误差函数E通常选择交叉熵误差函数,其定义如下:

L(y,o)=1NnNynlogon

权重数组W最终的梯度是各个时刻的梯度之和,即:

WE=k=1tWkE=WtE+Wt1E+Wt2E+...+W1E

长短时记忆网络LSTM和GRU (Gated Recurrent Unit)

其实,长短时记忆网络的思路比较简单。原始RNN的隐藏层只有一个状态,即h,它对于短期的输入非常敏感。那么,假如我们再增加一个状态,即c,让它来保存长期的状态,那么问题不就解决了么?LSTM的关键,就是怎样控制长期状态c。在这里,LSTM的思路是使用三个控制开关。第一个开关,负责控制继续保存长期状态c;第二个开关,负责控制把即时状态输入到长期状态c;第三个开关,负责控制是否把长期状态c作为当前的LSTM的输出。

递归神经网络RNN(Recursive Neural Network)

训练算法BPTS (Back Propagation Through Structure),适合处理树状结构的语义,缺点是需要人工标注,所以不太流行。

核心:概率转移

输出: 3-σ 输出,一般可以用正态分布 N(μ,σ2) 表示

CNN 是有限感受野模型


加深不能带来更大的感受野

参考文献:

Released under the MIT License.