introduction部分提出了几个问题
1.构建一个好的网络 =? 把层堆起来吗
哈哈 跟堆汉堡一样
这里呢 我们都知道 当网络的层数变多之后 加深了 deep了 但是
就会带来 梯度消失或者爆炸的问题
这里 实在找不到好的图
本质上因为当层数多了之后 反向传播的计算里面是不是 有连乘啊 那就会导致
要么算的很小 接近0 而接近0就意味着梯度消失
要么就接近无穷大那就是梯度爆炸 而解决这问题,
1.初始化要做好一点
权重不要太大 也不要太小
2.中间加入BN层
可以使得校验每个层之间的那些输出和他的梯度的那些均值和方差
在深的网络是可以训练的(避免一些层特别大或是特别小)
我们发现使用这些trick就是可以收敛了
但是
面临第二个难点时,当我们的网络变深了,我们的性能变差了==精度变差
20->50 变差 很明显(这里图中可以看出错误率变高了 很明显)
但是这里并不是因为层数变深模型变复杂导致的过拟合
这是因为你的训练误差也变高了 (这里的训练误差和测试误差都很差)
overfitting的意思是 你的训练精度很高(训练误差变得很低 )但是你的测试精度低了(测试误差变得很高)中间有比较大的区别
也就是说我们发现啊 这个网络用了 BN 用了归一初始化确实work 让最后梯度下降收敛了
但是最后并没有得到一个好的结果 也就是对于最终的结果来说 不怎么有效啊
考虑一个架构浅一点的网络 和一个比较深的版本
注意:比较深的版本 在浅的网络加一些层
我们想一下 如果我们浅的架构很好的话 按道理 深的网络 不应该变差
因为深的架构加的层 都是学到的
(identity mapping)input x output 也是x
把一些权重学成简单的 n 分之一 使得我们的输入和输出 是一一对应的关系
理论上权重确实可以学成这个样子
但是
实际上 臣妾办不到 采用随机梯度下降 深的 层学到表较好的(浅的层学习表现好的层的复制)
而上面的那些层由于identity mapping
整理一下 我们构建的深的网络 前20层是学的比较好的 后14层是identity mapping
这样其实效果肯定会好(有这个最优解) 但是我们发现这个SGD(随机梯度下降)办不到,找不到一个最优解
所以 这篇文章 给出了一个解决方案
identity mapping 不会变差 ——————deep residual learning 框架
RPReplay_Final1673156538
输出 = 输出+输入
shortcut connection ——indentity mapping
1.不会增加任何你需要学习的参数,不会增加模型复杂度
2.加法也不会增加计算的复杂度
3.网络可以被训练
4.在caffe可以直接实现
解释了residual在干嘛
而追溯residual 在机器学习和统计里面比较多 线性模型最早的解法 靠residual 来迭代
那么残差连接如何处理你的输入和输出的形状是不同的情况
1.补0填充
2.投影(1*1的卷积在空间维度上不做任何的change,主要是可以改变channel的维度)
而高宽通常会变成原来的一半 所以给1*1卷积的步长设为2
实验部分
细节1:把短边随机的采样到256和480
随机放到比较大 有一个好处:当切割的时候,会增加随机性
RGB上做颜色增强 BN
没有全连接层 所以没有dropout
10-crop test image
给一张图片 在里面随机的按照一定规则去采样10个图片在每个子图上做预测
最后将结果做平均
就到这吧,我要休息了,88