D2L: AlexNet
AlexNetConcept and Principle
在深度学习之前:
核方法
特征提取
选择核函数
凸优化问题
漂亮的定理
几何学
抽取特征
将计算机视觉问题描述为几何问题(如多相机)
凸优化
漂亮的定理
建立假设模型,若假设满足,效果会很好
特征工程
特征工程(人工特征提取)是关键,不太关心机器学习模型
特征描述子(SIFT、SURF)
视觉词袋(聚类)
最后一般用SVM
AlexNet赢得了2012年ImageNet竞赛的冠军,引起了深度学习的热潮,其本质上是一个更深更大的LeNet
主要改进:
丢弃法
ReLU
MaxPooling
数据增强(截取、调亮度、调色温等)
更深更大
网络结构与复杂度
Implementation123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657import torchfrom torch import nn,optimimport d2lclass AlexNe ...
D2L: LeNet
LeNetConcept and Principle
最早是用于手写数字识别,识别信件上的邮政编码
网络结构
提出了一个数据集:MNIST
5w个训练数据
1w个测试数据
图像大小 28x28
10类
总结
LeNet是早期成功的神经网络
先使用卷积层学习图片空间信息
然后使用全连接层转换到类别空间
Implementation123456789101112131415161718192021222324252627282930313233343536373839from torch import optimimport torchfrom torch import nnimport d2l# 定义Reshape层class Reshape(nn.Module): def forward(self,x): return x.view(-1,1,28,28)net=nn.Sequential( Reshape(), nn.Conv2d(1,6,kernel_size=5,padding=2), nn.AvgPool2d(2),nn. ...
D2L: Convolution and Pooling
Convolution and PoolingConcept and Principle
卷积
平移不变性和局部性是在图片中寻找某种模式的原则。
因为模式不会随着其在图片中位置改变而改变,所以一个识别器(卷积核)被设计为具有平移不变性(即参数只与输入的像素值有关,而与像素在图片的位置无关),去学习图片中的一种模式
模式与其相邻的局部相关,识别器每次仅去看图片的一部分
对全连接层使用平移不变性和局部性得到卷积层
卷积层
不同卷积核(值)会对图片带来不同的效果,当某种效果对任务有帮助时,网络很有可能就会学习出这种卷积核
填充与步幅
在输入的四周加入额外的行和列以控制卷积后的输出图像大小,卷积核大小一般选奇数,能上下对称地填充图片来保证输入输出图片大小不变
增大卷积步幅,快速缩小图片
总结
通道
每个通道有自己的卷积核,输入通道不同通道的对应卷积后直接相加后再加偏置项,最后输出一个单通道
多输出通道就是多个上述操作输出的多个单通道
每个输出通道可以识别特定的模式,输入通道识别并组合(加权相加)输入中的模式
池化
池化层缓解卷积对位置的敏感性
池化层不学习任何参数 ...
D2L: Sequential Model
Sequential ModelConcept and Principle序列模型是考虑时间信息的模型
序列数据
数据带有时序结构,如电影的评价随时间变化
电影拿奖后评分上升
导演、演员负面报道后评分下降
统计工具
将序列中每个元素看作随机变量,显然他们不是独立的
在实际操作中,时序序列一般只能正向建模去预测
要使用序列模型预测T时刻x的概率,核心是求T时刻的条件概率(似然),这里的f可看作神经网络,神经网络将训练集建模。自回归指的是用数据对见过的数据建模(因为最后预测也是在预测相同的数据),与非序列模型用数据对独立于数据的标签建模不同。
具体如何建模?
马尔科夫假设当前预测的数据只跟过去的tau个数据相关,tau是一个固定常数。假设x是标量数据,此时只需要将其看作回归问题,使用MLP把tau个x当作特征训练得到t时刻标量x。MLP进行梯度优化的过程便是最大化似然概率的过程
潜变量模型引入一个可不断更新的潜变量用于概括历史信息,使得建模更加简单(RNN)
Implementation
马尔可夫假设+MLP123456789101112131415161718 ...
D2L: Numerical Stability & Initialization
D2L: Numerical Stability & InitializationConcept and Principle
数值的稳定性
神经网络的梯度求某一层的参数的梯度,直接就对损失函数关于该层参数求导,然后通过链式法则,化成d-t次的矩阵乘法
梯度爆炸与梯度消失上述连续的乘法运算会带来两个问题:梯度爆炸与梯度消失梯度爆炸带来的问题:梯度值超过计算机可表示大小、对学习率敏感梯度消失带来的问题:梯度值变为0(超出计算可表示精度的小浮点数)、无论如何选择学习率训练都没有进展、神经网络无法做到更深
模型初始化
如何让训练更加稳定?(不产生梯度消失和梯度爆炸)要让梯度值保持在合理的范围内,一般有如下方法:
将乘法变为加法(ResNet、LSTM)
归一化(梯度归一化、梯度裁剪)
选定合适的激活函数
合理的初始参数
让每层的方差是一个常数
合理的权重初始化
需要在一个合理值区间里随机初始参数
远离最优解的地方损失函数很复杂(梯度很大)
最优解附近比较平缓
Xavier初始化使得输入空间的方差和输出空间的方差尽量相等