深度学习基础
- 1.深度学习要解决的问题
- 2.深度学习应用领域
- 3.计算机视觉任务
- 4.视觉任务中遇到的问题
- 5.得分函数
- 6.损失函数的作用
- 7.前向传播整体流程
- 8.反向传播计算方式
- 9.神经网络整体架构
- 10.神经网络架构细节
- 11.神经元个数对结果的影响
- 12.正则化和激活函数
- 13.神经网络过拟合解决方法
- 14.卷积神经网络应用领域
- 15.卷积的作用
- 16.卷积特征值计算方法
- 17.得到特征图表示
- 18.步长与卷积核大小对结果的影响
- 19.边缘填充方法
- 20.特征图尺寸计算与参数共享
- 21.池化层的作用
- 22.整体网络架构
- 23.VGG网络架构
- 24.残差网络Resnet
- 25.感受野的作用
- 26.RNN网络架构解读
- 27.词向量模型通俗解释
- 28.模型整体架构
- 29.训练数据构建
- 30.CBOW和Skip-gram模型
- 31.负采样方案
- 32.简介与安装
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三颜色通道 32323 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的卷积一次是55再卷是33再卷是11,所以是三个
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的内容