[UFLDL] *Train and Optimize
[Converge] Gradient Descent - Several solvers
[Converge] Weight Initialiser
[Converge] Backpropagation Algorithm 【BP实现细节】
[Converge] Feature Selection in training of Deep Learning 【特性相关性的影响】
[Converge] Training Neural Networks 【cs231n-lec5&6,推荐】
[Converge] Batch Normalisation
- SGD(随机梯度下降)
- LBFGS(受限的BFGS)--> Broyden–Fletcher–Goldfarb–Shanno (BFGS) algorithm
- CG(共轭梯度法)
- 而梯度下降法应用在深度网络中的一个缺点是权值的迭代变化值会很小,很容易收敛到的局部最优点;
- 另一个缺点是梯度下降法不能很好的处理有病态的曲率(比如Rosenbrock函数)的误差函数。
卷积神经网络结构变化——Maxout Networks,Network In Network,Global Average Pooling
顺便理解下相关的概念。
参考资料 [] Maxout Networks,
[] http://www.jianshu.com/p/96791a306ea5
[] Deep learning:四十五(maxout简单理解)
[] 论文笔记 《Maxout Networks》 && 《Network In Network》
[] Fully convolutional networks for semantic segmentation,
[] http://blog.csdn.net/u010402786/article/details/50499864
[] 深度学习(二十六)Network In Network学习笔记
[] Network in Nerwork,
[] Improving neural networks by preventing co-adaptation of feature detectors
Reference
1、Maxout Network
提出了一个概念——线性变化+Max操作可以拟合任意的的凸函数,包括激活函数 (such as Relu)。
(1)
如果激活函数采用sigmoid函数的话,在前向传播过程中,隐含层节点的输出表达式为:
W是2维,这里表示取出的是第i列(对应第i个输出节点),下标i前的省略号表示对应所有行中的第i列中的。
(2)
如果是maxout激活函数,则其隐含层节点的输出表达式为:
W是3维,尺寸为d*m*k,
- d表示输入层节点的个数,
- m表示隐含层节点的个数,
- k表示每个隐含层节点展开k个中间节点,这k个中间节点都是线性输出的,而maxout的每个节点就是取这k个中间节点输出最大的那个值。
参考一个日文的maxout ppt 中的一页ppt如下:
这张图的意识是说,紫圈中的隐藏节点展开成了5个黄色节点,取max。Maxout的拟合能力是非常强的,它可以拟合任意的的凸函数。
从左往右,依次拟合出了ReLU,abs,二次曲线。
作者从数学的角度上也证明了这个结论,即只需2个maxout节点就可以拟合任意的凸函数了(相减),前提是中间节点的个数可以任意多,如下图所示,具体可以翻阅paper[1]。
maxout的一个强假设是输出是位于输入空间的凸集中的….这个假设是否一定成立呢?虽然ReLU是Maxout的一个特例——实际上是得不到ReLU正好的情况的,我们是在学习这个非线性变换,用多个线性变换的组合+Max操作。
Jeff: 是否具有一定的实战价值?还是叫好不叫座?感觉是无关同样的改进,稍微了解下。
2、Network In Network
本文的一些概念,包括1*1卷积,global average pooling都已经成为后来网络设计的标准结构,有独到的见解。
看第一个NIN,本来11*11*3*96(11*11的卷积kernel,输出map 96个)对于一个patch输出96个点,是输出feature map同一个像素的96个channel,但是现在多加了一层MLP,把这96个点做了一个全连接,又输出了96个点
很巧妙,这个新加的MLP层就等价于一个1 * 1 的卷积层,
这样在神经网络结构设计的时候就非常方便了,只要在原来的卷积层后面加一个1*1的卷积层,而不改变输出的size。
注意,每一个卷积层后面都会跟上ReLU。所以,相当于网络变深了,我理解其实这个变深是效果提升的主要因素。
意义在于:成了一个不同特征提取器的综合效果,节省NN空间,但保证效果,这对网络的简化很有意义。
【举例解释,见原文】
这里建立了一个概念,全连接网络可以等价转换到1*1的卷积,这个idea在以后很多网络中都有用到,比如FCN[5]。
3、Global Average Pooling
在Googlenet网络中,也用到了Global Average Pooling,其实是受启发于Network In Network。
Global Average Pooling一般用于放在网络的最后,用于替换全连接FC层,为什么要替换FC?因为在使用中,例如alexnet和vgg网络都在卷积和softmax之间串联了fc层,发现有一些缺点:
(1)参数量极大,有时候一个网络超过80~90%的参数量在最后的几层FC层中;
(2)容易过拟合,很多CNN网络的过拟合主要来自于最后的fc层,因为参数太多,却没有合适的regularizer;过拟合导致模型的泛化能力变弱;
(3)实际应用中非常重要的一点,paper中并没有提到:FC要求输入输出是fix的,也就是说图像必须按照给定大小,而实际中,图像有大有小,fc就很不方便;
作者提出了Global Average Pooling,做法很简单,是对每一个单独的feature map取全局average。要求输出的nodes和分类category数量一致,这样后面就可以直接接softmax了。
作者指出,Global Average Pooling的好处有:
- 因为强行要求最后的feature map数量等于category数量,因此feature map就会被解析为categories confidence maps.
- 没有参数,所以不会过拟合;
- 对一个平面的计算,使得利用了空间信息,对于图像在空间中变化更鲁棒;
举个例子:
假如,最后的一层的数据是10个6*6的特征图,global average pooling是将每一张特征图计算所有像素点的均值,输出一个数据值,
这样10 个特征图就会输出10个数据点,将这些数据点组成一个1*10的向量的话,就成为一个特征向量,就可以送入到softmax的分类中计算了
From: https://alexisbcook.github.io/2017/global-average-pooling-layers-for-object-localization/
In mid-2016, researchers at MIT demonstrated that CNNs with GAP layers (a.k.a. GAP-CNNs) that have been trained for a classification task can also be used for object localization.
That is, a GAP-CNN not only tells us what object is contained in the image - it also tells us where the object is in the image, and through no additional work on our part! The localization is expressed as a heat map (referred to as a class activation map), where the color-coding scheme identifies regions that are relatively important for the GAP-CNN to perform the object identification task.
- 与Dropout不同的是,它不是随机将隐含层节点的输出清0,
- 将节点中的每个与其相连的输入权值以1-p的概率清0。
[UFLDL] *Train and Optimize的更多相关文章
- 本人AI知识体系导航 - AI menu
Relevant Readable Links Name Interesting topic Comment Edwin Chen 非参贝叶斯 徐亦达老板 Dirichlet Process 学习 ...
- [AI] 深度数学 - Bayes
数学似宇宙,韭菜只关心其中实用的部分. scikit-learn (sklearn) 官方文档中文版 scikit-learn Machine Learning in Python 一个新颖的onli ...
- Deep Learning 19_深度学习UFLDL教程:Convolutional Neural Network_Exercise(斯坦福大学深度学习教程)
理论知识:Optimization: Stochastic Gradient Descent和Convolutional Neural Network CNN卷积神经网络推导和实现.Deep lear ...
- Deep Learning 1_深度学习UFLDL教程:Sparse Autoencoder练习(斯坦福大学深度学习教程)
1前言 本人写技术博客的目的,其实是感觉好多东西,很长一段时间不动就会忘记了,为了加深学习记忆以及方便以后可能忘记后能很快回忆起自己曾经学过的东西. 首先,在网上找了一些资料,看见介绍说UFLDL很不 ...
- UFLDL教程之(一)sparseae_exercise
下面,将UFLDL教程中的sparseae_exercise练习中的各函数及注释列举如下 首先,给出各函数的调用关系 主函数:train.m (1)调用sampleIMAGES函数从已知图像中扣取多个 ...
- 深度学习 Deep Learning UFLDL 最新 Tutorial 学习笔记 1:Linear Regression
1 前言 Andrew Ng的UFLDL在2014年9月底更新了. 对于開始研究Deep Learning的童鞋们来说这真的是极大的好消息! 新的Tutorial相比旧的Tutorial添加了Conv ...
- UFLDL教程笔记及练习答案五(自编码线性解码器与处理大型图像**卷积与池化)
自己主动编码线性解码器 自己主动编码线性解码器主要是考虑到稀疏自己主动编码器最后一层输出假设用sigmoid函数.因为稀疏自己主动编码器学习是的输出等于输入.simoid函数的值域在[0,1]之间,这 ...
- (转) How to Train a GAN? Tips and tricks to make GANs work
How to Train a GAN? Tips and tricks to make GANs work 转自:https://github.com/soumith/ganhacks While r ...
- Deep Learning 13_深度学习UFLDL教程:Independent Component Analysis_Exercise(斯坦福大学深度学习教程)
前言 理论知识:UFLDL教程.Deep learning:三十三(ICA模型).Deep learning:三十九(ICA模型练习) 实验环境:win7, matlab2015b,16G内存,2T机 ...
随机推荐
- 20172302 《Java软件结构与数据结构》第三周学习总结
2018年学习总结博客总目录:第一周 第二周 第三周 教材学习内容总结 第五章 队列 1.队列是一种线性集合,其元素从一端加入,从另一端删除:队列元素是按先进先出(FIFO(First in Firs ...
- spring源码分析系列 (5) spring BeanFactoryPostProcessor拓展类PropertyPlaceholderConfigurer、PropertySourcesPlaceholderConfigurer解析
更多文章点击--spring源码分析系列 主要分析内容: 1.拓展类简述: 拓展类使用demo和自定义替换符号 2.继承图UML解析和源码分析 (源码基于spring 5.1.3.RELEASE分析) ...
- Matplotlib新手上路(下)
接上篇继续,这次来演示下如何做动画,以及加载图片 一.动画图 import numpy as np import matplotlib.pyplot as plt import matplotlib. ...
- CentOS -- 添加开机自启动 命令 脚本
如果只是添加一条开机启动的命令: 1. chmod +x /etc/rc.d/rc.local 2. 将命令写到 /etc/rc.d/rc.local 这个文件中 3. reboot
- 微软BI 之SSIS 系列 - Lookup 组件的使用与它的几种缓存模式 - Full Cache, Partial Cache, NO Cache
开篇介绍 先简单的演示一下使用 Lookup 组件实现一个简单示例 - 从数据源表 A 中导出数据到目标数据表 B,如果 A 数据在 B 中不存在就插入新数据到B,如果存在就更新B 和 A 表数据保持 ...
- mock以及特殊场景下对mock数据的处理
一.为什么要mock 工作中遇到以下问题,我们可以使用mock解决: 无法控制第三方系统某接口的返回,返回的数据不满足要求 某依赖系统还未开发完成,就需要对被测系统进行测试 有些系统不支持重复请求,或 ...
- Ubuntu16.04下安装搭配Python3.6相关配置软件方法
1 安装Python3.6.4 此处推荐直接安装Anaconda3,来实现Python3.6.4的环境配置. Anaconda3下载链接:https://www.anaconda.com/downlo ...
- Homebrew macOS 包管理
1.Homebrew 简介 1.1 Homebrew Homebrew 是一款 macOS 平台下的软件包管理工具,拥有安装.卸载.更新.查看.搜索等很多实用的功能.简单的一条指令,就可以实现包管理, ...
- 运行第一个Docker容器-Docker for Web Developers(1)
1. Docker介绍 Docker由dotCloud公司发起的一个内部项目,后来Docker火了,dotCloud公司改名为Docker了: Docker使用了Go语言开发,基于 Linux 内核的 ...
- 菜鸟学Java(二十二)——重新认识泛型
泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数.这种参数类型可以用在类.接口和方法的创建中,分别称为泛型类.泛型接口.泛型方法. Java语言引 ...