机器学习---无序数据产生价值,进行预测
分类问题------图像识别,垃圾邮件识别
回归问题----股价预测,房价预测
排序问题----点击率预估,推荐
生成问题----图像生成,图像风格转化

数据处理:采集+去噪
模型训练:特征+模型
模型评估与优化: MSE,AUC+调参数
模型应用A,B测试

神经元----激活函数sigmoid----二分类逻辑log回归模型

图片说明

神经元----多输出----softmax----多分类

图片说明

目标函数----衡量对数据的拟合程度
平方差损失函数

图片说明

交叉熵损失函数

图片说明

调整参数使得目标函数最小

神经网络训练

梯度下降算法:
图片说明

声明式编程---先构建计算图,再输入数值进行计算

多层感知机MLP------神经网络相邻层是全连接的

卷积神经----图像CV

神经元的结构:

图片说明
物理结构:
图片说明

图片说明

神经网络训练优化
1.随机梯度下降:
每次只使用一个样本
图片说明
2.Mini-Batch梯度下降:
每次使用小部分数据进行训练
梯度下降存在局部极值和梯度消失(鞍点)的问题
动量梯度下降:
图片说明
图片说明
其中主要是积累值方向和导数方向
图片说明
1.开始训练时,积累动量,加速训练
2.局部极值附近震荡时,梯度为0,由于还有动量方向,跳出陷阱
3.梯度方向改变的时候,动量缓解动荡

卷积神经网络
全连接变成----------局部连接------参数共享
卷积核一般是0,1两者之间

输出size=输入size-卷积核size+1
图片说明

卷积层-------特性:1.局部连接;2.权值共享
卷积层是通过特定数目的卷积核对输入的多通道特征图片进行扫描和运算从而得到多个拥有更高寓意信息的输出特征图。
卷积核有滑动窗机制----------权值共享

激活函数:
图片说明

卷积:
边距:padding=====p
步长:stride=====sb
输出尺寸:(n-p)/s+1
参数数目:kwkhCi*Co
Ci:输入通道数
Co:输出通道数
Kw,Kh:卷积核的长宽

池化:
种类:1.最大值池化,2.平均值池化
特点:1.常使用不重叠,不补零;2.没有用于求导的参数;3.池化层参数为步长和池化核对的大小;4.用于减少图像尺寸,从而减少计算量;5.一定程度上解决平移鲁棒性

全连接层:
1.上一层输出展开并连接到每一个神经元上
2.普通神经网络的层
3.相比于卷积层,参数数目较大
4.参数数目=Ci*Co;Ci,Co为输入输出通道数目

