深度学习基础

深度学习基础

1.深度学习要解决的问题

神经网络不应该称之为一种算法,而是当成特征提取的方法




深度学习就是去学什么样的特征是最合适的,有了特征之后,我们可以加其他东西,比如加LR(逻辑回归)做分类,或者传到SVM中...

深度学习解决的一个核心就是怎么样去提取特征

2.深度学习应用领域


医学领域

Ai换脸



3.计算机视觉任务


300表示高,100表示宽,3表示颜色通道,比如使用RGB三种颜色


4.视觉任务中遇到的问题









5.得分函数

w表示权重参数,起到决定性的作用


b表示偏置参数,起到一个微调的作用

6.损失函数的作用

3表示三个类别,4表示猫有四个像素点

每个像素点要有一个权重

权重有大有小,比如2.1比较大,表示在狗这个类别中,第三个像素点比较重要

这个权重矩阵是优化而来的

比如一开始我可以随机构建一个3*4的矩阵

我们的神经网络就是做一个任务,什么样的W适合当前的任务,我就去改变这个W

上面我们的得到的结果就是不好的,比如图片明明就是猫

得到的分却是负的

这里我们就需要一个评判标准来判断好还是不好

我们神经网络既可以做分类,也可以做回归

唯一的区别就在于整个损失函数是怎么定义的

网络结构是不会变的,做不同的任务就是损失函数不同而已

损失函数,我们希望它越低越好,为0的时候代表没有损失

这里的+1表示我们的一个容忍程度

损失函数用来衡量当前权重参数,做完一个结果的意思

7.前向传播整体流程

A百分比产生过拟合,只关注一个局部

B则均匀分布到一个整体中

Lambda越大,表示不希望过拟合

Lambda小,表示意思意思,大概的消减一下变异

有输入数据x和权重参数w,通过得分函数f,得到了分值s

选择一个损失函数(hinge loss),加上正则化惩罚项,最后得到当前的损失L

说到底,最后就是得到一个得分

跟我们的分类任务还是有点差距,分类任务要得到的我们属于猫这个类的一个概率值

我们将一个猫输入其中,得到分值,比如cat是3.2,car是5.1

我们发现3.2和5.9之间的差异其实很小,我们要放大他们之间的一个差异

这里我们通过exp做一个映射,放大他们之间的差距

下面我们将其转换为概率值,做一个归一化

就是24.5/(24.5+164.0+0.18)=0.13

我们只考虑属于正确类别的概率值,我们希望当前输入的猫的概率越接近1越好

对于损失函数来说,概率值越接近1越没有损失,概率值越接近0损失越大(做的烂)

总结

输入一个数据,得到一个得分值,得分值做一个exp映射,使其更加明显一些

之后做一个归一化,归一化后用一个对数函数求他的损失

分类任务就由概率值去计算他的一个损失

回归任务就有得分值去计算一个损失


8.反向传播计算方式








9.神经网络整体架构







绿色是前向传播的值,红色是反向传播偏导的值



10.神经网络架构细节

Input layer有多少圈,代表我们的输入特征有多少个

比如一个人,有年龄age,体重w,身高h三个特征,有三个圈

一个图片由3072个像素点,有3072个特征,3072个圈

我们无论对数据做什么变换,都是为了让计算机更认识它

比如我们现在有三个特征年龄age,体重w,身高h,计算机可能不太认识他们

我们隐藏层1就将我们的三个特征变为四个特征,使计算机更认识这个数据

这里1就表示为age * 0.1 + w * 0.2 +h * 0.3 , 2、3、4类推

这里的0.1、0.2、0.3并没有什么实际的含义,只是一个数值

输入层和隐藏层之间的线就是我们的权重参数W1

输入层就是输入数据,batch就是我们一次训练多少数据,一次去迭代几个数据

如果我们指定batch为1,就一个数据一个数据玩

比如我们的输入层是一个1 * 3表示一个样本三个特征

W1就是一个3 * 4的权重参数矩阵,W2类似

到隐藏层2后,我们认为这里作为特征已经足够了,当前我们就使用隐藏层2最终得到的特征得到一个输出结果,我们看一下得到预测结果最终等于多少

我们的神经网络得到的结果好还是不好就是看这里的W1、W2、W3

我们这里不能用一个W4代替W1W2W3

因为我们在W1 * W2和W2 * W3之间还要做一个非线性变换(我们找一个非线性函数做映射)

比如我们这边使用非线性函数max

11.神经元个数对结果的影响

一般情况下,神经元个数越多,得到的过拟合风险越大

