CS231n

CS231n

CS经典课程,17年版,随手记的比较乱

lecture1

CV简要概述与背景

lecture2

K近邻、线性分类

lecture3

损失函数、优化

lecture4

nerual network

lecture5

cnn convolution nerual network
卷积层convolutional layer
池化层pooling layer
filter卷积核 实际卷积核是3x3x3? 卷积核数量K为2的次方数
stride步长 降采样,步长的大小考虑图像分辨率、参数大小、过拟合、模型大小之间的平衡
(N-filter)/stride+1=output;多个卷积核,产生多层结果
zero pading零填补:通常需要在外围补充一圈0,达到9×9,保持输入与输出相同,全尺寸输出。
零填补大小取决于步长的大小。(fliter-1)/2
不做零填补,输出图像尺寸会越来越小,损失图像信息
长方形图也用同样的步长

receptive field感受野
一个卷积核得到一张activation map激活映射
池化层 降采样,但是不对深度降采样 池化层数量需要权衡
max pooling最大池化法,取filter中最大的数字,代表这块区域的激发firing程度,相邻步长没有重叠。
相比于均值池化,最大池化法最常用
有研究,取消池化,只用滑动卷积来降采样
常用设置: F=2,S=2;F=3,S=2
最后用全连接层Fully connected layer输出一维结论

lecture6

mini-batch小批量
1、激活函数:sigmoid 数值过大过小会导致梯度无法传播,梯度消失m,不以0为中心
tanh 以0为中心;relu max(0,x) 不会走正值出现饱和现象,比sigmoid收敛快6倍,不以0为中心
leaky relu;elu
2、 data proprocessing数据预处理:
一般机器学习:归一化、标准化,PCA
深度学习: 对于图像,zero mean pre-processing零均值化预处理,减去整张图像的均值(RGB三通道,红色、绿色、蓝色各一个均值 ,所有训练图像的均值)。不做归一化
3、 weight initialization权值初始化 不能为0,为0会导致所有神经元一样
权重过小,所有权重趋于0,梯度过小,无法更新;权重过大,网络饱和,梯度消失
Xavier initialization; relu会导致一半权重消失,用(note additional/2解决)
4、batch normalization批量归一化
5、babysitting learning
6、hyperparameter search:grid search网格搜索 ;coarse to fine search粗细粒交叉搜索?
通常一次搜索不会超过2 3 4个超参数,学习率最重要先确定,正则化、学习判据、模型大小;确定学习率后,其他参数再确定
会不会影响学习率的最优解?此时学习率就不怎么敏感了。

lecture 7

1、fancier optimization:SGD梯度下降方向不是直接向着最小点,可能会绕;且可能会停止在局部极小值(梯度为0的点),尤其
是在高维问题上,有的参数梯度上升有的参数梯度下降;随机梯度下降,使用小批量数据,所以下降不一定是真实的梯度,而是对
梯度的估计。
SGD+Momentum动量,初始速度为0,每一步都是用旧速度乘以衰减系数加上新梯度,可以看成相邻梯度的平均平滑移动
AdaGrad 除以平方项,导致梯度越来越小,不适用 -> RMSProp
-> Adam 第一动量与第二动量(平方项),第一步的时候第二动量接近0,第一步特别大,所以加入无偏估计作为真正的第一动量和
第二动量。Adam是首选
学习率:可以设置按步长衰减,但是一开始不设置,一般画出损失曲线后观察在哪个地方适合衰减

之前使用的都是偏导(一阶泰勒逼近),后面也可以使用二阶泰勒逼近(second-order optimization没有学习率,运算量过大)
-> L-BFGS Hessian矩阵二阶逼近,某些模型不适用

提升模型表现:10次不同的初始化参数进行训练,预测平均值作为输出(model ensembles)
2、regularization正则化 提升鲁棒性 传统: L1 L2 L1+L2不太适用于神经网络;
dropout 随机将神经元激活函数置为零,实际测试时,根据期望对每一个神经元乘以概率p(可以再训练时
除以p效果一样)-> dropconnect随机将权重矩阵置为零
batch normalization由于其随机性,也能提升鲁棒性
data augmentation数据增强: 水平翻转(horizontal flips)随机裁剪(random crops)
color jitter(色彩抖动)
最大池化fractional max pooling
stochastic depth训练时随机减少layer,测试时使用全部layers

经验:通常使用批量归一化就行,然后再使用dropout或其他

3、transfer learning迁移学习 在使用Imagnet数据集训练好的VGG预训练模型的基础上,将改动最后一层的线性分类器,或修改后几层(新的数据集与Imagenet相似);
如果两个数据集不相似,则需要修改更多模型的其他部分
无论对于目标检测还是图像分类,神经网络开始的CNN部分一般是直接调用预训练模型,后面的部分进行微调
TensorFlow pytorch caffe都提供了不同模型的预训练版本model zoo

lecture 8

gpu并行计算的优势,尤其是对于矩阵计算,CUDA是英伟达调用gpu的语言,但是编写困难
但是有很多库可以直接调用cuBLAS\cuFFT\cdDNN等;
OpenCl与cuda相似,但是性能没有cuda好

deeplearning frameworks:
TensorFlow
Pytorch
Caffe
Paddle(baidu) CNTK(Microsoft) MXNet(Amazon)

lecture 9

