深度学习
机器学习流程
1.数据获取
2.特征工程
3.建立模型
4.评估与应用
深度学习应用
1.无人驾驶汽车
2.人脸识别
3.医学领域(基因组和...)
4.变脸
5.分辨率重构
.
.
.
.
.
计算机视觉
图像分类任务:
像素值越低越暗
300 * 100 * 3:
长:300
宽:100
颜色通道:3
机器学习常规套路
1.收集数据并给定标签
2.训练一个分类器
3.测试,评估
K近邻算法
K=3:看周围最近的3个是什么
看它周围什么多他就是什么
K近邻计算流程
距离的选择
训练数据与测试数据各个像素点相减:
缺点
无法确定主体,如果背景相同就会被分类到一起
神经网络基础
线性函数
有些像素点对于确定猫是促进作用,有些像素点是抑制作用
W:每个像素点的对照程度不一样(权重参数不一样)
X:像素点的值
3072:每个类别对于每个像素点的权重参数
10:十个不同类别(猫 狗 汽车 轮船...)
b: 偏执参数 (微调操作)
10x1:十个不同类别各自进行微调
计算方法
三分类:
像素点:
56,231,24,2
W:
是3x4的矩阵,3代表3分类 4代表4个像素点
正值代表对该分类起促进作用
负值代表对该分类起抑制作用
计算方法:
0.2 x 56 + -0.5 x 0.1 x 24 + 2.0 x 2 + 1.1 = -96.8
-96.8:对应猫的得分
W通过梯度下降算法优化而来(随机出初始化一个3x4矩阵 通过不断优化更新而来)
损失函数
L = 其他类别得分-正确类别得分+1 (越小越好)
+1:
如果得分比较接近 相差小于零 比如猫类别 car得分为3.15 3.15 - 3.2 = -0.05 小于0 会判定为没有损失 +1了就可以判定为有损失了 L小于零就没有损失 实际上损失小 有损失
损失函数:用来衡量当前权重参数做完之后的结果
前向传播(计算出Loss值)整体流程
前向传播就是将数据传递到输出层得到预测结果
激活函数
sigmoid函数
可以将得分转换为一个概率
exp:
exp函数图像
放大差异 让结果看起来更加明显
normalize:
归一化
经过exp之后比上三个数相加得到概率值
L_i:取对数
越接近于1对应的y值越小 ---> 对应损失值的越小
反向传播(更新模型 梯度下降)
反向传播是根据预测结果与真实值之间的差异来调整权重和偏差 提高模型的准确性
前向传播有多个w
每个w侧重关注点不一样
先看w3对f做的贡献(就是求导)
再看w2对后面做多大贡献(求导)
从后往前分步逐层求导
求梯度的方法:链式法则
整体框架
input layer:
x代表输入特征的数量
例如小猫的照片是32 x 32 x 3 的 x就要输入3072个
hidden layer(特征提取):
对原始输入特征做些计算机自己能识别的改变 方便计算机自己识别信息
激活函数对比
sigmoid函数数值较大或者数值较小会出现梯度消失
所以多用Relu函数
数据预处理
X - = np.mean(X, axis = 0):
使数据更靠近原点
normalized:
对数据的各个维度进行放缩和扩充
参数初始化
np.random.randn(D,H):
随机初始化一个D x H的矩阵
0.01:
防止不同的权重参数值浮动太大
DROP OUT(比例)
防止网络模型更复杂
可以使每一次训练的架构变得简单
每一层每一次随机选择固定比例的一部分杀死
先数据预处理 对文本图像其他数据进行处理得到输入层
前向传播通过w1 w2(权重参数矩阵)与隐藏层进行连接 进行特征提取
w1[3,4]左边连3个 右边连4个
每个隐藏层之后要使用relu激活函数
得出loss值之后再反向传播
逐步对w3求导 对w2求导... relu函数也要带进去 分别进行更新
找到什么样的权重参数能够最适合于当前的任务
卷积神经网络(CNN网络)
1.应用领域
1.检测任务
摄像头中进行追踪检测
2.分类和检索
分类:传统的分类就是看他这张图片是什么
检索:检索就是输入一张图像 会返回一些相似的结果图
也是进行特征提取,传统神经网络的权重参数矩阵特别大,卷积神经网络可以解决该问题
3.超分辨率重构
4.医学任务
细胞检测 人体透视图动态图结果分析
OCR字体识别
车牌识别
5.无人驾驶
6.人脸识别
2.卷积网络与传统网络的区别
展现出来的特征是二维的 输入一个图像 传统神经网络会转成二维的: 784(28 x 28 x 1) x 1
卷积神经网络展现的是三维的 输入的一个图像 转成三维的:28 x 28 x1
3.整体架构
输入层:图像数据
卷积层:提取特征
池化层:压缩特征
全连接层:通过一组权重参数 把输入层和隐藏层连接到一起
4.卷积层的作用
将图像进行分割成多个部分 分别进行特征提取
图中蓝色区域就是被分割的小部分
使用权重参数进行获取特征值(与传统神经网络类似)
5 x 5 x 3 :蓝色图中的黑色区域应该是5x5大小的
蓝色的是原始数据被划分成多个区域后的数据C2,每个数字代表像素点的值,右下角是权重参数(W)
黑色的部分是C2又一次被划分成多个区域 计算出每个区域的特征值:
绿色的可以叫做特征图
总结
卷积的作用就是对于不同的区域得到的特征是不一样的 然后选择一种计算的方法 对于每一个小区域计算它应该的特征值是多少
5.卷积特征值的计算方法
图像的颜色通道
常见是RGB 三颜色通道(比如输入数据:32 x 32 x 3 的 3) 就是一张图片分成三个通道
做计算的过程当中 三个通道都单独计算 最后将每个通道卷积的结果加在一起
刚刚的蓝色图就是单个通道 实际上三个通道都要经过相同的计算过程
计算过程
Input Volume(输入层) 第一列:
7 x 7 x 3
7 x 7是图像的h是7 w是7
x 3 是3个颜色通道
Filter W0(卷积核):
要分区域进行特征提取
输入的通道数(就是h x w x c 的c) 要和filter当中的维度(3 x 3 x 3中的第3个3)要必须相等
前两个3 x 3: 在原始数据中,每3 x 3的区域进行区域选择(就是输入层中蓝色的框框) 计算出一个特征值
有3个红色的格子,就是3个颜色的通道
计算方式(内积):
对应位置相乘
相乘完之后的结果相加 要记得加上 b 的值
三个通道都计算完之后的结果加到一起
3就是绿色框框中的第一个数3
可以添加多个Filter 让特征图更加丰富
6.步长与卷积核大小对结果的影响
多次卷积
要在得到的特征图继续做卷积 可以得到更为精确的特征图
堆叠的卷积层
e.g. 6:
用了6个filter 有6个不同的卷积核 得到了6个不同的特征图 得到的深度就是6 (蓝色的h)
5 x 5 x 3(卷积核):
卷积核的第三个值一定和前面输入(h -> 3)相同
卷积层涉及参数
1.滑动窗口步长
步长为1的卷积:
在原有基础上 移动步长为1的单元格
2.卷积核尺寸
选择区域的大小(红色部分)
卷积核尺寸越小 越精细
3.边缘填充
(+pad 1):边缘填充为1
周围灰色区域就是填充的部分
越靠近中间部分的数据在迭代的时候越容易被重复计算
填充可以使边界的数据利用的次数更多 更加公平 更加严谨
弥补边界信息缺失
解决边界梯度特征利用不充分问题
4.卷积核个数
就是最终在算的过程中要得到多少个特征图
7.卷积结果计算公式
例:
如果输入是数据是32x32x3的图像,用10个5x5x3的filter来进行卷积操作,
指定步长为1,边界填充为2,最终输入的规模为?
H = (32 - 5 + 2 x 2)/1 + 1 = 32
W = (32 - 5 + 2 x 2)/1 + 1 = 32
因为有10个fileter,所以最终得到10个特征图
所以c为10
综上:
输出规模为 32 x 32 x 10
(经过卷积操作后也可以保持特征图长度,宽度不变)
8.卷积参数共享
用同样一组卷积核 对于图像当中 每一个区域 进行特征提取 在对每个区域进行特征提取的卷积核的值是不变的
红色的就是卷积核 就是卷积参数共享
9.池化层
得到的特征图太丰富了 特征图上的数据 并不是都是重要的 池化层就可以压缩特征图
不涉及任何的矩阵计算 只是进行压缩
压缩方法
1.MAX POOLING
最大池化:(和卷积一样 选取不同区域筛选出最大的值)
选取最大的原因: 值越大说明这个结果比较重要 权重参数是不会变的 得到权重参数的计算之后 如果值越大 就是整个神经网路认为它是比较重要的
第一次:
选取红色框中最大数值 并添加到被压缩后的特征图中
第二次:
第三次:
.
.
.
.
2.AVER POOLING(很少用)
平均池化:
和最大池化的原理一样 只是压缩方式为 求所选区域内的平均值
###
10.卷积神经网络整体网络构架
一张图片来了之后先进行特征提取 卷积层都和relu函数搭配一起 两次卷积一次池化 执行过两次卷积之后得到一个大的特征图 再进行池化压缩 然后继续重复操作 最后得到的特征图经过全连接层进行分类转换成概率
比如得到的特征图是 32 x 32 x 10的 要想进行分类转换成概率 就需要FC(全连接层) 本图例子中是个五分类
全连接层矩阵大小:[10240,5]
10240:需要将传入的特征图 拉成一个特征向量 32 x 32 x 10 = 10240
5:5分类
相当于将10240个特征转换成5个预测的概率值
层数:
带参数进行计算的叫做一层
CONV(卷积层) 带参数计算
RELU(激活层) 不带参数计算
POOL(池化层) 不带参数计算
FC(全连接层) 带参数计算
所以为7层
特征图的变化:
11.VGG网络架构
所有的卷积大小都是3 x 3的,都是细精度进行特征提取
有16层或者19层
红色部分:
64:得到64个特征图
经过pooling之后会损失一些特征信息 体积会变为原来的四分之一
vgg网络在每一次经过pooling之后 在下一次卷积中 使得特征图翻倍 来弥补损失
用特征图的个数弥补长宽的损失
VGG可以通过重复使用简单的基础块来构建深度模型