神经多的时候,运行速度相对比较慢

神经元越多 对其约束就越大 在可视化图像中能更好的把正确结果分离出来 但太多就会导致过拟合现象

https://cs.stanford.edu/people/karpathy/convnetjs/demo/classify2d.html

可以进行可视化展示的一个神经网络

12.正则化和激活函数

处罚力度越小,越符合训练集的结果

神经元越大,过拟合的风险越大


Sigmoid函数现在不用了,因为在参数较大或者较小时,梯度难以计算,

约等于0(梯度消失)

13.神经网络过拟合解决方法

拿到数据后不能直接输入到神经网络中,要做一个标准化的操作

将数据变到一个中心化(每一个数据的实际坐标值减去均值,得到以圆点为中心对称的结果)

接着就进行数据各个维度的放缩或者扩充(除上它的标准差),

调节神经网络中,最好不要让不同的权重参数差异过大

我们希望权重参数尽可能稳定一些

我们将初始化后的结果*0.01后

得到的初始化后的结果也都比较小


在神经网络训练的阶段中,在每一层杀死一部分神经元

画×的表示这一次的前向传播和反向传播就不带你玩了,保持原来的参数不变

参与的哪些去更新,去变化

这个×是在每一次训练中随机选择的

这里的drop-out相当于一个比例,比如说50%

指在这一次训练中,有一半的神经元是不参与到训练中的

测试阶段是没有必要的

14.卷积神经网络应用领域







15.卷积的作用

二维到三维

我们输入的数据

比如一个图片,我们在NN中输入的就是784个像素点

在CNN中我们就是输入一个原始的图像28 * 28 * 1

卷积是提取特征,池化是压缩特征

全连接层通过一组权重参数将输入层和隐藏层连接在一起

全连接层(fully connected layers,FC)在整个卷积神经网络中起到"分类器"的作用。如果说卷积层、池化层和激活函数等操作是将原始数据映射到隐层特征空间的话,全连接层则起到将学到的"分布式特征表示"。映射到样本标记空间的作用。

这里我们还是找到最好的权重矩阵W1使我们特征提取的效果最好

绿色就是特征图,图中的数据就是我们特征提取的一个结果

16.卷积特征值计算方法

RGB三颜色通道 3232 3 3分为3部分;每个颜色通道分别作计算;

最终把每个通道的卷积结果累加


上面实际上只是演示了一个通道,例如B通道

实际上我们要演示一个三通道的,我们要将三个通道的值分别加在一起

filter的前两个值表示每3 * 3的区域就要选出来作为一个特征(卷积核),

也可以选其其它大小的区域,比如4 * 4

但是最后一个值必须是一致的

17.得到特征图表示

得到的特征图不一定只有一个

只要我的f不同,我就会得到不同的特征图

f1得到第1张图,f2得到第2张图,相当于两种不同的特征提取方法

output Volume就是我们特征图的个数

18.步长与卷积核大小对结果的影响



在图像任务中

卷积核一般为3 * 3或者4 * 4

19.边缘填充方法

在得到最后的特征图过程中

越往边界的点,被应用的次数越少

越往中间的点,被应用的次数越多

在边界外面加一圈0,原本是的边界点就不是边界点,被利用的次数更多了,在一定程度上弥补了边界信息缺失的问题

一般情况下,我们都是添加一圈

在文本中,我们一般是这样的

比如一个文本是100个词,另一个文本是120个词

卷积核个数就是我们在算的过程中要得到多少个特征图

20.特征图尺寸计算与参数共享

公式

即32怎么到28的,怎么到24的


对于每一个位置都是选择了相同的卷积核


21.池化层的作用





将每个位置中最大的值选出来就可以了(在神经网络中,得到一个比较大的值说明这个值比较重要,因为权重参数是在不断改变的)

除了最大池化,还有平均池化等方法

最大池化比平局池化效果要好很多

22.整体网络架构

一般我们最后得到是一个立体的特征图,比如32 * 32 * 10

那么我们如何将它转换成概率用于分类任务呢

我们前面的卷积和池化只是做特征提取,我们想要得到一个结果还是得靠全连接层(FC)

我们要将特征图拉成一个特征向量,长度就是32 * 32 * 10 = 10240

我最终在全连接层最终得到的结果就是[10240,5]

相当于将我这个10240个特征转换为我5个类别的概率值

所以在最后的POOL层与FC层之间,还有一个将特征拉长的操作

上面是一个7层神经网络(只有带参数的,我才称之为一层)

23.VGG网络架构