Alexnet第一次神经网络获得ImageNet冠军 8层
VGG网络层数加深,卷积核更小3×3 19层(VGG19) VGG16代表16层layers
Googlenet 22层 inception模块,没有全连接层,参数更少
一层输入 分别进行1×1 3×3 5×5卷积与3×3池化,为了保证输出尺寸相同,使用零填充,消耗算力
->瓶颈层(bottleneck)为了减少算力消耗,在3×3 5×5卷积计算前与3×3池化计算后,增加1×1的64核卷积计算,单纯为了降低输入深度至64
两个分支softmax辅助分类输出
Resnet 残差网络 残差块输出结合(加或减)本层输入,每个残差块有两个3×3的卷积层
深度特别深,往往达到150layers
没有全连接层,最后一个平均池化层,一个全连接层1000个输出接softmax
卷积层也使用类似瓶颈层的操作,先用1×1卷积核的卷积计算降维,3×3卷积计算后,再进行升维与输入一致
批量归一化、Xavier、SGD+Momentum0.9、学习率0.1时间衰减、mini-batch256、权重衰减(weight decay?)、没有dropout
自此,网络层越深,训练错误率越低,不会出现网络层越深,错误率越高的现象
横扫2015所有比赛,超越人类
梯度流gradient flow

lecture10

RNN recurrent neural network
隐藏态hidden state,初始为h0,输入x1,变为h1,计算函数fw不变(权重矩阵W每次计算梯度和即为W的总梯度)
使用tanh激活函数
一对多 多对一 多对多
情感分析sequence to sequence:many-to-one+one-to-many encoder编码 decoder解码
反向传播:沿着时间步长反向传播慢,此处使用截断反向传播方法(truncated backpropagation),按一定的时间步长进行计算损失
,对一批时步进行反向传播

CNN+RNN处理图片标注问题(图片问答问题),CNN结果与标注进入RNN处理,两个向量直接连接输入
引出attention机制,使模型关注到图片的重要部分

多层循环递归网络:Multiayer RNNs 两三层比较常见
RNN反向传播,h1先经过tanh门,后经过权重乘法门,到h0;
但h0至hn有n个相同的w权重矩阵相乘,反向传播时h0的梯度越来越大或越来越小,容易产生梯度爆炸或梯度消失,对于标量关注起绝对值是否大于1,而此处是矩阵,则需要关注其最大的奇异值是否大于1
梯度爆炸:梯度截断gradient clipping;梯度消失:更换更复杂的RNN网络

LSTM(long short term memory)解决梯度消失/爆炸的问题,相比于RNN每一步中的隐藏态ht,lstm还有第二个
向量ct(单元状态cell state)
对比vanilla RNN: ht xt两个输入向量拼接作为神经元输入与W相乘得到下一时刻的隐藏状态ht+1
LSTM:上层隐藏态ht,这层输入拼接乘以大权重矩阵W(4hx2h)得到4个向量结果(4h),再经过sigmoid或tanh处理输出
i:input gate(1个向量结果经过sigmoid得出输入门结果) ct=f·ct-1 + i·g
f:forget gate(sigmoid) ht=o·tanh(ct)
o:output gate(sigmoid)
g:gate gate(tanh)
反向传播时,ct是与不同时刻的遗忘门f相乘,而f再每一个时刻都在变化;而且遗忘门一个sigmoid函数,是向量经过sigmoid处理结果在0至1之间,防止梯度爆炸;至于梯度消失的问题,使遗忘门增加一个偏置项,使其接近1,而且进行的矩阵元素相乘,减少梯度消失发生的可能性
LSTM类似ResNet为梯度流提供了高速公路ct

lecture 11

semantic segmentation语义分割:slip window滑动窗口,计算量太大->fully convolutional全连接,交叉熵损失函数,计算量太大->
先降采样,再上采样恢复维度与输入一致:上采样unpooling:nearest neighbor(与mean pooling对应),bed of nails订床函数(与max pooling对应),
上采样与前半部分的pooling一一对应
transpose convolution

classification+localization:模型输出除了class scores(softmax损失函数)还有bounding box(x,y,w,h;l2 or l1损失函数)
对两个损失函数加权求和
其他问题,例如人姿势预测,根据14个关节点(x,y)坐标(l2损失函数)
object detection目标识别:
sliding window->region proposals(R-CNN)截取备选区域->fast R-CNN卷积处理后,截取备选
区域(固定函数),ROI pooling layer,经过全连接层, 经过损失函数,分类损失和边界损失->Faseter R-CNN
CNN卷积处理后,网络内部预测自己的备选区域。以上所说为region-based基于候选框的目标检测模型
feed forward前馈模型 :YOLO:R-CNN是对备选区域分别处理,而YOLO是统一处理
SSD

instance segmentation图像分割:Mask R-CNN基于faster R-CNN的简单添加:CNN->训练得出候选框->第一个分支
跟fast R-CNN一样预测分类与边框尺寸坐标;第二个分支语义分割微模型对候选框像素点逐个进行二分类是否属于这个物体。
还可以进行姿势预测,增加一个分支预测候选框中的14个关节点 微软COCO数据集

lecture 12

visual可视化

第一层每个卷积核的图像;第二层每个卷积核代表的灰度图像,没有颜色维度;
最后一层全连接层,4096维度与真实图像最近邻计算,或使用t-SNE算法降维
->occulusion experiments分区遮挡,绘制热图->saliency maps显著图-> 微调反向传播->
fooling images

DeepDream
Feature Inversion
nerual style transfer

lecture 13

Generative models
pixelCNNs VAEs

发表评论

邮箱地址不会被公开。 必填项已用*标注