Inception提出了很多想法被后续的NN接受,比如1x1卷积减少计算量,两层3x3等价于一层5*5,非对称卷积,并行的pooling,平滑标签。
Inception和其他的CNN比起来,主要是足够宽了。但是超参太多了,尤其是涉及到网络结构的超参,这个可能就导致他们开始考虑做NAS了。
Inception提出了很多想法被后续的NN接受,比如1x1卷积减少计算量,两层3x3等价于一层5*5,非对称卷积,并行的pooling,平滑标签。
Inception和其他的CNN比起来,主要是足够宽了。但是超参太多了,尤其是涉及到网络结构的超参,这个可能就导致他们开始考虑做NAS了。
作者认为CNN的卷积核是一种泛化的线性模型(generalized linear model GLM),把GLM换成一种非线性近似函数能提高局域的特征提取能力。他说CNN的假设是说需要提出特征都是线性可分的,但是很多特征是以非线性流型的形式存在。非线性流型(nonlinear manifold)这是啥玩意?
他说自己是NiN,就是在普通卷积核之后增加了一个小的普通NN,以提高特征提取能力。而且在网络最后去掉了全连接层,通过 average pooling layer直接进入softmax分类器。
就是在普通conv后增加了全连接层,但是这篇文章厉害的地方是把这个Full Connect Layer视为1*1的conv layer。这个新颖的观点后来被Inception、resnet使用了,并且google还在论文中感谢了这边文章的作者。
文中提到很多FC layer的弊病,如过拟合,参数多等。于是他用的方法是,把最后一层每个通道的feature map看做是类别的特征,把feature map的每个channel 求一个平均数,作为对应类别的分数,然后在求loss。
这篇文章虽然很多细节上没有交代,比如网络结构参数等等。但是他的想法还是很新奇的。并且被很多后续很成功的Net所采用。
论文基于AlexnNet修改,CIFAR100可以到65.3%
LeNet,证明多层的CNN是有价值的,可以拿来做图像识别
AlexNet,提出数据多,网络深就可以有好结果,但是计算速度、过拟合是问题,所以给出了ReLU,Dropout
VGG,说他们有效是因为用了很小的filters(3*3),因为小的filter可以让网络变得很深。VGG说LRN没啥效果。
使用小filter可以使参数变少,计算量变小。3层3*3就相当于是一层7*7,同时因为之间加入了ReLU,所以使得判定函数(decision function)更加具有判别力,不知道这个的根据是啥?
VGG训练时,是一点点涨起来的,先训练11层的,等稳定了,把网络扩展13层,旧的layer还用原来的参数,新的layer随机初始化参数。
实际在测试VGG时,感觉不是那么好用,首先我用的1060的卡,只能跑很小的batch_size,这样训练就很慢。而且再cifar100上,也没看到特别明显的效果。还不如直接在AlexNet上加几层3*3的Conv Layer。这可能也和数据集有关,可能在ImageNet2012上VGG表现更好。
Vgg Acc@1能到 63%,AlexNet Acc@1能到50%左右
2012----AlexNet----Imagenet classification with deep convolutional neural networks_ILSVRC2012
作者说,为了提高分类精确度,需要收集更多标注数据,需要更强大的模型,还需要更好的技术防止过拟合,这应该是2012年人们面对的挑战。
AlexNet提出了很多新的特性,能够使得训练时间更短,并且提出一些防止过拟合的新方法。AlexNet有8个层,5个卷积层,3个全连接层。
AlexNet使用了ReLU,f(x) = max(0, x) , 这么简单的函数,但是效果很好,比tanh,sigmoid要快很多。
AlexNet使用LRN(Local Response Normalization)层是用来做归一化的。
使用了有重叠的max-pooling。
使用了Dropout防止过拟合,同时做了很多数据增强的事情。
AlexNet结构:
计算机领域还是得动手做一下,才能更清楚的明白。网上很多人说AlexNet输入图片是227*227,其实就是224*224,只是加了padding=2,最后一列和最后一行被抛弃了。
而且我才发现,alexnet的conv实际是分开两部分了,幸好pytorch的conv2d函数有groups这个参数,否则还真不知道该怎么去实现。
但是在alex上跑cifar,还是比较容易overfitting,cifar的top1 accuracy只能到46%左右。
《Gradient-based learning applied to document recognition》
之前的模式识别系统,分为两部分,第一部分是特征提取器,把输入变量变成低纬度的特征向量。这个过程需要很多人类知识,而且主要是针对特定任务。第二部分是分类器,分类器是比较通用的,也可以进行训练。
卷积网络组合了三个关于架构的想法:局部感知区域、共享参数、空间二次采样。小的卷积核可以提取出基本视觉元素,比如边缘,角点,终点。这些特征再被后续的层去提取更高维度的特征。一个卷积神经元输出一个feature map,完整的卷积层由多个卷积核组成。
池化层的作用是减少feature的精确位置,只关注特征之间的相对位置。
LeNet-5结构
1,C1,6个5*5的filter
2,S2,avg_pooling, 12个参数
3,C3,16个5*5的filter,但是不是完全卷积
4,S4,22的avg pooling , 162=32个参数
5,C5,120个5*5卷积filter,这一层又是完全卷积了,只有C3特殊
6,F6,是全连接层,有84的神经元,这一个层后用了tanh,作为激活函数
7,Output,F7层也不是普通的全连接层,而是用了所谓RBF函数,实际是把F6层输出84维向量,和10个分类的向量求欧式距离
8,Loss Func也不是现在常用的交叉熵,而是一个我看不懂的公式
原始LeNet和现在通用模式,还是有很多差别。比如C3层就不是对S2层的完全卷积操作,而是不同的卷积核对应不同的层,作者说是为了减少计算量,更重要是为了打破对称。而在卷积处理后,是现在avg_pool,并且还是乘上一个参数,再加一个bias,才得到采样以后的数值,这个数值还要进行sigmoid。早先的论文很多都是数学公式,不想现在更注重简化,方便工程实现。
可以看出LeNet的时候,还没有dropout, max_pool, relu等优化,但已经把CNN的大框架定下来了。
这篇文章还讲了很多图像分割,后处理等技术,实在看不懂,留到后续再学习吧,现在先把LeNet的结构搞懂就不错。
也就是说,在1998年人们就开始利用CNN自动选择特征,发展到2010s以后,就开始用GPU寻找feature vector,而且有了大量的标注数据。此后,人工寻找好的NN结构,用不同的超参做实验,俗称炼丹师,到2017年后,开始机器寻找好的网络结构(NAS, PNAS, ENAS)
1998----LeNet----Gradient-based learning applied to document recognition
2012 ILSVRC AlexNet----Imagenet classification with deep convolutional neural networks
2013----ILSVRC ZFNet----Visualizing and Understanding Convolutional Networks
2014----AlexNet V2----One weird trick for parallelizing convolutional neural networks
2014----ILSVRC VGGnet----Very deep convolutional networks for large-scale image recognition ----(ICLR 2015)
2014----NiN----Network in Network
2014----ILSVRC GoogLeNet(Inception V1)----Going deeper with convolutions_ILSVRC2014 ----(CVPR 2015)
2015----ILSVRC ResNet----Deep Residual Learning for Image Recognition——(CVPR 2016)
2015----inception v3----Rethinking the Inception Architecture for Computer Vision
2015----ReNet_A Recurrent Neural Network Based
2016---- Neural Architecture Search with Reinforcement Learning
2016----Binarized Neural Networks_Training Neural Networks with Weights and Activations Constrained to+ 1 or−1
2016----Identity Mappings in Deep Residual Networks —— (ECCV 2016)
2016----Inception V4----Inception-ResNet and the Impact of Residual Connections on Learning
2016----Interleaved Group Convolutions for Deep Neural Networks
2016----Residual Networks are Exponential Ensembles of Relatively Shallow Networks
2016----SqueezeNet- AlexNet-level accuracy with 50x fewer parameters and 0.5MB model size
2016----Wide Residual Networks
2017---- FractalNet_Ultra-Deep Neural Networks without Residuals
2017---- Xception_Deep Learning with Depthwise Separable Convolutions
2017----An Analysis of Deep Neural Network Models for Practical Applications
2017----CVPR2017 best paper----DenseNet ----Densely Connected Convolutional Networks
2017---- (ResNext) Aggregated residual transformations for deep neural networks (CVPR 2017)
2017----ILSVRC2017 winner SENet----Squeeze-and-Excitation Networks
2017----Interleaved Group Convolutions for Deep Neural Networks
2017----Learning Transferable Architectures for Scalable Image Recognition
2017----Residual Attention Network for Image Classification
2017----Neural Architecture Search with Reinforcement Learning (ICLR,2017)
2017----Learning Transferable Architectures for Scalable Image Recognition
2017----Progressive Neural Architecture Search
2018----Efficient Neural Architecture Search via Parameter Sharing
2017----CVPR----ShuffleNet_An Extremely Efficient Convolutional Neural Network for Mobile
2017---- MobileNetV1_Efficient Convolutional Neural Networks for Mobile Vision Applications
2018----MobileNetV2----Inverted Residuals and Linear Bottlenecks: Mobile Networks for Classification, Detection and Segmentation
2018----MnasNet: Platform-Aware Neural Architecture Search for Mobile
我原来是不懂PHP怎么生成的页面。后来懂了,类似PHP的框架都是叫MVC,就是获取请求,拉取数据或添加数据到db,然后返回经过数据填充的页面。这里面只是需要记住框架的基本接口,理解基础处理流程。这里面可能混杂了php的语法,html, css, js。都需要想背单词一样把这些接口API背下来,当然每天反复用是可以记住的。反复用是可以记住,这里的主要问题是不知道怎么拓展。对于那些我不知道API可能永远的都没法使用上。
随后出现了ajax(大概2005年)。ajax其实没什么特别的,就是所谓webapp数据变化时,不需要重新刷新页面,用户体验更好了。随后出现了jQuery,可以特别方便的处理ajax和HTML DOM变化,但是永远没学到精髓,只是知道皮毛。现在(2018)好了,随着浏览器实现的js API越来越强大,jQuery基本面临淘汰了。
现在好了,前端的能力越来越强,强大是通过新的功能,新的API,新的编程范式来实现的。旧的还没完全懂,妈的新的又来了。什么HTML5, CSS3, Javascript也开始带上class了。js不仅在学习传统的开发语言,他还有一堆函数式编程的特性,什么callback,arrow function,promise, async/await,这都尼玛什么鬼,老老实实的开发不好么。
我都快成开发领域的恐龙了,从他妈table布局开始,到现在都是什么flex,grid布局,作为恐龙是不是终将面临灭绝这样的惨状。抱怨是没有用的。整体的互联网经济,符合任何其他行业,现在要做的就是看看哪个是自己的兴趣。不要那么执着,好玩就玩下,不好玩了,没意思了,就去整点其他的。没有那么严重。
TL;DR div布局就是display+position。FlexBox布局其实会比div布局要方便一些。
TL;DR : js的一个重要功能,就是实现网页的各种交互效果。主要是通过添加事件处理函数,然后修改DOM元素的style,或者添加预制的css class来实现各种前端展现。
安利一下udemy上的这门课Object-oriented Programming in JavaScript,让我明白了很多困扰我很久的概念。
我没正规做过前端开发,连现在所谓的web后台开发都没做过,这是我始终进展很慢的原因之一。因为别人提到的技术实现,我根本看不懂,即使是花钱,也没法判断投入的是否合理。
我个人的经历与前端开发、javascript简直就是平行空间,就想和现在的邻居,虽然都生活距离很近,但貌似谁也不了解对方的状态。
javascript的标准叫ECMAScript,99年出版的ES3,我可能看过一点,但是那个时候觉得MFC牛逼,甚至操作系统、汇编才牛逼,就压根不喜欢看和界面有关的一切技术。没想到差不多到现在界面技术反而前后通吃了,而且更容易做一个产品出来,后台技术只能做幕后英雄了。ES5是2009年发布的标准,2015年大佬们又发布了ES6,也就是ECMAScript 2015,估计未来还会有ES7,ES8,ESX。。。
随着对用户体验要求越来越高,前端代码肯定越来越复杂,大佬们希望通过更多的语言特性,使前端开发更加工程化。工程化有啥内涵,我也不是很了解,但至少现在能看到的就是模块化,然后提供更便利的工具。