24.残差网络Resnet





我们建议将Resnet当成一个特征提取的网络,而不是一个分类网络

因为一个问题是分类还是回归,决定于损失函数,还有最后的层是如何连接的

Resnet当成一个特征提取可以运用到各种各样的任务中,物体检测、检索、分类、识别

25.感受野的作用

在卷积神经网络中,感受野(Receptive Field)是指特征图上的某个点能看到的输入图像的区域,即特征图上的点是由输入图像中感受野大小区域的计算得到的。


因为77的卷积一次是5 5再卷是33再卷是1 1,所以是三个

26.RNN网络架构解读

前一个时刻训练出的中间结果特征,也会对后一个时刻产生影响

第一步先将我们的输入数据通过Word2vec模型转换为3维向量,并且按照时间顺序从前到后进行排列,之后训练模型

RNN网络会将之前看到的所有单词完全记下来,记的太多就会产生误差和错误

LSTM中我们的解决方案就是使其忘记一些特征

LSTM是在RNN基础上进行改进的,加上一个C参数控制单元,控制当前的模型复杂度





27.词向量模型通俗解释


我们一般使用50维带300维来表示一个单词

用向量表示一个词后

我们就可以使用相似度度量的方法来探索哪些词是相近的

28.模型整体架构


上面就是50维表示一个单词

那么我们如何训练一个词向量


类似于神经网络中多分类任务,后面接了一个softmax层

比如我们语料库中有100个词,哪个词的可能性是最高的

如果我们输入A、B,则我们希望C词的概率是最高的

那我们输入数据如何构建

因为我们的输入是一个词,但我们的词不能往神经网络中输入

我们要到语料库的大表中进行词的向量的查找

我们语料库的大表是随机进行一个初始化的操作

在神经网络中,前向传播去计算一个损失函数

反向传输根据损失函数更新权重参数

在word2vec模型中,有一个比较特别,不仅会更新神经网络的权重,输入也会一起更新

我们一开始的语料库是随机初始化的

每一层训练都会更新我们的语料库

29.训练数据构建



30.CBOW和Skip-gram模型



模型有两种方案可以选择,Gensim工具包



有时候我们的语料库很大,比如有5w个,这时我们进行softmax分类,工作量太大了,那么我们如何进行改进呢

训练过程跟神经网络差不多,通过前向传播我们得到损失函数,在损失函数中去计算一下error值,根据error值去计算我们的反向传播一步步该如何走,权重参数如何更新。有一点比较特殊的是我们不仅要更新权重参数,也要更新我们的输入数据

我们现在是通过A去预测B

但B的可能性太多了,因为语料库中可能有10w个词,B这边就可能是10w分类

我们将A和B都当成我们的输入,标签我们自己写,我们希望的target标签应该是1,希望神经网络预测出来的结果跟1越接近越好

31.负采样方案

我们需要自己额外添加target为0的标签


默认负采样参数为5


sigmoid二分类任务

神经网络迭代更新完成,每个词的词向量都训练好了,词向量模型即训练好了

Word2vec词向量模型的目的:得到每一个词的向量表示

32.简介与安装

Keras相当于把TensorFlow中一些复杂的API,封装成简单、便捷的形式,底层还是TensorFlow的内容

相关推荐
BulingQAQ7 分钟前
论文阅读:PET/CT Cross-modal medical image fusion of lung tumors based on DCIF-GAN
论文阅读·深度学习·生成对抗网络·计算机视觉·gan
hsling松子10 分钟前
使用PaddleHub智能生成,献上浓情国庆福
人工智能·算法·机器学习·语言模型·paddlepaddle
正在走向自律14 分钟前
机器学习框架
人工智能·机器学习
好吃番茄1 小时前
U mamba配置问题;‘KeyError: ‘file_ending‘
人工智能·机器学习
CV-King2 小时前
opencv实战项目(三十):使用傅里叶变换进行图像边缘检测
人工智能·opencv·算法·计算机视觉
禁默2 小时前
2024年计算机视觉与艺术研讨会(CVA 2024)
人工智能·计算机视觉
slomay3 小时前
关于对比学习(简单整理
经验分享·深度学习·学习·机器学习
whaosoft-1433 小时前
大模型~合集3
人工智能
Dream-Y.ocean3 小时前
文心智能体平台AgenBuilder | 搭建智能体:情感顾问叶晴
人工智能·智能体
丶21363 小时前
【CUDA】【PyTorch】安装 PyTorch 与 CUDA 11.7 的详细步骤
人工智能·pytorch·python