卷积神经网络==卷积层+池化层+全连接层
反向传播:主要是考察权值对最后结果的影响
![图片说明](https://uploadfiles.nowcoder.com/images/20190919/56_1568900435177_29C080A5413E925FE3B3CCB4048AB99B b.com/images/20201025/450900297_1603605177194_4E22D73FB3CDC1179711F017088AF9E4 "图片标题")

卷积神经网络的具体结构和演变:
不同网络结构解决的问题不同
不同的网络结构使用的技巧不同
不同的网络结构应用的场景不同
更深更宽:AlexNet----------------->VGGNet
不同的模型结构:VGG--------->InceptionNet/ResNet
优势组合:Inception+Res-------->InceptionResNet
自我学习:NASNet
实用: MoblieNet
图片说明

训练技巧:
1.先训练浅层网络,再去训练深层网络
2.多尺度输入:(1)不同的尺度训练多个分类器,然后取均值(2)随机使用不同尺度缩放,然后输入进分类器进行训练

AlexNet的网络结构:

2-GPU并行结构
1,2,5卷积层后跟随max-pooling层
两个全连接层上使用了dropout

dropout一般用在全连接层上,因为全连接层参数占全部参数数目的大部分,容易过拟合
dropout原理解释:1.每次dropout都相当于训练了一个子网络;2.最后的结果相当于很多子网络组合
动机解释:消除了神经单元之间的依赖,增强泛化能力
数据解释:对于dropout后的结果,总能找到一个样本与其对应

VGGNet

更深:
多使用33的卷积核
2个3
3的卷积层可以看成55的卷积层
3个3
3的卷积层可以看成77的卷积层
1
1的卷积层可以看作是非线性变换
每经过一个池化层,通道数目翻倍

网络结构:
层数从11层增加到19层
为什么要选择2层的3*3的卷积层----------2层比1层多一次非线性变换,而且参数降低25%左右
总体参数数目基本保持不变

ResNet

加深层次问题:模型深度达到某个程度后继续加深会导致训练集准确率下降
解决方式:
1.首先假设:深层网络更难优化,而非深层网络学不到东西
2.深层网络至少可以和浅层网络持平
3.y=x,虽然增加了深度,但是误差不会增加

主要模型结构如下:
1.Identity部分是恒等变换
2.F(x)是残差学习
图片说明
具体例子如下:

图片说明

主要模型的流程如下:
1.先用一个普通的卷积层,步长是2
2.再经过一个3*3的最大池化
3.再经过残差结构
4.没有中间的全连接层,直接到输出

残差结构的优点:
残差结构使得网络需要学习的知识变少,容易学习
残差结构使得每一层的数据分布接近,容易学习

InceptionNet

主要用于工程优化:使得同样的参数更加的有效率
深层网络遇到的问题:
1.更深的网络容易过拟合
2.更深的网络有更大的计算量
3.稀疏网络虽然减少了参数但没有减少计算量

V1结构:分组卷积

图片说明
其中convolutions表示卷积核

Inception优势:
1.一层上同时使用多种卷积核,看到各种层级的feature
2.不同组之间的feature不交叉计算,减少了计算量

参数的计算,由于卷积核是平均分配的,计算量没有变大
图片说明

V2结构:引入3*3视野区域同等卷积替换

图片说明

V3结构:33不是最小卷积,可以替换为13和3*1

图片说明
替换之后参数降低33%
图片说明

V4结构:引入skip connection(类似残差连接)

图片说明

引入深度可分离卷积
图片说明
具体的计算量的区别如下:
图片说明

卷积神经网络调整参数

1.优化算法:
随机梯度下降:1.局部极值;2.鞍点问题(梯度消失)
动量梯度下降
问题:1.受初始学习率的影响很大2.每一个维度的学习率一样

AdaGrad算法:
调整学习率:
图片说明
图片说明
特点:
前期,regularizer较小,放大梯度
后期,regularizer较大,缩小梯度
梯度随训练次数降低
每个分量有不同的学习率
缺点:
学习率设置太大,导致regularizer影响过于敏感
后期,regularizer积累值太大,提前结束训练

RMSProp算法:

图片说明

特点:1.AdaGrad算法的变种
2.由累积平方梯度变为平均平方梯度
3.解决了后期提前结束的问题

Adam算法:
图片说明
图片说明

特点:
1.所有的上述算法都会用learning_rate来做参数
2.Adam比较合适的参数:
Beta1=0.9
Beta2=0.999
Learning_rate=1e-3 5e-4

学习率自适应方面的改进:
图片说明
1.对于稀疏数据,使用学习率可自适应方法
2.SGD通常训练时间更长,最终效果比较好,但需要更好的初始化和学习率
3.训练较深较复杂的网络且需要快速收敛时,推荐使用Adam

2.激活函数
图片说明

各种激活函数的特点:
sigmoid:
1.输入非常大或者非常小时没有梯度
2.输出均值非0
3.计算复杂
4.梯度消失
图片说明

tanh:
1.依旧没有梯度
2.输出均值是0

ReLU
1.不饱和
2.计算量小
3.收敛速度快
4.输出均值非0
5.一个非常大的梯度流过神经元,不会再对数据有激活现象了

Leaky ReLU
图片说明

ELU
图片说明
1.均值更接近0
2.小于0时计算量大

Maxout
1.ReLU的泛化版本
2.没有dead relu
3.参数double

图片说明

激活函数的要点:
1.Relu-----------设置学习率的时候要注意
2.不要使用sigmoid
3.使用 Leaky Relu、maxout、ELU

3.网络初始化

一、全部为0:1.单层网络可以2.多层网络会使得梯度消失,链式法则
二、均值为0,方差为0.02的正态分布初始化:
tanh(1.高层均值为0,没有梯度2.高层均值为-1,1,已经饱和)
ReLU激活函数

如何分析初始化结果好不好?
查看初始化后各层激活值的分布

4.批归一化
1.每个batch在每一层上都做归一化
2.未来确保归一化能够起到作用,另设两个参数来逆归一化
图片说明

5.数据增强
1.归一化
2.图像变换:翻转,拉伸,裁剪,变形
3.色彩变换:对比度,亮度
4.多尺度

6.更多调参技巧
1.拿到更多的数据
2.给神经网络添加层次
3.紧跟最新进展,使用新方法
4.增大训练的迭代次数
5.尝试正则化
6.使用更多的GPU来加速训练
7.可视化工具来检查中间状态:
(1)损失
(2)梯度
(3)准确率
(4)学习率
8.在标准数据集上训练
9.在小数据集上过拟合
10.数据集分布平衡
11.使用预调整好的稳定模型结构
12.预训练好的网络结构上进行微调