深度学习总结
2022-01-11 15:12:57 45 举报
AI智能生成
深度学习是机器学习的一个分支,它试图模仿人脑的工作原理,通过训练大量数据来自动学习数据的内在规律和表示层次。深度学习的核心是神经网络,特别是深度神经网络,即包含多个隐藏层的神经网络。深度学习在语音识别、图像识别、自然语言处理等领域取得了显著的成果。然而,深度学习也面临着一些挑战,如需要大量的标注数据、计算资源消耗大、模型解释性差等。尽管如此,深度学习仍然是一个非常有前景的研究领域,未来有望在更多领域取得突破性进展。
作者其他创作
大纲/内容
神经网络
概念:人工神经网络,模拟信息在人脑神经元中的传递,通过现象得到信息
感知器
添加少量隐层:浅层神经网络;多隐层:DNN
表达能力及过拟合
理论上单隐层神经网络可以逼近任何连续函数(只要隐层的神经元个数足够多)
虽然从数学上看表达能力一致,但是多隐层的神经网络比单隐层的神经网络工程效果好很多
对于一些分类数据,比如CTR预估里,3层神经网络效果优于2层神经网络,但是层数再增加,最后的结果的帮助就没有那么大的跳变了。
图像数据比较特殊,是一种深层的结构化数据,深层次的卷积神经网络,能够更充分和准确的把这些层级信息表达出来
提神隐层数或者隐层神经元的个数,神经网络容量会变大,空间表达能力变强
过多隐层和神经元节点会带来过拟合问题。
不要视图通过降低神经网络参数量来减缓过拟合,用正则化或者dropout。
传递函数
S 函数(sigmoid)
双S函数
BP算法
正向传播求损失:计算预测结果和真实结果比较分析
反向传播回传误差:链式求导法则更新参数
根据误差型号修正每层的权重
SGD
DNN
层次更深的神经网络为深度神经网络
CNN
层级结构
数据输入层:Input layer
处理方法
去均值化
归一化
PCA/白化
卷积计算层:CONV Layer
深度:depth
步长:stride
填充值:zero-padding
参数共享机制;每个神经元连接数据窗的权重是固定的
RELU激励层:RELU Layer
sigmod
sigmod数值越大,求导导致为0,导致梯度弥散
Tanh
ReLU
收敛快,求梯度简单,较脆弱
Leaky ReLU
不会饱和(挂掉),计算很快
ELU-指数线性单元
ReLU所有优点都有,不会挂掉,输出均值趋于0,因为指数存在,计算量略大
Maxout
多了好些参数,计算为线性的,不会饱和和挂掉,两条直线拼接而成
实际经验
不要使用sigmod函数
首先试ReLU,但防止挂掉
如果ReLU失败,用Leaky ReLU或者Maxout
池化层:Pooling layer
夹在连续的卷积层中间
压缩数据和参数的量,减小过拟合
分为max pooling和average layer
全连接层:FC Layer
两层之间所有神经元都有权重连接
通常全连层在卷积神经网络的尾部
一般CNN结构依次为:
Input
[[CONV->RELU]*N -> Pool?]*M
[FC -> ReLU]*K
FC
训练算法
同一般机器学习算法,首先定义LOss FUnction,衡量和实际结果之间的差距
找到最小化损失函数的W和b,CNN中的算法用SGD
SGD需要计算W和b的偏导
BP算法就是计算偏导用的
BP算法核心是求导链式法则
优缺点
优点
共享卷积核,对高维数据处理无压力
无需手动选择特征,训练好权重,即得到特征
分类效果好
缺点
需要调参,需要大量样本,训练最好用GPU
黑盒,物理含义不明确
典型CNN
LeNet
Input -> cov(5*5) -> polling(2*2) -> cov(5*5) -> pooling(2*2) -> FC -> RELU -> FC -> soft max
AlexNet
Input -> conv1(11*11) -> max pool1(3*3) -> conv2(5*5) -> max pool2(3*3) -> norm2 -> conv3(3*3) -> conv4(3*3) -> conv4(3*3) -> conv5(3*3) -> max pool3(3*3) -> FC(4096) -> FC(4096) -> FC(1000)
VGG
Input -> [conv3]*2 -> pool2 -> [conv3]*2 -> pool2 -> [conv3]*3 -> pool2 -> [conv3]*3 -> pool2 -> [conv3]*3 -> pool2 ->FC(4096) -> FC(4096) -> FC(1000) -> soft-max
GoogleNet
Intercept module
1*1卷积核进行低成本计算
Input -> [conv(3*3)]*3 -> pool -> [conv(3*3)]*3 -> inception模块组 -> inception模块组 -> Inception 模块组 -> pool(8*8) -> logit(线性) -> softmax
ResNet
如果距离输入层太远,残查传回来的信号太弱,如果每一层学习一个独立的f(x)太难,直接打通皇城到蜀地的快速通道,把input直接送到后面的层次,每次只要比原始数据学习一个残查即可
全连接层占据Alexnet,VGGNet90%的参数量,googlenet减少全连接层,用全局平均池化层来代替
Fine-tuning
利用已用于其他的目标,训练好模型的权重或者部分权重,作为初始值开始训练,可以收敛到一个较理想的状态
复用相同层的权重,新定义层取随机权重初始值,调大新定义层的学习率,调小复用层学习率
一般神经网络训练过程
SGD
采样一个batch的数据(128张)
向前计算得到损失loss
反向传播计算梯度(一个batch上的)
用这部分梯度迭代更新权重参数
数据处理
数据去均值:AlexNet—227×227×3的均值矩阵;VGGNet—1×3RGB三个颜色通道的均值
一般不做标准化,PCA和白化
激励函数
哈维尔/Xavier初始化:查资料;腰斩效应
Batch Normalization
做法
期望激励过后的结果为高斯分布,那么手动修正一下;
根据均值和方差做归一化
通常在激励层之后做
优缺点
梯度传递更为顺畅
学习率设置高一点也没关系
对初始值的依赖减小了
可以看作一种正则化,减小了对dropout的需求
如果层次深,激励层全部加BN层比不加时间长30%,可以视情况决定是否需要加
过拟合
正则化
L1正则化,加入l|w|,不相关的输入因为得不到权重被抑制,截断效应
L2正则化,加入lw2,减小每个特征的权重,稀疏性效应
L2+L1正则化
最大范数约束
Dropout
别一次开启所有的学习单元
别让神经网络记住那么多东西
每次关掉一部分感知器,得到一个新模型,最后做融合,不至于听一家之言
SGD与学习率
固定学习率
动态更新学习率
Nesterov Momentum:基于凸优化理论,收敛更好
RCNN
介绍
RNN
0 条评论
下一页